diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 9d3d9f9d218..ce4e4f2ce63 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -22,6 +22,7 @@
if(!stage || stage==1)
if(detonator)
// detonator.loc=src.loc
+ detonator.detached()
usr.put_in_hands(detonator)
detonator=null
stage=0
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index f69a6b5c35d..b8fd9107195 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -23,6 +23,8 @@
proc/process_activation(var/obj/item/device/D)
return
+ proc/detached()
+ return
IsAssemblyHolder()
@@ -197,7 +199,7 @@
/obj/item/device/assembly_holder/timer_igniter
- name = "5sec timer-igniter assembly"
+ name = "timer-igniter assembly"
New()
..()
@@ -214,4 +216,40 @@
a_right = ign
secured = 1
update_icon()
+ name = initial(name) + " ([tmr.time] secs)"
+ loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure
+
+ detached()
+ loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure
+ ..()
+
+ verb/configure()
+ set name = "Set Timer"
+ set category = "Object"
+ set src in usr
+
+ if ( !(usr.stat || usr.restrained()) )
+ var/obj/item/device/assembly_holder/holder
+ if(istype(src,/obj/item/weapon/grenade/chem_grenade))
+ var/obj/item/weapon/grenade/chem_grenade/gren = src
+ holder=gren.detonator
+ var/obj/item/device/assembly/timer/tmr = holder.a_left
+ if(!istype(tmr,/obj/item/device/assembly/timer))
+ tmr = holder.a_right
+ if(!istype(tmr,/obj/item/device/assembly/timer))
+ usr << "This detonator has no timer."
+ return
+
+ if(tmr.timing)
+ usr << "Clock is ticking already."
+ else
+ var/ntime = input("Enter desired time in seconds", "Time", "5") as num
+ if (ntime>0 && ntime<1000)
+ tmr.time = ntime
+ name = initial(name) + "([tmr.time] secs)"
+ usr << "Timer set to [tmr.time] seconds."
+ else
+ usr << "Timer can't be [ntime<=0?"negative":"more than 1000 seconds"]."
+ else
+ usr << "You cannot do this while [usr.stat?"unconscious/dead":"restrained"]."
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index fc7c65b39bf..5ed584eecbf 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -20,7 +20,9 @@
activate()
if(!..()) return 0//Cooldown check
+
timing = !timing
+
update_icon()
return 0
@@ -37,7 +39,7 @@
timer_end()
- if((!secured)||(cooldown > 0)) return 0
+ if(!secured) return 0
pulse(0)
if(!holder)
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")