From f4f3beeacbfc5e72843d16cefb42da0ea0a3429c Mon Sep 17 00:00:00 2001 From: Ater Ignis Date: Sun, 28 Oct 2012 21:52:09 +0400 Subject: [PATCH 1/3] that must be a bit more correct, i think --- code/modules/assembly/proximity.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 3549fe9954f..c54afdc0c67 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -48,8 +48,7 @@ sense() - var/obj/mainloc = loc - if(holder) mainloc=holder.loc + var/turf/mainloc = get_turf(src) // if(scanning && cooldown <= 0) // mainloc.visible_message("\icon[src] *boop* *boop*", "*boop* *boop*") if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0 @@ -64,8 +63,7 @@ process() if(scanning) - var/obj/mainloc = loc - if(holder) mainloc=holder.loc + var/turf/mainloc = get_turf(src) for(var/mob/living/A in range(range,mainloc)) if (A.move_speed < 12) sense() From e79df68ef30b3bc625d83d58beee03d34412a714 Mon Sep 17 00:00:00 2001 From: Ater Ignis Date: Thu, 1 Nov 2012 17:49:21 +0400 Subject: [PATCH 2/3] added new assembled timer-igniter assembly and added that to default chem-grenades --- .../items/weapons/grenades/chem_grenade.dm | 29 ++++++++++++------- .../objects/items/weapons/grenades/grenade.dm | 19 +++++------- code/modules/assembly/holder.dm | 16 ++++++++++ 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index cf241435d6b..9d3d9f9d218 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -69,17 +69,14 @@ path = 1 if(beakers.len) user << "\blue You lock the assembly." - playsound(src.loc, 'sound/items/Screwdriver.ogg', 25, -3) name = "grenade" - icon_state = initial(icon_state) +"_locked" - stage = 2 else // user << "\red You need to add at least one beaker before locking the assembly." user << "\blue You lock the empty assembly." - playsound(src.loc, 'sound/items/Screwdriver.ogg', 25, -3) name = "fake grenade" - icon_state = initial(icon_state) +"_locked" - stage = 2 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 25, -3) + icon_state = initial(icon_state) +"_locked" + stage = 2 else if(stage == 2) if(active && prob(95)) user << "\red You trigger the assembly!" @@ -114,8 +111,9 @@ if(detonator) usr << "With attached [detonator.name]" - activate() + activate(mob/user as mob) if(active) return + if(detonator) if(!isigniter(detonator.a_left)) detonator.a_left.activate() @@ -126,6 +124,11 @@ if(active) icon_state = initial(icon_state) + "_active" + if(user) + log_attack("[user.name] ([user.ckey]) primed \a [src]") + log_admin("ATTACK: [user] ([user.ckey]) primed \a [src]") + message_admins("ATTACK: [user] ([user.ckey]) primed \a [src]") + return proc/primed(var/primed = 1) @@ -195,9 +198,11 @@ B2.reagents.add_reagent("foaming_agent", 10) B2.reagents.add_reagent("pacid", 10) + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + beakers += B1 beakers += B2 - icon_state = "grenade" + icon_state = initial(icon_state) +"_locked" /obj/item/weapon/grenade/chem_grenade/incendiary name = "Incendiary Grenade" @@ -214,9 +219,11 @@ B2.reagents.add_reagent("plasma", 25) B2.reagents.add_reagent("sacid", 25) + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + beakers += B1 beakers += B2 - icon_state = "grenade" + icon_state = initial(icon_state) +"_locked" /obj/item/weapon/grenade/chem_grenade/cleaner name = "Cleaner Grenade" @@ -233,6 +240,8 @@ B2.reagents.add_reagent("water", 40) B2.reagents.add_reagent("cleaner", 10) + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + beakers += B1 beakers += B2 - icon_state = "grenade" + icon_state = initial(icon_state) +"_locked" diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index c381a8d513d..99466a9d2a3 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -16,11 +16,7 @@ if((CLUMSY in user.mutations) && prob(50)) user << "Huh? How does this thing work?" - log_attack("[user.name] ([user.ckey]) clumsily primed \a [src]") - log_admin("ATTACK: [user] ([user.ckey]) clumsily primed \a [src]") - message_admins("ATTACK: [user] ([user.ckey]) clumsily primed \a [src]") - - activate() + activate(user) add_fingerprint(user) spawn(5) prime() @@ -60,11 +56,7 @@ if(clown_check(user)) user << "You prime \the [name]! [det_time/10] seconds!" - log_attack("[user.name] ([user.ckey]) primed \a [src].") - log_admin("ATTACK: [user] ([user.ckey]) primed \a [src].") - message_admins("ATTACK: [user] ([user.ckey]) primed \a [src].") - - activate() + activate(user) add_fingerprint(user) if(iscarbon(user)) var/mob/living/carbon/C = user @@ -72,10 +64,15 @@ return -/obj/item/weapon/grenade/proc/activate() +/obj/item/weapon/grenade/proc/activate(mob/user as mob) if(active) return + if(user) + log_attack("[user.name] ([user.ckey]) primed \a [src]") + log_admin("ATTACK: [user] ([user.ckey]) primed \a [src]") + message_admins("ATTACK: [user] ([user.ckey]) primed \a [src]") + icon_state = initial(icon_state) + "_active" active = 1 playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index e021cd41585..f69a6b5c35d 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -196,6 +196,22 @@ +/obj/item/device/assembly_holder/timer_igniter + name = "5sec timer-igniter assembly" + New() + ..() + var/obj/item/device/assembly/igniter/ign = new(src) + ign.secured = 1 + ign.holder = src + var/obj/item/device/assembly/timer/tmr = new(src) + tmr.time=5 + tmr.secured = 1 + tmr.holder = src + processing_objects.Add(tmr) + a_left = tmr + a_right = ign + secured = 1 + update_icon() From cbc31b90907de2d55df39b1727f72acd792e0958 Mon Sep 17 00:00:00 2001 From: Ater Ignis Date: Thu, 1 Nov 2012 21:05:02 +0400 Subject: [PATCH 3/3] Adjustable timer for default grenades --- .../items/weapons/grenades/chem_grenade.dm | 1 + code/modules/assembly/holder.dm | 40 ++++++++++++++++++- code/modules/assembly/timer.dm | 4 +- 3 files changed, 43 insertions(+), 2 deletions(-) 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*")