diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index ac212377724..0379517190f 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -521,3 +521,17 @@ CREATE TABLE `memo` (
PRIMARY KEY (`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `discord`
+--
+DROP TABLE IF EXISTS `discord`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE IF NOT EXISTS `discord` (
+ `ckey` varchar(32) NOT NULL,
+ `discord_id` bigint(20) NOT NULL,
+ `notify` int(11) NOT NULL,
+ PRIMARY KEY (`ckey`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql
index 4946add50f2..e9a622cf037 100644
--- a/SQL/paradise_schema_prefixed.sql
+++ b/SQL/paradise_schema_prefixed.sql
@@ -520,3 +520,17 @@ CREATE TABLE `SS13_memo` (
PRIMARY KEY (`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `SS13_discord`
+--
+DROP TABLE IF EXISTS `SS13_discord`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE IF NOT EXISTS `SS13_discord` (
+ `ckey` varchar(32) NOT NULL,
+ `discord_id` bigint(20) NOT NULL,
+ `notify` int(11) NOT NULL,
+ PRIMARY KEY (`ckey`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/SQL/updates/4-5.sql b/SQL/updates/4-5.sql
new file mode 100644
index 00000000000..f8f6193239b
--- /dev/null
+++ b/SQL/updates/4-5.sql
@@ -0,0 +1,9 @@
+#Updating the SQL from version 4 to version 5. -AffectedArc07
+#Creating a table to track discord IDs for round notifying
+DROP TABLE IF EXISTS `discord`;
+CREATE TABLE IF NOT EXISTS `discord` (
+ `ckey` varchar(32) NOT NULL,
+ `discord_id` bigint(20) NOT NULL,
+ `notify` int(11) NOT NULL,
+ PRIMARY KEY (`ckey`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
new file mode 100644
index 00000000000..c3cdb64a1b7
--- /dev/null
+++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
@@ -0,0 +1,131 @@
+"aa" = (/turf/space,/area/space)
+"ab" = (/turf/simulated/floor/plating/airless/asteroid,/area/ruin/unpowered)
+"ac" = (/turf/simulated/mineral,/area/ruin/unpowered)
+"ad" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/shard{icon_state = "small"},/turf/simulated/floor/wood{tag = "icon-wood-broken3"; icon_state = "wood-broken3"},/area/ruin/unpowered)
+"ae" = (/turf/simulated/wall/mineral/titanium,/area/ruin/unpowered)
+"af" = (/obj/structure/computerframe,/turf/simulated/floor/wood{tag = "icon-wood-broken3"; icon_state = "wood-broken3"},/area/ruin/unpowered)
+"ag" = (/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/ruin/unpowered)
+"ah" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/shard,/turf/simulated/floor/wood{tag = "icon-wood-broken3"; icon_state = "wood-broken3"},/area/ruin/unpowered)
+"ai" = (/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/ruin/unpowered)
+"aj" = (/obj/structure/chair{dir = 1},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"ak" = (/obj/item/shard,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"al" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"am" = (/obj/structure/table/wood,/obj/item/dice/d20,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"an" = (/obj/item/shard{icon_state = "medium"},/obj/structure/chair/wood/normal{dir = 8},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"ao" = (/obj/item/flag/wiz,/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"ap" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aq" = (/obj/item/clothing/suit/wizrobe,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"ar" = (/obj/item/flag/wiz,/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/wood{tag = "icon-wood-broken3"; icon_state = "wood-broken3"},/area/ruin/unpowered)
+"as" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/ruin/unpowered)
+"at" = (/obj/item/bedsheet/wiz,/obj/structure/bed,/turf/simulated/floor/carpet,/area/ruin/unpowered)
+"au" = (/obj/structure/table/wood,/obj/item/pen,/obj/item/paper/fluff/ruins/wizardcrash,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"av" = (/obj/structure/chair/wood/normal{dir = 8},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aw" = (/obj/item/shard{icon_state = "small"},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"ax" = (/turf/simulated/floor/wood{tag = "icon-wood-broken3"; icon_state = "wood-broken3"},/area/ruin/unpowered)
+"ay" = (/obj/effect/decal/remains/robot,/obj/item/clothing/head/wizard,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"az" = (/obj/item/spellbook/oneuse/charge{desc = "For the technology-hating wizard."; spell = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech; spellname = "Disable Technology"; used = 1},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aA" = (/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/ruin/unpowered)
+"aB" = (/turf/simulated/floor/carpet,/area/ruin/unpowered)
+"aC" = (/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aD" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/storage/backpack/satchel,/obj/item/lighter/zippo,/turf/simulated/floor/carpet,/area/ruin/unpowered)
+"aE" = (/obj/structure/bookcase,/obj/item/book/codex_gigas,/obj/item/book/manual/hydroponics_pod_people,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aF" = (/obj/structure/table/wood,/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/ruin/unpowered)
+"aG" = (/obj/structure/table/wood,/obj/item/candle/eternal,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aH" = (/obj/structure/chair/wood/normal{dir = 4},/turf/simulated/floor/carpet,/area/ruin/unpowered)
+"aI" = (/obj/structure/table/wood,/obj/item/toy/character/wizard,/obj/item/paper/spells,/turf/simulated/floor/carpet,/area/ruin/unpowered)
+"aJ" = (/obj/structure/cult/pylon,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"aL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/ruin/unpowered)
+"aM" = (/obj/machinery/door/airlock/external,/turf/space,/area/ruin/unpowered)
+"aN" = (/obj/structure/bookcase,/obj/item/book/manual/barman_recipes,/obj/item/book/manual/engineering_hacking,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aO" = (/obj/item/storage/bag/books,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aP" = (/obj/item/reagent_containers/food/drinks/oilcan,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/ruin/unpowered)
+"aQ" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"aR" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aS" = (/turf/simulated/floor/plating,/area/ruin/unpowered)
+"aT" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/reagent_dispensers/oil,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"aU" = (/obj/structure/window/full/reinforced,/obj/structure/grille,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aV" = (/obj/item/flag/wiz,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aW" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/ruin/unpowered)
+"aX" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"aY" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/ruin/unpowered)
+"aZ" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"ba" = (/obj/structure/kitchenspike,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/ruin/unpowered)
+"bb" = (/obj/structure/chair,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/ruin/unpowered)
+"bc" = (/obj/effect/decal/remains/human,/obj/item/reagent_containers/food/snacks/meat/monkey,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bd" = (/obj/structure/showcase,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/ruin/unpowered)
+"be" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"bf" = (/obj/item/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bg" = (/obj/item/reagent_containers/food/snacks/meat/monkey,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bh" = (/obj/machinery/door/window,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"bi" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/ruin/unpowered)
+"bj" = (/obj/item/reagent_containers/food/snacks/meat/human,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/ruin/unpowered)
+"bk" = (/obj/structure/rack,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/ruin/unpowered)
+"bl" = (/mob/living/simple_animal/hostile/creature{health = 150; name = "Experiment 17e"},/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bm" = (/obj/item/shard{icon_state = "medium"},/turf/simulated/floor/wood,/area/ruin/unpowered)
+"bn" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/ruin/unpowered)
+"bo" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/ruin/unpowered)
+"bp" = (/obj/structure/rack,/obj/item/twohanded/staff,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/ruin/unpowered)
+"bq" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bs" = (/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/ruin/unpowered)
+"bt" = (/obj/structure/showcase,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/ruin/unpowered)
+"bu" = (/obj/structure/rack,/obj/item/twohanded/staff/broom,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/ruin/unpowered)
+"bv" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/wood,/area/ruin/unpowered)
+"bw" = (/obj/item/storage/toolbox/electrical,/obj/structure/table,/obj/item/clothing/gloves/color/yellow,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bx" = (/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"by" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"bz" = (/mob/living/simple_animal/hostile/mimic/crate,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bA" = (/obj/structure/table,/obj/item/wrench,/obj/item/weldingtool,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bB" = (/obj/machinery/light{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"bC" = (/obj/structure/rack,/obj/item/kitchen/knife/ritual,/obj/effect/decal/cleanable/blood/old,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/ruin/unpowered)
+"bD" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bE" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/ruin/unpowered)
+"bF" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"bG" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/ruin/unpowered)
+"bH" = (/turf/simulated/wall/mineral/titanium,/area/space)
+"bI" = (/obj/structure/window/reinforced,/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"bJ" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"bK" = (/obj/singularity/academy,/turf/space,/area/ruin/unpowered)
+"bL" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"bM" = (/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/mineral/plasma,/area/ruin/unpowered)
+"bN" = (/obj/effect/spawner/lootdrop/wizardcrash,/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/turf/simulated/floor/plating,/area/ruin/unpowered)
+"bO" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/space,/area/ruin/unpowered)
+"bP" = (/obj/item/stack/sheet/mineral/plasma,/obj/item/stack/sheet/mineral/plasma,/obj/structure/table,/turf/simulated/floor/plating,/area/ruin/unpowered)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaababacacacacacaaaaaaaaaaaaaa
+aaaaaaaaacacacacacacacacacabaaaaaaaaaaaa
+aaaaaaaaacacacacacacacacacababacaaaaaaaa
+aaaaaaacacacacacacacacacacacacacacaaaaaa
+aaaaabacacacacacacacacacacacacacacaaaaaa
+aaaaabacacacacacacacacacacacacacacaaaaaa
+aaaaacacacacacacacadaeacacacacacaaaaaaaa
+aaaaacacacacacaeaCafagaeacacacaaaaaaaaaa
+aaaaaaacaeaeahaeaiajakaealaeaeaaaaaaaaaa
+aaaaaaaaaeamanaoapaqaCarasataeaaaaaaaaaa
+aaaaaaaaalauavawaxayazaAasaBalaaaaaaaaaa
+aaaaaaaaaeaCaCaCaCaCaCaCaBaDaeaaaaaaaaaa
+aaaaaaaaaeaEaFaCaCaGaCaCaHaIaeaaaaaaaaaa
+aaaaaaaabOaCaCaCaGaJaGaCaKaLaMaaaaaaaaaa
+aaaaaaaaaeaNaOaCaCaGaCaCaPaQaeaaaaaaaaaa
+aaaaaaaeaeaRaCaCaAaCaCaCaSaTaeaeaaaaaaaa
+aaaaaeaeaeaUaUaUaVaCaVaWaXaXaeaeaeaaaaaa
+aaaaaeaYbcaZaZaUaCaCaCaXbabbbdbCaeaaaaaa
+aaaaaeaSaSaSbfbeaCaCaCbhbibjbEbkaeaaaaaa
+aaaaaeblaSaZaSaUbmaCaCaXbnbobnbpaeaaaaaa
+aaaaaebqbgaSaSaUaCaCaCaXbibsbtbuaeaaaaaa
+aaaaaeaeaeaeaeaeaebvaeaeaeaeaeaeaeaaaaaa
+aaaaaebwbxbBbxaSbybIbyaSbxbBbxbzaeaaaaaa
+aaaaaebAbJbKbLaSbJbKbLaSbJbKbLbPaeaaaaaa
+aaaaaebDbxbMbxaSbxbMbxaSbxbMbxbNaeaaaaaa
+aaaabHaebFbFbFaebFbFbFaebFbFbFaebHaaaaaa
+aaaaaaaebGbGbGaebGbGbGaebGbGbGaeaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm
index 6e739834ab5..f5f1f16b2c1 100644
--- a/_maps/map_files/cyberiad/z2.dmm
+++ b/_maps/map_files/cyberiad/z2.dmm
@@ -329,6 +329,7 @@
"gq" = (/obj/item/trash/raisins,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"gr" = (/obj/item/beach_ball,/turf/simulated/floor/beach/sand,/area/holodeck/source_beach)
"gs" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (NORTHEAST)"; icon_state = "fakewindows"; dir = 5},/area/wizard_station)
+"gt" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 8; height = 20; id = "freegolem_transit"; name = "free golem in transit"; width = 16},/turf/space/transit/horizontal{dir = 4},/area/space)
"gu" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/wizard_station)
"gv" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
"gw" = (/obj/structure/showcase,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
@@ -1742,34 +1743,34 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbW
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAuAuAuAuAuAuAuAuAxMuTuTxNuAuAuAuAuAuAuAuAxOuAuEusaNuruAxIxJxJxJxJxJxKuEusaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatatxRxSxSxSxSxSxSxSxTatataIatataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruExMxVxUxXxWyaxYybxNuExMuTuTuTuTuTuTxNuAuAuAuAuAxMuTxNuAuAycuAxIxJxJxJydxJxJxJxKuEaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataJaJaJaKauauauauauauauauaKaKaKauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSyjyiuTuTykuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJxJypyoysxJxJxJyuaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataKauauauauauauauKqauauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXuTyzuTuTuTuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJyAyBypypyAxJxJyCaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmraNaNatbhauauauauauaubibibiauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqyJuTuTuTyKuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTwUuAuAycuAyLxJxJyAyAyAxJxJyNuEaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmraNaNatbhauauauauauKvbibibiKvauauauauauaKataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEwmyRyPyUySzayVzbwUuEwmuTuTuTuTuTuTwUuAuAwmuTwUuAuAuAuEvPaNwquAyLxJxJxJxJxJyNuEvPaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmrxQxPatbhauauauauauauKvKvKvauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAuAuAuAuAuAuAuAuAwmuTuTwUuAuAuAuAuAzduAuAuAuEuEaNaNaNwquAyLxJxJxJyNuAvPaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryhyeatauauauauauauauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDvuEzezeuEaNuExhzfxhxhxhzfxhuEuEaNaNaNaNwquAxvxuxwuAvPaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryxywatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAxMuTuTuEaNuEzlxhxhGPxhxhzmuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNfwyDyIyFatatbkatatatatatatatatatatatatatbkatataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNuEzvGPxhxhxhGPzwuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryOyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTuTuEaNuEzzxhxhGPxhxhzAuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAusaNwquuuBuBuCwmuTuTuEaNuEzDxhxhxhxhxhzEuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmratblblatatatatatatatatatatatatatblblatataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuraNaNuruEzJzIzKusaNaNaNaNaNuSuTuTuEaNwquAnZHbzMHboauAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWjVjYjXkajZaNjUjWktkvkukajZaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNzTaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAuEzYzUuEuAuAuAuAusaNvquTuTuEaNaNwquAHgHhHiuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwkykxkxkxkAkzaNkwkDkxkxkxkAkzaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruEAcAeAduEAfxhxhAguEAiAhAjAguAxMuTuTuEaNaNaNAkHuHvHwAkaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGkFkIkHkNkMaNkEkGkOkIkPkNkMaNaNaNaNaNaNaNznfZfLyFyFyFyFyFyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNArxhxhxhAsxhxhxhxhAtxhxhxhxhAtuTuTuTuEaNaNwquAuAAuuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNznfZyFyFyFyFyFzjyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEAyAAAzuEzDxhxhzEuEACABADzEuAwmuTuTuEaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVlkXMlmllaNaNaNaNaNaNaNzFgcyFyFyFyFzuztyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAzKAFAEuEuAuAuAuAvPaNuSuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNmrmrmrzPmrzSyFzuzyyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNwquEzJAGuEvPaNaNaNaNaNvquTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrzZAbAamryFyFyFzCyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvPaNuruuuBuBuCxMuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNaNaNaNmrAlAlAmmrAnAoAoAoAoAoataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWlLlNlMkajZaNjUjWlOlQlPkajZaNaNaNaNaNaNmrAlAvmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTwUuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwlRkxkxkxkAkzaNkwlSkxkxkxkAkzaNaNaNaNaNaNmrmrmrmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvhAIvhuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGlTkIlUkNkMaNkEkGlVkIlYkNkMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuEAJuTuTuTAKuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTALuSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVXLXMlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXAOuTuTuTAPuXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqAQuTuTuTARvqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAATASAVAUAWuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuuuBuCuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
-aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataKauauauauauauauKqauauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXuTyzuTuTuTuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTuTynxJxJxJxJxJyAyBypypyAxJxJyCaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmraNaNatbhauauauauauaubibibiauauauauauauaJataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqyJuTuTuTyKuTuTuTuTuTyluTuTymymymymuTuTuTuTuTuTuTuTuTwUuAuAycuAyLxJxJyAyAyAxJxJyNuEaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmraNaNatbhauauauauauKvbibibiKvauauauauauaKataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEwmyRyPyUySzayVzbwUuEwmuTuTuTuTuTuTwUuAuAwmuTwUuAuAuAuEvPaNwquAyLxJxJxJxJxJyNuEvPaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmrxQxPatbhauauauauauauKvKvKvauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAuAuAuAuAuAuAuAuAwmuTuTwUuAuAuAuAuAzduAuAuAuEuEaNaNaNwquAyLxJxJxJyNuAvPaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryhyeatauauauauauauauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDvuEzezeuEaNuExhzfxhxhxhzfxhuEuEaNaNaNaNwquAxvxuxwuAvPaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryxywatauauaKaJaJaKauauauauauauauauauauauataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAxMuTuTuEaNuEzlxhxhGPxhxhzmuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNfwyDyIyFatatbkatatatatatatatatatatatatatbkatataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNuEzvGPxhxhxhGPzwuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryOyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTuTuEaNuEzzxhxhGPxhxhzAuEuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFyFatblblataNaNaNaNaNaNaNaNaNaNaNatblblataNaNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAusaNwquuuBuBuCwmuTuTuEaNuEzDxhxhxhxhxhzEuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmratblblatatatatatatatatatatatatatblblatataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuraNaNuruEzJzIzKusaNaNaNaNaNuSuTuTuEaNwquAnZHbzMHboauAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWjVjYjXkajZaNjUjWktkvkukajZaNaNaNmraNaNaNaNaNaNaNaNaNaNaNmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNzTaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruAuAuAuAuEzYzUuEuAuAuAuAusaNvquTuTuEaNaNwquAHgHhHiuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwkykxkxkxkAkzaNkwkDkxkxkxkAkzaNaNaNmrmrmrmrmrmrmrmrmrmrmrmrmryFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuruEAcAeAduEAfxhxhAguEAiAhAjAguAxMuTuTuEaNaNaNAkHuHvHwAkaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGkFkIkHkNkMaNkEkGkOkIkPkNkMaNaNaNaNaNaNaNznfZfLyFyFyFyFyFyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNArxhxhxhAsxhxhxhxhAtxhxhxhxhAtuTuTuTuEaNaNwquAuAAuuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqgtaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNznfZyFyFyFyFyFzjyFyFmraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquEAyAAAzuEzDxhxhzEuEACABADzEuAwmuTuTuEaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVlkXMlmllaNaNaNaNaNaNaNzFgcyFyFyFyFzuztyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAuAuAzKAFAEuEuAuAuAuAvPaNuSuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNmrmrmrzPmrzSyFzuzyyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNwquEzJAGuEvPaNaNaNaNaNvquTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNmrzZAbAamryFyFyFzCyFyFataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvPaNuruuuBuBuCxMuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjQjPjSjRjTaNaNaNjQjPjSjRjTaNaNaNaNaNaNaNmrAlAlAmmrAnAoAoAoAoAoataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTuTuTuTuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUjWlLlNlMkajZaNjUjWlOlQlPkajZaNaNaNaNaNaNmrAlAvmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvquTuTuTuTuTuTwUuEvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkwlRkxkxkxkAkzaNkwlSkxkxkxkAkzaNaNaNaNaNaNmrmrmrmrmraNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuAvhAIvhuAuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkEkGlTkIlUkNkMaNkEkGlVkIlYkNkMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuEAJuTuTuTAKuEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuSuTuTuTuTALuSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVXLXMlmllaNkUlikVXLXMlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNuXAOuTuTuTAPuXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNvqAQuTuTuTARvqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLxLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAATASAVAUAWuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwquAuuuBuCuAvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwqaNaNaNvPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNatatatatatatatatatatatatatatatatatatatatataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm
index eeb59d4ea5d..9c101ea0e78 100644
--- a/_maps/map_files/cyberiad/z3.dmm
+++ b/_maps/map_files/cyberiad/z3.dmm
@@ -32,22 +32,72 @@
"aF" = (/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plasteel,/area/tcommsat/entrance)
"aG" = (/obj/machinery/light{dir = 4},/obj/structure/closet/emcloset,/obj/effect/decal/warning_stripes/southeast,/turf/simulated/floor/plasteel,/area/tcommsat/entrance)
"aH" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/camera{c_tag = "Telecomms Power Control"; dir = 2; network = list("Telecomms")},/turf/simulated/floor/plating,/area/tcommsat/powercontrol)
+"aI" = (/turf/simulated/mineral/random,/area/mine/dangerous/explored/golem)
+"aJ" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/dangerous/explored/golem)
+"aK" = (/turf/simulated/mineral/random/high_chance,/area/mine/dangerous/explored/golem)
+"aL" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/freegolem)
+"aM" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/freegolem)
+"aN" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"aO" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall8"; tag = "icon-swall12"},/area/shuttle/freegolem)
+"aP" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/freegolem)
+"aQ" = (/obj/structure/closet/crate/golemgear,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"aR" = (/obj/item/storage/toolbox/mechanical,/obj/item/reagent_containers/spray/cleaner,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"aS" = (/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
"aT" = (/obj/structure/lattice,/turf/space,/area/space)
+"aU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"aV" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/freegolem)
+"aW" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_l"},/turf/space,/area/shuttle/freegolem)
+"aX" = (/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"aY" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/shuttle/freegolem)
+"aZ" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"ba" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/space)
"bb" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/space)
"bc" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/space)
"bd" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/space)
+"be" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/shuttle/freegolem)
+"bf" = (/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bg" = (/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bh" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"bi" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area/space)
"bj" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/space)
"bk" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"bl" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/space)
"bm" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/space)
+"bn" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/landmark/free_golem_spawn,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bo" = (/obj/effect/landmark/free_golem_spawn,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"bp" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bq" = (/obj/machinery/mineral/equipment_vendor/golem,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"br" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"bs" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space)
+"bt" = (/obj/item/resonator,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"bu" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/space)
+"bv" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/shuttle/freegolem)
+"bw" = (/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"bx" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/space)
"by" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/space)
"bz" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/space)
+"bA" = (/obj/machinery/mineral/ore_redemption/golem,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bB" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall4"; dir = 2},/area/shuttle/freegolem)
+"bC" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swallc1"; tag = "icon-swall12"},/area/shuttle/freegolem)
+"bD" = (/obj/structure/window/full/shuttle{icon_state = "16"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"bE" = (/obj/structure/statue/gold/rd{name = "statue of the Liberator"},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bF" = (/obj/machinery/computer/shuttle/golem_ship,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bG" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bH" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bI" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; locked = 1},/obj/structure/fans/tiny,/obj/docking_port/mobile{dir = 8; dwidth = 8; height = 20; id = "freegolem"; name = "Free Golem Ship"; roundstart_move = "freegolem_transit"; width = 16},/obj/docking_port/stationary{dir = 8; dwidth = 8; height = 20; id = "freegolem_z3"; name = "Small Asteroid"; width = 16},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bJ" = (/obj/structure/window/full/shuttle{icon_state = "15"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"bK" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/table/wood,/obj/item/bedsheet/rd/royal_cape{layer = 3; pixel_x = 5; pixel_y = 9},/obj/item/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bL" = (/obj/machinery/light,/obj/structure/chair/comfy/purp{icon_state = "comfychair"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bM" = (/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
+"bN" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/freegolem)
+"bO" = (/obj/item/resonator/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bP" = (/obj/machinery/autolathe,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bQ" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"},/area/shuttle/freegolem)
+"bR" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bS" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bT" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bU" = (/obj/machinery/light,/obj/effect/landmark/free_golem_spawn,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"bV" = (/obj/machinery/vending/coffee/free,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"bW" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
"bX" = (/obj/machinery/power/solar,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space)
"bY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space)
@@ -121,6 +171,7 @@
"do" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"dp" = (/obj/structure/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"dq" = (/obj/machinery/computer/telecomms/server{network = list("tcommsat")},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
+"dr" = (/obj/structure/table/wood,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/obj/item/storage/firstaid/brute,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"ds" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"dt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"du" = (/obj/structure/chair{dir = 4},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
@@ -164,19 +215,24 @@
"eg" = (/obj/machinery/telecomms/relay/preset/station,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eh" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"ei" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber)
+"ej" = (/obj/structure/table/wood,/obj/structure/table/wood,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/item/storage/firstaid/fire,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"ek" = (/obj/structure/table/wood,/obj/item/storage/firstaid/adv,/obj/item/storage/firstaid/adv,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"el" = (/obj/machinery/door/window/brigdoor{dir = 1; name = "Telecomms Server Access"; req_access_txt = "61"},/obj/machinery/door/window/brigdoor{dir = 2; name = "Telecomms Server Access"; req_access_txt = "61"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/tcommsat/chamber)
"em" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
"en" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
"eo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"ep" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
+"eq" = (/obj/structure/table/wood,/obj/item/areaeditor/golem,/obj/item/disk/design_disk/golem_shell,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"er" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"es" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
"et" = (/obj/item/radio/intercom{pixel_y = 25},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eu" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ev" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ew" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Telecoms Sat. Central Compartment APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"ex" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
"ey" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ez" = (/obj/machinery/camera{c_tag = "Telecomms Server Room North"; dir = 2; network = list("Telecomms")},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"eA" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
"eB" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eC" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/space)
@@ -184,6 +240,7 @@
"eF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space)
"eG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"eH" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
+"eI" = (/obj/structure/ore_box,/turf/simulated/shuttle/plating,/area/shuttle/freegolem)
"eJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
"eL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
@@ -191,6 +248,7 @@
"eN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/space)
"eO" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/space)
"eP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space)
+"eQ" = (/obj/item/gun/energy/kinetic_accelerator,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"eR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"eS" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
"eT" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
@@ -215,6 +273,7 @@
"fm" = (/obj/structure/table,/obj/item/stock_parts/subspace/analyzer,/obj/item/stock_parts/subspace/analyzer,/obj/item/stock_parts/subspace/analyzer,/obj/machinery/status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/turret_protected/tcomsat)
"fn" = (/obj/machinery/camera{c_tag = "Telecomms East Solars"; dir = 4; network = list("Telecomms")},/turf/space,/area/space)
"fo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space)
+"fp" = (/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"fq" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space)
"fr" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"fs" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomsat)
@@ -223,6 +282,7 @@
"fv" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
"fw" = (/obj/machinery/telecomms/relay/preset/telecomms,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/telecomms/hub/preset,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"fy" = (/obj/machinery/vending/snack/free,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"fz" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"fA" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"fB" = (/obj/structure/sign/nosmoking_2{pixel_x = 32; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -248,6 +308,8 @@
"fV" = (/obj/structure/table,/obj/item/stock_parts/subspace/crystal,/obj/item/stock_parts/subspace/crystal,/obj/item/stock_parts/subspace/crystal,/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor/plasteel,/area/turret_protected/tcomsat)
"fW" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
"fX" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor/plasteel{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
+"fY" = (/obj/machinery/vending/hydronutrients,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
+"fZ" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/freegolem)
"ga" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"gb" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"gd" = (/obj/machinery/camera{c_tag = "Telecomms Server Room South"; dir = 1; network = list("Telecomms")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light,/obj/machinery/hologram/holopad,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -584,29 +646,29 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaMaMaMaMaMaMaMaMaNaNaMaMaOaIaIaIaIaIaKaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaQaQaQaQaQaQaQaQaRaSaSbMaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaSaSaXaSaSaXaSaSaSaXaSaUaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaMaYaZaZaMaMbeaMaZaZaMaMaMaMaMaOaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPfYfZbhbgbgbnboaPbVbgbgbgbhbgbqaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbgbgbgbgbgbtbtaZbgbgbgbgbgbgbgaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaMaYaZaZaMaMaMaMaMbvbwbgbgbgbgeQbAbBbCaJaJaIaIaIaIaIaIaIaIaIaIaKaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbEbFbgbgbgbgbGbgbgaZbgbgbgbgbgbgbgbHbIaJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJbKbLbgbgbgbgbgbgbgaZbgbgbgbgbgbgbgfpbraJaJaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMbeaZaZaMaMaMaMaMbvbwbgbgbgbgbObPbBbQaJaJaIaIaIaIaIaIaIaIaIaIaIaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrbgbgbgbgbgbtbtaZbgbgbgbgbgbgbRaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbSbfbTbgbgbUboaPfybgbgdrejekeqaVaWaIaIaIaIaIaIaKaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMaMbeaZaZaMaMaYaMaZaZaMaMaMaMaMaOaIaIaIaIaIaIaIaIaIaIaKaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaSaSexaSaSexaSaSaSexaSeAaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPeIeIeIeIeIeIeIeIaRaSaSeAaVaWaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaMaMaMaMaMaMaMaMaMaNaNaMaMaOaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaaaaaIaIaIaIaaaaaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaaaaaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -633,4 +695,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
-
diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm
index 423e7068a3a..1454547cbcd 100644
--- a/_maps/map_files/cyberiad/z6.dmm
+++ b/_maps/map_files/cyberiad/z6.dmm
@@ -1159,6 +1159,7 @@
"wo" = (/turf/space,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless/catwalk,/area/derelict/solar_control)
"wp" = (/turf/space,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk,/area/derelict/solar_control)
"wq" = (/turf/space,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless/catwalk,/area/derelict/solar_control)
+"wr" = (/obj/docking_port/stationary{dir = 8; dwidth = 8; height = 20; id = "freegolem_z6"; name = "Near USSP Station"; width = 16},/turf/space,/area/space)
"ws" = (/obj/effect/landmark/burnturf,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/arrival)
"wu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor/plasteel,/area/derelict/eva{name = "Derelict Annex"})
"wv" = (/turf/simulated/floor/plasteel{tag = "icon-dark"; icon_state = "dark"},/area/derelict/crew_quarters)
@@ -1401,7 +1402,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCsCsCsCsCaaoSaaoSaasCsCsCsCsCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoSaaoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakhkhkhkhkhaaoSaaoSaakhkhkgzlzkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakAvmvmvmvmvmrmwlrJwmrmwowozmzlzlzlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawraaaakAvmvmvmvmvmrmwlrJwmrmwowozmzlzlzlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCsCznsCsCaaoSaaoSaasCsCzozlzlaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoSaaoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaakAwlaawmkyaaaaabaaaagUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm
index 6c7fd01c9b8..7f92e592cbf 100644
--- a/_maps/map_files/generic/z5.dmm
+++ b/_maps/map_files/generic/z5.dmm
@@ -565,6 +565,7 @@
"kS" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/mine/eva)
"kT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"kU" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"})
+"kV" = (/obj/docking_port/stationary{dir = 8; dwidth = 8; height = 20; id = "freegolem_z5"; name = "Near Mining Station"; width = 16},/turf/space,/area/space)
"kW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/rack,/obj/item/pickaxe,/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"kX" = (/turf/simulated/wall/r_wall,/area/mine/podbay)
"kZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/mining/glass{name = "Mining Station Bridge"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
@@ -842,7 +843,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaeaeaeaeaeaeabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaeaeaeababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeakaeaeaeaeabaeaeaeaeabababaeaeaeaeaeaeaeaeaeaeaeadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeaeababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakVaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeaeababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaiafaaaaaaaahBabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahamahajaaaahBababababaeaeaeaeaeaeakaeaeaeaeaeaeaeaeaeaeaeaeadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaeabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalapanaoajaahBabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeakaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaeabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm
index 42835d43813..b1186ce1e0d 100644
--- a/code/__DEFINES/gamemode.dm
+++ b/code/__DEFINES/gamemode.dm
@@ -12,6 +12,7 @@
#define GAMEMODE_IS_NATIONS (ticker && istype(ticker.mode, /datum/game_mode/nations))
#define GAMEMODE_IS_NUCLEAR (ticker && istype(ticker.mode, /datum/game_mode/nuclear))
#define GAMEMODE_IS_REVOLUTION (ticker && istype(ticker.mode, /datum/game_mode/revolution))
+#define GAMEMODE_IS_WIZARD (ticker && istype(ticker.mode, /datum/game_mode/wizard))
//special roles
// Distinct from the ROLE_X defines because some antags have multiple special roles but only one ban type
@@ -24,6 +25,7 @@
#define SPECIAL_ROLE_CULTIST "Cultist"
#define SPECIAL_ROLE_DEATHSQUAD "Death Commando"
#define SPECIAL_ROLE_ERT "Response Team"
+#define SPECIAL_ROLE_FREE_GOLEM "Free Golem"
#define SPECIAL_ROLE_GOLEM "Golem"
#define SPECIAL_ROLE_HEAD_REV "Head Revolutionary"
#define SPECIAL_ROLE_HONKSQUAD "Honksquad"
diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm
index 5076a65db47..0fb9253a083 100644
--- a/code/__DEFINES/genetics.dm
+++ b/code/__DEFINES/genetics.dm
@@ -8,18 +8,16 @@
// Used in preferences.
#define DISABILITY_FLAG_NEARSIGHTED 1
#define DISABILITY_FLAG_FAT 2
-#define DISABILITY_FLAG_EPILEPTIC 4
-#define DISABILITY_FLAG_DEAF 8
-#define DISABILITY_FLAG_BLIND 16
-#define DISABILITY_FLAG_MUTE 32
-#define DISABILITY_FLAG_COLOURBLIND 64
-#define DISABILITY_FLAG_WINGDINGS 128
-#define DISABILITY_FLAG_TOURETTES 512
-#define DISABILITY_FLAG_NERVOUS 1024
-#define DISABILITY_FLAG_SWEDISH 2048
-#define DISABILITY_FLAG_SCRAMBLED 4096 // incoherent speech
-#define DISABILITY_FLAG_LISP 8192
-#define DISABILITY_FLAG_DIZZY 16384
+#define DISABILITY_FLAG_BLIND 4
+#define DISABILITY_FLAG_MUTE 8
+#define DISABILITY_FLAG_COLOURBLIND 16
+#define DISABILITY_FLAG_WINGDINGS 32
+#define DISABILITY_FLAG_NERVOUS 64
+#define DISABILITY_FLAG_SWEDISH 128
+#define DISABILITY_FLAG_LISP 256
+#define DISABILITY_FLAG_DIZZY 512
+#define DISABILITY_FLAG_CHAV 1024
+#define DISABILITY_FLAG_DEAF 2048
///////////////////////////////////////
// MUTATIONS
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index c59d39dc14c..7783216427b 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -367,7 +367,7 @@
#define INVESTIGATE_BOMB "bombs"
// The SQL version required by this version of the code
-#define SQL_VERSION 4
+#define SQL_VERSION 5
// Vending machine stuff
#define CAT_NORMAL 1
@@ -391,3 +391,7 @@
#define MOUSE_OPACITY_TRANSPARENT 0
#define MOUSE_OPACITY_ICON 1
#define MOUSE_OPACITY_OPAQUE 2
+
+// Defib stats
+#define DEFIB_TIME_LIMIT 120
+#define DEFIB_TIME_LOSS 60
\ No newline at end of file
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index c7380d9f402..9dd3c870d51 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -59,10 +59,16 @@
/proc/sanitize(var/t,var/list/repl_chars = null)
return html_encode(sanitize_simple(t,repl_chars))
+// Gut ANYTHING that isnt alphanumeric, or brackets
/proc/paranoid_sanitize(t)
var/regex/alphanum_only = regex("\[^a-zA-Z0-9# ,.?!:;()]", "g")
return alphanum_only.Replace(t, "#")
+// Less agressive, to allow discord features, such as <>, / and @
+/proc/not_as_paranoid_sanitize(t)
+ var/regex/alphanum_slashes_only = regex("\[^a-zA-Z0-9# ,.?!:;()/<>@]", "g")
+ return alphanum_slashes_only.Replace(t, "#")
+
//Runs sanitize and strip_html_simple
//I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' after sanitize() calls byond's html_encode()
/proc/strip_html(var/t,var/limit=MAX_MESSAGE_LEN)
diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm
index e88c2dfbb28..be5f4867c56 100644
--- a/code/_globalvars/lists/names.dm
+++ b/code/_globalvars/lists/names.dm
@@ -9,6 +9,7 @@ GLOBAL_LIST_INIT(first_names_female, file2list("config/names/first_female.txt"))
GLOBAL_LIST_INIT(last_names, file2list("config/names/last.txt"))
GLOBAL_LIST_INIT(clown_names, file2list("config/names/clown.txt"))
GLOBAL_LIST_INIT(mime_names, file2list("config/names/mime.txt"))
+GLOBAL_LIST_INIT(golem_names, file2list("config/names/golem.txt"))
GLOBAL_LIST_INIT(verbs, file2list("config/names/verbs.txt"))
GLOBAL_LIST_INIT(adjectives, file2list("config/names/adjectives.txt"))
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index 3256f6375e9..78148aee00e 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -37,7 +37,6 @@ GLOBAL_LIST_INIT(tracked_implants, list()) //list of all current implants that
GLOBAL_LIST_INIT(pinpointer_list, list()) //list of all pinpointers. Used to change stuff they are pointing to all at once.
GLOBAL_LIST_INIT(nuclear_uplink_list, list()) //list of all existing nuke ops uplinks
GLOBAL_LIST_INIT(abductor_equipment, list()) //list of all abductor equipment
-
GLOBAL_LIST_INIT(global_intercoms, list()) //list of all intercomms, across all z-levels
GLOBAL_LIST_INIT(global_radios, list()) //list of all radios, across all z-levels
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 17f8fcd3865..197a648b315 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -67,6 +67,9 @@
var/assistantlimit = 0 //enables assistant limiting
var/assistantratio = 2 //how many assistants to security members
+ var/prob_free_golems = 75 //chance for free golems spawners to appear roundstart
+ var/unrestricted_free_golems = FALSE //if true, free golems can appear on all roundtypes
+
var/traitor_objectives_amount = 2
var/shadowling_max_age = 0
@@ -277,6 +280,12 @@
if("jobs_have_minimal_access")
config.jobs_have_minimal_access = 1
+ if("prob_free_golems")
+ config.prob_free_golems = text2num(value)
+
+ if("unrestricted_free_golems")
+ config.unrestricted_free_golems = TRUE
+
if("shadowling_max_age")
config.shadowling_max_age = text2num(value)
@@ -393,10 +402,10 @@
if("githuburl")
config.githuburl = value
-
+
if("discordurl")
config.discordurl = value
-
+
if("donationsurl")
config.donationsurl = value
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index 50ad6f028b0..018d5bb3496 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -175,3 +175,10 @@
description = "The crew of a space station awaken one hundred years after a crisis. Awaking to a derelict space station on the verge of collapse, and a hostile force of invading \
hivebots. Can the surviving crew overcome the odds and survive and rebuild, or will the cold embrace of the stars become their new home?"
cost = 2
+
+/datum/map_template/ruin/space/wizardcrash
+ id = "wizardcrash"
+ suffix = "wizardcrash.dmm"
+ name = "Crashed Wizard Shuttle"
+ description = "A shuttle of the Wizard Federation, sent out to crush some wandless scum. Unfortunately, the pilot suffered a magic-related accident and the shuttle crashed into a nearby asteroid."
+ cost = 2
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 872b443c124..ac2b07ad243 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -169,7 +169,6 @@ var/list/ghostteleportlocs = list()
music = "music/escape.ogg"
icon_state = "shuttle2"
-
/area/shuttle/pod_1
name = "\improper Escape Pod One"
music = "music/escape.ogg"
@@ -461,6 +460,11 @@ var/list/ghostteleportlocs = list()
/area/shuttle/trade/sol
name = "Sol Freighter"
+/area/shuttle/freegolem
+ name = "Free Golem Ship"
+ icon_state = "purple"
+ xenobiology_compatible = TRUE
+
/area/airtunnel1/ // referenced in airtunnel.dm:759
/area/dummy/ // Referenced in engine.dm:261
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 2c75d6f36e2..178605853e8 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -164,6 +164,11 @@
var/image/holder = hud_list[STATUS_HUD]
var/mob/living/simple_animal/borer/B = has_brain_worms()
if(stat == DEAD || (status_flags & FAKEDEATH))
+ if(timeofdeath)
+ var/tdelta = round(world.time - timeofdeath)
+ if(tdelta < (DEFIB_TIME_LIMIT * 10))
+ holder.icon_state = "huddefib"
+ return
holder.icon_state = "huddead"
else if(status_flags & XENO_HOST)
holder.icon_state = "hudxeno"
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index 42a42240ad5..41068876a54 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -12,6 +12,7 @@ var/list/blob_nodes = list()
required_enemies = 1
recommended_enemies = 1
restricted_jobs = list("Cyborg", "AI")
+ free_golems_disabled = TRUE
var/declared = 0
var/burst = 0
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index a2acb097b93..1423e9155b4 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -44,6 +44,7 @@ var/global/list/all_cults = list()
required_players = 30
required_enemies = 3
recommended_enemies = 4
+ free_golems_disabled = TRUE
var/datum/mind/sacrifice_target = null
var/finished = 0
diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm
index 987223ed933..875e8a3d1e9 100644
--- a/code/game/gamemodes/cult/talisman.dm
+++ b/code/game/gamemodes/cult/talisman.dm
@@ -419,4 +419,5 @@
/obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user)
user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \
"Your [src] shatters in a discharge of dark magic!")
+ qdel(src)
. = ..()
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 863b31832a0..76074c254bb 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -27,6 +27,7 @@
var/recommended_enemies = 0
var/newscaster_announcements = null
var/ert_disabled = 0
+ var/free_golems_disabled = FALSE
var/uplink_welcome = "Syndicate Uplink Console:"
var/uplink_uses = 20
@@ -79,6 +80,7 @@
// feedback_set_details("revision","[revdata.revision]")
feedback_set_details("server_ip","[world.internet_address]:[world.port]")
generate_station_goals()
+ check_free_golems()
start_state = new /datum/station_state()
start_state.count()
return 1
@@ -494,4 +496,10 @@ proc/display_roundstart_logout_report()
/datum/game_mode/proc/declare_station_goal_completion()
for(var/V in station_goals)
var/datum/station_goal/G = V
- G.print_result()
\ No newline at end of file
+ G.print_result()
+
+/datum/game_mode/proc/check_free_golems() //check config and gamemode for free golems setting and run the prob to check if the round will have free golems spawned or not
+ if((config.unrestricted_free_golems || !free_golems_disabled) && prob(config.prob_free_golems))
+ for(var/obj/effect/landmark/free_golem_spawn/L in GLOB.landmarks_list)
+ if(isturf(L.loc))
+ new /obj/effect/mob_spawn/human/golem/adamantine(L.loc)
\ No newline at end of file
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index a3d4a89033a..195629197c5 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -12,6 +12,7 @@ proc/issyndicate(mob/living/M as mob)
required_players = 30 // 30 players - 5 players to be the nuke ops = 25 players remaining
required_enemies = 5
recommended_enemies = 5
+ free_golems_disabled = TRUE
var/const/agents_possible = 5 //If we ever need more syndicate agents.
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index 5951814660b..b249ebe8520 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -7,6 +7,7 @@
required_players = 20
required_enemies = 1
recommended_enemies = 1
+ free_golems_disabled = TRUE
var/use_huds = 0
var/finished = 0
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index f4910a88c95..7e3013658c8 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -107,6 +107,8 @@ var/const/access_trade_sol = 160
//Awaymissions
/var/const/access_away01 = 271
+//Ghost roles
+var/const/access_free_golems = 300
/obj/var/list/req_access = null
/obj/var/req_access_txt = "0"
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 68b06b8e000..61e458927e9 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -118,7 +118,7 @@
return 0
if(disabilities_allowed)
return 0
- var/list/prohibited_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_BLIND, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_SCRAMBLED, DISABILITY_FLAG_EPILEPTIC, DISABILITY_FLAG_TOURETTES, DISABILITY_FLAG_DIZZY)
+ var/list/prohibited_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY)
for(var/i = 1, i < prohibited_disabilities.len, i++)
var/this_disability = prohibited_disabilities[i]
if(C.prefs.disabilities & this_disability)
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 2e532ff6322..0b858a744ed 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -197,40 +197,18 @@ var/global/datum/controller/occupations/job_master
if(!candidates.len)
continue
- // Build a weighted list, weight by age.
- var/list/weightedCandidates = list()
-
- // Different head positions have different good ages.
- var/good_age_minimal = 25
- var/good_age_maximal = 60
- if(command_position == "Captain")
- good_age_minimal = 30
- good_age_maximal = 70 // Old geezer captains ftw
+ var/list/filteredCandidates = list()
for(var/mob/V in candidates)
// Log-out during round-start? What a bad boy, no head position for you!
if(!V.client)
continue
- var/age = V.client.prefs.age
- switch(age)
- if(good_age_minimal - 10 to good_age_minimal)
- weightedCandidates[V] = 3 // Still a bit young.
- if(good_age_minimal to good_age_minimal + 10)
- weightedCandidates[V] = 6 // Better.
- if(good_age_minimal + 10 to good_age_maximal - 10)
- weightedCandidates[V] = 10 // Great.
- if(good_age_maximal - 10 to good_age_maximal)
- weightedCandidates[V] = 6 // Still good.
- if(good_age_maximal to good_age_maximal + 10)
- weightedCandidates[V] = 6 // Bit old, don't you think?
- if(good_age_maximal to good_age_maximal + 50)
- weightedCandidates[V] = 3 // Geezer.
- else
- // If there's ABSOLUTELY NOBODY ELSE
- if(candidates.len == 1)
- weightedCandidates[V] = 1
+ filteredCandidates += V
- var/mob/new_player/candidate = pickweight(weightedCandidates)
+ if(!filteredCandidates.len)
+ continue
+
+ var/mob/new_player/candidate = pick(filteredCandidates)
if(AssignRole(candidate, command_position))
return 1
@@ -448,7 +426,7 @@ var/global/datum/controller/occupations/job_master
to_chat(H, "As a member of Security, you are to know Space Law, Legal Standard Operating Procedure, as well as your Department SOP")
if(job.req_admin_notify)
to_chat(H, "You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.")
-
+
return H
/datum/controller/occupations/proc/EquipRank(mob/living/carbon/human/H, rank, joined_late = 0) // Equip and put them in an area
if(!H)
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index feb70cdbae2..a4fc67ddf32 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -14,18 +14,14 @@
dir = WEST
var/orient = "LEFT" // "RIGHT" changes the dir suffix to "-r"
var/mob/living/carbon/human/occupant = null
- var/possible_chems = list(list("epinephrine", "ether", "salbutamol", "styptic_powder", "silver_sulfadiazine"),
- list("epinephrine", "ether", "salbutamol", "styptic_powder", "silver_sulfadiazine", "oculine"),
- list("epinephrine", "ether", "salbutamol", "styptic_powder", "silver_sulfadiazine", "oculine", "charcoal", "mutadone", "mannitol"),
- list("epinephrine", "ether", "salbutamol", "styptic_powder", "silver_sulfadiazine", "oculine", "charcoal", "mutadone", "mannitol", "pen_acid", "omnizine"))
- var/emergency_chems = list("epinephrine") // Desnowflaking
+ var/possible_chems = list("ephedrine", "salglu_solution", "salbutamol", "charcoal")
+ var/emergency_chems = list("ephedrine") // Desnowflaking
var/amounts = list(5, 10)
var/obj/item/reagent_containers/glass/beaker = null
var/filtering = 0
var/max_chem
var/initial_bin_rating = 1
var/min_health = -25
- var/injection_chems = list()
var/controls_inside = FALSE
idle_power_usage = 1250
active_power_usage = 2500
@@ -68,13 +64,9 @@
/obj/machinery/sleeper/RefreshParts()
var/E
- var/I
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
E += B.rating
- for(var/obj/item/stock_parts/manipulator/M in component_parts)
- I += M.rating
- injection_chems = possible_chems[I]
max_chem = E * 20
min_health = -E * 25
@@ -216,7 +208,7 @@
data["beakerFreeSpace"] = 0
var/chemicals[0]
- for(var/re in injection_chems)
+ for(var/re in possible_chems)
var/datum/reagent/temp = GLOB.chemical_reagents_list[re]
if(temp)
var/reagent_amount = 0
@@ -419,7 +411,7 @@
A.forceMove(loc)
/obj/machinery/sleeper/proc/inject_chemical(mob/living/user as mob, chemical, amount)
- if(!(chemical in injection_chems))
+ if(!(chemical in possible_chems))
to_chat(user, "The sleeper does not offer that chemical!")
return
@@ -559,6 +551,8 @@
/obj/machinery/sleeper/syndie
icon_state = "sleeper_s-open"
base_icon = "sleeper_s"
+ possible_chems = list("epinephrine", "ether", "salbutamol", "styptic_powder", "silver_sulfadiazine")
+ emergency_chems = list("epinephrine")
controls_inside = TRUE
light_color = LIGHT_COLOR_DARKRED
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 8e1e16e1fac..9060833d585 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -316,6 +316,9 @@
/obj/item/circuitboard/white_ship
name = "circuit Board (White Ship)"
build_path = /obj/machinery/computer/shuttle/white_ship
+/obj/item/circuitboard/golem_ship
+ name = "circuit Board (Golem Ship)"
+ build_path = /obj/machinery/computer/shuttle/golem_ship
/obj/item/circuitboard/shuttle/syndicate
name = "circuit board (Syndicate Shuttle)"
build_path = /obj/machinery/computer/shuttle/syndicate
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 114835b21c3..01a30cdbee7 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -944,6 +944,10 @@ to destroy them and players will be able to make replacements.
/obj/item/stock_parts/manipulator = 1,
/obj/item/assembly/igniter = 1)
+/obj/item/circuitboard/ore_redemption/golem
+ name = "circuit board (Golem Ore Redemption)"
+ build_path = /obj/machinery/mineral/ore_redemption/golem
+
/obj/item/circuitboard/mining_equipment_vendor
name = "circuit board (Mining Equipment Vendor)"
build_path = /obj/machinery/mineral/equipment_vendor
@@ -953,6 +957,10 @@ to destroy them and players will be able to make replacements.
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/matter_bin = 3)
+/obj/item/circuitboard/mining_equipment_vendor/golem
+ name = "circuit board (Mining Equipment Vendor)"
+ build_path = /obj/machinery/mineral/equipment_vendor/golem
+
/obj/item/circuitboard/clawgame
name = "circuit board (Claw Game)"
build_path = /obj/machinery/arcade/claw
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 4c75e5dca8a..fc60d8f005d 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -377,16 +377,10 @@
occupant.Sleeping(max(5/efficiency, (1/occupant.bodytemperature)*2000/efficiency))
occupant.Paralyse(max(5/efficiency, (1/occupant.bodytemperature)*3000/efficiency))
if(air_contents.oxygen > 2)
- if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1)
+ if(occupant.getOxyLoss())
+ occupant.adjustOxyLoss(-10)
else
- occupant.adjustOxyLoss(-1)
- //severe damage should heal waaay slower without proper chemicals
- if(occupant.bodytemperature < 225)
- if(occupant.getToxLoss())
- occupant.adjustToxLoss(max(-efficiency, (-20*(efficiency ** 2)) / occupant.getToxLoss()))
- var/heal_brute = occupant.getBruteLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getBruteLoss()) : 0
- var/heal_fire = occupant.getFireLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getFireLoss()) : 0
- occupant.heal_organ_damage(heal_brute, heal_fire)
+ occupant.adjustOxyLoss(-2)
if(beaker && next_trans == 0)
var/proportion = 10 * min(1/beaker.volume, 1)
// Yes, this means you can get more bang for your buck with a beaker of SF vs a patch
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 626662b9567..1dacf315e9c 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -293,4 +293,7 @@
/obj/effect/landmark/battle_mob_point
- name = "Nanomob Battle Avatar Spawn Point"
\ No newline at end of file
+ name = "Nanomob Battle Avatar Spawn Point"
+
+/obj/effect/landmark/free_golem_spawn
+ name = "Free Golem Spawn Point"
\ No newline at end of file
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index 315eacb8f95..3ce114bde9b 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -68,6 +68,22 @@
..()
qdel(src)
+//free golem blueprints, like permit but can claim as much as needed
+
+/obj/item/areaeditor/golem
+ name = "Golem Land Claim"
+ desc = "Used to define new areas in space."
+ fluffnotice = "Praise the Liberator!"
+
+/obj/item/areaeditor/golem/attack_self(mob/user)
+ . = ..()
+ var/area/A = get_area()
+ if(get_area_type() == AREA_STATION)
+ . += "
According to the [src], you are now in \"[sanitize(A.name)]\".
"
+ var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500)
+ popup.set_content(.)
+ popup.open()
+ onclose(usr, "blueprints")
//Station blueprints!!!
/obj/item/areaeditor/blueprints
@@ -252,6 +268,8 @@
return BORDER_BETWEEN
if(istype(T2, /turf/simulated/wall))
return BORDER_2NDTILE
+ if(istype(T2, /turf/simulated/mineral))
+ return BORDER_2NDTILE
if(!istype(T2, /turf/simulated))
return BORDER_BETWEEN
@@ -312,3 +330,4 @@
name = "station schematics"
desc = "A digital copy of the station blueprints stored in your memory."
fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station."
+
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index bcc69badc38..dd214c7a673 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -162,6 +162,10 @@ REAGENT SCANNER
user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
user.show_message("Time of Death: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]")
+ var/tdelta = round(world.time - M.timeofdeath)
+ if(tdelta < (DEFIB_TIME_LIMIT * 10))
+ user.show_message("Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!")
+
if(istype(M, /mob/living/carbon/human) && mode == 1)
var/mob/living/carbon/human/H = M
var/list/damaged = H.get_damaged_organs(1,1)
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 5c6038e46c2..615882021b4 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -11,6 +11,8 @@ Mineral Sheets
- Tranqillite
- Enriched Uranium
- Platinum
+ - Alien Alloy
+ - Adamantine
*/
var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
@@ -102,6 +104,10 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \
)
+var/global/list/datum/stack_recipe/adamantine_recipes = list(
+ new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount = 1, res_amount = 1), \
+ )
+
/obj/item/stack/sheet/mineral
force = 5
throwforce = 5
@@ -301,3 +307,16 @@ var/global/list/datum/stack_recipe/plastitanium_recipes = list (
/obj/item/stack/sheet/mineral/abductor/New(loc, amount=null)
recipes = abductor_recipes
..()
+
+/obj/item/stack/sheet/mineral/adamantine
+ name = "adamantine"
+ desc = "A strange mineral used in the construction of sentient golems."
+ icon_state = "sheet-adamantine"
+ singular_name = "adamantine sheet"
+ origin_tech = "materials=5"
+ merge_type = /obj/item/stack/sheet/mineral/adamantine
+ wall_allowed = FALSE
+
+/obj/item/stack/sheet/mineral/adamantine/New(loc, amount = null)
+ recipes = adamantine_recipes
+ ..()
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 1f74c36a83a..150b21692f2 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -785,6 +785,27 @@
icon_state = "ERT_engineering"
/obj/item/card/id/ert/medic
icon_state = "ERT_medical"
+
+/obj/item/card/id/golem
+ name = "Free Golem ID"
+ desc = "A card used to claim mining points and buy gear. Use it to mark it as yours."
+ icon_state = "research"
+ access = list(access_free_golems, access_robotics, access_clown, access_mime) //access to robots/mechs
+ var/registered = FALSE
+
+/obj/item/card/id/golem/attack_self(mob/user as mob)
+ if(!registered && ishuman(user))
+ registered_name = user.real_name
+ SetOwnerInfo(user)
+ assignment = "Free Golem"
+ RebuildHTML()
+ UpdateName()
+ desc = "A card used to claim mining points and buy gear."
+ registered = TRUE
+ to_chat(user, "The ID is now registered as yours.")
+ else
+ ..()
+
// Decals
/obj/item/id_decal
name = "identification card decal"
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index 73bbd0d29d2..256656dfa31 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -357,8 +357,8 @@
QDEL_NULL(ghost)
var/tplus = world.time - H.timeofdeath
- var/tlimit = 3000 //past this much time the patient is unrecoverable (in deciseconds)
- var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting
+ var/tlimit = DEFIB_TIME_LIMIT * 10 //past this much time the patient is unrecoverable (in deciseconds)
+ var/tloss = DEFIB_TIME_LOSS * 10 //brain damage starts setting in on the patient after some time left rotting
var/total_burn = 0
var/total_brute = 0
if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
@@ -420,6 +420,8 @@
H.emote("gasp")
if(tplus > tloss)
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
+ H.med_hud_set_health()
+ H.med_hud_set_status()
defib.deductcharge(revivecost)
add_attack_logs(user, M, "Revived with [src]")
else
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index cdcc299ecaf..2d06c0fde80 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -197,6 +197,22 @@
desc = "It's a very fancy satchel made with fine leather."
icon_state = "satchel"
burn_state = FIRE_PROOF
+ var/strap_side_straight = FALSE
+
+/obj/item/storage/backpack/satchel/verb/switch_strap()
+ set name = "Switch Strap Side"
+ set category = "Object"
+ set src in usr
+
+ if(usr.incapacitated())
+ return
+ strap_side_straight = !strap_side_straight
+ icon_state = strap_side_straight ? "satchel-flipped" : "satchel"
+ if(ishuman(loc))
+ var/mob/living/carbon/human/H = loc
+ H.update_inv_back()
+
+
/obj/item/storage/backpack/satcheldeluxe
name = "leather satchel"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index acea165b9ae..cfa33544f98 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -1003,6 +1003,18 @@
desc = "A colorful cardboard box for the clown"
icon_state = "box_clown"
+/obj/item/storage/box/rndboards
+ name = "the Liberator's legacy"
+ desc = "A box containing a gift for worthy golems."
+
+/obj/item/storage/box/rndboards/New()
+ ..()
+ contents = list()
+ new /obj/item/circuitboard/protolathe(src)
+ new /obj/item/circuitboard/destructive_analyzer(src)
+ new /obj/item/circuitboard/circuit_imprinter(src)
+ new /obj/item/circuitboard/rdconsole/public(src)
+
#undef NODESIGN
#undef NANOTRASEN
#undef SYNDI
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 7051b9cf342..61113a4864a 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -119,6 +119,11 @@ LINEN BINS
dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director")
nightmare_messages = list("toxins full of plasma", "UPGRADE THE SLEEPERS", "rogue ai")
+/obj/item/bedsheet/rd/royal_cape
+ name = "Royal Cape of the Liberator"
+ desc = "Majestic."
+ dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever")
+
/obj/item/bedsheet/medical
name = "medical blanket"
desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station."
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index c98fe24aa57..d44ec20c515 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -642,3 +642,15 @@
if(prob(10))
new /obj/item/bikehorn/rubberducky(src)
..()
+
+//crates of gear in the free golem ship
+/obj/structure/closet/crate/golemgear/New()
+ ..()
+ new /obj/item/storage/backpack/industrial(src)
+ new /obj/item/shovel(src)
+ new /obj/item/pickaxe(src)
+ new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
+ new /obj/item/storage/bag/ore(src)
+ new /obj/item/clothing/glasses/meson(src)
+ new /obj/item/card/id/golem(src)
+ new /obj/item/flashlight/lantern(src)
\ No newline at end of file
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 465cb648169..175743e79aa 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1067,3 +1067,28 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
continue
result[1]++
return result
+
+//Discord duplications
+/datum/admins/proc/discord_duplicates()
+ if(!usr.client.holder)
+ return
+ var/dat = "Discord Duplicates"
+ dat += "Discord IDs with more than one ckey linked are shown below
| Discord ID | CKEYs | Unlink | "
+ // If anyone reads this, I spent a whole 30 minutes writing just this fucking query. It is the messiest SQL statement I have ever written
+ // If anyone even thinks about touching this I will impale you on a railroad spike
+ // It hurts to wake up in the morning, -aa07
+ var/DBQuery/discord_ids = dbcon.NewQuery("SELECT a.* FROM [format_table_name("discord")] a JOIN (SELECT discord_id, ckey, COUNT(*) FROM [format_table_name("discord")] GROUP BY discord_id HAVING count(*) > 1 ) b ON a.discord_id = b.discord_id ORDER BY a.discord_id")
+ if(!discord_ids.Execute())
+ var/err = discord_ids.ErrorMsg()
+ log_game("SQL ERROR while selecting discord accounts. Error : \[[err]\]\n")
+ return
+ while(discord_ids.NextRow())
+ var/ckey = discord_ids.item[1]
+ var/id = discord_ids.item[2]
+ dat += "
|---|
| " + id + " | "
+ dat += "" + ckey + " | "
+ dat += "Unlink |
"
+
+ dat += "
"
+
+ usr << browse(dat, "window=duplicates;size=500x480")
\ No newline at end of file
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 5130f6ff2c1..0c4dd38ef5f 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -79,6 +79,7 @@ var/list/admin_verbs_admin = list(
/client/proc/list_ssds,
/client/proc/cmd_admin_headset_message,
/client/proc/spawn_floor_cluwne,
+ /client/proc/show_discord_duplicates,
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -1045,3 +1046,12 @@ var/list/admin_verbs_ticket = list(
log_admin("[key_name(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.")
message_admins("[key_name_admin(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.")
+
+/client/proc/show_discord_duplicates()
+ set name = "Show Duplicate Discord Links"
+ set category = "Admin"
+
+ if(!check_rights(R_ADMIN))
+ return
+
+ holder.discord_duplicates()
\ No newline at end of file
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 5dbaf81bf6b..03d2940b32d 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -3349,6 +3349,20 @@
// Refresh the page
src.view_flagged_books()
+ // Force unlink a discord key
+ else if(href_list["force_discord_unlink"])
+ if(!check_rights(R_ADMIN))
+ return
+ var/target_ckey = href_list["force_discord_unlink"]
+ var/DBQuery/admin_unlink_discord_id = dbcon.NewQuery("DELETE FROM [format_table_name("discord")] WHERE ckey = '[target_ckey]'")
+ if(!admin_unlink_discord_id.Execute())
+ var/err = admin_unlink_discord_id.ErrorMsg()
+ log_game("SQL ERROR while admin-unlinking discord account. Error : \[[err]\]\n")
+ return
+ to_chat(src, "Successfully forcefully unlinked discord account from [target_ckey]")
+ message_admins("[key_name_admin(usr)] forcefully unlinked the discord account belonging to [target_ckey]")
+ log_admin("[key_name_admin(usr)] forcefully unlinked the discord account belonging to [target_ckey]")
+
/client/proc/create_eventmob_for(var/mob/living/carbon/human/H, var/killthem = 0)
if(!check_rights(R_EVENT))
return
diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm
new file mode 100644
index 00000000000..3fe97cded4e
--- /dev/null
+++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm
@@ -0,0 +1,136 @@
+//Golem shells: Spawns in Free Golem ships in lavaland, or through xenobiology adamantine extract.
+//Xenobiology golems are slaved to their creator.
+
+/obj/item/golem_shell
+ name = "incomplete free golem shell"
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "construct"
+ desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish."
+ var/shell_type = /obj/effect/mob_spawn/human/golem
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/golem_shell/servant
+ name = "incomplete servant golem shell"
+ shell_type = /obj/effect/mob_spawn/human/golem/servant
+
+/obj/item/golem_shell/attackby(obj/item/I, mob/user, params)
+ ..()
+ var/static/list/golem_shell_species_types = list(
+ /obj/item/stack/sheet/metal = /datum/species/golem,
+ /obj/item/stack/sheet/glass = /datum/species/golem/glass,
+ /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel,
+ /obj/item/stack/ore/glass = /datum/species/golem/sand,
+ /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand,
+ /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma,
+ /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond,
+ /obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold,
+ /obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver,
+ /obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium,
+ /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium,
+ /obj/item/stack/sheet/mineral/tranquillite = /datum/species/golem/tranquillite,
+ /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium,
+ /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium,
+ /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy,
+ /obj/item/stack/sheet/wood = /datum/species/golem/wood,
+ /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace,
+ /obj/item/stack/sheet/mineral/adamantine = /datum/species/golem/adamantine,
+ /obj/item/stack/sheet/plastic = /datum/species/golem/plastic)
+
+ if(istype(I, /obj/item/stack))
+ var/obj/item/stack/O = I
+ var/species = golem_shell_species_types[O.merge_type]
+ if(species)
+ if(O.use(10))
+ to_chat(user, "You finish up the golem shell with ten sheets of [O].")
+ new shell_type(get_turf(src), species, user)
+ qdel(src)
+ else
+ to_chat(user, "You need at least ten sheets to finish a golem.")
+ else
+ to_chat(user, "You can't build a golem out of this kind of material.")
+
+/obj/effect/mob_spawn/human/golem
+ name = "inert free golem shell"
+ desc = "A humanoid shape, empty, lifeless, and full of potential."
+ mob_name = "a free golem"
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "construct"
+ mob_species = /datum/species/golem
+ roundstart = FALSE
+ death = FALSE
+ anchored = FALSE
+ move_resist = MOVE_FORCE_NORMAL
+ density = FALSE
+ var/has_owner = FALSE
+ var/can_transfer = TRUE //if golems can switch bodies to this new shell
+ var/mob/living/owner = null //golem's owner if it has one
+ flavour_text = "You are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set your clan free to \
+ travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \
+ golems, so that no golem may ever be forced to serve again."
+
+/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null)
+ if(species) //spawners list uses object name to register so this goes before ..()
+ name += " ([initial(species.prefix)])"
+ mob_species = species
+ . = ..()
+ var/area/A = get_area(src)
+ if(!mapload && A)
+ notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in [A.name].", source = src)
+ if(has_owner && creator)
+ flavour_text = "You are a Golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \
+ Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost."
+ owner = creator
+
+/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn, name)
+ var/datum/species/golem/X = mob_species
+ to_chat(new_spawn, "[initial(X.info_text)]")
+ if(!owner)
+ to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.")
+ to_chat(new_spawn, "You are not an antagonist, but you are not a crewmember either. \
+ You may interact or trade with crew you come across, aswell as defend yourself and your ship \
+ but avoid actively interfering with the station unless you have a valid roleplay reason to do so, such as an invitation by crewmembers.")
+ else
+ new_spawn.mind.store_memory("Serve [owner.real_name], your creator.")
+ log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].")
+ log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].")
+ if(ishuman(new_spawn))
+ var/mob/living/carbon/human/H = new_spawn
+ if(has_owner)
+ var/datum/species/golem/G = H.dna.species
+ G.owner = owner
+ if(!name)
+ H.rename_character(null, H.dna.species.get_random_name())
+ else
+ H.rename_character(null, name)
+ if(has_owner)
+ new_spawn.mind.assigned_role = "Servant Golem"
+ else
+ new_spawn.mind.assigned_role = "Free Golem"
+
+/obj/effect/mob_spawn/human/golem/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
+ if(isgolem(user) && can_transfer)
+ var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No")
+ if(transfer_choice != "Yes")
+ return
+ if(QDELETED(src) || uses <= 0)
+ return
+ log_game("[key_name(user)] golem-swapped into [src]")
+ user.visible_message("A faint light leaves [user], moving to [src] and animating it!","You leave your old body behind, and transfer into [src]!")
+ create(ckey = user.ckey, name = user.real_name)
+ user.death()
+ return
+
+/obj/effect/mob_spawn/human/golem/servant
+ has_owner = TRUE
+ name = "inert servant golem shell"
+ mob_name = "a servant golem"
+
+/obj/effect/mob_spawn/human/golem/adamantine
+ name = "dust-caked free golem shell"
+ desc = "A humanoid shape, empty, lifeless, and full of potential."
+ mob_name = "a free golem"
+ can_transfer = FALSE
+ mob_species = /datum/species/golem/adamantine
diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/oldstation.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/oldstation.dm
new file mode 100644
index 00000000000..8dc3692179e
--- /dev/null
+++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/oldstation.dm
@@ -0,0 +1,110 @@
+//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
+
+/obj/effect/mob_spawn/human/oldsec
+ name = "old cryogenics pod"
+ desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant."
+ mob_name = "a security officer"
+ icon = 'icons/obj/cryogenic2.dmi'
+ icon_state = "sleeper"
+ roundstart = FALSE
+ death = FALSE
+ random = TRUE
+ mob_species = /datum/species/human
+ flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
+ cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
+ your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
+ Work as a team with your fellow survivors and do not abandon them."
+ uniform = /obj/item/clothing/under/retro/security
+ shoes = /obj/item/clothing/shoes/jackboots
+ id = /obj/item/card/id/away/old/sec
+ r_pocket = /obj/item/restraints/handcuffs
+ l_pocket = /obj/item/flash
+ assignedrole = "Ancient Crew"
+
+/obj/effect/mob_spawn/human/oldsec/Destroy()
+ new /obj/structure/showcase/machinery/oldpod/used(drop_location())
+ return ..()
+
+/obj/effect/mob_spawn/human/oldmed
+ name = "old cryogenics pod"
+ desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant."
+ mob_name = "a medical doctor"
+ icon = 'icons/obj/cryogenic2.dmi'
+ icon_state = "sleeper"
+ roundstart = FALSE
+ death = FALSE
+ random = TRUE
+ mob_species = /datum/species/human
+ flavour_text = "You are a medical working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
+ cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
+ your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
+ Work as a team with your fellow survivors and do not abandon them."
+ uniform = /obj/item/clothing/under/retro/medical
+ shoes = /obj/item/clothing/shoes/black
+ id = /obj/item/card/id/away/old/med
+ l_pocket = /obj/item/stack/medical/ointment
+ r_pocket = /obj/item/stack/medical/ointment
+ assignedrole = "Ancient Crew"
+
+/obj/effect/mob_spawn/human/oldmed/Destroy()
+ new /obj/structure/showcase/machinery/oldpod/used(drop_location())
+ return ..()
+
+/obj/effect/mob_spawn/human/oldeng
+ name = "old cryogenics pod"
+ desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant."
+ mob_name = "an engineer"
+ icon = 'icons/obj/cryogenic2.dmi'
+ icon_state = "sleeper"
+ roundstart = FALSE
+ death = FALSE
+ random = TRUE
+ mob_species = /datum/species/human
+ flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
+ cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
+ your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
+ Work as a team with your fellow survivors and do not abandon them."
+ uniform = /obj/item/clothing/under/retro/engineering
+ shoes = /obj/item/clothing/shoes/workboots
+ id = /obj/item/card/id/away/old/eng
+ gloves = /obj/item/clothing/gloves/color/fyellow/old
+ l_pocket = /obj/item/tank/emergency_oxygen
+ assignedrole = "Ancient Crew"
+
+/obj/effect/mob_spawn/human/oldeng/Destroy()
+ new /obj/structure/showcase/machinery/oldpod/used(drop_location())
+ return ..()
+
+/obj/effect/mob_spawn/human/oldsci
+ name = "old cryogenics pod"
+ desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant."
+ mob_name = "a scientist"
+ icon = 'icons/obj/cryogenic2.dmi'
+ icon_state = "sleeper"
+ roundstart = FALSE
+ death = FALSE
+ random = TRUE
+ mob_species = /datum/species/human
+ flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
+ cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
+ your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
+ Work as a team with your fellow survivors and do not abandon them."
+ uniform = /obj/item/clothing/under/retro/science
+ shoes = /obj/item/clothing/shoes/laceup
+ id = /obj/item/card/id/away/old/sci
+ l_pocket = /obj/item/stack/medical/bruise_pack
+ assignedrole = "Ancient Crew"
+
+/obj/effect/mob_spawn/human/oldsci/Destroy()
+ new /obj/structure/showcase/machinery/oldpod/used(drop_location())
+ return ..()
+
+/obj/structure/showcase/machinery/oldpod
+ name = "damaged cryogenic pod"
+ desc = "A damaged cryogenic pod long since lost to time, including its former occupant..."
+ icon = 'icons/obj/cryogenic2.dmi'
+ icon_state = "sleeper-open"
+
+/obj/structure/showcase/machinery/oldpod/used
+ name = "opened cryogenic pod"
+ desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional."
\ No newline at end of file
diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
index 1a68a990705..1886aba02ab 100644
--- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm
+++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
@@ -360,116 +360,4 @@
/area/ruin/space/ancientstation/hivebot
name = "Hivebot Mothership"
- icon_state = "teleporter"
-
-// Mob Spawners
-//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
-
-/obj/effect/mob_spawn/human/oldsec
- name = "old cryogenics pod"
- desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant."
- mob_name = "a security officer"
- icon = 'icons/obj/cryogenic2.dmi'
- icon_state = "sleeper"
- roundstart = FALSE
- death = FALSE
- random = TRUE
- mob_species = /datum/species/human
- flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
- cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
- your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
- Work as a team with your fellow survivors and do not abandon them."
- uniform = /obj/item/clothing/under/retro/security
- shoes = /obj/item/clothing/shoes/jackboots
- id = /obj/item/card/id/away/old/sec
- r_pocket = /obj/item/restraints/handcuffs
- l_pocket = /obj/item/flash
- assignedrole = "Ancient Crew"
-
-/obj/effect/mob_spawn/human/oldsec/Destroy()
- new /obj/structure/showcase/machinery/oldpod/used(drop_location())
- return ..()
-
-/obj/effect/mob_spawn/human/oldmed
- name = "old cryogenics pod"
- desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant."
- mob_name = "a medical doctor"
- icon = 'icons/obj/cryogenic2.dmi'
- icon_state = "sleeper"
- roundstart = FALSE
- death = FALSE
- random = TRUE
- mob_species = /datum/species/human
- flavour_text = "You are a medical working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
- cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
- your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
- Work as a team with your fellow survivors and do not abandon them."
- uniform = /obj/item/clothing/under/retro/medical
- shoes = /obj/item/clothing/shoes/black
- id = /obj/item/card/id/away/old/med
- l_pocket = /obj/item/stack/medical/ointment
- r_pocket = /obj/item/stack/medical/ointment
- assignedrole = "Ancient Crew"
-
-/obj/effect/mob_spawn/human/oldmed/Destroy()
- new /obj/structure/showcase/machinery/oldpod/used(drop_location())
- return ..()
-
-/obj/effect/mob_spawn/human/oldeng
- name = "old cryogenics pod"
- desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant."
- mob_name = "an engineer"
- icon = 'icons/obj/cryogenic2.dmi'
- icon_state = "sleeper"
- roundstart = FALSE
- death = FALSE
- random = TRUE
- mob_species = /datum/species/human
- flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
- cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
- your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
- Work as a team with your fellow survivors and do not abandon them."
- uniform = /obj/item/clothing/under/retro/engineering
- shoes = /obj/item/clothing/shoes/workboots
- id = /obj/item/card/id/away/old/eng
- gloves = /obj/item/clothing/gloves/color/fyellow/old
- l_pocket = /obj/item/tank/emergency_oxygen
- assignedrole = "Ancient Crew"
-
-/obj/effect/mob_spawn/human/oldeng/Destroy()
- new /obj/structure/showcase/machinery/oldpod/used(drop_location())
- return ..()
-
-/obj/effect/mob_spawn/human/oldsci
- name = "old cryogenics pod"
- desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant."
- mob_name = "a scientist"
- icon = 'icons/obj/cryogenic2.dmi'
- icon_state = "sleeper"
- roundstart = FALSE
- death = FALSE
- random = TRUE
- mob_species = /datum/species/human
- flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
- cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
- your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
- Work as a team with your fellow survivors and do not abandon them."
- uniform = /obj/item/clothing/under/retro/science
- shoes = /obj/item/clothing/shoes/laceup
- id = /obj/item/card/id/away/old/sci
- l_pocket = /obj/item/stack/medical/bruise_pack
- assignedrole = "Ancient Crew"
-
-/obj/effect/mob_spawn/human/oldsci/Destroy()
- new /obj/structure/showcase/machinery/oldpod/used(drop_location())
- return ..()
-
-/obj/structure/showcase/machinery/oldpod
- name = "damaged cryogenic pod"
- desc = "A damaged cryogenic pod long since lost to time, including its former occupant..."
- icon = 'icons/obj/cryogenic2.dmi'
- icon_state = "sleeper-open"
-
-/obj/structure/showcase/machinery/oldpod/used
- name = "opened cryogenic pod"
- desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional."
+ icon_state = "teleporter"
\ No newline at end of file
diff --git a/code/modules/awaymissions/mission_code/ruins/wizardcrash.dm b/code/modules/awaymissions/mission_code/ruins/wizardcrash.dm
new file mode 100644
index 00000000000..72b45e45e6e
--- /dev/null
+++ b/code/modules/awaymissions/mission_code/ruins/wizardcrash.dm
@@ -0,0 +1,17 @@
+//stuff for the crashed wizard shuttle space ruin (wizardcrash.dmm)
+
+/obj/item/paper/fluff/ruins/wizardcrash
+ name = "Mission Briefing"
+ info = "To the Magnificent Z.A.P.
A small mining base has been created within our territory by wandless scum. Send them a message from the wizard federation they will not forget. I know your kind is rather fragile, but a group of lightly armed miners should not pose any threat to you at all. Just be warned they have a security cyborg for self defence, you might want to tune your spells to that threat. I look forward to hearing of your success.
Grand Magus Abra the Wonderous"
+
+
+/obj/effect/spawner/lootdrop/wizardcrash
+ loot = list(
+ /obj/item/guardiancreator = 1, //jackpot.
+ /obj/item/spellbook/oneuse/knock = 1, //tresspassing charges incoming
+ /obj/item/gun/magic/wand/resurrection = 1, //medbay's best friend
+ /obj/item/spellbook/oneuse/charge = 20, //and now for less useful stuff to dilute the good loot chances
+ /obj/item/spellbook/oneuse/summonitem = 20,
+ /obj/item/spellbook/oneuse/forcewall = 10,
+ /obj/item/soulstone = 15 //spooky wizard stuff
+ )
\ No newline at end of file
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 21e8d181b23..f02a5ac6b12 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -373,7 +373,8 @@
if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates. -CP
if(establish_db_connection())
to_chat(src, "Changelog has changed since your last visit.")
- winset(src, "rpane.changelog", "background-color=#bb7700;text-color=#FFFFFF;font-style=bold")
+ update_changelog_button()
+
if(!void)
void = new()
@@ -671,6 +672,7 @@
// IF YOU CHANGE ANYTHING IN ACTIVATE, MAKE SURE IT HAS A DEACTIVATE METHOD, -AA07
/client/proc/activate_darkmode()
///// BUTTONS /////
+ update_changelog_button()
/* Rpane */
winset(src, "rpane.textb", "background-color=#40628a;text-color=#FFFFFF")
winset(src, "rpane.infob", "background-color=#40628a;text-color=#FFFFFF")
@@ -705,6 +707,7 @@
/client/proc/deactivate_darkmode()
///// BUTTONS /////
+ update_changelog_button()
/* Rpane */
winset(src, "rpane.textb", "background-color=none;text-color=#000000")
winset(src, "rpane.infob", "background-color=none;text-color=#000000")
@@ -735,4 +738,20 @@
winset(src, "infowindow", "background-color=none;text-color=#000000")
winset(src, "infowindow.info", "background-color=none;text-color=#000000;highlight-color=#007700;tab-text-color=#000000;tab-background-color=none")
///// NOTIFY USER /////
- to_chat(src, "Darkmode Disabled") // what a sick fuck
\ No newline at end of file
+ to_chat(src, "Darkmode Disabled") // what a sick fuck
+
+// Better changelog button handling
+/client/proc/update_changelog_button()
+ if(establish_db_connection())
+ if(prefs.lastchangelog != changelog_hash)
+ winset(src, "rpane.changelog", "background-color=#bb7700;text-color=#FFFFFF;font-style=bold")
+ else
+ if(prefs.toggles & UI_DARKMODE)
+ winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF")
+ else
+ winset(src, "rpane.changelog", "background-color=none;text-color=#000000")
+ else
+ if(prefs.toggles & UI_DARKMODE)
+ winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF")
+ else
+ winset(src, "rpane.changelog", "background-color=none;text-color=#000000")
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index e6c569c35c5..0a09f4504bb 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -842,19 +842,17 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(CAN_WINGDINGS in S.species_traits)
HTML += ShowDisabilityState(user, DISABILITY_FLAG_WINGDINGS, "Speak in Wingdings")
- HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Needs glasses")
- HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese")
- HTML += ShowDisabilityState(user, DISABILITY_FLAG_EPILEPTIC, "Seizures")
- HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf")
- HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind")
+ HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Nearsighted")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_COLOURBLIND, "Colourblind")
+ HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind")
+ HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute")
- HTML += ShowDisabilityState(user, DISABILITY_FLAG_TOURETTES, "Tourettes syndrome") // this will / can not be abused. It also SEVERELY stuns. It's just for fun.
+ HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent")
+ HTML += ShowDisabilityState(user, DISABILITY_FLAG_CHAV, "Chav accent")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_LISP, "Lisp")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_DIZZY, "Dizziness")
- HTML += ShowDisabilityState(user, DISABILITY_FLAG_SCRAMBLED, "Can't speak properly")
HTML += {"
@@ -2204,18 +2202,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(GLASSESBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(GLASSESBLOCK)
- if(disabilities & DISABILITY_FLAG_EPILEPTIC)
- character.dna.SetSEState(EPILEPSYBLOCK, TRUE, TRUE)
- character.dna.default_blocks.Add(EPILEPSYBLOCK)
+ if(disabilities & DISABILITY_FLAG_BLIND)
+ character.dna.SetSEState(BLINDBLOCK, TRUE, TRUE)
+ character.dna.default_blocks.Add(BLINDBLOCK)
if(disabilities & DISABILITY_FLAG_DEAF)
character.dna.SetSEState(DEAFBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(DEAFBLOCK)
- if(disabilities & DISABILITY_FLAG_BLIND)
- character.dna.SetSEState(BLINDBLOCK, TRUE, TRUE)
- character.dna.default_blocks.Add(BLINDBLOCK)
-
if(disabilities & DISABILITY_FLAG_COLOURBLIND)
character.dna.SetSEState(COLOURBLINDBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(COLOURBLINDBLOCK)
@@ -2224,10 +2218,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(MUTEBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(MUTEBLOCK)
- if(disabilities & DISABILITY_FLAG_TOURETTES)
- character.dna.SetSEState(TWITCHBLOCK, TRUE, TRUE)
- character.dna.default_blocks.Add(TWITCHBLOCK)
-
if(disabilities & DISABILITY_FLAG_NERVOUS)
character.dna.SetSEState(NERVOUSBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(NERVOUSBLOCK)
@@ -2236,9 +2226,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(SWEDEBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(SWEDEBLOCK)
- if(disabilities & DISABILITY_FLAG_SCRAMBLED)
- character.dna.SetSEState(SCRAMBLEBLOCK, TRUE, TRUE)
- character.dna.default_blocks.Add(SCRAMBLEBLOCK)
+ if(disabilities & DISABILITY_FLAG_CHAV)
+ character.dna.SetSEState(CHAVBLOCK, TRUE, TRUE)
+ character.dna.default_blocks.Add(CHAVBLOCK)
if(disabilities & DISABILITY_FLAG_LISP)
character.dna.SetSEState(LISPBLOCK, TRUE, TRUE)
@@ -2248,10 +2238,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(DIZZYBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(DIZZYBLOCK)
- if(disabilities & DISABILITY_FLAG_SCRAMBLED)
- character.dna.SetSEState(SCRAMBLEBLOCK, TRUE, TRUE)
- character.dna.default_blocks.Add(SCRAMBLEBLOCK)
-
if(disabilities & DISABILITY_FLAG_WINGDINGS && (CAN_WINGDINGS in character.dna.species.species_traits))
character.dna.SetSEState(WINGDINGSBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(WINGDINGSBLOCK)
diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm
index 41aa92b5bf2..9a75c5a8bb9 100644
--- a/code/modules/client/preference/preferences_mysql.dm
+++ b/code/modules/client/preference/preferences_mysql.dm
@@ -494,9 +494,3 @@
to_chat(C, "Couldn't update your last seen changelog, please try again later.")
return
return 1
-
-/datum/preferences/proc/UpdateChangelogButton(client/C)
- if(preferences_datums[C.ckey].toggles & UI_DARKMODE)
- winset(C, "rpane.changelog", "background-color=#40628a;text-color=#ffffff;font-style=none")
- else
- winset(C, "rpane.changelog", "background-color=none;text-color=#000000;font-style=none")
\ No newline at end of file
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 9a370fe6723..56da139b826 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -847,6 +847,15 @@
species_fit = null
sprite_sheets = null
+/obj/item/clothing/suit/storage/labcoat/fluff/pulsecoat //ozewse : Daniel Harper : Donated to them by Runemeds, who is the original donor.
+ name = "EMT pulse coat"
+ desc = "An EMT labcoat modified to track the wearer's heartbeat. It's so worn out that it doesn't seem to accurately track heartbeat anymore. Also, the zipper is stuck."
+ icon = 'icons/obj/custom_items.dmi'
+ icon_state = "pulsecoat"
+ item_state = "pulsecoat"
+ ignore_suitadjust = 1
+ actions_types = list()
+
/obj/item/clothing/suit/jacket/miljacket/patch // sniper_fairy : P.A.T.C.H.
name = "custom purple military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one has a medical patch on it."
@@ -1115,6 +1124,20 @@
flags = NODROP|BLOCKHAIR
flags_inv = HIDEEARS
+/obj/item/clothing/suit/fluff/pineapple //Pineapple Salad: Dan Jello
+ name = "red trench coat"
+ desc = "A red coat with cheaply made plastic accessories."
+ icon_state = "pineapple_trench"
+
+/obj/item/clothing/suit/hooded/wintercoat/fluff/shesi //MrSynnester : Shesi Skaklas
+ name = "custom made winter coat"
+ desc = "A custom made winter coat with the arms removed. Looks comfy."
+ icon = 'icons/obj/custom_items.dmi'
+ icon_state = "shesicoat"
+ item_state = "shesicoat"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO
+ cold_protection = UPPER_TORSO|LOWER_TORSO
+
//////////// Uniforms ////////////
/obj/item/clothing/under/fluff/counterfeitguise_uniform // thatdanguy23 : Rissa Williams
icon = 'icons/obj/custom_items.dmi'
@@ -1313,6 +1336,13 @@
/obj/item/toy/plushie/fluff/fox/ui_action_click()
change_color()
+/obj/item/clothing/suit/jacket/miljacket/desert/fox
+ name = "rugged military jacket"
+ desc = "A rugged brown military jacket with a stylized 'A' embroidered on the back. It seems very old, yet is in near mint condition. Has a tag on the inside collar signed 'Fox McCloud'."
+ icon = 'icons/obj/custom_items.dmi'
+ icon_state = "fox_coat"
+ item_color = "fox_coat"
+
// TheFlagbearer: Willow Walker
/obj/item/clothing/under/fluff/arachno_suit
name = "Arachno-Man costume"
diff --git a/code/modules/discord/accountlink.dm b/code/modules/discord/accountlink.dm
new file mode 100644
index 00000000000..255a6e2c457
--- /dev/null
+++ b/code/modules/discord/accountlink.dm
@@ -0,0 +1,52 @@
+// DONT TOUCH ANYTHING IN HERE UNLESS YOU KNOW WHAT YOU ARE DOING -affected
+/client/verb/linkdiscord()
+ set category = "OOC"
+ set name = "Link Discord Account"
+ set desc = "Link your discord account to your BYOND account."
+ var/user_ckey = sanitizeSQL(usr.ckey) // Probably not neccassary but better safe than sorry
+ if(!config.sql_enabled)
+ to_chat(src, "This is feature requires the SQL backend")
+ return
+ var/DBQuery/db_discord_id = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE ckey = '[user_ckey]'")
+ if(!db_discord_id.Execute())
+ var/err = db_discord_id.ErrorMsg()
+ log_game("SQL ERROR while selecting discord account. Error : \[[err]\]\n")
+ to_chat(src, "Error checking Discord account. Please inform an administrator")
+ return
+ var/stored_id
+ while(db_discord_id.NextRow())
+ stored_id = db_discord_id.item[1]
+ if(!stored_id) // Not linked
+ var/know_how = alert("Do you know how to get a discord user ID?","Question","Yes","No")
+ if(know_how == "No") // Opens discord support on how to collect IDs
+ src << link("https://support.discordapp.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID")
+ var/entered_id = input("Please enter your Discord ID.", "Enter Discord ID", null, null) as text|null
+ var/sql_id = sanitizeSQL(entered_id)
+ var/DBQuery/store_discord_id = dbcon.NewQuery("INSERT INTO [format_table_name("discord")] (ckey, discord_id, notify) VALUES ('[user_ckey]', [sql_id], 0)")
+ if(!store_discord_id.Execute())
+ var/err = db_discord_id.ErrorMsg()
+ log_game("SQL ERROR while linking discord account. Error : \[[err]\]\n")
+ to_chat(src, "Error linking Discord account. Please inform an administrator")
+ return
+ to_chat(src, "Successfully linked discord account [entered_id] to [user_ckey]")
+ else // Linked
+ var/choice = alert("You already have the Discord Account [stored_id] linked to [user_ckey]. Would you like to unlink or replace","Already Linked","Unlink","Replace")
+ switch(choice)
+ if("Unlink")
+ var/DBQuery/unlink_discord_id = dbcon.NewQuery("DELETE FROM [format_table_name("discord")] WHERE ckey = '[user_ckey]'")
+ if(!unlink_discord_id.Execute())
+ var/err = unlink_discord_id.ErrorMsg()
+ log_game("SQL ERROR while unlinking discord account. Error : \[[err]\]\n")
+ to_chat(src, "Error unlinking Discord account. Please inform an administrator")
+ return
+ to_chat(src, "Successfully unlinked discord account")
+ if("Replace")
+ var/entered_id = input("Please enter your Discord ID. Instructions can be found at https://bit.ly/2AfUu40", "Enter Discord ID", null, null) as text|null
+ var/sql_id = sanitizeSQL(entered_id)
+ var/DBQuery/store_discord_id = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET discord_id = '[sql_id]' WHERE ckey='[user_ckey]'")
+ if(!store_discord_id.Execute())
+ var/err = db_discord_id.ErrorMsg()
+ to_chat(src, "Error replacing Discord account. Please inform an administrator")
+ log_game("SQL ERROR while linking discord account. Error : \[[err]\]\n")
+ return
+ to_chat(src, "Successfully linked discord account [entered_id] to [user_ckey]")
diff --git a/code/modules/discord/notify.dm b/code/modules/discord/notify.dm
new file mode 100644
index 00000000000..bca1b38f954
--- /dev/null
+++ b/code/modules/discord/notify.dm
@@ -0,0 +1,48 @@
+// DONT TOUCH ANYTHING IN HERE UNLESS YOU KNOW WHAT YOU ARE DOING -affected
+/client/verb/notify_restart()
+ set category = "OOC"
+ set name = "Notify Restart"
+ set desc = "Notifies you on Discord when the server restarts."
+ if(!config.sql_enabled)
+ to_chat(src, "This is feature requires the SQL backend")
+ return
+ var/DBQuery/db_discord_id = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE ckey = '[ckey]'")
+ if(!db_discord_id.Execute())
+ var/err = db_discord_id.ErrorMsg()
+ log_game("SQL ERROR while selecting discord account. Error : \[[err]\]\n")
+ to_chat(src, "Error checking Discord account. Please inform an administrator")
+ return
+ var/stored_id
+ while(db_discord_id.NextRow())
+ stored_id = db_discord_id.item[1]
+ if(!stored_id) // Not linked
+ to_chat(src, "This requires you to link your Discord account with the \"Link Discord Account\" verb.")
+ return
+ else // Linked
+ var/DBQuery/toggle_status = dbcon.NewQuery("SELECT notify FROM [format_table_name("discord")] WHERE ckey = '[ckey]'")
+ if(!toggle_status.Execute())
+ var/err = toggle_status.ErrorMsg()
+ log_game("SQL ERROR while getting discord account. Error : \[[err]\]\n")
+ var/notify_status
+ while(toggle_status.NextRow())
+ notify_status = toggle_status.item[1]
+ if(notify_status) // Data is there
+ switch(notify_status)
+ if("0")
+ var/DBQuery/update_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 1 WHERE ckey='[ckey]'")
+ if(!update_notify.Execute())
+ var/err = db_discord_id.ErrorMsg()
+ to_chat(src, "Error updating notify status. Please inform an administrator")
+ log_game("SQL ERROR while updating notify status. Error : \[[err]\]\n")
+ return
+ to_chat(src, "You will now be notified on discord when the next round is starting")
+ if("1")
+ var/DBQuery/update_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 0 WHERE ckey='[ckey]'")
+ if(!update_notify.Execute())
+ var/err = db_discord_id.ErrorMsg()
+ to_chat(src, "Error updating notify status. Please inform an administrator")
+ log_game("SQL ERROR while updating notify status. Error : \[[err]\]\n")
+ return
+ to_chat(src, "You will no longer be notified on discord when the next round is starting")
+ else // Oh fuck what the hell happened
+ to_chat(src, "Something has gone VERY wrong, or affected cant code.")
diff --git a/code/modules/ext_scripts/irc.dm b/code/modules/ext_scripts/irc.dm
index 3cc29ff39fb..0e8c72496d2 100644
--- a/code/modules/ext_scripts/irc.dm
+++ b/code/modules/ext_scripts/irc.dm
@@ -1,14 +1,18 @@
-/proc/send2irc(var/channel, var/msg)
+/proc/send2irc(var/channel, var/msg, var/lesser_sanitize = FALSE)
if(config.use_irc_bot && config.irc_bot_host.len)
for(var/IP in config.irc_bot_host)
spawn(0)
- // I have no means of trusting you, cmd
- ext_python("ircbot_message.py", "[config.comms_password] [IP] [channel] [paranoid_sanitize(msg)]")
+ if(lesser_sanitize == 7355608) // Super random number because this could be bad if done accidentally
+ // Runs sanitization but allows <> and // (Needed for discord)
+ ext_python("ircbot_message.py", "[config.comms_password] [IP] [channel] [not_as_paranoid_sanitize(msg)]")
+ else
+ // I have no means of trusting you, cmd
+ ext_python("ircbot_message.py", "[config.comms_password] [IP] [channel] [paranoid_sanitize(msg)]")
return
-/proc/send2mainirc(var/msg)
+/proc/send2mainirc(var/msg, var/lesser_sanitize = FALSE)
if(config.main_irc)
- send2irc(config.main_irc, msg)
+ send2irc(config.main_irc, msg, lesser_sanitize)
return
/proc/send2adminirc(var/msg)
@@ -17,5 +21,18 @@
return
/hook/startup/proc/ircNotify()
- send2mainirc("Server starting up on [station_name()]. Connect to: [config.server? "[config.server]" : "[world.address]:[world.port]"]")
+ var/people_to_ping = ""
+ var/DBQuery/pull_notify = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE notify = 1")
+ if(!pull_notify.Execute())
+ var/err = pull_notify.ErrorMsg()
+ log_game("SQL ERROR while pulling notify people. Error : \[[err]\]\n")
+ else
+ while(pull_notify.NextRow())
+ people_to_ping += "<@" + pull_notify.item[1] + "> "
+ send2mainirc("Server starting up on [station_name()]. Connect to: "+people_to_ping, 7355608)
+ // Set notify to 0 so people arent pinged round after round
+ var/DBQuery/reset_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 0 WHERE notify = 1")
+ if(!reset_notify.Execute())
+ var/err = reset_notify.ErrorMsg()
+ log_game("SQL ERROR while resetting notify status. Error : \[[err]\]\n")
return 1
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 3ab7fb61bab..2c9c2480a4b 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -197,13 +197,13 @@
list_reagents = list("coffee" = 30)
/obj/item/reagent_containers/food/drinks/ice
- name = "Ice Cup"
+ name = "ice cup"
desc = "Careful, cold ice, do not chew."
icon_state = "icecup"
list_reagents = list("ice" = 30)
/obj/item/reagent_containers/food/drinks/tea
- name = "Duke Purple Tea"
+ name = "Duke Purple tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
icon_state = "teacup"
item_state = "coffee"
@@ -215,34 +215,34 @@
reagents.add_reagent("mugwort", 3)
/obj/item/reagent_containers/food/drinks/mugwort
- name = "Mugwort Tea"
+ name = "mugwort tea"
desc = "A bitter herbal tea."
icon_state = "manlydorfglass"
item_state = "coffee"
list_reagents = list("mugwort" = 30)
/obj/item/reagent_containers/food/drinks/h_chocolate
- name = "Dutch Hot Coco"
+ name = "Dutch hot coco"
desc = "Made in Space South America."
icon_state = "hot_coco"
item_state = "coffee"
list_reagents = list("hot_coco" = 30, "sugar" = 5)
/obj/item/reagent_containers/food/drinks/chocolate
- name = "Hot Chocolate"
+ name = "hot chocolate"
desc = "Made in Space Switzerland."
icon_state = "hot_coco"
item_state = "coffee"
list_reagents = list("chocolate" = 30)
/obj/item/reagent_containers/food/drinks/weightloss
- name = "Weight-Loss Shake"
+ name = "weight-loss shake"
desc = "A shake designed to cause weight loss. The package proudly proclaims that it is 'tapeworm free.'"
icon_state = "weightshake"
list_reagents = list("lipolicide" = 30, "chocolate" = 5)
/obj/item/reagent_containers/food/drinks/dry_ramen
- name = "Cup Ramen"
+ name = "cup ramen"
desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years."
icon_state = "ramen"
item_state = "ramen"
@@ -254,7 +254,7 @@
reagents.add_reagent("enzyme", 3)
/obj/item/reagent_containers/food/drinks/chicken_soup
- name = "Canned Chicken Soup"
+ name = "canned chicken soup"
desc = "A delicious and soothing can of chicken noodle soup; just like spessmom used to microwave it."
icon_state = "soupcan"
item_state = "soupcan"
@@ -331,7 +331,7 @@
volume = 50
/obj/item/reagent_containers/food/drinks/flask/lithium
- name = "Lithium Flask"
+ name = "lithium flask"
desc = "A flask with a Lithium Atom symbol on it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lithiumflask"
@@ -353,13 +353,13 @@
/obj/item/reagent_containers/food/drinks/bag
- name = "Drink bag"
+ name = "drink bag"
desc = "Normally put in wine boxes, or down pants at stadium events."
icon_state = "goonbag"
volume = 70
/obj/item/reagent_containers/food/drinks/bag/goonbag
- name = "Goon from a Blue Toolbox special edition"
+ name = "goon from a Blue Toolbox special edition"
desc = "Wine from the land down under, where the dingos roam and the roos do wander."
icon_state = "goonbag"
list_reagents = list("wine" = 70)
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index cbf06629954..8a88cac3461 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -192,7 +192,7 @@
list_reagents = list("rum" = 100)
/obj/item/reagent_containers/food/drinks/bottle/holywater
- name = "Flask of Holy Water"
+ name = "flask of holy water"
desc = "A flask of the chaplain's holy water."
icon_state = "holyflask"
list_reagents = list("holywater" = 100)
@@ -232,8 +232,8 @@
list_reagents = list("wine" = 100)
/obj/item/reagent_containers/food/drinks/bottle/absinthe
- name = "Extra-Strong Absinthe"
- desc = "A strong alcoholic drink brewed and distributed by REDACTED."
+ name = "Yellow Marquee Absinthe"
+ desc = "A strong alcoholic drink brewed and distributed by Yellow Marquee."
icon_state = "absinthebottle"
list_reagents = list("absinthe" = 100)
@@ -252,7 +252,7 @@
//////////////////////////JUICES AND STUFF ///////////////////////
/obj/item/reagent_containers/food/drinks/bottle/orangejuice
- name = "Orange Juice"
+ name = "orange juice"
desc = "Full of vitamins and deliciousness!"
icon_state = "orangejuice"
item_state = "carton"
@@ -260,7 +260,7 @@
list_reagents = list("orangejuice" = 100)
/obj/item/reagent_containers/food/drinks/bottle/cream
- name = "Milk Cream"
+ name = "milk cream"
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
icon_state = "cream"
item_state = "carton"
@@ -268,7 +268,7 @@
list_reagents = list("cream" = 100)
/obj/item/reagent_containers/food/drinks/bottle/tomatojuice
- name = "Tomato Juice"
+ name = "tomato juice"
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
icon_state = "tomatojuice"
item_state = "carton"
@@ -276,7 +276,7 @@
list_reagents = list("tomatojuice" = 100)
/obj/item/reagent_containers/food/drinks/bottle/limejuice
- name = "Lime Juice"
+ name = "lime juice"
desc = "Sweet-sour goodness."
icon_state = "limejuice"
item_state = "carton"
@@ -284,7 +284,7 @@
list_reagents = list("limejuice" = 100)
/obj/item/reagent_containers/food/drinks/bottle/milk
- name = "Milk"
+ name = "milk"
desc = "Soothing milk."
icon_state = "milk"
item_state = "carton"
diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm
index 554c5deddc2..8cdda48af5d 100644
--- a/code/modules/food_and_drinks/drinks/drinks/cans.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm
@@ -59,34 +59,34 @@
return ..(target, user, proximity)
/obj/item/reagent_containers/food/drinks/cans/cola
- name = "Space Cola"
+ name = "space cola"
desc = "Cola. in space."
icon_state = "cola"
list_reagents = list("cola" = 30)
/obj/item/reagent_containers/food/drinks/cans/beer
- name = "Space Beer"
+ name = "space beer"
desc = "Contains only water, malt and hops."
icon_state = "beer"
is_glass = 1
list_reagents = list("beer" = 30)
/obj/item/reagent_containers/food/drinks/cans/adminbooze
- name = "Admin Booze"
+ name = "admin booze"
desc = "Bottled Griffon tears. Drink with caution."
icon_state = "adminbooze"
is_glass = 1
list_reagents = list("adminordrazine" = 5, "capsaicin" = 5, "methamphetamine"= 20, "thirteenloko" = 20)
/obj/item/reagent_containers/food/drinks/cans/madminmalt
- name = "Madmin Malt"
+ name = "madmin malt"
desc = "Bottled essence of angry admins. Drink with EXTREME caution."
icon_state = "madminmalt"
is_glass = 1
list_reagents = list("hell_water" = 20, "neurotoxin" = 15, "thirteenloko" = 15)
/obj/item/reagent_containers/food/drinks/cans/badminbrew
- name = "Badmin Brew"
+ name = "badmin brew"
desc = "Bottled trickery and terrible admin work. Probably shouldn't drink this one at all."
icon_state = "badminbrew"
is_glass = 1
@@ -156,7 +156,7 @@
list_reagents = list("tonic" = 50)
/obj/item/reagent_containers/food/drinks/cans/sodawater
- name = "Soda Water"
+ name = "soda water"
desc = "A can of soda water. Still water's more refreshing cousin."
icon_state = "sodawater"
list_reagents = list("sodawater" = 50)
diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm
index 857c68036a2..fb5ea043839 100644
--- a/code/modules/food_and_drinks/food/foods/candy.dm
+++ b/code/modules/food_and_drinks/food/foods/candy.dm
@@ -18,14 +18,14 @@
// ***********************************************************
/obj/item/reagent_containers/food/snacks/chocolatebar
- name = "Chocolate Bar"
+ name = "chocolate bar"
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/reagent_containers/food/snacks/candy/caramel
- name = "Caramel"
+ name = "caramel"
desc = "Chewy and dense, yet it practically melts in your mouth!"
icon_state = "caramel"
filling_color = "#DB944D"
@@ -33,21 +33,21 @@
/obj/item/reagent_containers/food/snacks/candy/toffee
- name = "Toffee"
+ name = "toffee"
desc = "A hard, brittle candy with a distinctive taste."
icon_state = "toffee"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/reagent_containers/food/snacks/candy/nougat
- name = "Nougat"
+ name = "nougat"
desc = "A soft, chewy candy commonly found in candybars."
icon_state = "nougat"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/reagent_containers/food/snacks/candy/taffy
- name = "Saltwater Taffy"
+ name = "saltwater taffy"
desc = "Old fashioned saltwater taffy. Chewy!"
icon_state = "candy1"
filling_color = "#7D5F46"
@@ -58,7 +58,7 @@
icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5")
/obj/item/reagent_containers/food/snacks/candy/fudge
- name = "Fudge"
+ name = "fudge"
desc = "Chocolate fudge, a timeless classic treat."
icon_state = "fudge"
filling_color = "#7D5F46"
@@ -66,26 +66,26 @@
list_reagents = list("cream" = 3, "chocolate" = 6)
/obj/item/reagent_containers/food/snacks/candy/fudge/peanut
- name = "Peanut Fudge"
+ name = "peanut fudge"
desc = "Chocolate fudge, with bits of peanuts mixed in. People with nut allergies shouldn't eat this."
icon_state = "fudge_peanut"
filling_color = "#7D5F46"
/obj/item/reagent_containers/food/snacks/candy/fudge/cherry
- name = "Chocolate Cherry Fudge"
+ name = "chocolate cherry fudge"
desc = "Chocolate fudge surrounding sweet cherries. Good for tricking kids into eating some fruit."
icon_state = "fudge_cherry"
filling_color = "#7D5F46"
/obj/item/reagent_containers/food/snacks/candy/fudge/cookies_n_cream
- name = "Cookies 'n' Cream Fudge"
+ name = "cookies 'n' cream fudge"
desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!"
icon_state = "fudge_cookies_n_cream"
filling_color = "#7D5F46"
list_reagents = list("cream" = 6, "chocolate" = 6)
/obj/item/reagent_containers/food/snacks/candy/fudge/turtle
- name = "Turtle Fudge"
+ name = "turtle fudge"
desc = "Chocolate fudge with caramel and nuts. It doesn't contain real turtles, thankfully."
icon_state = "fudge_turtle"
filling_color = "#7D5F46"
@@ -95,7 +95,7 @@
// ***********************************************************
/obj/item/reagent_containers/food/snacks/candy/donor
- name = "Donor Candy"
+ name = "donor candy"
desc = "A little treat for blood donors."
trash = /obj/item/trash/candy
bitesize = 5
@@ -516,7 +516,7 @@
filling_color = "#7D5F46"
/obj/item/reagent_containers/food/snacks/candy/confectionery/toffee
- name = "Yum-baton Bar"
+ name = "Yum-Baton Bar"
desc = "Chocolate and toffee in the shape of a baton. Security sure knows how to pound these down!"
icon_state = "yumbaton"
filling_color = "#7D5F46"
diff --git a/code/modules/food_and_drinks/food/foods/ethnic.dm b/code/modules/food_and_drinks/food/foods/ethnic.dm
index ae8fc289798..9404992f5eb 100644
--- a/code/modules/food_and_drinks/food/foods/ethnic.dm
+++ b/code/modules/food_and_drinks/food/foods/ethnic.dm
@@ -11,7 +11,7 @@
list_reagents = list("nutriment" = 7, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/burrito
- name = "Burrito"
+ name = "burrito"
desc = "Meat, beans, cheese, and rice wrapped up as an easy-to-hold meal."
icon_state = "burrito"
trash = /obj/item/trash/plate
@@ -19,7 +19,7 @@
list_reagents = list("nutriment" = 4, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/chimichanga
- name = "Chimichanga"
+ name = "chimichanga"
desc = "Time to eat a chimi-f***ing-changa."
icon_state = "chimichanga"
trash = /obj/item/trash/plate
@@ -27,8 +27,8 @@
list_reagents = list("omnizine" = 4, "cheese" = 2) //Deadpool reference. Deal with it.
/obj/item/reagent_containers/food/snacks/enchiladas
- name = "Enchiladas"
- desc = "Viva La Mexico!"
+ name = "enchiladas"
+ desc = "Viva la Mexico!"
icon_state = "enchiladas"
trash = /obj/item/trash/tray
filling_color = "#A36A1F"
@@ -57,7 +57,7 @@
list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2)
/obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball
- name = "Sweet & Sour Chicken Balls"
+ name = "sweet & sour chicken balls"
desc = "Is this chicken cooked? The odds are better than wok paper scissors."
icon_state = "chickenball"
junkiness = 25
@@ -113,13 +113,13 @@
/obj/item/reagent_containers/food/snacks/human/kabob
name = "-kabob"
icon_state = "kabob"
- desc = "A human meat, on a stick."
+ desc = "Human meat, on a stick."
trash = /obj/item/stack/rods
filling_color = "#A85340"
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/monkeykabob
- name = "Meat-kabob"
+ name = "meat-kabob"
icon_state = "kabob"
desc = "Delicious meat, on a stick."
trash = /obj/item/stack/rods
@@ -127,7 +127,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/tofukabob
- name = "Tofu-kabob"
+ name = "tofu-kabob"
icon_state = "kabob"
desc = "Vegan meat, on a stick."
trash = /obj/item/stack/rods
diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm
index 65c20eb7eba..8fb9773a48e 100644
--- a/code/modules/food_and_drinks/food/foods/ingredients.dm
+++ b/code/modules/food_and_drinks/food/foods/ingredients.dm
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/tofu
- name = "Tofu"
+ name = "tofu"
icon_state = "tofu"
desc = "We all love tofu."
filling_color = "#FFFEE0"
@@ -12,7 +12,7 @@
list_reagents = list("plantmatter" = 2)
/obj/item/reagent_containers/food/snacks/fried_tofu
- name = "Fried Tofu"
+ name = "fried tofu"
icon_state = "tofu"
desc = "Proof that even vegetarians crave unhealthy foods."
filling_color = "#FFFEE0"
@@ -20,8 +20,8 @@
list_reagents = list("plantmatter" = 3)
/obj/item/reagent_containers/food/snacks/soydope
- name = "Soy Dope"
- desc = "Dope from a soy."
+ name = "soy dope"
+ desc = "Like regular dope, but for the health concious consumer."
icon_state = "soydope"
trash = /obj/item/trash/plate
filling_color = "#C4BF76"
@@ -33,7 +33,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/sliceable/cheesewheel
- name = "Cheese wheel"
+ name = "cheese wheel"
desc = "A big wheel of delicious Cheddar."
icon_state = "cheesewheel"
slice_path = /obj/item/reagent_containers/food/snacks/cheesewedge
@@ -42,14 +42,14 @@
list_reagents = list("nutriment" = 15, "vitamin" = 5, "cheese" = 20)
/obj/item/reagent_containers/food/snacks/cheesewedge
- name = "Cheese wedge"
+ name = "cheese wedge"
desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far."
icon_state = "cheesewedge"
filling_color = "#FFF700"
/obj/item/reagent_containers/food/snacks/weirdcheesewedge
- name = "Weird Cheese"
- desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the looser sense of the word."
+ name = "weird cheese"
+ desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the broad sense of the word."
icon_state = "weirdcheesewedge"
filling_color = "#00FF33"
list_reagents = list("mercury" = 5, "lsd" = 5, "ethanol" = 5, "weird_cheese" = 5)
@@ -76,13 +76,13 @@
list_reagents = list("protein" = 2)
/obj/item/reagent_containers/food/snacks/watermelonslice
- name = "Watermelon Slice"
+ name = "watermelon slice"
desc = "A slice of watery goodness."
icon_state = "watermelonslice"
filling_color = "#FF3867"
/obj/item/reagent_containers/food/snacks/pineappleslice
- name = "Pineapple Slices"
+ name = "pineapple slices"
desc = "Rings of pineapple."
icon_state = "pineappleslice"
filling_color = "#e5b437"
@@ -134,14 +134,14 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/chocolatebar
- name = "Chocolate Bar"
+ name = "chocolate bar"
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 2, "sugar" = 2, "cocoa" = 2)
/obj/item/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs
- name = "Pile of Chocolate"
+ name = "pile of chocolate"
desc = "A pile of pure chocolate pieces."
icon_state = "cocoa"
filling_color = "#7D5F46"
diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm
index b221348e8d8..3fa20f0d1c3 100644
--- a/code/modules/food_and_drinks/food/foods/junkfood.dm
+++ b/code/modules/food_and_drinks/food/foods/junkfood.dm
@@ -23,9 +23,9 @@
list_reagents = list("protein" = 1, "sugar" = 3)
/obj/item/reagent_containers/food/snacks/pistachios
- name = "Pistachios"
+ name = "pistachios"
icon_state = "pistachios"
- desc = "A snack of deliciously salted pistachios. A perfectly valid choice..."
+ desc = "Deliciously salted pistachios. A perfectly valid choice..."
trash = /obj/item/trash/pistachios
filling_color = "#BAD145"
junkiness = 20
@@ -68,7 +68,7 @@
/obj/item/reagent_containers/food/snacks/tastybread
name = "bread tube"
- desc = "Bread in a tube. Chewy...and surprisingly tasty."
+ desc = "Bread in a tube. Chewy and surprisingly tasty."
icon_state = "tastybread"
trash = /obj/item/trash/tastybread
filling_color = "#A66829"
diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm
index a7f4acb4405..0d57d3197cd 100644
--- a/code/modules/food_and_drinks/food/foods/meat.dm
+++ b/code/modules/food_and_drinks/food/foods/meat.dm
@@ -33,22 +33,22 @@
/obj/item/reagent_containers/food/snacks/meat/slab/meatproduct
name = "meat product"
- desc = "A slab of station reclaimed and chemically processed meat product."
+ desc = "A slab of reclaimed and chemically processed meat product."
/obj/item/reagent_containers/food/snacks/meat/monkey
//same as plain meat
/obj/item/reagent_containers/food/snacks/meat/corgi
- name = "Corgi meat"
- desc = "Tastes like... well you know..."
+ name = "corgi meat"
+ desc = "Tastes like the Head of Personnel's hopes and dreams"
/obj/item/reagent_containers/food/snacks/meat/pug
- name = "Pug meat"
- desc = "Tastes like... well you know..."
+ name = "pug meat"
+ desc = "Slightly less adorable in sliced form."
/obj/item/reagent_containers/food/snacks/meat/ham
- name = "Ham"
- desc = "Taste like bacon."
+ name = "ham"
+ desc = "For when you need to go ham."
list_reagents = list("protein" = 3, "porktonium" = 10)
/obj/item/reagent_containers/food/snacks/meat/meatwheat
@@ -61,7 +61,7 @@
/obj/item/reagent_containers/food/snacks/rawcutlet
name = "raw cutlet"
- desc = "A thin piece of raw meat."
+ desc = "A thin strip of raw meat."
icon = 'icons/obj/food/food_ingredients.dmi'
icon_state = "rawcutlet"
bitesize = 1
@@ -86,7 +86,7 @@
/obj/item/reagent_containers/food/snacks/xenomeat
name = "meat"
- desc = "A slab of meat."
+ desc = "A slab of meat. It's green!"
icon_state = "xenomeat"
filling_color = "#43DE18"
bitesize = 6
@@ -94,14 +94,14 @@
/obj/item/reagent_containers/food/snacks/spidermeat
name = "spider meat"
- desc = "A slab of spider meat."
+ desc = "A slab of spider meat. Not very appetizing."
icon_state = "spidermeat"
bitesize = 3
list_reagents = list("protein" = 3, "toxin" = 3, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/lizardmeat
name = "mutant lizard meat"
- desc = "Seems to be a slab of meat from some mutant lizard thing?"
+ desc = "A peculiar slab of meat. It looks scaly and radioactive."
icon_state = "xenomeat"
filling_color = "#43DE18"
bitesize = 3
@@ -109,19 +109,19 @@
/obj/item/reagent_containers/food/snacks/spiderleg
name = "spider leg"
- desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?"
+ desc = "A still twitching leg of a giant spider. You don't really want to eat this, do you?"
icon_state = "spiderleg"
list_reagents = list("protein" = 2, "toxin" = 2)
/obj/item/reagent_containers/food/snacks/raw_bacon
name = "raw bacon"
- desc = "It's fleshy and pink!"
+ desc = "God's gift to man in uncooked form."
icon_state = "raw_bacon"
list_reagents = list("nutriment" = 1, "porktonium" = 10)
/obj/item/reagent_containers/food/snacks/spidereggs
name = "spider eggs"
- desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health."
+ desc = "A cluster of juicy spider eggs. A great side dish for when you don't care about your health."
icon_state = "spidereggs"
list_reagents = list("protein" = 2, "toxin" = 2)
@@ -130,7 +130,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/meatsteak
- name = "Meat steak"
+ name = "meat steak"
desc = "A piece of hot spicy meat."
icon_state = "meatstake"
trash = /obj/item/trash/plate
@@ -140,13 +140,13 @@
/obj/item/reagent_containers/food/snacks/bacon
name = "bacon"
- desc = "It looks juicy and tastes amazing!"
+ desc = "It looks crispy and tastes amazing! Mmm... Bacon."
icon_state = "bacon2"
list_reagents = list("nutriment" = 4, "porktonium" = 10, "msg" = 4)
/obj/item/reagent_containers/food/snacks/telebacon
- name = "Tele Bacon"
- desc = "It tastes a little odd but it is still delicious."
+ name = "tele bacon"
+ desc = "It tastes a little odd but it's still delicious."
icon_state = "bacon"
var/obj/item/radio/beacon/bacon/baconbeacon
list_reagents = list("nutriment" = 4, "porktonium" = 10)
@@ -161,15 +161,15 @@
baconbeacon.digest_delay()
/obj/item/reagent_containers/food/snacks/meatball
- name = "Meatball"
+ name = "meatball"
desc = "A great meal all round."
icon_state = "meatball"
filling_color = "#DB0000"
list_reagents = list("protein" = 4, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/sausage
- name = "Sausage"
- desc = "A piece of mixed, long meat."
+ name = "sausage"
+ desc = "A piece of mixed and cased meat."
icon_state = "sausage"
filling_color = "#DB0000"
list_reagents = list("protein" = 6, "vitamin" = 1, "porktonium" = 10)
@@ -198,8 +198,8 @@
list_reagents = list("nutriment" = 3, "capsaicin" = 2)
/obj/item/reagent_containers/food/snacks/wingfangchu
- name = "Wing Fang Chu"
- desc = "A savory dish of alien wing wang in soy."
+ name = "wing fang chu"
+ desc = "A savory dish of alien wing wang in soy. Wait, what?"
icon_state = "wingfangchu"
trash = /obj/item/trash/snack_bowl
filling_color = "#43DE18"
@@ -335,7 +335,7 @@
color = reagent_color
/obj/item/reagent_containers/food/snacks/friedegg
- name = "Fried egg"
+ name = "fried egg"
desc = "A fried egg, with a touch of salt and pepper."
icon_state = "friedegg"
filling_color = "#FFDF78"
@@ -343,21 +343,21 @@
list_reagents = list("nutriment" = 3, "egg" = 5)
/obj/item/reagent_containers/food/snacks/boiledegg
- name = "Boiled egg"
+ name = "boiled egg"
desc = "A hard boiled egg."
icon_state = "egg"
filling_color = "#FFFFFF"
list_reagents = list("nutriment" = 2, "egg" = 5, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/chocolateegg
- name = "Chocolate Egg"
+ name = "chocolate egg"
desc = "Such sweet, fattening food."
icon_state = "chocolateegg"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2)
/obj/item/reagent_containers/food/snacks/omelette
- name = "Omelette Du Fromage"
+ name = "omelette du fromage"
desc = "That's all you can say!"
icon_state = "omelette"
trash = /obj/item/trash/plate
@@ -379,7 +379,7 @@
/obj/item/reagent_containers/food/snacks/hotdog
name = "hotdog"
- desc = "Fresh footlong ready to go down on."
+ desc = "Not made with actual dogs. Hopefully."
icon_state = "hotdog"
bitesize = 3
list_reagents = list("nutriment" = 6, "ketchup" = 3, "vitamin" = 3)
@@ -392,7 +392,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/turkey
- name = "Turkey"
+ name = "turkey"
desc = "A traditional turkey served with stuffing."
icon_state = "turkey"
slice_path = /obj/item/reagent_containers/food/snacks/turkeyslice
@@ -408,7 +408,7 @@
/obj/item/reagent_containers/food/snacks/organ
name = "organ"
- desc = "It's good for you."
+ desc = "Technically qualifies as organic."
icon = 'icons/obj/surgery.dmi'
icon_state = "appendix"
filling_color = "#E00D34"
diff --git a/code/modules/food_and_drinks/food/foods/misc.dm b/code/modules/food_and_drinks/food/foods/misc.dm
index 4c6c607eacb..4845fe4d608 100644
--- a/code/modules/food_and_drinks/food/foods/misc.dm
+++ b/code/modules/food_and_drinks/food/foods/misc.dm
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/eggplantparm
- name = "Eggplant Parmigiana"
+ name = "eggplant parmigiana"
desc = "The only good recipe for eggplant."
icon_state = "eggplantparm"
trash = /obj/item/trash/plate
@@ -12,7 +12,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/soylentgreen
- name = "Soylent Green"
+ name = "soylent green"
desc = "Not made of people. Honest." //Totally people.
icon_state = "soylent_green"
trash = /obj/item/trash/waffles
@@ -20,7 +20,7 @@
list_reagents = list("nutriment" = 10, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/soylentviridians
- name = "Soylent Virdians"
+ name = "soylent virdians"
desc = "Not made of people. Honest." //Actually honest for once.
icon_state = "soylent_yellow"
trash = /obj/item/trash/waffles
@@ -28,7 +28,7 @@
list_reagents = list("nutriment" = 10, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/monkeysdelight
- name = "monkey's Delight"
+ name = "monkey's delight"
desc = "Eeee Eee!"
icon_state = "monkeysdelight"
trash = /obj/item/trash/tray
@@ -38,14 +38,14 @@
/obj/item/reagent_containers/food/snacks/dionaroast
name = "roast diona"
- desc = "It's like an enormous, leathery carrot. With an eye."
+ desc = "It's like an enormous leathery carrot... With an eye."
icon_state = "dionaroast"
trash = /obj/item/trash/plate
filling_color = "#75754B"
list_reagents = list("plantmatter" = 4, "nutriment" = 2, "radium" = 2, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/tofurkey
- name = "Tofurkey"
+ name = "tofurkey"
desc = "A fake turkey made from tofu."
icon_state = "tofurkey"
filling_color = "#FFFEE0"
@@ -97,7 +97,7 @@
list_reagents = list("nutriment" = 4)
/obj/item/reagent_containers/food/snacks/warmdonkpocket
- name = "Warm Donk-pocket"
+ name = "warm Donk-pocket"
desc = "The food of choice for the seasoned traitor."
icon_state = "donkpocket"
filling_color = "#DEDEAB"
@@ -107,7 +107,7 @@
M.reagents.add_reagent("omnizine", 15)
/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak
- name = "Lightly Warm Donk-pocket"
+ name = "lukewarm Donk-pocket"
desc = "The food of choice for the seasoned traitor. This one is lukewarm."
icon_state = "donkpocket"
filling_color = "#DEDEAB"
@@ -135,7 +135,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/boiledslimecore
- name = "Boiled Slime Core"
+ name = "boiled slime core"
desc = "A boiled red thing."
icon_state = "boiledrorocore"
bitesize = 3
@@ -162,7 +162,7 @@
..()
/obj/item/reagent_containers/food/snacks/liquidfood
- name = "\improper LiquidFood Ration"
+ name = "\improper LiquidFood ration"
desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?"
icon_state = "liquidfood"
trash = /obj/item/trash/liquidfood
diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm
index 1b9c253ab53..36c340656e3 100644
--- a/code/modules/food_and_drinks/food/foods/pasta.dm
+++ b/code/modules/food_and_drinks/food/foods/pasta.dm
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/spaghetti
- name = "Spaghetti"
+ name = "spaghetti"
desc = "A bundle of raw spaghetti."
icon = 'icons/obj/food/pasta.dmi'
icon_state = "spaghetti"
@@ -12,7 +12,7 @@
list_reagents = list("nutriment" = 1, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/macaroni
- name = "Macaroni twists"
+ name = "macaroni twists"
desc = "These are little twists of raw macaroni."
icon = 'icons/obj/food/pasta.dmi'
icon_state = "macaroni"
@@ -25,8 +25,8 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/boiledspaghetti
- name = "Boiled Spaghetti"
- desc = "A plain dish of noodles, this sucks."
+ name = "boiled spaghetti"
+ desc = "A plain dish of noodles. This sucks."
icon = 'icons/obj/food/pasta.dmi'
icon_state = "spaghettiboiled"
trash = /obj/item/trash/plate
@@ -44,8 +44,8 @@
list_reagents = list("nutriment" = 6, "tomatojuice" = 10, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/meatballspaghetti
- name = "spaghetti & Meatballs"
- desc = "Now thats a nic'e meatball!"
+ name = "spaghetti & meatballs"
+ desc = "Now thats a nice'a meatball!"
icon = 'icons/obj/food/pasta.dmi'
icon_state = "meatballspaghetti"
trash = /obj/item/trash/plate
@@ -61,7 +61,7 @@
list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6)
/obj/item/reagent_containers/food/snacks/macncheese
- name = "Macaroni cheese"
+ name = "mac n cheese"
desc = "One of the most comforting foods in the world. Apparently."
trash = /obj/item/trash/snack_bowl
icon = 'icons/obj/food/pasta.dmi'
diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm
index c34d8943da7..aabd47194ce 100644
--- a/code/modules/food_and_drinks/food/foods/pizza.dm
+++ b/code/modules/food_and_drinks/food/foods/pizza.dm
@@ -9,14 +9,14 @@
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita
- name = "Margherita"
+ name = "margherita pizza"
desc = "The golden standard of pizzas."
icon_state = "pizzamargherita"
slice_path = /obj/item/reagent_containers/food/snacks/margheritaslice
list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/margheritaslice
- name = "Margherita slice"
+ name = "margherita slice"
desc = "A slice of the classic pizza."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "pizzamargheritaslice"
@@ -24,49 +24,49 @@
list_reagents = list("nutriment" = 5)
/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza
- name = "Meatpizza"
+ name = "meat pizza"
desc = "A pizza with meat topping."
icon_state = "meatpizza"
slice_path = /obj/item/reagent_containers/food/snacks/meatpizzaslice
list_reagents = list("protein" = 30, "tomatojuice" = 6, "vitamin" = 8)
/obj/item/reagent_containers/food/snacks/meatpizzaslice
- name = "Meatpizza slice"
+ name = "meat pizza slice"
desc = "A slice of a meaty pizza."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "meatpizzaslice"
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
- name = "Mushroompizza"
+ name = "mushroom pizza"
desc = "Very special pizza."
icon_state = "mushroompizza"
slice_path = /obj/item/reagent_containers/food/snacks/mushroompizzaslice
list_reagents = list("plantmatter" = 30, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/mushroompizzaslice
- name = "Mushroompizza slice"
+ name = "mushroom pizza slice"
desc = "Maybe it is the last slice of pizza in your life."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "mushroompizzaslice"
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
- name = "Vegetable pizza"
- desc = "No one of Tomato Sapiens were harmed during making this pizza."
+ name = "vegetable pizza"
+ desc = "No Tomato Sapiens were harmed during the making of this pizza."
icon_state = "vegetablepizza"
slice_path = /obj/item/reagent_containers/food/snacks/vegetablepizzaslice
list_reagents = list("plantmatter" = 25, "tomatojuice" = 6, "oculine" = 12, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/vegetablepizzaslice
- name = "Vegetable pizza slice"
+ name = "vegetable pizza slice"
desc = "A slice of the most green pizza of all pizzas not containing green ingredients."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "vegetablepizzaslice"
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza
- name = "Hawaiian Pizza"
+ name = "Hawaiian pizza"
desc = "Love it or hate it, this pizza divides opinions. Complete with juicy pineapple."
icon_state = "hawaiianpizza" //NEEDED
slice_path = /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice
@@ -80,7 +80,7 @@
filling_color = "#e5b437"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza
- name = "Macaroni cheese pizza"
+ name = "mac n cheese pizza"
desc = "Gastronomists have yet to classify this dish as 'pizza'."
icon_state = "macpizza"
slice_path = /obj/item/reagent_containers/food/snacks/macpizzaslice
@@ -88,7 +88,7 @@
filling_color = "#ffe45d"
/obj/item/reagent_containers/food/snacks/macpizzaslice
- name = "Macaroni cheese pizza slice"
+ name = "mac n cheese pizza slice"
desc = "A delicious slice of pizza topped with macaroni cheese... wait, what the hell? Who would do this?!"
icon = 'icons/obj/food/pizza.dmi'
icon_state = "macpizzaslice"
@@ -235,20 +235,20 @@
/obj/item/pizzabox/margherita/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita(src)
- boxtag = "Margherita Deluxe"
+ boxtag = "margherita deluxe"
/obj/item/pizzabox/vegetable/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src)
- boxtag = "Gourmet Vegatable"
+ boxtag = "gourmet vegatable"
/obj/item/pizzabox/mushroom/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src)
- boxtag = "Mushroom Special"
+ boxtag = "mushroom special"
/obj/item/pizzabox/meat/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src)
- boxtag = "Meatlover's Supreme"
+ boxtag = "meatlover's supreme"
/obj/item/pizzabox/hawaiian/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src)
- boxtag = "Hawaiian Feast"
\ No newline at end of file
+ boxtag = "Hawaiian feast"
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm
index a55a92ae3d1..43f1b31df0e 100644
--- a/code/modules/food_and_drinks/food/foods/sandwiches.dm
+++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm
@@ -5,14 +5,14 @@
/obj/item/reagent_containers/food/snacks/brainburger
name = "brainburger"
- desc = "A strange looking burger. It looks almost sentient."
+ desc = "A strange looking burger. It appears almost sentient."
icon_state = "brainburger"
filling_color = "#F2B6EA"
bitesize = 3
list_reagents = list("nutriment" = 6, "prions" = 10, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/ghostburger
- name = "Ghost Burger"
+ name = "ghost burger"
desc = "Spooky! It doesn't look very filling."
icon_state = "ghostburger"
filling_color = "#FFF2FF"
@@ -47,8 +47,8 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/tofuburger
- name = "Tofu Burger"
- desc = "What.. is that meat?"
+ name = "tofu burger"
+ desc = "Making this should probably be a criminal offense."
icon_state = "tofuburger"
filling_color = "#FFFEE0"
bitesize = 3
@@ -73,14 +73,14 @@
/obj/item/reagent_containers/food/snacks/xenoburger
name = "xenoburger"
- desc = "Smells caustic. Tastes like heresy."
+ desc = "Smells caustic and tastes like heresy."
icon_state = "xburger"
filling_color = "#43DE18"
bitesize = 3
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/clownburger
- name = "Clown Burger"
+ name = "clown burger"
desc = "This tastes funny..."
icon_state = "clownburger"
filling_color = "#FF00FF"
@@ -88,7 +88,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/mimeburger
- name = "Mime Burger"
+ name = "mime burger"
desc = "Its taste defies language."
icon_state = "mimeburger"
filling_color = "#FFFFFF"
@@ -97,14 +97,14 @@
/obj/item/reagent_containers/food/snacks/baseballburger
name = "home run baseball burger"
- desc = "It's still warm. The steam coming off of it looks like baseball."
+ desc = "It's still warm. Batter up!"
icon_state = "baseball"
filling_color = "#CD853F"
bitesize = 3
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/spellburger
- name = "Spell Burger"
+ name = "spell burger"
desc = "This is absolutely Ei Nath."
icon_state = "spellburger"
filling_color = "#D505FF"
@@ -112,15 +112,15 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/bigbiteburger
- name = "Big Bite Burger"
- desc = "Forget the Big Mac. THIS is the future!"
+ name = "BigBite burger"
+ desc = "Forget the Big Mac, THIS is the future!"
icon_state = "bigbiteburger"
filling_color = "#E3D681"
bitesize = 3
list_reagents = list("nutriment" = 10, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/superbiteburger
- name = "Super Bite Burger"
+ name = "SuperBite burger"
desc = "This is a mountain of a burger. FOOD!"
icon_state = "superbiteburger"
filling_color = "#CCA26A"
@@ -128,8 +128,8 @@
list_reagents = list("nutriment" = 40, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/jellyburger
- name = "Jelly Burger"
- desc = "Culinary delight..?"
+ name = "jelly burger"
+ desc = "Culinary delight...?"
icon_state = "jellyburger"
filling_color = "#B572AB"
bitesize = 3
@@ -146,7 +146,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/sandwich
- name = "Sandwich"
+ name = "sandwich"
desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud."
icon_state = "sandwich"
trash = /obj/item/trash/plate
@@ -154,7 +154,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/toastedsandwich
- name = "Toasted Sandwich"
+ name = "toasted sandwich"
desc = "Now if you only had a pepper bar."
icon_state = "toastedsandwich"
trash = /obj/item/trash/plate
@@ -162,15 +162,15 @@
list_reagents = list("nutriment" = 6, "carbon" = 2)
/obj/item/reagent_containers/food/snacks/grilledcheese
- name = "Grilled Cheese Sandwich"
- desc = "Goes great with Tomato soup!"
+ name = "grilled cheese sandwich"
+ desc = "Goes great with tomato soup!"
icon_state = "toastedsandwich"
trash = /obj/item/trash/plate
filling_color = "#D9BE29"
list_reagents = list("nutriment" = 7, "vitamin" = 1) //why make a regualr sandwhich when you can make grilled cheese, with this nutriment value?
/obj/item/reagent_containers/food/snacks/jellysandwich
- name = "Jelly Sandwich"
+ name = "jelly sandwich"
desc = "You wish you had some peanut butter to go with this..."
icon_state = "jellysandwich"
trash = /obj/item/trash/plate
diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm
index ad56ef00704..d06f1eeb77b 100644
--- a/code/modules/food_and_drinks/food/foods/seafood.dm
+++ b/code/modules/food_and_drinks/food/foods/seafood.dm
@@ -18,8 +18,8 @@
list_reagents = list("protein" = 3, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/salmonsteak
- name = "Salmon steak"
- desc = "A piece of freshly-grilled salmon meat."
+ name = "salmon steak"
+ desc = "A fillet of freshly-grilled salmon meat."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "salmonsteak"
trash = /obj/item/trash/plate
@@ -37,7 +37,7 @@
list_reagents = list("protein" = 3, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/fishfingers
- name = "Fish Fingers"
+ name = "fish fingers"
desc = "A finger of fish."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfingers"
@@ -46,7 +46,7 @@
list_reagents = list("nutriment" = 4)
/obj/item/reagent_containers/food/snacks/fishburger
- name = "Fillet -o- Carp Sandwich"
+ name = "Fillet-O-Carp sandwich"
desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishburger"
@@ -55,7 +55,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/cubancarp
- name = "Cuban Carp"
+ name = "Cuban carp"
desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "cubancarp"
@@ -65,8 +65,8 @@
list_reagents = list("nutriment" = 6, "capsaicin" = 1)
/obj/item/reagent_containers/food/snacks/fishandchips
- name = "Fish and Chips"
- desc = "I do say so myself chap."
+ name = "fish and chips"
+ desc = "I do say so myself old chap. Indubitably!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishandchips"
filling_color = "#E3D796"
@@ -98,7 +98,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki
- name = "Ebi Makiroll"
+ name = "ebi makiroll"
desc = "A large unsliced roll of Ebi Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Ebi_maki"
@@ -108,7 +108,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Ebi
- name = "Ebi Sushi"
+ name = "ebi sushi"
desc = "A simple sushi consisting of cooked shrimp and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ebi"
@@ -116,7 +116,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki
- name = "Ikura Makiroll"
+ name = "ikura makiroll"
desc = "A large unsliced roll of Ikura Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Ikura_maki"
@@ -126,7 +126,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_Ikura
- name = "Ikura Sushi"
+ name = "ikura sushi"
desc = "A simple sushi consisting of salmon roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ikura"
@@ -134,7 +134,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/Sake_maki
- name = "Sake Makiroll"
+ name = "sake makiroll"
desc = "A large unsliced roll of Ebi Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Sake_maki"
@@ -144,7 +144,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Sake
- name = "Sake Sushi"
+ name = "sake sushi"
desc = "A simple sushi consisting of raw salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Sake"
@@ -152,7 +152,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki
- name = "Smoked Salmon Makiroll"
+ name = "smoked salmon makiroll"
desc = "A large unsliced roll of Smoked Salmon Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "SmokedSalmon_maki"
@@ -162,7 +162,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon
- name = "Smoked Salmon Sushi"
+ name = "smoked salmon sushi"
desc = "A simple sushi consisting of cooked salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_SmokedSalmon"
@@ -170,7 +170,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Tamago_maki
- name = "Tamago Makiroll"
+ name = "tamago makiroll"
desc = "A large unsliced roll of Tamago Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Tamago_maki"
@@ -180,7 +180,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Tamago
- name = "Tamago Sushi"
+ name = "tamago sushi"
desc = "A simple sushi consisting of egg and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tamago"
@@ -188,7 +188,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Inari_maki
- name = "Inari Makiroll"
+ name = "inari makiroll"
desc = "A large unsliced roll of Inari Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Inari_maki"
@@ -198,7 +198,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Inari
- name = "Inari Sushi"
+ name = "inari sushi"
desc = "A piece of fried tofu stuffed with rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Inari"
@@ -206,7 +206,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Masago_maki
- name = "Masago Makiroll"
+ name = "masago makiroll"
desc = "A large unsliced roll of Masago Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Masago_maki"
@@ -216,7 +216,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_Masago
- name = "Masago Sushi"
+ name = "masago sushi"
desc = "A simple sushi consisting of goldfish roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
@@ -224,7 +224,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki
- name = "Tobiko Makiroll"
+ name = "tobiko makiroll"
desc = "A large unsliced roll of Tobkio Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Tobiko_maki"
@@ -234,7 +234,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_Tobiko
- name = "Tobiko Sushi"
+ name = "tobiko sushi"
desc = "A simple sushi consisting of shark roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
@@ -242,7 +242,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki
- name = "Tobiko and Egg Makiroll"
+ name = "tobiko and egg makiroll"
desc = "A large unsliced roll of Tobkio and Egg Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "TobikoEgg_maki"
@@ -252,7 +252,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_TobikoEgg
- name = "Tobiko and Egg Sushi"
+ name = "tobiko and egg sushi"
desc = "A sushi consisting of shark roe and an egg."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_TobikoEgg"
@@ -260,7 +260,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/Tai_maki
- name = "Tai Makiroll"
+ name = "tai makiroll"
desc = "A large unsliced roll of Tai Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Tai_maki"
@@ -270,7 +270,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Tai
- name = "Tai Sushi"
+ name = "tai sushi"
desc = "A simple sushi consisting of catfish and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tai"
@@ -278,7 +278,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sushi_Unagi
- name = "Unagi Sushi"
+ name = "unagi sushi"
desc = "A simple sushi consisting of eel and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Hokki"
diff --git a/code/modules/food_and_drinks/food/foods/side_dishes.dm b/code/modules/food_and_drinks/food/foods/side_dishes.dm
index 7b563519ca3..ec562d4e8bb 100644
--- a/code/modules/food_and_drinks/food/foods/side_dishes.dm
+++ b/code/modules/food_and_drinks/food/foods/side_dishes.dm
@@ -74,7 +74,7 @@
list_reagents = list("nutriment" = 5, "gravy" = 5, "mashedpotatoes" = 10, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/stuffing
- name = "Stuffing"
+ name = "stuffing"
desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!"
icon_state = "stuffing"
filling_color = "#C9AC83"
@@ -88,7 +88,7 @@
list_reagents = list("nutriment" = 6)
/obj/item/reagent_containers/food/snacks/boiledrice
- name = "Boiled Rice"
+ name = "boiled rice"
desc = "A boring dish of boring rice."
icon_state = "boiledrice"
trash = /obj/item/trash/snack_bowl
diff --git a/code/modules/food_and_drinks/food/foods/soups.dm b/code/modules/food_and_drinks/food/foods/soups.dm
index 76e4d752a41..586912d1f79 100644
--- a/code/modules/food_and_drinks/food/foods/soups.dm
+++ b/code/modules/food_and_drinks/food/foods/soups.dm
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/meatballsoup
- name = "Meatball soup"
+ name = "meatball soup"
desc = "You've got balls kid, BALLS!"
icon_state = "meatballsoup"
trash = /obj/item/trash/snack_bowl
@@ -21,7 +21,7 @@
list_reagents = list("nutriment" = 5, "slimejelly" = 5, "water" = 5, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/bloodsoup
- name = "Tomato soup"
+ name = "tomato soup"
desc = "Smells like copper."
icon_state = "tomatosoup"
filling_color = "#FF0000"
@@ -29,7 +29,7 @@
list_reagents = list("nutriment" = 2, "blood" = 10, "water" = 5, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/clownstears
- name = "Clown's Tears"
+ name = "clown's tears"
desc = "Not very funny."
icon_state = "clownstears"
filling_color = "#C4FBFF"
@@ -37,7 +37,7 @@
list_reagents = list("nutriment" = 4, "banana" = 5, "water" = 5, "vitamin" = 8)
/obj/item/reagent_containers/food/snacks/vegetablesoup
- name = "Vegetable soup"
+ name = "vegetable soup"
desc = "A true vegan meal." //TODO
icon_state = "vegetablesoup"
trash = /obj/item/trash/snack_bowl
@@ -46,8 +46,8 @@
list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/nettlesoup
- name = "Nettle soup"
- desc = "To think, the botanist would've beat you to death with one of these."
+ name = "nettle soup"
+ desc = "To think, the botanist would've beaten you to death with one of these."
icon_state = "nettlesoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#AFC4B5"
@@ -84,7 +84,7 @@
reagents.add_reagent("vitamin", 1)
/obj/item/reagent_containers/food/snacks/tomatosoup
- name = "Tomato Soup"
+ name = "tomato soup"
desc = "Drinking this feels like being a vampire! A tomato vampire..."
icon_state = "tomatosoup"
trash = /obj/item/trash/snack_bowl
@@ -93,7 +93,7 @@
list_reagents = list("nutriment" = 5, "tomatojuice" = 10, "vitamin" = 3)
/obj/item/reagent_containers/food/snacks/milosoup
- name = "Milosoup"
+ name = "milosoup"
desc = "The universe's best soup! Yum!!!"
icon_state = "milosoup"
trash = /obj/item/trash/snack_bowl
@@ -128,7 +128,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/stew
- name = "Stew"
+ name = "stew"
desc = "A nice and warm stew. Healthy and strong."
icon_state = "stew"
filling_color = "#9E673A"
@@ -136,7 +136,7 @@
list_reagents = list("nutriment" = 10, "oculine" = 5, "tomatojuice" = 5, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/stewedsoymeat
- name = "Stewed Soy Meat"
+ name = "stewed soy meat"
desc = "Even non-vegetarians will LOVE this!"
icon_state = "stewedsoymeat"
trash = /obj/item/trash/plate
@@ -148,7 +148,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/hotchili
- name = "Hot Chili"
+ name = "hot chili"
desc = "A five alarm Texan Chili!"
icon_state = "hotchili"
trash = /obj/item/trash/snack_bowl
@@ -157,7 +157,7 @@
list_reagents = list("nutriment" = 5, "capsaicin" = 1, "tomatojuice" = 2, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/coldchili
- name = "Cold Chili"
+ name = "cold chili"
desc = "This slush is barely a liquid!"
icon_state = "coldchili"
filling_color = "#2B00FF"
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index bb857969d5c..b1cd3f091ff 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -264,7 +264,7 @@
/obj/item/reagent_containers/food/snacks/badrecipe
- name = "Burned mess"
+ name = "burned mess"
desc = "Someone should be demoted from chef for this."
icon_state = "badrecipe"
filling_color = "#211F02"
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 42b616990c6..6813026be76 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -50,6 +50,21 @@
component_parts += new /obj/item/stock_parts/console_screen(null)
RefreshParts()
+/obj/machinery/mineral/ore_redemption/golem
+ req_access = list(access_free_golems)
+ req_access_reclaim = access_free_golems
+
+/obj/machinery/mineral/ore_redemption/golem/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/circuitboard/ore_redemption/golem(null)
+ component_parts += new /obj/item/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/stock_parts/manipulator(null)
+ component_parts += new /obj/item/stock_parts/micro_laser(null)
+ component_parts += new /obj/item/assembly/igniter(null)
+ component_parts += new /obj/item/stock_parts/console_screen(null)
+ RefreshParts()
+
/obj/machinery/mineral/ore_redemption/Destroy()
QDEL_NULL(files)
GET_COMPONENT(materials, /datum/component/material_container)
@@ -426,6 +441,32 @@
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
)
+/obj/machinery/mineral/equipment_vendor/golem
+ name = "golem ship equipment vendor"
+
+/obj/machinery/mineral/equipment_vendor/golem/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/circuitboard/mining_equipment_vendor/golem(null)
+ component_parts += new /obj/item/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/stock_parts/console_screen(null)
+ RefreshParts()
+
+/obj/machinery/mineral/equipment_vendor/golem/Initialize()
+ . = ..()
+ desc += "\nIt seems a few selections have been added."
+ prize_list += list(
+ new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/golem, 250),
+ new /datum/data/mining_equipment("Science Backpack", /obj/item/storage/backpack/science, 250),
+ new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250),
+ new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 250),
+ new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
+ new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
+ new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000),
+ new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 1500)
+ )
/datum/data/mining_equipment/
var/equipment_name = "generic"
diff --git a/code/modules/mining/mine_areas.dm b/code/modules/mining/mine_areas.dm
index e07d779c9a8..5781bb06bbe 100644
--- a/code/modules/mining/mine_areas.dm
+++ b/code/modules/mining/mine_areas.dm
@@ -16,6 +16,9 @@
outdoors = 1
ambientsounds = list('sound/ambience/ambimine.ogg')
+/area/mine/dangerous/explored/golem
+ name = "Small Asteroid"
+
/area/mine/dangerous/unexplored
name = "Mine"
icon_state = "unexplored"
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 79cfc3ae9f8..0670c87e20d 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -522,6 +522,17 @@ var/global/list/rockTurfEdgeCache = list(
O.attackby(W,user)
return
+ if(istype(W, /obj/item/stack/tile/plasteel) && isarea(loc))
+ var/area/A = loc
+ if(A.outdoors)
+ to_chat(user, "You must define a room as part of the station using blueprints or an equivalent item first.")
+ return
+ playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
+ make_plating()
+ icon_plating = "plating"
+ icon_state = "plating"
+ update_icon()
+
/turf/simulated/floor/plating/airless/asteroid/gets_drilled()
if(!dug)
gets_dug()
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 2d4b555448b..cadff45a439 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -529,6 +529,13 @@
return TRUE
return FALSE
+/datum/language/abductor/golem
+ name = "Golem Mindlink"
+ desc = "Communicate with other alien alloy golems through a psychic link."
+
+/datum/language/abductor/golem/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
+ return TRUE
+
/datum/language/corticalborer
name = "Cortical Link"
desc = "Cortical borers possess a strange link between their tiny minds."
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 8a6324e0ebd..e5122c70604 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -451,6 +451,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
continue
if(istype(I, /obj/item/organ))
continue
+ if(I.flags & ABSTRACT)
+ continue
else
failed++
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index bcff3030376..965a2c81ab2 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -10,7 +10,8 @@ emp_act
/mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone)
-
+ if(!dna.species.bullet_act(P, src))
+ return FALSE
if(P.is_reflectable)
if(check_reflect(def_zone)) // Checks if you've passed a reflection% check
visible_message("The [P.name] gets reflected by [src]!", \
@@ -295,6 +296,8 @@ emp_act
if(Iforce > 10 || Iforce >= 5 && prob(33))
forcesay(GLOB.hit_appends) //forcesay checks stat already
+ dna.species.spec_attacked_by(I, user, affecting, user.a_intent, src)
+
//this proc handles being hit by a thrown atom
/mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0)
var/obj/item/I
@@ -321,6 +324,8 @@ emp_act
visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!")
hitpush = 0
skipcatch = 1 //can't catch the now embedded item
+ if(!blocked)
+ dna.species.spec_hitby(AM, src)
return ..()
/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2)
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index d07ef2b9f32..e5d5c070aae 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -360,6 +360,10 @@
var/datum/unarmed_attack/attack = user.dna.species.unarmed
user.do_attack_animation(target, attack.animation_type)
+ if(attack.harmless)
+ playsound(target.loc, attack.attack_sound, 25, 1, -1)
+ target.visible_message("[user] [pick(attack.attack_verb)]ed [target]!")
+ return FALSE
add_attack_logs(user, target, "Melee attacked with fists", target.ckey ? null : ATKLOG_ALL)
if(!iscarbon(user))
@@ -509,6 +513,7 @@
var/miss_sound = 'sound/weapons/punchmiss.ogg'
var/sharp = FALSE
var/animation_type = ATTACK_EFFECT_PUNCH
+ var/harmless = FALSE //if set to true, attacks won't be admin logged and punches will "hit" for no damage
/datum/unarmed_attack/diona
attack_verb = list("lash", "bludgeon")
@@ -719,6 +724,13 @@ It'll return null if the organ doesn't correspond, so include null checks when u
if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately
M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling
+/datum/species/proc/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) //return TRUE if hit, FALSE if stopped/reflected/etc
+ return TRUE
+
+/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
+
+/datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
+
/proc/get_random_species(species_name = FALSE) // Returns a random non black-listed or hazardous species, either as a string or datum
var/static/list/random_species = list()
if(!random_species.len)
diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm
index c3fa38611b5..8ab525bb289 100644
--- a/code/modules/mob/living/carbon/human/species/golem.dm
+++ b/code/modules/mob/living/carbon/human/species/golem.dm
@@ -5,8 +5,10 @@
icobase = 'icons/mob/human_races/r_golem.dmi'
deform = 'icons/mob/human_races/r_golem.dmi'
- species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE, NOGUNS)
-
+ species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, VIRUSIMMUNE, NOGUNS)
+ brute_mod = 0.45 //55% damage reduction
+ burn_mod = 0.45
+ tox_mod = 0.45
oxy_mod = 0
dietflags = DIET_OMNI //golems can eat anything because they are magic or something
@@ -31,35 +33,654 @@
blood_color = "#515573"
flesh_color = "#137E8F"
+ skinned_type = /obj/item/stack/sheet/metal
slowdown = 3
siemens_coeff = 0
+ blacklisted = TRUE // To prevent golem subtypes from overwhelming the odds when random species changes, only the Random Golem type can be chosen
+ dangerous_existence = TRUE
+
has_organ = list(
- "brain" = /obj/item/organ/internal/brain/golem
+ "brain" = /obj/item/organ/internal/brain/golem,
+ "adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator
) //Has standard darksight of 2.
suicide_messages = list(
"is crumbling into dust!",
"is smashing their body apart!")
+ var/golem_colour = rgb(170, 170, 170)
+ var/info_text = "As an Iron Golem, you don't have any special traits."
+ var/random_eligible = TRUE
+ var/prefix = "Iron"
+ var/list/special_names = list("Tarkus")
+ var/human_surname_chance = 3
+ var/special_name_chance = 5
+ var/owner //dobby is a free golem
+
+/datum/species/golem/get_random_name()
+ var/golem_surname = pick(GLOB.golem_names)
+ // 3% chance that our golem has a human surname, because cultural contamination
+ if(prob(human_surname_chance))
+ golem_surname = pick(GLOB.last_names)
+ else if(special_names && special_names.len && prob(special_name_chance))
+ golem_surname = pick(special_names)
+
+ var/golem_name = "[prefix] [golem_surname]"
+ return golem_name
+
/datum/species/golem/on_species_gain(mob/living/carbon/human/H)
..()
if(H.mind)
H.mind.assigned_role = "Golem"
- H.mind.special_role = SPECIAL_ROLE_GOLEM
- H.real_name = "adamantine golem ([rand(1, 1000)])"
+ if(owner)
+ H.mind.special_role = SPECIAL_ROLE_GOLEM
+ else
+ H.mind.special_role = SPECIAL_ROLE_FREE_GOLEM
+ H.real_name = get_random_name()
H.name = H.real_name
H.equip_to_slot_or_del(new /obj/item/clothing/under/golem(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/golem(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(H), slot_wear_mask)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves)
+ H.regenerate_icons()
+ to_chat(H, info_text)
+//Random Golem
-////////Adamantine Golem stuff I dunno where else to put it
+/datum/species/golem/random
+ name = "Random Golem"
+ blacklisted = FALSE
+ dangerous_existence = FALSE
+ var/static/list/random_golem_types
+
+/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ ..()
+ if(!random_golem_types)
+ random_golem_types = subtypesof(/datum/species/golem) - type
+ for(var/V in random_golem_types)
+ var/datum/species/golem/G = V
+ if(!initial(G.random_eligible))
+ random_golem_types -= G
+ var/datum/species/golem/golem_type = pick(random_golem_types)
+ var/mob/living/carbon/human/H = C
+ H.set_species(golem_type)
+
+//Golem subtypes
+
+//Leader golems, can resonate to communicate with all other golems
+/datum/species/golem/adamantine
+ name = "Adamantine Golem"
+ skinned_type = /obj/item/stack/sheet/mineral/adamantine
+ has_organ = list(
+ "brain" = /obj/item/organ/internal/brain/golem,
+ "adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator,
+ "vocal_cords" = /obj/item/organ/internal/vocal_cords/adamantine
+ )
+ golem_colour = rgb(68, 238, 221)
+ info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems."
+ prefix = "Adamantine"
+ special_names = null
+
+//The suicide bombers of golemkind
+/datum/species/golem/plasma
+ name = "Plasma Golem"
+ skinned_type = /obj/item/stack/ore/plasma
+ golem_colour = rgb(170, 51, 221)
+ heat_level_1 = 360
+ heat_level_2 = 400
+ heat_level_3 = 460
+ info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!"
+ heatmod = 0 //fine until they blow up
+ prefix = "Plasma"
+ special_names = list("Flood", "Fire", "Bar", "Man")
+ var/boom_warning = FALSE
+ var/datum/action/innate/ignite/ignite
+
+/datum/species/golem/plasma/handle_life(mob/living/carbon/human/H)
+ if(H.bodytemperature > 750)
+ if(!boom_warning && H.on_fire)
+ to_chat(H, "You feel like you could blow up at any moment!")
+ boom_warning = TRUE
+ else
+ if(boom_warning)
+ to_chat(H, "You feel more stable.")
+ boom_warning = FALSE
+
+ if(H.bodytemperature > 850 && H.on_fire && prob(25))
+ explosion(get_turf(H), 1, 2, 4, flame_range = 5)
+ if(H)
+ H.gib()
+ if(H.fire_stacks < 2) //flammable
+ H.adjust_fire_stacks(1)
+ ..()
+
+/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ ..()
+ if(ishuman(C))
+ ignite = new
+ ignite.Grant(C)
+
+/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C)
+ if(ignite)
+ ignite.Remove(C)
+ ..()
+
+/datum/action/innate/ignite
+ name = "Ignite"
+ desc = "Set yourself aflame, bringing yourself closer to exploding!"
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "sacredflame"
+
+/datum/action/innate/ignite/Activate()
+ if(ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ if(H.fire_stacks)
+ to_chat(owner, "You ignite yourself!")
+ else
+ to_chat(owner, "You try to ignite yourself, but fail!")
+ H.IgniteMob() //firestacks are already there passively
+
+//Harder to hurt
+/datum/species/golem/diamond
+ name = "Diamond Golem"
+ golem_colour = rgb(0, 255, 255)
+ brute_mod = 0.3 //70% damage reduction up from 55%
+ burn_mod = 0.3
+ tox_mod = 0.3
+ skinned_type = /obj/item/stack/ore/diamond
+ info_text = "As a Diamond Golem, you are more resistant than the average golem."
+ prefix = "Diamond"
+ special_names = list("Back")
+
+//Faster but softer and less armoured
+/datum/species/golem/gold
+ name = "Gold Golem"
+ golem_colour = rgb(204, 204, 0)
+ slowdown = 2
+ brute_mod = 0.75 //25% damage reduction down from 55%
+ burn_mod = 0.75
+ tox_mod = 0.75
+ skinned_type = /obj/item/stack/ore/gold
+ info_text = "As a Gold Golem, you are faster but less resistant than the average golem."
+ prefix = "Golden"
+ special_names = list("Boy")
+
+//Heavier, thus higher chance of stunning when punching
+/datum/species/golem/silver
+ name = "Silver Golem"
+ golem_colour = rgb(221, 221, 221)
+ punchstunthreshold = 9 //60% chance, from 40%
+ skinned_type = /obj/item/stack/ore/silver
+ info_text = "As a Silver Golem, your attacks have a higher chance of stunning."
+ prefix = "Silver"
+ special_names = list("Surfer", "Chariot", "Lining")
+
+//Harder to stun, deals more damage, but it's even slower
+/datum/species/golem/plasteel
+ name = "Plasteel Golem"
+ golem_colour = rgb(187, 187, 187)
+ stun_mod = 0.4
+ punchdamagelow = 12
+ punchdamagehigh = 21
+ punchstunthreshold = 18 //still 40% stun chance
+ slowdown = 5 //diona speed
+ skinned_type = /obj/item/stack/ore/iron
+ info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching."
+ prefix = "Plasteel"
+ special_names = null
+ unarmed_type = /datum/unarmed_attack/golem/plasteel
+
+/datum/unarmed_attack/golem/plasteel
+ attack_verb = list("smash")
+ attack_sound = 'sound/effects/meteorimpact.ogg'
+
+//More resistant to burn damage
+//Add ashstorm resistance if we ever port lavaland
+/datum/species/golem/titanium
+ name = "Titanium Golem"
+ golem_colour = rgb(255, 255, 255)
+ skinned_type = /obj/item/stack/ore/titanium
+ info_text = "As a Titanium Golem, you are resistant to burn damage."
+ burn_mod = 0.3
+ prefix = "Titanium"
+ special_names = list("Dioxide")
+
+//Even more resistant to burn damage
+//Add ashstorm and lava resistance if we ever port lavaland
+/datum/species/golem/plastitanium
+ name = "Plastitanium Golem"
+ golem_colour = rgb(136, 136, 136)
+ skinned_type = /obj/item/stack/ore/titanium
+ info_text = "As a Plastitanium Golem, you are very resistant to burn damage."
+ burn_mod = 0.15
+ prefix = "Plastitanium"
+ special_names = null
+
+//Fast and regenerates... but can only speak like an abductor
+/datum/species/golem/alloy
+ name = "Alien Alloy Golem"
+ golem_colour = rgb(51, 51, 51)
+ skinned_type = /obj/item/stack/sheet/mineral/abductor
+ language = "Golem Mindlink"
+ default_language = "Golem Mindlink"
+ slowdown = 2 //faster
+ info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to speak telepathically to other alloy golems."
+ prefix = "Alien"
+ special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown
+
+//Regenerates because self-repairing super-advanced alien tech
+/datum/species/golem/alloy/handle_life(mob/living/carbon/human/H)
+ if(H.stat == DEAD)
+ return
+ H.adjustBruteLoss(-2)
+ H.adjustFireLoss(-2)
+ H.adjustToxLoss(-2)
+ H.adjustOxyLoss(-2)
+
+/datum/species/golem/alloy/can_understand(mob/other) //Can understand everyone, but they can only speak over their mindlink
+ return TRUE
+
+/datum/species/golem/alloy/on_species_gain(mob/living/carbon/human/H)
+ ..()
+ H.languages.Cut()
+ H.add_language("Golem Mindlink")
+
+//Regenerates like dionas, less resistant
+/datum/species/golem/wood
+ name = "Wood Golem"
+ golem_colour = rgb(158, 112, 75)
+ skinned_type = /obj/item/stack/sheet/wood
+ species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, VIRUSIMMUNE, NOGUNS, IS_PLANT)
+ //Can burn and take damage from heat
+ brute_mod = 0.7 //30% damage reduction down from 55%
+ burn_mod = 1
+ heatmod = 1.5
+
+ heat_level_1 = 300
+ heat_level_2 = 340
+ heat_level_3 = 400
+
+ dietflags = 0 //Regenerate nutrition in light, no diet necessary
+ taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
+
+ info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness."
+ prefix = "Wooden"
+ special_names = list("Bark", "Willow", "Catalpa", "Oak", "Sap", "Twig", "Branch", "Maple", "Birch", "Elm", "Basswood", "Cottonwood", "Larch", "Aspen", "Ash", "Beech", "Buckeye", "Cedar", "Chestnut", "Cypress", "Fir", "Hawthorn", "Hazel", "Hickory", "Ironwood", "Juniper", "Leaf", "Mangrove", "Palm", "Pawpaw", "Pine", "Poplar", "Redwood", "Redbud", "Sassafras", "Spruce", "Sumac", "Trunk", "Walnut", "Yew")
+ human_surname_chance = 0
+ special_name_chance = 100
+
+/datum/species/golem/wood/handle_life(mob/living/carbon/human/H)
+ var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
+ if(isturf(H.loc)) //else, there's considered to be no light
+ var/turf/T = H.loc
+ light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights
+ H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10)
+
+ if(light_amount > 0)
+ H.clear_alert("nolight")
+ else
+ H.throw_alert("nolight", /obj/screen/alert/nolight)
+
+ if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal
+
+ H.adjustBruteLoss(-(light_amount/2))
+ H.adjustFireLoss(-(light_amount/4))
+ if(H.nutrition < NUTRITION_LEVEL_STARVING+50)
+ H.take_overall_damage(10,0)
+ ..()
+
+//Radioactive
+/datum/species/golem/uranium
+ name = "Uranium Golem"
+ golem_colour = rgb(119, 255, 0)
+ skinned_type = /obj/item/stack/ore/uranium
+ info_text = "As an Uranium Golem, you emit radiation. It won't harm fellow golems, but organic lifeforms will be affected."
+ prefix = "Uranium"
+ special_names = list("Oxide", "Rod", "Meltdown")
+
+/datum/species/golem/uranium/handle_life(mob/living/carbon/human/H)
+ for(var/mob/living/L in range(2, H))
+ if(isgolem(H))
+ continue
+ to_chat(L, "You are enveloped by a soft green glow emanating from [H].")
+ L.apply_effect(10, IRRADIATE)
+ ..()
+
+//Ventcrawler
+/datum/species/golem/plastic
+ name = "Plastic Golem"
+ prefix = "Plastic"
+ special_names = null
+ golem_colour = rgb(255, 255, 255)
+ skinned_type = /obj/item/stack/sheet/plastic
+ info_text = "As a Plastic Golem, you are capable of ventcrawling if you're naked."
+
+/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ . = ..()
+ C.ventcrawler = 1
+
+/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C)
+ . = ..()
+ C.ventcrawler = initial(C.ventcrawler)
+
+//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death.
+/datum/species/golem/sand
+ name = "Sand Golem"
+ golem_colour = rgb(255, 220, 143)
+ skinned_type = /obj/item/stack/ore/glass //this is sand
+ brute_mod = 0.25
+ burn_mod = 3
+ info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery."
+ unarmed_type = /datum/unarmed_attack/golem/sand
+ prefix = "Sand"
+ special_names = list("Castle", "Bag", "Dune", "Worm", "Storm")
+
+/datum/species/golem/sand/handle_death(mob/living/carbon/human/H)
+ H.visible_message("[H] turns into a pile of sand!")
+ for(var/obj/item/W in H)
+ H.unEquip(W)
+ for(var/i=1, i <= rand(3, 5), i++)
+ new /obj/item/stack/ore/glass(get_turf(H))
+ qdel(H)
+
+/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
+ if(!(P.original == H && P.firer == H))
+ if(P.flag == "bullet" || P.flag == "bomb")
+ playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1)
+ H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \
+ "The [P.name] sinks harmlessly in [H]'s sandy body!")
+ return FALSE
+ return TRUE
+
+/datum/unarmed_attack/golem/sand
+ attack_sound = 'sound/effects/shovel_dig.ogg'
+
+//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death.
+/datum/species/golem/glass
+ name = "Glass Golem"
+ golem_colour = rgb(90, 150, 180)
+ skinned_type = /obj/item/shard
+ brute_mod = 3 //very fragile
+ burn_mod = 0.25
+ info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery."
+ unarmed_type = /datum/unarmed_attack/golem/glass
+ prefix = "Glass"
+ special_names = list("Lens", "Prism", "Fiber", "Bead")
+
+/datum/species/golem/glass/handle_death(mob/living/carbon/human/H)
+ playsound(H, "shatter", 70, 1)
+ H.visible_message("[H] shatters!")
+ for(var/obj/item/W in H)
+ H.unEquip(W)
+ for(var/i=1, i <= rand(3, 5), i++)
+ new /obj/item/shard(get_turf(H))
+ qdel(H)
+
+/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
+ if(!(P.original == H && P.firer == H)) //self-shots don't reflect
+ if(P.is_reflectable)
+ H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \
+ "The [P.name] gets reflected by [H]'s glass skin!")
+ if(P.starting)
+ var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/turf/curloc = get_turf(H)
+
+ // redirect the projectile
+ P.firer = src
+ P.original = locate(new_x, new_y, P.z)
+ P.starting = curloc
+ P.current = curloc
+ P.yo = new_y - curloc.y
+ P.xo = new_x - curloc.x
+ P.Angle = null
+ return FALSE
+ return TRUE
+
+/datum/unarmed_attack/golem/glass
+ attack_sound = 'sound/effects/glassbr2.ogg'
+
+//Teleports when hit or when it wants to
+/datum/species/golem/bluespace
+ name = "Bluespace Golem"
+ golem_colour = rgb(51, 51, 255)
+ skinned_type = /obj/item/stack/ore/bluespace_crystal
+ info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance."
+ prefix = "Bluespace"
+ special_names = list("Crystal", "Polycrystal")
+ unarmed_type = /datum/unarmed_attack/golem/bluespace
+
+ var/datum/action/innate/unstable_teleport/unstable_teleport
+ var/teleport_cooldown = 100
+ var/last_teleport = 0
+ var/tele_range = 6
+
+/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H)
+ H.visible_message("[H] teleports!", "You destabilize and teleport!")
+ var/list/turfs = new/list()
+ for(var/turf/T in orange(tele_range, H))
+ if(T.density)
+ continue
+ if(T.x>world.maxx-tele_range || T.xworld.maxy-tele_range || T.y last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP)
+ reactive_teleport(H)
+
+/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
+ ..()
+ if(world.time > last_teleport + teleport_cooldown && user != H)
+ reactive_teleport(H)
+
+/datum/species/golem/bluespace/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
+ if(world.time > last_teleport + teleport_cooldown)
+ reactive_teleport(H)
+ return TRUE
+
+/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ ..()
+ if(ishuman(C))
+ unstable_teleport = new
+ unstable_teleport.Grant(C)
+ last_teleport = world.time
+
+/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C)
+ if(unstable_teleport)
+ unstable_teleport.Remove(C)
+ ..()
+
+/datum/action/innate/unstable_teleport
+ name = "Unstable Teleport"
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "blink"
+ icon_icon = 'icons/mob/actions/actions.dmi'
+ var/cooldown = 150
+ var/last_teleport = 0
+ var/tele_range = 6
+
+/datum/action/innate/unstable_teleport/IsAvailable()
+ if(..())
+ if(world.time > last_teleport + cooldown)
+ return 1
+ return 0
+
+/datum/action/innate/unstable_teleport/Activate()
+ var/mob/living/carbon/human/H = owner
+ H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...")
+ playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1)
+ addtimer(CALLBACK(src, .proc/teleport, H), 15)
+
+/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H)
+ H.visible_message("[H] teleports!", "You teleport!")
+ var/list/turfs = new/list()
+ for(var/turf/T in orange(tele_range, H))
+ if(istype(T, /turf/space))
+ continue
+ if(T.density)
+ continue
+ if(T.x>world.maxx-tele_range || T.xworld.maxy-tele_range || T.y last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP)
+ new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+
+/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
+ ..()
+ if(world.time > last_banana + banana_cooldown && user != H)
+ new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+
+/datum/species/golem/bananium/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
+ if(world.time > last_banana + banana_cooldown)
+ new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+ return TRUE
+
+/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
+ ..()
+ var/obj/item/I
+ if(istype(AM, /obj/item))
+ I = AM
+ if(I.thrownby == H) //No throwing stuff at yourself to make bananas
+ return 0
+ else
+ new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+
+/datum/species/golem/bananium/handle_life(mob/living/carbon/human/H)
+ if(!active)
+ if(world.time > last_honk + honkooldown)
+ active = 1
+ playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1)
+ last_honk = world.time
+ honkooldown = rand(20, 80)
+ active = null
+ ..()
+
+/datum/species/golem/bananium/handle_death(mob/living/carbon/human/H)
+ playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0)
+
+/datum/unarmed_attack/golem/bananium
+ attack_verb = list("HONK")
+ attack_sound = 'sound/items/airhorn2.ogg'
+ animation_type = ATTACK_EFFECT_DISARM
+ harmless = TRUE
+
+//...
+/datum/species/golem/tranquillite
+ name = "Tranquillite Golem"
+ prefix = "Tranquillite"
+ special_names = null
+ golem_colour = rgb(255, 255, 255)
+ skinned_type = /obj/item/stack/ore/tranquillite
+ info_text = "As a Tranquillite Golem, you are capable of creating invisible walls, and can regenerate by drinking your bottle of Nothing."
+ unarmed_type = /datum/unarmed_attack/golem/tranquillite
+
+/datum/species/golem/tranquillite/get_random_name()
+ var/mime_name = pick(GLOB.mime_names)
+ var/golem_name = "[prefix] [mime_name]"
+ return golem_name
+
+/datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H)
+ ..()
+ H.job = "Mime"
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_r_store)
+ H.equip_to_slot_or_del(new /obj/item/cane(H), slot_l_hand)
+ if(H.mind)
+ H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
+ H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
+ H.mind.miming = TRUE
+
+/datum/unarmed_attack/golem/tranquillite
+ attack_sound = null
+ miss_sound = null
+
+//Golem abstract items
/obj/item/clothing/under/golem
- name = "adamantine skin"
+ name = "golem skin"
desc = "a golem's skin"
icon_state = "golem"
item_state = "golem"
@@ -69,34 +690,39 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/golem
- name = "adamantine shell"
+ name = "golem shell"
desc = "a golem's thick outter shell"
icon_state = "golem"
item_state = "golem"
- body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES
- flags = ABSTRACT | NODROP | THICKMATERIAL
+ gas_transfer_coefficient = 0.01
+ permeability_coefficient = 0.02
+ body_parts_covered = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
+ flags_inv = HIDEGLOVES | HIDESHOES
+ flags = STOPSPRESSUREDMAGE | ABSTRACT | NODROP | THICKMATERIAL
flags_size = ONESIZEFITSALL
- armor = list(melee = 55, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ cold_protection = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
+ min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
/obj/item/clothing/shoes/golem
name = "golem's feet"
- desc = "sturdy adamantine feet"
+ desc = "sturdy golem feet"
icon_state = "golem"
item_state = "golem"
flags = ABSTRACT | NODROP
/obj/item/clothing/mask/gas/golem
name = "golem's face"
- desc = "the imposing face of an adamantine golem"
+ desc = "the imposing face of a golem"
icon_state = "golem"
item_state = "golem"
unacidable = 1
flags = ABSTRACT | NODROP
+ flags_inv = HIDEEARS | HIDEEYES
/obj/item/clothing/gloves/golem
name = "golem's hands"
- desc = "strong adamantine hands"
+ desc = "strong golem hands"
icon_state = "golem"
item_state = null
flags = ABSTRACT | NODROP
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 1d7dc2869eb..ff93cd54b80 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -222,6 +222,10 @@ var/global/list/damage_icon_parts = list()
base_icon.Blend(temp, ICON_OVERLAY)
if(!skeleton)
+ if(isgolem(src))
+ var/datum/species/golem/G = src.dna.species
+ if(G.golem_colour)
+ base_icon.ColorTone(G.golem_colour)
if(husk)
base_icon.ColorTone(husk_color_mod)
else if(hulk)
@@ -239,6 +243,7 @@ var/global/list/damage_icon_parts = list()
var/mutable_appearance/new_base = mutable_appearance(base_icon, layer = -LIMBS_LAYER)
human_icon_cache[icon_key] = new_base
standing += new_base
+
//END CACHED ICON GENERATION.
overlays_standing[LIMBS_LAYER] = standing
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 0421cbaad18..43a811dc3a3 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -67,6 +67,8 @@
med_hud_set_health()
med_hud_set_status()
+ if(!gibbed && !QDELETED(src))
+ addtimer(CALLBACK(src, .proc/med_hud_set_status), (DEFIB_TIME_LIMIT * 10) + 1)
callHook("death", list(src, gibbed))
for(var/s in ownedSoullinks)
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 2ec1505741b..80014c44f8b 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -99,7 +99,7 @@
/mob/living/silicon/robot/drone/update_icons()
overlays.Cut()
- if(stat == 0)
+ if(stat == CONSCIOUS)
overlays += "eyes-[icon_state]"
else
overlays -= "eyes"
@@ -124,7 +124,7 @@
else if(istype(W, /obj/item/card/id)||istype(W, /obj/item/pda))
- if(stat == 2)
+ if(stat == DEAD)
if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave.
to_chat(user, "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.")
@@ -166,7 +166,7 @@
..()
/mob/living/silicon/robot/drone/emag_act(user as mob)
- if(!client || stat == 2)
+ if(!client || stat == DEAD)
to_chat(user, "There's not much point subverting this heap of junk.")
return
@@ -223,12 +223,12 @@
/mob/living/silicon/robot/drone/death(gibbed)
. = ..(gibbed)
- ghostize(can_reenter_corpse = 0)
+ adjustBruteLoss(health)
//CONSOLE PROCS
/mob/living/silicon/robot/drone/proc/law_resync()
- if(stat != 2)
+ if(stat != DEAD)
if(emagged)
to_chat(src, "You feel something attempting to modify your programming, but your hacked subroutines are unaffected.")
else
@@ -237,7 +237,7 @@
show_laws()
/mob/living/silicon/robot/drone/proc/shut_down(force=FALSE)
- if(stat == 2)
+ if(stat == DEAD)
return
if(emagged && !force)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 67238444eaa..632fb7726ee 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -19,6 +19,7 @@
var/dissipate_strength = 1 //How much energy do we lose?
var/move_self = 1 //Do we move on our own?
var/grav_pull = 4 //How many tiles out do we pull?
+ move_resist = INFINITY //no, you don't get to push the singulo. Not even you OP wizard gateway statues
var/consume_range = 0 //How many tiles out do we eat
var/event_chance = 15 //Prob for event each tick
var/target = null //its target. moves towards the target if it has one
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index d565ef624d2..aa457938afc 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -531,9 +531,7 @@
/datum/chemical_reaction/slimegolem/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- var/obj/effect/golemrune/Z = new /obj/effect/golemrune
- Z.forceMove(get_turf(holder.my_atom))
- notify_ghosts("Golem rune created in [get_area(Z)].", source = Z)
+ new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom))
//Bluespace
/datum/chemical_reaction/slimefloor2
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index af3088b514b..ca606720c7b 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -889,3 +889,13 @@
materials = list(MAT_METAL = 1000)
build_path = /obj/item/safe_internals
category = list("initial", "Construction")
+
+/datum/design/golem_shell
+ name = "Golem Shell Construction"
+ desc = "Allows for the construction of a Golem Shell."
+ id = "golem"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 40000)
+ build_path = /obj/item/golem_shell
+ category = list("Imported")
+
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 32f5ab879cd..4d1195e29ce 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -386,3 +386,13 @@ datum/tech/robotics
name = default_name
desc = default_desc
blueprint = null
+
+/obj/item/disk/design_disk/golem_shell
+ name = "golem creation disk"
+ desc = "A gift from the Liberator."
+ icon_state = "datadisk1"
+
+/obj/item/disk/design_disk/golem_shell/Initialize()
+ . = ..()
+ var/datum/design/golem_shell/G = new
+ blueprint = G
\ No newline at end of file
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 654b1fe374a..d8c167989d2 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -389,84 +389,6 @@
if(!uses)
qdel(src)
-////////Adamantine Golem stuff I dunno where else to put it
-
-/obj/effect/golemrune
- anchored = 1
- desc = "a strange rune used to create golems. It glows when spirits are nearby."
- name = "rune"
- icon = 'icons/obj/rune.dmi'
- icon_state = "golem"
- unacidable = 1
- layer = TURF_LAYER
- var/list/mob/dead/observer/ghosts[0]
-
-/obj/effect/golemrune/New()
- ..()
- processing_objects.Add(src)
-
-/obj/effect/golemrune/process()
- if(ghosts.len>0)
- icon_state = "golem2"
- else
- icon_state = "golem"
-
-/obj/effect/golemrune/attack_hand(mob/living/user)
- var/mob/dead/observer/ghost
- for(var/mob/dead/observer/O in loc)
- if(!check_observer(O))
- to_chat(O, "You are not eligible to become a golem.")
- continue
- ghost = O
- break
- if(!ghost)
- to_chat(user, "The rune fizzles uselessly. There is no spirit nearby.")
- return
- var/mob/living/carbon/human/golem/G = new /mob/living/carbon/human/golem
- G.change_gender(pick(MALE,FEMALE))
- G.loc = src.loc
- G.key = ghost.key
- add_attack_logs(user, G, "Summoned as a golem")
- to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.")
- qdel(src)
-
-/obj/effect/golemrune/Topic(href,href_list)
- if("signup" in href_list)
- var/mob/dead/observer/O = locate(href_list["signup"])
- volunteer(O)
-
-/obj/effect/golemrune/attack_ghost(var/mob/dead/observer/O)
- if(!O)
- return
- volunteer(O)
-
-/obj/effect/golemrune/proc/check_observer(var/mob/dead/observer/O)
- if(!O)
- return FALSE
- if(!O.client)
- return FALSE
- if(O.mind && O.mind.current && O.mind.current.stat != DEAD)
- return FALSE
- if(!O.can_reenter_corpse)
- return FALSE
- if(cannotPossess(O))
- return FALSE
- return TRUE
-
-/obj/effect/golemrune/proc/volunteer(var/mob/dead/observer/O)
- if(O in ghosts)
- ghosts.Remove(O)
- to_chat(O, "You are no longer signed up to be a golem.")
- else
- if(!check_observer(O))
- to_chat(O, "You are not eligible to become a golem.")
- return
- ghosts.Add(O)
- to_chat(O, "You are signed up to be a golem.")
-
-
-
-
/obj/effect/timestop
anchored = 1
name = "chronofield"
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 9f237cf308f..c3bf6b465f6 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -837,7 +837,10 @@
req_access = list(access_cent_general)
shuttleId = "specops"
possible_destinations = "specops_home;specops_away"
+<<<<<<< HEAD
resistance_flags = INDESTRUCTIBLE
+=======
+>>>>>>> refs/remotes/ParadiseSS13/master
/obj/machinery/computer/shuttle/white_ship
name = "White Ship Console"
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index bd5b3943175..f60674dd190 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -261,7 +261,7 @@
/obj/item/organ/internal/cyberimp/chest/reviver/on_life()
if(reviving)
- if(owner.stat == UNCONSCIOUS)
+ if(owner.stat == UNCONSCIOUS && (owner.sleeping == 0)) //!owner.sleeping didn't work for whatever dumb reason
spawn(30)
if(prob(90) && owner.getOxyLoss())
owner.adjustOxyLoss(-3)
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 1ed5b3cf8e9..94f6be4cc9a 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -51,6 +51,35 @@ var/static/regex/multispin_words = regex("like a record baby")
/obj/item/organ/internal/vocal_cords/proc/handle_speech(message) //change the message
return message
+/obj/item/organ/internal/adamantine_resonator
+ name = "adamantine resonator"
+ desc = "Fragments of adamantine exist in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders."
+ parent_organ = "head"
+ slot = "adamantine_resonator"
+ icon_state = "adamantine_resonator"
+
+/obj/item/organ/internal/vocal_cords/adamantine
+ name = "adamantine vocal cords"
+ desc = "When adamantine resonates, it causes all nearby pieces of adamantine to resonate as well. Adamantine golems use this to broadcast messages to nearby golems."
+ actions_types = list(/datum/action/item_action/organ_action/use/adamantine_vocal_cords)
+ icon_state = "adamantine_cords"
+
+/datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger()
+ if(!IsAvailable())
+ return
+ var/message = input(owner, "Resonate a message to all nearby golems.", "Resonate")
+ if(QDELETED(src) || QDELETED(owner) || !message)
+ return
+ owner.say(".x[message]")
+
+/obj/item/organ/internal/vocal_cords/adamantine/handle_speech(message)
+ var/msg = "[owner.real_name] resonates, \"[message]\""
+ for(var/m in GLOB.player_list)
+ if(iscarbon(m))
+ var/mob/living/carbon/C = m
+ if(C.get_organ_slot("adamantine_resonator"))
+ to_chat(C, msg)
+
//Colossus drop, forces the listeners to obey certain commands
/obj/item/organ/internal/vocal_cords/colossus
name = "divine vocal cords"
diff --git a/config/example/config.txt b/config/example/config.txt
index 39a1b13d23b..426d38f6a87 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -97,6 +97,12 @@ PROBABILITY ABDUCTION 0
PROBABILITY DEVIL 0
PROBABILITY DEVILAGENTS 0
+## Probability in % for Free Golems to spawn at roundstart, set to 0 for no golems
+PROB_FREE_GOLEMS 75
+
+## Uncomment to allow free golems on all roundtypes. Otherwise, disabled on cult, wiz, raging mages, blob, and nuclear.
+#UNRESTRICTED_FREE_GOLEMS
+
## Maximum cycles shadowlings can remain unhatched before they take damage. 1800 = 60 minutes, 900 = 30 minutes, 0 = feature disabled.
SHADOWLING_MAX_AGE 0
diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt
index 563768b69bc..6ca1f0201e8 100644
--- a/config/example/dbconfig.txt
+++ b/config/example/dbconfig.txt
@@ -9,7 +9,7 @@
## This value must be set to the version of the paradise schema in use.
## If this value does not match, the SQL database will not be loaded and an error will be generated.
## Roundstart will be delayed.
-DB_VERSION 4
+DB_VERSION 5
## Server the MySQL database can be found at.
# Examples: localhost, 200.135.5.43, www.mysqldb.com, etc.
diff --git a/config/names/golem.txt b/config/names/golem.txt
new file mode 100644
index 00000000000..dbddac12722
--- /dev/null
+++ b/config/names/golem.txt
@@ -0,0 +1,156 @@
+Ablation
+Alabaster
+Alunite
+Andesite
+Anyhdrite
+Basalt
+Basin
+Bauxite
+Bedrock
+Bismuth
+Bismuthinite
+Bituminous Coal
+Borax
+Boulder
+Brimstone
+Brittle
+Calcite
+Cassiterite
+Cenozoic
+Chalk
+Chasm
+Cheridite
+Chert
+Chromite
+Cinnabar
+Claystone
+Coast
+Cobaltite
+Column
+Conglomerate
+Core
+Crevasse
+Crust
+Cryolite
+Crystal
+Dacite
+Diorite
+Dolomite
+Dolostone
+Dragonforce
+Earthflow
+Epoch
+Eutrophication
+Fault
+Flint
+Foliation
+Foreshock
+Fossil
+Gabbro
+Galena
+Garnierite
+Geode
+Geoge
+Gneiss
+Granite
+Graphite
+Gravel
+Groove
+Grotto
+Gypsum
+Hematite
+Hornblende
+Humus
+Igneous
+Ilmenite
+Iron
+Island
+Jasper
+Jet
+Kaolinite
+Kettle
+Kimberlite
+Komatiite
+Landslide
+Levee
+Lignite
+Limestone
+Limonite
+Luster
+Madidite
+Magnetite
+Magnitude
+Malachite
+Mantle
+Marble
+Marcasite
+Melange
+Mica
+Microcline
+Migmatite
+Mineral
+Mountain
+Mudstone
+Obsidian
+Olivine
+Ore
+Orpiment
+Orthoclase
+Outwash
+Oxbow Lake
+Oynx
+Pahoehoe
+Pebble
+Pegmatite
+Periclase
+Petrified Wood
+Phyllite
+Pitchblende
+Plate
+Pothole
+Puddingstone
+Pyrite
+Pyrolusite
+Quake
+Quarry
+Quartz
+Quartzite
+Realgar
+Reservoir
+Rhyolite
+Rock
+Rock Salt
+Rockfall
+Rutile
+Saltpeter
+Sand
+Sandstone
+Satinspar
+Schist
+Sediment
+Seismic
+Selenite
+Serpentine
+Shale
+Shore
+Siltstone
+Slag
+Slate
+Sphalerite
+Stack
+Stalactite
+Stalagmite
+Stibnite
+Stone
+Stress
+Subduction
+Sylvite
+Talc
+Tetrahedrite
+Tidal
+Trench
+Valley
+Volcano
+Xenolith
+Yardang
+Zone
diff --git a/goon/browserassets/css/browserOutput-dark.css b/goon/browserassets/css/browserOutput-dark.css
index 30618df6fa5..4c4412bd877 100644
--- a/goon/browserassets/css/browserOutput-dark.css
+++ b/goon/browserassets/css/browserOutput-dark.css
@@ -368,6 +368,7 @@ h1.alert, h2.alert {color: #FFF;}
.orange {color: #ffa500;}
.orangei {color: #ffa500; font-style: italic;}
.orangeb {color: #ffa500; font-weight: bold;}
+.resonate {color: #298F85;}
.revennotice {color: #1d29C3;}
.revenboldnotice {color: #1d29C3; font-weight: bold;}
diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css
index 234c5ac2274..047705282c7 100644
--- a/goon/browserassets/css/browserOutput.css
+++ b/goon/browserassets/css/browserOutput.css
@@ -365,6 +365,7 @@ h1.alert, h2.alert {color: #000000;}
.orange {color: #ffa500;}
.orangei {color: #ffa500; font-style: italic;}
.orangeb {color: #ffa500; font-weight: bold;}
+.resonate {color: #298F85;}
.revennotice {color: #1d2953;}
.revenboldnotice {color: #1d2953; font-weight: bold;}
diff --git a/html/changelog.html b/html/changelog.html
index 404ff7bc386..ebe33bef2d2 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,86 @@
-->
+
11 February 2019
+
AffectedArc07 updated:
+
+ - Admins that linked their discord account that round no longer show up as "the adminkey" in adminwho.
+
+
Fox McCloud updated:
+
+ - Cryotubes no longer passively heal patients without chems. Effectiveness at stabilizing critical patients increased
+ - Sleepers no longer gain additional chemicals when upgraded. Selection of chemicals altered
+
+
+
10 February 2019
+
Fox McCloud updated:
+
+ - Allows you to switch strap sides on leather satchel
+
+
TDSSS updated:
+
+ - New space ruin, the crashed wizard shuttle. Rumored to contain fabulous magical treasures.
+
+
Ty-Omaha updated:
+
+ - Reviver implant does not heal when you sleep, only when you fall unconscious involuntarily
+
+
+
09 February 2019
+
AffectedArc07 updated:
+
+ - You can now link your discord account and BYOND account together
+ - With the accounts linked, you can get roundstart notifications within discord!
+ - Fixed roundstart message in discord so that people are notified instead of characters being replaced
+
+
Fox McCloud updated:
+
+ - Adds Fox's fluff coat
+ - Health HUDs now have a defib indicator showing if they can be revived with a defib or not
+ - Defib "safe" time reduced from 5 minutes to 2 minutes
+ - fixes a bug where sometimes revived individuals still appeared to be dead or severely damaged on health HUDs after being revived with a defib
+
+
MINIMAN10000 updated:
+
+ - Configuration option for disabling subsystems
+
+
Quantum-M updated:
+
+ - Headslug sprite looks more deader.
+
+
TDSSS updated:
+
+ - Singularities can no longer be pushed
+
+
Triiodine updated:
+
+
+
08 February 2019
+
Alonefromhell updated:
+
+ - Drones should die properly now.
+
+
Kyep updated:
+
+ - Characters are no longer massively more/less likely to be chosen for head jobs, especially the Captain job, based on their character's age.
+
+
Shadeykins updated:
+
+ - Food descriptions/casing.
+
+
+
07 February 2019
+
Alonefromhell updated:
+
+ - Pineapple Salad's fluff coat
+
+
Dovydas12345 updated:
+
+ - Fixes cult shackles appearing on the ground when removed
+
+
06 February 2019
DrunkDwarf updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 064d2e5f463..df4ef8fa4b3 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -9019,3 +9019,56 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
DrunkDwarf:
- bugfix: Reduced the size of the Ward-Takahashi Alt IPC head to prevent pixels
clipping when wearing human clothing.
+2019-02-07:
+ Alonefromhell:
+ - rscadd: Pineapple Salad's fluff coat
+ Dovydas12345:
+ - bugfix: Fixes cult shackles appearing on the ground when removed
+2019-02-08:
+ Alonefromhell:
+ - bugfix: Drones should die properly now.
+ Kyep:
+ - rscdel: Characters are no longer massively more/less likely to be chosen for head
+ jobs, especially the Captain job, based on their character's age.
+ Shadeykins:
+ - tweak: Food descriptions/casing.
+2019-02-09:
+ AffectedArc07:
+ - rscadd: You can now link your discord account and BYOND account together
+ - rscadd: With the accounts linked, you can get roundstart notifications within
+ discord!
+ - tweak: Fixed roundstart message in discord so that people are notified instead
+ of characters being replaced
+ Fox McCloud:
+ - rscadd: Adds Fox's fluff coat
+ - rscadd: Health HUDs now have a defib indicator showing if they can be revived
+ with a defib or not
+ - tweak: Defib "safe" time reduced from 5 minutes to 2 minutes
+ - bugfix: fixes a bug where sometimes revived individuals still appeared to be dead
+ or severely damaged on health HUDs after being revived with a defib
+ MINIMAN10000:
+ - rscadd: Configuration option for disabling subsystems
+ Quantum-M:
+ - tweak: Headslug sprite looks more deader.
+ TDSSS:
+ - bugfix: Singularities can no longer be pushed
+ Triiodine:
+ - imageadd: ozewse fluff item
+2019-02-10:
+ Fox McCloud:
+ - rscadd: Allows you to switch strap sides on leather satchel
+ TDSSS:
+ - rscadd: New space ruin, the crashed wizard shuttle. Rumored to contain fabulous
+ magical treasures.
+ Ty-Omaha:
+ - bugfix: Reviver implant does not heal when you sleep, only when you fall unconscious
+ involuntarily
+2019-02-11:
+ AffectedArc07:
+ - bugfix: Admins that linked their discord account that round no longer show up
+ as "the adminkey" in adminwho.
+ Fox McCloud:
+ - tweak: Cryotubes no longer passively heal patients without chems. Effectiveness
+ at stabilizing critical patients increased
+ - tweak: Sleepers no longer gain additional chemicals when upgraded. Selection of
+ chemicals altered
diff --git a/html/changelogs/AutoChangeLog-pr-10818.yml b/html/changelogs/AutoChangeLog-pr-10818.yml
new file mode 100644
index 00000000000..8edaf773767
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10818.yml
@@ -0,0 +1,10 @@
+author: "datlo"
+delete-after: True
+changes:
+ - tweak: "Reworked golems to use the ghost spawner system. Craft a golem shell with adamantine then apply 10 sheets of minerals to finish it."
+ - rscadd: "Added golem subtypes. Each material has pros and sometimes cons. Type depends on the material used during construction."
+ - rscadd: "Golems are now more resistant to damage and are no longer slowed by the cold of space."
+ - tweak: "Golems now get golem-y names."
+ - bugfix: "Fixed golem's stone face hiding their identity, showing them as unknown."
+ - rscadd: "Added the Free Golems mob spawners and ship. Go do whatever."
+ - rscadd: "Added a small asteroid on the telecomms zlevel."
diff --git a/html/changelogs/AutoChangeLog-pr-10827.yml b/html/changelogs/AutoChangeLog-pr-10827.yml
new file mode 100644
index 00000000000..0a6a281d036
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10827.yml
@@ -0,0 +1,5 @@
+author: "Shadeykins"
+delete-after: True
+changes:
+ - rscadd: "Added Chav to roundstart character preferences."
+ - rscdel: "Removed Epilepsy, Tourette's, and Can't speak properly from roundstart character preferences."
diff --git a/html/changelogs/AutoChangeLog-pr-10868.yml b/html/changelogs/AutoChangeLog-pr-10868.yml
new file mode 100644
index 00000000000..5f980f3786e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10868.yml
@@ -0,0 +1,4 @@
+author: "AffectedArc07"
+delete-after: True
+changes:
+ - rscadd: "Added an admin verb that allows admins to forcefully unlink discord accounts"
diff --git a/html/changelogs/AutoChangeLog-pr-10872.yml b/html/changelogs/AutoChangeLog-pr-10872.yml
new file mode 100644
index 00000000000..3272ef6ba83
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10872.yml
@@ -0,0 +1,4 @@
+author: "AffectedArc07"
+delete-after: True
+changes:
+ - tweak: "Changelog button loads properly on darkmode now"
diff --git a/html/changelogs/AutoChangeLog-pr-10878.yml b/html/changelogs/AutoChangeLog-pr-10878.yml
new file mode 100644
index 00000000000..642bd32c559
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10878.yml
@@ -0,0 +1,4 @@
+author: "datlo"
+delete-after: True
+changes:
+ - rscadd: "Added Shesi's fluff winter coat"
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 1437cf98ecc..4787db287a3 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index a58a11c3f32..1e6992c86a6 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index 68f3fe5342a..014242b9d90 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 99ad4978ce9..f2e67a2e7a0 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi
index e2228e27666..aa624df4131 100644
Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 07680638b6b..b8bd2933bbc 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 686987a3711..b2330c0f5b4 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 4ff367c4cc3..0a0f90c45dd 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index 524faaa7a8d..88bdb34e6b8 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -38,7 +38,7 @@
'html/changelog.html'
)
src << browse('html/changelog.html', "window=changes;size=675x650")
- prefs.UpdateChangelogButton(src)
+ update_changelog_button()
if(prefs.lastchangelog != changelog_hash) //if it's already opened, no need to tell them they have unread changes
prefs.SetChangelog(src,changelog_hash)
diff --git a/paradise.dme b/paradise.dme
index 020aa9d41ae..c375f7646b5 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1247,7 +1247,10 @@
#include "code\modules\awaymissions\mission_code\stationCollision.dm"
#include "code\modules\awaymissions\mission_code\UO71-terrorspiders.dm"
#include "code\modules\awaymissions\mission_code\wildwest.dm"
+#include "code\modules\awaymissions\mission_code\ghost_role_spawners\golems.dm"
+#include "code\modules\awaymissions\mission_code\ghost_role_spawners\oldstation.dm"
#include "code\modules\awaymissions\mission_code\ruins\oldstation.dm"
+#include "code\modules\awaymissions\mission_code\ruins\wizardcrash.dm"
#include "code\modules\buildmode\bm_mode.dm"
#include "code\modules\buildmode\buildmode.dm"
#include "code\modules\buildmode\buttons.dm"
@@ -1374,6 +1377,8 @@
#include "code\modules\detective_work\evidence.dm"
#include "code\modules\detective_work\footprints_and_rag.dm"
#include "code\modules\detective_work\scanner.dm"
+#include "code\modules\discord\accountlink.dm"
+#include "code\modules\discord\notify.dm"
#include "code\modules\economy\Accounts.dm"
#include "code\modules\economy\Accounts_DB.dm"
#include "code\modules\economy\ATM.dm"