diff --git a/_maps/map_catalogue.txt b/_maps/map_catalogue.txt
deleted file mode 100644
index 7309dbb6f42b..000000000000
--- a/_maps/map_catalogue.txt
+++ /dev/null
@@ -1,238 +0,0 @@
-Find the key for using this catalogue in "map_catalogue_key.txt"
-
-
- IceRuins:
- File Name = _maps\RandomRuins\IceRuins\icemoon_hydroponics_lab.dmm
- Size = (x = 33)(y = 33)(z = 1)
- Tags = "Medium Loot", "Medium Combat Challenge", "Antag_Gear", "Shelter"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_surface_corporate_rejects.dmm
- Size = (x = 34)(y = 38)(z = 1)
- Tags = "Boss Combat Challenge", "Major Loot", "Antag Gear", "Shelter", "Lava"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_surface_engioutpost.dmm
- Size = (x = 40)(y = 20)(z = 1)
- Tags = "No Combat", "Minor Loot", "Shelter"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_underground_abandoned_newcops.dmm
- Size = (x = 37)(y = 32)(z = 1)
- Tags = "Medium Combat Challenge", "Minor Loot", "Shelter"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_underground_abandoned_village.dmm
- Size = (x = 28)(y = 28)(z = 1)
- Tags = "Medium Combat Challenge", "Minor Loot", "Antag Gear", "Inhospitable"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_underground_brazillianlab.dmm
- Size = (x = 40)(y = 30)(z = 1)
- Tags = "Boss Combat Challenge", "Major Loot", "Inhospitable"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_underground_burnies_lair.dmm
- Size = (x = 20)(y = 20)(z = 1)
- Tags = "Boss Combat Challenge", "Minor Loot", "Shelter", "Antag Gear"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_underground_drakelair.dmm
- Size = (x = 29)(y = 30)(z = 1)
- Tags = "Boss Combat Challenge", "Megafauna", "Major Loot", "Shelter", "Necropolis Loot"
-
- File Name = _maps\RandomRuins\IceRuins\icemoon_crashed_holemaker.dmm
- Size = (x = 47)(y = 37)(z = 1)
- Tags = "Medium Combat Challenge", "Minor Loot", "Shelter"
-
-
-
- JungleRuins:
- File Name = "_maps\RandomRuins\JungleRuins\jungle_syndicate.dmm"
- Size = (x = 15)(y = 15)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Liveable", "Antag Gear"
-
- File Name = "_maps\RandomRuins\JungleRuins\jungle_interceptor.dmm"
- Size = (x = 53)(y = 51)(z = 1)
- Tags = "No Combat", "Medium Loot", Liveable"
-
- File Name = "_maps\RandomRuins\JungleRuins\jungle_medtech_outbreak.dmm"
- Size = (x = 31)(y = 25)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", Liveable"
-
- File Name = "_maps\RandomRuins\JungleRuins\jungle_paradise.dmm"
- Size = (x = 70)(y = 66)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", Liveable", "Hazardous"
-
- File Name "_maps\RandomRuins\JungleRuins\jungle_bombed_starport
- Size = (x = 100)(y = 75)(z = 1)
- Tags = "Medium Combat Challenge", "Major Loot", "Hazardous", "Liveable"
-
- File Name "_maps\RandomRuins\JungleRuins\jungle_cavecrew
- Size = (x = 43)(y = 63)(z = 1)
- Tags = "Medium Combat Challenge", "Hazardous", "Liveable", "Major Loot"
-
- File Name "_maps\RandomRuins\JungleRuins\jungle_abandoned_library
- Size = (x = 36)(y = 35)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Antag Gear", "Necropolis Loot", "Liveable"
-
- LavaRuins:
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_buried_shrine.dmm"
- Size = (x = 67)(y = 55)(z = 1)
- Tags = "Medium Combat", "Medium Loot", "Hazardous", "Lava", "Inhospitable"
-
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_biodome_winter.dmm"
- Size = (x = 46)(y = 42)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Shelter"
-
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_elephant_graveyard.dmm"
- Size = (x = 29)(y = 35)(z = 1)
- Tags = "No Combat", "Minor Loot", "Hazardous", "Inhospitable"
-
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_lava_canyon.dmm"
- Size = (x = 90)(y = 63)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Megafauna", "Necropolis Loot", "Inhospitable", "Lava"
-
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_wrecked_factory.dmm"
- Size = (x = 47)(y = 47)(z = 1)
- Tags = "Boss Combat Challenge", "Major Loot", "Shelter", "Lava"
-
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_crashed_starwalker.dmm"
- Size = (x = 33)(y = 56)(z = 1)
- Tags = "Minor Combat Challenge", "Medium Loot", "Lava"
-
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_abandonedlisteningpost.dmm"
- Size = (x = 33)(y = 56)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Shelter"
-
-
- ReebeRuins:
- File Name = "_maps\RandomRuins\Ruins\reebe_swarmers.dmm"
- Size = (x = 20)(y = 20)(z = 1)
- Tags = "Medium Combat Challenge", "Minor Loot", "Liveable"
-
- File Name = "_maps\RandomRuins\Ruins\reebe_arena.dmm"
- Size = (x = 79)(y = 60)(z = 1)
- Tags = "Boss Combat Challenge", "Medium Loot", "Liveable"
-
- File Name = "_maps\RandomRuins\Ruins\reebe_decayed_sm.dmm"
- Size = (x = 10)(y = 10)(z = 1)
- Tags = "No Combat", "Medium Loot", "Liveable", "Hazardous"
-
- File Name = "_maps\RandomRuins\Ruins\reebe_floating_island.dmm"
- Size = (x = 20)(y = 20)(z = 1)
- Tags = "Boss Combat Challenge", "Minor Loot", "Liveable"
-
-
- RockRuins:
- File Name = "_maps\RandomRuins\RockRuins\rockplanet_budgetcuts.dmm"
- Size = (x = 52)(y = 44)(z = 1)
- Tags = "Hard Combat Challenge", "Medium Loot", "hospitable"
-
- File Name = "_maps\RandomRuins\RockRuins\rockplanet_harmfactory.dmm"
- Size = (x = 42)(y = 41)(z = 1)
- Tags = "Boss Combat Challenge", "Major Loot", Shelter", "Antag Gear", "Hazardous"
-
- File Name = "_maps\RandomRuins\RockRuins\rockplanet_shippingdock.dmm"
- Size = (x = 85)(y = 73)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Hazardous", "Shelter"
-
- File Name = "_maps\RandomRuins\RockRuins\rockplanet_nomadcrash.dmm"
- Size = (x = 58)(y = 48)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Hazardous", "Hospitable"
-
- File Name = "_maps\RandomRuins\RockRuins\rockplanet_distillery.dmm"
- Size = (x = 44)(y = 45)(z = 1)
- Tags = "Medium Combat Challenge", "Major Loot", "Hazardous", "Hospitable"
-
-
- SandRuins:
- File Name = "_maps\RandomRuins\Ruins\whitesands_surface_camp_saloon.dmm"
- Size = (x = 30)(y = 30)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Inhospitable"
-
- File Name = "_maps\RandomRuins\Ruins\whitesands_surface_camp_combination.dmm"
- Size = (x = 59)(y = 59)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Inhospitable", "Hazardous"
-
- File Name = "_maps\RandomRuins\Ruins\whitesands_surface_medipen_plant.dmm"
- Size = (x = 23)(y = 29)(z = 1)
- Tags = "No Combat", "Major Loot", "Shelter"
-
- File Name = "_maps\RandomRuins\Ruins\whitesands_surface_pubbyslopcrash.dmm"
- Size = (x = 40)(y = 25)(z = 1)
- Tags = "Minor Combat Challenge", "Medium Loot", "Shelter"
-
-
-
- SpaceRuins:
- File Name = "_maps\RandomRuins\SpaceRuins\astraeus.dmm"
- Size = (x = 47)(y = 35)(z = 1)
- Tags = "Minor Combat Challenge", "Medium Loot", "Inhospitable"
-
- File Name = "_maps\RandomRuins\SpaceRuins\bigderelict1.dmm"
- Size = (x = 40)(y = 34)(z = 1)
- Tags = "Minor Combat Challenge", "Medium Loot", "Shelter"
-
- File Name = "_maps\RandomRuins\SpaceRuins\corporate_mining.dmm"
- Size = (x = 50)(y = 50)(z = 1)
- Tags = "No Combat", "Medium Loot", "Shelter"
-
- File Name = "_maps\RandomRuins\SpaceRuins\onehalf.dmm"
- Size = (x = 29)(y = 20)(z = 1)
- Tags = "Minor Combat Challenge", "Medium Loot", "inhospitable"
-
- File Name = "_maps\RandomRuins\SpaceRuins\power_puzzle.dmm"
- Size = (x = 30)(y = 30)(z = 1)
- Tags = "Minor Combat Challenge", "Major Loot", "Shelter", "Hazardous"
-
- File Name = "_maps\RandomRuins\SpaceRuins\singularitylab.dmm"
- Size = (x = 118)(y = 75)(z = 1)
- Tags = "Boss Combat Challenge", "Major Loot", "Shelter"
-
- File Name = "_maps\RandomRuins\SpaceRuins\spacemall.dmm"
- Size = (x = 86)(y = 48)(z = 1)
- Tags = "Medium Combat Challenge", "Major Loot", "Shelter"
-
- BeachRuins:
- File Name = "_maps\RandomRuins\BeachRuins\beach_ancient_ruin.dmm"
- Size = (x = 75)(y = 76)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", Liveable"
-
- File Name = "_maps\RandomRuins\BeachRuins\beach_colony.dmm"
- Size = (x = 30)(y = 30)(z = 1)
- Tags = "Minor Combat Challenge", "Minor Loot"
-
- File Name = "_maps\RandomRuins\BeachRuins\beach_fishing_hut.dmm"
- Size = (x = 30)(y = 40)(z = 1)
- Tags = "Hard Combat Challenge, "Major Loot", "Hazardous"
-
- File Name = "_maps\RandomRuins\BeachRuins\beach_crashed_engineer.dmm"
- Size = (x = 32)(y = 32)(z = 1)
- Tags = "Minor Combat Challenge, "Medium Loot", "Hazardous"
-
- File Name = "_maps\RandomRuins\BeachRuins\beach_pirate_crash.dmm"
- Size = (x = 33)(y = 26)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Liveable"
-
- File Name = "_maps\RandomRuins\BeachRuins\beach_ocean_town.dmm"
- Size = (x = 80)(y = 83)(z = 1)
- Tags = "No Combat", "Minor loot", "Liveable"
-
- File Name = "_maps\RandomRuins\BeachRuins\beach_treasure_cove.dmm"
- Size = (x = 37)(y = 43)(z = 1)
- Tags = "Medium Combat Challenge", "Medium Loot", "Liveable"
-
- File Name = "_maps\RandomRuins\BeachRuins\beach_float_resort.dmm"
- Size = (x = 38)(y = 52)(z = 1)
- Tags = "No Combat", "Minor Loot", "Liveable"
-
- Waste Ruins:
- File name ="_maps\RandomRuins\wasteruins\wasteplanet_lab.dmm"
- Size = (x = 26)(y = 25)(z = 1)
- Tags = "No Combat", "Medium Loot" "Shelter" "hazardous" "hospitable"
-
- File name ="_maps\RandomRuins\wasteruins\wasteplanet_pandora.dmm"
- Size = (x = 18)(y = 21)(z = 1)
- Tags = "Boss Combat Challenge", "Medium Loot" "Megafauna", "hospitable"
-
- File name ="_maps\RandomRuins\wasteruins\wasteplanet_unhonorable.dmm"
- Size = (x = 34)(y = 34)(z = 1)
- Tags = "Minor Combat Challenge", "Medium Loot", "Shelter", "Hazardous"
-
- File name = "_maps\RandomRuins\wasteruins\wasteplanet_abandoned_mechbay.dmm"
- Size = (x = 45)(y = 47)(z = 1)
- Tags = "Boss Combat Challenge", "Medium Loot", "Shelter", "Hazardous"
diff --git a/_maps/shuttles/inteq/inteq_colossus.dmm b/_maps/shuttles/inteq/inteq_colossus.dmm
index a3bd60d48250..a017deb1e294 100644
--- a/_maps/shuttles/inteq/inteq_colossus.dmm
+++ b/_maps/shuttles/inteq/inteq_colossus.dmm
@@ -195,6 +195,12 @@
name = "uniform closet"
},
/obj/machinery/firealarm/directional/east,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
/turf/open/floor/plasteel/grimy,
/area/ship/crew)
"cq" = (
diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm
index 3af585b45b5a..68233ef51d58 100644
--- a/_maps/shuttles/inteq/inteq_talos.dmm
+++ b/_maps/shuttles/inteq/inteq_talos.dmm
@@ -4071,6 +4071,12 @@
/obj/structure/cable{
icon_state = "0-2"
},
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
/turf/open/floor/carpet/black,
/area/ship/crew/dorm)
"zg" = (
diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm
index 0c6dd8139f4b..737e424096fd 100644
--- a/_maps/shuttles/inteq/inteq_valor.dmm
+++ b/_maps/shuttles/inteq/inteq_valor.dmm
@@ -4599,6 +4599,12 @@
/obj/item/clothing/head/soft/inteq,
/obj/structure/closet/wall/directional/north,
/obj/machinery/airalarm/directional/east,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
/turf/open/floor/carpet/black,
/area/ship/crew/dorm)
"RF" = (
diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm
index c305ba070659..a2247418ce15 100644
--- a/_maps/shuttles/inteq/inteq_vaquero.dmm
+++ b/_maps/shuttles/inteq/inteq_vaquero.dmm
@@ -1208,6 +1208,12 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 8
},
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
+/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt,
/turf/open/floor/carpet/black,
/area/ship/crew)
"ui" = (
diff --git a/_maps/shuttles/pgf/pgf_crying_sun.dmm b/_maps/shuttles/pgf/pgf_crying_sun.dmm
index f0987bb6bb22..26b6c78c4bde 100644
--- a/_maps/shuttles/pgf/pgf_crying_sun.dmm
+++ b/_maps/shuttles/pgf/pgf_crying_sun.dmm
@@ -425,13 +425,13 @@
/turf/open/floor/plating,
/area/ship/engineering/engines/starboard)
"du" = (
-/obj/machinery/porta_turret/ship/weak{
- dir = 6;
- mode = 1
- },
/obj/structure/cable{
icon_state = "0-8"
},
+/obj/machinery/porta_turret/ship/pgf/light{
+ dir = 6;
+ mode = 1
+ },
/turf/open/floor/engine/hull,
/area/ship/external/dark)
"dv" = (
@@ -1050,11 +1050,11 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/machinery/porta_turret/ship/weak{
+/obj/structure/catwalk/over/plated_catwalk/dark,
+/obj/machinery/porta_turret/ship/pgf/light{
dir = 4;
mode = 1
},
-/obj/structure/catwalk/over/plated_catwalk/dark,
/turf/open/floor/plating/airless,
/area/ship/external/dark)
"ih" = (
@@ -2335,16 +2335,6 @@
/obj/effect/turf_decal/floordetail/tiled,
/turf/open/floor/plasteel/telecomms_floor,
/area/ship/bridge)
-"tU" = (
-/obj/machinery/porta_turret/ship/weak{
- dir = 5;
- mode = 1
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/engine/hull,
-/area/ship/external/dark)
"tY" = (
/obj/machinery/modular_computer/console/preset/command{
dir = 1
@@ -3452,13 +3442,13 @@
/turf/open/floor/plasteel/white,
/area/ship/crew/canteen)
"CF" = (
-/obj/machinery/porta_turret/ship/weak{
- dir = 10;
- mode = 1
- },
/obj/structure/cable{
icon_state = "0-4"
},
+/obj/machinery/porta_turret/ship/pgf/light{
+ dir = 10;
+ mode = 1
+ },
/turf/open/floor/engine/hull,
/area/ship/external/dark)
"CO" = (
@@ -3732,11 +3722,11 @@
/turf/open/floor/plasteel,
/area/ship/hallway/central)
"Eu" = (
-/obj/machinery/porta_turret/ship/weak{
+/obj/structure/cable,
+/obj/machinery/porta_turret/ship/pgf/light{
dir = 5;
mode = 1
},
-/obj/structure/cable,
/turf/open/floor/engine/hull,
/area/ship/external/dark)
"EA" = (
@@ -3996,13 +3986,13 @@
/turf/open/floor/plasteel/mono/dark,
/area/ship/hallway/central)
"FJ" = (
-/obj/machinery/porta_turret/ship/weak{
- dir = 5;
- mode = 1
- },
/obj/structure/cable{
icon_state = "0-4"
},
+/obj/machinery/porta_turret/ship/pgf/light{
+ dir = 5;
+ mode = 1
+ },
/turf/open/floor/engine/hull,
/area/ship/external/dark)
"FN" = (
@@ -4017,13 +4007,13 @@
/turf/open/floor/plating,
/area/ship/engineering/engines/starboard)
"FO" = (
-/obj/machinery/porta_turret/ship/weak{
- dir = 8;
- mode = 1
- },
/obj/structure/cable{
icon_state = "0-4"
},
+/obj/machinery/porta_turret/ship/pgf/light{
+ dir = 8;
+ mode = 1
+ },
/turf/open/floor/engine/hull/reinforced,
/area/ship/external/dark)
"FU" = (
@@ -4253,13 +4243,13 @@
/turf/open/floor/vault,
/area/ship/security/armory)
"Hb" = (
-/obj/machinery/porta_turret/ship/weak{
- dir = 4;
- mode = 1
- },
/obj/structure/cable{
icon_state = "0-2"
},
+/obj/machinery/porta_turret/ship/pgf/light{
+ dir = 5;
+ mode = 1
+ },
/turf/open/floor/engine/hull,
/area/ship/external/dark)
"Hf" = (
@@ -7804,7 +7794,7 @@ xz
xz
xz
xz
-tU
+Hb
xk
UE
pW
diff --git a/code/__DEFINES/factions.dm b/code/__DEFINES/factions.dm
index 67ce47e166fc..596060d6610e 100644
--- a/code/__DEFINES/factions.dm
+++ b/code/__DEFINES/factions.dm
@@ -8,7 +8,7 @@
#define FACTION_PLAYER_NANOTRASEN "playerNanotrasen"
#define FACTION_PLAYER_FRONTIERSMEN "playerFrontiersmen"
#define FACTION_PLAYER_MINUTEMAN "playerMinuteman"
-#define FACTION_PLAYER_SOLGOV "playerSolgov"
+#define FACTION_PLAYER_SOLCON "playerSolcon"
#define FACTION_PLAYER_INTEQ "playerInteq"
#define FACTION_PLAYER_ROUMAIN "playerRoumain"
#define FACTION_PLAYER_GEZENA "playerGezena"
diff --git a/code/__DEFINES/fonts.dm b/code/__DEFINES/fonts.dm
index 32a08f38861b..8ffecbbe20d5 100644
--- a/code/__DEFINES/fonts.dm
+++ b/code/__DEFINES/fonts.dm
@@ -19,3 +19,5 @@
#define SHARE "Share Tech Mono"
GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE)))
+
+#define EMOJI_SET 'icons/emoji.dmi'
diff --git a/code/__DEFINES/ruins.dm b/code/__DEFINES/ruins.dm
index 894b9c0863f4..93a63d207c30 100644
--- a/code/__DEFINES/ruins.dm
+++ b/code/__DEFINES/ruins.dm
@@ -32,3 +32,52 @@
return SSmapping.ruins_templates
else
return SSmapping.ruin_types_list[ruintype]
+
+/*
+Maps described in the catalogue must be described with at least one or more of the following tags.
+
+*Loot Summary
+Minor Loot = Has negligable/no loot at all, only contains fluff items or just the loot found from enemy drops or structures in the ruin.
+Medium Loot = Has a pool of loot that is useful for the average player or ship, but not in large amounts, and does not have more than one or two boss drops.
+Major Loot = Contains a large pool of loot useful to the average player or ship. Or includes more boss drops or necropolis loot than there are challenges for.
+*/
+#define RUIN_TAG_MINOR_LOOT "Minor Loot"
+#define RUIN_TAG_MEDIUM_LOOT "Medium Loot"
+#define RUIN_TAG_MAJOR_LOOT "Major Loot"
+
+/*Combat Summary
+No Combat = Contains no enemies or combat challenges.
+Minor Combat Challenge = Has only 1-2 hit melee mobs in small or moderate amounts.
+Medium Combat Challenge = Contains more than just simple low health melee mobs, or a moderate amount of mobs.
+Boss Combat Challenge = Contains either one or more bossmobs, has a large number of mobs that are either overwhelming or considerably challenging, or has a significant combat challenge overall.
+*/
+#define RUIN_TAG_NO_COMBAT "No Combat"
+#define RUIN_TAG_MINOR_COMBAT "Minor Combat Challenge"
+#define RUIN_TAG_MEDIUM_COMBAT "Medium Combat Challenge"
+#define RUIN_TAG_HARD_COMBAT "Hard Combat Challenge"
+#define RUIN_TAG_BOSS_COMBAT "Boss Combat Challenge"
+
+
+/*Qualities
+Megafauna = Map contains one or more megafauna.
+Antag Gear = Map contains one or more items typically only obtainable by antag roles.
+Necropolis Loot = Map contains an item or chest from the necropolis loot pool.
+Liveable = The entirety of the map is inhabitable without protective gear, and the map is not surrounded by an inhospitable environment.
+Inhospitable = The majority of the map is uninhabitable without protective gear, and the map is not surrounded by a hospitable environment.
+Shelter = The map contains a portion that is hospitable without protective gear, with a surrounding section that is inhospitable. Or the map is an enclosed hospitable space that spawns on an inhospitable planet.
+Bad Shelter = The map contains a portion that is inhospitable without protective gear, with a surround section that is hospitable. Or the map is an enclosed inhospitable space that spawn on a hospitable planet.
+No Content = A map that contains no objects. It contains only turfs, walls, and or areas.
+Hazardous = Contains hazardous environment elements. Elements include but are not limited to: Mines, IEDs, Chasms appearing more than twice or more than once if one is 3x3 or more, disease spawns, beartraps.
+Unknown Details = Something about the map can't be checked with a map editor alone, and has not been tested for confirmation yet.
+Lava = Contains lava or liquid plasma tiles.
+Ghost Role = Contains a ghost role.
+*/
+#define RUIN_TAG_MEGAFAUNA "Megafauna"
+#define RUIN_TAG_LIVEABLE "Liveable"
+#define RUIN_TAG_INHOSPITABLE "Inhospitable"
+#define RUIN_TAG_SHELTER "Shelter"
+#define RUIN_TAG_BAD_SHELTER "Bad Shelter"
+#define RUIN_TAG_NO_CONTENT "No Content"
+#define RUIN_TAG_HAZARDOUS "Hazardous"
+#define RUIN_TAG_UNKNOWN_DETAILS "Unknown Details"
+#define RUIN_TAG_LAVA "Lava"
diff --git a/code/datums/ruins.dm b/code/datums/ruins.dm
index 9b7c86c22b0e..3554faf3e2ca 100644
--- a/code/datums/ruins.dm
+++ b/code/datums/ruins.dm
@@ -16,6 +16,7 @@
var/suffix = null
var/ruin_type
+ var/ruin_tags = list()
/datum/map_template/ruin/New()
if(!name && id)
diff --git a/code/datums/ruins/beachplanet.dm b/code/datums/ruins/beachplanet.dm
index b258ef45f0e8..3b048ab940c1 100644
--- a/code/datums/ruins/beachplanet.dm
+++ b/code/datums/ruins/beachplanet.dm
@@ -9,39 +9,46 @@
id = "fishinghut"
description = "A small fishing hut floating on the ocean."
suffix = "beach_fishing_hut.dmm"
+ ruin_tags = list(RUIN_TAG_HARD_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_HAZARDOUS)
/datum/map_template/ruin/beachplanet/ancient
name = "Ancient Danger"
id = "beach_ancient"
description = "As you draw near the ancient wall, a sense of foreboding overcomes you. You aren't sure why, but you feel this dusty structure may contain great dangers."
suffix = "beach_ancient_ruin.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/beachplanet/town
name = "Beachside Town"
id = "beach_town"
description = "A fresh town on a lovely coast, where its inhabitants are is unknown."
suffix = "beach_ocean_town.dmm"
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/beachplanet/scrapvillage
name = "Pirate Village"
id = "beach_pirate"
description = "A small pirate outpost formed from the remains of a wrecked shuttle."
suffix = "beach_pirate_crash.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/beachplanet/treasurecove
name = "Treasure Cove"
id = "beach_treasure_cove"
description = "A abandoned colony. It seems that this colony was abandoned, for a reason or another"
suffix = "beach_treasure_cove.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/beachplanet/crashedengie
name = "Crashed Engineer Ship"
id = "beach_crashed_engineer"
description = "An abandoned camp built by a crashed engineer"
suffix = "beach_crashed_engineer.dmm"
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_HAZARDOUS)
/datum/map_template/ruin/beachplanet/floatresort
name = "Floating Beach Resort"
id = "beach_float_resort"
description = "A hidden paradise on the beach"
suffix = "beach_float_resort.dmm"
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_LIVEABLE)
diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm
index 60304e86f6f0..81b7aea8582c 100644
--- a/code/datums/ruins/icemoon.dm
+++ b/code/datums/ruins/icemoon.dm
@@ -9,21 +9,25 @@
id = "hydroponicslab"
description = "An abandoned hydroponics research facility containing hostile plant fauna."
suffix = "icemoon_hydroponics_lab.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_SHELTER)
/datum/map_template/ruin/icemoon/abandonedvillage
name = "Abandoned Village"
id = "abandonedvillage"
description = "Who knows what lies within?"
suffix = "icemoon_underground_abandoned_village.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_INHOSPITABLE)
/datum/map_template/ruin/icemoon/brazillian_lab
name = "Barricaded Compound"
id = "brazillian-lab"
description = "A conspicuous compound in the middle of the cold wasteland. What goodies are inside?"
suffix = "icemoon_underground_brazillianlab.dmm"
+ ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_INHOSPITABLE)
/datum/map_template/ruin/icemoon/crashed_holemaker
name = "Crashed Holemaker"
id = "crashed_holemaker"
description = "Safety records for early Nanotrasen Spaceworks vessels were, and always have been, top of their class. Absolutely no multi-billion credit projects have been painstakingly erased from history. (Citation Needed)"
suffix = "icemoon_crashed_holemaker.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_SHELTER)
diff --git a/code/datums/ruins/jungle.dm b/code/datums/ruins/jungle.dm
index f1e2e16bfec8..faaefea4fd8b 100644
--- a/code/datums/ruins/jungle.dm
+++ b/code/datums/ruins/jungle.dm
@@ -9,39 +9,46 @@
id = "syndicatebunkerjungle"
description = "A small bunker owned by the Syndicate."
suffix = "jungle_syndicate.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/jungle/interceptor
name = "Old Crashed Interceptor"
id = "crashedcondor"
description = "An overgrown crashed Condor Class, a forgotten remnant of the Corporate Wars."
suffix = "jungle_interceptor.dmm"
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/jungle/paradise
name = "Hidden paradise"
id = "paradise"
description = "a crashed shuttle, and a hidden beautiful lake."
suffix = "jungle_paradise.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE, RUIN_TAG_HAZARDOUS)
/datum/map_template/ruin/jungle/airbase
name = "Bombed Airbase"
id = "airbase"
description = "A bombed out airbase from the ICW, taken back over by nature"
suffix = "jungle_bombed_starport.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_HAZARDOUS, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/jungle/medtech
name = "MedTech facility"
id = "medtech-facility"
description = "A MedTech pharmaceutical manufacturing plant where something went terribly wrong."
suffix = "jungle_medtech_outbreak.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/jungle/cavecrew
name = "Frontiersmen Cave"
id = "cavecrew"
description = "A frontiersmen base, hidden within a cave. They don't seem friendly"
suffix = "jungle_cavecrew.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_HAZARDOUS, RUIN_TAG_LIVEABLE, RUIN_TAG_MAJOR_LOOT)
/datum/map_template/ruin/jungle/library
name = "Abandoned Library"
id = "abandoned-library"
description = "A forgotten library, with a few angry monkeys."
suffix = "jungle_abandoned_library.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm
index 6f57fe8adb82..4afa13dee07c 100644
--- a/code/datums/ruins/lavaland.dm
+++ b/code/datums/ruins/lavaland.dm
@@ -10,6 +10,7 @@
description = "A Solarian frontier research facility created by the Pionierskompanien \
This one seems to simulate the wintery climate of the northern provinces, including a sauna!"
suffix = "lavaland_surface_biodome_winter.dmm"
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_SHELTER)
/datum/map_template/ruin/lavaland/elephant_graveyard
name = "Elephant Graveyard"
@@ -18,6 +19,7 @@
suffix = "lavaland_surface_elephant_graveyard.dmm"
allow_duplicates = FALSE
cost = 10
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_HAZARDOUS, RUIN_TAG_INHOSPITABLE)
/datum/map_template/ruin/lavaland/buried_shrine
name = "Buried Shrine"
diff --git a/code/datums/ruins/reebe.dm b/code/datums/ruins/reebe.dm
index fa89ada7788c..bec9986d75b8 100644
--- a/code/datums/ruins/reebe.dm
+++ b/code/datums/ruins/reebe.dm
@@ -9,21 +9,25 @@
id = "clockcultarena"
description = "A abandoned base, once belonging to clock cultists."
suffix = "reebe_arena.dmm"
+ ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/reebe/swarmers
name = "Swarmer Island"
id = "swarmers"
description = "Looks like someone has occupied Reebe in the cultists' absence."
suffix = "reebe_swarmers.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/reebe/island
name = "Island Cache"
id = "islandcache"
description = "Reebe is full of these things. Something is hidden within here."
suffix = "reebe_floating_island.dmm"
+ ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/reebe/sm
name = "Decayed Supermatter"
id = "smdecay"
description = "It seems whoever left here was so nice they left very vauluable items behind. How thoughtful."
suffix = "reebe_decayed_sm.dmm"
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE, RUIN_TAG_HAZARDOUS)
diff --git a/code/datums/ruins/rockplanet.dm b/code/datums/ruins/rockplanet.dm
index ac9e2ffc4081..7382b2c5768a 100644
--- a/code/datums/ruins/rockplanet.dm
+++ b/code/datums/ruins/rockplanet.dm
@@ -10,12 +10,14 @@
description = "A factory made for HARM and AGONY."
id = "rockplanet_harmfactory"
suffix = "rockplanet_harmfactory.dmm"
+ ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS)
/datum/map_template/ruin/rockplanet/budgetcuts
name = "Budgetcuts"
description = "Nanotrasen's gotta lay off some personnel, and this facility hasn't been worth the effort so far"
id = "rockplanet_budgetcuts"
suffix = "rockplanet_budgetcuts.dmm"
+ ruin_tags = list(RUIN_TAG_HARD_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/rockplanet/shippingdock
name = "Abandoned Shipping Dock"
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index 1aedb0b9be82..f8cda3a84426 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -11,6 +11,7 @@
suffix = "corporate_mining.dmm"
name = "Corporate Mining Module"
description = "An old and rusty mining facility, with big ore potential."
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER)
/datum/map_template/ruin/space/bigderelict1
id = "bigderelict1"
@@ -18,12 +19,14 @@
name = "Derelict Tradepost"
description = "A once-bustling tradestation that handled imports and exports from nearby stations now lays eerily dormant. \
The last received message was a distress call from one of the on-board officers, but we had no success in making contact again."
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER)
/datum/map_template/ruin/space/onehalf
id = "onehalf"
suffix = "onehalf.dmm"
name = "DK Excavator 453"
description = "Formerly a thriving planetary mining outpost, now a bit of an exploded mess. One has to wonder how it got here"
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE)
/datum/map_template/ruin/space/power_puzzle
id = "power_puzzle"
@@ -31,21 +34,25 @@
name = "Power Puzzle"
description = "an abandoned secure storage location. there is no power left in the batteries and the former ocupants locked it pretty tight before leaving.\
You will have to power areas to raise the bolts on the doors. look out for secrets."
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS)
/datum/map_template/ruin/space/astraeus
id = "astraeus"
suffix = "astraeus.dmm"
name = "Astraeus Ruin"
description = "This vessel served a lengthy period in the Nanotrasen fleet, before an accident in the munitions bay caused to to be destroyed while in active combat."
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE)
/datum/map_template/ruin/space/singularitylab
id = "singularitylab"
suffix = "singularity_lab.dmm"
name = "Singularity Lab"
description = "An overgrown facility, home to an unstarted singularity and many plants"
+ ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER)
/datum/map_template/ruin/space/spacemall
id = "spacemall"
suffix = "spacemall.dmm"
name = "Space Mall"
description = "An old shopping centre, owned by a former member of Nanotrasen's board of directors.."
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER)
diff --git a/code/datums/ruins/wasteplanet.dm b/code/datums/ruins/wasteplanet.dm
index 3d51594a40c2..40c6d19cfd5e 100644
--- a/code/datums/ruins/wasteplanet.dm
+++ b/code/datums/ruins/wasteplanet.dm
@@ -9,21 +9,25 @@
id = "guntested"
description = "A abandoned Nanotrasen weapons facility, presumably the place where the X-01 was manufactured."
suffix = "wasteplanet_lab.dmm"
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/wasteplanet/pandora
id = "pandora_arena"
suffix = "wasteplanet_pandora.dmm"
name = "Pandora Arena"
description = "Some... thing has settled here."
+ ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_MEGAFAUNA, RUIN_TAG_LIVEABLE)
/datum/map_template/ruin/wasteplanet/radiation
name = "Honorable deeds storage"
id = "wasteplanet_radiation"
description = "A dumping ground for nuclear waste."
suffix = "wasteplanet_unhonorable.dmm"
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS)
/datum/map_template/ruin/wasteplanet/abandoned_mechbay
name = "Abandoned Exosuit Bay"
description = "A military base formerly used for staging 4 exosuits and crew. God knows what's in it now."
id = "abandoned_mechbay"
suffix = "wasteplanet_abandoned_mechbay.dmm"
+ ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS)
diff --git a/code/datums/ruins/whitesands.dm b/code/datums/ruins/whitesands.dm
index b3e0cb13adcc..4731adeddf41 100644
--- a/code/datums/ruins/whitesands.dm
+++ b/code/datums/ruins/whitesands.dm
@@ -9,12 +9,14 @@
id = "medipenplant"
description = "A once prosperous autoinjector manufacturing plant."
suffix = "whitesands_surface_medipen_plant.dmm"
+ ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER)
/datum/map_template/ruin/whitesands/pubbyslopcrash
name = "Pubby Slop Crash"
id = "ws-pubbyslopcrash"
description = "A failed attempt of the Nanotrasen nutrional replacement program"
suffix = "whitesands_surface_pubbyslopcrash.dmm"
+ ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER)
//////////OUTSIDE SETTLEMENTS/RUINS//////////
/datum/map_template/ruin/whitesands/survivors/saloon
@@ -22,6 +24,7 @@
id = "ws-saloon"
description = "A western style saloon, most popular spot for the hermits to gather planetside"
suffix = "whitesands_surface_camp_saloon.dmm"
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE)
/datum/map_template/ruin/whitesands/survivors/combination //combined extra large ruin of several other whitesands survivor ruins
name = "Wasteland Survivor Village"
@@ -29,4 +32,5 @@
description = "A small encampment of nomadic survivors of the First Colony, and their descendants. By all accounts, feral and without allegance to anyone but themselves."
suffix = "whitesands_surface_camp_combination.dmm"
allow_duplicates = FALSE
+ ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE, RUIN_TAG_HAZARDOUS)
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 3f5620c35f06..884c103d0e0f 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -832,8 +832,8 @@ DEFINE_BITFIELD(turret_flags, list(
stun_projectile_sound = 'sound/weapons/gun/smg/shot.ogg'
desc = "A ballistic machine gun auto-turret."
-/obj/machinery/porta_turret/ship/solgov
- faction = list("playerSolgov", "turret")
+
+/* Syndicate Turrets */
/obj/machinery/porta_turret/ship/syndicate
faction = list(FACTION_PLAYER_SYNDICATE, "turret")
@@ -856,6 +856,39 @@ DEFINE_BITFIELD(turret_flags, list(
lethal_projectile = /obj/projectile/beam/laser/heavylaser
lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg'
+/* Solcon Turrets */
+
+/obj/machinery/porta_turret/ship/solgov
+ faction = list(FACTION_PLAYER_SOLCON, "turret")
+
+/* Pan Gezena Federation Turrets */
+
+/obj/machinery/porta_turret/ship/pgf
+ name = "Etherbor Defensive Mount"
+ desc = "A less portable Etherbor offering, the EDM is a self-directed linkage of energy weapons, designed to keep intruders away from Gezenan vessels."
+ faction = list(FACTION_PLAYER_GEZENA, "Turret")
+ stun_projectile = /obj/projectile/beam/hitscan/disabler
+ stun_projectile_sound = 'sound/weapons/gun/energy/kalixpistol.ogg'
+ lethal_projectile = /obj/projectile/beam/hitscan/kalix/pgf/assault
+ lethal_projectile_sound = 'sound/weapons/gun/energy/kalixsmg.ogg'
+ icon_state = "standard_lethal"
+ base_icon_state = "standard"
+
+/obj/machinery/porta_turret/ship/pgf/light
+ name = "Etherbor Deterrent System"
+ desc = "A light turret manufactured by Etherbor. It offers a lightweight assembly of energy weapons to accost nearby foes."
+ lethal_projectile = /obj/projectile/beam/hitscan/kalix/pgf
+ lethal_projectile_sound = 'sound/weapons/gun/energy/kalixsmg.ogg'
+
+/obj/machinery/porta_turret/ship/pgf/heavy
+ name = "Etherbor Point-Defense System"
+ desc = "A high-powered defensive turret manufactured by Etherbor. The EPDS contains heavy energy weapons linked in tandem."
+ scan_range = 10
+ stun_projectile = /obj/projectile/beam/hitscan/disabler/heavy
+ stun_projectile_sound = 'sound/weapons/gun/energy/kalixpistol.ogg'
+ lethal_projectile = /obj/projectile/beam/hitscan/kalix/pgf/sniper //fwoom
+ lethal_projectile_sound = 'sound/weapons/gun/laser/heavy_laser.ogg'
+
////////////////////////
//Turret Control Panel//
////////////////////////
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 65bda2aa1f54..5df5e96dd0ac 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -446,7 +446,7 @@ Code:
if(!emoji_table)
var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat)
var/list/collate = list("
[emoji] | [tag] |