diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm
index 446cc74ae9b..d627e668bed 100644
--- a/code/__DEFINES/construction.dm
+++ b/code/__DEFINES/construction.dm
@@ -130,6 +130,11 @@
#define RCD_MACHINE 4
#define RCD_COMPUTER 5
#define RCD_FURNISHING 6
+#define RCD_CATWALK 7
+#define RCD_FLOODLIGHT 8
+#define RCD_WALLFRAME 9
+#define RCD_REFLECTOR 10
+
#define RCD_UPGRADE_FRAMES (1<<0)
#define RCD_UPGRADE_SIMPLE_CIRCUITS (1<<1)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index cef95421321..7a56f0242dc 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -356,12 +356,12 @@
/obj/machinery/firealarm/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
if((buildstage == 0) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS))
- return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1)
+ return list("mode" = RCD_WALLFRAME, "delay" = 20, "cost" = 1)
return FALSE
/obj/machinery/firealarm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
switch(passed_mode)
- if(RCD_UPGRADE_SIMPLE_CIRCUITS)
+ if(RCD_WALLFRAME)
user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
span_notice("You adapt a fire alarm circuit and slot it into the assembly."))
buildstage = 1
diff --git a/code/game/objects/effects/poster.dm b/code/game/objects/effects/poster.dm
index c5850a782b4..13a51477ffc 100644
--- a/code/game/objects/effects/poster.dm
+++ b/code/game/objects/effects/poster.dm
@@ -269,6 +269,7 @@
return
placed_poster.on_placed_poster(user)
+ return TRUE
/obj/structure/sign/poster/proc/snowflake_wall_turf_check(atom/hopefully_still_a_wall_turf) //since turfs never get deleted but instead change type, make sure we're still being placed on a wall.
return iswallturf(hopefully_still_a_wall_turf)
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 940ad9e07a3..e329df46daf 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -278,6 +278,7 @@ RLD
#define WINDOW_GLASS "window_glass"
#define WINDOW_SIZE "window_size"
#define COMPUTER_DIR "computer_dir"
+#define WALLFRAME_TYPE "wallframe_type"
#define FURNISH_TYPE "furnish_type"
#define FURNISH_COST "furnish_cost"
#define FURNISH_DELAY "furnish_delay"
@@ -317,6 +318,8 @@ RLD
list(CONSTRUCTION_MODE = RCD_WINDOWGRILLE, WINDOW_TYPE = /obj/structure/window/reinforced, WINDOW_GLASS = RCD_WINDOW_REINFORCED, WINDOW_SIZE = RCD_WINDOW_DIRECTIONAL, ICON = "windowtype", TITLE = "Directional Reinforced Window"),
list(CONSTRUCTION_MODE = RCD_WINDOWGRILLE, WINDOW_TYPE = /obj/structure/window/fulltile, WINDOW_GLASS = RCD_WINDOW_NORMAL, WINDOW_SIZE = RCD_WINDOW_FULLTILE, ICON = "window0", TITLE = "Full Tile Window"),
list(CONSTRUCTION_MODE = RCD_WINDOWGRILLE, WINDOW_TYPE = /obj/structure/window/reinforced/fulltile, WINDOW_GLASS = RCD_WINDOW_REINFORCED, WINDOW_SIZE = RCD_WINDOW_FULLTILE, ICON = "rwindow0", TITLE = "Full Tile Reinforced Window"),
+ list(CONSTRUCTION_MODE = RCD_CATWALK, ICON = "catwalk-0", TITLE = "Catwalk"),
+ list(CONSTRUCTION_MODE = RCD_REFLECTOR, ICON = "reflector_base", TITLE = "Reflector"),
),
//Computers & Machine Frames
@@ -326,14 +329,21 @@ RLD
list(CONSTRUCTION_MODE = RCD_COMPUTER, COMPUTER_DIR = 2, ICON = "csouth", TITLE = "Computer South"),
list(CONSTRUCTION_MODE = RCD_COMPUTER, COMPUTER_DIR = 4, ICON = "ceast", TITLE = "Computer East"),
list(CONSTRUCTION_MODE = RCD_COMPUTER, COMPUTER_DIR = 8, ICON = "cwest", TITLE = "Computer West"),
+ list(CONSTRUCTION_MODE = RCD_FLOODLIGHT, ICON = "floodlight_c1", TITLE = "FloodLight Frame"),
+ list(CONSTRUCTION_MODE = RCD_WALLFRAME, WALLFRAME_TYPE = /obj/item/wallframe/apc, ICON = "apc", TITLE = "APC WallFrame"),
+ list(CONSTRUCTION_MODE = RCD_WALLFRAME, WALLFRAME_TYPE = /obj/item/wallframe/airalarm, ICON = "alarm_bitem", TITLE = "AirAlarm WallFrame"),
+ list(CONSTRUCTION_MODE = RCD_WALLFRAME, WALLFRAME_TYPE = /obj/item/wallframe/firealarm, ICON = "fire_bitem", TITLE = "FireAlarm WallFrame"),
),
//Interior Design[construction_mode = RCD_FURNISHING is implied]
"Furniture" = list(
list(FURNISH_TYPE = /obj/structure/chair, FURNISH_COST = 8, FURNISH_DELAY = 10, ICON = "chair", TITLE = "Chair"),
list(FURNISH_TYPE = /obj/structure/chair/stool, FURNISH_COST = 8, FURNISH_DELAY = 10, ICON = "stool", TITLE = "Stool"),
+ list(FURNISH_TYPE = /obj/structure/chair/stool/bar, FURNISH_COST = 4, FURNISH_DELAY = 5, ICON = "bar", TITLE = "Bar Stool"),
list(FURNISH_TYPE = /obj/structure/table, FURNISH_COST = 16, FURNISH_DELAY = 20, ICON = "table",TITLE = "Table"),
list(FURNISH_TYPE = /obj/structure/table/glass, FURNISH_COST = 16, FURNISH_DELAY = 20, ICON = "glass_table", TITLE = "Glass Table"),
+ list(FURNISH_TYPE = /obj/structure/rack, FURNISH_COST = 20, FURNISH_DELAY = 25, ICON = "rack", TITLE = "Rack"),
+ list(FURNISH_TYPE = /obj/structure/bed, FURNISH_COST = 10, FURNISH_DELAY = 15, ICON = "bed", TITLE = "Bed"),
),
),
@@ -403,6 +413,7 @@ RLD
var/window_type = /obj/structure/window/fulltile
var/window_glass = RCD_WINDOW_NORMAL
var/window_size = RCD_WINDOW_FULLTILE
+ var/obj/item/wallframe/wallframe_type = /obj/item/wallframe/apc
var/furnish_type = /obj/structure/chair
var/furnish_cost = 8
var/furnish_delay = 10
@@ -526,27 +537,47 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
return SHAME
/obj/item/construction/rcd/proc/rcd_create(atom/A, mob/user)
+ //does this atom allow for rcd actions?
var/list/rcd_results = A.rcd_vals(user, src)
if(!rcd_results)
return FALSE
+ var/turf/target_turf = get_turf(A)
+ //start animation & check resource for the action
var/delay = rcd_results["delay"] * delay_mod
- var/obj/effect/constructing_effect/rcd_effect = new(get_turf(A), delay, src.mode)
+ var/obj/effect/constructing_effect/rcd_effect = new(target_turf, delay, src.mode)
if(!checkResource(rcd_results["cost"], user))
qdel(rcd_effect)
return FALSE
- if(rcd_results["mode"] == RCD_MACHINE || rcd_results["mode"] == RCD_COMPUTER || rcd_results["mode"] == RCD_FURNISHING)
- var/turf/target_turf = get_turf(A)
- //ignore all directional windows on the turf
- var/static/list/ignored_atoms = list(/obj/structure/window, /obj/structure/window/reinforced)
- var/list/ignored_content = list()
- for(var/atom/movable/movable_content in target_turf)
- if(is_type_in_list(movable_content, ignored_atoms))
- ignored_content += movable_content
- //check if the machine can fit on this turf
- if(target_turf.is_blocked_turf(exclude_mobs = TRUE, source_atom = null, ignore_atoms = ignored_content))
- playsound(loc, 'sound/machines/click.ogg', 50, TRUE)
- qdel(rcd_effect)
- return FALSE
+ /**
+ *For anything that does not go an a wall we have to make sure that turf is clear for us to put the structure on it
+ *If we are just trying to destory something then this check is not nessassary
+ *RCD_WALLFRAME is also returned as the mode when upgrading apc, airalarm, firealarm using simple circuits upgrade
+ */
+ if(rcd_results["mode"] != RCD_WALLFRAME && rcd_results["mode"] != RCD_DECONSTRUCT)
+ //if we are trying to build a window on top of a grill [only if there isnt already a window there] then we skip this check because thats normal behaviour
+ if(rcd_results["mode"] == RCD_WINDOWGRILLE && locate(/obj/structure/grille, target_turf) && (!locate(/obj/structure/window, target_turf) && !locate(/obj/structure/window/reinforced, target_turf)))
+ //no checks proceed
+ else
+ //structures which are small enough to fit on turfs containing directional windows.
+ var/static/list/small_structures = list(
+ RCD_MACHINE,
+ RCD_COMPUTER,
+ RCD_REFLECTOR,
+ RCD_FLOODLIGHT,
+ RCD_FURNISHING
+ )
+ //find all directional windows on the turf
+ var/list/ignored_content = list()
+ if(rcd_results["mode"] in small_structures)
+ var/static/list/ignored_atoms = list(/obj/structure/window, /obj/structure/window/reinforced)
+ for(var/atom/movable/movable_content in target_turf)
+ if(is_type_in_list(movable_content, ignored_atoms))
+ ignored_content += movable_content
+ //check if the structure can fit on this turf
+ if(target_turf.is_blocked_turf(exclude_mobs = FALSE, source_atom = null, ignore_atoms = ignored_content))
+ playsound(loc, 'sound/machines/click.ogg', 50, TRUE)
+ qdel(rcd_effect)
+ return FALSE
if(!do_after(user, delay, target = A))
qdel(rcd_effect)
return FALSE
@@ -705,6 +736,8 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
construction_mode = design[CONSTRUCTION_MODE]
if(design[COMPUTER_DIR] != null)
computer_dir = design[COMPUTER_DIR]
+ if(design[WALLFRAME_TYPE] != null)
+ wallframe_type = design[WALLFRAME_TYPE]
else if(category_name == "Furniture")
construction_mode = RCD_FURNISHING
furnish_type = design[FURNISH_TYPE]
@@ -725,17 +758,9 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
. = ..()
ui_interact(user)
-/obj/item/construction/rcd/proc/target_check(atom/A, mob/user) // only returns true for stuff the device can actually work with
- if((isturf(A) && A.density && mode == RCD_DECONSTRUCT) || (isturf(A) && !A.density) || (istype(A, /obj/machinery/door/airlock) && mode == RCD_DECONSTRUCT) || istype(A, /obj/structure/grille) || (istype(A, /obj/structure/window) && mode == RCD_DECONSTRUCT) || istype(A, /obj/structure/girder))
- return TRUE
- else
- return FALSE
-
/obj/item/construction/rcd/pre_attack(atom/A, mob/user, params)
. = ..()
mode = construction_mode
- if(!A.rcd_vals(user, src))
- return
rcd_create(A, user)
return TRUE
@@ -747,7 +772,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
rcd_create(target, user)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-
/obj/item/construction/rcd/proc/detonate_pulse()
audible_message("[src] begins to vibrate and \
buzz loudly!","[src] begins \
@@ -824,6 +848,7 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
#undef WINDOW_GLASS
#undef WINDOW_SIZE
#undef COMPUTER_DIR
+#undef WALLFRAME_TYPE
#undef FURNISH_TYPE
#undef FURNISH_COST
#undef FURNISH_DELAY
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index eb7a0d0196e..82fba11d0e2 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -59,6 +59,8 @@
/obj/structure/lattice/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
if(the_rcd.mode == RCD_FLOORWALL)
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2)
+ if(the_rcd.mode == RCD_CATWALK)
+ return list("mode" = RCD_CATWALK, "delay" = 0, "cost" = 1)
/obj/structure/lattice/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
if(passed_mode == RCD_FLOORWALL)
@@ -68,6 +70,12 @@
T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
qdel(src)
return TRUE
+ if(passed_mode == RCD_CATWALK)
+ to_chat(user, span_notice("You build a catwalk."))
+ var/turf/turf = loc
+ qdel(src)
+ new /obj/structure/lattice/catwalk(turf)
+ return TRUE
return FALSE
/obj/structure/lattice/singularity_pull(S, current_size)
@@ -101,6 +109,19 @@
C.deconstruct()
..()
+/obj/structure/lattice/catwalk/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
+ if(the_rcd.mode == RCD_DECONSTRUCT)
+ return list("mode" = RCD_DECONSTRUCT, "delay" = 10, "cost" = 5)
+ return FALSE
+
+/obj/structure/lattice/catwalk/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
+ if(passed_mode == RCD_DECONSTRUCT)
+ var/turf/turf = loc
+ for(var/obj/structure/cable/cable_coil in turf)
+ cable_coil.deconstruct()
+ qdel(src)
+ return TRUE
+
/obj/structure/lattice/catwalk/mining
name = "reinforced catwalk"
desc = "A heavily reinforced catwalk used to build bridges in hostile environments. It doesn't look like anything could make this budge."
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index c9363912add..b761591b3c4 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -222,11 +222,11 @@
var/obj/item/wallframe/F = W
if(F.try_build(src, user))
F.attach(src, user)
- return TRUE
+ return TRUE
+ return FALSE
//Poster stuff
else if(istype(W, /obj/item/poster) && Adjacent(user)) //no tk memes.
- place_poster(W,user)
- return TRUE
+ return place_poster(W,user)
return FALSE
@@ -277,10 +277,18 @@
switch(the_rcd.mode)
if(RCD_DECONSTRUCT)
return list("mode" = RCD_DECONSTRUCT, "delay" = 40, "cost" = 26)
+ if(RCD_WALLFRAME)
+ return list("mode" = RCD_WALLFRAME, "delay" = 10, "cost" = 25)
return FALSE
/turf/closed/wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
switch(passed_mode)
+ if(RCD_WALLFRAME)
+ var/obj/item/wallframe/new_wallmount = new the_rcd.wallframe_type(user.drop_location())
+ if(!try_wallmount(new_wallmount, user, src))
+ qdel(new_wallmount)
+ return FALSE
+ return TRUE
if(RCD_DECONSTRUCT)
to_chat(user, span_notice("You deconstruct the wall."))
ScrapeAway()
diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm
index 67ac43aaab6..03576ed64da 100644
--- a/code/game/turfs/open/floor.dm
+++ b/code/game/turfs/open/floor.dm
@@ -260,6 +260,8 @@
list("mode" = RCD_FLOORWALL, "delay" = 2 SECONDS, "cost" = 16),
src, RCD_MEMORY_WALL,
)
+ if(RCD_REFLECTOR)
+ return list("mode" = RCD_REFLECTOR, "delay" = 20, "cost" = 30)
if(RCD_AIRLOCK)
if(the_rcd.airlock_glass)
return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 20)
@@ -276,6 +278,8 @@
return list("mode" = RCD_MACHINE, "delay" = 20, "cost" = 25)
if(RCD_COMPUTER)
return list("mode" = RCD_COMPUTER, "delay" = 20, "cost" = 25)
+ if(RCD_FLOODLIGHT)
+ return list("mode" = RCD_FLOODLIGHT, "delay" = 30, "cost" = 35)
if(RCD_FURNISHING)
return list("mode" = RCD_FURNISHING, "delay" = the_rcd.furnish_delay, "cost" = the_rcd.furnish_cost)
return FALSE
@@ -290,6 +294,12 @@
to_chat(user, span_notice("You build a wall."))
PlaceOnTop(/turf/closed/wall)
return TRUE
+ if(RCD_REFLECTOR)
+ if(locate(/obj/structure/reflector) in src)
+ return FALSE
+ var/obj/structure/reflector/reflector_base = new(src)
+ reflector_base.set_anchored(TRUE)
+ return TRUE
if(RCD_AIRLOCK)
for(var/obj/machinery/door/door in src)
if(door.sub_door)
@@ -366,6 +376,15 @@
new_computer.state = 1
new_computer.setDir(the_rcd.computer_dir)
return TRUE
+ if(RCD_FLOODLIGHT)
+ if(locate(/obj/structure/floodlight_frame) in src)
+ return FALSE
+ var/obj/structure/floodlight_frame/new_floodlight = new(src)
+ new_floodlight.name = "secured [new_floodlight.name]"
+ new_floodlight.desc = "A bare metal frame that looks like a floodlight. Requires a light tube to complete."
+ new_floodlight.icon_state = "floodlight_c3"
+ new_floodlight.state = FLOODLIGHT_NEEDS_LIGHTS
+ return TRUE
if(RCD_FURNISHING)
if(locate(the_rcd.furnish_type) in src)
return FALSE
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index bd2f6e7e22c..28f91340186 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -196,11 +196,17 @@
switch(the_rcd.mode)
if(RCD_FLOORWALL)
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- if(L)
+ var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, src)
+ if(lattice)
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1)
else
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3)
+ if(RCD_CATWALK)
+ var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, src)
+ if(lattice)
+ return list("mode" = RCD_CATWALK, "delay" = 0, "cost" = 1)
+ else
+ return list("mode" = RCD_CATWALK, "delay" = 0, "cost" = 2)
return FALSE
/turf/open/space/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
@@ -209,6 +215,13 @@
to_chat(user, span_notice("You build a floor."))
PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
return TRUE
+ if(RCD_CATWALK)
+ to_chat(user, span_notice("You build a catwalk."))
+ var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, src)
+ if(lattice)
+ qdel(lattice)
+ new /obj/structure/lattice/catwalk(src)
+ return TRUE
return FALSE
/turf/open/space/rust_heretic_act()
diff --git a/code/modules/asset_cache/assets/rcd.dm b/code/modules/asset_cache/assets/rcd.dm
index 23e7d0e552d..fc50707866b 100644
--- a/code/modules/asset_cache/assets/rcd.dm
+++ b/code/modules/asset_cache/assets/rcd.dm
@@ -6,9 +6,15 @@
//load all category essential icon_states. format is icon_file = list of icon states we need from that file
var/list/essentials = list(
- 'icons/hud/radial.dmi' = list("wallfloor", "windowsize", "windowtype", "cnorth", "csouth", "ceast", "cwest", "chair", "stool", "windoor", "secure_windoor"),
- 'icons/obj/structures.dmi' = list("window0", "rwindow0", "table", "glass_table"),
+ 'icons/obj/chairs.dmi' = list("bar"),
+ 'icons/obj/lighting.dmi' = list("floodlight_c1"),
+ 'icons/obj/monitors.dmi' = list("alarm_bitem", "fire_bitem"),
+ 'icons/obj/wallframe.dmi' = list("apc"),
'icons/obj/stock_parts.dmi' = list("box_1"),
+ 'icons/obj/objects.dmi' = list("bed", "rack"),
+ 'icons/obj/smooth_structures/catwalk.dmi' = list("catwalk-0"),
+ 'icons/hud/radial.dmi' = list("cnorth", "csouth", "ceast", "cwest", "chair", "secure_windoor", "stool", "wallfloor", "windowsize", "windowtype", "windoor"),
+ 'icons/obj/structures.dmi' = list("glass_table", "rwindow0", "reflector_base", "table", "window0"),
)
var/icon/icon
diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm
index 15ab632aa3b..732fadc56e4 100644
--- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm
+++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm
@@ -47,12 +47,12 @@
/obj/machinery/airalarm/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
if((buildstage == AIR_ALARM_BUILD_NO_CIRCUIT) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS))
- return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1)
+ return list("mode" = RCD_WALLFRAME, "delay" = 20, "cost" = 1)
return FALSE
/obj/machinery/airalarm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
switch(passed_mode)
- if(RCD_UPGRADE_SIMPLE_CIRCUITS)
+ if(RCD_WALLFRAME)
user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
span_notice("You adapt an air alarm circuit and slot it into the assembly."))
buildstage = AIR_ALARM_BUILD_NO_WIRES
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index cc2c138f656..c6f045f5f83 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -120,24 +120,16 @@
fire = 90
acid = 50
-/obj/machinery/power/apc/New(turf/loc, ndir, building=0)
+/obj/machinery/power/apc/Initialize(mapload, ndir)
+ . = ..()
+ //Initialize name & access of the apc
if(!req_access)
req_access = list(ACCESS_ENGINE_EQUIP)
- ..()
- GLOB.apcs_list += src
-
- wires = new /datum/wires/apc(src)
-
- if(building)
- area = get_area(src)
- opened = APC_COVER_OPENED
- operating = FALSE
+ if(auto_name)
name = "\improper [get_area_name(area, TRUE)] APC"
- set_machine_stat(machine_stat | MAINT)
- update_appearance()
- addtimer(CALLBACK(src, PROC_REF(update)), 5)
- dir = ndir
+ //Pixel offset its appearance based on its direction
+ dir = ndir
switch(dir)
if(NORTH)
offset_old = pixel_y
@@ -152,22 +144,8 @@
offset_old = pixel_x
pixel_x = -APC_PIXEL_OFFSET
-/obj/machinery/power/apc/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/atmos_sensitive, mapload)
- alarm_manager = new(src)
-
- if(!mapload)
- return
- has_electronics = APC_ELECTRONICS_SECURED
- // is starting with a power cell installed, create it and set its charge level
- if(cell_type)
- cell = new cell_type(src)
- cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value)
-
+ //Assign it to its area. If mappers already assigned an area string fast load the area from it else get the current area
var/area/our_area = get_area(loc)
-
- //if area isn't specified use current
if(areastring)
area = get_area_instance_from_text(areastring)
if(!area)
@@ -175,28 +153,39 @@
stack_trace("Bad areastring path for [src], [areastring]")
else if(isarea(our_area) && areastring == null)
area = our_area
-
- if(auto_name)
- name = "\improper [get_area_name(area, TRUE)] APC"
-
if(area)
if(area.apc)
log_mapping("Duplicate APC created at [AREACOORD(src)] [area.type]. Original at [AREACOORD(area.apc)] [area.type].")
area.apc = src
+ //Initialize its electronics
+ wires = new /datum/wires/apc(src)
+ alarm_manager = new(src)
+ AddElement(/datum/element/atmos_sensitive, mapload)
+ // for apcs created during map load make them fully functional
+ if(mapload)
+ has_electronics = APC_ELECTRONICS_SECURED
+ // is starting with a power cell installed, create it and set its charge level
+ if(cell_type)
+ cell = new cell_type(src)
+ cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value)
+ make_terminal()
+ ///This is how we test to ensure that mappers use the directional subtypes of APCs, rather than use the parent and pixel-shift it themselves.
+ if(abs(offset_old) != APC_PIXEL_OFFSET)
+ log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([dir] | [uppertext(dir2text(dir))]) has pixel_[dir & (WEST|EAST) ? "x" : "y"] value [offset_old] - should be [dir & (SOUTH|EAST) ? "-" : ""][APC_PIXEL_OFFSET]. Use the directional/ helpers!")
+ // For apcs created during the round players need to configure them from scratch
+ else
+ opened = APC_COVER_OPENED
+ operating = FALSE
+ set_machine_stat(machine_stat | MAINT)
+
+ //Make the apc visually interactive
+ register_context()
+ addtimer(CALLBACK(src, PROC_REF(update)), 5)
+ RegisterSignal(SSdcs, COMSIG_GLOB_GREY_TIDE, PROC_REF(grey_tide))
update_appearance()
- make_terminal()
-
- addtimer(CALLBACK(src, PROC_REF(update)), 5)
-
- register_context()
-
- ///This is how we test to ensure that mappers use the directional subtypes of APCs, rather than use the parent and pixel-shift it themselves.
- if(abs(offset_old) != APC_PIXEL_OFFSET)
- log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([dir] | [uppertext(dir2text(dir))]) has pixel_[dir & (WEST|EAST) ? "x" : "y"] value [offset_old] - should be [dir & (SOUTH|EAST) ? "-" : ""][APC_PIXEL_OFFSET]. Use the directional/ helpers!")
-
- RegisterSignal(SSdcs, COMSIG_GLOB_GREY_TIDE, PROC_REF(grey_tide))
+ GLOB.apcs_list += src
/obj/machinery/power/apc/Destroy()
GLOB.apcs_list -= src
diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm
index 0f918b8e9f2..0c1cf6652a2 100644
--- a/code/modules/power/apc/apc_tool_act.dm
+++ b/code/modules/power/apc/apc_tool_act.dm
@@ -129,20 +129,21 @@
if(machine_stat & BROKEN)
balloon_alert(user, "frame is too damaged!")
return FALSE
- return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1)
+ return list("mode" = RCD_WALLFRAME, "delay" = 20, "cost" = 1)
if(!cell)
if(machine_stat & MAINT)
balloon_alert(user, "no board for a cell!")
return FALSE
- return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 50, "cost" = 10) //16 for a wall
+ return list("mode" = RCD_WALLFRAME, "delay" = 50, "cost" = 10)
balloon_alert(user, "has both board and cell!")
return FALSE
/obj/machinery/power/apc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
- if(!(passed_mode & RCD_UPGRADE_SIMPLE_CIRCUITS))
+ if(!(the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS) || passed_mode != RCD_WALLFRAME)
return FALSE
+
if(!has_electronics)
if(machine_stat & BROKEN)
balloon_alert(user, "frame is too damaged!")
diff --git a/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx b/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx
index 3a03463980d..37400b62287 100644
--- a/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx
+++ b/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx
@@ -133,7 +133,9 @@ const DesignSection = (props, context) => {
className={classes(['rcd-tgui32x32', design.icon])}
style={{
transform:
- design.icon === 'window0' || design.icon === 'rwindow0'
+ design.icon === 'window0' ||
+ design.icon === 'rwindow0' ||
+ design.icon === 'catwalk0'
? 'scale(0.7)'
: 'scale(1.0)',
}}