Update assemblies to modern coding standards

This commit is contained in:
Aronai Sieyes
2020-03-30 22:18:44 -04:00
parent 35448c5b53
commit 0d043fe44e
13 changed files with 205 additions and 485 deletions

View File

@@ -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) #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 //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) #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) /proc/___callbackvarset(list_or_datum, var_name, var_value)
if(length(list_or_datum)) if(length(list_or_datum))

View File

@@ -11,11 +11,6 @@
var/toggle = 1 var/toggle = 1
flags = PROXMOVE 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) /obj/item/device/transfer_valve/attackby(obj/item/item, mob/user)
var/turf/location = get_turf(src) // For admin logs var/turf/location = get_turf(src) // For admin logs
if(istype(item, /obj/item/weapon/tank)) if(istype(item, /obj/item/weapon/tank))
@@ -116,12 +111,11 @@
src.add_fingerprint(usr) src.add_fingerprint(usr)
return 1 // Returning 1 sends an update to attached UIs 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) if(toggle)
toggle = 0 toggle = FALSE
toggle_valve() toggle_valve()
spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever VARSET_IN(src, toggle, TRUE, 5 SECONDS)
toggle = 1
/obj/item/device/transfer_valve/update_icon() /obj/item/device/transfer_valve/update_icon()
overlays.Cut() overlays.Cut()

View File

@@ -13,7 +13,7 @@
var/secured = 1 var/secured = 1
var/list/attached_overlays = null var/list/attached_overlays = null
var/obj/item/device/assembly_holder/holder = 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/wires = WIRE_RECEIVE | WIRE_PULSE
var/const/WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate() 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_RECEIVE = 8 //Allows Pulsed(1) to call Activate()
var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message 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 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 /obj/item/device/assembly/proc/process_cooldown()
return 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 /obj/item/device/assembly/proc/pulsed(var/radio = 0)
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)
if(holder && (wires & WIRE_RECEIVE)) if(holder && (wires & WIRE_RECEIVE))
activate() activate()
if(radio && (wires & WIRE_RADIO_RECEIVE)) if(radio && (wires & WIRE_RADIO_RECEIVE))
activate() activate()
return 1 return 1
/obj/item/device/assembly/proc/pulse(var/radio = 0)
/obj/item/device/assembly/pulse(var/radio = 0)
if(holder && (wires & WIRE_PULSE)) if(holder && (wires & WIRE_PULSE))
holder.process_activation(src, 1, 0) holder.process_activation(src, 1, 0)
if(holder && (wires & WIRE_PULSE_SPECIAL)) if(holder && (wires & WIRE_PULSE_SPECIAL))
holder.process_activation(src, 0, 1) holder.process_activation(src, 0, 1)
// if(radio && (wires & WIRE_RADIO_PULSE))
//Not sure what goes here quite yet send signal?
return 1 return 1
/obj/item/device/assembly/proc/activate()
if(!secured || !process_cooldown())
return FALSE
return TRUE
/obj/item/device/assembly/activate() /obj/item/device/assembly/proc/toggle_secure()
if(!secured || (cooldown > 0)) return 0
cooldown = 2
spawn(10)
process_cooldown()
return 1
/obj/item/device/assembly/toggle_secure()
secured = !secured secured = !secured
update_icon() update_icon()
return secured return secured
/obj/item/device/assembly/proc/attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
/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)) holder = new/obj/item/device/assembly_holder(get_turf(src))
if(holder.attach(A,src,user)) if(holder.attach(A,src,user))
to_chat(user, "<span class='notice'>You attach \the [A] to \the [src]!</span>") to_chat(user, "<span class='notice'>You attach \the [A] to \the [src]!</span>")
return 1 return TRUE
return 0
/obj/item/device/assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/item/device/assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isassembly(W)) if(isassembly(W))
@@ -107,14 +74,10 @@
else else
to_chat(user, "<span class='notice'>\The [src] can now be attached!</span>") to_chat(user, "<span class='notice'>\The [src] can now be attached!</span>")
return return
..() return ..()
return
/obj/item/device/assembly/process() /obj/item/device/assembly/process()
STOP_PROCESSING(SSobj, src) return PROCESS_KILL
return
/obj/item/device/assembly/examine(mob/user) /obj/item/device/assembly/examine(mob/user)
..(user) ..(user)
@@ -132,7 +95,6 @@
interact(user) interact(user)
return 1 return 1
/obj/item/device/assembly/interact(mob/user as mob) /obj/item/device/assembly/interact(mob/user as mob)
return //HTML MENU FOR WIRES GOES HERE return //HTML MENU FOR WIRES GOES HERE
@@ -140,41 +102,3 @@
if(istype(loc, /obj/item/device/assembly_holder)) if(istype(loc, /obj/item/device/assembly_holder))
return loc.nano_host() return loc.nano_host()
return ..() 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
*/

View File

@@ -27,18 +27,3 @@
if(istype(O, /obj/item/device/assembly/timer)) if(istype(O, /obj/item/device/assembly/timer))
return 1 return 1
return 0 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

View File

@@ -14,76 +14,48 @@
var/obj/item/device/assembly/a_right = null var/obj/item/device/assembly/a_right = null
var/obj/special_assembly = 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) /obj/item/device/assembly_holder/proc/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user)
return 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) if(D.secured || D2.secured)
return return FALSE
/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(user) if(user)
user.remove_from_mob(D) user.remove_from_mob(D)
user.remove_from_mob(D2) user.remove_from_mob(D2)
D:holder = src
D2:holder = src D.holder = src
D.loc = src D2.holder = src
D2.loc = src D.forceMove(src)
D2.forceMove(src)
a_left = D a_left = D
a_right = D2 a_right = D2
name = "[D.name]-[D2.name] assembly" name = "[D.name]-[D2.name] assembly"
update_icon() update_icon()
usr.put_in_hands(src) user.put_in_hands(src)
return 1 return TRUE
/obj/item/device/assembly_holder/proc/detached()
/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"
*/
return return
/obj/item/device/assembly_holder/update_icon() /obj/item/device/assembly_holder/update_icon()
overlays.Cut() cut_overlays()
if(a_left) if(a_left)
overlays += "[a_left.icon_state]_left" add_overlay("[a_left.icon_state]_left")
for(var/O in a_left.attached_overlays) for(var/O in a_left.attached_overlays)
overlays += "[O]_l" add_overlay("[O]_l")
if(a_right) 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) for(var/O in a_right.attached_overlays)
overlays += "[O]_r" add_overlay("[O]_r")
if(master) if(master)
master.update_icon() 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) /obj/item/device/assembly_holder/examine(mob/user)
..(user) ..(user)
if ((in_range(src, user) || src.loc == user)) if ((in_range(src, user) || src.loc == user))
@@ -91,17 +63,12 @@
to_chat(user, "\The [src] is ready!") to_chat(user, "\The [src] is ready!")
else else
to_chat(user, "\The [src] can be attached!") to_chat(user, "\The [src] can be attached!")
return
/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj) /obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj)
if(a_left) if(a_left)
a_left.HasProximity(AM) a_left.HasProximity(AM)
if(a_right) if(a_right)
a_right.HasProximity(AM) a_right.HasProximity(AM)
if(special_assembly)
special_assembly.HasProximity(AM)
/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj) /obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj)
if(AM.is_incorporeal()) if(AM.is_incorporeal())
@@ -110,42 +77,26 @@
a_left.Crossed(AM) a_left.Crossed(AM)
if(a_right) if(a_right)
a_right.Crossed(AM) a_right.Crossed(AM)
if(special_assembly)
special_assembly.Crossed(AM)
/obj/item/device/assembly_holder/on_found(mob/finder as mob) /obj/item/device/assembly_holder/on_found(mob/finder as mob)
if(a_left) if(a_left)
a_left.on_found(finder) a_left.on_found(finder)
if(a_right) if(a_right)
a_right.on_found(finder) 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() /obj/item/device/assembly_holder/Move()
..() ..()
if(a_left && a_right) if(a_left && a_right)
a_left.holder_movement() a_left.holder_movement()
a_right.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 /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) if(a_left && a_right)
a_left.holder_movement() a_left.holder_movement()
a_right.holder_movement() a_right.holder_movement()
// if(special_assembly)
// special_assembly:Holder_Movement()
..() ..()
return
/obj/item/device/assembly_holder/attackby(var/obj/item/weapon/W, var/mob/user)
/obj/item/device/assembly_holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_screwdriver()) if(W.is_screwdriver())
if(!a_left || !a_right) if(!a_left || !a_right)
to_chat(user, "<span class='warning'> BUG:Assembly part missing, please report this!</span>") to_chat(user, "<span class='warning'> BUG:Assembly part missing, please report this!</span>")
@@ -159,14 +110,10 @@
to_chat(user, "<span class='notice'>\The [src] can now be taken apart!</span>") to_chat(user, "<span class='notice'>\The [src] can now be taken apart!</span>")
update_icon() update_icon()
return return
else if(W.IsSpecialAssembly())
attach_special(W, user)
else else
..() ..()
return
/obj/item/device/assembly_holder/attack_self(var/mob/user)
/obj/item/device/assembly_holder/attack_self(mob/user as mob)
src.add_fingerprint(user) src.add_fingerprint(user)
if(src.secured) if(src.secured)
if(!a_left || !a_right) if(!a_left || !a_right)
@@ -184,20 +131,19 @@
a_right.attack_self(user) a_right.attack_self(user)
else else
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!T) return 0 if(!T)
return 0
if(a_left) if(a_left)
a_left:holder = null a_left.holder = null
a_left.loc = T a_left.forceMove(T)
if(a_right) if(a_right)
a_right:holder = null a_right.holder = null
a_right.loc = T a_right.forceMove(T)
spawn(0) qdel(src)
qdel(src)
return
/obj/item/device/assembly_holder/proc/process_activation(var/obj/D, var/normal = 1)
/obj/item/device/assembly_holder/process_activation(var/obj/D, var/normal = 1, var/special = 1) if(!D)
if(!D) return 0 return 0
if(!secured) if(!secured)
visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*")
if((normal) && (a_right) && (a_left)) if((normal) && (a_right) && (a_left))
@@ -207,42 +153,36 @@
a_left.pulsed(0) a_left.pulsed(0)
if(master) if(master)
master.receive_signal() 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) /obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking)
if(a_right) if(a_right)
a_right.hear_talk(M,msg,verb,speaking) a_right.hear_talk(M,msg,verb,speaking)
if(a_left) if(a_left)
a_left.hear_talk(M,msg,verb,speaking) a_left.hear_talk(M,msg,verb,speaking)
/obj/item/device/assembly_holder/timer_igniter /obj/item/device/assembly_holder/timer_igniter
name = "timer-igniter assembly" name = "timer-igniter assembly"
New() /obj/item/device/assembly_holder/timer_igniter/New()
..() ..()
var/obj/item/device/assembly/igniter/ign = new(src) var/obj/item/device/assembly/igniter/ign = new(src)
ign.secured = 1 ign.secured = 1
ign.holder = src 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)"
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() /obj/item/device/assembly_holder/timer_igniter/detached()
loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure

View File

@@ -9,7 +9,8 @@
wires = WIRE_RECEIVE wires = WIRE_RECEIVE
/obj/item/device/assembly/igniter/activate() /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)) if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
@@ -28,13 +29,12 @@
s.set_up(3, 1, src) s.set_up(3, 1, src)
s.start() 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() activate()
add_fingerprint(user) add_fingerprint(user)
return
/obj/item/device/assembly/igniter/is_hot() /obj/item/device/assembly/igniter/is_hot()
return TRUE return TRUE

View File

@@ -13,124 +13,118 @@
var/on = 0 var/on = 0
var/visible = 0 var/visible = 0
var/obj/effect/beam/i_beam/first = null var/list/i_beams = null
/obj/item/device/assembly/infra/activate() /obj/item/device/assembly/infra/activate()
if(!..()) return 0//Cooldown check if(!..())
on = !on return FALSE
update_icon() on = !on
return 1 update_icon()
return TRUE
/obj/item/device/assembly/infra/toggle_secure() /obj/item/device/assembly/infra/toggle_secure()
secured = !secured secured = !secured
if(secured) if(!secured)
START_PROCESSING(SSobj, src) toggle_state(FALSE)
else
on = 0
if(first) qdel(first)
STOP_PROCESSING(SSobj, src)
update_icon() update_icon()
return secured 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() /obj/item/device/assembly/infra/update_icon()
overlays.Cut() cut_overlays()
attached_overlays = list() LAZYCLEARLIST(attached_overlays)
if(on) if(on)
overlays += "infrared_on" add_overlay("infrared_on")
attached_overlays += "infrared_on" LAZYADD(attached_overlays, "infrared_on")
if(holder) if(holder)
holder.update_icon() holder.update_icon(2)
return
/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(!i_beams && secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))
if(!on) create_beams()
if(first)
qdel(first)
return
if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf)))))) /obj/item/device/assembly/infra/proc/create_beams(var/limit = 8)
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) ) 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.master = src
I.density = 1 I.density = 1
I.set_dir(dir) I.set_dir(dir)
step(I, I.dir) if(!step(I, I.dir)) //Try to take a step in that direction
if(I) return //Couldn't, oh well, we hit a wall or something. Beam should qdel itself in it's Bump().
I.density = 0 I.density = 0
first = I i_beams |= I
I.vis_spread(visible) I.visible = visible
spawn(0)
if(I)
//to_world("infra: setting limit")
I.limit = 8
//to_world("infra: processing beam \ref[I]")
I.process()
return
return
/obj/item/device/assembly/infra/attack_hand() /obj/item/device/assembly/infra/attack_hand()
qdel(first) QDEL_LIST_NULL(i_beams)
..() ..()
return
/obj/item/device/assembly/infra/Move() /obj/item/device/assembly/infra/Move()
var/t = dir var/t = dir
..() ..()
set_dir(t) set_dir(t)
qdel(first) QDEL_LIST_NULL(i_beams)
return
/obj/item/device/assembly/infra/holder_movement() /obj/item/device/assembly/infra/holder_movement()
if(!holder) return 0 if(!holder)
// set_dir(holder.dir) return FALSE
qdel(first) QDEL_LIST_NULL(i_beams)
return 1 return TRUE
/obj/item/device/assembly/infra/proc/trigger_beam() /obj/item/device/assembly/infra/proc/trigger_beam()
if((!secured)||(!on)||(cooldown > 0)) return 0 if(!process_cooldown())
return FALSE
pulse(0) pulse(0)
QDEL_LIST_NULL(i_beams) //They will get recreated next process() if the situation is still appropriate
if(!holder) if(!holder)
visible_message("[bicon(src)] *beep* *beep*") 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 /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) user.set_machine(src)
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src))) var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>" dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>" dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=infra") user << browse(dat, "window=infra")
onclose(user, "infra") onclose(user, "infra")
return
/obj/item/device/assembly/infra/Topic(href, href_list, state = deep_inventory_state) /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)) if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=infra") usr << browse(null, "window=infra")
onclose(usr, "infra") onclose(usr, "infra")
return return
if(href_list["state"]) if(href_list["state"])
on = !(on) toggle_state()
update_icon()
if(href_list["visible"]) if(href_list["visible"])
visible = !(visible) visible = !(visible)
spawn(0) for(var/ibeam in i_beams)
if(first) var/obj/effect/beam/i_beam/I = ibeam
first.vis_spread(visible) I.visible = visible
CHECK_TICK
if(href_list["close"]) if(href_list["close"])
usr << browse(null, "window=infra") usr << browse(null, "window=infra")
@@ -139,18 +133,12 @@
if(usr) if(usr)
attack_self(usr) attack_self(usr)
return
/obj/item/device/assembly/infra/verb/rotate_clockwise() /obj/item/device/assembly/infra/verb/rotate_clockwise()
set name = "Rotate Infrared Laser Clockwise" set name = "Rotate Infrared Laser Clockwise"
set category = "Object" set category = "Object"
set src in usr set src in usr
src.set_dir(turn(src.dir, 270)) set_dir(turn(dir, 270))
return
/***************************IBeam*********************************/ /***************************IBeam*********************************/
@@ -158,102 +146,37 @@
name = "i beam" name = "i beam"
icon = 'icons/obj/projectiles.dmi' icon = 'icons/obj/projectiles.dmi'
icon_state = "ibeam" icon_state = "ibeam"
var/obj/effect/beam/i_beam/next = null
var/obj/item/device/assembly/infra/master = null var/obj/item/device/assembly/infra/master = null
var/limit = null var/visible = 0
var/visible = 0.0 anchored = 1
var/left = null
anchored = 1.0
/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() /obj/effect/beam/i_beam/proc/hit()
if(master) master?.trigger_beam()
master.trigger_beam()
qdel(src) 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() /obj/effect/beam/i_beam/process()
if(loc?.density || !master)
if((loc && loc.density) || !master)
qdel(src) qdel(src)
return 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() /obj/effect/beam/i_beam/Bump()
qdel(src) qdel(src)
return
/obj/effect/beam/i_beam/Bumped() /obj/effect/beam/i_beam/Bumped()
hit() 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()) if(AM.is_incorporeal())
return return
if(istype(AM, /obj/effect/beam)) if(istype(AM, /obj/effect/beam))
return return
spawn(0) hit()
hit()
return
return
/obj/effect/beam/i_beam/Destroy()
. = ..()
if(master.first == src)
master.first = null
if(next && !next.gc_destroyed)
QDEL_NULL(next)

View File

@@ -7,7 +7,7 @@
var/armed = 0 var/armed = 0
/obj/item/device/assembly/mousetrap/examine(mob/user) /obj/item/device/assembly/mousetrap/examine(var/mob/user)
..(user) ..(user)
if(armed) if(armed)
to_chat(user, "It looks like it's armed.") to_chat(user, "It looks like it's armed.")
@@ -20,7 +20,7 @@
if(holder) if(holder)
holder.update_icon() 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) if(!armed)
return return
var/obj/item/organ/external/affecting = null var/obj/item/organ/external/affecting = null
@@ -49,8 +49,7 @@
update_icon() update_icon()
pulse(0) pulse(0)
/obj/item/device/assembly/mousetrap/attack_self(var/mob/living/user)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
if(!armed) if(!armed)
to_chat(user, "<span class='notice'>You arm [src].</span>") to_chat(user, "<span class='notice'>You arm [src].</span>")
else else
@@ -68,8 +67,7 @@
update_icon() update_icon()
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
/obj/item/device/assembly/mousetrap/attack_hand(var/mob/living/user)
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
if(armed) if(armed)
if((CLUMSY in user.mutations) && prob(50)) if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand" var/which_hand = "l_hand"
@@ -81,8 +79,7 @@
return return
..() ..()
/obj/item/device/assembly/mousetrap/Crossed(var/atom/movable/AM)
/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
if(AM.is_incorporeal()) if(AM.is_incorporeal())
return return
if(armed) if(armed)
@@ -96,8 +93,7 @@
triggered(AM) triggered(AM)
..() ..()
/obj/item/device/assembly/mousetrap/on_found(var/mob/living/finder)
/obj/item/device/assembly/mousetrap/on_found(mob/living/finder as mob)
if(armed) if(armed)
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \ finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>") "<span class='warning'>You accidentally trigger [src]!</span>")
@@ -105,19 +101,16 @@
return 1 //end the search! return 1 //end the search!
return 0 return 0
/obj/item/device/assembly/mousetrap/hitby(var/atom/movable/A)
/obj/item/device/assembly/mousetrap/hitby(A as mob|obj)
if(!armed) if(!armed)
return ..() return ..()
visible_message("<span class='warning'>[src] is triggered by [A].</span>") visible_message("<span class='warning'>[src] is triggered by [A].</span>")
triggered(null) triggered(null)
/obj/item/device/assembly/mousetrap/armed /obj/item/device/assembly/mousetrap/armed
icon_state = "mousetraparmed" icon_state = "mousetraparmed"
armed = 1 armed = 1
/obj/item/device/assembly/mousetrap/verb/hide_under() /obj/item/device/assembly/mousetrap/verb/hide_under()
set src in oview(1) set src in oview(1)
set name = "Hide" set name = "Hide"
@@ -126,5 +119,5 @@
if(usr.stat) if(usr.stat)
return return
layer = TURF_LAYER+0.2 layer = HIDING_LAYER
to_chat(usr, "<span class='notice'>You hide [src].</span>") to_chat(usr, "<span class='notice'>You hide [src].</span>")

View File

@@ -16,11 +16,11 @@
var/range = 2 var/range = 2
/obj/item/device/assembly/prox_sensor/activate() /obj/item/device/assembly/prox_sensor/activate()
if(!..()) return 0//Cooldown check if(!..())
return FALSE
timing = !timing timing = !timing
update_icon() update_icon()
return 0 return FALSE
/obj/item/device/assembly/prox_sensor/toggle_secure() /obj/item/device/assembly/prox_sensor/toggle_secure()
secured = !secured secured = !secured
@@ -33,29 +33,22 @@
update_icon() update_icon()
return secured return secured
/obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj) /obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
if(!istype(AM)) if(!istype(AM))
log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).") log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).")
return return
if (istype(AM, /obj/effect/beam)) return if (istype(AM, /obj/effect/beam))
if (!isobserver(AM) && AM.move_speed < 12) sense() return
return if (!isobserver(AM) && AM.move_speed < 12)
sense()
/obj/item/device/assembly/prox_sensor/proc/sense() /obj/item/device/assembly/prox_sensor/proc/sense()
if((!holder && !secured) || !scanning || !process_cooldown())
return FALSE
var/turf/mainloc = get_turf(src) 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) pulse(0)
if(!holder) if(!holder)
mainloc.visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") mainloc.visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
/obj/item/device/assembly/prox_sensor/process() /obj/item/device/assembly/prox_sensor/process()
if(scanning) if(scanning)
@@ -69,46 +62,35 @@
if(timing && time <= 0) if(timing && time <= 0)
timing = 0 timing = 0
toggle_scan() toggle_scan()
time = 10 time = initial(time)
return
/obj/item/device/assembly/prox_sensor/dropped() /obj/item/device/assembly/prox_sensor/dropped()
spawn(0) sense()
sense()
return
return
/obj/item/device/assembly/prox_sensor/proc/toggle_scan() /obj/item/device/assembly/prox_sensor/proc/toggle_scan()
if(!secured) return 0 if(!secured)
return FALSE
scanning = !scanning scanning = !scanning
update_icon() update_icon()
return
/obj/item/device/assembly/prox_sensor/update_icon() /obj/item/device/assembly/prox_sensor/update_icon()
overlays.Cut() cut_overlays()
attached_overlays = list() LAZYCLEARLIST(attached_overlays)
if(timing) if(timing)
overlays += "prox_timing" add_overlay("prox_timing")
attached_overlays += "prox_timing" LAZYADD(attached_overlays, "prox_timing")
if(scanning) if(scanning)
overlays += "prox_scanning" add_overlay("prox_scanning")
attached_overlays += "prox_scanning" LAZYADD(attached_overlays, "prox_scanning")
if(holder) if(holder)
holder.update_icon() holder.update_icon()
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade)) if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
grenade.primed(scanning) grenade.primed(scanning)
return
/obj/item/device/assembly/prox_sensor/Move() /obj/item/device/assembly/prox_sensor/Move()
..() ..()
sense() sense()
return
/obj/item/device/assembly/prox_sensor/interact(mob/user as mob)//TODO: Change this to the wires thingy /obj/item/device/assembly/prox_sensor/interact(mob/user as mob)//TODO: Change this to the wires thingy
if(!secured) if(!secured)
@@ -123,11 +105,11 @@
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>" dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=prox") user << browse(dat, "window=prox")
onclose(user, "prox") onclose(user, "prox")
return
/obj/item/device/assembly/prox_sensor/Topic(href, href_list, state = deep_inventory_state) /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)) if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=prox") usr << browse(null, "window=prox")
onclose(usr, "prox") onclose(usr, "prox")
@@ -156,6 +138,3 @@
if(usr) if(usr)
attack_self(usr) attack_self(usr)
return

View File

@@ -13,7 +13,7 @@
..() ..()
return 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) if(W.is_wrench() && !status)
var/turf/T = loc var/turf/T = loc
if(ismob(T)) if(ismob(T))

View File

@@ -25,25 +25,17 @@
/obj/item/device/assembly/signaler/activate() /obj/item/device/assembly/signaler/activate()
if(cooldown > 0) return FALSE if(!process_cooldown())
cooldown = 2 return FALSE
spawn(10)
process_cooldown()
signal() signal()
return TRUE return TRUE
/obj/item/device/assembly/signaler/update_icon() /obj/item/device/assembly/signaler/update_icon()
if(holder) if(holder)
holder.update_icon() 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 = "-------" var/t1 = "-------"
// if ((src.b_stat && !( flag1 )))
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? text("<A href='?src=\ref[];wires=4'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=4'>Mend Wire</A>", src)), (src.wires & 2 ? text("<A href='?src=\ref[];wires=2'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=2'>Mend Wire</A>", src)), (src.wires & 1 ? text("<A href='?src=\ref[];wires=1'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=1'>Mend Wire</A>", src)))
// else
// t1 = "-------" Speaker: [src.listening ? "<A href='byond://?src=\ref[src];listen=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];listen=1'>Disengaged</A>"]<BR>
var/dat = {" var/dat = {"
<TT> <TT>
@@ -66,8 +58,6 @@ Code:
</TT>"} </TT>"}
user << browse(dat, "window=radio") user << browse(dat, "window=radio")
onclose(user, "radio") onclose(user, "radio")
return
/obj/item/device/assembly/signaler/Topic(href, href_list, state = deep_inventory_state) /obj/item/device/assembly/signaler/Topic(href, href_list, state = deep_inventory_state)
if(..()) if(..())
@@ -97,9 +87,7 @@ Code:
if(usr) if(usr)
attack_self(usr) attack_self(usr)
return /obj/item/device/assembly/signaler/attackby(var/obj/item/weapon/W, mob/user, params)
/obj/item/device/assembly/signaler/attackby(obj/item/weapon/W, mob/user, params)
if(issignaler(W)) if(issignaler(W))
var/obj/item/device/assembly/signaler/signaler2 = W var/obj/item/device/assembly/signaler/signaler2 = W
if(secured && signaler2.secured) if(secured && signaler2.secured)
@@ -120,8 +108,6 @@ Code:
signal.encryption = code signal.encryption = code
signal.data["message"] = "ACTIVATE" signal.data["message"] = "ACTIVATE"
radio_connection.post_signal(src, signal) radio_connection.post_signal(src, signal)
return
/obj/item/device/assembly/signaler/pulse(var/radio = 0) /obj/item/device/assembly/signaler/pulse(var/radio = 0)
if(is_jammed(src)) if(is_jammed(src))
@@ -134,7 +120,6 @@ Code:
..(radio) ..(radio)
return TRUE return TRUE
/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal) /obj/item/device/assembly/signaler/receive_signal(datum/signal/signal)
if(!signal) if(!signal)
return FALSE return FALSE
@@ -149,8 +134,6 @@ Code:
if(!holder) if(!holder)
for(var/mob/O in hearers(1, src.loc)) for(var/mob/O in hearers(1, src.loc))
O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2)
return
/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) /obj/item/device/assembly/signaler/proc/set_frequency(new_frequency)
if(!frequency) if(!frequency)
@@ -163,7 +146,6 @@ Code:
radio_controller.remove_object(src, frequency) radio_controller.remove_object(src, frequency)
frequency = new_frequency frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
return
/obj/item/device/assembly/signaler/process() /obj/item/device/assembly/signaler/process()
if(!deadman) if(!deadman)
@@ -176,7 +158,6 @@ Code:
STOP_PROCESSING(SSobj, src) STOP_PROCESSING(SSobj, src)
else if(prob(5)) else if(prob(5))
M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!") M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!")
return
/obj/item/device/assembly/signaler/verb/deadman_it() /obj/item/device/assembly/signaler/verb/deadman_it()
set src in usr set src in usr

View File

@@ -14,14 +14,14 @@
/obj/item/device/assembly/timer/activate() /obj/item/device/assembly/timer/activate()
if(!..()) return 0//Cooldown check if(!..())
return FALSE
timing = !timing timing = !timing
update_icon() update_icon()
return 0 return 0
/obj/item/device/assembly/timer/toggle_secure() /obj/item/device/assembly/timer/toggle_secure()
secured = !secured secured = !secured
if(secured) if(secured)
@@ -32,27 +32,25 @@
update_icon() update_icon()
return secured 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() /obj/item/device/assembly/timer/proc/timer_end()
if(!secured) return 0 if(!secured)
return 0
pulse(0) pulse(0)
if(!holder) if(!holder)
visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
/obj/item/device/assembly/timer/process() /obj/item/device/assembly/timer/process()
if(timing && (time > 0)) if(timing && time-- <= 0)
time-- set_state(0)
if(timing && time <= 0)
timing = 0
timer_end() timer_end()
time = 10 time = 10
return
/obj/item/device/assembly/timer/update_icon() /obj/item/device/assembly/timer/update_icon()
overlays.Cut() overlays.Cut()
@@ -87,7 +85,8 @@
return return
if(href_list["time"]) if(href_list["time"])
timing = text2num(href_list["time"]) var/new_timing = text2num(href_list["time"])
set_state(new_timing)
update_icon() update_icon()
if(href_list["tp"]) if(href_list["tp"])

View File

@@ -26,10 +26,10 @@
/obj/item/device/assembly/voice/attack_self(mob/user) /obj/item/device/assembly/voice/attack_self(mob/user)
if(!user) return 0 if(!user)
return FALSE
activate() activate()
return 1 return TRUE
/obj/item/device/assembly/voice/toggle_secure() /obj/item/device/assembly/voice/toggle_secure()
. = ..() . = ..()