diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 1a1bd9a463..6a055bdfc1 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -243,6 +243,7 @@
var/obj/item/device/multitool/M = W
M.connecting = src
user << "You load connection data from [src] to [M]."
+ M.update_icon()
return
else
..()
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 002da7bc53..1ab85f34b7 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -168,6 +168,7 @@
dat += "
MULTITOOL BUFFER: [P.buffer] ([P.buffer.id]) \[Link\] \[Flush\]"
else
dat += "
MULTITOOL BUFFER: \[Add Machine\]"
+ P.update_icon()
dat += ""
temp = ""
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 9587984177..747b0d442b 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -23,119 +23,119 @@
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
- proc/activate() //What the device does when turned on
- return
+/obj/item/device/assembly/proc/activate() //What the device does when turned on
+ return
- 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/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
+ return
- 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/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
- proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here
- return
+/obj/item/device/assembly/proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here
+ return
- proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
- return
+/obj/item/device/assembly/proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
+ return
- proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var
- return
+/obj/item/device/assembly/proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var
+ return
- proc/holder_movement() //Called when the holder is moved
- return
+/obj/item/device/assembly/proc/holder_movement() //Called when the holder is moved
+ return
- interact(mob/user as mob) //Called when attack_self is called
- return
+/obj/item/device/assembly/interact(mob/user as mob) //Called when attack_self is called
+ return
- process_cooldown()
- cooldown--
- if(cooldown <= 0) return 0
- spawn(10)
- process_cooldown()
- return 1
+/obj/item/device/assembly/process_cooldown()
+ cooldown--
+ if(cooldown <= 0) return 0
+ spawn(10)
+ process_cooldown()
+ return 1
- pulsed(var/radio = 0)
- if(holder && (wires & WIRE_RECEIVE))
- activate()
- if(radio && (wires & WIRE_RADIO_RECEIVE))
- activate()
- return 1
+/obj/item/device/assembly/pulsed(var/radio = 0)
+ if(holder && (wires & WIRE_RECEIVE))
+ activate()
+ if(radio && (wires & WIRE_RADIO_RECEIVE))
+ activate()
+ return 1
- 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)
+/obj/item/device/assembly/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(radio && (wires & WIRE_RADIO_PULSE))
- //Not sure what goes here quite yet send signal?
+ //Not sure what goes here quite yet send signal?
+ return 1
+
+
+/obj/item/device/assembly/activate()
+ if(!secured || (cooldown > 0)) return 0
+ cooldown = 2
+ spawn(10)
+ process_cooldown()
+ return 1
+
+
+/obj/item/device/assembly/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))
+ to_chat(user, "You attach \the [A] to \the [src]!")
return 1
+ return 0
- activate()
- if(!secured || (cooldown > 0)) return 0
- cooldown = 2
- spawn(10)
- process_cooldown()
- return 1
-
-
- toggle_secure()
- secured = !secured
- update_icon()
- return secured
-
-
- 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 << "\blue You attach \the [A] to \the [src]!"
- return 1
- return 0
-
-
- 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
- if(isscrewdriver(W))
- if(toggle_secure())
- user << "\blue \The [src] is ready!"
- else
- user << "\blue \The [src] can now be attached!"
+/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
- ..()
+ if(isscrewdriver(W))
+ if(toggle_secure())
+ to_chat(user, "\The [src] is ready!")
+ else
+ to_chat(user, "\The [src] can now be attached!")
return
+ ..()
+ return
- process()
- processing_objects.Remove(src)
- return
+/obj/item/device/assembly/process()
+ processing_objects.Remove(src)
+ return
- examine(mob/user)
- ..(user)
- if((in_range(src, user) || loc == user))
- if(secured)
- user << "\The [src] is ready!"
- else
- user << "\The [src] can be attached!"
- return
+/obj/item/device/assembly/examine(mob/user)
+ ..(user)
+ if((in_range(src, user) || loc == user))
+ if(secured)
+ to_chat(user, "\The [src] is ready!")
+ else
+ to_chat(user, "\The [src] can be attached!")
+ return
- attack_self(mob/user as mob)
- if(!user) return 0
- user.set_machine(src)
- interact(user)
- return 1
+/obj/item/device/assembly/attack_self(mob/user as mob)
+ if(!user) return 0
+ user.set_machine(src)
+ interact(user)
+ return 1
- interact(mob/user as mob)
- return //HTML MENU FOR WIRES GOES HERE
+/obj/item/device/assembly/interact(mob/user as mob)
+ return //HTML MENU FOR WIRES GOES HERE
/obj/item/device/assembly/nano_host()
if(istype(loc, /obj/item/device/assembly_holder))
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index a614135f22..1bbf0597e6 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -14,201 +14,201 @@
var/obj/item/device/assembly/a_right = null
var/obj/special_assembly = null
- proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
- return
+/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
+ return
- proc/attach_special(var/obj/O, var/mob/user)
- return
+/obj/item/device/assembly_holder/proc/attach_special(var/obj/O, var/mob/user)
+ return
- proc/process_activation(var/obj/item/device/D)
- return
+/obj/item/device/assembly_holder/proc/process_activation(var/obj/item/device/D)
+ return
- proc/detached()
- return
+/obj/item/device/assembly_holder/proc/detached()
+ return
- IsAssemblyHolder()
- return 1
+/obj/item/device/assembly_holder/IsAssemblyHolder()
+ return 1
- 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"
- update_icon()
- usr.put_in_hands(src)
+/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"
+ update_icon()
+ usr.put_in_hands(src)
- return 1
+ return 1
- attach_special(var/obj/O, var/mob/user)
- if(!O) return
- if(!O.IsSpecialAssembly()) return 0
+/obj/item/device/assembly_holder/attach_special(var/obj/O, var/mob/user)
+ if(!O) return
+ if(!O.IsSpecialAssembly()) return 0
/* if(O:Attach_Holder())
- special_assembly = O
- update_icon()
- src.name = "[a_left.name] [a_right.name] [special_assembly.name] assembly"
+ special_assembly = O
+ update_icon()
+ src.name = "[a_left.name] [a_right.name] [special_assembly.name] assembly"
*/
- return
+ return
- update_icon()
- overlays.Cut()
- if(a_left)
- overlays += "[a_left.icon_state]_left"
- for(var/O in a_left.attached_overlays)
- overlays += "[O]_l"
- if(a_right)
- src.overlays += "[a_right.icon_state]_right"
- for(var/O in a_right.attached_overlays)
- overlays += "[O]_r"
- if(master)
- master.update_icon()
+/obj/item/device/assembly_holder/update_icon()
+ overlays.Cut()
+ if(a_left)
+ overlays += "[a_left.icon_state]_left"
+ for(var/O in a_left.attached_overlays)
+ overlays += "[O]_l"
+ if(a_right)
+ src.overlays += "[a_right.icon_state]_right"
+ for(var/O in a_right.attached_overlays)
+ overlays += "[O]_r"
+ if(master)
+ master.update_icon()
/* if(special_assembly)
- special_assembly.update_icon()
- if(special_assembly:small_icon_state)
- src.overlays += special_assembly:small_icon_state
- for(var/O in special_assembly:small_icon_state_overlays)
- src.overlays += O
+ special_assembly.update_icon()
+ if(special_assembly:small_icon_state)
+ src.overlays += special_assembly:small_icon_state
+ for(var/O in special_assembly:small_icon_state_overlays)
+ src.overlays += O
*/
- examine(mob/user)
- ..(user)
- if ((in_range(src, user) || src.loc == user))
- if (src.secured)
- user << "\The [src] is ready!"
- else
- user << "\The [src] can be attached!"
- return
+/obj/item/device/assembly_holder/examine(mob/user)
+ ..(user)
+ if ((in_range(src, user) || src.loc == user))
+ if (src.secured)
+ to_chat(user, "\The [src] is ready!")
+ else
+ to_chat(user, "\The [src] can be attached!")
+ return
- HasProximity(atom/movable/AM as mob|obj)
- if(a_left)
- a_left.HasProximity(AM)
- if(a_right)
- a_right.HasProximity(AM)
- if(special_assembly)
- special_assembly.HasProximity(AM)
+/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj)
+ if(a_left)
+ a_left.HasProximity(AM)
+ if(a_right)
+ a_right.HasProximity(AM)
+ if(special_assembly)
+ special_assembly.HasProximity(AM)
- Crossed(atom/movable/AM as mob|obj)
- if(a_left)
- a_left.Crossed(AM)
- if(a_right)
- a_right.Crossed(AM)
- if(special_assembly)
- special_assembly.Crossed(AM)
+/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj)
+ if(a_left)
+ a_left.Crossed(AM)
+ if(a_right)
+ a_right.Crossed(AM)
+ if(special_assembly)
+ special_assembly.Crossed(AM)
- on_found(mob/finder as mob)
- if(a_left)
- a_left.on_found(finder)
- if(a_right)
- a_right.on_found(finder)
- if(special_assembly)
- if(istype(special_assembly, /obj/item))
- var/obj/item/S = special_assembly
- S.on_found(finder)
+/obj/item/device/assembly_holder/on_found(mob/finder as mob)
+ if(a_left)
+ a_left.on_found(finder)
+ if(a_right)
+ a_right.on_found(finder)
+ if(special_assembly)
+ if(istype(special_assembly, /obj/item))
+ var/obj/item/S = special_assembly
+ S.on_found(finder)
- Move()
- ..()
- if(a_left && a_right)
- a_left.holder_movement()
- a_right.holder_movement()
+/obj/item/device/assembly_holder/Move()
+ ..()
+ if(a_left && a_right)
+ a_left.holder_movement()
+ a_right.holder_movement()
// if(special_assembly)
// special_assembly:holder_movement()
- return
+ return
- attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
- if(a_left && a_right)
- a_left.holder_movement()
- a_right.holder_movement()
+/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)
+ a_left.holder_movement()
+ a_right.holder_movement()
// if(special_assembly)
// special_assembly:Holder_Movement()
- ..()
- return
+ ..()
+ return
- attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(isscrewdriver(W))
- if(!a_left || !a_right)
- user << "\red BUG:Assembly part missing, please report this!"
- return
- a_left.toggle_secure()
- a_right.toggle_secure()
- secured = !secured
- if(secured)
- user << "\blue \The [src] is ready!"
- else
- user << "\blue \The [src] can now be taken apart!"
- update_icon()
+/obj/item/device/assembly_holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(isscrewdriver(W))
+ if(!a_left || !a_right)
+ to_chat(user, " BUG:Assembly part missing, please report this!")
return
- else if(W.IsSpecialAssembly())
- attach_special(W, user)
+ a_left.toggle_secure()
+ a_right.toggle_secure()
+ secured = !secured
+ if(secured)
+ to_chat(user, "\The [src] is ready!")
else
- ..()
+ to_chat(user, "\The [src] can now be taken apart!")
+ update_icon()
return
+ else if(W.IsSpecialAssembly())
+ attach_special(W, user)
+ else
+ ..()
+ return
- attack_self(mob/user as mob)
- src.add_fingerprint(user)
- if(src.secured)
- if(!a_left || !a_right)
- user << "\red 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
- if(!istype(a_left,/obj/item/device/assembly/igniter))
- a_left.attack_self(user)
- if(!istype(a_right,/obj/item/device/assembly/igniter))
- a_right.attack_self(user)
+/obj/item/device/assembly_holder/attack_self(mob/user as mob)
+ src.add_fingerprint(user)
+ if(src.secured)
+ if(!a_left || !a_right)
+ to_chat(user, " BUG:Assembly part missing, please report this!")
+ 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
- spawn(0)
- qdel(src)
- return
+ if(!istype(a_left,/obj/item/device/assembly/igniter))
+ a_left.attack_self(user)
+ if(!istype(a_right,/obj/item/device/assembly/igniter))
+ a_right.attack_self(user)
+ 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
+ spawn(0)
+ qdel(src)
+ return
- process_activation(var/obj/D, var/normal = 1, var/special = 1)
- if(!D) return 0
- if(!secured)
- visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
- if((normal) && (a_right) && (a_left))
- if(a_right != D)
- a_right.pulsed(0)
- if(a_left != D)
- a_left.pulsed(0)
- if(master)
- master.receive_signal()
+/obj/item/device/assembly_holder/process_activation(var/obj/D, var/normal = 1, var/special = 1)
+ if(!D) return 0
+ if(!secured)
+ visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
+ if((normal) && (a_right) && (a_left))
+ if(a_right != D)
+ a_right.pulsed(0)
+ if(a_left != D)
+ a_left.pulsed(0)
+ if(master)
+ master.receive_signal()
// if(special && special_assembly)
// if(!special_assembly == D)
// special_assembly.dothings()
- return 1
+ return 1
/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking)
@@ -242,36 +242,36 @@
loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure
- detached()
- loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure
- ..()
+/obj/item/device/assembly_holder/timer_igniter/detached()
+ loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure
+ ..()
- verb/configure()
- set name = "Set Timer"
- set category = "Object"
- set src in usr
+/obj/item/device/assembly_holder/timer_igniter/verb/configure()
+ set name = "Set Timer"
+ set category = "Object"
+ set src in usr
- if ( !(usr.stat || usr.restrained()) )
- var/obj/item/device/assembly_holder/holder
- if(istype(src,/obj/item/weapon/grenade/chem_grenade))
- var/obj/item/weapon/grenade/chem_grenade/gren = src
- holder=gren.detonator
- var/obj/item/device/assembly/timer/tmr = holder.a_left
- if(!istype(tmr,/obj/item/device/assembly/timer))
- tmr = holder.a_right
- if(!istype(tmr,/obj/item/device/assembly/timer))
- usr << "This detonator has no timer."
- return
+ if ( !(usr.stat || usr.restrained()) )
+ var/obj/item/device/assembly_holder/holder
+ if(istype(src,/obj/item/weapon/grenade/chem_grenade))
+ var/obj/item/weapon/grenade/chem_grenade/gren = src
+ holder=gren.detonator
+ var/obj/item/device/assembly/timer/tmr = holder.a_left
+ if(!istype(tmr,/obj/item/device/assembly/timer))
+ tmr = holder.a_right
+ if(!istype(tmr,/obj/item/device/assembly/timer))
+ to_chat(usr, "This detonator has no timer.")
+ return
- if(tmr.timing)
- usr << "Clock is ticking already."
- else
- var/ntime = input("Enter desired time in seconds", "Time", "5") as num
- if (ntime>0 && ntime<1000)
- tmr.time = ntime
- name = initial(name) + "([tmr.time] secs)"
- usr << "Timer set to [tmr.time] seconds."
- else
- usr << "Timer can't be [ntime<=0?"negative":"more than 1000 seconds"]."
+ if(tmr.timing)
+ to_chat(usr, "Clock is ticking already.")
else
- usr << "You cannot do this while [usr.stat?"unconscious/dead":"restrained"]."
+ var/ntime = input("Enter desired time in seconds", "Time", "5") as num
+ if (ntime>0 && ntime<1000)
+ tmr.time = ntime
+ name = initial(name) + "([tmr.time] secs)"
+ to_chat(usr, "Timer set to [tmr.time] seconds.")
+ else
+ to_chat(usr, "Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].")
+ else
+ to_chat(usr, "You cannot do this while [usr.stat?"unconscious/dead":"restrained"].")
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index fc34669f3d..c7b0b619ba 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -2,36 +2,36 @@
name = "igniter"
desc = "A small electronic device able to ignite combustable substances."
icon_state = "igniter"
- origin_tech = list(TECH_MAGNET = 1)
- matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
secured = 1
wires = WIRE_RECEIVE
+/obj/item/device/assembly/igniter/activate()
+ if(!..()) return 0//Cooldown check
+
+ if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
+ var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
+ grenade.prime()
+ else
+ var/turf/location = get_turf(loc)
+ if(location)
+ location.hotspot_expose(1000,1000)
+ if (istype(src.loc,/obj/item/device/assembly_holder))
+ if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
+ var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
+ if (tank && tank.modded)
+ tank.explode()
+
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+
+ return 1
+
+
+/obj/item/device/assembly/igniter/attack_self(mob/user as mob)
activate()
- if(!..()) return 0//Cooldown check
-
- if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
- var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
- grenade.prime()
- else
- var/turf/location = get_turf(loc)
- if(location)
- location.hotspot_expose(1000,1000)
- if (istype(src.loc,/obj/item/device/assembly_holder))
- if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
- var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
- if (tank && tank.modded)
- tank.explode()
-
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
-
- return 1
-
-
- attack_self(mob/user as mob)
- activate()
- add_fingerprint(user)
- return
\ No newline at end of file
+ add_fingerprint(user)
+ return
\ No newline at end of file
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index f448ce35a1..63c781452c 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -15,145 +15,141 @@
var/visible = 0
var/obj/effect/beam/i_beam/first = null
- proc
- trigger_beam()
-
-
- activate()
+/obj/item/device/assembly/infra/activate()
if(!..()) return 0//Cooldown check
on = !on
update_icon()
return 1
- toggle_secure()
- secured = !secured
- if(secured)
- processing_objects.Add(src)
- else
- on = 0
- if(first) qdel(first)
- processing_objects.Remove(src)
- update_icon()
- return secured
-
-
+/obj/item/device/assembly/infra/toggle_secure()
+ secured = !secured
+ if(secured)
+ processing_objects.Add(src)
+ else
+ on = 0
+ if(first) qdel(first)
+ processing_objects.Remove(src)
update_icon()
- overlays.Cut()
- attached_overlays = list()
- if(on)
- overlays += "infrared_on"
- attached_overlays += "infrared_on"
-
- if(holder)
- holder.update_icon()
- return
+ return secured
- process()//Old code
- if(!on)
- if(first)
- qdel(first)
- return
+/obj/item/device/assembly/infra/update_icon()
+ overlays.Cut()
+ attached_overlays = list()
+ if(on)
+ overlays += "infrared_on"
+ attached_overlays += "infrared_on"
- if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))))
- var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) )
- I.master = src
- I.density = 1
- I.set_dir(dir)
- step(I, I.dir)
- if(I)
- I.density = 0
- first = I
- I.vis_spread(visible)
- spawn(0)
- if(I)
- //world << "infra: setting limit"
- I.limit = 8
- //world << "infra: processing beam \ref[I]"
- I.process()
- return
- return
+ if(holder)
+ holder.update_icon()
+ return
- attack_hand()
- qdel(first)
- ..()
- return
-
-
- Move()
- var/t = dir
- ..()
- set_dir(t)
- qdel(first)
- return
-
-
- holder_movement()
- if(!holder) return 0
-// set_dir(holder.dir)
- qdel(first)
- return 1
-
-
- trigger_beam()
- if((!secured)||(!on)||(cooldown > 0)) return 0
- pulse(0)
- if(!holder)
- visible_message("\icon[src] *beep* *beep*")
- cooldown = 2
- spawn(10)
- process_cooldown()
- return
-
-
- interact(mob/user as mob)//TODO: change this this to the wire control panel
- if(!secured) return
- user.set_machine(src)
- var/dat = text("Infrared Laser\nStatus: []
\nVisibility: []
\n", (on ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src)))
- dat += "
Refresh"
- dat += "
Close"
- user << browse(dat, "window=infra")
- onclose(user, "infra")
- return
-
-
- Topic(href, href_list)
- if(..()) return 1
- if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
- usr << browse(null, "window=infra")
- onclose(usr, "infra")
+/obj/item/device/assembly/infra/process()//Old code
+ if(!on)
+ if(first)
+ qdel(first)
return
- if(href_list["state"])
- on = !(on)
- update_icon()
-
- if(href_list["visible"])
- visible = !(visible)
+ if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))))
+ var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) )
+ I.master = src
+ I.density = 1
+ I.set_dir(dir)
+ step(I, I.dir)
+ if(I)
+ I.density = 0
+ first = I
+ I.vis_spread(visible)
spawn(0)
- if(first)
- first.vis_spread(visible)
+ if(I)
+ //world << "infra: setting limit"
+ I.limit = 8
+ //world << "infra: processing beam \ref[I]"
+ I.process()
+ return
+ return
- if(href_list["close"])
- usr << browse(null, "window=infra")
- return
- if(usr)
- attack_self(usr)
+/obj/item/device/assembly/infra/attack_hand()
+ qdel(first)
+ ..()
+ return
+
+/obj/item/device/assembly/infra/Move()
+ var/t = dir
+ ..()
+ set_dir(t)
+ qdel(first)
+ return
+
+
+/obj/item/device/assembly/infra/holder_movement()
+ if(!holder) return 0
+// set_dir(holder.dir)
+ qdel(first)
+ return 1
+
+
+/obj/item/device/assembly/infra/proc/trigger_beam()
+ if((!secured)||(!on)||(cooldown > 0)) return 0
+ pulse(0)
+ if(!holder)
+ visible_message("\icon[src] *beep* *beep*")
+ cooldown = 2
+ spawn(10)
+ process_cooldown()
+ return
+
+
+/obj/item/device/assembly/infra/interact(mob/user as mob)//TODO: change this this to the wire control panel
+ if(!secured) return
+ user.set_machine(src)
+ var/dat = text("Infrared Laser\nStatus: []
\nVisibility: []
\n", (on ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src)))
+ dat += "
Refresh"
+ dat += "
Close"
+ user << browse(dat, "window=infra")
+ onclose(user, "infra")
+ return
+
+
+/obj/item/device/assembly/infra/Topic(href, href_list, state = deep_inventory_state)
+ if(..()) return 1
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=infra")
+ onclose(usr, "infra")
return
+ if(href_list["state"])
+ on = !(on)
+ update_icon()
- verb/rotate()//This could likely be better
- set name = "Rotate Infrared Laser"
- set category = "Object"
- set src in usr
+ if(href_list["visible"])
+ visible = !(visible)
+ spawn(0)
+ if(first)
+ first.vis_spread(visible)
- set_dir(turn(dir, 90))
+ if(href_list["close"])
+ usr << browse(null, "window=infra")
return
+ if(usr)
+ attack_self(usr)
+
+ return
+
+
+/obj/item/device/assembly/infra/verb/rotate()//This could likely be better
+ set name = "Rotate Infrared Laser"
+ set category = "Object"
+ set src in usr
+
+ set_dir(turn(dir, 90))
+ return
+
/***************************IBeam*********************************/
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index b731905e5f..9daceb384a 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -7,107 +7,107 @@
var/armed = 0
- examine(mob/user)
- ..(user)
- if(armed)
- user << "It looks like it's armed."
+/obj/item/device/assembly/mousetrap/examine(mob/user)
+ ..(user)
+ if(armed)
+ to_chat(user, "It looks like it's armed.")
+/obj/item/device/assembly/mousetrap/update_icon()
+ if(armed)
+ icon_state = "mousetraparmed"
+ else
+ icon_state = "mousetrap"
+ if(holder)
+ holder.update_icon()
+
+/obj/item/device/assembly/mousetrap/proc/triggered(mob/target as mob, var/type = "feet")
+ if(!armed)
+ return
+ var/obj/item/organ/external/affecting = null
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ switch(type)
+ if("feet")
+ if(!H.shoes)
+ affecting = H.get_organ(pick("l_leg", "r_leg"))
+ H.Weaken(3)
+ if("l_hand", "r_hand")
+ if(!H.gloves)
+ affecting = H.get_organ(type)
+ H.Stun(3)
+ if(affecting)
+ if(affecting.take_damage(1, 0))
+ H.UpdateDamageIcon()
+ H.updatehealth()
+ else if(ismouse(target))
+ var/mob/living/simple_animal/mouse/M = target
+ visible_message("\red SPLAT!")
+ M.splat()
+ playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
+ layer = MOB_LAYER - 0.2
+ armed = 0
update_icon()
- if(armed)
- icon_state = "mousetraparmed"
- else
- icon_state = "mousetrap"
- if(holder)
- holder.update_icon()
+ pulse(0)
- proc/triggered(mob/target as mob, var/type = "feet")
- if(!armed)
+
+/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
+ if(!armed)
+ user << "You arm [src]."
+ else
+ if((CLUMSY in user.mutations) && prob(50))
+ var/which_hand = "l_hand"
+ if(!user.hand)
+ which_hand = "r_hand"
+ triggered(user, which_hand)
+ user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \
+ "You accidentally trigger [src]!")
return
- var/obj/item/organ/external/affecting = null
- if(ishuman(target))
- var/mob/living/carbon/human/H = target
- switch(type)
- if("feet")
- if(!H.shoes)
- affecting = H.get_organ(pick("l_leg", "r_leg"))
- H.Weaken(3)
- if("l_hand", "r_hand")
- if(!H.gloves)
- affecting = H.get_organ(type)
- H.Stun(3)
- if(affecting)
- if(affecting.take_damage(1, 0))
- H.UpdateDamageIcon()
- H.updatehealth()
- else if(ismouse(target))
- var/mob/living/simple_animal/mouse/M = target
- visible_message("\red SPLAT!")
- M.splat()
- playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
- layer = MOB_LAYER - 0.2
- armed = 0
- update_icon()
- pulse(0)
+ to_chat(user, "You disarm [src].")
+ armed = !armed
+ update_icon()
+ playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
- attack_self(mob/living/user as mob)
- if(!armed)
- user << "You arm [src]."
- else
- if((CLUMSY in user.mutations) && prob(50))
- var/which_hand = "l_hand"
- if(!user.hand)
- which_hand = "r_hand"
- triggered(user, which_hand)
- user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \
- "You accidentally trigger [src]!")
- return
- user << "You disarm [src]."
- armed = !armed
- update_icon()
- playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
+/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
+ if(armed)
+ if((CLUMSY in user.mutations) && prob(50))
+ var/which_hand = "l_hand"
+ if(!user.hand)
+ which_hand = "r_hand"
+ triggered(user, which_hand)
+ user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \
+ "You accidentally trigger [src]!")
+ return
+ ..()
- attack_hand(mob/living/user as mob)
- if(armed)
- if((CLUMSY in user.mutations) && prob(50))
- var/which_hand = "l_hand"
- if(!user.hand)
- which_hand = "r_hand"
- triggered(user, which_hand)
- user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \
- "You accidentally trigger [src]!")
- return
- ..()
+/obj/item/device/assembly/mousetrap/Crossed(AM as mob|obj)
+ if(armed)
+ if(ishuman(AM))
+ var/mob/living/carbon/H = AM
+ if(H.m_intent == "run")
+ triggered(H)
+ H.visible_message("[H] accidentally steps on [src].", \
+ "You accidentally step on [src]")
+ if(ismouse(AM))
+ triggered(AM)
+ ..()
- Crossed(AM as mob|obj)
- if(armed)
- if(ishuman(AM))
- var/mob/living/carbon/H = AM
- if(H.m_intent == "run")
- triggered(H)
- H.visible_message("[H] accidentally steps on [src].", \
- "You accidentally step on [src]")
- if(ismouse(AM))
- triggered(AM)
- ..()
+/obj/item/device/assembly/mousetrap/on_found(mob/living/finder as mob)
+ if(armed)
+ finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \
+ "You accidentally trigger [src]!")
+ triggered(finder, finder.hand ? "l_hand" : "r_hand")
+ return 1 //end the search!
+ return 0
- on_found(mob/living/finder as mob)
- if(armed)
- finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \
- "You accidentally trigger [src]!")
- triggered(finder, finder.hand ? "l_hand" : "r_hand")
- return 1 //end the search!
- return 0
-
-
- hitby(A as mob|obj)
- if(!armed)
- return ..()
- visible_message("[src] is triggered by [A].")
- triggered(null)
+/obj/item/device/assembly/mousetrap/hitby(A as mob|obj)
+ if(!armed)
+ return ..()
+ visible_message("[src] is triggered by [A].")
+ triggered(null)
/obj/item/device/assembly/mousetrap/armed
@@ -124,4 +124,4 @@
return
layer = TURF_LAYER+0.2
- usr << "You hide [src]."
\ No newline at end of file
+ to_chat(usr, "You hide [src].")
\ No newline at end of file
diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm
index 2b71743416..0ce769bdc6 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -15,152 +15,147 @@
var/range = 2
- proc
- toggle_scan()
- sense()
+/obj/item/device/assembly/prox_sensor/activate()
+ if(!..()) return 0//Cooldown check
+ timing = !timing
+ update_icon()
+ return 0
- activate()
- if(!..()) return 0//Cooldown check
- timing = !timing
- update_icon()
- return 0
+/obj/item/device/assembly/prox_sensor/toggle_secure()
+ secured = !secured
+ if(secured)
+ processing_objects.Add(src)
+ else
+ scanning = 0
+ timing = 0
+ processing_objects.Remove(src)
+ update_icon()
+ return secured
- toggle_secure()
- secured = !secured
- if(secured)
- processing_objects.Add(src)
- else
- scanning = 0
- timing = 0
- processing_objects.Remove(src)
- update_icon()
- return secured
-
-
- HasProximity(atom/movable/AM as mob|obj)
- if(!istype(AM))
- log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).")
- return
- if (istype(AM, /obj/effect/beam)) return
- if (AM.move_speed < 12) sense()
+/obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
+ if(!istype(AM))
+ log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).")
return
+ if (istype(AM, /obj/effect/beam)) return
+ if (AM.move_speed < 12) sense()
+ return
- sense()
- var/turf/mainloc = get_turf(src)
+/obj/item/device/assembly/prox_sensor/proc/sense()
+ var/turf/mainloc = get_turf(src)
// if(scanning && cooldown <= 0)
// mainloc.visible_message("\icon[src] *boop* *boop*", "*boop* *boop*")
- if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0
- pulse(0)
- if(!holder)
- mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
- cooldown = 2
- spawn(10)
- process_cooldown()
- return
+ if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0
+ pulse(0)
+ if(!holder)
+ mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
+ cooldown = 2
+ spawn(10)
+ process_cooldown()
+ return
- process()
- if(scanning)
- var/turf/mainloc = get_turf(src)
- for(var/mob/living/A in range(range,mainloc))
- if (A.move_speed < 12)
- sense()
+/obj/item/device/assembly/prox_sensor/process()
+ if(scanning)
+ var/turf/mainloc = get_turf(src)
+ for(var/mob/living/A in range(range,mainloc))
+ if (A.move_speed < 12)
+ sense()
- if(timing && (time >= 0))
- time--
- if(timing && time <= 0)
- timing = 0
- toggle_scan()
- time = 10
- return
+ if(timing && (time >= 0))
+ time--
+ if(timing && time <= 0)
+ timing = 0
+ toggle_scan()
+ time = 10
+ return
- dropped()
- spawn(0)
- sense()
- return
- return
-
-
- toggle_scan()
- if(!secured) return 0
- scanning = !scanning
- update_icon()
- return
-
-
- update_icon()
- overlays.Cut()
- attached_overlays = list()
- if(timing)
- overlays += "prox_timing"
- attached_overlays += "prox_timing"
- if(scanning)
- overlays += "prox_scanning"
- attached_overlays += "prox_scanning"
- if(holder)
- holder.update_icon()
- if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
- var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
- grenade.primed(scanning)
- return
-
-
- Move()
- ..()
+/obj/item/device/assembly/prox_sensor/dropped()
+ spawn(0)
sense()
return
+ return
- interact(mob/user as mob)//TODO: Change this to the wires thingy
- if(!secured)
- user.show_message("\red The [name] is unsecured!")
- return 0
- var/second = time % 60
- var/minute = (time - second) / 60
- var/dat = text("Proximity Sensor\n[] []:[]\n- - + +\n", (timing ? text("Arming", src) : text("Not Arming", src)), minute, second, src, src, src, src)
- dat += text("
Range: - [] +", src, range, src)
- dat += "
[scanning?"Armed":"Unarmed"] (Movement sensor active when armed!)"
- dat += "
Refresh"
- dat += "
Close"
- user << browse(dat, "window=prox")
- onclose(user, "prox")
+/obj/item/device/assembly/prox_sensor/proc/toggle_scan()
+ if(!secured) return 0
+ scanning = !scanning
+ update_icon()
+ return
+
+
+/obj/item/device/assembly/prox_sensor/update_icon()
+ overlays.Cut()
+ attached_overlays = list()
+ if(timing)
+ overlays += "prox_timing"
+ attached_overlays += "prox_timing"
+ if(scanning)
+ overlays += "prox_scanning"
+ attached_overlays += "prox_scanning"
+ if(holder)
+ holder.update_icon()
+ if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
+ var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
+ grenade.primed(scanning)
+ return
+
+
+/obj/item/device/assembly/prox_sensor/Move()
+ ..()
+ sense()
+ return
+
+
+/obj/item/device/assembly/prox_sensor/interact(mob/user as mob)//TODO: Change this to the wires thingy
+ if(!secured)
+ user.show_message("\red The [name] is unsecured!")
+ return 0
+ var/second = time % 60
+ var/minute = (time - second) / 60
+ var/dat = text("Proximity Sensor\n[] []:[]\n- - + +\n", (timing ? text("Arming", src) : text("Not Arming", src)), minute, second, src, src, src, src)
+ dat += text("
Range: - [] +", src, range, src)
+ dat += "
[scanning?"Armed":"Unarmed"] (Movement sensor active when armed!)"
+ dat += "
Refresh"
+ dat += "
Close"
+ user << browse(dat, "window=prox")
+ onclose(user, "prox")
+ return
+
+
+/obj/item/device/assembly/prox_sensor/Topic(href, href_list, state = deep_inventory_state)
+ if(..()) return 1
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=prox")
+ onclose(usr, "prox")
return
+ if(href_list["scanning"])
+ toggle_scan()
- Topic(href, href_list)
- if(..()) return 1
- if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
- usr << browse(null, "window=prox")
- onclose(usr, "prox")
- return
+ if(href_list["time"])
+ timing = text2num(href_list["time"])
+ update_icon()
- if(href_list["scanning"])
- toggle_scan()
-
- if(href_list["time"])
- timing = text2num(href_list["time"])
- update_icon()
-
- if(href_list["tp"])
- var/tp = text2num(href_list["tp"])
- time += tp
- time = min(max(round(time), 0), 600)
-
- if(href_list["range"])
- var/r = text2num(href_list["range"])
- range += r
- range = min(max(range, 1), 5)
-
- if(href_list["close"])
- usr << browse(null, "window=prox")
- return
-
- if(usr)
- attack_self(usr)
+ if(href_list["tp"])
+ var/tp = text2num(href_list["tp"])
+ time += tp
+ time = min(max(round(time), 0), 600)
+ if(href_list["range"])
+ var/r = text2num(href_list["range"])
+ range += r
+ range = min(max(range, 1), 5)
+ if(href_list["close"])
+ usr << browse(null, "window=prox")
return
+
+ if(usr)
+ attack_self(usr)
+
+
+ return
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index edbe0e7491..2bfdbb53cd 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -29,7 +29,7 @@
return
if(istype(W, /obj/item/weapon/screwdriver))
status = !status
- user << "[src] is now [status ? "secured" : "unsecured"]!"
+ to_chat(user, "[src] is now [status ? "secured" : "unsecured"]!")
add_fingerprint(user)
return
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 1273b004a4..43f3c9560e 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -17,171 +17,171 @@
var/datum/radio_frequency/radio_connection
var/deadman = 0
- New()
- ..()
- spawn(40)
- set_frequency(frequency)
- return
+/obj/item/device/assembly/signaler/New()
+ ..()
+ spawn(40)
+ set_frequency(frequency)
+ return
- activate()
- if(cooldown > 0) return 0
- cooldown = 2
- spawn(10)
- process_cooldown()
+/obj/item/device/assembly/signaler/activate()
+ if(cooldown > 0) return 0
+ cooldown = 2
+ spawn(10)
+ process_cooldown()
- signal()
- return 1
+ signal()
+ return 1
- update_icon()
- if(holder)
- holder.update_icon()
- return
+/obj/item/device/assembly/signaler/update_icon()
+ if(holder)
+ holder.update_icon()
+ return
- interact(mob/user as mob, flag1)
- var/t1 = "-------"
+/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1)
+ var/t1 = "-------"
// if ((src.b_stat && !( flag1 )))
// t1 = text("-------
\nGreen Wire: []
\nRed Wire: []
\nBlue Wire: []
\n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src)))
// else
// t1 = "-------" Speaker: [src.listening ? "Engaged" : "Disengaged"]
- var/dat = {"
-
+ var/dat = {"
+
- Send Signal
- Frequency/Code for signaler:
- Frequency:
- -
- -
- [format_frequency(src.frequency)]
- +
- +
+Send Signal
+Frequency/Code for signaler:
+Frequency:
+-
+-
+[format_frequency(src.frequency)]
++
++
- Code:
- -
- -
- [src.code]
- +
- +
- [t1]
- "}
- user << browse(dat, "window=radio")
- onclose(user, "radio")
+Code:
+-
+-
+[src.code]
++
++
+[t1]
+"}
+ user << browse(dat, "window=radio")
+ onclose(user, "radio")
+ return
+
+
+/obj/item/device/assembly/signaler/Topic(href, href_list, state = deep_inventory_state)
+ if(..()) return 1
+
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=radio")
+ onclose(usr, "radio")
return
+ if (href_list["freq"])
+ var/new_frequency = (frequency + text2num(href_list["freq"]))
+ if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ)
+ new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
+ set_frequency(new_frequency)
- Topic(href, href_list)
- if(..()) return 1
+ if(href_list["code"])
+ src.code += text2num(href_list["code"])
+ src.code = round(src.code)
+ src.code = min(100, src.code)
+ src.code = max(1, src.code)
- if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
- usr << browse(null, "window=radio")
- onclose(usr, "radio")
- return
+ if(href_list["send"])
+ spawn( 0 )
+ signal()
- if (href_list["freq"])
- var/new_frequency = (frequency + text2num(href_list["freq"]))
- if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ)
- new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
- set_frequency(new_frequency)
+ if(usr)
+ attack_self(usr)
- if(href_list["code"])
- src.code += text2num(href_list["code"])
- src.code = round(src.code)
- src.code = min(100, src.code)
- src.code = max(1, src.code)
+ return
- if(href_list["send"])
- spawn( 0 )
- signal()
+/obj/item/device/assembly/signaler/attackby(obj/item/weapon/W, mob/user, params)
+ if(issignaler(W))
+ var/obj/item/device/assembly/signaler/signaler2 = W
+ if(secured && signaler2.secured)
+ code = signaler2.code
+ frequency = signaler2.frequency
+ to_chat(user, "You transfer the frequency and code of [signaler2] to [src].")
+ else
+ ..()
- if(usr)
- attack_self(usr)
+/obj/item/device/assembly/signaler/proc/signal()
+ if(!radio_connection) return
- return
-
- attackby(obj/item/weapon/W, mob/user, params)
- if(issignaler(W))
- var/obj/item/device/assembly/signaler/signaler2 = W
- if(secured && signaler2.secured)
- code = signaler2.code
- frequency = signaler2.frequency
- user << "You transfer the frequency and code of [signaler2] to [src]"
- else
- ..()
-
- proc/signal()
- if(!radio_connection) return
-
- var/datum/signal/signal = new
- signal.source = src
- signal.encryption = code
- signal.data["message"] = "ACTIVATE"
- radio_connection.post_signal(src, signal)
- return
+ var/datum/signal/signal = new
+ signal.source = src
+ signal.encryption = code
+ signal.data["message"] = "ACTIVATE"
+ radio_connection.post_signal(src, signal)
+ return
/*
- for(var/obj/item/device/assembly/signaler/S in world)
- if(!S) continue
- if(S == src) continue
- if((S.frequency == src.frequency) && (S.code == src.code))
- spawn(0)
- if(S) S.pulse(0)
- return 0*/
+ for(var/obj/item/device/assembly/signaler/S in world)
+ if(!S) continue
+ if(S == src) continue
+ if((S.frequency == src.frequency) && (S.code == src.code))
+ spawn(0)
+ if(S) S.pulse(0)
+ return 0*/
- pulse(var/radio = 0)
- if(src.connected && src.wires)
- connected.Pulse(src)
- else if(holder)
- holder.process_activation(src, 1, 0)
- else
- ..(radio)
- return 1
+/obj/item/device/assembly/signaler/pulse(var/radio = 0)
+ if(src.connected && src.wires)
+ connected.Pulse(src)
+ else if(holder)
+ holder.process_activation(src, 1, 0)
+ else
+ ..(radio)
+ return 1
- receive_signal(datum/signal/signal)
- if(!signal) return 0
- if(signal.encryption != code) return 0
- if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0
- pulse(1)
+/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal)
+ if(!signal) return 0
+ if(signal.encryption != code) return 0
+ if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0
+ pulse(1)
- if(!holder)
- for(var/mob/O in hearers(1, src.loc))
- O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
+ if(!holder)
+ for(var/mob/O in hearers(1, src.loc))
+ O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
+ return
+
+
+/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency)
+ if(!frequency)
return
-
-
- proc/set_frequency(new_frequency)
- if(!frequency)
- return
- if(!radio_controller)
- sleep(20)
- if(!radio_controller)
- return
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
+ if(!radio_controller)
+ sleep(20)
+ if(!radio_controller)
return
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
+ return
- process()
- if(!deadman)
- processing_objects.Remove(src)
- var/mob/M = src.loc
- if(!M || !ismob(M))
- if(prob(5))
- signal()
- deadman = 0
- processing_objects.Remove(src)
- else if(prob(5))
- M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!")
- return
+/obj/item/device/assembly/signaler/process()
+ if(!deadman)
+ processing_objects.Remove(src)
+ var/mob/M = src.loc
+ if(!M || !ismob(M))
+ if(prob(5))
+ signal()
+ deadman = 0
+ processing_objects.Remove(src)
+ else if(prob(5))
+ M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!")
+ return
- verb/deadman_it()
- set src in usr
- set name = "Threaten to push the button!"
- set desc = "BOOOOM!"
- deadman = 1
- processing_objects.Add(src)
- log_and_message_admins("is threatening to trigger a signaler deadman's switch")
- usr.visible_message("\red [usr] moves their finger over [src]'s signal button...")
+/obj/item/device/assembly/signaler/verb/deadman_it()
+ set src in usr
+ set name = "Threaten to push the button!"
+ set desc = "BOOOOM!"
+ deadman = 1
+ processing_objects.Add(src)
+ log_and_message_admins("is threatening to trigger a signaler deadman's switch")
+ usr.visible_message("\red [usr] moves their finger over [src]'s signal button...")
/obj/item/device/assembly/signaler/Destroy()
if(radio_controller)
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index cdd927afd6..810c5ec3b5 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -2,8 +2,8 @@
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
- origin_tech = list(TECH_MAGNET = 1)
- matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
wires = WIRE_PULSE
@@ -12,97 +12,94 @@
var/timing = 0
var/time = 10
- proc
- timer_end()
+/obj/item/device/assembly/timer/activate()
+ if(!..()) return 0//Cooldown check
- activate()
- if(!..()) return 0//Cooldown check
-
- timing = !timing
-
- update_icon()
- return 0
-
-
- toggle_secure()
- secured = !secured
- if(secured)
- processing_objects.Add(src)
- else
- timing = 0
- processing_objects.Remove(src)
- update_icon()
- return secured
-
-
- timer_end()
- if(!secured) return 0
- pulse(0)
- if(!holder)
- visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
- cooldown = 2
- spawn(10)
- process_cooldown()
- return
-
-
- process()
- if(timing && (time > 0))
- time--
- if(timing && time <= 0)
- timing = 0
- timer_end()
- time = 10
- return
-
+ timing = !timing
update_icon()
- overlays.Cut()
- attached_overlays = list()
- if(timing)
- overlays += "timer_timing"
- attached_overlays += "timer_timing"
- if(holder)
- holder.update_icon()
+ return 0
+
+
+/obj/item/device/assembly/timer/toggle_secure()
+ secured = !secured
+ if(secured)
+ processing_objects.Add(src)
+ else
+ timing = 0
+ processing_objects.Remove(src)
+ update_icon()
+ return secured
+
+
+/obj/item/device/assembly/timer/proc/timer_end()
+ if(!secured) return 0
+ pulse(0)
+ if(!holder)
+ visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
+ cooldown = 2
+ spawn(10)
+ process_cooldown()
+ return
+
+
+/obj/item/device/assembly/timer/process()
+ if(timing && (time > 0))
+ time--
+ if(timing && time <= 0)
+ timing = 0
+ timer_end()
+ time = 10
+ return
+
+
+/obj/item/device/assembly/timer/update_icon()
+ overlays.Cut()
+ attached_overlays = list()
+ if(timing)
+ overlays += "timer_timing"
+ attached_overlays += "timer_timing"
+ if(holder)
+ holder.update_icon()
+ return
+
+
+/obj/item/device/assembly/timer/interact(mob/user as mob)//TODO: Have this use the wires
+ if(!secured)
+ user.show_message("\red The [name] is unsecured!")
+ return 0
+ var/second = time % 60
+ var/minute = (time - second) / 60
+ var/dat = text("Timing Unit\n[] []:[]\n- - + +\n", (timing ? text("Timing", src) : text("Not Timing", src)), minute, second, src, src, src, src)
+ dat += "
Refresh"
+ dat += "
Close"
+ user << browse(dat, "window=timer")
+ onclose(user, "timer")
+ return
+
+
+/obj/item/device/assembly/timer/Topic(href, href_list, state = deep_inventory_state)
+ if(..()) return 1
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=timer")
+ onclose(usr, "timer")
return
+ if(href_list["time"])
+ timing = text2num(href_list["time"])
+ update_icon()
- interact(mob/user as mob)//TODO: Have this use the wires
- if(!secured)
- user.show_message("\red The [name] is unsecured!")
- return 0
- var/second = time % 60
- var/minute = (time - second) / 60
- var/dat = text("Timing Unit\n[] []:[]\n- - + +\n", (timing ? text("Timing", src) : text("Not Timing", src)), minute, second, src, src, src, src)
- dat += "
Refresh"
- dat += "
Close"
- user << browse(dat, "window=timer")
- onclose(user, "timer")
+ if(href_list["tp"])
+ var/tp = text2num(href_list["tp"])
+ time += tp
+ time = min(max(round(time), 0), 600)
+
+ if(href_list["close"])
+ usr << browse(null, "window=timer")
return
+ if(usr)
+ attack_self(usr)
- Topic(href, href_list)
- if(..()) return 1
- if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
- usr << browse(null, "window=timer")
- onclose(usr, "timer")
- return
-
- if(href_list["time"])
- timing = text2num(href_list["time"])
- update_icon()
-
- if(href_list["tp"])
- var/tp = text2num(href_list["tp"])
- time += tp
- time = min(max(round(time), 0), 600)
-
- if(href_list["close"])
- usr << browse(null, "window=timer")
- return
-
- if(usr)
- attack_self(usr)
-
- return
+ return
diff --git a/code/modules/examine/descriptions/devices.dm b/code/modules/examine/descriptions/devices.dm
index 33954f6672..7b5c0019a4 100644
--- a/code/modules/examine/descriptions/devices.dm
+++ b/code/modules/examine/descriptions/devices.dm
@@ -19,4 +19,14 @@
up to 18,446,744,073,709,551,616 unique addresses, one of which is assigned to this device."
description_antag = "Electromagnetic pulses will cause the device to disconnect all linked communicators. Turning off the Exonet node at the Telecomms \
- satellite will also accomplish this, but for all communicators on and near the station. This may be needed to allow for a quiet kill or capture."
\ No newline at end of file
+ satellite will also accomplish this, but for all communicators on and near the station. This may be needed to allow for a quiet kill or capture."
+
+/obj/item/device/electronic_assembly/device
+ description_info = "This is the guts of a 'device' type electronic assembly, and can either be used in this form or can be used inside of the assembly to \
+ allow it to interact with other assembly type devices (igniter, signaler, proximity sensor, etc). This device has unique inputs that allow it to either send \
+ or receive pulsed signals from an attached items when inside an electronic assembly device frame (looks not unlike a signaler). Ensure the assembly is closed \
+ before placing it inside the frame."
+
+/obj/item/device/assembly/electronic_assembly
+ description_info = "This is the casing for the 'device' type of electronic assembly. It behaves like any other 'assembly' type device such as an igniter or signaler \
+ and can be attached to others in the same way. Use the 'toggle-open' verb (right click) or a crowbar to pop the electronic device open to add components and close when finished."
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/_defines.dm b/code/modules/integrated_electronics/_defines.dm
index 7089c19d51..47a5e40b22 100644
--- a/code/modules/integrated_electronics/_defines.dm
+++ b/code/modules/integrated_electronics/_defines.dm
@@ -31,9 +31,10 @@ var/list/all_integrated_circuits = list()
var/extended_desc = null
var/list/inputs = list()
var/list/outputs = list()
- var/list/activators = list()
+ var/list/activators = list() //associated_list, = 1 for inbound, = 0 for outbound
var/next_use = 0 //Uses world.time
var/complexity = 1 //This acts as a limitation on building machines, more resource-intensive components cost more 'space'.
+ var/size = null //This acts as a limitation on building machines, bigger components cost more 'space'. -1 for size 0
var/cooldown_per_use = 1 SECOND // Circuits are limited in how many times they can be work()'d by this variable.
var/power_draw_per_use = 0 // How much power is drawn when work()'d.
var/power_draw_idle = 0 // How much power is drawn when doing nothing.
@@ -41,5 +42,6 @@ var/list/all_integrated_circuits = list()
var/category_text = "NO CATEGORY THIS IS A BUG" // To show up on circuit printer, and perhaps other places.
var/autopulse = -1 // When input is received, the circuit will pulse itself if set to 1. 0 means it won't. -1 means it is permanently off.
var/removable = TRUE // Determines if a circuit is removable from the assembly.
-
-
+ var/displayed_name = ""
+ var/allow_multitool = 1 // Allows additional multitool functionality
+ // Used as a global var, (Do not set manually in children).
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 5c49e1817c..a4d292488d 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -1,5 +1,5 @@
#define IC_COMPONENTS_BASE 20
-#define IC_COMPLEXITY_BASE 80
+#define IC_COMPLEXITY_BASE 60
/obj/item/device/electronic_assembly
name = "electronic assembly"
@@ -13,6 +13,7 @@
var/opened = 0
var/obj/item/weapon/cell/device/battery = null // Internal cell which most circuits need to work.
+
/obj/item/device/electronic_assembly/medium
name = "electronic mechanism"
icon_state = "setup_medium"
@@ -38,8 +39,8 @@
name = "electronic implant"
icon_state = "setup_implant"
w_class = ITEMSIZE_TINY
- max_components = IC_COMPONENTS_BASE / 2
- max_complexity = IC_COMPLEXITY_BASE / 2
+ max_components = IC_COMPONENTS_BASE / 4
+ max_complexity = IC_COMPLEXITY_BASE / 4
var/obj/item/weapon/implant/integrated_circuit/implant = null
/obj/item/device/electronic_assembly/New()
@@ -82,14 +83,19 @@
/obj/item/device/electronic_assembly/implant/resolve_nano_host()
return implant
-/obj/item/device/electronic_assembly/interact(mob/user)
+/obj/item/device/electronic_assembly/proc/check_interactivity(mob/user)
if(!CanInteract(user, physical_state))
+ return 0
+ return 1
+
+/obj/item/device/electronic_assembly/interact(mob/user)
+ if(!check_interactivity(user))
return
var/total_parts = 0
var/total_complexity = 0
for(var/obj/item/integrated_circuit/part in contents)
- total_parts++
+ total_parts += part.size
total_complexity = total_complexity + part.complexity
var/HTML = list()
@@ -103,14 +109,30 @@
else
HTML += "No powercell detected!"
HTML += "
"
- HTML += "Components;
"
+ HTML += "Components: