diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 64951705275..00ea33f28ef 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -10,8 +10,6 @@
var/valve_open = 0
var/toggle = 1
-/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D)
-
/obj/item/device/transfer_valve/IsAssemblyHolder()
return 1
@@ -44,7 +42,7 @@
user << "The device is secured."
return
if(attached_device)
- user << "There is already an device attached to the valve, remove it first."
+ user << "There is already a device attached to the valve, remove it first."
return
user.remove_from_mob(item)
attached_device = A
@@ -114,7 +112,7 @@
return
return
-/obj/item/device/transfer_valve/process_activation(var/obj/item/device/D)
+/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D)
if(toggle)
toggle = 0
toggle_valve()
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 3d5cebfd920..f28044bff28 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -76,8 +76,6 @@
else if(stage == EMPTY && istype(I, /obj/item/device/assembly_holder))
var/obj/item/device/assembly_holder/A = I
- if(!A.secured)
- return
if(isigniter(A.a_left) == isigniter(A.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
return
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 5c76dc8b1f1..f2c1e93930a 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -24,30 +24,9 @@
var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate()
var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message
-/obj/item/device/assembly/proc/activate() //What the device does when turned on
- return
-
-/obj/item/device/assembly/proc/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
- return
-
-/obj/item/device/assembly/proc/pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
- return
-
-/obj/item/device/assembly/proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here
- return
-
-/obj/item/device/assembly/proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
- return
-
-/obj/item/device/assembly/proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var
- return
-
/obj/item/device/assembly/proc/holder_movement() //Called when the holder is moved
return
-/obj/item/device/assembly/interact(mob/user as mob) //Called when attack_self is called
- return
-
/obj/item/device/assembly/proc/describe() // Called by grenades to describe the state of the trigger (time left, etc)
return "The trigger assembly looks broken!"
@@ -59,16 +38,18 @@
return 1
-
-/obj/item/device/assembly/process_cooldown()
+//Called via spawn(10) to have it count down the cooldown var
+/obj/item/device/assembly/proc/process_cooldown()
cooldown--
- if(cooldown <= 0) return 0
+ if(cooldown <= 0)
+ return 0
spawn(10)
process_cooldown()
return 1
-/obj/item/device/assembly/pulsed(var/radio = 0)
+//Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
+/obj/item/device/assembly/proc/pulsed(var/radio = 0)
if(holder && (wires & WIRE_RECEIVE))
activate()
if(radio && (wires & WIRE_RADIO_RECEIVE))
@@ -76,48 +57,41 @@
return 1
-/obj/item/device/assembly/pulse(var/radio = 0)
+//Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
+/obj/item/device/assembly/proc/pulse(var/radio = 0)
if(holder && (wires & WIRE_PULSE))
holder.process_activation(src, 1, 0)
if(holder && (wires & WIRE_PULSE_SPECIAL))
holder.process_activation(src, 0, 1)
-
- if(istype(loc,/obj/item/weapon/grenade)) // This is a hack. Todo: Manage this better -Sayu
- var/obj/item/weapon/grenade/G = loc
- G.prime() // Adios, muchachos
-// if(radio && (wires & WIRE_RADIO_PULSE))
- //Not sure what goes here quite yet send signal?
return 1
-/obj/item/device/assembly/activate()
- if(!secured || (cooldown > 0)) return 0
+// What the device does when turned on
+/obj/item/device/assembly/proc/activate()
+ if(!secured || (cooldown > 0))
+ return 0
cooldown = 2
spawn(10)
process_cooldown()
return 1
-/obj/item/device/assembly/toggle_secure()
+/obj/item/device/assembly/proc/toggle_secure()
secured = !secured
update_icon()
return secured
-/obj/item/device/assembly/attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
- holder = new/obj/item/device/assembly_holder(get_turf(src))
- if(holder.attach(A,src,user))
- user << "You attach \the [A] to \the [src]!"
- return 1
- return 0
-
-
/obj/item/device/assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isassembly(W))
var/obj/item/device/assembly/A = W
if((!A.secured) && (!secured))
- attach_assembly(A,user)
- return
+ holder = new/obj/item/device/assembly_holder(get_turf(src))
+ holder.assemble(src,A,user)
+ user << "You attach and secure \the [A] to \the [src]!"
+ else
+ user << "Both devices must be in attachable mode to be attached together."
+ return
if(istype(W, /obj/item/weapon/screwdriver))
if(toggle_secure())
user << "\The [src] is ready!"
@@ -142,7 +116,8 @@
/obj/item/device/assembly/attack_self(mob/user as mob)
- if(!user) return 0
+ if(!user)
+ return 0
user.set_machine(src)
interact(user)
return 1
@@ -151,40 +126,3 @@
/obj/item/device/assembly/interact(mob/user as mob)
return //HTML MENU FOR WIRES GOES HERE
-/*
- var/small_icon_state = null//If this obj will go inside the assembly use this for icons
- var/list/small_icon_state_overlays = null//Same here
- var/obj/holder = null
- var/cooldown = 0//To prevent spam
-
- proc
- Activate()//Called when this assembly is pulsed by another one
- Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
- Attach_Holder(var/obj/H, var/mob/user)//Called when an assembly holder attempts to attach, sets src's loc in here
-
-
- Activate()
- if(cooldown > 0)
- return 0
- cooldown = 2
- spawn(10)
- Process_cooldown()
- //Rest of code here
- return 0
-
-
- Process_cooldown()
- cooldown--
- if(cooldown <= 0) return 0
- spawn(10)
- Process_cooldown()
- return 1
-
-
- Attach_Holder(var/obj/H, var/mob/user)
- if(!H) return 0
- if(!H.IsAssemblyHolder()) return 0
- //Remember to have it set its loc somewhere in here
-
-
-*/
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index 9cbf195ef97..755074c2855 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -87,8 +87,6 @@
/obj/item/weapon/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb
var/obj/item/device/assembly_holder/S = W
var/mob/M = user
- if(!S.secured) //Check if the assembly is secured
- return
if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
return
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index 3bd27af3549..1ef63734a9f 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -9,37 +9,29 @@
throw_speed = 2
throw_range = 7
- var/secured = 0
var/obj/item/device/assembly/a_left = null
var/obj/item/device/assembly/a_right = null
-/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
- return
-
-/obj/item/device/assembly_holder/proc/process_activation(var/obj/item/device/D)
- return
-
/obj/item/device/assembly_holder/IsAssemblyHolder()
return 1
-/obj/item/device/assembly_holder/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
- if((!D)||(!D2)) return 0
- if((!isassembly(D))||(!isassembly(D2))) return 0
- if((D:secured)||(D2:secured)) return 0
- if(user)
- user.remove_from_mob(D)
- user.remove_from_mob(D2)
- D:holder = src
- D2:holder = src
- D.loc = src
- D2.loc = src
- a_left = D
- a_right = D2
- name = "[D.name]-[D2.name] assembly"
+/obj/item/device/assembly_holder/proc/assemble(var/obj/item/device/assembly/A, var/obj/item/device/assembly/A2, var/mob/user)
+ attach(A,user)
+ attach(A2,user)
+ name = "[A.name]-[A2.name] assembly"
update_icon()
- return 1
+/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/assembly/A, var/mob/user)
+ if(user)
+ user.remove_from_mob(A)
+ A.holder = src
+ A.loc = src
+ A.toggle_secure()
+ if(!a_left)
+ a_left = A
+ else
+ a_right = A
/obj/item/device/assembly_holder/update_icon()
overlays.Cut()
@@ -54,16 +46,6 @@
if(master)
master.update_icon()
-
-/obj/item/device/assembly_holder/examine(mob/user)
- ..()
- if(secured)
- user << "\The [src] is secured and ready to be used."
- else
- user << "\The [src] can be attached to other things."
-
-
-
/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj)
if(a_left)
a_left.HasProximity(AM)
@@ -88,7 +70,7 @@
if(a_left && a_right)
a_left.holder_movement()
a_right.holder_movement()
- return
+ return
/obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
if(a_left && a_right)
@@ -97,55 +79,39 @@
..()
return
-
/obj/item/device/assembly_holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/screwdriver))
- if(!a_left || !a_right)
- user << "BUG:Assembly part missing, please report this!"
- return
- a_left.toggle_secure()
- a_right.toggle_secure()
- secured = !secured
- if(secured)
- user << "\The [src] is ready!"
- else
- user << "\The [src] can now be taken apart!"
- update_icon()
- return
+ var/turf/T = get_turf(src)
+ if(!T)
+ return 0
+ if(a_left)
+ a_left.holder = null
+ a_left.loc = T
+ if(a_right)
+ a_right.holder = null
+ a_right.loc = T
+ qdel(src)
else
..()
- return
-
/obj/item/device/assembly_holder/attack_self(mob/user as mob)
src.add_fingerprint(user)
- if(src.secured)
- if(!a_left || !a_right)
- user << "Assembly part missing!"
- return
- if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code
- switch(alert("Which side would you like to use?",,"Left","Right"))
- if("Left") a_left.attack_self(user)
- if("Right") a_right.attack_self(user)
- return
- else
- a_left.attack_self(user)
- a_right.attack_self(user)
+ if(!a_left || !a_right)
+ user << "Assembly part missing!"
+ return
+ if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code
+ switch(alert("Which side would you like to use?",,"Left","Right"))
+ if("Left") a_left.attack_self(user)
+ if("Right") a_right.attack_self(user)
+ return
else
- var/turf/T = get_turf(src)
- if(!T) return 0
- if(a_left)
- a_left:holder = null
- a_left.loc = T
- if(a_right)
- a_right:holder = null
- a_right.loc = T
- qdel(src)
- return
+ a_left.attack_self(user)
+ a_right.attack_self(user)
-/obj/item/device/assembly_holder/process_activation(var/obj/D, var/normal = 1, var/special = 1)
- if(!D) return 0
+/obj/item/device/assembly_holder/proc/process_activation(var/obj/D, var/normal = 1, var/special = 1)
+ if(!D)
+ return 0
if((normal) && (a_right) && (a_left))
if(a_right != D)
a_right.pulsed(0)