diff --git a/aurorastation.dme b/aurorastation.dme
index 82f6b3ebbe6..25e6325166e 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -1407,6 +1407,7 @@
#include "code\game\objects\structures\displaycase.dm"
#include "code\game\objects\structures\door_assembly.dm"
#include "code\game\objects\structures\ECD.dm"
+#include "code\game\objects\structures\engicart.dm"
#include "code\game\objects\structures\extinguisher.dm"
#include "code\game\objects\structures\fireaxe_cabinet.dm"
#include "code\game\objects\structures\flags_banners.dm"
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 4a0925f3091..cd0805f2661 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -194,7 +194,7 @@
else
do_animate("deny")
return
- if(istype(bumped_atom, /obj/structure/janitorialcart))
+ if(istype(bumped_atom, /obj/structure/janitorialcart) || istype(bumped_atom, /obj/structure/engineeringcart))
var/obj/structure/janitorialcart/cart = bumped_atom
if(density)
if(cart.pulling && (src.allowed(cart.pulling)))
diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm
new file mode 100644
index 00000000000..70b76778cc1
--- /dev/null
+++ b/code/game/objects/structures/engicart.dm
@@ -0,0 +1,445 @@
+/obj/structure/engineeringcart
+ name = "engineering cart"
+ desc = "A cart for your engineering-related storage needs."
+ icon = 'icons/obj/engicart.dmi'
+ icon_state = "cart"
+ anchored = FALSE
+ density = TRUE
+ climbable = TRUE
+ build_amt = 15
+ material = DEFAULT_TABLE_REINF_MATERIAL
+ slowdown = 0
+ var/has_items = FALSE
+
+ var/list/my_glass = list()
+ var/list/my_metal = list()
+ var/list/my_plasteel = list()
+ /// Used for displaying and handling radial menu. Collective list of every single item this object contains.
+ var/list/storage_contents = list()
+ var/obj/item/device/lightreplacer/my_lightreplacer = null
+ var/obj/item/storage/toolbox/mechanical/my_blue_toolbox = null
+ var/obj/item/storage/toolbox/electrical/my_yellow_toolbox = null
+ var/obj/item/storage/toolbox/emergency/my_red_toolbox = null
+ var/driving
+ var/mob/living/pulling
+ /// Amount of stacks the cart is capable to store.
+ var/stack_capacity = 2
+
+ var/static/list/allowed_types = typecacheof(list(
+ /obj/item/stack/material/glass,
+ /obj/item/stack/material/steel,
+ /obj/item/stack/material/plasteel,
+ /obj/item/device/lightreplacer,
+ /obj/item/storage/toolbox/mechanical,
+ /obj/item/storage/toolbox/electrical,
+ /obj/item/storage/toolbox/emergency
+ ))
+
+/obj/structure/engineeringcart/mechanics_hints(mob/user, distance, is_adjacent)
+ . += ..()
+ . += "You can use steel, plasteel, glass sheets, toolboxes and light replacers on the cart to store them."
+ . += "\
+ You can CTRL-Click to start dragging this cart. This object has a special dragging behaviour: when dragged, character's movement \
+ directs the cart and the character is subsequently pulled by it. \
+ "
+
+/obj/structure/engineeringcart/disassembly_hints(mob/user, distance, is_adjacent)
+ . += ..()
+ . += "An empty engineering cart can be taken apart with a wrench or a welder. Or a plasma cutter, if you're that hardcore."
+
+/obj/structure/engineeringcart/feedback_hints(mob/user, distance, is_adjacent)
+ . += ..()
+ if(distance <= 1)
+ if(locate(/obj/item/stack/material) in storage_contents)
+ var/metal_amount
+ var/plasteel_amount
+ var/glass_amount
+ var/obj/item/stack/material/steel/S
+ var/obj/item/stack/material/plasteel/P
+ var/obj/item/stack/material/glass/G
+ if(LAZYLEN(my_metal))
+ for(var/I in my_metal) // we already handle the type-check in `atttackby()` so it's safe to assume the lists contain what they're intended to
+ S = I
+ metal_amount += S.amount
+ . += "[icon2html(S, user)] This cart contains [metal_amount] sheet\s of steel!"
+ if(LAZYLEN(my_plasteel))
+ for(var/I in my_plasteel)
+ P = I
+ plasteel_amount += P.amount
+ . += "[icon2html(P, user)] This cart contains [plasteel_amount] sheet\s of plasteel!"
+ if(LAZYLEN(my_glass))
+ for(var/I in my_glass)
+ G = I
+ glass_amount += G.amount
+ . += "[icon2html(G, user)] This cart contains [glass_amount] sheet\s of glass!"
+ else
+ . += "[icon2html(src, user)] There is no material in this cart!"
+
+/obj/structure/engineeringcart/proc/get_storage_contents_list()
+ storage_contents.Cut()
+ var/list/lists_to_check = list(
+ my_glass, my_metal, my_plasteel
+ )
+ for(var/list/list_to_check in lists_to_check)
+ if(list_to_check?.len) //null check
+ storage_contents += list_to_check
+
+ var/list/non_sheet_objects = list(my_lightreplacer, my_blue_toolbox, my_yellow_toolbox, my_red_toolbox)
+
+ for(var/obj/O in non_sheet_objects)
+ if(O)
+ storage_contents += O
+
+/obj/structure/engineeringcart/Destroy()
+ QDEL_NULL(my_glass)
+ QDEL_NULL(my_metal)
+ QDEL_NULL(my_plasteel)
+ QDEL_NULL(my_lightreplacer)
+ QDEL_NULL(my_blue_toolbox)
+ QDEL_NULL(my_yellow_toolbox)
+ QDEL_NULL(my_red_toolbox)
+ return ..()
+
+/obj/structure/engineeringcart/attackby(obj/item/attacking_item, mob/user)
+ if(is_type_in_typecache(attacking_item, allowed_types))
+ var/should_store = FALSE
+ var/storage_is_full = FALSE
+ if(istype(attacking_item, /obj/item/stack/material)) //---- stack materials
+ switch(attacking_item.type)
+ if(/obj/item/stack/material/glass, /obj/item/stack/material/glass/full)
+ if(my_glass.len < stack_capacity)
+ my_glass += attacking_item
+ should_store = TRUE
+ else
+ storage_is_full = TRUE
+
+ if(/obj/item/stack/material/steel, /obj/item/stack/material/steel/full)
+ if(my_metal.len < stack_capacity)
+ my_metal += attacking_item
+ should_store = TRUE
+ else
+ storage_is_full = TRUE
+
+ if(/obj/item/stack/material/plasteel, /obj/item/stack/material/plasteel/full)
+ if(my_plasteel.len < stack_capacity)
+ my_plasteel += attacking_item
+ should_store = TRUE
+ else
+ storage_is_full = TRUE
+
+ handle_storing(attacking_item, user, should_store, storage_is_full)
+ return TRUE
+
+ if(istype(attacking_item, /obj/item/storage/toolbox)) //---- toolboxes
+ switch(attacking_item.type)
+ if(/obj/item/storage/toolbox/mechanical)
+ if(!my_blue_toolbox)
+ my_blue_toolbox = attacking_item
+ should_store = TRUE
+ else
+ storage_is_full = TRUE
+
+ if(/obj/item/storage/toolbox/electrical)
+ if(!my_yellow_toolbox)
+ my_yellow_toolbox = attacking_item
+ should_store = TRUE
+ else
+ storage_is_full = TRUE
+
+ if(/obj/item/storage/toolbox/emergency)
+ if(!my_red_toolbox)
+ my_red_toolbox = attacking_item
+ should_store = TRUE
+ else
+ storage_is_full = TRUE
+
+ handle_storing(attacking_item, user, should_store, storage_is_full)
+ return TRUE
+
+ if(istype(attacking_item, /obj/item/device/lightreplacer)) //---- light replacer
+ if(!my_lightreplacer)
+ my_lightreplacer = attacking_item
+ should_store = TRUE
+ else
+ storage_is_full = TRUE
+
+ handle_storing(attacking_item, user, should_store, storage_is_full)
+ return TRUE
+
+ else if (!has_items && (attacking_item.iswrench() || attacking_item.iswelder() || istype(attacking_item, /obj/item/gun/energy/plasmacutter)))
+ take_apart(user, attacking_item)
+ return
+ ..()
+
+// copied from janicart code
+/obj/structure/engineeringcart/proc/take_apart(var/mob/user = null, var/obj/I)
+ if(has_items)
+ spill()
+
+ if(user)
+
+ if(iswelder(I))
+ var/obj/item/welder = I
+ welder.play_tool_sound(get_turf(src), 50)
+
+ user.visible_message("[user] starts taking apart the [src]...", SPAN_NOTICE("You start disassembling the [src]..."))
+ if (!do_after(user, 30, do_flags = DO_DEFAULT & ~DO_USER_SAME_HAND))
+ return
+
+ dismantle()
+
+/obj/structure/engineeringcart/ex_act(severity)
+ spill(100 / severity)
+ ..()
+
+/obj/structure/engineeringcart/proc/spill(var/chance = 100)
+ var/turf/dropspot = get_turf(src)
+ if(LAZYLEN(my_glass) && prob(chance))
+ var/obj/item/stack/material/glass/G
+ for(var/I in my_glass)
+ G = I
+ G.forceMove(dropspot)
+ G.tumble(1)
+ my_glass -= G
+ my_glass.Cut()
+
+ if(LAZYLEN(my_metal) && prob(chance))
+ var/obj/item/stack/material/glass/M
+ for(var/I in my_metal)
+ M = I
+ M.forceMove(dropspot)
+ M.tumble(1)
+ my_metal -= M
+ my_metal.Cut()
+
+ if(LAZYLEN(my_plasteel) && prob(chance))
+ var/obj/item/stack/material/glass/P
+ for(var/I in my_plasteel)
+ P = I
+ P.forceMove(dropspot)
+ P.tumble(1)
+ my_plasteel -= P
+ my_plasteel.Cut()
+
+ if(my_lightreplacer && prob(chance))
+ my_lightreplacer.forceMove(dropspot)
+ my_lightreplacer.tumble(2)
+ my_lightreplacer = null
+
+ if(my_blue_toolbox && prob(chance))
+ my_blue_toolbox.forceMove(dropspot)
+ my_blue_toolbox.tumble(2)
+ my_blue_toolbox = null
+
+ if(my_yellow_toolbox && prob(chance))
+ my_yellow_toolbox.forceMove(dropspot)
+ my_yellow_toolbox.tumble(2)
+ my_yellow_toolbox = null
+
+ if(my_red_toolbox && prob(chance))
+ my_red_toolbox.forceMove(dropspot)
+ my_red_toolbox.tumble(2)
+ my_red_toolbox = null
+
+ update_icon()
+
+/obj/structure/engineeringcart/proc/handle_storing(var/attacking_item, var/mob/user, var/should_store, var/storage_is_full)
+ if(should_store)
+ user.drop_from_inventory(attacking_item, src)
+ get_storage_contents_list()
+ update_icon()
+ to_chat(user, SPAN_NOTICE("You put [attacking_item] into [src]."))
+ else if(storage_is_full)
+ to_chat(user, SPAN_WARNING("There isn't any space to store [attacking_item] in [src]!"))
+ else
+ to_chat(user, SPAN_WARNING("You can't store this here!"))
+
+/obj/structure/engineeringcart/attack_hand(mob/user)
+ if(!isliving(user))
+ return
+
+ if(LAZYLEN(storage_contents))
+ for(var/obj/O in storage_contents)
+ storage_contents[O] = image(O.icon, O.icon_state)
+
+ var/obj/item/chosen_item = show_radial_menu(user, src, storage_contents, require_near = TRUE, tooltips = TRUE)
+
+ if(isnull(chosen_item))
+ return
+ if(chosen_item in storage_contents)
+ switch(chosen_item.type)
+ if(/obj/item/stack/material/glass, /obj/item/stack/material/glass/full)
+ if(my_glass.len)
+ user.put_in_hands(chosen_item)
+ to_chat(user, SPAN_NOTICE("You take [my_glass[chosen_item]] from [src]."))
+ my_glass -= chosen_item
+ if(/obj/item/stack/material/steel, /obj/item/stack/material/steel/full)
+ if(my_metal.len)
+ user.put_in_hands(chosen_item)
+ to_chat(user, SPAN_NOTICE("You take [my_metal[chosen_item]] from [src]."))
+ my_metal -= chosen_item
+ if(/obj/item/stack/material/plasteel, /obj/item/stack/material/plasteel/full)
+ if(my_plasteel.len)
+ user.put_in_hands(chosen_item)
+ to_chat(user, SPAN_NOTICE("You take [my_plasteel[chosen_item]] from [src]."))
+ my_plasteel -= chosen_item
+ if(/obj/item/device/lightreplacer)
+ if(my_lightreplacer)
+ user.put_in_hands(my_lightreplacer)
+ to_chat(user, SPAN_NOTICE("You take [my_lightreplacer] from [src]."))
+ my_lightreplacer = null
+ if(/obj/item/storage/toolbox/mechanical)
+ if(my_blue_toolbox)
+ user.put_in_hands(my_blue_toolbox)
+ to_chat(user, SPAN_NOTICE("You take [my_blue_toolbox] from [src]."))
+ my_blue_toolbox = null
+ if(/obj/item/storage/toolbox/electrical)
+ if(my_yellow_toolbox)
+ user.put_in_hands(my_yellow_toolbox)
+ to_chat(user, SPAN_NOTICE("You take [my_yellow_toolbox] from [src]."))
+ my_yellow_toolbox = null
+ if(/obj/item/storage/toolbox/emergency)
+ if(my_red_toolbox)
+ user.put_in_hands(my_red_toolbox)
+ to_chat(user, SPAN_NOTICE("You take [my_red_toolbox] from [src]."))
+ my_red_toolbox = null
+
+ get_storage_contents_list()
+ update_icon()
+ else
+ to_chat(user, SPAN_WARNING("\The [chosen_item] is not in the cart anymore!"))
+
+/obj/structure/engineeringcart/update_icon()
+ ClearOverlays()
+ has_items = FALSE
+ if(my_plasteel.len)
+ AddOverlays("cart_plasteel")
+ has_items = TRUE
+ if(my_metal.len)
+ AddOverlays("cart_metal")
+ has_items = TRUE
+ if(my_glass.len)
+ AddOverlays("cart_glass")
+ has_items = TRUE
+ if(my_lightreplacer)
+ AddOverlays("cart_flashlight")
+ has_items = TRUE
+ if(my_blue_toolbox)
+ AddOverlays("cart_bluetoolbox")
+ has_items = TRUE
+ if(my_yellow_toolbox)
+ AddOverlays("cart_yellowtoolbox")
+ has_items = TRUE
+ if(my_red_toolbox)
+ AddOverlays("cart_redtoolbox")
+ has_items = TRUE
+
+
+/// For future reference, this kind of pulling functions are dependant on a type-check in `mob_movement.dm` line:332
+/obj/structure/engineeringcart/relaymove(mob/living/user, direction)
+ . = ..()
+
+ if(user.stat || user.stunned || user.weakened || user.paralysis || user.lying || user.restrained())
+ if(user==pulling)
+ pulling = null
+ user.pulledby = null
+ to_chat(user, SPAN_WARNING("You lost your grip!"))
+ return
+ if(user.pulling && (user == pulling))
+ pulling = null
+ user.pulledby = null
+ return
+ if(pulling && (get_dist(src, pulling) > 1))
+ pulling = null
+ user.pulledby = null
+ if(user==pulling)
+ return
+ if(pulling && (get_dir(src.loc, pulling.loc) == direction))
+ to_chat(user, SPAN_WARNING("You cannot go there."))
+ return
+
+ driving = 1
+ var/turf/T = null
+ if(pulling)
+ T = pulling.loc
+ if(get_dist(src, pulling) >= 1)
+ step(pulling, get_dir(pulling.loc, src.loc))
+ step(src, direction)
+ set_dir(direction)
+ if(pulling)
+ if(pulling.loc == src.loc)
+ pulling.forceMove(T)
+ else
+ spawn(0)
+ if(get_dist(src, pulling) > 1)
+ pulling = null
+ user.pulledby = null
+ pulling.set_dir(get_dir(pulling, src))
+ driving = 0
+
+/obj/structure/engineeringcart/Move()
+ . = ..()
+ if (pulling && (get_dist(src, pulling) > 1))
+ pulling.pulledby = null
+ to_chat(pulling, SPAN_WARNING("You lost your grip!"))
+ pulling = null
+ if(has_gravity())
+ playsound(src, 'sound/effects/roll.ogg', 50, 1)
+
+/obj/structure/engineeringcart/CtrlClick(var/mob/user)
+ if(in_range(src, user))
+ if(!ishuman(user)) return
+ if(!pulling)
+ pulling = user
+ user.pulledby = src
+ if(user.pulling)
+ user.stop_pulling()
+ user.set_dir(get_dir(user, src))
+ to_chat(user, "You grip \the [name]'s handles.")
+ else
+ to_chat(usr, "You let go of \the [name]'s handles.")
+ pulling.pulledby = null
+ pulling = null
+ return
+
+/obj/structure/engineeringcart/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if(air_group || (height==0))
+ return TRUE
+ if(mover?.movement_type & PHASING)
+ return TRUE
+ if(istype(mover) && mover.pass_flags & PASSTABLE)
+ return TRUE
+ if(istype(mover, /mob/living) && mover == pulling)
+ return TRUE
+ else
+ if(istype(mover, /obj/projectile))
+ return prob(30)
+ else
+ return !density
+
+/obj/structure/engineeringcart/half_filled
+
+/obj/structure/engineeringcart/half_filled/Initialize()
+ . = ..()
+ my_blue_toolbox = new /obj/item/storage/toolbox/mechanical(src)
+ my_yellow_toolbox = new /obj/item/storage/toolbox/electrical(src)
+ my_red_toolbox = new /obj/item/storage/toolbox/emergency(src)
+ get_storage_contents_list()
+ update_icon()
+
+/obj/structure/engineeringcart/full
+
+/obj/structure/engineeringcart/full/Initialize()
+ . = ..()
+ my_lightreplacer = new /obj/item/device/lightreplacer(src)
+ my_blue_toolbox = new /obj/item/storage/toolbox/mechanical(src)
+ my_yellow_toolbox = new /obj/item/storage/toolbox/electrical(src)
+ my_red_toolbox = new /obj/item/storage/toolbox/emergency(src)
+ my_glass += new /obj/item/stack/material/glass/full(src)
+ my_glass += new /obj/item/stack/material/glass/full(src)
+ my_metal += new /obj/item/stack/material/steel/full(src)
+ my_metal += new /obj/item/stack/material/steel/full(src)
+ my_plasteel += new /obj/item/stack/material/plasteel/full(src)
+ my_plasteel += new /obj/item/stack/material/plasteel/full(src)
+ get_storage_contents_list()
+ update_icon()
diff --git a/code/modules/cargo/items/engineering.dm b/code/modules/cargo/items/engineering.dm
index 11d721efa1f..793d8ff94b2 100644
--- a/code/modules/cargo/items/engineering.dm
+++ b/code/modules/cargo/items/engineering.dm
@@ -895,3 +895,17 @@
container_type = "crate"
groupable = FALSE
spawn_amount = 1
+
+/singleton/cargo_item/engineeringcart
+ category = "engineering"
+ name = "engineering cart"
+ supplier = "hephaestus"
+ description = "A cart for your engineering-related storage needs."
+ price = 100
+ items = list(
+ /obj/structure/engineeringcart
+ )
+ access = ACCESS_ENGINE
+ container_type = "crate"
+ groupable = TRUE
+ spawn_amount = 1
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index a6abafdb868..26c452f42f3 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -72,6 +72,7 @@
list(
new /datum/stack_recipe("key", /obj/item/key, 1, time = 10, one_per_turf = 0, on_floor = 1),
new /datum/stack_recipe("custodial cart", /obj/structure/janitorialcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1),
+ new /datum/stack_recipe("engineering cart", /obj/structure/engineeringcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("steel closet", /obj/structure/closet, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("target stake", /obj/structure/target_stake, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1),
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 3756eb4f261..59fb6e6773c 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -329,7 +329,7 @@
//Wheelchair pushing goes here for now.
//TODO: Fuck wheelchairs.
- if(istype(mob.pulledby, /obj/structure/bed/stool/chair/office/wheelchair) || istype(mob.pulledby, /obj/structure/janitorialcart))
+ if(istype(mob.pulledby, /obj/structure/bed/stool/chair/office/wheelchair) || istype(mob.pulledby, /obj/structure/janitorialcart) || istype(mob.pulledby, /obj/structure/engineeringcart))
var/obj/structure/S = mob.pulledby
move_delay += S.slowdown
return mob.pulledby.relaymove(mob, direct)
diff --git a/html/changelogs/kano-dot-engineering-cartening.yml b/html/changelogs/kano-dot-engineering-cartening.yml
new file mode 100644
index 00000000000..f41b77050f0
--- /dev/null
+++ b/html/changelogs/kano-dot-engineering-cartening.yml
@@ -0,0 +1,6 @@
+author: Kano
+
+delete-after: True
+
+changes:
+ - rscadd: "Added an engineering cart. Its sprites are ported from Paradise Station."
diff --git a/icons/obj/engicart.dmi b/icons/obj/engicart.dmi
new file mode 100644
index 00000000000..a73dbf5923d
Binary files /dev/null and b/icons/obj/engicart.dmi differ
diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm
index 94c35d12a87..76de371a331 100644
--- a/maps/sccv_horizon/sccv_horizon.dmm
+++ b/maps/sccv_horizon/sccv_horizon.dmm
@@ -29291,6 +29291,10 @@
/obj/item/stack/material/plastic/full,
/obj/item/stack/material/wood/full,
/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/camera/network/engineering{
+ c_tag = "Engineering - Equipment Storage";
+ dir = 8
+ },
/turf/simulated/floor/tiled,
/area/horizon/engineering/storage_eva)
"edk" = (
@@ -48586,6 +48590,9 @@
icon_state = "0-4"
},
/obj/machinery/power/apc/north,
+/obj/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/fore)
"gRg" = (
@@ -57892,7 +57899,6 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/machinery/light,
/obj/effect/floor_decal/corner/yellow{
dir = 10
},
@@ -109962,9 +109968,6 @@
/obj/effect/floor_decal/spline/plain,
/obj/structure/table/reinforced/steel,
/obj/item/storage/toolbox/electrical{
- pixel_y = 8
- },
-/obj/item/storage/toolbox/mechanical{
pixel_y = 1
},
/turf/simulated/floor/carpet/rubber,
@@ -146493,9 +146496,6 @@
/obj/item/storage/toolbox/electrical{
pixel_y = 4
},
-/obj/item/storage/toolbox/electrical{
- pixel_y = -1
- },
/obj/item/device/multitool{
pixel_x = -4
},
@@ -155812,15 +155812,13 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/shuttle/mining)
"wgu" = (
-/obj/random/pottedplant,
-/obj/effect/floor_decal/corner/dark_green/full{
- dir = 8
+/obj/machinery/light,
+/obj/effect/floor_decal/industrial/outline/engineering,
+/obj/structure/engineeringcart/half_filled{
+ dir = 4
},
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/horizon/engineering/hallway/fore)
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/engineering/storage_eva)
"wgy" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
@@ -168520,10 +168518,6 @@
},
/area/centcom/holding)
"xUV" = (
-/obj/machinery/camera/network/engineering{
- c_tag = "Engineering - Equipment Storage";
- dir = 8
- },
/obj/effect/floor_decal/corner/yellow/full{
dir = 4
},
@@ -264830,7 +264824,7 @@ hBD
cFv
wPF
iii
-tcG
+wgu
wVZ
wVZ
nWO
@@ -265088,7 +265082,7 @@ ede
gIA
xGY
tcG
-wgu
+wVZ
oPY
ipB
xlm