diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 607c52e1667..9a0ab5c9c18 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -1417,6 +1417,8 @@ var/mob/dview/dview_mob = new
#define VARSET_LIST_CALLBACK(target, var_name, var_value) CALLBACK(GLOBAL_PROC, /proc/___callbackvarset, ##target, ##var_name, ##var_value)
//dupe code because dm can't handle 3 level deep macros
#define VARSET_CALLBACK(datum, var, var_value) CALLBACK(GLOBAL_PROC, /proc/___callbackvarset, ##datum, NAMEOF(##datum, ##var), ##var_value)
+//the 3 level deep myth DEBUNKED
+#define VARSET_IN(datum, var, var_value, time) addtimer(VARSET_CALLBACK(datum, var, var_value), time)
/proc/___callbackvarset(list_or_datum, var_name, var_value)
if(length(list_or_datum))
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index b4400ab5d56..4169dfc947c 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -11,11 +11,6 @@
var/toggle = 1
flags = PROXMOVE
-/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D)
-
-/obj/item/device/transfer_valve/IsAssemblyHolder()
- return 1
-
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user)
var/turf/location = get_turf(src) // For admin logs
if(istype(item, /obj/item/weapon/tank))
@@ -116,12 +111,11 @@
src.add_fingerprint(usr)
return 1 // Returning 1 sends an update to attached UIs
-/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 = FALSE
toggle_valve()
- spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
- toggle = 1
+ VARSET_IN(src, toggle, TRUE, 5 SECONDS)
/obj/item/device/transfer_valve/update_icon()
overlays.Cut()
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 04dadddc04f..b5851ab4c62 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -13,7 +13,7 @@
var/secured = 1
var/list/attached_overlays = null
var/obj/item/device/assembly_holder/holder = null
- var/cooldown = 0//To prevent spam
+ var/cooldown = FALSE //To prevent spam
var/wires = WIRE_RECEIVE | WIRE_PULSE
var/const/WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate()
@@ -22,78 +22,45 @@
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
+/obj/item/device/assembly/proc/holder_movement()
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/process_cooldown()
+ if(cooldown)
+ return FALSE
+ cooldown = TRUE
+ VARSET_IN(src, cooldown, FALSE, 2 SECONDS)
+ return TRUE
-/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/process_cooldown()
- cooldown--
- if(cooldown <= 0) return 0
- spawn(10)
- process_cooldown()
- return 1
-
-
-/obj/item/device/assembly/pulsed(var/radio = 0)
+/obj/item/device/assembly/proc/pulsed(var/radio = 0)
if(holder && (wires & WIRE_RECEIVE))
activate()
if(radio && (wires & WIRE_RADIO_RECEIVE))
activate()
return 1
-
-/obj/item/device/assembly/pulse(var/radio = 0)
+/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(radio && (wires & WIRE_RADIO_PULSE))
- //Not sure what goes here quite yet send signal?
return 1
+/obj/item/device/assembly/proc/activate()
+ if(!secured || !process_cooldown())
+ return FALSE
+ return TRUE
-/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()
+/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)
+/obj/item/device/assembly/proc/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
-
+ return TRUE
/obj/item/device/assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isassembly(W))
@@ -107,14 +74,10 @@
else
to_chat(user, "\The [src] can now be attached!")
return
- ..()
- return
-
+ return ..()
/obj/item/device/assembly/process()
- STOP_PROCESSING(SSobj, src)
- return
-
+ return PROCESS_KILL
/obj/item/device/assembly/examine(mob/user)
..(user)
@@ -132,7 +95,6 @@
interact(user)
return 1
-
/obj/item/device/assembly/interact(mob/user as mob)
return //HTML MENU FOR WIRES GOES HERE
@@ -140,41 +102,3 @@
if(istype(loc, /obj/item/device/assembly_holder))
return loc.nano_host()
return ..()
-
-/*
- 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/helpers.dm b/code/modules/assembly/helpers.dm
index bfecbd8a415..cc3100f7727 100644
--- a/code/modules/assembly/helpers.dm
+++ b/code/modules/assembly/helpers.dm
@@ -27,18 +27,3 @@
if(istype(O, /obj/item/device/assembly/timer))
return 1
return 0
-
-/*
-Name: IsSpecialAssembly
-Desc: If true is an object that can be attached to an assembly holder but is a special thing like a phoron can or door
-*/
-
-/obj/proc/IsSpecialAssembly()
- return 0
-
-/*
-Name: IsAssemblyHolder
-Desc: If true is an object that can hold an assemblyholder object
-*/
-/obj/proc/IsAssemblyHolder()
- return 0
\ No newline at end of file
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index d815fea765a..c95d2869e94 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -14,76 +14,48 @@
var/obj/item/device/assembly/a_right = null
var/obj/special_assembly = 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/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user)
+ if(!D || !D2)
+ return FALSE
+
+ if(!istype(D) || !istype(D2))
+ return FALSE
-/obj/item/device/assembly_holder/proc/attach_special(var/obj/O, var/mob/user)
- return
-
-/obj/item/device/assembly_holder/proc/process_activation(var/obj/item/device/D)
- return
-
-/obj/item/device/assembly_holder/proc/detached()
- 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(D.secured || D2.secured)
+ return FALSE
+
if(user)
user.remove_from_mob(D)
user.remove_from_mob(D2)
- D:holder = src
- D2:holder = src
- D.loc = src
- D2.loc = src
+
+ D.holder = src
+ D2.holder = src
+ D.forceMove(src)
+ D2.forceMove(src)
a_left = D
a_right = D2
name = "[D.name]-[D2.name] assembly"
update_icon()
- usr.put_in_hands(src)
+ user.put_in_hands(src)
- return 1
+ return TRUE
-
-/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"
-*/
+/obj/item/device/assembly_holder/proc/detached()
return
-
/obj/item/device/assembly_holder/update_icon()
- overlays.Cut()
+ cut_overlays()
if(a_left)
- overlays += "[a_left.icon_state]_left"
+ add_overlay("[a_left.icon_state]_left")
for(var/O in a_left.attached_overlays)
- overlays += "[O]_l"
+ add_overlay("[O]_l")
if(a_right)
- src.overlays += "[a_right.icon_state]_right"
+ add_overlay("[a_right.icon_state]_right")
for(var/O in a_right.attached_overlays)
- overlays += "[O]_r"
+ add_overlay("[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
-*/
-
/obj/item/device/assembly_holder/examine(mob/user)
..(user)
if ((in_range(src, user) || src.loc == user))
@@ -91,17 +63,12 @@
to_chat(user, "\The [src] is ready!")
else
to_chat(user, "\The [src] can be attached!")
- return
-
/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)
-
/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj)
if(AM.is_incorporeal())
@@ -110,42 +77,26 @@
a_left.Crossed(AM)
if(a_right)
a_right.Crossed(AM)
- if(special_assembly)
- special_assembly.Crossed(AM)
-
/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)
-
/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
-
/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
-
-/obj/item/device/assembly_holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
+/obj/item/device/assembly_holder/attackby(var/obj/item/weapon/W, var/mob/user)
if(W.is_screwdriver())
if(!a_left || !a_right)
to_chat(user, " BUG:Assembly part missing, please report this!")
@@ -159,14 +110,10 @@
to_chat(user, "\The [src] can now be taken apart!")
update_icon()
return
- else if(W.IsSpecialAssembly())
- attach_special(W, user)
else
..()
- return
-
-/obj/item/device/assembly_holder/attack_self(mob/user as mob)
+/obj/item/device/assembly_holder/attack_self(var/mob/user)
src.add_fingerprint(user)
if(src.secured)
if(!a_left || !a_right)
@@ -184,20 +131,19 @@
a_right.attack_self(user)
else
var/turf/T = get_turf(src)
- if(!T) return 0
+ if(!T)
+ return 0
if(a_left)
- a_left:holder = null
- a_left.loc = T
+ a_left.holder = null
+ a_left.forceMove(T)
if(a_right)
- a_right:holder = null
- a_right.loc = T
- spawn(0)
- qdel(src)
- return
+ a_right.holder = null
+ a_right.forceMove(T)
+ qdel(src)
-
-/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)
+ if(!D)
+ return 0
if(!secured)
visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*")
if((normal) && (a_right) && (a_left))
@@ -207,42 +153,36 @@
a_left.pulsed(0)
if(master)
master.receive_signal()
-// if(special && special_assembly)
-// if(!special_assembly == D)
-// special_assembly.dothings()
return 1
-
/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking)
if(a_right)
a_right.hear_talk(M,msg,verb,speaking)
if(a_left)
a_left.hear_talk(M,msg,verb,speaking)
-
-
-
/obj/item/device/assembly_holder/timer_igniter
name = "timer-igniter assembly"
- New()
- ..()
+/obj/item/device/assembly_holder/timer_igniter/New()
+ ..()
- var/obj/item/device/assembly/igniter/ign = new(src)
- ign.secured = 1
- ign.holder = src
- var/obj/item/device/assembly/timer/tmr = new(src)
- tmr.time=5
- tmr.secured = 1
- tmr.holder = src
- START_PROCESSING(SSobj, tmr)
- a_left = tmr
- a_right = ign
- secured = 1
- update_icon()
- name = initial(name) + " ([tmr.time] secs)"
+ var/obj/item/device/assembly/igniter/ign = new(src)
+ ign.secured = 1
+ ign.holder = src
- loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure
+ var/obj/item/device/assembly/timer/tmr = new(src)
+ tmr.time = 5
+ tmr.secured = 1
+ tmr.holder = src
+
+ a_left = tmr
+ a_right = ign
+ secured = 1
+ update_icon()
+ name = initial(name) + " ([tmr.time] secs)"
+
+ 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
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index 88845d0651b..5344d4b15bb 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -9,7 +9,8 @@
wires = WIRE_RECEIVE
/obj/item/device/assembly/igniter/activate()
- if(!..()) return 0//Cooldown check
+ if(!..())
+ return FALSE
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
@@ -28,13 +29,12 @@
s.set_up(3, 1, src)
s.start()
- return 1
+ return TRUE
-/obj/item/device/assembly/igniter/attack_self(mob/user as mob)
+/obj/item/device/assembly/igniter/attack_self(var/mob/user)
activate()
add_fingerprint(user)
- return
/obj/item/device/assembly/igniter/is_hot()
return TRUE
\ No newline at end of file
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index 8da3fbc21b4..2f10a91fdab 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -13,124 +13,118 @@
var/on = 0
var/visible = 0
- var/obj/effect/beam/i_beam/first = null
+ var/list/i_beams = null
/obj/item/device/assembly/infra/activate()
- if(!..()) return 0//Cooldown check
- on = !on
- update_icon()
- return 1
-
+ if(!..())
+ return FALSE
+ on = !on
+ update_icon()
+ return TRUE
/obj/item/device/assembly/infra/toggle_secure()
secured = !secured
- if(secured)
- START_PROCESSING(SSobj, src)
- else
- on = 0
- if(first) qdel(first)
- STOP_PROCESSING(SSobj, src)
+ if(!secured)
+ toggle_state(FALSE)
update_icon()
return secured
+/obj/item/device/assembly/infra/proc/toggle_state(var/picked)
+ if(!isnull(picked))
+ on = picked
+ else
+ on = !on
+
+ if(secured && on)
+ START_PROCESSING(SSobj, src)
+ else
+ STOP_PROCESSING(SSobj, src)
+ QDEL_LIST_NULL(i_beams)
+ return on
/obj/item/device/assembly/infra/update_icon()
- overlays.Cut()
- attached_overlays = list()
+ cut_overlays()
+ LAZYCLEARLIST(attached_overlays)
if(on)
- overlays += "infrared_on"
- attached_overlays += "infrared_on"
+ add_overlay("infrared_on")
+ LAZYADD(attached_overlays, "infrared_on")
if(holder)
- holder.update_icon()
- return
+ holder.update_icon(2)
+/obj/item/device/assembly/infra/process()
+ if(!on && i_beams)
+ QDEL_LIST_NULL(i_beams)
+ return
-/obj/item/device/assembly/infra/process()//Old code
- if(!on)
- if(first)
- qdel(first)
- return
+ if(!i_beams && secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))
+ create_beams()
- 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) )
+/obj/item/device/assembly/infra/proc/create_beams(var/limit = 8)
+ var/current_spot = get_turf(src)
+ for(var/i = 1 to limit)
+ var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(current_spot)
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)
- //to_world("infra: setting limit")
- I.limit = 8
- //to_world("infra: processing beam \ref[I]")
- I.process()
- return
- return
-
+ if(!step(I, I.dir)) //Try to take a step in that direction
+ return //Couldn't, oh well, we hit a wall or something. Beam should qdel itself in it's Bump().
+ I.density = 0
+ i_beams |= I
+ I.visible = visible
/obj/item/device/assembly/infra/attack_hand()
- qdel(first)
+ QDEL_LIST_NULL(i_beams)
..()
- return
-
/obj/item/device/assembly/infra/Move()
var/t = dir
..()
set_dir(t)
- qdel(first)
- return
-
+ QDEL_LIST_NULL(i_beams)
/obj/item/device/assembly/infra/holder_movement()
- if(!holder) return 0
-// set_dir(holder.dir)
- qdel(first)
- return 1
-
+ if(!holder)
+ return FALSE
+ QDEL_LIST_NULL(i_beams)
+ return TRUE
/obj/item/device/assembly/infra/proc/trigger_beam()
- if((!secured)||(!on)||(cooldown > 0)) return 0
+ if(!process_cooldown())
+ return FALSE
pulse(0)
+ QDEL_LIST_NULL(i_beams) //They will get recreated next process() if the situation is still appropriate
if(!holder)
visible_message("[bicon(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
+ 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(..())
+ 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()
+ toggle_state()
if(href_list["visible"])
visible = !(visible)
- spawn(0)
- if(first)
- first.vis_spread(visible)
+ for(var/ibeam in i_beams)
+ var/obj/effect/beam/i_beam/I = ibeam
+ I.visible = visible
+ CHECK_TICK
if(href_list["close"])
usr << browse(null, "window=infra")
@@ -139,18 +133,12 @@
if(usr)
attack_self(usr)
- return
-
-
/obj/item/device/assembly/infra/verb/rotate_clockwise()
set name = "Rotate Infrared Laser Clockwise"
set category = "Object"
set src in usr
- src.set_dir(turn(src.dir, 270))
- return
-
-
+ set_dir(turn(dir, 270))
/***************************IBeam*********************************/
@@ -158,102 +146,37 @@
name = "i beam"
icon = 'icons/obj/projectiles.dmi'
icon_state = "ibeam"
- var/obj/effect/beam/i_beam/next = null
var/obj/item/device/assembly/infra/master = null
- var/limit = null
- var/visible = 0.0
- var/left = null
- anchored = 1.0
+ var/visible = 0
+ anchored = 1
+/obj/effect/beam/i_beam/Initialize()
+ . = ..()
+ START_PROCESSING(SSobj, src)
+
+/obj/effect/beam/i_beam/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ master = null
+ return ..()
/obj/effect/beam/i_beam/proc/hit()
- if(master)
- master.trigger_beam()
+ master?.trigger_beam()
qdel(src)
- return
-
-/obj/effect/beam/i_beam/proc/vis_spread(v)
- //to_world("i_beam \ref[src] : vis_spread")
- visible = v
- spawn(0)
- if(next)
- //to_world("i_beam \ref[src] : is next [next.type] \ref[next], calling spread")
- next.vis_spread(v)
- return
- return
/obj/effect/beam/i_beam/process()
-
- if((loc && loc.density) || !master)
+ if(loc?.density || !master)
qdel(src)
return
- if(left > 0)
- left--
- if(left < 1)
- if(!(visible))
- invisibility = 101
- else
- invisibility = 0
- else
- invisibility = 0
-
-
- //to_world("now [src.left] left")
- var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc)
- I.master = master
- I.density = 1
- I.set_dir(dir)
- //to_world("created new beam \ref[I] at [I.x] [I.y] [I.z]")
- step(I, I.dir)
-
- if(I)
- //to_world("step worked, now at [I.x] [I.y] [I.z]")
- if(!(next))
- //to_world("no next")
- I.density = 0
- //to_world("spreading")
- I.vis_spread(visible)
- next = I
- spawn(0)
- //to_world("limit = [limit] ")
- if((I && limit > 0))
- I.limit = limit - 1
- //to_world("calling next process")
- I.process()
- return
- else
- //to_world("is a next: \ref[next], deleting beam \ref[I]")
- qdel(I)
- else
- //to_world("step failed, deleting \ref[next]")
- qdel(next)
- spawn(10)
- process()
- return
- return
-
/obj/effect/beam/i_beam/Bump()
qdel(src)
- return
/obj/effect/beam/i_beam/Bumped()
hit()
- return
-/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj)
+/obj/effect/beam/i_beam/Crossed(var/atom/movable/AM)
if(AM.is_incorporeal())
return
if(istype(AM, /obj/effect/beam))
return
- spawn(0)
- hit()
- return
- return
-
-/obj/effect/beam/i_beam/Destroy()
- . = ..()
- if(master.first == src)
- master.first = null
- if(next && !next.gc_destroyed)
- QDEL_NULL(next)
+ hit()
\ No newline at end of file
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index be78782b297..c2fb2029848 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -7,7 +7,7 @@
var/armed = 0
-/obj/item/device/assembly/mousetrap/examine(mob/user)
+/obj/item/device/assembly/mousetrap/examine(var/mob/user)
..(user)
if(armed)
to_chat(user, "It looks like it's armed.")
@@ -20,7 +20,7 @@
if(holder)
holder.update_icon()
-/obj/item/device/assembly/mousetrap/proc/triggered(mob/target as mob, var/type = "feet")
+/obj/item/device/assembly/mousetrap/proc/triggered(var/mob/target, var/type = "feet")
if(!armed)
return
var/obj/item/organ/external/affecting = null
@@ -49,8 +49,7 @@
update_icon()
pulse(0)
-
-/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
+/obj/item/device/assembly/mousetrap/attack_self(var/mob/living/user)
if(!armed)
to_chat(user, "You arm [src].")
else
@@ -68,8 +67,7 @@
update_icon()
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
-
-/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
+/obj/item/device/assembly/mousetrap/attack_hand(var/mob/living/user)
if(armed)
if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand"
@@ -81,8 +79,7 @@
return
..()
-
-/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
+/obj/item/device/assembly/mousetrap/Crossed(var/atom/movable/AM)
if(AM.is_incorporeal())
return
if(armed)
@@ -96,8 +93,7 @@
triggered(AM)
..()
-
-/obj/item/device/assembly/mousetrap/on_found(mob/living/finder as mob)
+/obj/item/device/assembly/mousetrap/on_found(var/mob/living/finder)
if(armed)
finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \
"You accidentally trigger [src]!")
@@ -105,19 +101,16 @@
return 1 //end the search!
return 0
-
-/obj/item/device/assembly/mousetrap/hitby(A as mob|obj)
+/obj/item/device/assembly/mousetrap/hitby(var/atom/movable/A)
if(!armed)
return ..()
visible_message("[src] is triggered by [A].")
triggered(null)
-
/obj/item/device/assembly/mousetrap/armed
icon_state = "mousetraparmed"
armed = 1
-
/obj/item/device/assembly/mousetrap/verb/hide_under()
set src in oview(1)
set name = "Hide"
@@ -126,5 +119,5 @@
if(usr.stat)
return
- layer = TURF_LAYER+0.2
+ layer = HIDING_LAYER
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 2ac1fdf90f6..a93bda48099 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -16,11 +16,11 @@
var/range = 2
/obj/item/device/assembly/prox_sensor/activate()
- if(!..()) return 0//Cooldown check
+ if(!..())
+ return FALSE
timing = !timing
update_icon()
- return 0
-
+ return FALSE
/obj/item/device/assembly/prox_sensor/toggle_secure()
secured = !secured
@@ -33,29 +33,22 @@
update_icon()
return secured
-
/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 (!isobserver(AM) && AM.move_speed < 12) sense()
- return
-
+ if (istype(AM, /obj/effect/beam))
+ return
+ if (!isobserver(AM) && AM.move_speed < 12)
+ sense()
/obj/item/device/assembly/prox_sensor/proc/sense()
+ if((!holder && !secured) || !scanning || !process_cooldown())
+ return FALSE
var/turf/mainloc = get_turf(src)
-// if(scanning && cooldown <= 0)
-// mainloc.visible_message("[bicon(src)] *boop* *boop*", "*boop* *boop*")
- if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0
pulse(0)
if(!holder)
mainloc.visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*")
- cooldown = 2
- spawn(10)
- process_cooldown()
- return
-
/obj/item/device/assembly/prox_sensor/process()
if(scanning)
@@ -69,46 +62,35 @@
if(timing && time <= 0)
timing = 0
toggle_scan()
- time = 10
- return
-
+ time = initial(time)
/obj/item/device/assembly/prox_sensor/dropped()
- spawn(0)
- sense()
- return
- return
-
+ sense()
/obj/item/device/assembly/prox_sensor/proc/toggle_scan()
- if(!secured) return 0
+ if(!secured)
+ return FALSE
scanning = !scanning
update_icon()
- return
-
/obj/item/device/assembly/prox_sensor/update_icon()
- overlays.Cut()
- attached_overlays = list()
+ cut_overlays()
+ LAZYCLEARLIST(attached_overlays)
if(timing)
- overlays += "prox_timing"
- attached_overlays += "prox_timing"
+ add_overlay("prox_timing")
+ LAZYADD(attached_overlays, "prox_timing")
if(scanning)
- overlays += "prox_scanning"
- attached_overlays += "prox_scanning"
+ add_overlay("prox_scanning")
+ LAZYADD(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)
@@ -123,11 +105,11 @@
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(..())
+ return TRUE
+
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=prox")
onclose(usr, "prox")
@@ -156,6 +138,3 @@
if(usr)
attack_self(usr)
-
-
- return
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index 55616a2b917..d3f518bbc85 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -13,7 +13,7 @@
..()
return
-/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob)
+/obj/item/assembly/shock_kit/attackby(var/obj/item/weapon/W, var/mob/user)
if(W.is_wrench() && !status)
var/turf/T = loc
if(ismob(T))
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 448e0c98607..5c93a5c6dd0 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -25,25 +25,17 @@
/obj/item/device/assembly/signaler/activate()
- if(cooldown > 0) return FALSE
- cooldown = 2
- spawn(10)
- process_cooldown()
-
+ if(!process_cooldown())
+ return FALSE
signal()
return TRUE
/obj/item/device/assembly/signaler/update_icon()
if(holder)
holder.update_icon()
- return
-/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1)
+/obj/item/device/assembly/signaler/interact(var/mob/user)
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 = {"
@@ -66,8 +58,6 @@ Code:
"}
user << browse(dat, "window=radio")
onclose(user, "radio")
- return
-
/obj/item/device/assembly/signaler/Topic(href, href_list, state = deep_inventory_state)
if(..())
@@ -97,9 +87,7 @@ Code:
if(usr)
attack_self(usr)
- return
-
-/obj/item/device/assembly/signaler/attackby(obj/item/weapon/W, mob/user, params)
+/obj/item/device/assembly/signaler/attackby(var/obj/item/weapon/W, mob/user, params)
if(issignaler(W))
var/obj/item/device/assembly/signaler/signaler2 = W
if(secured && signaler2.secured)
@@ -120,8 +108,6 @@ Code:
signal.encryption = code
signal.data["message"] = "ACTIVATE"
radio_connection.post_signal(src, signal)
- return
-
/obj/item/device/assembly/signaler/pulse(var/radio = 0)
if(is_jammed(src))
@@ -134,7 +120,6 @@ Code:
..(radio)
return TRUE
-
/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal)
if(!signal)
return FALSE
@@ -149,8 +134,6 @@ Code:
if(!holder)
for(var/mob/O in hearers(1, src.loc))
O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2)
- return
-
/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency)
if(!frequency)
@@ -163,7 +146,6 @@ Code:
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
- return
/obj/item/device/assembly/signaler/process()
if(!deadman)
@@ -176,7 +158,6 @@ Code:
STOP_PROCESSING(SSobj, 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/verb/deadman_it()
set src in usr
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index 543d7d18013..0f981e29f9f 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -14,14 +14,14 @@
/obj/item/device/assembly/timer/activate()
- if(!..()) return 0//Cooldown check
+ if(!..())
+ return FALSE
timing = !timing
update_icon()
return 0
-
/obj/item/device/assembly/timer/toggle_secure()
secured = !secured
if(secured)
@@ -32,27 +32,25 @@
update_icon()
return secured
+/obj/item/device/assembly/timer/proc/set_state(var/state)
+ if(state && !timing) //Not running, starting though
+ START_PROCESSING(SSobj, src)
+ else if(timing && !state) //Running, stopping though
+ STOP_PROCESSING(SSobj, src)
+ timing = state
/obj/item/device/assembly/timer/proc/timer_end()
- if(!secured) return 0
+ if(!secured)
+ return 0
pulse(0)
if(!holder)
visible_message("[bicon(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
+ if(timing && time-- <= 0)
+ set_state(0)
timer_end()
time = 10
- return
-
/obj/item/device/assembly/timer/update_icon()
overlays.Cut()
@@ -87,7 +85,8 @@
return
if(href_list["time"])
- timing = text2num(href_list["time"])
+ var/new_timing = text2num(href_list["time"])
+ set_state(new_timing)
update_icon()
if(href_list["tp"])
diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm
index 0cf4b856658..8ebf8278a80 100644
--- a/code/modules/assembly/voice.dm
+++ b/code/modules/assembly/voice.dm
@@ -26,10 +26,10 @@
/obj/item/device/assembly/voice/attack_self(mob/user)
- if(!user) return 0
+ if(!user)
+ return FALSE
activate()
- return 1
-
+ return TRUE
/obj/item/device/assembly/voice/toggle_secure()
. = ..()