diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 8a2f98fc721..e0eb302c9eb 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -613,7 +613,7 @@ // /obj/item/grenade signals ///called in /obj/item/gun/process_fire (user, target, params, zone_override) -#define COMSIG_GRENADE_PRIME "grenade_prime" +#define COMSIG_GRENADE_DETONATE "grenade_prime" ///called in /obj/item/gun/process_fire (user, target, params, zone_override) #define COMSIG_GRENADE_ARMED "grenade_armed" diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index f6ab4e2c914..551c1bc8b41 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -12,7 +12,7 @@ * -Directed: This means you're shooting multiple pellets, like buckshot. If an ammo casing is defined as having multiple pellets, it will automatically create a pellet cloud * and call COMSIG_PELLET_CLOUD_INIT (see [/obj/item/ammo_casing/proc/fire_casing]). Thus, the only projectiles fired will be the ones fired here. * The magnitude var controls how many pellets are created. - * -Circular: This results in a big spray of shrapnel flying all around the detonation point when the grenade fires COMSIG_GRENADE_PRIME or landmine triggers COMSIG_MINE_TRIGGERED. + * -Circular: This results in a big spray of shrapnel flying all around the detonation point when the grenade fires COMSIG_GRENADE_DETONATE or landmine triggers COMSIG_MINE_TRIGGERED. * The magnitude var controls how big the detonation radius is (the bigger the magnitude, the more shrapnel is created). Grenades can be covered with bodies to reduce shrapnel output. * * Once all of the fired projectiles either hit a target or disappear due to ranging out/whatever else, we resolve the list of all the things we hit and print aggregate messages so we get @@ -82,14 +82,14 @@ RegisterSignal(parent, COMSIG_PELLET_CLOUD_INIT, .proc/create_casing_pellets) else if(isgrenade(parent)) RegisterSignal(parent, COMSIG_GRENADE_ARMED, .proc/grenade_armed) - RegisterSignal(parent, COMSIG_GRENADE_PRIME, .proc/create_blast_pellets) + RegisterSignal(parent, COMSIG_GRENADE_DETONATE, .proc/create_blast_pellets) else if(islandmine(parent)) RegisterSignal(parent, COMSIG_MINE_TRIGGERED, .proc/create_blast_pellets) else if(issupplypod(parent)) RegisterSignal(parent, COMSIG_SUPPLYPOD_LANDED, .proc/create_blast_pellets) /datum/component/pellet_cloud/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_PARENT_PREQDELETED, COMSIG_PELLET_CLOUD_INIT, COMSIG_GRENADE_PRIME, COMSIG_GRENADE_ARMED, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UNCROSSED, COMSIG_MINE_TRIGGERED, COMSIG_ITEM_DROPPED)) + UnregisterSignal(parent, list(COMSIG_PARENT_PREQDELETED, COMSIG_PELLET_CLOUD_INIT, COMSIG_GRENADE_DETONATE, COMSIG_GRENADE_ARMED, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UNCROSSED, COMSIG_MINE_TRIGGERED, COMSIG_ITEM_DROPPED)) /** * create_casing_pellets() is for directed pellet clouds for ammo casings that have multiple pellets (buckshot and scatter lasers for instance) diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index 8339b501b06..65869b9f0ca 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -45,8 +45,8 @@ log_game("\An [assembly] has pulsed a grenade, which was installed by [fingerprint].") var/mob/M = get_mob_by_ckey(fingerprint) var/turf/T = get_turf(M) - G.log_grenade(M, T) //Used in preprime() too but this one convays where the mob who triggered the bomb is - G.preprime() //The one here convays where the bomb was when it went boom + G.log_grenade(M, T) //Used in arm_grenade() too but this one convays where the mob who triggered the bomb is + G.arm_grenade() //The one here conveys where the bomb was when it went boom /datum/wires/explosive/chem_grenade/detach_assembly(color) var/obj/item/assembly/S = get_attached(color) @@ -66,7 +66,7 @@ /datum/wires/explosive/c4/explode() var/obj/item/grenade/c4/P = holder - P.prime() + P.detonate() /datum/wires/explosive/pizza holder_type = /obj/item/pizzabox diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index 09fd3f59daa..ec73e9d3620 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -185,7 +185,7 @@ to_chat(loc, "[src] begins to beep.") var/mob/living/carbon/C = loc C.throw_mode_on() - bomb.preprime(loc, null, FALSE) + bomb.arm_grenade(loc, null, FALSE) /obj/item/grown/bananapeel/bombanana/ComponentInitialize() . = ..() @@ -198,7 +198,7 @@ /obj/item/grown/bananapeel/bombanana/suicide_act(mob/user) user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.") playsound(loc, 'sound/misc/slip.ogg', 50, TRUE, -1) - bomb.preprime(user, 0, FALSE) + bomb.arm_grenade(user, 0, FALSE) return (BRUTELOSS) //TEARSTACHE GRENADE @@ -209,7 +209,7 @@ icon_state = "moustacheg" clumsy_check = GRENADE_NONCLUMSY_FUMBLE -/obj/item/grenade/chem_grenade/teargas/moustache/prime(mob/living/lanced_by) +/obj/item/grenade/chem_grenade/teargas/moustache/detonate(mob/living/lanced_by) var/myloc = get_turf(src) . = ..() for(var/mob/living/carbon/M in view(6, myloc)) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 8b4a36cf52f..bf833c68cf7 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -169,7 +169,7 @@ to_chat(user, "[src] is now in [mode] mode.") -/obj/item/grenade/barrier/prime(mob/living/lanced_by) +/obj/item/grenade/barrier/detonate(mob/living/lanced_by) . = ..() new /obj/structure/barricade/security(get_turf(src.loc)) switch(mode) diff --git a/code/game/objects/items/grenades/antigravity.dm b/code/game/objects/items/grenades/antigravity.dm index 5b3e89eda69..48abf8ab5b0 100644 --- a/code/game/objects/items/grenades/antigravity.dm +++ b/code/game/objects/items/grenades/antigravity.dm @@ -7,7 +7,7 @@ var/forced_value = 0 var/duration = 300 -/obj/item/grenade/antigravity/prime(mob/living/lanced_by) +/obj/item/grenade/antigravity/detonate(mob/living/lanced_by) . = ..() update_mob() diff --git a/code/game/objects/items/grenades/atmos_grenades.dm b/code/game/objects/items/grenades/atmos_grenades.dm index 091c63cf7a7..b5cd7eaf735 100644 --- a/code/game/objects/items/grenades/atmos_grenades.dm +++ b/code/game/objects/items/grenades/atmos_grenades.dm @@ -38,7 +38,7 @@ ex_light = 4 ex_flame = 2 -/obj/item/grenade/gas_crystal/preprime(mob/user, delayoverride, msg = TRUE, volume = 60) +/obj/item/grenade/gas_crystal/arm_grenade(mob/user, delayoverride, msg = TRUE, volume = 60) var/turf/turf_loc = get_turf(src) log_grenade(user, turf_loc) //Inbuilt admin procs already handle null users if(user) @@ -52,9 +52,9 @@ icon_state = initial(icon_state) + "_active" playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', volume, TRUE) SEND_SIGNAL(src, COMSIG_GRENADE_ARMED, det_time, delayoverride) - addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride) + addtimer(CALLBACK(src, .proc/detonate), isnull(delayoverride)? det_time : delayoverride) -/obj/item/grenade/gas_crystal/healium_crystal/prime(mob/living/lanced_by) +/obj/item/grenade/gas_crystal/healium_crystal/detonate(mob/living/lanced_by) . = ..() update_mob() playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) @@ -76,7 +76,7 @@ live_mob.adjust_bodytemperature(-150 / distance_from_center) qdel(src) -/obj/item/grenade/gas_crystal/proto_nitrate_crystal/prime(mob/living/lanced_by) +/obj/item/grenade/gas_crystal/proto_nitrate_crystal/detonate(mob/living/lanced_by) . = ..() update_mob() playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) @@ -89,7 +89,7 @@ floor_loc.air_update_turf() qdel(src) -/obj/item/grenade/gas_crystal/zauker_crystal/prime(mob/living/lanced_by) +/obj/item/grenade/gas_crystal/zauker_crystal/detonate(mob/living/lanced_by) . = ..() update_mob() qdel(src) diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 0181e72cfdd..604d246243e 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -156,7 +156,7 @@ else log_bomber(user, "primed a", src, "containing:[reagent_string]") -/obj/item/grenade/chem_grenade/preprime(mob/user, delayoverride, msg = TRUE, volume = 60) +/obj/item/grenade/chem_grenade/arm_grenade(mob/user, delayoverride, msg = TRUE, volume = 60) var/turf/T = get_turf(src) log_grenade(user, T) //Inbuilt admin procs already handle null users if(user) @@ -172,9 +172,9 @@ landminemode.activate() return active = TRUE - addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride) + addtimer(CALLBACK(src, .proc/detonate), isnull(delayoverride)? det_time : delayoverride) -/obj/item/grenade/chem_grenade/prime(mob/living/lanced_by) +/obj/item/grenade/chem_grenade/detonate(mob/living/lanced_by) if(stage != GRENADE_READY) return @@ -213,7 +213,7 @@ ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades. threatscale = 1.1 // 10% more effective. -/obj/item/grenade/chem_grenade/large/prime(mob/living/lanced_by) +/obj/item/grenade/chem_grenade/large/detonate(mob/living/lanced_by) if(stage != GRENADE_READY) return @@ -280,7 +280,7 @@ to_chat(user, "The new value is out of bounds. Minimum spread is 5 units, maximum is 100 units.") ..() -/obj/item/grenade/chem_grenade/adv_release/prime(mob/living/lanced_by) +/obj/item/grenade/chem_grenade/adv_release/detonate(mob/living/lanced_by) if(stage != GRENADE_READY) return @@ -298,7 +298,7 @@ chem_splash(get_turf(src), affected_area, list(reactants), ignition_temp, threatscale) var/turf/DT = get_turf(src) - addtimer(CALLBACK(src, .proc/prime), det_time) + addtimer(CALLBACK(src, .proc/detonate), det_time) log_game("A grenade detonated at [AREACOORD(DT)]") diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm index f7409c619fd..3b1b52cb0ca 100644 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ b/code/game/objects/items/grenades/clusterbuster.dm @@ -14,7 +14,7 @@ var/max_spawned = 8 var/segment_chance = 35 -/obj/item/grenade/clusterbuster/prime(mob/living/lanced_by) +/obj/item/grenade/clusterbuster/detonate(mob/living/lanced_by) . = ..() update_mob() var/numspawned = rand(min_spawned,max_spawned) @@ -58,9 +58,9 @@ var/steps = rand(1,4) for(var/i in 1 to steps) step_away(src,loc) - addtimer(CALLBACK(src, .proc/prime), rand(15,60)) + addtimer(CALLBACK(src, .proc/detonate), rand(15,60)) -/obj/item/grenade/clusterbuster/segment/prime(mob/living/lanced_by) +/obj/item/grenade/clusterbuster/segment/detonate(mob/living/lanced_by) new payload_spawner(drop_location(), payload, rand(min_spawned,max_spawned)) playsound(src, prime_sound, 75, TRUE, -3) qdel(src) @@ -78,7 +78,7 @@ var/obj/item/grenade/P = new type(loc) if(istype(P)) P.active = TRUE - addtimer(CALLBACK(P, /obj/item/grenade/proc/prime), rand(15,60)) + addtimer(CALLBACK(P, /obj/item/grenade/proc/detonate), rand(15,60)) var/steps = rand(1,4) for(var/i in 1 to steps) step_away(src,loc) diff --git a/code/game/objects/items/grenades/emgrenade.dm b/code/game/objects/items/grenades/emgrenade.dm index 00f9a26bed8..03a7dd9e565 100644 --- a/code/game/objects/items/grenades/emgrenade.dm +++ b/code/game/objects/items/grenades/emgrenade.dm @@ -4,7 +4,7 @@ icon_state = "emp" inhand_icon_state = "emp" -/obj/item/grenade/empgrenade/prime(mob/living/lanced_by) +/obj/item/grenade/empgrenade/detonate(mob/living/lanced_by) . = ..() update_mob() empulse(src, 4, 10) diff --git a/code/game/objects/items/grenades/festive.dm b/code/game/objects/items/grenades/festive.dm index db8c2e7409c..a034f9ccf8b 100644 --- a/code/game/objects/items/grenades/festive.dm +++ b/code/game/objects/items/grenades/festive.dm @@ -79,12 +79,12 @@ var/ignition_msg = W.ignition_effect(src, user) if(ignition_msg && !active) visible_message(ignition_msg) - preprime(user) + arm_grenade(user) else return ..() /obj/item/grenade/firecracker/fire_act(exposed_temperature, exposed_volume) - prime() + detonate() /obj/item/grenade/firecracker/wirecutter_act(mob/living/user, obj/item/I) if(active) @@ -98,7 +98,7 @@ else to_chat(user, "You've already removed all of the fuse!") -/obj/item/grenade/firecracker/preprime(mob/user, delayoverride, msg = TRUE, volume = 80) +/obj/item/grenade/firecracker/arm_grenade(mob/user, delayoverride, msg = TRUE, volume = 80) var/turf/T = get_turf(src) log_grenade(user, T) if(user) @@ -108,9 +108,9 @@ playsound(src, 'sound/effects/fuse.ogg', volume, TRUE) active = TRUE icon_state = initial(icon_state) + "_active" - addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride) + addtimer(CALLBACK(src, .proc/detonate), isnull(delayoverride)? det_time : delayoverride) -/obj/item/grenade/firecracker/prime(mob/living/lanced_by) +/obj/item/grenade/firecracker/detonate(mob/living/lanced_by) . = ..() update_mob() var/explosion_loc = get_turf(src) diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index 32328746f2b..d8f146ffca9 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -6,7 +6,7 @@ righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' var/flashbang_range = 7 //how many tiles away the mob will be stunned. -/obj/item/grenade/flashbang/prime(mob/living/lanced_by) +/obj/item/grenade/flashbang/detonate(mob/living/lanced_by) . = ..() update_mob() var/flashbang_turf = get_turf(src) @@ -57,7 +57,7 @@ shrapnel_type = /obj/projectile/bullet/pellet/stingball/mega shrapnel_radius = 12 -/obj/item/grenade/stingbang/prime(mob/living/lanced_by) +/obj/item/grenade/stingbang/detonate(mob/living/lanced_by) if(iscarbon(loc)) var/mob/living/carbon/C = loc var/obj/item/bodypart/B = C.get_holding_bodypart_of_item(src) @@ -118,7 +118,7 @@ rots++ user.changeNext_move(CLICK_CD_RAPID) -/obj/item/grenade/primer/prime(mob/living/lanced_by) +/obj/item/grenade/primer/detonate(mob/living/lanced_by) shrapnel_radius = round(rots / rots_per_mag) . = ..() qdel(src) diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index cc0d7e335a6..fe3a5756014 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -61,9 +61,9 @@ if(!botch_check(user)) to_chat(user, "You light the [name]!") cut_overlay("improvised_grenade_filled") - preprime(user, null, FALSE) + arm_grenade(user, null, FALSE) -/obj/item/grenade/iedcasing/prime(mob/living/lanced_by) //Blowing that can up +/obj/item/grenade/iedcasing/detonate(mob/living/lanced_by) //Blowing that can up . = ..() update_mob() explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball. diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index cf911e99c71..9fd7072bc7c 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -19,7 +19,7 @@ var/display_timer = 1 var/clumsy_check = GRENADE_CLUMSY_FUMBLE var/sticky = FALSE - // I moved the explosion vars and behavior to base grenades because we want all grenades to call [/obj/item/grenade/proc/prime] so we can send COMSIG_GRENADE_PRIME + // I moved the explosion vars and behavior to base grenades because we want all grenades to call [/obj/item/grenade/proc/detonate] so we can send COMSIG_GRENADE_DETONATE ///how big of a devastation explosion radius on prime var/ex_dev = 0 ///how big of a heavy explosion radius on prime @@ -29,7 +29,7 @@ ///how big of a flame explosion radius on prime var/ex_flame = 0 - // dealing with creating a [/datum/component/pellet_cloud] on prime + // dealing with creating a [/datum/component/pellet_cloud] on detonate /// if set, will spew out projectiles of this type var/shrapnel_type /// the higher this number, the more projectiles are created as shrapnel @@ -39,14 +39,14 @@ /obj/item/grenade/suicide_act(mob/living/carbon/user) user.visible_message("[user] primes [src], then eats it! It looks like [user.p_theyre()] trying to commit suicide!") playsound(src, 'sound/items/eatfood.ogg', 50, TRUE) - preprime(user, det_time) + arm_grenade(user, det_time) user.transferItemToLoc(src, user, TRUE)//>eat a grenade set to 5 seconds >rush captain sleep(det_time)//so you dont die instantly return BRUTELOSS /obj/item/grenade/deconstruct(disassembled = TRUE) if(!disassembled) - prime() + detonate() if(!QDELETED(src)) qdel(src) @@ -55,11 +55,11 @@ if(clumsy && (clumsy_check == GRENADE_CLUMSY_FUMBLE)) if(prob(50)) to_chat(user, "Huh? How does this thing work?") - preprime(user, 5, FALSE) + arm_grenade(user, 5, FALSE) return TRUE else if(!clumsy && (clumsy_check == GRENADE_NONCLUMSY_FUMBLE)) to_chat(user, "You pull the pin on [src]. Attached to it is a pink ribbon that says, \"HONK\"") - preprime(user, 5, FALSE) + arm_grenade(user, 5, FALSE) return TRUE else if(sticky && prob(50)) // to add risk to sticky tape grenade cheese, no return cause we still prime as normal after to_chat(user, "What the... [src] is stuck to your hand!") @@ -77,20 +77,23 @@ /obj/item/grenade/attack_self(mob/user) if(HAS_TRAIT(src, TRAIT_NODROP)) to_chat(user, "You try prying [src] off your hand...") - if(do_after(user, 70, target=src)) + if(do_after(user, 7 SECONDS, target=src)) to_chat(user, "You manage to remove [src] from your hand.") REMOVE_TRAIT(src, TRAIT_NODROP, STICKY_NODROP) - return if(!active) if(!botch_check(user)) // if they botch the prime, it'll be handled in botch_check - preprime(user) + arm_grenade(user) /obj/item/grenade/proc/log_grenade(mob/user, turf/T) log_bomber(user, "has primed a", src, "for detonation") -/obj/item/grenade/proc/preprime(mob/user, delayoverride, msg = TRUE, volume = 60) +/** + * arm_grenade (formerly preprime) refers to when a grenade with a standard time fuze is activated, making it go beepbeepbeep and then detonate a few seconds later. + * Grenades with other triggers like remote igniters probably skip this step and go straight to [/obj/item/grenade/proc/detonate] + */ +/obj/item/grenade/proc/arm_grenade(mob/user, delayoverride, msg = TRUE, volume = 60) var/turf/T = get_turf(src) log_grenade(user, T) //Inbuilt admin procs already handle null users if(user) @@ -104,14 +107,20 @@ active = TRUE icon_state = initial(icon_state) + "_active" SEND_SIGNAL(src, COMSIG_GRENADE_ARMED, det_time, delayoverride) - addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride) + addtimer(CALLBACK(src, .proc/detonate), isnull(delayoverride)? det_time : delayoverride) -/obj/item/grenade/proc/prime(mob/living/lanced_by) +/** + * detonate (formerly prime) refers to when the grenade actually delivers its payload (whether or not a boom/bang/detonation is involved) + * + * Arguments: + * * lanced_by- If this grenade was detonated by an elance, we need to pass that along with the COMSIG_GRENADE_DETONATE signal for pellet clouds + */ +/obj/item/grenade/proc/detonate(mob/living/lanced_by) if(shrapnel_type && shrapnel_radius && !shrapnel_initialized) // add a second check for adding the component in case whatever triggered the grenade went straight to prime (badminnery for example) shrapnel_initialized = TRUE AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_radius) - SEND_SIGNAL(src, COMSIG_GRENADE_PRIME, lanced_by) + SEND_SIGNAL(src, COMSIG_GRENADE_DETONATE, lanced_by) if(ex_dev || ex_heavy || ex_light || ex_flame) explosion(loc, ex_dev, ex_heavy, ex_light, flame_range = ex_flame) @@ -121,21 +130,21 @@ M.dropItemToGround(src) /obj/item/grenade/attackby(obj/item/W, mob/user, params) - if(!active) - if(W.tool_behaviour == TOOL_MULTITOOL) - var/newtime = text2num(stripped_input(user, "Please enter a new detonation time", name)) - if (newtime != null && user.canUseTopic(src, BE_CLOSE)) - if(change_det_time(newtime)) - to_chat(user, "You modify the time delay. It's set for [DisplayTimeText(det_time)].") - if (round(newtime * 10) != det_time) - to_chat(user, "The new value is out of bounds. The lowest possible time is 3 seconds and highest is 5 seconds. Instant detonations are also possible.") - return - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(change_det_time()) - to_chat(user, "You modify the time delay. It's set for [DisplayTimeText(det_time)].") - else + if(active) return ..() + if(W.tool_behaviour == TOOL_MULTITOOL) + var/newtime = text2num(stripped_input(user, "Please enter a new detonation time", name)) + if (newtime != null && user.canUseTopic(src, BE_CLOSE)) + if(change_det_time(newtime)) + to_chat(user, "You modify the time delay. It's set for [DisplayTimeText(det_time)].") + if (round(newtime * 10) != det_time) + to_chat(user, "The new value is out of bounds. The lowest possible time is 3 seconds and highest is 5 seconds. Instant detonations are also possible.") + return + else if(W.tool_behaviour == TOOL_SCREWDRIVER) + if(change_det_time()) + to_chat(user, "You modify the time delay. It's set for [DisplayTimeText(det_time)].") + /obj/item/grenade/proc/change_det_time(time) //Time uses real time. . = TRUE if(time != null) @@ -164,7 +173,7 @@ var/turf/T = get_turf(src) log_game("A projectile ([hitby]) detonated a grenade held by [key_name(owner)] at [COORD(T)]") message_admins("A projectile ([hitby]) detonated a grenade held by [key_name_admin(owner)] at [ADMIN_COORDJMP(T)]") - prime() + detonate() return TRUE //It hit the grenade, not them /obj/item/grenade/afterattack(atom/target, mob/user) diff --git a/code/game/objects/items/grenades/hypno.dm b/code/game/objects/items/grenades/hypno.dm index 9e1adaf00a7..a4c59bc30c1 100644 --- a/code/game/objects/items/grenades/hypno.dm +++ b/code/game/objects/items/grenades/hypno.dm @@ -7,7 +7,7 @@ righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' var/flashbang_range = 7 -/obj/item/grenade/hypnotic/prime(mob/living/lanced_by) +/obj/item/grenade/hypnotic/detonate(mob/living/lanced_by) . = ..() update_mob() var/flashbang_turf = get_turf(src) diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 4e13eae9a5e..623c00fff9b 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -42,7 +42,7 @@ else return ..() -/obj/item/grenade/c4/prime(mob/living/lanced_by) +/obj/item/grenade/c4/detonate(mob/living/lanced_by) if(QDELETED(src)) return @@ -66,7 +66,7 @@ //assembly stuff /obj/item/grenade/c4/receive_signal() - prime() + detonate() /obj/item/grenade/c4/attack_self(mob/user) var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num|null @@ -111,7 +111,7 @@ target.add_overlay(plastic_overlay) to_chat(user, "You plant the bomb. Timer counting down from [det_time].") - addtimer(CALLBACK(src, .proc/prime), det_time*10) + addtimer(CALLBACK(src, .proc/detonate), det_time*10) /obj/item/grenade/c4/proc/shout_syndicate_crap(mob/M) if(!M) @@ -148,7 +148,7 @@ log_game("[key_name(user)] suicided with [src] at [AREACOORD(user)]") user.visible_message("[user] activates [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") shout_syndicate_crap(user) - explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes + explosion(user,0,2,0) //Cheap explosion imitation because putting detonate() here causes runtimes user.gib(1, 1) qdel(src) diff --git a/code/game/objects/items/grenades/smokebomb.dm b/code/game/objects/items/grenades/smokebomb.dm index 98cd7502e45..492d20f0261 100644 --- a/code/game/objects/items/grenades/smokebomb.dm +++ b/code/game/objects/items/grenades/smokebomb.dm @@ -19,7 +19,7 @@ desc = "The word '[pick(bruh_moment)]' is scribbled on it in crayon." ///Here we generate some smoke and also damage blobs??? for some reason. Honestly not sure why we do that. -/obj/item/grenade/smokebomb/prime(mob/living/lanced_by) +/obj/item/grenade/smokebomb/detonate(mob/living/lanced_by) . = ..() update_mob() playsound(src, 'sound/effects/smoke.ogg', 50, TRUE, -3) diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 8102442b9b7..6c9ca46ef59 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -7,7 +7,7 @@ var/spawner_type = null // must be an object path var/deliveryamt = 1 // amount of type to deliver -/obj/item/grenade/spawnergrenade/prime(mob/living/lanced_by) // Prime now just handles the two loops that query for people in lockers and people who can see it. +/obj/item/grenade/spawnergrenade/detonate(mob/living/lanced_by) // Prime now just handles the two loops that query for people in lockers and people who can see it. . = ..() update_mob() if(spawner_type && deliveryamt) diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm index 5c4945dbe28..e7f1784a576 100644 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ b/code/game/objects/items/grenades/syndieminibomb.dm @@ -10,7 +10,7 @@ ex_light = 4 ex_flame = 2 -/obj/item/grenade/syndieminibomb/prime(mob/living/lanced_by) +/obj/item/grenade/syndieminibomb/detonate(mob/living/lanced_by) . = ..() update_mob() qdel(src) @@ -39,7 +39,7 @@ shrapnel_type = /obj/projectile/bullet/shrapnel/mega shrapnel_radius = 12 -/obj/item/grenade/frag/prime(mob/living/lanced_by) +/obj/item/grenade/frag/detonate(mob/living/lanced_by) . = ..() update_mob() qdel(src) @@ -54,7 +54,7 @@ var/rad_damage = 350 var/stamina_damage = 30 -/obj/item/grenade/gluon/prime(mob/living/lanced_by) +/obj/item/grenade/gluon/detonate(mob/living/lanced_by) . = ..() update_mob() playsound(loc, 'sound/effects/empulse.ogg', 50, TRUE) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 7559931c34b..032fd987eae 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -111,7 +111,7 @@ to_chat(user, "You pet [src]. D'awww.") if(grenade && !grenade.active) log_game("[key_name(user)] activated a hidden grenade in [src].") - grenade.preprime(user, msg = FALSE, volume = 10) + grenade.arm_grenade(user, msg = FALSE, volume = 10) else to_chat(user, "You try to pet [src], but it has no stuffing. Aww...") diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index 2cace2fba4d..726bff30e95 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -107,7 +107,7 @@ user.visible_message("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") user.say("[war_cry]", forced="spear warcry") explosive.forceMove(user) - explosive.prime() + explosive.detonate() user.gib() qdel(src) return BRUTELOSS @@ -131,7 +131,7 @@ if(wielded) user.say("[war_cry]", forced="spear warcry") explosive.forceMove(AM) - explosive.prime(lanced_by=user) + explosive.detonate(lanced_by=user) qdel(src) //GREY TIDE diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 20cd0c534c9..ef6779a64c5 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -118,10 +118,10 @@ C.throw_mode_on() icon_state = "firelemon_active" playsound(loc, 'sound/weapons/armbomb.ogg', 75, TRUE, -3) - addtimer(CALLBACK(src, .proc/prime), rand(10, 60)) + addtimer(CALLBACK(src, .proc/detonate), rand(10, 60)) /obj/item/food/grown/firelemon/burn() - prime() + detonate() ..() /obj/item/food/grown/firelemon/proc/update_mob() @@ -132,7 +132,7 @@ /obj/item/food/grown/firelemon/ex_act(severity) qdel(src) //Ensuring that it's deleted by its own explosion -/obj/item/food/grown/firelemon/proc/prime(mob/living/lanced_by) +/obj/item/food/grown/firelemon/proc/detonate(mob/living/lanced_by) switch(seed.potency) //Combustible lemons are alot like IEDs, lots of flame, very little bang. if(0 to 30) update_mob() diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index d2db007bedb..ad4ee7f026b 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -214,18 +214,18 @@ /obj/item/food/grown/cherry_bomb/attack_self(mob/living/user) user.visible_message("[user] plucks the stem from [src]!", "You pluck the stem from [src], which begins to hiss loudly!") log_bomber(user, "primed a", src, "for detonation") - prime() + detonate() /obj/item/food/grown/cherry_bomb/deconstruct(disassembled = TRUE) if(!disassembled) - prime() + detonate() if(!QDELETED(src)) qdel(src) /obj/item/food/grown/cherry_bomb/ex_act(severity) qdel(src) //Ensuring that it's deleted by its own explosion. Also prevents mass chain reaction with piles of cherry bombs -/obj/item/food/grown/cherry_bomb/proc/prime(mob/living/lanced_by) +/obj/item/food/grown/cherry_bomb/proc/detonate(mob/living/lanced_by) icon_state = "cherry_bomb_lit" playsound(src, 'sound/effects/fuse.ogg', seed.potency, FALSE) reagents.chem_temp = 1000 //Sets off the gunpowder diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 014fe332860..77455dd683a 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -780,7 +780,7 @@ if(istype(held_item, /obj/item/grenade)) var/obj/item/grenade/G = held_item G.forceMove(drop_location()) - G.prime() + G.detonate() to_chat(src, "You let go of [held_item]!") held_item = null return 1 diff --git a/code/modules/ninja/ninja_explosive.dm b/code/modules/ninja/ninja_explosive.dm index 329a95e5e2c..097c0b19a21 100644 --- a/code/modules/ninja/ninja_explosive.dm +++ b/code/modules/ninja/ninja_explosive.dm @@ -11,7 +11,7 @@ desc = "A modified C-4 charge supplied to you by the Spider Clan. Its explosive power has been juiced up, but only works in one specific area." boom_sizes = list(4, 8, 12) var/mob/detonator = null - + /obj/item/grenade/c4/ninja/afterattack(atom/movable/AM, mob/user, flag) var/datum/antagonist/ninja/ninja_antag = user.mind.has_antag_datum(/datum/antagonist/ninja) if(!ninja_antag) @@ -26,8 +26,8 @@ return detonator = user return ..() - -/obj/item/grenade/c4/ninja/prime(mob/living/lanced_by) + +/obj/item/grenade/c4/ninja/detonate(mob/living/lanced_by) . = ..() //Since we already did the checks in afterattack, the denonator must be a ninja with the bomb objective. if(!detonator) diff --git a/code/modules/projectiles/guns/misc/grenade_launcher.dm b/code/modules/projectiles/guns/misc/grenade_launcher.dm index 51f20c19d95..fc1de2b0deb 100644 --- a/code/modules/projectiles/guns/misc/grenade_launcher.dm +++ b/code/modules/projectiles/guns/misc/grenade_launcher.dm @@ -43,4 +43,4 @@ F.active = 1 F.icon_state = initial(F.icon_state) + "_active" playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, TRUE, -3) - addtimer(CALLBACK(F, /obj/item/grenade.proc/prime), 15) + addtimer(CALLBACK(F, /obj/item/grenade.proc/detonate), 15) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 0ad454c4a35..08190c16863 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -547,7 +547,7 @@ S.visible_message("Infused with plasma, the core begins to expand uncontrollably!") S.icon_state = "[S.base_state]_active" S.active = TRUE - addtimer(CALLBACK(S, /obj/item/grenade.proc/prime), rand(15,60)) + addtimer(CALLBACK(S, /obj/item/grenade.proc/detonate), rand(15,60)) else var/mob/living/simple_animal/slime/random/S = new (get_turf(holder.my_atom)) S.visible_message("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!") @@ -564,7 +564,7 @@ S.visible_message("Infused with slime jelly, the core begins to expand uncontrollably!") S.icon_state = "[S.base_state]_active" S.active = TRUE - addtimer(CALLBACK(S, /obj/item/grenade.proc/prime), rand(15,60)) + addtimer(CALLBACK(S, /obj/item/grenade.proc/detonate), rand(15,60)) var/lastkey = holder.my_atom.fingerprintslast var/touch_msg = "N/A" if(lastkey) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index abfc98f5ade..f2471184916 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -291,7 +291,7 @@ investigate_log("Experimentor has transformed [savedName] into [loaded_item]", INVESTIGATE_EXPERIMENTOR) if(istype(loaded_item, /obj/item/grenade/chem_grenade)) var/obj/item/grenade/chem_grenade/CG = loaded_item - CG.prime() + CG.detonate() ejectItem() //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_GAS) @@ -613,13 +613,13 @@ /obj/item/relic/proc/clean(mob/user) playsound(src, "sparks", rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE) var/obj/item/grenade/chem_grenade/cleaner/CL = new/obj/item/grenade/chem_grenade/cleaner(get_turf(user)) - CL.prime() + CL.detonate() warn_admins(user, "Smoke", 0) /obj/item/relic/proc/flash(mob/user) playsound(src, "sparks", rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE) var/obj/item/grenade/flashbang/CB = new/obj/item/grenade/flashbang(user.loc) - CB.prime() + CB.detonate() warn_admins(user, "Flash") /obj/item/relic/proc/petSpray(mob/user) diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index c7a5e9bcb26..583ec832437 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -377,7 +377,7 @@ var/turf/T = get_turf(src) message_admins("[ADMIN_LOOKUPFLW(user)] fired a [F] in [ADMIN_VERBOSEJMP(T)]") log_game("[key_name(user)] fired a [F] in [AREACOORD(T)]") - addtimer(CALLBACK(F, /obj/item/grenade/flashbang.proc/prime), det_time) + addtimer(CALLBACK(F, /obj/item/grenade/flashbang.proc/detonate), det_time) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze name = "\improper SOB-3 grenade launcher" diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index a0d261e6079..9003db3626c 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -31,7 +31,7 @@ /obj/machinery/vending/security/pre_throw(obj/item/I) if(istype(I, /obj/item/grenade)) var/obj/item/grenade/G = I - G.preprime() + G.arm_grenade() else if(istype(I, /obj/item/flashlight)) var/obj/item/flashlight/F = I F.on = TRUE