Kills off /obj/item/device (#6561)

This commit is contained in:
kevinz000
2018-04-29 22:06:58 -07:00
committed by Poojawa
parent ab3035a4ea
commit 3369c804b2
538 changed files with 6728 additions and 6707 deletions
+18 -18
View File
@@ -4,7 +4,7 @@
#define WIRE_RADIO_RECEIVE (1<<3)
#define WIRE_RADIO_PULSE (1<<4)
/obj/item/device/assembly
/obj/item/assembly
name = "assembly"
desc = "A small electronic device that should never exist."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
@@ -18,28 +18,28 @@
var/secured = TRUE
var/list/attached_overlays = null
var/obj/item/device/assembly_holder/holder = null
var/obj/item/assembly_holder/holder = null
var/wire_type = WIRE_RECEIVE | WIRE_PULSE
var/attachable = FALSE // can this be attached to wires
var/datum/wires/connected = null
var/next_activate = 0 //When we're next allowed to activate - for spam control
/obj/item/device/assembly/get_part_rating()
/obj/item/assembly/get_part_rating()
return 1
/obj/item/device/assembly/proc/on_attach()
/obj/item/assembly/proc/on_attach()
/obj/item/device/assembly/proc/on_detach()
/obj/item/assembly/proc/on_detach()
/obj/item/device/assembly/proc/holder_movement() //Called when the holder is moved
/obj/item/assembly/proc/holder_movement() //Called when the holder is moved
return
/obj/item/device/assembly/proc/describe() // Called by grenades to describe the state of the trigger (time left, etc)
/obj/item/assembly/proc/describe() // Called by grenades to describe the state of the trigger (time left, etc)
return "The trigger assembly looks broken!"
/obj/item/device/assembly/proc/is_secured(mob/user)
/obj/item/assembly/proc/is_secured(mob/user)
if(!secured)
to_chat(user, "<span class='warning'>The [name] is unsecured!</span>")
return FALSE
@@ -47,7 +47,7 @@
//Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
/obj/item/device/assembly/proc/pulsed(radio = 0)
/obj/item/assembly/proc/pulsed(radio = 0)
if(wire_type & WIRE_RECEIVE)
INVOKE_ASYNC(src, .proc/activate)
if(radio && (wire_type & WIRE_RADIO_RECEIVE))
@@ -56,7 +56,7 @@
//Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
/obj/item/device/assembly/proc/pulse(radio = 0)
/obj/item/assembly/proc/pulse(radio = 0)
if(connected && wire_type)
connected.pulse_assembly(src)
return TRUE
@@ -68,24 +68,24 @@
// What the device does when turned on
/obj/item/device/assembly/proc/activate()
/obj/item/assembly/proc/activate()
if(QDELETED(src) || !secured || (next_activate > world.time))
return FALSE
next_activate = world.time + 30
return TRUE
/obj/item/device/assembly/proc/toggle_secure()
/obj/item/assembly/proc/toggle_secure()
secured = !secured
update_icon()
return secured
/obj/item/device/assembly/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/attackby(obj/item/W, mob/user, params)
if(isassembly(W))
var/obj/item/device/assembly/A = W
var/obj/item/assembly/A = W
if((!A.secured) && (!secured))
holder = new/obj/item/device/assembly_holder(get_turf(src))
holder = new/obj/item/assembly_holder(get_turf(src))
holder.assemble(src,A,user)
to_chat(user, "<span class='notice'>You attach and secure \the [A] to \the [src]!</span>")
else
@@ -100,7 +100,7 @@
..()
/obj/item/device/assembly/examine(mob/user)
/obj/item/assembly/examine(mob/user)
..()
if(secured)
to_chat(user, "\The [src] is secured and ready to be used.")
@@ -108,12 +108,12 @@
to_chat(user, "\The [src] can be attached to other things.")
/obj/item/device/assembly/attack_self(mob/user)
/obj/item/assembly/attack_self(mob/user)
if(!user)
return FALSE
user.set_machine(src)
interact(user)
return TRUE
/obj/item/device/assembly/interact(mob/user)
/obj/item/assembly/interact(mob/user)
return ui_interact(user)
+12 -12
View File
@@ -1,4 +1,4 @@
/obj/item/device/onetankbomb
/obj/item/onetankbomb
name = "bomb"
icon = 'icons/obj/tank.dmi'
item_state = "assembly"
@@ -10,14 +10,14 @@
throw_range = 4
flags_1 = CONDUCT_1
var/status = FALSE //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank
/obj/item/device/onetankbomb/examine(mob/user)
/obj/item/onetankbomb/examine(mob/user)
bombtank.examine(user)
/obj/item/device/onetankbomb/update_icon()
/obj/item/onetankbomb/update_icon()
if(bombtank)
icon = bombtank.icon
icon_state = bombtank.icon_state
@@ -26,8 +26,8 @@
copy_overlays(bombassembly)
add_overlay("bomb_assembly")
/obj/item/device/onetankbomb/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/analyzer))
/obj/item/onetankbomb/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/analyzer))
bombtank.attackby(W, user)
return
if(istype(W, /obj/item/wrench) && !status) //This is basically bomb assembly code inverted. apparently it works.
@@ -54,12 +54,12 @@
add_fingerprint(user)
..()
/obj/item/device/onetankbomb/attack_self(mob/user) //pressing the bomb accesses its assembly
/obj/item/onetankbomb/attack_self(mob/user) //pressing the bomb accesses its assembly
bombassembly.attack_self(user, TRUE)
add_fingerprint(user)
return
/obj/item/device/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
/obj/item/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
visible_message("[icon2html(src, viewers(src))] *beep* *beep*", "*beep* *beep*")
sleep(10)
if(!src)
@@ -69,11 +69,11 @@
else
bombtank.release()
/obj/item/device/onetankbomb/Crossed(atom/movable/AM as mob|obj) //for mousetraps
/obj/item/onetankbomb/Crossed(atom/movable/AM as mob|obj) //for mousetraps
if(bombassembly)
bombassembly.Crossed(AM)
/obj/item/device/onetankbomb/on_found(mob/finder) //for mousetraps
/obj/item/onetankbomb/on_found(mob/finder) //for mousetraps
if(bombassembly)
bombassembly.on_found(finder)
@@ -81,7 +81,7 @@
// ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ----------
//Bomb assembly proc. This turns assembly+tank into a bomb
/obj/item/tank/proc/bomb_assemble(obj/item/device/assembly_holder/assembly, mob/living/user)
/obj/item/tank/proc/bomb_assemble(obj/item/assembly_holder/assembly, mob/living/user)
//Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
if(isigniter(assembly.a_left) == isigniter(assembly.a_right))
return
@@ -94,7 +94,7 @@
to_chat(user, "<span class='warning'>[assembly] is stuck to your hand!</span>")
return
var/obj/item/device/onetankbomb/bomb = new
var/obj/item/onetankbomb/bomb = new
user.transferItemToLoc(src, bomb)
user.transferItemToLoc(assembly, bomb)
+13 -13
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/control
/obj/item/assembly/control
name = "blast door controller"
desc = "A small electronic device able to control a blast door remotely."
icon_state = "control"
@@ -7,12 +7,12 @@
var/can_change_id = 0
var/cooldown = 0//Door cooldowns
/obj/item/device/assembly/control/examine(mob/user)
/obj/item/assembly/control/examine(mob/user)
..()
if(id)
to_chat(user, "<span class='notice'>Its channel ID is '[id]'.</span>")
/obj/item/device/assembly/control/activate()
/obj/item/assembly/control/activate()
cooldown = 1
var/openclose
for(var/obj/machinery/door/poddoor/M in GLOB.machines)
@@ -24,7 +24,7 @@
cooldown = 0
/obj/item/device/assembly/control/airlock
/obj/item/assembly/control/airlock
name = "airlock controller"
desc = "A small electronic device able to control an airlock remotely."
id = "badmin" // Set it to null for MEGAFUN.
@@ -37,7 +37,7 @@
16= door safties (SAFE)
*/
/obj/item/device/assembly/control/airlock/activate()
/obj/item/assembly/control/airlock/activate()
cooldown = 1
var/doors_need_closing = FALSE
var/list/obj/machinery/door/airlock/open_or_close = list()
@@ -70,11 +70,11 @@
cooldown = 0
/obj/item/device/assembly/control/massdriver
/obj/item/assembly/control/massdriver
name = "mass driver controller"
desc = "A small electronic device able to control a mass driver."
/obj/item/device/assembly/control/massdriver/activate()
/obj/item/assembly/control/massdriver/activate()
cooldown = 1
for(var/obj/machinery/door/poddoor/M in GLOB.machines)
if (M.id == src.id)
@@ -96,11 +96,11 @@
cooldown = 0
/obj/item/device/assembly/control/igniter
/obj/item/assembly/control/igniter
name = "ignition controller"
desc = "A remote controller for a mounted igniter."
/obj/item/device/assembly/control/igniter/activate()
/obj/item/assembly/control/igniter/activate()
cooldown = 1
for(var/obj/machinery/sparker/M in GLOB.machines)
if (M.id == src.id)
@@ -116,11 +116,11 @@
cooldown = 0
/obj/item/device/assembly/control/flasher
/obj/item/assembly/control/flasher
name = "flasher controller"
desc = "A remote controller for a mounted flasher."
/obj/item/device/assembly/control/flasher/activate()
/obj/item/assembly/control/flasher/activate()
cooldown = 1
for(var/obj/machinery/flasher/M in GLOB.machines)
if(M.id == src.id)
@@ -130,11 +130,11 @@
cooldown = 0
/obj/item/device/assembly/control/crematorium
/obj/item/assembly/control/crematorium
name = "crematorium controller"
desc = "An evil-looking remote controller for a crematorium."
/obj/item/device/assembly/control/crematorium/activate()
/obj/item/assembly/control/crematorium/activate()
cooldown = 1
for (var/obj/structure/bodycontainer/crematorium/C in GLOB.crematoriums)
if (C.id == id)
+33 -32
View File
@@ -1,6 +1,7 @@
/obj/item/device/assembly/flash
/obj/item/assembly/flash
name = "flash"
desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production."
icon = 'icons/obj/device.dmi'
icon_state = "flash"
item_state = "flashtool"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
@@ -15,7 +16,7 @@
var/cooldown = 0
var/last_trigger = 0 //Last time it was successfully triggered.
/obj/item/device/assembly/flash/suicide_act(mob/living/user)
/obj/item/assembly/flash/suicide_act(mob/living/user)
if (crit_fail)
user.visible_message("<span class='suicide'>[user] raises \the [src] up to [user.p_their()] eyes and activates it ... but its burnt out!</span>")
return SHAME
@@ -26,7 +27,7 @@
attack(user,user)
return FIRELOSS
/obj/item/device/assembly/flash/update_icon(flash = FALSE)
/obj/item/assembly/flash/update_icon(flash = FALSE)
cut_overlays()
attached_overlays = list()
if(crit_fail)
@@ -39,13 +40,13 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user)
/obj/item/assembly/flash/proc/clown_check(mob/living/carbon/human/user)
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
flash_carbon(user, user, 15, 0)
return FALSE
return TRUE
/obj/item/device/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
/obj/item/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
if(!crit_fail)
crit_fail = TRUE
update_icon()
@@ -56,7 +57,7 @@
var/turf/T = get_turf(src)
T.visible_message("<span class='danger'>[src] burns out!</span>")
/obj/item/device/assembly/flash/proc/flash_recharge(interval = 10)
/obj/item/assembly/flash/proc/flash_recharge(interval = 10)
var/deciseconds_passed = world.time - last_used
for(var/seconds = deciseconds_passed / 10, seconds >= interval, seconds -= interval) //get 1 charge every interval
times_used--
@@ -68,7 +69,7 @@
return TRUE
//BYPASS CHECKS ALSO PREVENTS BURNOUT!
/obj/item/device/assembly/flash/proc/AOE_flash(bypass_checks = FALSE, range = 3, power = 5, targeted = FALSE, mob/user)
/obj/item/assembly/flash/proc/AOE_flash(bypass_checks = FALSE, range = 3, power = 5, targeted = FALSE, mob/user)
if(!bypass_checks && !try_use_flash())
return FALSE
var/list/mob/targets = get_flash_targets(get_turf(src), range, FALSE)
@@ -78,7 +79,7 @@
flash_carbon(C, user, power, targeted, TRUE)
return TRUE
/obj/item/device/assembly/flash/proc/get_flash_targets(atom/target_loc, range = 3, override_vision_checks = FALSE)
/obj/item/assembly/flash/proc/get_flash_targets(atom/target_loc, range = 3, override_vision_checks = FALSE)
if(!target_loc)
target_loc = loc
if(override_vision_checks)
@@ -88,7 +89,7 @@
else
return typecache_filter_list(target_loc.GetAllContents(), typecacheof(list(/mob/living)))
/obj/item/device/assembly/flash/proc/try_use_flash(mob/user = null)
/obj/item/assembly/flash/proc/try_use_flash(mob/user = null)
if(crit_fail || (world.time < last_trigger + cooldown))
return FALSE
last_trigger = world.time
@@ -100,7 +101,7 @@
return FALSE
return TRUE
/obj/item/device/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user, power = 15, targeted = TRUE, generic_message = FALSE)
/obj/item/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user, power = 15, targeted = TRUE, generic_message = FALSE)
if(!istype(M))
return
add_logs(user, M, "[targeted? "flashed(targeted)" : "flashed(AOE)"]", src)
@@ -127,7 +128,7 @@
if(M.flash_act())
M.confused += power
/obj/item/device/assembly/flash/attack(mob/living/M, mob/user)
/obj/item/assembly/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
return FALSE
if(iscarbon(M))
@@ -145,26 +146,26 @@
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>", "<span class='warning'>You fail to blind [M] with the flash!</span>")
/obj/item/device/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
/obj/item/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
if(holder)
return FALSE
if(!AOE_flash(FALSE, 3, 5, FALSE, user))
return FALSE
to_chat(user, "<span class='danger'>[src] emits a blinding light!</span>")
/obj/item/device/assembly/flash/emp_act(severity)
/obj/item/assembly/flash/emp_act(severity)
if(!try_use_flash())
return FALSE
AOE_flash()
burn_out()
. = ..()
/obj/item/device/assembly/flash/activate()//AOE flash on signal recieved
/obj/item/assembly/flash/activate()//AOE flash on signal recieved
if(!..())
return
AOE_flash()
/obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/living/carbon/human/H, mob/user)
/obj/item/assembly/flash/proc/terrible_conversion_proc(mob/living/carbon/human/H, mob/user)
if(istype(H) && ishuman(user) && H.stat != DEAD)
if(user.mind)
var/datum/antagonist/rev/head/converter = user.mind.has_antag_datum(/datum/antagonist/rev/head)
@@ -182,43 +183,43 @@
to_chat(user, "<span class='warning'>This mind seems resistant to the flash!</span>")
/obj/item/device/assembly/flash/cyborg
/obj/item/assembly/flash/cyborg
/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user)
/obj/item/assembly/flash/cyborg/attack(mob/living/M, mob/user)
..()
new /obj/effect/temp_visual/borgflash(get_turf(src))
/obj/item/device/assembly/flash/cyborg/attack_self(mob/user)
/obj/item/assembly/flash/cyborg/attack_self(mob/user)
..()
new /obj/effect/temp_visual/borgflash(get_turf(src))
/obj/item/device/assembly/flash/cyborg/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, params)
return
/obj/item/device/assembly/flash/memorizer
/obj/item/assembly/flash/memorizer
name = "memorizer"
desc = "If you see this, you're not likely to remember it any time soon."
icon = 'icons/obj/device.dmi'
icon_state = "memorizer"
item_state = "nullrod"
/obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes
/obj/item/assembly/flash/handheld //this is now the regular pocket flashes
/obj/item/device/assembly/flash/armimplant
/obj/item/assembly/flash/armimplant
name = "photon projector"
desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocals fix the flashbulb if it ever burns out."
var/flashcd = 20
var/overheat = 0
var/obj/item/organ/cyberimp/arm/flash/I = null
/obj/item/device/assembly/flash/armimplant/burn_out()
/obj/item/assembly/flash/armimplant/burn_out()
if(I && I.owner)
to_chat(I.owner, "<span class='warning'>Your photon projector implant overheats and deactivates!</span>")
I.Retract()
overheat = TRUE
addtimer(CALLBACK(src, .proc/cooldown), flashcd * 2)
/obj/item/device/assembly/flash/armimplant/try_use_flash(mob/user = null)
/obj/item/assembly/flash/armimplant/try_use_flash(mob/user = null)
if(overheat)
if(I && I.owner)
to_chat(I.owner, "<span class='warning'>Your photon projector is running too hot to be used again so quickly!</span>")
@@ -230,10 +231,10 @@
return TRUE
/obj/item/device/assembly/flash/armimplant/proc/cooldown()
/obj/item/assembly/flash/armimplant/proc/cooldown()
overheat = FALSE
/obj/item/device/assembly/flash/shield
/obj/item/assembly/flash/shield
name = "strobe shield"
desc = "A shield with a built in, high intensity light capable of blinding and disorienting suspects. Takes regular handheld flashes as bulbs."
icon = 'icons/obj/items_and_weapons.dmi'
@@ -252,15 +253,15 @@
block_chance = 50
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
/obj/item/device/assembly/flash/shield/flash_recharge(interval=10)
/obj/item/assembly/flash/shield/flash_recharge(interval=10)
if(times_used >= 4)
burn_out()
return FALSE
return TRUE
/obj/item/device/assembly/flash/shield/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/device/assembly/flash/handheld))
var/obj/item/device/assembly/flash/handheld/flash = W
/obj/item/assembly/flash/shield/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/assembly/flash/handheld))
var/obj/item/assembly/flash/handheld/flash = W
if(flash.crit_fail)
to_chat(user, "No sense replacing it with a broken bulb.")
return
@@ -278,7 +279,7 @@
return
..()
/obj/item/device/assembly/flash/shield/update_icon(flash = FALSE)
/obj/item/assembly/flash/shield/update_icon(flash = FALSE)
icon_state = "flashshield"
item_state = "flashshield"
@@ -293,6 +294,6 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/flash/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/assembly/flash/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
activate()
return ..()
+10 -10
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/health
/obj/item/assembly/health
name = "health sensor"
desc = "Used for scanning and monitoring health."
icon_state = "health"
@@ -10,17 +10,17 @@
var/health_scan
var/alarm_health = 0
/obj/item/device/assembly/health/examine(mob/user)
/obj/item/assembly/health/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use a multitool to swap between \"detect death\" mode and \"detect critical state\" mode.</span>")
/obj/item/device/assembly/health/activate()
/obj/item/assembly/health/activate()
if(!..())
return 0//Cooldown check
toggle_scan()
return 0
/obj/item/device/assembly/health/toggle_secure()
/obj/item/assembly/health/toggle_secure()
secured = !secured
if(secured && scanning)
START_PROCESSING(SSobj, src)
@@ -30,8 +30,8 @@
update_icon()
return secured
/obj/item/device/assembly/health/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/multitool))
/obj/item/assembly/health/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/multitool))
if(alarm_health == 0)
alarm_health = -90
user.show_message("You toggle [src] to \"detect death\" mode.")
@@ -42,7 +42,7 @@
else
return ..()
/obj/item/device/assembly/health/process()
/obj/item/assembly/health/process()
if(!scanning || !secured)
return
@@ -63,7 +63,7 @@
return
return
/obj/item/device/assembly/health/proc/toggle_scan()
/obj/item/assembly/health/proc/toggle_scan()
if(!secured)
return 0
scanning = !scanning
@@ -73,7 +73,7 @@
STOP_PROCESSING(SSobj, src)
return
/obj/item/device/assembly/health/ui_interact(mob/user as mob)//TODO: Change this to the wires thingy
/obj/item/assembly/health/ui_interact(mob/user as mob)//TODO: Change this to the wires thingy
. = ..()
if(!secured)
user.show_message("<span class='warning'>The [name] is unsecured!</span>")
@@ -84,7 +84,7 @@
user << browse(dat, "window=hscan")
onclose(user, "hscan")
/obj/item/device/assembly/health/Topic(href, href_list)
/obj/item/assembly/health/Topic(href, href_list)
..()
if(!ismob(usr))
return
+14 -14
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly_holder
/obj/item/assembly_holder
name = "Assembly"
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "holder"
@@ -11,21 +11,21 @@
throw_speed = 2
throw_range = 7
var/obj/item/device/assembly/a_left = null
var/obj/item/device/assembly/a_right = null
var/obj/item/assembly/a_left = null
var/obj/item/assembly/a_right = null
/obj/item/device/assembly_holder/IsAssemblyHolder()
/obj/item/assembly_holder/IsAssemblyHolder()
return 1
/obj/item/device/assembly_holder/proc/assemble(obj/item/device/assembly/A, obj/item/device/assembly/A2, mob/user)
/obj/item/assembly_holder/proc/assemble(obj/item/assembly/A, obj/item/assembly/A2, mob/user)
attach(A,user)
attach(A2,user)
name = "[A.name]-[A2.name] assembly"
update_icon()
SSblackbox.record_feedback("tally", "assembly_made", 1, "[initial(A.name)]-[initial(A2.name)]")
/obj/item/device/assembly_holder/proc/attach(obj/item/device/assembly/A, mob/user)
/obj/item/assembly_holder/proc/attach(obj/item/assembly/A, mob/user)
if(!A.remove_item_from_storage(src))
if(user)
user.transferItemToLoc(A, src)
@@ -38,7 +38,7 @@
else
a_right = A
/obj/item/device/assembly_holder/update_icon()
/obj/item/assembly_holder/update_icon()
cut_overlays()
if(a_left)
add_overlay("[a_left.icon_state]_left")
@@ -55,25 +55,25 @@
if(master)
master.update_icon()
/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj)
/obj/item/assembly_holder/Crossed(atom/movable/AM as mob|obj)
if(a_left)
a_left.Crossed(AM)
if(a_right)
a_right.Crossed(AM)
/obj/item/device/assembly_holder/on_found(mob/finder)
/obj/item/assembly_holder/on_found(mob/finder)
if(a_left)
a_left.on_found(finder)
if(a_right)
a_right.on_found(finder)
/obj/item/device/assembly_holder/Move()
/obj/item/assembly_holder/Move()
. = ..()
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
/obj/item/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
. = ..()
if(.)
return
@@ -81,7 +81,7 @@
a_left.holder_movement()
a_right.holder_movement()
/obj/item/device/assembly_holder/attackby(obj/item/W, mob/user, params)
/obj/item/assembly_holder/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
var/turf/T = get_turf(src)
if(!T)
@@ -96,7 +96,7 @@
else
..()
/obj/item/device/assembly_holder/attack_self(mob/user)
/obj/item/assembly_holder/attack_self(mob/user)
src.add_fingerprint(user)
if(!a_left || !a_right)
to_chat(user, "<span class='danger'>Assembly part missing!</span>")
@@ -113,7 +113,7 @@
a_right.attack_self(user)
/obj/item/device/assembly_holder/proc/process_activation(obj/D, normal = 1, special = 1)
/obj/item/assembly_holder/proc/process_activation(obj/D, normal = 1, special = 1)
if(!D)
return 0
if((normal) && (a_right) && (a_left))
+7 -7
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/igniter
/obj/item/assembly/igniter
name = "igniter"
desc = "A small electronic device able to ignite combustible substances."
icon_state = "igniter"
@@ -6,22 +6,22 @@
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
heat = 1000
/obj/item/device/assembly/igniter/suicide_act(mob/living/carbon/user)
/obj/item/assembly/igniter/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] is trying to ignite [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.IgniteMob()
return FIRELOSS
/obj/item/device/assembly/igniter/New()
/obj/item/assembly/igniter/New()
..()
sparks.set_up(2, 0, src)
sparks.attach(src)
/obj/item/device/assembly/igniter/Destroy()
/obj/item/assembly/igniter/Destroy()
qdel(sparks)
sparks = null
. = ..()
/obj/item/device/assembly/igniter/activate()
/obj/item/assembly/igniter/activate()
if(!..())
return 0//Cooldown check
var/turf/location = get_turf(loc)
@@ -30,11 +30,11 @@
sparks.start()
return 1
/obj/item/device/assembly/igniter/attack_self(mob/user)
/obj/item/assembly/igniter/attack_self(mob/user)
activate()
add_fingerprint(user)
/obj/item/device/assembly/igniter/ignition_effect(atom/A, mob/user)
/obj/item/assembly/igniter/ignition_effect(atom/A, mob/user)
. = "<span class='notice'>[user] fiddles with [src], and manages to \
light [A].</span>"
activate()
+24 -24
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/infra
/obj/item/assembly/infra
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "infrared"
@@ -11,26 +11,26 @@
var/olddir = 0
var/datum/component/redirect/listener
/obj/item/device/assembly/infra/Initialize()
/obj/item/assembly/infra/Initialize()
. = ..()
beams = list()
START_PROCESSING(SSobj, src)
/obj/item/device/assembly/infra/Destroy()
/obj/item/assembly/infra/Destroy()
QDEL_LIST(beams)
return ..()
/obj/item/device/assembly/infra/describe()
/obj/item/assembly/infra/describe()
return "The infrared trigger is [on?"on":"off"]."
/obj/item/device/assembly/infra/activate()
/obj/item/assembly/infra/activate()
if(!..())
return 0//Cooldown check
on = !on
update_icon()
return 1
/obj/item/device/assembly/infra/toggle_secure()
/obj/item/assembly/infra/toggle_secure()
secured = !secured
if(secured)
START_PROCESSING(SSobj, src)
@@ -40,7 +40,7 @@
update_icon()
return secured
/obj/item/device/assembly/infra/update_icon()
/obj/item/assembly/infra/update_icon()
cut_overlays()
attached_overlays = list()
if(on)
@@ -51,15 +51,15 @@
holder.update_icon()
return
/obj/item/device/assembly/infra/dropped()
/obj/item/assembly/infra/dropped()
refreshBeam()
/obj/item/device/assembly/infra/process()
/obj/item/assembly/infra/process()
if(!on || !secured)
refreshBeam()
return
/obj/item/device/assembly/infra/proc/refreshBeam()
/obj/item/assembly/infra/proc/refreshBeam()
QDEL_LIST(beams)
if(throwing || !on || !secured || !(isturf(loc) || holder && isturf(holder.loc)))
return
@@ -83,33 +83,33 @@
_T = get_step(_T, _dir)
CHECK_TICK
/obj/item/device/assembly/infra/attack_hand()
/obj/item/assembly/infra/attack_hand()
. = ..()
refreshBeam()
/obj/item/device/assembly/infra/Moved()
/obj/item/assembly/infra/Moved()
var/t = dir
. = ..()
setDir(t)
/obj/item/device/assembly/infra/throw_at()
/obj/item/assembly/infra/throw_at()
. = ..()
olddir = dir
/obj/item/device/assembly/infra/throw_impact()
/obj/item/assembly/infra/throw_impact()
. = ..()
if(!olddir)
return
setDir(olddir)
olddir = null
/obj/item/device/assembly/infra/holder_movement()
/obj/item/assembly/infra/holder_movement()
if(!holder)
return 0
refreshBeam()
return 1
/obj/item/device/assembly/infra/proc/trigger_beam(atom/movable/AM, turf/location)
/obj/item/assembly/infra/proc/trigger_beam(atom/movable/AM, turf/location)
refreshBeam()
switchListener(location)
if(!secured || !on || next_activate > world.time)
@@ -118,16 +118,16 @@
audible_message("[icon2html(src, hearers(src))] *beep* *beep*", null, 3)
next_activate = world.time + 30
/obj/item/device/assembly/infra/proc/switchListener(turf/newloc)
/obj/item/assembly/infra/proc/switchListener(turf/newloc)
QDEL_NULL(listener)
listener = newloc.AddComponent(/datum/component/redirect, COMSIG_ATOM_EXITED, CALLBACK(src, .proc/check_exit))
/obj/item/device/assembly/infra/proc/check_exit(atom/movable/offender)
/obj/item/assembly/infra/proc/check_exit(atom/movable/offender)
if(offender && ((offender.flags_1 & ABSTRACT_1) || offender == src))
return
return refreshBeam()
/obj/item/device/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel
/obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel
. = ..()
if(is_secured(user))
user.set_machine(src)
@@ -138,7 +138,7 @@
onclose(user, "infra")
return
/obj/item/device/assembly/infra/Topic(href, href_list)
/obj/item/assembly/infra/Topic(href, href_list)
..()
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=infra")
@@ -157,7 +157,7 @@
if(usr)
attack_self(usr)
/obj/item/device/assembly/infra/verb/rotate()//This could likely be better
/obj/item/assembly/infra/verb/rotate()//This could likely be better
set name = "Rotate Infrared Laser"
set category = "Object"
set src in usr
@@ -167,14 +167,14 @@
setDir(turn(dir, -90))
/obj/item/device/assembly/infra/AltClick(mob/user)
/obj/item/assembly/infra/AltClick(mob/user)
..()
if(!user.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
return
else
rotate()
/obj/item/device/assembly/infra/setDir()
/obj/item/assembly/infra/setDir()
. = ..()
refreshBeam()
@@ -184,7 +184,7 @@
name = "infrared beam"
icon = 'icons/obj/projectiles.dmi'
icon_state = "ibeam"
var/obj/item/device/assembly/infra/master
var/obj/item/assembly/infra/master
anchored = TRUE
density = FALSE
flags_1 = ABSTRACT_1
+12 -12
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/mousetrap
/obj/item/assembly/mousetrap
name = "mousetrap"
desc = "A handy little spring-loaded trap for catching pesty rodents."
icon_state = "mousetrap"
@@ -7,14 +7,14 @@
var/armed = 0
/obj/item/device/assembly/mousetrap/examine(mob/user)
/obj/item/assembly/mousetrap/examine(mob/user)
..()
if(armed)
to_chat(user, "The mousetrap is armed!")
else
to_chat(user, "The mousetrap is not armed.")
/obj/item/device/assembly/mousetrap/activate()
/obj/item/assembly/mousetrap/activate()
if(..())
armed = !armed
if(!armed)
@@ -27,10 +27,10 @@
if(usr)
playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
/obj/item/device/assembly/mousetrap/describe()
/obj/item/assembly/mousetrap/describe()
return "The pressure switch is [armed?"primed":"safe"]."
/obj/item/device/assembly/mousetrap/update_icon()
/obj/item/assembly/mousetrap/update_icon()
if(armed)
icon_state = "mousetraparmed"
else
@@ -38,7 +38,7 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/mousetrap/proc/triggered(mob/target, type = "feet")
/obj/item/assembly/mousetrap/proc/triggered(mob/target, type = "feet")
if(!armed)
return
var/obj/item/bodypart/affecting = null
@@ -72,7 +72,7 @@
pulse(0)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user)
/obj/item/assembly/mousetrap/attack_self(mob/living/carbon/human/user)
if(!armed)
to_chat(user, "<span class='notice'>You arm [src].</span>")
else
@@ -91,7 +91,7 @@
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user)
/obj/item/assembly/mousetrap/attack_hand(mob/living/carbon/human/user)
if(armed)
if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50))
var/which_hand = BODY_ZONE_PRECISE_L_HAND
@@ -104,7 +104,7 @@
return ..()
/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
/obj/item/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
if(armed)
if(ismob(AM))
var/mob/MM = AM
@@ -122,7 +122,7 @@
..()
/obj/item/device/assembly/mousetrap/on_found(mob/finder)
/obj/item/assembly/mousetrap/on_found(mob/finder)
if(armed)
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
@@ -131,13 +131,13 @@
return 0
/obj/item/device/assembly/mousetrap/hitby(A as mob|obj)
/obj/item/assembly/mousetrap/hitby(A as mob|obj)
if(!armed)
return ..()
visible_message("<span class='warning'>[src] is triggered by [A].</span>")
triggered(null)
/obj/item/device/assembly/mousetrap/armed
/obj/item/assembly/mousetrap/armed
icon_state = "mousetraparmed"
armed = 1
+15 -15
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/prox_sensor
/obj/item/assembly/prox_sensor
name = "proximity sensor"
desc = "Used for scanning and alerting when someone enters a certain proximity."
icon_state = "prox"
@@ -10,29 +10,29 @@
var/time = 10
var/sensitivity = 1
/obj/item/device/assembly/prox_sensor/proc/toggle_scan()
/obj/item/assembly/prox_sensor/proc/toggle_scan()
/obj/item/device/assembly/prox_sensor/proc/sense()
/obj/item/assembly/prox_sensor/proc/sense()
/obj/item/device/assembly/prox_sensor/Initialize()
/obj/item/assembly/prox_sensor/Initialize()
. = ..()
proximity_monitor = new(src, 0)
/obj/item/device/assembly/prox_sensor/describe()
/obj/item/assembly/prox_sensor/describe()
if(timing)
return "<span class='notice'>The proximity sensor is arming.</span>"
return "The proximity sensor is [scanning?"armed":"disarmed"]."
/obj/item/device/assembly/prox_sensor/activate()
/obj/item/assembly/prox_sensor/activate()
if(!..())
return 0//Cooldown check
timing = !timing
update_icon()
return 1
/obj/item/device/assembly/prox_sensor/toggle_secure()
/obj/item/assembly/prox_sensor/toggle_secure()
secured = !secured
if(!secured)
if(scanning)
@@ -45,13 +45,13 @@
return secured
/obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
/obj/item/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
if (istype(AM, /obj/effect/beam))
return
sense()
/obj/item/device/assembly/prox_sensor/sense()
/obj/item/assembly/prox_sensor/sense()
if(!scanning || !secured || next_activate > world.time)
return 0
pulse(0)
@@ -59,7 +59,7 @@
next_activate = world.time + 30
/obj/item/device/assembly/prox_sensor/process()
/obj/item/assembly/prox_sensor/process()
if(timing)
time--
if(time <= 0)
@@ -67,20 +67,20 @@
toggle_scan(1)
time = initial(time)
/obj/item/device/assembly/prox_sensor/toggle_scan(scan)
/obj/item/assembly/prox_sensor/toggle_scan(scan)
if(!secured)
return 0
scanning = scan
proximity_monitor.SetRange(scanning ? sensitivity : 0)
update_icon()
/obj/item/device/assembly/prox_sensor/proc/sensitivity_change(value)
/obj/item/assembly/prox_sensor/proc/sensitivity_change(value)
var/sense = min(max(sensitivity + value, 0), 5)
sensitivity = sense
if(scanning && proximity_monitor.SetRange(sense))
sense()
/obj/item/device/assembly/prox_sensor/update_icon()
/obj/item/assembly/prox_sensor/update_icon()
cut_overlays()
attached_overlays = list()
if(timing)
@@ -93,7 +93,7 @@
holder.update_icon()
return
/obj/item/device/assembly/prox_sensor/ui_interact(mob/user)//TODO: Change this to the wires thingy
/obj/item/assembly/prox_sensor/ui_interact(mob/user)//TODO: Change this to the wires thingy
. = ..()
if(is_secured(user))
var/second = time % 60
@@ -108,7 +108,7 @@
return
/obj/item/device/assembly/prox_sensor/Topic(href, href_list)
/obj/item/assembly/prox_sensor/Topic(href, href_list)
..()
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=prox")
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "shock_kit"
var/obj/item/clothing/head/helmet/part1 = null
var/obj/item/device/electropack/part2 = null
var/obj/item/electropack/part2 = null
w_class = WEIGHT_CLASS_HUGE
flags_1 = CONDUCT_1
+24 -24
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/signaler
/obj/item/assembly/signaler
name = "remote signaling device"
desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another."
icon_state = "signaller"
@@ -15,40 +15,40 @@
var/datum/radio_frequency/radio_connection
var/suicider = null
/obj/item/device/assembly/signaler/suicide_act(mob/living/carbon/user)
/obj/item/assembly/signaler/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] eats \the [src]! If it is signaled, [user.p_they()] will die!</span>")
playsound(src, 'sound/items/eatfood.ogg', 50, 1)
user.transferItemToLoc(src, user, TRUE)
suicider = user
return MANUAL_SUICIDE
/obj/item/device/assembly/signaler/proc/manual_suicide(mob/living/carbon/user)
/obj/item/assembly/signaler/proc/manual_suicide(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user]'s \the [src] recieves a signal, killing them instantly!</span>")
user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something.
user.death(0)
/obj/item/device/assembly/signaler/New()
/obj/item/assembly/signaler/New()
..()
spawn(40)
set_frequency(frequency)
/obj/item/device/assembly/signaler/Destroy()
/obj/item/assembly/signaler/Destroy()
SSradio.remove_object(src,frequency)
return ..()
/obj/item/device/assembly/signaler/activate()
/obj/item/assembly/signaler/activate()
if(!..())//cooldown processing
return FALSE
signal()
return TRUE
/obj/item/device/assembly/signaler/update_icon()
/obj/item/assembly/signaler/update_icon()
if(holder)
holder.update_icon()
return
/obj/item/device/assembly/signaler/ui_interact(mob/user, flag1)
/obj/item/assembly/signaler/ui_interact(mob/user, flag1)
. = ..()
if(is_secured(user))
var/t1 = "-------"
@@ -77,7 +77,7 @@ Code:
return
/obj/item/device/assembly/signaler/Topic(href, href_list)
/obj/item/assembly/signaler/Topic(href, href_list)
..()
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
@@ -106,16 +106,16 @@ Code:
return
/obj/item/device/assembly/signaler/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, params)
if(issignaler(W))
var/obj/item/device/assembly/signaler/signaler2 = W
var/obj/item/assembly/signaler/signaler2 = W
if(secured && signaler2.secured)
code = signaler2.code
frequency = signaler2.frequency
to_chat(user, "You transfer the frequency and code of \the [signaler2.name] to \the [name]")
..()
/obj/item/device/assembly/signaler/proc/signal()
/obj/item/assembly/signaler/proc/signal()
if(!radio_connection)
return
@@ -130,7 +130,7 @@ Code:
return
/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal)
/obj/item/assembly/signaler/receive_signal(datum/signal/signal)
if(!signal)
return 0
if(signal.data["code"] != code)
@@ -144,7 +144,7 @@ Code:
return
/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency)
/obj/item/assembly/signaler/proc/set_frequency(new_frequency)
SSradio.remove_object(src, frequency)
frequency = new_frequency
radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER)
@@ -153,27 +153,27 @@ Code:
// Embedded signaller used in grenade construction.
// It's necessary because the signaler doens't have an off state.
// Generated during grenade construction. -Sayu
/obj/item/device/assembly/signaler/reciever
/obj/item/assembly/signaler/reciever
var/on = FALSE
/obj/item/device/assembly/signaler/reciever/proc/toggle_safety()
/obj/item/assembly/signaler/reciever/proc/toggle_safety()
on = !on
/obj/item/device/assembly/signaler/reciever/activate()
/obj/item/assembly/signaler/reciever/activate()
toggle_safety()
return 1
/obj/item/device/assembly/signaler/reciever/describe()
/obj/item/assembly/signaler/reciever/describe()
return "The radio receiver is [on?"on":"off"]."
/obj/item/device/assembly/signaler/reciever/receive_signal(datum/signal/signal)
/obj/item/assembly/signaler/reciever/receive_signal(datum/signal/signal)
if(!on)
return
return ..(signal)
// Embedded signaller used in anomalies.
/obj/item/device/assembly/signaler/anomaly
/obj/item/assembly/signaler/anomaly
name = "anomaly core"
desc = "The neutralized core of an anomaly. It'd probably be valuable for research."
icon_state = "anomaly core"
@@ -181,7 +181,7 @@ Code:
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
/obj/item/device/assembly/signaler/anomaly/receive_signal(datum/signal/signal)
/obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal)
if(!signal)
return 0
if(signal.data["code"] != code)
@@ -189,10 +189,10 @@ Code:
for(var/obj/effect/anomaly/A in get_turf(src))
A.anomalyNeutralize()
/obj/item/device/assembly/signaler/anomaly/attack_self()
/obj/item/assembly/signaler/anomaly/attack_self()
return
/obj/item/device/assembly/signaler/cyborg
/obj/item/assembly/signaler/cyborg
/obj/item/device/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params)
return
+13 -13
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/timer
/obj/item/assembly/timer
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
@@ -10,28 +10,28 @@
var/saved_time = 5
var/loop = 0
/obj/item/device/assembly/timer/suicide_act(mob/living/user)
/obj/item/assembly/timer/suicide_act(mob/living/user)
user.visible_message("<span class='suicide'>[user] looks at the timer and decides [user.p_their()] fate! It looks like [user.p_theyre()] going to commit suicide!</span>")
activate()//doesnt rely on timer_end to prevent weird metas where one person can control the timer and therefore someone's life. (maybe that should be how it works...)
addtimer(CALLBACK(src, .proc/manual_suicide, user), time*10)//kill yourself once the time runs out
return MANUAL_SUICIDE
/obj/item/device/assembly/timer/proc/manual_suicide(mob/living/user)
/obj/item/assembly/timer/proc/manual_suicide(mob/living/user)
user.visible_message("<span class='suicide'>[user]'s time is up!</span>")
user.adjustOxyLoss(200)
user.death(0)
/obj/item/device/assembly/timer/New()
/obj/item/assembly/timer/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/device/assembly/timer/describe()
/obj/item/assembly/timer/describe()
if(timing)
return "The timer is counting down from [time]!"
return "The timer is set for [time] seconds."
/obj/item/device/assembly/timer/activate()
/obj/item/assembly/timer/activate()
if(!..())
return 0//Cooldown check
timing = !timing
@@ -39,7 +39,7 @@
return 1
/obj/item/device/assembly/timer/toggle_secure()
/obj/item/assembly/timer/toggle_secure()
secured = !secured
if(secured)
START_PROCESSING(SSobj, src)
@@ -50,7 +50,7 @@
return secured
/obj/item/device/assembly/timer/proc/timer_end()
/obj/item/assembly/timer/proc/timer_end()
if(!secured || next_activate > world.time)
return FALSE
pulse(0)
@@ -60,7 +60,7 @@
update_icon()
/obj/item/device/assembly/timer/process()
/obj/item/assembly/timer/process()
if(timing)
time--
if(time <= 0)
@@ -69,7 +69,7 @@
time = saved_time
/obj/item/device/assembly/timer/update_icon()
/obj/item/assembly/timer/update_icon()
cut_overlays()
attached_overlays = list()
if(timing)
@@ -79,7 +79,7 @@
holder.update_icon()
/obj/item/device/assembly/timer/ui_interact(mob/user)//TODO: Have this use the wires
/obj/item/assembly/timer/ui_interact(mob/user)//TODO: Have this use the wires
. = ..()
if(is_secured(user))
var/second = time % 60
@@ -93,7 +93,7 @@
popup.open()
/obj/item/device/assembly/timer/Topic(href, href_list)
/obj/item/assembly/timer/Topic(href, href_list)
..()
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=timer")
@@ -102,7 +102,7 @@
if(href_list["time"])
timing = text2num(href_list["time"])
if(timing && istype(holder, /obj/item/device/transfer_valve))
if(timing && istype(holder, /obj/item/transfer_valve))
var/timer_message = "[ADMIN_LOOKUPFLW(usr)] activated [src] attachment on [holder]."
message_admins(timer_message)
GLOB.bombers += timer_message
+10 -10
View File
@@ -1,4 +1,4 @@
/obj/item/device/assembly/voice
/obj/item/assembly/voice
name = "voice analyzer"
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
icon_state = "voice"
@@ -16,11 +16,11 @@
"recognizer",
"voice sensor")
/obj/item/device/assembly/voice/examine(mob/user)
/obj/item/assembly/voice/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.</span>")
/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
/obj/item/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
if(speaker == src)
return
@@ -30,7 +30,7 @@
if(check_activation(speaker, raw_message))
addtimer(CALLBACK(src, .proc/pulse, 0), 10)
/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language)
/obj/item/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language)
switch(mode)
if(1)
recorded = raw_message
@@ -48,7 +48,7 @@
if(length(raw_message))
addtimer(CALLBACK(src, .proc/pulse, 0), 10)
/obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message)
/obj/item/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message)
. = 0
switch(mode)
if(1)
@@ -64,8 +64,8 @@
if(length(raw_message))
. = 1
/obj/item/device/assembly/voice/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/multitool))
/obj/item/assembly/voice/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/multitool))
mode %= modes.len
mode++
to_chat(user, "You set [src] into a [modes[mode]] mode.")
@@ -74,18 +74,18 @@
else
return ..()
/obj/item/device/assembly/voice/activate()
/obj/item/assembly/voice/activate()
if(secured)
if(!holder)
listening = !listening
say("[listening ? "Now" : "No longer"] recording input.")
/obj/item/device/assembly/voice/attack_self(mob/user)
/obj/item/assembly/voice/attack_self(mob/user)
if(!user)
return 0
activate()
return 1
/obj/item/device/assembly/voice/toggle_secure()
/obj/item/assembly/voice/toggle_secure()
. = ..()
listening = 0