diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index c0ef428f998..b1acebc182a 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -11,13 +11,6 @@
interact_offline = 1
circuit = /obj/item/weapon/circuitboard/sleeper_console
-//obj/machinery/sleep_console/New()
- //..()
- //spawn( 5 )
- //src.connected = locate(/obj/machinery/sleeper, get_step(src, WEST)) //We assume dir = 8 so sleeper is WEST. Other sprites do exist.
- //return
- //return
-
/obj/machinery/sleep_console/New()
..()
spawn(5)
@@ -37,32 +30,8 @@
connected.ui_interact(user)
/obj/machinery/sleep_console/attackby(var/obj/item/I, var/mob/user)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- user << "You start disconnecting the monitor."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.circuit = M
- A.anchored = 1
- A.density = 1
- A.frame_type = M.board_type
- for (var/obj/C in src)
- C.forceMove(loc)
- if (src.stat & BROKEN)
- user << "The broken glass falls out."
- new /obj/item/weapon/material/shard( src.loc )
- A.state = 3
- A.icon_state = "[A.frame_type]_3"
- else
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "[A.frame_type]_4"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.dir = dir
- M.deconstruct(src)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
+ return
else
src.attack_hand(user)
return
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 43ca9d2fc3f..454796d509b 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -25,8 +25,6 @@
if(C)
C.connected = src
-/obj/machinery/bodyscanner/map/New()
- ..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
@@ -188,32 +186,8 @@
findscanner()
/obj/machinery/body_scanconsole/attackby(var/obj/item/I, var/mob/user)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- user << "You start disconnecting the monitor."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.circuit = M
- A.anchored = 1
- A.density = 1
- A.frame_type = M.board_type
- for (var/obj/C in src)
- C.forceMove(loc)
- if (src.stat & BROKEN)
- user << "The broken glass falls out."
- new /obj/item/weapon/material/shard( src.loc )
- A.state = 3
- A.icon_state = "[A.frame_type]_3"
- else
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "[A.frame_type]_4"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.dir = dir
- M.deconstruct(src)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
+ return
else
src.attack_hand(user)
return
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 699898fde07..ce2dc22a4f5 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -745,31 +745,10 @@
/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob)
src.add_fingerprint(user)
- if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up.
- //user << "You pop the Air Alarm's maintence panel open."
- wiresexposed = !wiresexposed
- user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
- update_icon()
- return
- if (wiresexposed && istype(W, /obj/item/weapon/wirecutters))
- user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].")
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
- new/obj/item/stack/cable_coil(get_turf(src), 5)
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "airalarm"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.set_dir(dir)
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- A.state = 2
- A.icon_state = "airalarm_2"
- M.deconstruct(src)
- qdel(src)
+ if(alarm_deconstruction_screwdriver(user, W, wiresexposed))
+ return
+ if(alarm_deconstruction_wirecutters(user, W, wiresexposed))
return
if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
@@ -824,7 +803,7 @@ FIRE ALARM
var/last_process = 0
var/wiresexposed = 0
var/seclevel
- circuit = /obj/item/weapon/circuitboard/firealarm
+ circuit = /obj/item/weapon/circuitboard/firealarm
/obj/machinery/firealarm/update_icon()
overlays.Cut()
@@ -873,9 +852,9 @@ FIRE ALARM
/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob)
src.add_fingerprint(user)
- if (istype(W, /obj/item/weapon/screwdriver))
- wiresexposed = !wiresexposed
- update_icon()
+ if(alarm_deconstruction_screwdriver(user, W, wiresexposed))
+ return
+ if(alarm_deconstruction_wirecutters(user, W, wiresexposed))
return
if(wiresexposed)
@@ -885,24 +864,6 @@ FIRE ALARM
user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.")
else
user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.")
- else if (istype(W, /obj/item/weapon/wirecutters))
- user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].")
- new/obj/item/stack/cable_coil(get_turf(src), 5)
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "firealarm"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.set_dir(dir)
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- A.state = 2
- A.icon_state = "firealarm_2"
- M.deconstruct(src)
- qdel(src)
return
src.alarm()
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 6f380739cc4..801aca262b6 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -7,7 +7,6 @@
use_power = 1
idle_power_usage = 300
active_power_usage = 300
- frame_type = "computer"
var/processing = 0
var/icon_keyboard = "generic_key"
@@ -97,37 +96,8 @@
return text
/obj/machinery/computer/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- user << "You start disconnecting the monitor."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.circuit = M
- A.anchored = 1
- A.density = 1
- A.frame_type = M.board_type
- for (var/obj/C in src)
- C.forceMove(loc)
- if (src.stat & BROKEN)
- user << "The broken glass falls out."
- new /obj/item/weapon/material/shard( src.loc )
- A.state = 3
- A.icon_state = "[A.frame_type]_3"
- else
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "[A.frame_type]_4"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- M.deconstruct(src)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
+ return
else
src.attack_hand(user)
- return
-
-
-
-
-
-
+ return
\ No newline at end of file
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index b3f97657464..333c12cd441 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -65,25 +65,6 @@
/obj/machinery/computer/guestpass/attackby(obj/I, mob/user)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- user << "You start disconnecting the monitor."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "guestpass"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "guestpass_4"
- M.deconstruct(src)
- qdel(src)
- return
if(istype(I, /obj/item/weapon/card/id))
if(!giver && user.unEquip(I))
I.forceMove(src)
diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm
index 1dddcedea0b..4faf8480e21 100644
--- a/code/game/machinery/frame.dm
+++ b/code/game/machinery/frame.dm
@@ -6,20 +6,16 @@
var/state = 0
var/obj/item/weapon/circuitboard/circuit = null
var/need_circuit = 1
- var/frame_type = "machine"
+ var/datum/frame/frame_types/frame_type = new /datum/frame/frame_types/machine
var/list/components = null
var/list/req_components = null
var/list/req_component_names = null
- var/list/alarms = list("firealarm", "airalarm", "intercom", "keycard")
- var/list/machines = list(
- "machine", "photocopier", "fax", "microwave", "conveyor", "recharger", "wrecharger",
- "washing", "grinder", "teleporter_hub", "teleporter_station", "medpod", "dna_analyzer",
- "massdriver")
- var/list/computers = list("computer", "holopad", "console")
- var/list/displays = list("display", "guestpass", "newscaster", "atm", "request")
- var/list/no_circuit = list("wrecharger", "recharger", "grinder", "conveyor", "massdriver")
+/obj/structure/frame/computer //used for maps
+ frame_type = new /datum/frame/frame_types/computer
+ anchored = 1
+ density = 1
/obj/structure/frame/proc/update_desc()
var/D
@@ -31,6 +27,12 @@
D = "Requires [english_list(component_list)]."
desc = D
+/obj/structure/frame/update_icon()
+ ..()
+ var/type = lowertext(frame_type.name)
+ type = replacetext(type, " ", "_")
+ icon_state = "[type]_[state]"
+
/obj/structure/frame/proc/check_components(mob/user as mob)
components = list()
req_components = circuit.req_components.Copy()
@@ -41,183 +43,117 @@
var/obj/ct = A
req_component_names[A] = initial(ct.name)
-/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/obj/item/frame/frame_type, mob/user as mob)
+/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/datum/frame/frame_types/type, mob/user as mob)
..()
if(building)
- src.frame_type = frame_type
- icon_state = "[frame_type]_0"
+ frame_type = type
+ state = 0
+
if(dir)
- src.set_dir(dir)
+ set_dir(dir)
- if(frame_type in alarms)
- if(loc)
- src.loc = loc
+ if(loc)
+ src.loc = loc
- state = 0
- if(frame_type == "airalarm" || frame_type == "firealarm" || frame_type == "keycard")
- if(dir)
- src.set_dir(dir)
- pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
- pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0
+ if(frame_type.x_offset)
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -frame_type.x_offset : frame_type.x_offset)
- if(frame_type == "intercom")
- if(dir)
- src.set_dir(dir)
- pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28)
- pixel_y = (dir & 3)? (dir == 1 ? -28 : 28) : 0
+ if(frame_type.y_offset)
+ pixel_y = (dir & 3)? (dir == 1 ? -frame_type.y_offset : frame_type.y_offset) : 0
- update_icon()
- return
-
- if(frame_type in displays)
- if(loc)
- src.loc = loc
-
- if(frame_type == "display" || frame_type == "atm" || frame_type == "request")
- pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32)
- pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0
-
- if(frame_type == "newscaster")
- pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28)
- pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0
-
- if(frame_type == "guestpass")
- pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30)
- pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0
-
- update_icon()
- return
-
- if(frame_type in no_circuit)
+ if(frame_type.circuit)
need_circuit = 0
- if(frame_type == "wrecharger")
- circuit = new /obj/item/weapon/circuitboard/recharger/wrecharger(src)
- if(loc)
- src.loc = loc
+ circuit = new frame_type.circuit(src)
- state = 0
-
- pixel_x = (dir & 3)? 0 : (dir == 4 ? -26 : 32)
- pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0
-
- update_icon()
- return
- if(frame_type == "recharger")
- circuit = new /obj/item/weapon/circuitboard/recharger(src)
- if(frame_type == "grinder")
- circuit = new /obj/item/weapon/circuitboard/grinder(src)
- if(frame_type == "conveyor")
- circuit = new /obj/item/weapon/circuitboard/conveyor(src)
- if(frame_type == "massdriver")
- circuit = new /obj/item/weapon/circuitboard/mass_driver(src)
-
- if(frame_type == "computer")
+ if(frame_type.name == "Computer")
density = 1
- if(frame_type in machines)
+
+ if(frame_type.frame_class == "machine")
density = 1
- return
+
+ update_icon()
/obj/structure/frame/attackby(obj/item/P as obj, mob/user as mob)
if(istype(P, /obj/item/weapon/wrench))
- if(state == 0)
+ if(state == 0 && !anchored)
user << "You start to wrench the frame into place."
- playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 20))
- src.anchored = 1
+ anchored = 1
if(!need_circuit && circuit)
- src.state = 2
+ state = 2
check_components()
update_desc()
- src.icon_state = "[frame_type]_2"
user << "You wrench the frame into place and set the outer cover."
else
- src.state = 1
user << "You wrench the frame into place."
- return
- if(state == 1)
- playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ else if(state == 0 && anchored)
+ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 20))
user << "You unfasten the frame."
- src.anchored = 0
- src.state = 0
- return
+ anchored = 0
- if(istype(P, /obj/item/weapon/weldingtool))
+ else if(istype(P, /obj/item/weapon/weldingtool))
if(state == 0)
var/obj/item/weapon/weldingtool/WT = P
- if(!WT.remove_fuel(0, user))
+ if(WT.remove_fuel(0, user))
+ playsound(loc, 'sound/items/Welder.ogg', 50, 1)
+ if(do_after(user, 20))
+ if(src && WT.isOn())
+ user << "You deconstruct the frame."
+ new /obj/item/stack/material/steel(loc, frame_type.frame_size)
+ qdel(src)
+ return
+ else if(!WT.remove_fuel(0, user))
user << "The welding tool must be on to complete this task."
return
- playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- if(do_after(user, 20))
- if(!src || !WT.isOn()) return
- user << "You deconstruct the frame."
- if(frame_type == "holopad" || frame_type == "microwave")
- new /obj/item/stack/material/steel( src.loc, 4 )
- else if(frame_type == "fax" || frame_type == "newscaster" || frame_type == "recharger" || frame_type == "wrecharger" || frame_type == "grinder")
- new /obj/item/stack/material/steel( src.loc, 3 )
- else if(frame_type == "firealarm" || frame_type == "airalarm" || frame_type == "intercom" || frame_type == "guestpass")
- new /obj/item/stack/material/steel( src.loc, 2 )
- else if(frame_type == "keycard")
- new /obj/item/stack/material/steel( src.loc, 1 )
- else
- new /obj/item/stack/material/steel( src.loc, 5 )
- qdel(src)
- return
- if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit)
- if(state == 1)
+ else if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit)
+ if(state == 0 && anchored)
var/obj/item/weapon/circuitboard/B = P
if(B.board_type == frame_type)
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "You place the circuit board inside the frame."
- src.icon_state = "[frame_type]_1"
- src.circuit = P
+ circuit = P
user.drop_item()
P.loc = src
- if(frame_type in machines) //because machines are assholes
+ state = 1
+ if(frame_type.frame_class == "machine")
check_components()
update_desc()
- return
else
user << "This frame does not accept circuit boards of this type!"
- return
-
- if(istype(P, /obj/item/weapon/screwdriver))
- if(state == 1)
- if(need_circuit && circuit)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You screw the circuit board into place."
- src.state = 2
- src.icon_state = "[frame_type]_2"
- return
-
- if(state == 2)
- if(need_circuit && circuit)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You unfasten the circuit board."
- src.state = 1
- src.icon_state = "[frame_type]_1"
return
- if(!need_circuit && circuit)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You unfasten the outer cover."
- src.state = 1
- src.icon_state = "[frame_type]_0"
- return
+ else if(istype(P, /obj/item/weapon/screwdriver))
+ if(state == 1)
+ if(need_circuit && circuit)
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You screw the circuit board into place."
+ state = 2
- if(state == 3)
- if(frame_type in machines)
+ else if(state == 2)
+ if(need_circuit && circuit)
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You unfasten the circuit board."
+ state = 1
+
+ else if(!need_circuit && circuit)
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You unfasten the outer cover."
+ state = 0
+
+ else if(state == 3)
+ if(frame_type.frame_class == "machine")
var/component_check = 1
for(var/R in req_components)
if(req_components[R] > 0)
component_check = 0
break
if(component_check)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ var/obj/machinery/new_machine = new circuit.build_path(loc, dir)
// Handle machines that have allocated default parts in thier constructor.
if(new_machine.component_parts)
for(var/CP in new_machine.component_parts)
@@ -226,9 +162,9 @@
else
new_machine.component_parts = list()
- src.circuit.construct(new_machine)
+ circuit.construct(new_machine)
- for(var/obj/O in src.components)
+ for(var/obj/O in components)
if(circuit.contain_parts)
O.loc = new_machine
else
@@ -240,61 +176,59 @@
new_machine.RefreshParts()
- new_machine.pixel_x = src.pixel_x
- new_machine.pixel_y = src.pixel_y
+ new_machine.pixel_x = pixel_x
+ new_machine.pixel_y = pixel_y
qdel(src)
- return
+ return
- if(frame_type in alarms)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ else if(frame_type.frame_class == "alarm")
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
user << "You fasten the cover."
- var/obj/machinery/B = new src.circuit.build_path ( src.loc )
- B.pixel_x = src.pixel_x
- B.pixel_y = src.pixel_y
+ var/obj/machinery/B = new circuit.build_path(loc)
+ B.pixel_x = pixel_x
+ B.pixel_y = pixel_y
B.set_dir(dir)
- src.circuit.construct(B)
+ circuit.construct(B)
qdel(src)
return
- if(state == 4)
- if(frame_type in computers)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ else if(state == 4)
+ if(frame_type.frame_class == "computer")
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
user << "You connect the monitor."
- var/obj/machinery/B = new src.circuit.build_path ( src.loc )
- B.pixel_x = src.pixel_x
- B.pixel_y = src.pixel_y
+ var/obj/machinery/B = new circuit.build_path(loc)
+ B.pixel_x = pixel_x
+ B.pixel_y = pixel_y
B.set_dir(dir)
- src.circuit.construct(B)
+ circuit.construct(B)
qdel(src)
return
- if(frame_type in displays)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ else if(frame_type.frame_class == "display")
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
user << "You connect the monitor."
- var/obj/machinery/B = new src.circuit.build_path ( src.loc )
- B.pixel_x = src.pixel_x
- B.pixel_y = src.pixel_y
+ var/obj/machinery/B = new circuit.build_path(loc)
+ B.pixel_x = pixel_x
+ B.pixel_y = pixel_y
B.set_dir(dir)
- src.circuit.construct(B)
+ circuit.construct(B)
qdel(src)
return
- if(istype(P, /obj/item/weapon/crowbar))
+ else if(istype(P, /obj/item/weapon/crowbar))
if(state == 1)
if(need_circuit && circuit)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
user << "You remove the circuit board."
- src.state = 1
- src.icon_state = "[frame_type]_0"
- circuit.loc = src.loc
- src.circuit = null
- if(frame_type in machines) //becuase machines are assholes
+ state = 0
+ circuit.loc = loc
+ circuit = null
+ if(frame_type.frame_class == "machine")
req_components = null
- return
- if(state == 3)
- if(frame_type in machines)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ else if(state == 3)
+ if(frame_type.frame_class == "machine")
+ playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
if(components.len == 0)
user << "There are no components to remove."
else
@@ -304,112 +238,93 @@
check_components()
update_desc()
user << desc
- return
- if(state == 4)
- if(frame_type in computers)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ else if(state == 4)
+ if(frame_type.frame_class == "computer")
+ playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
user << "You remove the glass panel."
- src.state = 3
- src.icon_state = "[frame_type]_3"
- new /obj/item/stack/material/glass( src.loc, 2 )
- return
+ state = 3
+ new /obj/item/stack/material/glass(loc, 2)
- if(frame_type in displays)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ else if(frame_type.frame_class == "display")
+ playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
user << "You remove the glass panel."
- src.state = 3
- src.icon_state = "[frame_type]_3"
- new /obj/item/stack/material/glass( src.loc, 2 )
- return
+ state = 3
+ new /obj/item/stack/material/glass(loc, 2)
- if(istype(P, /obj/item/stack/cable_coil))
+ else if(istype(P, /obj/item/stack/cable_coil))
if(state == 2)
var/obj/item/stack/cable_coil/C = P
- if (C.get_amount() < 5)
+ if(C.get_amount() < 5)
user << "You need five coils of wire to add them to the frame."
return
user << "You start to add cables to the frame."
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 20) && state == 2)
- if (C.use(5))
+ if(C.use(5))
user << "You add cables to the frame."
state = 3
- icon_state = "[frame_type]_3"
- if(frame_type in machines)
+ if(frame_type.frame_class == "machine")
user << desc
- return
- if(istype(P, /obj/item/weapon/wirecutters))
+ else if(istype(P, /obj/item/weapon/wirecutters))
if(state == 3)
- if(frame_type in computers)
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ if(frame_type.frame_class == "computer")
+ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
user << "You remove the cables."
- src.state = 2
- src.icon_state = "[frame_type]_2"
- new /obj/item/stack/cable_coil( src.loc, 5 )
- return
+ state = 2
+ new /obj/item/stack/cable_coil(loc, 5)
- if(frame_type in displays)
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ else if(frame_type.frame_class == "display")
+ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
user << "You remove the cables."
- src.state = 2
- src.icon_state = "[frame_type]_2"
- new /obj/item/stack/cable_coil( src.loc, 5 )
- return
+ state = 2
+ new /obj/item/stack/cable_coil(loc, 5)
- if(frame_type in alarms)
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ else if(frame_type.frame_class == "alarm")
+ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
user << "You remove the cables."
- src.state = 2
- src.icon_state = "[frame_type]_2"
- new /obj/item/stack/cable_coil( src.loc, 5 )
- return
+ state = 2
+ new /obj/item/stack/cable_coil(loc, 5)
- if(frame_type in machines)
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ else if(frame_type.frame_class == "machine")
+ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
user << "You remove the cables."
- src.state = 2
- src.icon_state = "[frame_type]_2"
- new /obj/item/stack/cable_coil( src.loc, 5 )
- return
+ state = 2
+ new /obj/item/stack/cable_coil(loc, 5)
- if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass")
+ else if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass")
if(state == 3)
- if(frame_type in computers)
+ if(frame_type.frame_class == "computer")
var/obj/item/stack/G = P
- if (G.get_amount() < 2)
+ if(G.get_amount() < 2)
user << "You need two sheets of glass to put in the glass panel."
return
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "You start to put in the glass panel."
if(do_after(user, 20) && state == 3)
- if (G.use(2))
+ if(G.use(2))
user << "You put in the glass panel."
- src.state = 4
- src.icon_state = "[frame_type]_4"
- return
+ state = 4
- if(frame_type in displays)
+ else if(frame_type.frame_class == "display")
var/obj/item/stack/G = P
- if (G.get_amount() < 2)
+ if(G.get_amount() < 2)
user << "You need two sheets of glass to put in the glass panel."
return
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
user << "You start to put in the glass panel."
if(do_after(user, 20) && state == 3)
- if (G.use(2))
+ if(G.use(2))
user << "You put in the glass panel."
- src.state = 4
- src.icon_state = "[frame_type]_4"
- return
+ state = 4
- if(istype(P, /obj/item))
+ else if(istype(P, /obj/item))
if(state == 3)
- if(frame_type in machines)
+ if(frame_type.frame_class == "machine")
for(var/I in req_components)
if(istype(P, I) && (req_components[I] > 0))
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(istype(P, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CP = P
if(CP.get_amount() > 1)
@@ -423,7 +338,7 @@
update_desc()
break
- if(istype(P, /obj/item/stack/material/glass/reinforced))
+ else if(istype(P, /obj/item/stack/material/glass/reinforced))
var/obj/item/stack/material/glass/reinforced/CP = P
if(CP.get_amount() > 1)
var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
@@ -445,4 +360,6 @@
user << desc
if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil) && !istype(P, /obj/item/stack/material))
user << "You cannot add that component to the machine!"
- return
\ No newline at end of file
+ return
+
+ update_icon()
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 58c8423a23e..6e853368c57 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -49,25 +49,8 @@ var/const/HOLOPAD_MODE = RANGE_BASED
var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating.
/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- user << "You start removing the glass."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.circuit = M
- A.anchored = 1
- A.density = 1
- A.frame_type = "holopad"
- for (var/obj/C in src)
- C.forceMove(loc)
- user << "You remove the glass."
- A.state = 4
- A.icon_state = "holopad_4"
- M.deconstruct(src)
- for (var/mob/living/silicon/ai/master in masters)
- clear_holo(master)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
+ return
else
src.attack_hand(user)
return
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 30a9b8548bd..aa0dc077731 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -113,7 +113,6 @@ Class Procs:
var/global/gl_uid = 1
var/interact_offline = 0 // Can the machine be interacted with while de-powered.
var/circuit = null
- var/frame_type = "machine"
/obj/machinery/New(l, d=0)
..(l)
@@ -318,12 +317,45 @@ Class Procs:
/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S)
if(!istype(S))
return 0
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
panel_open = !panel_open
user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]."
update_icon()
return 1
+/obj/machinery/proc/alarm_deconstruction_wirecutters(var/mob/user, var/obj/item/weapon/wirecutters/W, var/wiresexposed)
+ if(!istype(W))
+ return 0
+ if(!wiresexposed)
+ return 0
+ user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].")
+ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ new/obj/item/stack/cable_coil(get_turf(src), 5)
+ . = dismantle()
+
+/obj/machinery/proc/alarm_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S, var/wiresexposed)
+ if(!istype(S))
+ return 0
+ wiresexposed = !wiresexposed
+ user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
+ update_icon()
+ return 1
+
+/obj/machinery/proc/computer_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S)
+ if(!istype(S))
+ return 0
+ if(!circuit)
+ return 0
+ user << "You start disconnecting the monitor."
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if(stat & BROKEN)
+ user << "The broken glass falls out."
+ new /obj/item/weapon/material/shard(loc)
+ else
+ user << "You disconnect the monitor."
+ . = dismantle()
+
/obj/machinery/proc/dismantle()
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
@@ -332,22 +364,38 @@ Class Procs:
A.anchored = 1
A.density = 1
A.frame_type = M.board_type
- if(A.frame_type in A.no_circuit)
+ if(A.frame_type.circuit)
A.need_circuit = 0
+
for (var/obj/D in src.component_parts)
D.forceMove(loc)
+
if(A.components)
A.components.Cut()
else
A.components = list()
+
component_parts = list()
- A.icon_state = "[A.frame_type]_3"
- A.state = 3
- A.dir = dir
+
+ for(var/obj/C in src)
+ C.forceMove(loc)
+
+ if(A.frame_type.frame_class == "alarm")
+ A.state = 2
+ else if(A.frame_type.frame_class == "computer" || A.frame_type.frame_class == "display")
+ if(stat & BROKEN)
+ A.state = 3
+ else
+ A.state = 4
+ else
+ A.state = 3
+
+ A.set_dir(dir)
A.pixel_x = pixel_x
A.pixel_y = pixel_y
A.check_components()
A.update_desc()
+ A.update_icon()
M.loc = null
M.deconstruct(src)
qdel(src)
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 7bfe32d7191..f647ee3edad 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -167,7 +167,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
light_range = 0
anchored = 1
var/obj/machinery/exonet_node/node = null
- circuit = /obj/item/weapon/circuitboard/newscaster
+ circuit = /obj/item/weapon/circuitboard/newscaster
/obj/machinery/newscaster/security_unit //Security unit
name = "Security Newscaster"
@@ -752,30 +752,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
/obj/machinery/newscaster/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- user << "You start disconnecting the monitor."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "newscaster"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- if (src.stat & isbroken == 1)
- user << "The broken glass falls out."
- new /obj/item/weapon/material/shard( src.loc )
- A.state = 3
- A.icon_state = "newscaster_3"
- else
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "newscaster_4"
- M.deconstruct(src)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
+ return
else
src.attack_hand(user)
return
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 55c2e10eaa1..21f456d2817 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -170,5 +170,4 @@ obj/machinery/recharger/wallcharger
icon_state_charging = "wrecharger1"
icon_state_idle = "wrecharger0"
portable = 0
- circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
- frame_type = "wrecharger"
+ circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
\ No newline at end of file
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index fc39af88f7a..2478ec23fe2 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -200,9 +200,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
//err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messanging on that console (EXTREME priority...), but the code for that was removed.
/obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob)
- if(default_deconstruction_screwdriver(user, O))
- return
- if(default_deconstruction_crowbar(user, O))
+ if(computer_deconstruction_screwdriver(user, O))
return
if(istype(O, /obj/item/device/multitool))
if(panel_open)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 8b0d78cb968..0e775433f50 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -53,23 +53,8 @@
return ..()
/obj/machinery/status_display/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "display"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "display_4"
- M.deconstruct(src)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
+ return
else
src.attack_hand(user)
return
diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm
index 51fcfb4f51c..6fd8dd2a916 100644
--- a/code/game/machinery/status_display_ai.dm
+++ b/code/game/machinery/status_display_ai.dm
@@ -70,23 +70,8 @@ var/list/ai_status_emotions = list(
var/emotion = "Neutral"
/obj/machinery/ai_status_display/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "display"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "display_4"
- M.deconstruct(src)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
+ return
else
src.attack_hand(user)
return
diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm
index 701d4ebab23..17d0ab3d7b4 100644
--- a/code/game/machinery/wall_frames.dm
+++ b/code/game/machinery/wall_frames.dm
@@ -1,112 +1,244 @@
+/var/global/list/construction_frame_wall
+/var/global/list/construction_frame_floor
+
+/proc/populate_frame_types()
+ //Create global frame type list if it hasn't been made already.
+ construction_frame_wall = list()
+ construction_frame_floor = list()
+ for(var/R in typesof(/datum/frame/frame_types)-/datum/frame/frame_types)
+ var/datum/frame/frame_types/type = new R
+ if(type.frame_style == "wall")
+ construction_frame_wall += type
+ else
+ construction_frame_floor += type
+
+ var/datum/frame/frame_types/cancel/cancel = new /datum/frame/frame_types/cancel
+ construction_frame_wall += cancel
+ construction_frame_floor += cancel
+
+/datum/frame/frame_types
+ var/name
+ var/frame_size = 5
+ var/frame_class
+ var/circuit
+ var/frame_style = "floor"
+ var/x_offset
+ var/y_offset
+
+/datum/frame/frame_types/computer
+ name = "Computer"
+ frame_class = "computer"
+
+/datum/frame/frame_types/machine
+ name = "Machine"
+ frame_class = "machine"
+
+/datum/frame/frame_types/conveyor
+ name = "Conveyor"
+ frame_class = "machine"
+ circuit = /obj/item/weapon/circuitboard/conveyor
+
+/datum/frame/frame_types/photocopier
+ name = "Photocopier"
+ frame_class = "machine"
+
+/datum/frame/frame_types/washing_machine
+ name = "Washing Machine"
+ frame_class = "machine"
+
+/datum/frame/frame_types/medical_console
+ name = "Medical Console"
+ frame_class = "computer"
+
+/datum/frame/frame_types/medical_pod
+ name = "Medical Pod"
+ frame_class = "machine"
+
+/datum/frame/frame_types/dna_analyzer
+ name = "DNA Analyzer"
+ frame_class = "machine"
+
+/datum/frame/frame_types/mass_driver
+ name = "Mass Driver"
+ frame_class = "machine"
+ circuit = /obj/item/weapon/circuitboard/mass_driver
+
+/datum/frame/frame_types/holopad
+ name = "Holopad"
+ frame_class = "computer"
+ frame_size = 4
+
+/datum/frame/frame_types/microwave
+ name = "Microwave"
+ frame_class = "machine"
+ frame_size = 4
+
+/datum/frame/frame_types/fax
+ name = "Fax"
+ frame_class = "machine"
+ frame_size = 3
+
+/datum/frame/frame_types/recharger
+ name = "Recharger"
+ frame_class = "machine"
+ circuit = /obj/item/weapon/circuitboard/recharger
+ frame_size = 3
+
+/datum/frame/frame_types/grinder
+ name = "Grinder"
+ frame_class = "machine"
+ circuit = /obj/item/weapon/circuitboard/grinder
+ frame_size = 3
+
+/datum/frame/frame_types/display
+ name = "Display"
+ frame_class = "display"
+ frame_style = "wall"
+ x_offset = 32
+ y_offset = 32
+
+/datum/frame/frame_types/supply_request_console
+ name = "Supply Request Console"
+ frame_class = "display"
+ frame_style = "wall"
+ x_offset = 32
+ y_offset = 32
+
+/datum/frame/frame_types/atm
+ name = "ATM"
+ frame_class = "display"
+ frame_size = 3
+ frame_style = "wall"
+ x_offset = 32
+ y_offset = 32
+
+/datum/frame/frame_types/newscaster
+ name = "Newscaster"
+ frame_class = "display"
+ frame_size = 3
+ frame_style = "wall"
+ x_offset = 28
+ y_offset = 30
+
+/datum/frame/frame_types/wall_charger
+ name = "Wall Charger"
+ frame_class = "machine"
+ circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
+ frame_size = 3
+ frame_style = "wall"
+ x_offset = 32
+ y_offset = 32
+
+/datum/frame/frame_types/fire_alarm
+ name = "Fire Alarm"
+ frame_class = "alarm"
+ frame_size = 2
+ frame_style = "wall"
+ x_offset = 24
+ y_offset = 24
+
+/datum/frame/frame_types/air_alarm
+ name = "Air Alarm"
+ frame_class = "alarm"
+ frame_size = 2
+ frame_style = "wall"
+ x_offset = 24
+ y_offset = 24
+
+/datum/frame/frame_types/guest_pass_console
+ name = "Guest Pass Console"
+ frame_class = "display"
+ frame_size = 2
+ frame_style = "wall"
+ x_offset = 30
+ y_offset = 30
+
+/datum/frame/frame_types/intercom
+ name = "Intercom"
+ frame_class = "alarm"
+ frame_size = 2
+ frame_style = "wall"
+ x_offset = 28
+ y_offset = 28
+
+/datum/frame/frame_types/keycard_authenticator
+ name = "Keycard Authenticator"
+ frame_class = "alarm"
+ frame_size = 1
+ frame_style = "wall"
+ x_offset = 24
+ y_offset = 24
+
+/datum/frame/frame_types/cancel //used to get out of input dialogue
+ name = "Cancel"
+
/obj/item/frame
name = "frame parts"
desc = "Used for building frames."
icon = 'icons/obj/stock_parts.dmi'
icon_state = "frame_bitem"
flags = CONDUCT
- var/build_machine_type = /obj/structure/frame
+ var/build_machine_type
var/refund_amt = 5
var/refund_type = /obj/item/stack/material/steel
var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures)
- var/frame_type = null
+ var/list/frame_types_floor
+ var/list/frame_types_wall
+
+/obj/item/frame/proc/update_type_list()
+ if(!frame_types_floor)
+ frame_types_floor = construction_frame_floor
+ if(!frame_types_wall)
+ frame_types_wall = construction_frame_wall
/obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new refund_type( get_turf(src.loc), refund_amt)
+ if(istype(W, /obj/item/weapon/wrench))
+ new refund_type(get_turf(loc), refund_amt)
qdel(src)
return
..()
/obj/item/frame/attack_self(mob/user as mob)
..()
+ update_type_list()
+ var/datum/frame/frame_types/frame_type
if(!build_machine_type)
- return
-
- if(!frame_type)
- var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Computer", "Machine", "Holopad", "Conveyor",
- "Photocopier", "Fax", "Microwave",
- "Recharger", "Washing Machine", "Grinder",
- "Medical Console", "Medical Pod", "DNA Analyzer",
- "Mass Driver",
- "Cancel")
-
- if(response == "Cancel")
+ var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_floor
+ if(!response || response.name == "Cancel")
return
+ frame_type = response
- frame_type = lowertext(response)
+ build_machine_type = /obj/structure/frame
- switch(response)
- if("Holopad")
- new /obj/item/stack/material/steel( usr.loc, 1 ) //holopads are smaller, they only need 4 sheets
- if("Fax")
- new /obj/item/stack/material/steel( usr.loc, 2 ) //faxes are smaller, they only need 3 sheets
- if("Microwave")
- new /obj/item/stack/material/steel( usr.loc, 1 ) //microwaves are smaller, they only need 4 sheets
- if("Recharger")
- new /obj/item/stack/material/steel( usr.loc, 2 ) //rechargers are smaller, they only need 3 sheets
- if("Washing Machine")
- frame_type = "washing"
- if("Grinder")
- new /obj/item/stack/material/steel( usr.loc, 2 ) //grinders are smaller, they only need 3 sheets
- if("Medical Console")
- frame_type = "console"
- if("Medical Pod")
- frame_type = "medpod"
- if("DNA Analyzer")
- frame_type = "dna_analyzer"
- if("Mass Driver")
- frame_type = "massdriver"
+ if(frame_type.frame_size != 5)
+ new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size))
var/ndir
ndir = usr.dir
- if (!(ndir in cardinal))
+ if(!(ndir in cardinal))
return
- var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type)
- M.fingerprints = src.fingerprints
- M.fingerprintshidden = src.fingerprintshidden
- M.fingerprintslast = src.fingerprintslast
+ var/obj/machinery/M = new build_machine_type(get_turf(loc), ndir, 1, frame_type)
+ M.fingerprints = fingerprints
+ M.fingerprintshidden = fingerprintshidden
+ M.fingerprintslast = fingerprintslast
qdel(src)
/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob)
- if(!frame_type)
- var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Fire Alarm", "Air Alarm", "Display", "Newscaster",
- "ATM", "Guest Pass Console", "Intercom", "Keycard Authenticator",
- "Wall Charger", "Supply Request Console",
- "Cancel")
-
- if(response == "Cancel")
- return
-
- frame_type = lowertext(response)
-
- switch(response)
- if("Fire Alarm")
- frame_type = "firealarm"
- new /obj/item/stack/material/steel( usr.loc, 3 ) //fire alarms are smaller, they only need 2 sheets
- if("Air Alarm")
- frame_type = "airalarm"
- new /obj/item/stack/material/steel( usr.loc, 3 ) //air alarms are smaller, they only need 2 sheets
- if("Intercom")
- new /obj/item/stack/material/steel( usr.loc, 3 ) //intercoms are smaller, they only need 2 sheets
- if("Newscaster")
- new /obj/item/stack/material/steel( usr.loc, 2 ) //newscasters are smaller, they only need 3 sheets
- if("Guest Pass Console")
- frame_type = "guestpass"
- new /obj/item/stack/material/steel( usr.loc, 3 ) //guestpass consoles are smaller, they only need 2 sheets
- if("Keycard Authenticator")
- frame_type = "keycard"
- new /obj/item/stack/material/steel( usr.loc, 4 ) //keycard authenticators are smaller, they only need 1 sheets
- if("Wall Charger")
- frame_type = "wrecharger"
- new /obj/item/stack/material/steel( usr.loc, 2 ) //wall rechargers are smaller, they only need 3 sheets
- if("Supply Request Console")
- frame_type = "request"
-
+ update_type_list()
+ var/datum/frame/frame_types/frame_type
if(!build_machine_type)
- return
+ var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_wall
+ if(!response || response.name == "Cancel")
+ return
+ frame_type = response
- if (get_dist(on_wall,usr)>1)
+ build_machine_type = /obj/structure/frame
+
+ if(frame_type.frame_size != 5)
+ new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size))
+
+ if(get_dist(on_wall,usr)>1)
return
var/ndir
@@ -115,25 +247,27 @@
else
ndir = get_dir(on_wall,usr)
- if (!(ndir in cardinal))
+ if(!(ndir in cardinal))
return
var/turf/loc = get_turf(usr)
var/area/A = loc.loc
- if (!istype(loc, /turf/simulated/floor))
+ if(!istype(loc, /turf/simulated/floor))
usr << "\The frame cannot be placed on this spot."
return
- if (A.requires_power == 0 || A.name == "Space")
+
+ if(A.requires_power == 0 || A.name == "Space")
usr << "\The [src] Alarm cannot be placed in this area."
return
if(gotwallitem(loc, ndir))
usr << "There's already an item on this wall!"
return
+
var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type)
- M.fingerprints = src.fingerprints
- M.fingerprintshidden = src.fingerprintshidden
- M.fingerprintslast = src.fingerprintslast
+ M.fingerprints = fingerprints
+ M.fingerprintshidden = fingerprintshidden
+ M.fingerprintslast = fingerprintslast
qdel(src)
/obj/item/frame/light
@@ -143,14 +277,12 @@
icon_state = "tube-construct-item"
build_machine_type = /obj/machinery/light_construct
reverse = 1
- frame_type = 1
/obj/item/frame/light/small
name = "small light fixture frame"
icon_state = "bulb-construct-item"
refund_amt = 1
build_machine_type = /obj/machinery/light_construct/small
- frame_type = 1
/obj/item/frame/extinguisher_cabinet
name = "extinguisher cabinet frame"
@@ -159,7 +291,6 @@
icon_state = "extinguisher_empty"
refund_amt = 4
build_machine_type = /obj/structure/extinguisher_cabinet
- frame_type = 1
/obj/item/frame/noticeboard
name = "noticeboard frame"
@@ -169,7 +300,6 @@
refund_amt = 4
refund_type = /obj/item/stack/material/wood
build_machine_type = /obj/structure/noticeboard
- frame_type = 1
/obj/item/frame/mirror
name = "mirror frame"
@@ -178,7 +308,6 @@
icon_state = "mirror_frame"
refund_amt = 1
build_machine_type = /obj/structure/mirror
- frame_type = 1
/obj/item/frame/fireaxe_cabinet
name = "fire axe cabinet frame"
@@ -186,5 +315,4 @@
icon = 'icons/obj/closet.dmi'
icon_state = "fireaxe0101"
refund_amt = 4
- build_machine_type = /obj/structure/closet/fireaxecabinet
- frame_type = 1
\ No newline at end of file
+ build_machine_type = /obj/structure/closet/fireaxecabinet
\ No newline at end of file
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 93d161f2ea6..d6bc38923c4 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -26,6 +26,7 @@
)
/obj/machinery/washing_machine/New()
+ ..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/motor(src)
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 7aaf609eca6..512f3ba3fea 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -84,7 +84,7 @@
attack_self(user)
/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
- src.add_fingerprint(user)
+ add_fingerprint(user)
if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up.
wiresexposed = !wiresexposed
user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
@@ -98,11 +98,11 @@
return
if (wiresexposed && istype(W, /obj/item/weapon/wirecutters))
user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].")
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
new/obj/item/stack/cable_coil(get_turf(src), 5)
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "intercom"
+ var/obj/structure/frame/A = new /obj/structure/frame(loc)
+ var/obj/item/weapon/circuitboard/M = new circuit(A)
+ A.frame_type = M.board_type
A.pixel_x = pixel_x
A.pixel_y = pixel_y
A.circuit = M
@@ -111,7 +111,7 @@
for (var/obj/C in src)
C.forceMove(loc)
A.state = 2
- A.icon_state = "intercom_2"
+ A.update_icon()
M.deconstruct(src)
qdel(src)
else
diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
index fd30153c37a..8459370593b 100644
--- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm
+++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
@@ -19,7 +19,7 @@
throw_speed = 3
throw_range = 15
var/build_path = null
- var/board_type = "computer"
+ var/board_type = new /datum/frame/frame_types/computer
var/list/req_components = null
var/contain_parts = 1
diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
index 0016fc730ab..c46c519e9e6 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
@@ -32,7 +32,7 @@
/obj/item/weapon/circuitboard/security/telescreen/entertainment
name = T_BOARD("entertainment camera monitor")
build_path = /obj/machinery/computer/security/telescreen/entertainment
- board_type = "display"
+ board_type = new /datum/frame/frame_types/display
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/security/telescreen/entertainment/New()
diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm
index 3acb2de7558..fa48be65bbf 100644
--- a/code/game/objects/items/weapons/circuitboards/frame.dm
+++ b/code/game/objects/items/weapons/circuitboards/frame.dm
@@ -9,37 +9,37 @@
/obj/item/weapon/circuitboard/guestpass
name = T_BOARD("guestpass console")
build_path = /obj/machinery/computer/guestpass
- board_type = "guestpass"
+ board_type = new /datum/frame/frame_types/guest_pass_console
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/status_display
name = T_BOARD("status display")
build_path = /obj/machinery/status_display
- board_type = "display"
+ board_type = new /datum/frame/frame_types/display
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/ai_status_display
name = T_BOARD("ai status display")
build_path = /obj/machinery/ai_status_display
- board_type = "display"
+ board_type = new /datum/frame/frame_types/display
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/newscaster
name = T_BOARD("newscaster")
build_path = /obj/machinery/newscaster
- board_type = "newscaster"
+ board_type = new /datum/frame/frame_types/newscaster
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/atm
name = T_BOARD("atm")
build_path = /obj/machinery/atm
- board_type = "atm"
+ board_type = new /datum/frame/frame_types/atm
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/request
name = T_BOARD("reques console")
build_path = /obj/machinery/requests_console
- board_type = "request"
+ board_type = new /datum/frame/frame_types/supply_request_console
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
//Alarm
@@ -47,25 +47,25 @@
/obj/item/weapon/circuitboard/firealarm
name = T_BOARD("fire alarm")
build_path = /obj/machinery/firealarm
- board_type = "firealarm"
+ board_type = new /datum/frame/frame_types/fire_alarm
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/airalarm
name = T_BOARD("air alarm")
build_path = /obj/machinery/alarm
- board_type = "airalarm"
+ board_type = new /datum/frame/frame_types/air_alarm
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/intercom
name = T_BOARD("intercom")
build_path = /obj/item/device/radio/intercom
- board_type = "intercom"
+ board_type = new /datum/frame/frame_types/intercom
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/keycard_auth
name = T_BOARD("keycard authenticator")
build_path = /obj/machinery/keycard_auth
- board_type = "keycard"
+ board_type = new /datum/frame/frame_types/keycard_authenticator
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
//Computer
@@ -73,19 +73,19 @@
/obj/item/weapon/circuitboard/holopad
name = T_BOARD("holopad")
build_path = /obj/machinery/hologram/holopad
- board_type = "holopad"
+ board_type = new /datum/frame/frame_types/holopad
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/scanner_console
name = T_BOARD("body scanner console")
build_path = /obj/machinery/body_scanconsole
- board_type = "console"
+ board_type = new /datum/frame/frame_types/medical_console
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
/obj/item/weapon/circuitboard/sleeper_console
name = T_BOARD("sleeper console")
build_path = /obj/machinery/sleep_console
- board_type = "console"
+ board_type = new /datum/frame/frame_types/medical_console
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
//Machine
@@ -93,7 +93,7 @@
/obj/item/weapon/circuitboard/photocopier
name = T_BOARD("photocopier")
build_path = /obj/machinery/photocopier
- board_type = "photocopier"
+ board_type = new /datum/frame/frame_types/photocopier
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
@@ -104,7 +104,7 @@
/obj/item/weapon/circuitboard/fax
name = T_BOARD("fax")
build_path = /obj/machinery/photocopier/faxmachine
- board_type = "fax"
+ board_type = new /datum/frame/frame_types/fax
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
@@ -115,7 +115,7 @@
/obj/item/weapon/circuitboard/conveyor
name = T_BOARD("conveyor")
build_path = /obj/machinery/conveyor
- board_type = "conveyor"
+ board_type = new /datum/frame/frame_types/conveyor
req_components = list(
/obj/item/weapon/stock_parts/gear = 2,
/obj/item/weapon/stock_parts/motor = 2,
@@ -124,7 +124,7 @@
/obj/item/weapon/circuitboard/microwave
name = T_BOARD("microwave")
build_path = /obj/machinery/microwave
- board_type = "microwave"
+ board_type = new /datum/frame/frame_types/microwave
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
@@ -134,7 +134,7 @@
/obj/item/weapon/circuitboard/recharger
name = T_BOARD("recharger")
build_path = /obj/machinery/recharger
- board_type = "recharger"
+ board_type = new /datum/frame/frame_types/recharger
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/stack/cable_coil = 5)
@@ -142,12 +142,12 @@
/obj/item/weapon/circuitboard/recharger/wrecharger
name = T_BOARD("wall recharger")
build_path = /obj/machinery/recharger/wallcharger
- board_type = "wrecharger"
+ board_type = new /datum/frame/frame_types/wall_charger
/obj/item/weapon/circuitboard/washing
name = T_BOARD("washing machine")
build_path = /obj/machinery/washing_machine
- board_type = "washing"
+ board_type = new /datum/frame/frame_types/washing_machine
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
/obj/item/weapon/stock_parts/motor = 1,
@@ -156,7 +156,7 @@
/obj/item/weapon/circuitboard/grinder
name = T_BOARD("reagent grinder")
build_path = /obj/machinery/reagentgrinder
- board_type = "grinder"
+ board_type = new /datum/frame/frame_types/grinder
req_components = list(
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/gear = 1,
@@ -185,7 +185,7 @@
/obj/item/weapon/circuitboard/body_scanner
name = T_BOARD("body scanner")
build_path = /obj/machinery/bodyscanner
- board_type = "medpod"
+ board_type = new /datum/frame/frame_types/medical_pod
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 3,
@@ -194,7 +194,7 @@
/obj/item/weapon/circuitboard/sleeper
name = T_BOARD("sleeper")
build_path = /obj/machinery/sleeper
- board_type = "medpod"
+ board_type = new /datum/frame/frame_types/medical_pod
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
@@ -205,7 +205,7 @@
/obj/item/weapon/circuitboard/dna_analyzer
name = T_BOARD("dna analyzer")
build_path = /obj/machinery/dnaforensics
- board_type = "dna_analyzer"
+ board_type = new /datum/frame/frame_types/dna_analyzer
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2, TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 2,
@@ -215,104 +215,10 @@
/obj/item/weapon/circuitboard/mass_driver
name = T_BOARD("mass driver")
build_path = /obj/machinery/mass_driver
- board_type = "massdriver"
+ board_type = new /datum/frame/frame_types/mass_driver
req_components = list(
/obj/item/weapon/stock_parts/gear = 2,
/obj/item/weapon/stock_parts/motor = 2,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/spring = 1,
- /obj/item/stack/cable_coil = 5)
-
-//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways.
-/obj/item/weapon/storage/box/frame_parts
- display_contents_with_number = 1
- New()
- ..()
- new /obj/item/weapon/circuitboard/guestpass( src )
- new /obj/item/weapon/circuitboard/status_display( src )
- new /obj/item/weapon/circuitboard/ai_status_display( src )
- new /obj/item/weapon/circuitboard/newscaster( src )
- new /obj/item/weapon/circuitboard/atm( src )
- new /obj/item/weapon/circuitboard/firealarm( src )
- new /obj/item/weapon/circuitboard/airalarm( src )
- new /obj/item/weapon/circuitboard/intercom( src )
- new /obj/item/weapon/circuitboard/keycard_auth( src )
- new /obj/item/weapon/circuitboard/holopad( src )
- new /obj/item/weapon/circuitboard/photocopier( src )
- new /obj/item/weapon/circuitboard/fax( src )
- new /obj/item/weapon/circuitboard/microwave( src )
- new /obj/item/weapon/circuitboard/washing( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/weapon/stock_parts/scanning_module( src )
- new /obj/item/weapon/stock_parts/motor( src )
- new /obj/item/weapon/stock_parts/micro_laser( src )
- new /obj/item/weapon/stock_parts/matter_bin( src )
- new /obj/item/weapon/stock_parts/gear( src )
- new /obj/item/weapon/stock_parts/console_screen( src )
- new /obj/item/weapon/stock_parts/capacitor( src )
- new /obj/item/weapon/stock_parts/spring( src )
- new /obj/item/stack/cable_coil( src , 5 )
- new /obj/item/stack/material/glass/reinforced( src , 2 )
\ No newline at end of file
+ /obj/item/stack/cable_coil = 5)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
index 716e763515c..96ed9fa02b0 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/biogenerator
name = T_BOARD("biogenerator")
build_path = "/obj/machinery/biogenerator"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
index a1edb3f4646..b27fc6db263 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/clonepod
name = T_BOARD("clone pod")
build_path = "/obj/machinery/clonepod"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
req_components = list(
/obj/item/stack/cable_coil = 2,
@@ -16,7 +16,7 @@
/obj/item/weapon/circuitboard/clonescanner
name = T_BOARD("cloning scanner")
build_path = "/obj/machinery/dna_scannernew"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/jukebox.dm b/code/game/objects/items/weapons/circuitboards/machinery/jukebox.dm
index 4b6296c886c..89d09c00c3f 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/jukebox.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/jukebox.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/jukebox
name = T_BOARD("jukebox")
build_path = "/obj/machinery/media/jukebox"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm
index 4515bfd74bc..892ac205dc2 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/mech_recharger
name = T_BOARD("mech recharger")
build_path = "/obj/machinery/mech_recharger"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 2,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
index 653d20d6669..cd0784d941a 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/miningdrill
name = T_BOARD("mining drill head")
build_path = "/obj/machinery/mining/drill"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 1,
@@ -16,6 +16,6 @@
/obj/item/weapon/circuitboard/miningdrillbrace
name = T_BOARD("mining drill brace")
build_path = "/obj/machinery/mining/brace"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
req_components = list()
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
index a5cd69b0f4a..29d789317de 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/pacman
name = T_BOARD("PACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
index 5c8975a207f..6d9160ca3a8 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
@@ -5,14 +5,14 @@
/obj/item/weapon/circuitboard/smes
name = T_BOARD("superconductive magnetic energy storage")
build_path = "/obj/machinery/power/smes/buildable"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
req_components = list(/obj/item/weapon/smes_coil = 1, /obj/item/stack/cable_coil = 30)
/obj/item/weapon/circuitboard/batteryrack
name = T_BOARD("battery rack PSU")
build_path = "/obj/machinery/power/smes/batteryrack"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
req_components = list(/obj/item/weapon/cell = 3)
@@ -20,5 +20,5 @@
name = T_BOARD("makeshift PSU")
desc = "An APC circuit repurposed into some power storage device controller"
build_path = "/obj/machinery/power/smes/batteryrack/makeshift"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
req_components = list(/obj/item/weapon/cell = 3)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
index a3684cd894c..5d74263c91d 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/recharge_station
name = T_BOARD("cyborg recharging station")
build_path = "/obj/machinery/recharge_station"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
/obj/item/stack/cable_coil = 5,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
index c871bd3dc51..1fd629855fc 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
@@ -5,7 +5,7 @@
obj/item/weapon/circuitboard/rdserver
name = T_BOARD("R&D server")
build_path = "/obj/machinery/r_n_d/server"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 3)
req_components = list(
/obj/item/stack/cable_coil = 2,
@@ -14,7 +14,7 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/circuitboard/destructive_analyzer
name = T_BOARD("destructive analyzer")
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
@@ -24,7 +24,7 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/circuitboard/autolathe
name = T_BOARD("autolathe")
build_path = "/obj/machinery/autolathe"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 3,
@@ -34,7 +34,7 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/circuitboard/protolathe
name = T_BOARD("protolathe")
build_path = "/obj/machinery/r_n_d/protolathe"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
@@ -44,7 +44,7 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/circuitboard/circuit_imprinter
name = T_BOARD("circuit imprinter")
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
@@ -54,7 +54,7 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/circuitboard/mechfab
name = "Circuit board (Exosuit Fabricator)"
build_path = "/obj/machinery/mecha_part_fabricator"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
@@ -65,7 +65,7 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/circuitboard/prosthetics
name = "Circuit board (Prosthetics Fabricator)"
build_path = "/obj/machinery/pros_fabricator"
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
index 7218b7f094d..6aa0cae083f 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
@@ -4,7 +4,7 @@
/obj/item/weapon/circuitboard/shield_gen_ex
name = T_BOARD("hull shield generator")
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
build_path = "/obj/machinery/shield_gen/external"
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
@@ -17,7 +17,7 @@
/obj/item/weapon/circuitboard/shield_gen
name = T_BOARD("bubble shield generator")
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
build_path = "/obj/machinery/shield_gen"
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
@@ -30,7 +30,7 @@
/obj/item/weapon/circuitboard/shield_cap
name = T_BOARD("shield capacitor")
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
build_path = "/obj/machinery/shield_capacitor"
origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
req_components = list(
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
index 8a7516f476d..aca2b0010f4 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
@@ -3,7 +3,7 @@
#endif
/obj/item/weapon/circuitboard/telecomms
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
/obj/item/weapon/circuitboard/telecomms/receiver
name = T_BOARD("subspace receiver")
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
index 38438d6327a..678fa9e185b 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
@@ -3,7 +3,7 @@
#endif
/obj/item/weapon/circuitboard/unary_atmos
- board_type = "machine"
+ board_type = new /datum/frame/frame_types/machine
/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U)
//TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up.
diff --git a/code/game/objects/items/weapons/circuitboards/mecha.dm b/code/game/objects/items/weapons/circuitboards/mecha.dm
index 0ce851e3a38..56b5a1898f7 100644
--- a/code/game/objects/items/weapons/circuitboards/mecha.dm
+++ b/code/game/objects/items/weapons/circuitboards/mecha.dm
@@ -10,7 +10,6 @@
item_state = "electronic"
board_type = "other"
-
/obj/item/weapon/circuitboard/mecha/ripley
origin_tech = list(TECH_DATA = 3)
@@ -22,7 +21,6 @@
name = T_BOARD_MECHA("Ripley central control")
icon_state = "mainboard"
-
/obj/item/weapon/circuitboard/mecha/gygax
origin_tech = list(TECH_DATA = 4)
@@ -39,7 +37,6 @@
name = T_BOARD_MECHA("Gygax central control")
icon_state = "mainboard"
-
/obj/item/weapon/circuitboard/mecha/durand
origin_tech = list(TECH_DATA = 4)
@@ -56,7 +53,6 @@
name = T_BOARD_MECHA("Durand central control")
icon_state = "mainboard"
-
/obj/item/weapon/circuitboard/mecha/honker
origin_tech = list(TECH_DATA = 4)
@@ -72,7 +68,6 @@
name = T_BOARD_MECHA("H.O.N.K central control")
icon_state = "mainboard"
-
/obj/item/weapon/circuitboard/mecha/odysseus
origin_tech = list(TECH_DATA = 3)
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index bc0388d40d9..ca0db0595a5 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -80,24 +80,7 @@ log transactions
return 1
/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- user << "You start disconnecting the monitor."
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "atm"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- user << "You disconnect the monitor."
- A.state = 4
- A.icon_state = "atm_4"
- M.deconstruct(src)
- qdel(src)
+ if(computer_deconstruction_screwdriver(user, I))
return
if(istype(I, /obj/item/weapon/card))
if(emagged > 0)
diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index b4301cf557a..73b11b9a56c 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -42,22 +42,25 @@
broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices
if(istype(W, /obj/item/weapon/screwdriver))
- user << "You remove the faceplate from the [src]"
- var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.frame_type = "keycard"
- A.pixel_x = pixel_x
- A.pixel_y = pixel_y
- A.set_dir(dir)
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.forceMove(loc)
- A.state = 3
- A.icon_state = "keycard_3"
- M.deconstruct(src)
- qdel(src)
- return
+ user << "You begin removing the faceplate from the [src]"
+ if(do_after(user, 10))
+ user << "You remove the faceplate from the [src]"
+ var/obj/structure/frame/A = new /obj/structure/frame(loc)
+ var/obj/item/weapon/circuitboard/M = new circuit(A)
+ A.frame_type = M.board_type
+ A.need_circuit = 0
+ A.pixel_x = pixel_x
+ A.pixel_y = pixel_y
+ A.set_dir(dir)
+ A.circuit = M
+ A.anchored = 1
+ for (var/obj/C in src)
+ C.forceMove(loc)
+ A.state = 3
+ A.update_icon()
+ M.deconstruct(src)
+ qdel(src)
+ return
/obj/machinery/keycard_auth/power_change()
..()
diff --git a/code/world.dm b/code/world.dm
index e0cb55b849b..e65963ffab1 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -106,6 +106,9 @@ var/global/datum/global_init/init = new ()
// Create autolathe recipes, as above.
populate_lathe_recipes()
+ // Create frame types, as above.
+ populate_frame_types()
+
// Create robolimbs for chargen.
populate_robolimb_list()
diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi
index 294f1f82f74..28ea28bde1d 100644
Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ
diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm
index 97326effed0..d0d2c0a76eb 100644
--- a/maps/polaris-2.dmm
+++ b/maps/polaris-2.dmm
@@ -619,7 +619,7 @@
"alU" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/trade/centcom)
"alV" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space)
"alW" = (/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
-"alX" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/trade/centcom)
+"alX" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/trade/centcom)
"alY" = (/obj/machinery/light{dir = 4},/obj/structure/sign/kiddieplaque{desc = "A plaque commemorating the construction of the cargo ship Beruang."; name = "Beruang"; pixel_x = 32},/mob/living/simple_animal/corgi/tamaskan/spice,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/trade/centcom)
"alZ" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/trade/centcom)
"ama" = (/obj/machinery/door/airlock/silver{name = "Restroom"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/trade/centcom)
@@ -1096,7 +1096,7 @@
"avd" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"ave" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"avf" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"avg" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"avg" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"avh" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"avi" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"avj" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
@@ -1145,7 +1145,7 @@
"awa" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/red/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"awb" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"awc" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"awd" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"awd" = (/obj/structure/frame/computer,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"awe" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"awf" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"awg" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm
index 7b303c6b863..c0c85cada7c 100644
--- a/maps/polaris-3.dmm
+++ b/maps/polaris-3.dmm
@@ -20,7 +20,7 @@
"at" = (/obj/item/weapon/scalpel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"au" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/derelict/ship)
"av" = (/turf/simulated/shuttle/plating,/area/derelict/ship)
-"aw" = (/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"aw" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship)
"ay" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship)
"az" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship)
@@ -80,8 +80,8 @@
"bB" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bC" = (/obj/item/weapon/material/shard,/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bD" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bE" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bF" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bE" = (/obj/structure/cable,/obj/structure/frame/computer,/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bF" = (/obj/structure/cable,/obj/structure/frame/computer,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bG" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bH" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bI" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
@@ -197,7 +197,7 @@
"dO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/tcomsat)
"dP" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar South"},/turf/simulated/floor/airless,/area/tcomsat)
"dQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat)
-"dR" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele)
+"dR" = (/obj/structure/frame/computer,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele)
"dS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat)
"dT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
"dU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/tcomsat)
diff --git a/maps/polaris-4.dmm b/maps/polaris-4.dmm
index 1eca616230a..38bcf55e8eb 100644
--- a/maps/polaris-4.dmm
+++ b/maps/polaris-4.dmm
@@ -8,7 +8,7 @@
"ah" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
"ai" = (/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/airless,/area/mine/explored)
"aj" = (/obj/structure/girder,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
-"ak" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/floor/airless,/area/mine/explored)
+"ak" = (/obj/structure/frame/computer,/turf/simulated/floor/airless,/area/mine/explored)
"al" = (/obj/machinery/teleport/station,/turf/simulated/floor/airless,/area/mine/explored)
"am" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/mine/explored)
"an" = (/turf/simulated/floor/tiled/white/airless,/area/mine/explored)