diff --git a/baystation12.dme b/baystation12.dme
index 1777674580c..b5fae43b3a2 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -165,6 +165,9 @@
#include "code\datums\spells\turf_teleport.dm"
#include "code\datums\spells\wizard.dm"
#include "code\datums\wires\apc.dm"
+#include "code\datums\wires\smartfridge.dm"
+#include "code\datums\wires\suit_storage_unit.dm"
+#include "code\datums\wires\vending.dm"
#include "code\datums\wires\wires.dm"
#include "code\defines\obj.dm"
#include "code\defines\obj\weapon.dm"
diff --git a/code/datums/wires/smartfridge.dm b/code/datums/wires/smartfridge.dm
new file mode 100644
index 00000000000..0d0fb298706
--- /dev/null
+++ b/code/datums/wires/smartfridge.dm
@@ -0,0 +1,52 @@
+/datum/wires/smartfridge
+ holder_type = /obj/machinery/smartfridge
+ wire_count = 3
+
+var/const/SMARTFRIDGE_WIRE_ELECTRIFY = 1
+var/const/SMARTFRIDGE_WIRE_THROW = 2
+var/const/SMARTFRIDGE_WIRE_IDSCAN = 4
+
+/datum/wires/smartfridge/CanUse(var/mob/living/L)
+ var/obj/machinery/smartfridge/S = holder
+ if(!istype(L, /mob/living/silicon))
+ if(S.seconds_electrified)
+ if(S.shock(L, 100))
+ return 0
+ if(S.panel_open)
+ return 1
+ return 0
+
+/datum/wires/smartfridge/Interact(var/mob/living/user)
+ if(CanUse(user))
+ var/obj/machinery/smartfridge/S = holder
+ S.attack_hand(user)
+
+/datum/wires/smartfridge/GetInteractWindow()
+ var/obj/machinery/smartfridge/S = holder
+ . += ..()
+ . += "
The orange light is [S.seconds_electrified ? "off" : "on"].
"
+ . += "The red light is [S.shoot_inventory ? "off" : "blinking"].
"
+ . += "A [S.scan_id ? "purple" : "yellow"] light is on.
"
+
+/datum/wires/smartfridge/UpdatePulsed(var/index)
+ var/obj/machinery/smartfridge/S = holder
+ switch(index)
+ if(SMARTFRIDGE_WIRE_THROW)
+ S.shoot_inventory = !S.shoot_inventory
+ if(SMARTFRIDGE_WIRE_ELECTRIFY)
+ S.seconds_electrified = 30
+ if(SMARTFRIDGE_WIRE_IDSCAN)
+ S.scan_id = !S.scan_id
+
+/datum/wires/smartfridge/UpdateCut(var/index, var/mended)
+ var/obj/machinery/smartfridge/S = holder
+ switch(index)
+ if(SMARTFRIDGE_WIRE_THROW)
+ S.shoot_inventory = !mended
+ if(SMARTFRIDGE_WIRE_ELECTRIFY)
+ if(mended)
+ S.seconds_electrified = 0
+ else
+ S.seconds_electrified = -1
+ if(SMARTFRIDGE_WIRE_IDSCAN)
+ S.scan_id = 1
diff --git a/code/datums/wires/suit_storage_unit.dm b/code/datums/wires/suit_storage_unit.dm
new file mode 100644
index 00000000000..8ef5ce63986
--- /dev/null
+++ b/code/datums/wires/suit_storage_unit.dm
@@ -0,0 +1,52 @@
+/datum/wires/suit_storage_unit
+ holder_type = /obj/machinery/suit_cycler
+ wire_count = 3
+
+var/const/SUIT_STORAGE_WIRE_ELECTRIFY = 1
+var/const/SUIT_STORAGE_WIRE_SAFETY = 2
+var/const/SUIT_STORAGE_WIRE_LOCKED = 4
+
+/datum/wires/suit_storage_unit/CanUse(var/mob/living/L)
+ var/obj/machinery/suit_cycler/S = holder
+ if(!istype(L, /mob/living/silicon))
+ if(S.electrified)
+ if(S.shock(L, 100))
+ return 0
+ if(S.panel_open)
+ return 1
+ return 0
+
+/datum/wires/suit_storage_unit/Interact(var/mob/living/user)
+ if(CanUse(user))
+ var/obj/machinery/suit_cycler/S = holder
+ S.attack_hand(user)
+
+/datum/wires/suit_storage_unit/GetInteractWindow()
+ var/obj/machinery/suit_cycler/S = holder
+ . += ..()
+ . += "
The orange light is [S.electrified ? "off" : "on"].
"
+ . += "The red light is [S.safeties ? "off" : "blinking"].
"
+ . += "The yellow light is [S.locked ? "on" : "off"].
"
+
+/datum/wires/suit_storage_unit/UpdatePulsed(var/index)
+ var/obj/machinery/suit_cycler/S = holder
+ switch(index)
+ if(SUIT_STORAGE_WIRE_SAFETY)
+ S.safeties = !S.safeties
+ if(SUIT_STORAGE_WIRE_ELECTRIFY)
+ S.electrified = 30
+ if(SUIT_STORAGE_WIRE_LOCKED)
+ S.locked = !S.locked
+
+/datum/wires/suit_storage_unit/UpdateCut(var/index, var/mended)
+ var/obj/machinery/suit_cycler/S = holder
+ switch(index)
+ if(SUIT_STORAGE_WIRE_SAFETY)
+ S.safeties = mended
+ if(SUIT_STORAGE_WIRE_LOCKED)
+ S.locked = mended
+ if(SUIT_STORAGE_WIRE_ELECTRIFY)
+ if(mended)
+ S.electrified = 0
+ else
+ S.electrified = -1
diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm
new file mode 100644
index 00000000000..91a95b47a74
--- /dev/null
+++ b/code/datums/wires/vending.dm
@@ -0,0 +1,58 @@
+/datum/wires/vending
+ holder_type = /obj/machinery/vending
+ wire_count = 4
+
+var/const/VENDING_WIRE_THROW = 1
+var/const/VENDING_WIRE_CONTRABAND = 2
+var/const/VENDING_WIRE_ELECTRIFY = 4
+var/const/VENDING_WIRE_IDSCAN = 8
+
+/datum/wires/vending/CanUse(var/mob/living/L)
+ var/obj/machinery/vending/V = holder
+ if(!istype(L, /mob/living/silicon))
+ if(V.seconds_electrified)
+ if(V.shock(L, 100))
+ return 0
+ if(V.panel_open)
+ return 1
+ return 0
+
+/datum/wires/vending/Interact(var/mob/living/user)
+ if(CanUse(user))
+ var/obj/machinery/vending/V = holder
+ V.attack_hand(user)
+
+/datum/wires/vending/GetInteractWindow()
+ var/obj/machinery/vending/V = holder
+ . += ..()
+ . += "
The orange light is [V.seconds_electrified ? "off" : "on"].
"
+ . += "The red light is [V.shoot_inventory ? "off" : "blinking"].
"
+ . += "The green light is [V.extended_inventory ? "on" : "off"].
"
+ . += "The [V.scan_id ? "purple" : "yellow"] light is on.
"
+
+/datum/wires/vending/UpdatePulsed(var/index)
+ var/obj/machinery/vending/V = holder
+ switch(index)
+ if(VENDING_WIRE_THROW)
+ V.shoot_inventory = !V.shoot_inventory
+ if(VENDING_WIRE_CONTRABAND)
+ V.extended_inventory = !V.extended_inventory
+ if(VENDING_WIRE_ELECTRIFY)
+ V.seconds_electrified = 30
+ if(VENDING_WIRE_IDSCAN)
+ V.scan_id = !V.scan_id
+
+/datum/wires/vending/UpdateCut(var/index, var/mended)
+ var/obj/machinery/vending/V = holder
+ switch(index)
+ if(VENDING_WIRE_THROW)
+ V.shoot_inventory = !mended
+ if(VENDING_WIRE_CONTRABAND)
+ V.extended_inventory = 0
+ if(VENDING_WIRE_ELECTRIFY)
+ if(mended)
+ V.seconds_electrified = 0
+ else
+ V.seconds_electrified = -1
+ if(VENDING_WIRE_IDSCAN)
+ V.scan_id = 1
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index d7db1df37e7..ef62417b694 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -22,11 +22,14 @@
var/shoot_inventory = 0
var/locked = 0
var/panel_open = 0 //Hacking a smartfridge
- var/wires = 7
- var/const/WIRE_SHOCK = 1
- var/const/WIRE_SHOOTINV = 2
- var/const/WIRE_SCANID = 3 //Only used by the secure smartfridge, but required by the cut, mend and pulse procs.
+ var/scan_id = 1
+ var/datum/wires/smartfridge/wires = null
+/obj/machinery/smartfridge/New()
+ wires = new(src)
+
+/obj/machinery/smartfridge/Del()
+ del(wires) // qdel
/obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj)
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/))
@@ -217,6 +220,8 @@
if(seconds_electrified != 0)
if(shock(user, 100))
return
+ if(panel_open)
+ wires.Interact(user)
ui_interact(user)
@@ -248,26 +253,6 @@
if (items.len > 0)
data["contents"] = items
- var/list/vendwires = null
- if (is_secure)
- vendwires = list(
- "Violet" = 1,
- "Orange" = 2,
- "Green" = 3)
- else
- vendwires = list(
- "Blue" = 1,
- "Red" = 2,
- "Black" = 3)
-
- var/list/vendor_wires[0]
- for (var/wire in vendwires)
- var is_uncut = wires & APCWireColorToFlag[vendwires[wire]]
- vendor_wires.Add(list(list("wire" = wire, "cut" = !is_uncut, "index" = vendwires[wire])))
-
- if (vendor_wires.len > 0)
- data["wires"] = vendor_wires
-
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500)
@@ -306,82 +291,8 @@
return 1
return 1
-
- if (panel_open)
- if (href_list["cutwire"])
- if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) ))
- user << "You need wirecutters!"
- return 1
-
- var/wire_index = text2num(href_list["cutwire"])
- if (isWireColorCut(wire_index))
- mend(wire_index)
- else
- cut(wire_index)
- return 1
-
- if (href_list["pulsewire"])
- if (!istype(usr.get_active_hand(), /obj/item/device/multitool))
- usr << "You need a multitool!"
- return 1
-
- var/wire_index = text2num(href_list["pulsewire"])
- if (isWireColorCut(wire_index))
- usr << "You can't pulse a cut wire."
- return 1
-
- pulse(wire_index)
- return 1
-
return 0
-/*************
-* Hacking
-**************/
-
-/obj/machinery/smartfridge/proc/cut(var/wireColor)
- var/wireFlag = APCWireColorToFlag[wireColor]
- var/wireIndex = APCWireColorToIndex[wireColor]
- src.wires &= ~wireFlag
- switch(wireIndex)
- if(WIRE_SHOCK)
- src.seconds_electrified = -1
- if (WIRE_SHOOTINV)
- if(!src.shoot_inventory)
- src.shoot_inventory = 1
- if(WIRE_SCANID)
- src.locked = 1
-
-/obj/machinery/smartfridge/proc/mend(var/wireColor)
- var/wireFlag = APCWireColorToFlag[wireColor]
- var/wireIndex = APCWireColorToIndex[wireColor]
- src.wires |= wireFlag
- switch(wireIndex)
- if(WIRE_SHOCK)
- src.seconds_electrified = 0
- if (WIRE_SHOOTINV)
- src.shoot_inventory = 0
- if(WIRE_SCANID)
- src.locked = 0
-
-/obj/machinery/smartfridge/proc/pulse(var/wireColor)
- var/wireIndex = APCWireColorToIndex[wireColor]
- switch(wireIndex)
- if(WIRE_SHOCK)
- src.seconds_electrified = 30
- if(WIRE_SHOOTINV)
- src.shoot_inventory = !src.shoot_inventory
- if(WIRE_SCANID)
- src.locked = -1
-
-/obj/machinery/smartfridge/proc/isWireColorCut(var/wireColor)
- var/wireFlag = APCWireColorToFlag[wireColor]
- return ((src.wires & wireFlag) == 0)
-
-/obj/machinery/smartfridge/proc/isWireCut(var/wireIndex)
- var/wireFlag = APCIndexToFlag[wireIndex]
- return ((src.wires & wireFlag) == 0)
-
/obj/machinery/smartfridge/proc/throw_item()
var/obj/throw_item = null
var/mob/living/target = locate() in view(7,src)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 3f0b7448895..161af1bdca7 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -27,7 +27,6 @@
var/safetieson = 1
var/cycletime_left = 0
-
//The units themselves/////////////////
/obj/machinery/suit_storage_unit/standard_unit
@@ -591,13 +590,7 @@
var/locked = 1 // If locked, nothing can be taken from or added to the cycler.
var/panel_open = 0 // Hacking!
var/can_repair // If set, the cycler can repair hardsuits.
-
- // Wiring bollocks.
- var/wires = 15
var/electrified = 0
- var/const/WIRE_EXTEND = 1 // Safeties
- var/const/WIRE_SCANID = 2 // Locked status
- var/const/WIRE_SHOCK = 3 // What it says on the tin.
//Departments that the cycler can paint suits to look like.
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos")
@@ -611,12 +604,20 @@
var/obj/item/clothing/suit/space/rig/suit = null
var/obj/item/clothing/head/helmet/space/helmet = null
+ var/datum/wires/suit_storage_unit/wires = null
+
/obj/machinery/suit_cycler/New()
..()
+
+ wires = new(src)
target_department = departments[1]
target_species = species[1]
if(!target_department || !target_species) del(src)
+/obj/machinery/suit_cycler/Del()
+ del(wires) // qdel
+ wires = null
+
/obj/machinery/suit_cycler/engineering
name = "Engineering suit cycler"
model_text = "Engineering"
@@ -820,31 +821,15 @@
dat += "
\[apply customisation routine\]