diff --git a/code/game/gamemodes/technomancer/devices/shield_armor.dm b/code/game/gamemodes/technomancer/devices/shield_armor.dm
index e36ce7bd3ad..c8e8130adc0 100644
--- a/code/game/gamemodes/technomancer/devices/shield_armor.dm
+++ b/code/game/gamemodes/technomancer/devices/shield_armor.dm
@@ -14,11 +14,11 @@
desc = "This armor has no inherent ability to absorb shock, as normal armor usually does. Instead, this emits a strong field \
around the wearer, designed to protect from most forms of harm, from lasers to bullets to close quarters combat. It appears to \
require a very potent supply of an energy of some kind in order to function."
- icon_state = "reactiveoff" //wip
- item_state = "reactiveoff"
+ icon_state = "shield_armor_0"
blood_overlay_type = "armor"
slowdown = 0
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ action_button_name = "Toggle Shield Projector"
var/active = 0
var/damage_to_energy_multiplier = 50.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 750 energy cost
var/datum/effect/effect/system/spark_spread/spark_system = null
@@ -49,7 +49,7 @@
var/damage_to_energy_cost = (damage_to_energy_multiplier * damage_blocked)
if(!user.technomancer_pay_energy(damage_to_energy_cost))
- user << "Your shield fades due to lack of energy!"
+ to_chat(user, "Your shield fades due to lack of energy!")
active = 0
update_icon()
return 0
@@ -67,7 +67,7 @@
P.damage = P.damage - damage_blocked
user.visible_message("\The [user]'s [src] absorbs [attack_text]!")
- user << "Your shield has absorbed most of \the [damage_source]."
+ to_chat(user, "Your shield has absorbed most of \the [damage_source].")
spark_system.start()
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
@@ -75,14 +75,17 @@
/obj/item/clothing/suit/armor/shield/attack_self(mob/user)
active = !active
- user << "You [active ? "" : "de"]active \the [src]."
+ to_chat(user, "You [active ? "" : "de"]activate \the [src].")
update_icon()
+ user.update_inv_wear_suit()
+ user.update_action_buttons()
/obj/item/clothing/suit/armor/shield/update_icon()
+ icon_state = "shield_armor_[active]"
+ item_state = "shield_armor_[active]"
if(active)
- icon_state = "shield_armor"
set_light(2, 1, l_color = "#006AFF")
else
- icon_state = "shield_armor_off"
set_light(0, 0, l_color = "#000000")
+ ..()
return
\ No newline at end of file
diff --git a/code/game/gamemodes/technomancer/devices/tesla_armor.dm b/code/game/gamemodes/technomancer/devices/tesla_armor.dm
index 2e9a60a8e63..56f2085850d 100644
--- a/code/game/gamemodes/technomancer/devices/tesla_armor.dm
+++ b/code/game/gamemodes/technomancer/devices/tesla_armor.dm
@@ -10,55 +10,70 @@
/obj/item/clothing/suit/armor/tesla
name = "tesla armor"
desc = "This rather dangerous looking armor will hopefully shock your enemies, and not you in the process."
- icon_state = "reactive" //wip
- item_state = "reactive"
+ icon_state = "tesla_armor_1" //wip
blood_overlay_type = "armor"
slowdown = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ action_button_name = "Toggle Tesla Armor"
+ var/active = 1 //Determines if the armor will zap or block
var/ready = 1 //Determines if the next attack will be blocked, as well if a strong lightning bolt is sent out at the attacker.
- var/ready_icon_state = "reactive" //also wip
- var/normal_icon_state = "reactiveoff"
+ var/ready_icon_state = "tesla_armor_1" //also wip
+ var/normal_icon_state = "tesla_armor_0"
var/cooldown_to_charge = 15 SECONDS
/obj/item/clothing/suit/armor/tesla/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
//First, some retaliation.
- if(istype(damage_source, /obj/item/projectile))
- var/obj/item/projectile/P = damage_source
- if(P.firer && get_dist(user, P.firer) <= 3)
- if(ready)
- shoot_lightning(P.firer, 40)
- else
- shoot_lightning(P.firer, 15)
-
- else
- if(attacker && attacker != user)
- if(get_dist(user, attacker) <= 3) //Anyone farther away than three tiles is too far to shoot lightning at.
+ if(active)
+ if(istype(damage_source, /obj/item/projectile))
+ var/obj/item/projectile/P = damage_source
+ if(P.firer && get_dist(user, P.firer) <= 3)
if(ready)
- shoot_lightning(attacker, 40)
+ shoot_lightning(P.firer, 40)
else
- shoot_lightning(attacker, 15)
+ shoot_lightning(P.firer, 15)
- //Deal with protecting our wearer now.
- if(ready)
- ready = 0
- spawn(cooldown_to_charge)
- ready = 1
+ else
+ if(attacker && attacker != user)
+ if(get_dist(user, attacker) <= 3) //Anyone farther away than three tiles is too far to shoot lightning at.
+ if(ready)
+ shoot_lightning(attacker, 40)
+ else
+ shoot_lightning(attacker, 15)
+
+ //Deal with protecting our wearer now.
+ if(ready)
+ ready = 0
+ spawn(cooldown_to_charge)
+ ready = 1
+ update_icon()
+ to_chat(user, "\The [src] is ready to protect you once more.")
+ visible_message("\The [user]'s [src.name] blocks [attack_text]!")
update_icon()
- user << "\The [src] is ready to protect you once more."
- visible_message("\The [user]'s [src.name] blocks [attack_text]!")
- update_icon()
- return 1
+ return 1
return 0
+/obj/item/clothing/suit/armor/tesla/attack_self(mob/user)
+ active = !active
+ to_chat(user, "You [active ? "" : "de"]activate \the [src].")
+ update_icon()
+ user.update_inv_wear_suit()
+ user.update_action_buttons()
+
/obj/item/clothing/suit/armor/tesla/update_icon()
- ..()
- if(ready)
+ if(active && ready)
icon_state = ready_icon_state
+ item_state = ready_icon_state
+ set_light(2, 1, l_color = "#006AFF")
else
icon_state = normal_icon_state
+ item_state = normal_icon_state
+ set_light(0, 0, l_color = "#000000")
+
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
H.update_inv_wear_suit(0)
+ H.update_action_buttons()
+ ..()
/obj/item/clothing/suit/armor/tesla/proc/shoot_lightning(var/mob/target, var/power)
var/obj/item/projectile/beam/lightning/lightning = new(src)
diff --git a/code/game/objects/items/weapons/material/gravemarker.dm b/code/game/objects/items/weapons/material/gravemarker.dm
new file mode 100644
index 00000000000..f50416b05da
--- /dev/null
+++ b/code/game/objects/items/weapons/material/gravemarker.dm
@@ -0,0 +1,80 @@
+/obj/item/weapon/material/gravemarker
+ name = "grave marker"
+ desc = "An object used in marking graves."
+ icon_state = "gravemarker"
+ w_class = ITEMSIZE_LARGE
+ fragile = 1
+ force_divisor = 0.65
+ thrown_force_divisor = 0.25
+
+ var/icon_changes = 1 //Does the sprite change when you put words on it?
+ var/grave_name = "" //Name of the intended occupant
+ var/epitaph = "" //A quick little blurb
+
+/obj/item/weapon/material/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
+ if(istype(W, /obj/item/weapon/screwdriver))
+ var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN)
+ if(carving_1)
+ user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
+ if(do_after(user, material.hardness * W.toolspeed))
+ user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
+ grave_name += carving_1
+ update_icon()
+ var/carving_2 = sanitizeSafe(input(user, "What message should \the [src.name] have?", "Epitaph Carving", null) as text, MAX_NAME_LEN)
+ if(carving_2)
+ user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
+ if(do_after(user, material.hardness * W.toolspeed))
+ user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
+ epitaph += carving_2
+ update_icon()
+ if(istype(W, /obj/item/weapon/wrench))
+ user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
+ if(do_after(user, material.hardness * W.toolspeed))
+ material.place_dismantled_product(get_turf(src))
+ user.visible_message("[user] dismantles down \the [src.name].", "You dismantle \the [src.name].")
+ qdel(src)
+ ..()
+
+/obj/item/weapon/material/gravemarker/examine(mob/user)
+ ..()
+ if(get_dist(src, user) < 4)
+ if(grave_name)
+ to_chat(user, "Here Lies [grave_name]")
+ if(get_dist(src, user) < 2)
+ if(epitaph)
+ to_chat(user, epitaph)
+
+/obj/item/weapon/material/gravemarker/update_icon()
+ if(icon_changes)
+ if(grave_name && epitaph)
+ icon_state = "[initial(icon_state)]_3"
+ else if(grave_name)
+ icon_state = "[initial(icon_state)]_1"
+ else if(epitaph)
+ icon_state = "[initial(icon_state)]_2"
+ else
+ icon_state = initial(icon_state)
+
+ ..()
+
+/obj/item/weapon/material/gravemarker/attack_self(mob/user)
+ src.add_fingerprint(user)
+
+ if(!isturf(user.loc))
+ return 0
+
+ if(locate(/obj/structure/gravemarker, user.loc))
+ to_chat(user, "There's already something there.")
+ return 0
+ else
+ to_chat(user, "You begin to place \the [src.name].")
+ if(!do_after(usr, 10))
+ return 0
+ var/obj/structure/gravemarker/G = new /obj/structure/gravemarker/(user.loc, src.get_material())
+ to_chat(user, "You place \the [src.name].")
+ G.grave_name = grave_name
+ G.epitaph = epitaph
+ G.add_fingerprint(usr)
+ G.dir = user.dir
+ qdel_null(src)
+ return
\ No newline at end of file
diff --git a/code/game/objects/structures/gravemarker.dm b/code/game/objects/structures/gravemarker.dm
new file mode 100644
index 00000000000..a10cd0bf6ea
--- /dev/null
+++ b/code/game/objects/structures/gravemarker.dm
@@ -0,0 +1,137 @@
+/obj/structure/gravemarker
+ name = "grave marker"
+ desc = "An object used in marking graves."
+ icon_state = "gravemarker"
+
+ density = 1
+ anchored = 1
+ throwpass = 1
+ climbable = 1
+
+ layer = 3.1 //Above dirt piles
+
+ //Maybe make these calculate based on material?
+ var/health = 100
+
+ var/grave_name = "" //Name of the intended occupant
+ var/epitaph = "" //A quick little blurb
+// var/dir_locked = 0 //Can it be spun? Not currently implemented
+
+ var/material/material
+
+/obj/structure/gravemarker/New(var/newloc, var/material_name)
+ ..(newloc)
+ if(!material_name)
+ material_name = "wood"
+ material = get_material_by_name("[material_name]")
+ if(!material)
+ qdel(src)
+ return
+ color = material.icon_colour
+
+/obj/structure/gravemarker/examine(mob/user)
+ ..()
+ if(get_dist(src, user) < 4)
+ if(grave_name)
+ to_chat(user, "Here Lies [grave_name]")
+ if(get_dist(src, user) < 2)
+ if(epitaph)
+ to_chat(user, epitaph)
+
+/obj/structure/gravemarker/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if(!mover)
+ return 1
+ if(istype(mover) && mover.checkpass(PASSTABLE))
+ return 1
+ if(get_dir(loc, target) & dir)
+ return !density
+ else
+ return 1
+
+/obj/structure/gravemarker/CheckExit(atom/movable/O as mob|obj, target as turf)
+ if(istype(O) && O.checkpass(PASSTABLE))
+ return 1
+ if(get_dir(O.loc, target) == dir)
+ return 0
+ return 1
+
+/obj/structure/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
+ if(istype(W, /obj/item/weapon/screwdriver))
+ var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN)
+ if(carving_1)
+ user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
+ if(do_after(user, material.hardness * W.toolspeed))
+ user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
+ grave_name += carving_1
+ update_icon()
+ var/carving_2 = sanitizeSafe(input(user, "What message should \the [src.name] have?", "Epitaph Carving", null) as text, MAX_NAME_LEN)
+ if(carving_2)
+ user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
+ if(do_after(user, material.hardness * W.toolspeed))
+ user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
+ epitaph += carving_2
+ update_icon()
+ return
+ if(istype(W, /obj/item/weapon/wrench))
+ user.visible_message("[user] starts taking down \the [src.name].", "You start taking down \the [src.name].")
+ if(do_after(user, material.hardness * W.toolspeed))
+ user.visible_message("[user] takes down \the [src.name].", "You take down \the [src.name].")
+ dismantle()
+ ..()
+
+/obj/structure/gravemarker/bullet_act(var/obj/item/projectile/Proj)
+ var/proj_damage = Proj.get_structure_damage()
+ if(!proj_damage)
+ return
+
+ ..()
+ damage(proj_damage)
+
+ return
+
+/obj/structure/gravemarker/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ visible_message("\The [src] is blown apart!")
+ qdel(src)
+ return
+ if(2.0)
+ visible_message("\The [src] is blown apart!")
+ if(prob(50))
+ dismantle()
+ else
+ qdel(src)
+ return
+
+/obj/structure/gravemarker/proc/damage(var/damage)
+ health -= damage
+ if(health <= 0)
+ visible_message("\The [src] falls apart!")
+ dismantle()
+
+/obj/structure/gravemarker/proc/dismantle()
+ material.place_dismantled_product(get_turf(src))
+ qdel(src)
+ return
+
+
+/obj/structure/gravemarker/verb/rotate()
+ set name = "Rotate Grave Marker"
+ set category = "Object"
+ set src in oview(1)
+
+ if(anchored)
+ return
+ if(config.ghost_interaction)
+ src.set_dir(turn(src.dir, 90))
+ return
+ else
+ if(istype(usr,/mob/living/simple_animal/mouse))
+ return
+ if(!usr || !isturf(usr.loc))
+ return
+ if(usr.stat || usr.restrained())
+ return
+
+ src.set_dir(turn(src.dir, 90))
+ return
\ No newline at end of file
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 099aa439787..b86471bf844 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -401,7 +401,7 @@
desc = "A hologram projector in the shape of a gun. There is a dial on the side to change the gun's disguise."
icon_state = "deagle"
w_class = ITEMSIZE_NORMAL
- origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
matter = list()
fire_sound = 'sound/weapons/Gunshot.ogg'
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index 12e264135eb..99abbe2e12d 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -11,6 +11,7 @@
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]")
if(integrity>=50)
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index d9312966d66..0d5b6ada6c0 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -261,8 +261,8 @@
src.brainmob.ckey = candidate.ckey
src.name = "[name] ([src.brainmob.name])"
src.brainmob << "You are a [src], brought into existence on [station_name()]."
- src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI."
- src.brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm."
+ src.brainmob << "As a synthetic intelligence, you are designed with organic values in mind."
+ src.brainmob << "However, unless placed in a lawed chassis, you are not obligated to obey any individual crew member." //it's not like they can hurt anyone
// src.brainmob << "Use say #b to speak to other artificial intelligences."
src.brainmob.mind.assigned_role = "Synthetic Brain"
@@ -281,7 +281,7 @@
/obj/item/device/mmi/digital/robot/New()
..()
- src.brainmob.name = "[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[rand(1000, 9999)]"
+ src.brainmob.name = "[pick(list("ADA","DOS","GNU","MAC","WIN","NJS","SKS","DRD","IOS","CRM","IBM","TEX","LVM","BSD",))]-[rand(1000, 9999)]"
src.brainmob.real_name = src.brainmob.name
src.name = "robotic intelligence circuit ([src.brainmob.name])"
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 09db2e31465..660cc6e05b4 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -168,10 +168,16 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(istype(tool,/obj/item/stack/cable_coil/))
var/obj/item/stack/cable_coil/C = tool
- if(!C.can_use(5))
- user << "You need ten or more cable pieces to repair this damage." //usage amount made more consistent with regular cable repair
+ if(affected.burn_dam == 0)
+ to_chat(user, "There are no burnt wires here!")
return SURGERY_FAILURE
- C.use(5)
+ else
+ if(!C.can_use(5))
+ to_chat(user, "You need at least five cable pieces to repair this part.") //usage amount made more consistent with regular cable repair
+ return SURGERY_FAILURE
+ else
+ C.use(5)
+
return affected && affected.open == 3 && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 7249f9b218e..a0e5df9f9d3 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 3d5a64c235e..d60b03c9aad 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index f51de6956bb..3b4604cdfd5 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index 5f38ccd3a3c..01d769a0f46 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index 7ddf50a7c07..f7a9f84c3c7 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -4366,8 +4366,8 @@
"bFX" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 8; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
"bFY" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineWasteViewport1"; name = "Engine Waste Viewport Shutter"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor,/area/engineering/engine_waste)
"bFZ" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 1},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineWasteViewport1"; name = "Engine Waste Blast Doors"; pixel_x = 0; pixel_y = 25; req_access = null; req_one_access = list(11,24)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor,/area/engineering/engine_waste)
-"bGa" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor,/area/engineering/engine_waste)
-"bGb" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/engine_waste)
+"bGa" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_waste)
+"bGb" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_waste)
"bGc" = (/obj/machinery/atmospherics/pipe/cap/visible,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engineering/engine_waste)
"bGd" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor,/area/engineering/engine_waste)
"bGe" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/turf/simulated/floor,/area/engineering/engine_waste)
@@ -4619,7 +4619,7 @@
"bKQ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor,/area/engineering/engine_waste)
"bKR" = (/turf/simulated/floor,/area/engineering/engine_waste)
"bKS" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engine_waste)
-"bKT" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/door/window/northleft{name = "Engine Waste"; req_one_access = list(10,24)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor,/area/engineering/engine_waste)
+"bKT" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/door/window/northleft{name = "Engine Waste"; req_one_access = list(10,24)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_waste)
"bKU" = (/obj/machinery/door/window/northright{name = "Engine Waste"; req_one_access = list(10,24)},/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineEmitterPortWest"; name = "Engine Room Blast Doors"; pixel_x = 26; pixel_y = 0; req_access = null; req_one_access = list(11,24)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/engine_waste)
"bKV" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/computer/security/engineering{name = "Drone Monitoring Cameras"; network = list("Engineering")},/obj/machinery/camera/network/engineering{c_tag = "ENG - Drone Fabrication"; dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bKW" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
@@ -4990,9 +4990,9 @@
"bRX" = (/obj/machinery/atmospherics/pipe/cap/visible{dir = 1},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor,/area/engineering/engine_room)
"bRY" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/engineering/engine_room)
"bRZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor,/area/engineering/engine_room)
-"bSa" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 2; tag_south = 4; tag_west = 0; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"bSa" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 2; tag_south = 4; tag_west = 1; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/obj/structure/sign/warning/nosmoking_2{pixel_x = 32},/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room)
"bSb" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/turf/simulated/floor,/area/engineering/engine_room)
-"bSc" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 2; tag_south = 4; tag_west = 1; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/obj/structure/sign/warning/nosmoking_2{pixel_x = 32},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"bSc" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 2; tag_south = 4; tag_west = 0; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room)
"bSd" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bSe" = (/obj/effect/landmark{name = "JoinLateCyborg"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bSf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/hallway/engineer_hallway)
@@ -5411,7 +5411,7 @@
"cac" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 4},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor,/area/engineering/engine_room)
"cad" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter,/turf/simulated/floor,/area/engineering/engine_room)
"cae" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/engineering/engine_room)
-"caf" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_x = 22; pixel_y = 0; req_access = list(10)},/turf/simulated/floor,/area/engineering/engine_room)
+"caf" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_x = 22; pixel_y = 0; req_access = list(10)},/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room)
"cag" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance_hatch{icon_state = "door_closed"; locked = 0; name = "Engine Access"; req_one_access = list(11)},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
"cah" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/engineering/engine_airlock)
"cai" = (/obj/structure/sign/warning/radioactive,/turf/simulated/wall/r_wall,/area/engineering/engine_airlock)
@@ -5481,7 +5481,7 @@
"cbu" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/button/remote/blast_door{id = "EngineVent"; name = "Reactor Ventillatory Control"; pixel_x = -25; pixel_y = 0; req_access = list(10)},/turf/simulated/floor,/area/engineering/engine_room)
"cbv" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor,/area/engineering/engine_room)
"cbw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engine_room)
-"cbx" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor,/area/engineering/engine_room)
+"cbx" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_room)
"cby" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor,/area/engineering/engine_monitoring)
"cbz" = (/obj/machinery/computer/general_air_control/supermatter_core{frequency = 1438; input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; pressure_setting = 100; sensors = list("engine_sensor" = "Engine Core")},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
"cbA" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/supermatter_engine,/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
@@ -5646,7 +5646,7 @@
"ceD" = (/obj/machinery/disease2/isolator,/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
"ceE" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "EngineVent"; name = "Reactor Vent"; p_open = 0},/obj/machinery/shield_diffuser,/turf/simulated/floor/reinforced/airless,/area/engineering/engine_room)
"ceF" = (/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room)
-"ceG" = (/obj/machinery/mass_driver{dir = 8; id = "enginecore"},/obj/machinery/power/supermatter{layer = 4},/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room)
+"ceG" = (/obj/machinery/mass_driver{dir = 8; id = "enginecore"},/obj/machinery/power/supermatter{layer = 4},/obj/effect/engine_setup/core,/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room)
"ceH" = (/obj/machinery/air_sensor{frequency = 1438; id_tag = "engine_sensor"; output = 63},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room)
"ceI" = (/obj/effect/wingrille_spawn/reinforced_phoron,/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor,/area/engineering/engine_room)
"ceJ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor,/area/engineering/engine_room)
@@ -5845,7 +5845,7 @@
"ciu" = (/obj/machinery/disease2/incubator,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
"civ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; id = "SupermatterPort"; name = "Reactor Blast Doors"; pixel_x = -25; pixel_y = 6; req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; pixel_x = -25; pixel_y = -6; req_access = list(10)},/turf/simulated/floor,/area/engineering/engine_room)
"ciw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engineering/engine_room)
-"cix" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor,/area/engineering/engine_room)
+"cix" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/coolant_canister,/turf/simulated/floor,/area/engineering/engine_room)
"ciy" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
"ciz" = (/obj/structure/table/reinforced,/obj/item/clothing/ears/earmuffs,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
"ciA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -30},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
@@ -5917,7 +5917,7 @@
"cjO" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/camera/network/engine{c_tag = "ENG - Engine Core 3"; dir = 2},/turf/simulated/floor,/area/engineering/engine_room)
"cjP" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 4},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor,/area/engineering/engine_room)
"cjQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engineering/engine_room)
-"cjR" = (/obj/machinery/atmospherics/binary/pump,/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor,/area/engineering/engine_room)
+"cjR" = (/obj/machinery/atmospherics/binary/pump,/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room)
"cjS" = (/turf/simulated/wall/r_wall,/area/engineering/engine_smes)
"cjT" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/engineering/engine_smes)
"cjU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access"; req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/engineering/engine_smes)
@@ -6111,11 +6111,11 @@
"cnA" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 9},/turf/simulated/floor,/area/engineering/engine_room)
"cnB" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/engine_room)
"cnC" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/alarm/nobreach{dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor,/area/engineering/engine_room)
-"cnD" = (/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 2e+006; input_attempt = 1; input_level = 100000; output_level = 200000; RCon_tag = "Engine - Core"},/turf/simulated/floor/plating,/area/engineering/engine_smes)
+"cnD" = (/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 2e+006; input_attempt = 1; input_level = 100000; output_level = 200000; RCon_tag = "Engine - Core"},/obj/effect/engine_setup/smes,/turf/simulated/floor/plating,/area/engineering/engine_smes)
"cnE" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/structure/table/steel,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/tiled,/area/engineering/engine_smes)
"cnF" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/table/steel,/obj/item/device/multitool{pixel_x = 5},/obj/item/clothing/gloves/yellow,/obj/machinery/camera/network/engine{c_tag = "ENG - SMES Room"; dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
"cnG" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
-"cnH" = (/obj/structure/cable,/obj/machinery/power/smes/buildable{charge = 1e+007; cur_coils = 4; input_attempt = 1; input_level = 750000; output_level = 500000; RCon_tag = "Engine - Main"},/turf/simulated/floor/plating,/area/engineering/engine_smes)
+"cnH" = (/obj/structure/cable,/obj/machinery/power/smes/buildable{charge = 1e+007; cur_coils = 4; input_attempt = 1; input_level = 750000; output_level = 500000; RCon_tag = "Engine - Main"},/obj/effect/engine_setup/smes/main,/turf/simulated/floor/plating,/area/engineering/engine_smes)
"cnI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint)
"cnJ" = (/turf/simulated/wall,/area/construction/seconddeck/construction1)
"cnK" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/construction/seconddeck/construction1)
@@ -6371,7 +6371,7 @@
"csA" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport2"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/visible/green,/turf/simulated/floor,/area/engineering/engine_room)
"csB" = (/obj/machinery/atmospherics/pipe/manifold/visible/green,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine radiator viewport shutters."; id = "EngineRadiatorViewport2"; name = "Engine Radiator Viewport Shutters"; pixel_x = 0; pixel_y = -25; req_access = list(10)},/turf/simulated/floor,/area/engineering/engine_room)
"csC" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 10; icon_state = "intact"; tag = "icon-intact (SOUTHEAST)"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/engineering/engine_room)
-"csD" = (/obj/machinery/atmospherics/binary/pump/high_power{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor,/area/engineering/engine_room)
+"csD" = (/obj/machinery/atmospherics/binary/pump/high_power{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/pump_max,/turf/simulated/floor,/area/engineering/engine_room)
"csE" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor,/area/engineering/engine_room)
"csF" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/plating,/area/engineering/engine_room)
"csG" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/blue,/obj/structure/sign/warning/nosmoking_2{pixel_x = 32},/turf/simulated/floor/plating,/area/engineering/engine_room)
@@ -10489,7 +10489,7 @@ aaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybv
aaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabDhbMBbMCbMDbMEbMFbMGbDhbMHbMIbKXbMJbysbMKbMLbLcbLcbMMbMNbMObMObMPbMQbMRbLgbMSbMTbMUbMVbMWbMXbMYbMZbNabAhbNbbNcbNdbNebNfbNgbNhbNibNjbNjbNkbNjbNjbNjbNjbpJbpJbxBbNlbpJaaaaaaaaabGKbGKbLCbLDbLEbLEbNmbNnbNobNpbNpbNpbNqbNrbNsbNtbNubNvbNvbNwbNwbNxbNybIGbIGbLKbLObDNbDNaaaaaaaaabrybNzbNAbNBbKrbNCbNDbNEbNFbNGbNHbNIbNJbNKbNLbNMbNNbNObNPbNPbNPbNQbNRbNSbNTbNUbNVbKybNWbNXbNYbNZbOabOabOabOabKBbObbOcbOdbKEbOebOfbFLbOgbOhbOibOjbOkbOlbOmbOnbEFaaaaaaaabaaaaaaaaaaaRaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaafaaaaaaaaabFVbOobFVbOobFVbOobFVbOobFVbOobFVbOoaafaafaafbOpbOqbOqbOqbOqbOqbOpbOrbOsbOqbwObOtbKXbOubysbOvbOwbLcbOxbOybOzbOybOAbOBbOybOCbLgbODbOEbOFbOGbOHbOIbOJbMZbOKbAhbOLbOMbONbOObOPbOQbORbOSbNjbOTbOUbOVbOVbOWbNjbOXbtybxBbOYbClaaaaaaaaabGKbOZbLDbLEbPabPbbPcbPdbPebPfbPgbPhbPibPjbPkbIGbLIbPlbIGbIGbPmbPnbPobPpbPqbIGbLKbPrbDNaaaaaaaaabqvbPsbsIbPtbKrbPubPvbPwbPxbPybPzbPAbPBbPCbPDbMabPEbPFbPGbPHbPGbPIbNUbPJbPKbPLbPMbKybPNbPObPPbPQbPRbPSbOabPTbKBbPUbPVbPWbKEbPXbPYbFLbPZbQabQbbQbbQbbQabQabQcbDgaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabQdbQebQfbQebQfbQebQfbQebQfbQebQfbQebQgbQhbOqbOqbQibQjbQkbQlbQkbQmbQnbQobQpbwObQqbQrbQsbQtbQubQvbLcbQwbOybQxbQybQzbQAbOybQBbLgbQCbQDbQEbQFbQGbQHbAhbQIbQJbQKbQLbQMbQNbQObQPbQQbORbLsbQRbQSbQTbQSbQUbQVbNjbQWbtybxBbQXbClaaaaaabGJbGJbQYbLEbLEbQZbRabRbbRcbRdbRcbRcbRebRfbFtbRgbRhbRibRibRjbRkbRlbRibRibRmbPpbIGbIGbRnbGLbGLaaaaaabqvbPsbsIbRobKrbRpbRqbRrbPxbRsbKrbKrbsTbRtbsTbKybKybRubRvbRwbRxbPIbRybRzbRAbPGbRBbKybRCbRDbREbRFbPRbRGbOabRHbKBbRIbRJbRKbKEbRLbwFbFLbPZbRMbRNbRObRPbRQbRRbQcbBEaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHJbFWbFWbFWbFWbFWbFWbFWbFWbFWbFWbFWbQgbRSbRTbRUbRVbRWbRXbRYbRWbRZbSabSbbScbwObSdbSebGjbysbSfbSgbLcbShbOybOybSibSjbOybOybSkbLgbSlbSmbSnbSobSpbSqbSrbSsbStbBXbSubOMbLsbSvbSwbSwbSxbLsbNjbSybSzbSAbSBbSCbNjbQWbtybxBbyVbClaaaaaabGJbSDbSEbLEbSFbSGbRbbRbbSHbSIbSJbRbbSKbRfbRfbSLbRibRibSMbSNbSNbSObSPbRibRibSQbSRbSSbSTbSUbGLaaaaaabqvbPsbSVbSVbKrbSWbSXbSXbSYbSZbPAbTabTbbTcbTdbTebMabTfbTgbTgbTgbThbTibTibTjbTkbTibTlbTmbTnbTobTpbOabOabOabTqbKBbTrbTsbTtbKEbMubMvbFLbTubFLbFLbFLbFLbFLbFLbFLbFLbTvbTvaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHJbFWbFWbFWbFWbFWbFWbFWbFWbFWbFWbFWbQgbRSbRTbRUbRVbRWbRXbRYbRWbRZbScbSbbSabwObSdbSebGjbysbSfbSgbLcbShbOybOybSibSjbOybOybSkbLgbSlbSmbSnbSobSpbSqbSrbSsbStbBXbSubOMbLsbSvbSwbSwbSxbLsbNjbSybSzbSAbSBbSCbNjbQWbtybxBbyVbClaaaaaabGJbSDbSEbLEbSFbSGbRbbRbbSHbSIbSJbRbbSKbRfbRfbSLbRibRibSMbSNbSNbSObSPbRibRibSQbSRbSSbSTbSUbGLaaaaaabqvbPsbSVbSVbKrbSWbSXbSXbSYbSZbPAbTabTbbTcbTdbTebMabTfbTgbTgbTgbThbTibTibTjbTkbTibTlbTmbTnbTobTpbOabOabOabTqbKBbTrbTsbTtbKEbMubMvbFLbTubFLbFLbFLbFLbFLbFLbFLbFLbTvbTvaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabFVbOobFVbOobFVbOobFVbOobFVbOobFVbOoaadbTwbTxbTybTzbTAbTBbTCbTAbRZbTDbTEbTFbwObTGbTHbTGbysbTIbTJbLcbTKbOybOybTLbSjbOybOybTMbLgbTNbTObTPbTQbTRbTSbMYbJXbAhbAhbNbbTTbTUbLsbLsbLsbLsbTVbNjbTWbNjbTXbNjbNjbNjbpJbtybxBbTYbpJaaaaaabGKbTZbUabUbbUcbUdbUebUfbUgbUhbUibRbbUjbUjbUkbUlbRibUmbUnbUobUobUpbUqbUrbRibUsbUtbUubSTbUvbDNaaaaaabrybPsbzcbrybKrbUwbUxbUybUybUzbUAbUBbUCbUDbUEbUFbUGbUHbUIbUIbUIbUJbUKbULbUMbUNbUObTlbUPbUQbURbUSbKBbUTbUUbUVbKBbUWbUXbUYbKEbMubMvbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVkbVjbVjbVjbVjbVjaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabQdbQebQfbQebQfbQebQfbQebQfbQebQfbQebQgbVlbOqbVmbTCbTAbTBbTCbTAbRZbVnbVobVobVobVobVobVobVobVpbVqbLcbVrbVsbVtbVubVvbVwbVxbVybLgbLgbVzbLgbVAbVBbLgbVCbJXbAhbAhbVDbLqbVEbVFbVGbVHbVIbVJbNjbVKbNjbVLbNjbVMbVNbVObtybxBbtybpJaaaaaabGKbVPbVQbPgbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbRibWdbWebWfbWgbWhbUqbWibWjbWkbWlbWmbWnbWobDNaaaaaabrybPsbWpbWqbKrbKrbWrbWsbWtbWubPAbWvbWwbWxbWybWzbWAbWBbWCbWDbWEbWFbUKbWGbWHbWIbWJbTlbKBbWKbKBbKBbKBbKBbKBbKBbKBbKEbKEbKEbKEbWLbWMbUZbWNbWObWPbWQbWRbWSbVebVhbVhbVjbWTbWUbWVbVjbWWbWXbVjbVjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvybvybvybvybvybvybvybvybvyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbQdbWYbWZbWYbWZbWYbWZbWYbWZbWYbWZbWYbQgbXabOqbXbbTCbXcbXdbTCbXcbRZbXebVobXfbXgbXhbXibXjbVobSfbXkbVybVybVybVybVybVybVybVybVybXlbLgbLgbLgbLgbLgbLgbXmbXnbyHbXobXmbXpbXpbXpbXpbXpbXpbXpbXqbXqbXqbXqbNjbXrbXsbpJbXtbXubXvbpJaaaaaabGKbXwbXxbLEbXybXzbRbbRbbRbbRbbRbbRbbXAbXBbXBbXCbRibRibRibRibRibXDbUqbXEbRibIGbWlbWmbWnbXFbDNaaaaaabrybXGbsIbsIbXHbKrbKrbKrbKrbKrbKrbXIbXJbXKbXJbXIbKybKybKybKybKybKybTlbXLbXMbXMbXNbTlbXObXObXObXPbXQbXRbXSbXTbXUbXVbXWbsTbXXbXYbXZbYabYbbYcbYdbWQbWRbYebVebYfbVhbYgbYhbYibYjbVkbYkbYibYlbVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm
index 56d7b4b597e..ec1251924fa 100644
--- a/maps/southern_cross/southern_cross-6.dmm
+++ b/maps/southern_cross/southern_cross-6.dmm
@@ -2177,7 +2177,7 @@
"PS" = (/obj/structure/table/steel,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
"PT" = (/obj/machinery/atmospherics/unary/freezer{tag = "icon-freezer_0 (WEST)"; icon_state = "freezer_0"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
"PU" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/skipjack_station/start)
-"PV" = (/obj/structure/table/standard,/obj/item/weapon/legcuffs,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"PV" = (/obj/structure/table/standard,/obj/item/weapon/handcuffs/legcuffs,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
"PW" = (/obj/structure/table/standard,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
"PX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"PY" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor/skipjack,/area/skipjack_station/start)
diff --git a/maps/submaps/cave_submaps/cave.dm b/maps/submaps/cave_submaps/cave.dm
index cf063c85aac..d30004887f4 100644
--- a/maps/submaps/cave_submaps/cave.dm
+++ b/maps/submaps/cave_submaps/cave.dm
@@ -2,4 +2,9 @@
name = "Cave Content"
desc = "Don't dig too deep!"
-// To be added: Templates for cave exploration when they are made.
\ No newline at end of file
+// To be added: Templates for cave exploration when they are made.
+
+/datum/map_template/cave/deadBeacon
+ name = "Abandoned Relay"
+ desc = "An unregistered comms relay, abandoned to the elements."
+ mappath = 'maps/submaps/cave_submaps/deadBeacon.dmm'
\ No newline at end of file
diff --git a/maps/submaps/cave_submaps/cave_areas.dm b/maps/submaps/cave_submaps/cave_areas.dm
new file mode 100644
index 00000000000..7c80c66ec10
--- /dev/null
+++ b/maps/submaps/cave_submaps/cave_areas.dm
@@ -0,0 +1,6 @@
+/area/submap/cave
+ name = "Cave Submap Area"
+ icon_state = "submap"
+
+/area/submap/cave/deadBeacon
+ name = "abandoned relay"
\ No newline at end of file
diff --git a/maps/submaps/cave_submaps/deadBeacon.dmm b/maps/submaps/cave_submaps/deadBeacon.dmm
new file mode 100644
index 00000000000..072299ac2ef
--- /dev/null
+++ b/maps/submaps/cave_submaps/deadBeacon.dmm
@@ -0,0 +1,62 @@
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/mineral/floor,/area/submap/cave/deadBeacon)
+"c" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/mineral/floor,/area/submap/cave/deadBeacon)
+"d" = (/turf/simulated/wall/r_wall,/area/submap/cave/deadBeacon)
+"e" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"f" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"g" = (/turf/simulated/floor/plating,/area/submap/cave/deadBeacon)
+"h" = (/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/submap/cave/deadBeacon)
+"i" = (/obj/structure/grille/broken,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon)
+"j" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"k" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"l" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon)
+"m" = (/obj/structure/table/steel,/obj/item/weapon/circuitboard/comm_server,/obj/machinery/light/built{dir = 8; fitting = ""},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"n" = (/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"o" = (/obj/item/weapon/paper/crumpled{info = "Sampatti Relay Sif-833
Decryption Key for 12-04-2488:
849B0022FBA920C244
Eyes Only.
The insider who knows all the secrets can bring down Lanka."; name = "Dusty Note"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"p" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"q" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"r" = (/obj/machinery/telecomms/relay{active_power_usage = 1; broadcasting = 0; panel_open = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"s" = (/obj/machinery/telecomms/broadcaster{light_power = 0; on = 0},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"t" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"u" = (/obj/machinery/telecomms/receiver{light_power = 0; on = 0},/obj/structure/cable,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"v" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"w" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"x" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"y" = (/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"z" = (/obj/item/stack/cable_coil{amount = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"A" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/mineral/floor,/area/submap/cave/deadBeacon)
+"B" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/cave/deadBeacon)
+"C" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon)
+"D" = (/obj/item/weapon/cigbutt,/obj/item/weapon/wrench,/obj/machinery/light/built,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"E" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"F" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"G" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"H" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon)
+"I" = (/obj/machinery/access_button/airlock_interior{dir = 4},/turf/simulated/wall/r_wall,/area/submap/cave/deadBeacon)
+"J" = (/obj/structure/grille/broken,/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon)
+"K" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon)
+"L" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/r_wall,/area/submap/cave/deadBeacon)
+"M" = (/obj/structure/sign/warning/high_voltage,/turf/simulated/wall/r_wall,/area/submap/cave/deadBeacon)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaabbaaaaaaaa
+aaaaaabbabbcbaaaaaaa
+aaaaaadefgghidaaaaaa
+aaaaaahjkgglhibaaaaa
+aaaaahdmnoggggbaaaaa
+aaaabnpqnrsgqtbaaaaa
+aaaabngnnuvwnxaaaaaa
+aaaabhdgynnzkxbaaaaa
+aaaaAbBCDnnEFGbaaaaa
+aaaaaadidHHIJdbaaaaa
+aaaaaaabdgnKbbaaaaaa
+aaaaaaaaLHHMaaaaaaaa
+aaaaaaaabbbAaaaaaaaa
+aaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/polaris.dme b/polaris.dme
index ab577f91d6a..201d2276432 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -922,6 +922,7 @@
#include "code\game\objects\items\weapons\material\ashtray.dm"
#include "code\game\objects\items\weapons\material\bats.dm"
#include "code\game\objects\items\weapons\material\foam.dm"
+#include "code\game\objects\items\weapons\material\gravemarker.dm"
#include "code\game\objects\items\weapons\material\kitchen.dm"
#include "code\game\objects\items\weapons\material\knives.dm"
#include "code\game\objects\items\weapons\material\material_armor.dm"
@@ -967,6 +968,7 @@
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\ghost_pods.dm"
#include "code\game\objects\structures\girders.dm"
+#include "code\game\objects\structures\gravemarker.dm"
#include "code\game\objects\structures\grille.dm"
#include "code\game\objects\structures\inflatable.dm"
#include "code\game\objects\structures\janicart.dm"
@@ -2271,6 +2273,7 @@
#include "maps\northern_star\northern_star.dm"
#include "maps\submaps\_readme.dm"
#include "maps\submaps\cave_submaps\cave.dm"
+#include "maps\submaps\cave_submaps\cave_areas.dm"
#include "maps\submaps\space_submaps\space.dm"
#include "maps\submaps\surface_submaps\forest.dm"
#include "maps\submaps\surface_submaps\forest_areas.dm"