diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 43a79de4c46..79a25e3cd0b 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -181,3 +181,12 @@ stunforce = 5 hitcost = 2500 slot_flags = null + var/obj/item/device/assembly/igniter/sparkler = 0 + +/obj/item/weapon/melee/baton/cattleprod/New() + ..() + sparkler = new (src) + +/obj/item/weapon/melee/baton/cattleprod/baton_stun() + if(sparkler.activate()) + ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 9087ec8dc77..910c3dfc84a 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -117,7 +117,7 @@ qdel(I) qdel(src) - else if(istype(I, /obj/item/weapon/wirecutters) && !(I.flags & NODROP)) + else if(istype(I, /obj/item/device/assembly/igniter) && !(I.flags & NODROP)) var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod if(!remove_item_from_storage(user)) @@ -125,7 +125,7 @@ user.unEquip(I) user.put_in_hands(P) - user << "You fasten the wirecutters to the top of the rod with the cable, prongs outward." + user << "You fasten [I] to the top of the rod with the cable." qdel(I) qdel(src) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 889136ec691..55f99638f2d 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -8,6 +8,8 @@ var/timing = 0 var/time = 5 + var/saved_time = 5 + var/loop = 0 /obj/item/device/assembly/timer/New() @@ -46,6 +48,8 @@ cooldown = 2 spawn(10) process_cooldown() + if(loop) + timing = 1 update_icon() @@ -55,7 +59,7 @@ if(time <= 0) timing = 0 timer_end() - time = initial(time) + time = saved_time /obj/item/device/assembly/timer/update_icon() @@ -73,6 +77,7 @@ var/second = time % 60 var/minute = (time - second) / 60 var/dat = "Timing Unit\n[(timing ? "Timing" : "Not Timing")] [minute]:[second]\n- - + +\n" + dat += "

Stop repeating" : "1'>Set to repeat")]" dat += "

Refresh" dat += "

Close" var/datum/browser/popup = new(user, "timer", name) @@ -95,11 +100,14 @@ bombers += timer_message log_game("[key_name(usr)] activated [src] attachment for [loc]") update_icon() + if(href_list["repeat"]) + loop = text2num(href_list["repeat"]) if(href_list["tp"]) var/tp = text2num(href_list["tp"]) time += tp time = min(max(round(time), 1), 600) + saved_time = time if(href_list["close"]) usr << browse(null, "window=timer") diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 9364743c5db..68299dfa829 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -11,20 +11,65 @@ verb_exclaim = "beeps" var/listening = 0 var/recorded = "" //the activation message + var/mode = 1 + var/global/list/modes = list("inclusive", + "exclusive", + "recognizer", + "voice sensor") /obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) if(speaker == src) return if(listening && !radio_freq) - recorded = raw_message - listening = 0 - say("Activation message is '[recorded]'.") + record_speech(speaker, raw_message) else - if(findtextEx(raw_message, recorded)) + if(check_activation(speaker, raw_message)) spawn(10) pulse(0) +/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message) + switch(mode) + if(1) + recorded = raw_message + listening = 0 + say("Activation message is '[recorded]'.") + if(2) + recorded = raw_message + listening = 0 + say("Activation message is '[recorded]'.") + if(3) + recorded = speaker + listening = 0 + say("Your voice pattern is saved.") + if(4) + if(length(raw_message)) + spawn(10) + pulse(0) + +/obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message) + . = 0 + switch(mode) + if(1) + if(findtextEx(raw_message, recorded)) + . = 1 + if(2) + if(raw_message == recorded) + . = 1 + if(3) + if(speaker == recorded) + . = 1 + if(4) + if(length(raw_message)) + . = 1 + +/obj/item/device/assembly/voice/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/device/multitool)) + mode %= modes.len + mode++ + user << "You set [src] into a [modes[mode]] mode." + listening = 0 + /obj/item/device/assembly/voice/activate() if(secured) if(!holder) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 1b242b34cfa..76e0cead24a 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -63,7 +63,7 @@ result = /obj/item/weapon/melee/baton/cattleprod reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1, /obj/item/stack/rods = 1, - /obj/item/weapon/wirecutters = 1, + /obj/item/device/assembly/igniter = 1, /obj/item/weapon/stock_parts/cell = 1) time = 80 parts = list(/obj/item/weapon/stock_parts/cell = 1) diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 5093003a035..8e8cdeb2fc2 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index f5868458340..37d22120d7d 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 93ed62314d3..675da21434a 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ