diff --git a/baystation12.dme b/baystation12.dme
index 30fd134ba5..e2e743d39a 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -170,6 +170,7 @@
#include "code\datums\wires\autolathe.dm"
#include "code\datums\wires\camera.dm"
#include "code\datums\wires\mulebot.dm"
+#include "code\datums\wires\particle_accelerator.dm"
#include "code\datums\wires\robot.dm"
#include "code\datums\wires\smartfridge.dm"
#include "code\datums\wires\suit_storage_unit.dm"
diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm
new file mode 100644
index 0000000000..8356238692
--- /dev/null
+++ b/code/datums/wires/particle_accelerator.dm
@@ -0,0 +1,52 @@
+/datum/wires/particle_acc/control_box
+ wire_count = 5
+ holder_type = /obj/machinery/particle_accelerator/control_box
+
+var/const/PARTICLE_TOGGLE_WIRE = 1 // Toggles whether the PA is on or not.
+var/const/PARTICLE_STRENGTH_WIRE = 2 // Determines the strength of the PA.
+var/const/PARTICLE_INTERFACE_WIRE = 4 // Determines the interface showing up.
+var/const/PARTICLE_LIMIT_POWER_WIRE = 8 // Determines how strong the PA can be.
+//var/const/PARTICLE_NOTHING_WIRE = 16 // Blank wire
+
+/datum/wires/particle_acc/control_box/CanUse(var/mob/living/L)
+ var/obj/machinery/particle_accelerator/control_box/C = holder
+ if(C.construction_state == 2)
+ return 1
+ return 0
+
+/datum/wires/particle_acc/control_box/UpdatePulsed(var/index)
+ var/obj/machinery/particle_accelerator/control_box/C = holder
+ switch(index)
+
+ if(PARTICLE_TOGGLE_WIRE)
+ C.toggle_power()
+
+ if(PARTICLE_STRENGTH_WIRE)
+ C.add_strength()
+
+ if(PARTICLE_INTERFACE_WIRE)
+ C.interface_control = !C.interface_control
+
+ if(PARTICLE_LIMIT_POWER_WIRE)
+ C.visible_message("\icon[C][C] makes a large whirring noise.")
+
+/datum/wires/particle_acc/control_box/UpdateCut(var/index, var/mended)
+ var/obj/machinery/particle_accelerator/control_box/C = holder
+ switch(index)
+
+ if(PARTICLE_TOGGLE_WIRE)
+ if(C.active == !mended)
+ C.toggle_power()
+
+ if(PARTICLE_STRENGTH_WIRE)
+
+ for(var/i = 1; i < 3; i++)
+ C.remove_strength()
+
+ if(PARTICLE_INTERFACE_WIRE)
+ C.interface_control = mended
+
+ if(PARTICLE_LIMIT_POWER_WIRE)
+ C.strength_upper_limit = (mended ? 2 : 3)
+ if(C.strength_upper_limit < C.strength)
+ C.remove_strength()
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 0ae6a5c3bb..5b30c000c7 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -14,11 +14,15 @@
construction_state = 0
active = 0
dir = 1
+ var/strength_upper_limit = 2
+ var/interface_control = 1
var/list/obj/structure/particle_accelerator/connected_parts
var/assembled = 0
var/parts = null
+ var/datum/wires/particle_acc/control_box/wires = null
/obj/machinery/particle_accelerator/control_box/New()
+ wires = new(src)
connected_parts = list()
active_power_usage = initial(active_power_usage) * (strength + 1)
..()
@@ -27,6 +31,8 @@
/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user as mob)
if(construction_state >= 3)
interact(user)
+ else if(construction_state == 2) // Wires exposed
+ wires.Interact(user)
/obj/machinery/particle_accelerator/control_box/update_state()
if(construction_state < 3)
@@ -79,49 +85,51 @@
usr << browse(null, "window=pacontrol")
usr.unset_machine()
return
+
if(href_list["togglep"])
- src.toggle_power()
- investigate_log("turned [active?"ON":"OFF"] by [usr.key]","singulo")
- if (active)
- message_admins("PA Control Computer turned ON by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1)
- log_game("PA Control Computer turned ON by [usr.ckey]([usr]) in ([x],[y],[z])")
+ if(!wires.IsIndexCut(PARTICLE_TOGGLE_WIRE))
+ src.toggle_power()
else if(href_list["scan"])
src.part_scan()
+
else if(href_list["strengthup"])
- var/old_strength = strength
- strength++
- if(strength > 2)
- strength = 2
- else
- message_admins("PA Control Computer increased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1)
- log_game("PA Control Computer increased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])")
- investigate_log("increased to [strength] by [usr.key]","singulo")
- for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength = strength
- part.update_icon()
-
- if (strength != old_strength)
- active_power_usage = initial(active_power_usage) * (strength + 1)
- use_power(0) //update power usage
+ if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE))
+ add_strength()
else if(href_list["strengthdown"])
- var/old_strength = strength
- strength--
- if(strength < 0)
- strength = 0
- else
- investigate_log("decreased to [strength] by [usr.key]","singulo")
- for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength = strength
- part.update_icon()
-
- if (strength != old_strength)
- active_power_usage = initial(active_power_usage) * (strength + 1)
- use_power(0) //update power usage
+ if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE))
+ remove_strength()
+
src.updateDialog()
src.update_icon()
return
+/obj/machinery/particle_accelerator/control_box/proc/strength_change()
+ for(var/obj/structure/particle_accelerator/part in connected_parts)
+ part.strength = strength
+ part.update_icon()
+
+/obj/machinery/particle_accelerator/control_box/proc/add_strength(var/s)
+ if(assembled)
+ strength++
+ if(strength > strength_upper_limit)
+ strength = strength_upper_limit
+ else
+ message_admins("PA Control Computer increased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1)
+ log_game("PA Control Computer increased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])")
+ investigate_log("increased to [strength] by [usr.key]","singulo")
+ strength_change()
+
+/obj/machinery/particle_accelerator/control_box/proc/remove_strength(var/s)
+ if(assembled)
+ strength--
+ if(strength < 0)
+ strength = 0
+ else
+ message_admins("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1)
+ log_game("PA Control Computer decreased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])")
+ investigate_log("decreased to [strength] by [usr.key]","singulo")
+ strength_change()
/obj/machinery/particle_accelerator/control_box/power_change()
..()
@@ -198,6 +206,9 @@
/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
src.active = !src.active
+ investigate_log("turned [active?"ON":"OFF"] by [usr ? usr.key : "outside forces"]","singulo")
+ message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1)
+ log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr.ckey]([usr]) in ([x],[y],[z])")
if(src.active)
update_use_power(2)
for(var/obj/structure/particle_accelerator/part in connected_parts)
@@ -241,4 +252,4 @@
user << browse(dat, "window=pacontrol;size=420x500")
onclose(user, "pacontrol")
- return
\ No newline at end of file
+ return