From 34c9a2f8216879cfc887b49fcd3d6d096c9de287 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 11 Jun 2020 21:45:32 +0100
Subject: [PATCH] part 4
---
code/datums/components/embedded.dm | 2 +
code/datums/mutations/actions.dm | 15 +--
.../game/gamemodes/clown_ops/clown_weapons.dm | 2 +-
code/game/machinery/deployable.dm | 2 +-
code/game/objects/effects/mines.dm | 25 ++--
code/game/objects/items.dm | 2 +-
.../objects/items/grenades/antigravity.dm | 4 +-
.../objects/items/grenades/chem_grenade.dm | 6 +-
.../objects/items/grenades/clusterbuster.dm | 8 +-
code/game/objects/items/grenades/emgrenade.dm | 4 +-
code/game/objects/items/grenades/flashbang.dm | 116 ++----------------
.../game/objects/items/grenades/ghettobomb.dm | 4 +-
code/game/objects/items/grenades/grenade.dm | 14 +--
code/game/objects/items/grenades/plastic.dm | 6 +-
code/game/objects/items/grenades/smokebomb.dm | 4 +-
.../objects/items/grenades/spawnergrenade.dm | 4 +-
.../objects/items/grenades/syndieminibomb.dm | 12 +-
code/modules/cargo/packs/security.dm | 2 +-
code/modules/hydroponics/grown/citrus.dm | 2 +-
code/modules/hydroponics/grown/misc.dm | 2 +-
code/modules/mob/living/living_defense.dm | 2 +-
21 files changed, 67 insertions(+), 171 deletions(-)
diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm
index 2324b36033..137a1bb864 100644
--- a/code/datums/components/embedded.dm
+++ b/code/datums/components/embedded.dm
@@ -92,6 +92,8 @@
if(!weapon.isEmbedHarmless())
harmful = TRUE
+ weapon.embedded(parent)
+
if(iscarbon(parent))
initCarbon()
else if(isclosedturf(parent))
diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm
index 58e2092e74..1475cfa356 100644
--- a/code/datums/mutations/actions.dm
+++ b/code/datums/mutations/actions.dm
@@ -406,6 +406,8 @@
w_class = WEIGHT_CLASS_SMALL
sharpness = IS_SHARP
var/mob/living/carbon/human/fired_by
+ /// if we missed our target
+ var/missed = TRUE
/obj/item/hardened_spike/Initialize(mapload, firedby)
. = ..()
@@ -413,13 +415,12 @@
addtimer(CALLBACK(src, .proc/checkembedded), 5 SECONDS)
/obj/item/hardened_spike/proc/checkembedded()
- if(ishuman(loc))
- var/mob/living/carbon/human/embedtest = loc
- for(var/l in embedtest.bodyparts)
- var/obj/item/bodypart/limb = l
- if(src in limb.embedded_objects)
- return limb
- unembedded()
+ if(missed)
+ unembedded()
+
+/obj/item/hardened_spike/embedded(atom/target)
+ if(isbodypart(target))
+ missed = FALSE
/obj/item/hardened_spike/unembedded()
var/turf/T = get_turf(src)
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index 4d3ea2d02e..afa3dbfeaa 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -202,7 +202,7 @@
icon_state = "moustacheg"
clumsy_check = GRENADE_NONCLUMSY_FUMBLE
-/obj/item/grenade/chem_grenade/teargas/moustache/prime()
+/obj/item/grenade/chem_grenade/teargas/moustache/prime(mob/living/lanced_by)
var/list/check_later = list()
for(var/mob/living/carbon/C in get_turf(src))
check_later += C
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index d8abe7c1c7..252e6cf6b3 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()
+/obj/item/grenade/barrier/prime(mob/living/lanced_by)
. = ..()
new /obj/structure/barricade/security(get_turf(src.loc))
switch(mode)
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index 1ee8b1e224..40104d5ea8 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -5,19 +5,21 @@
anchored = TRUE
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "uglymine"
- var/triggered = 0
+ /// We manually check to see if we've been triggered in case multiple atoms cross us in the time between the mine being triggered and it actually deleting, to avoid a race condition with multiple detonations
+ var/triggered = FALSE
/obj/effect/mine/proc/mineEffect(mob/victim)
to_chat(victim, "*click*")
-/obj/effect/mine/Crossed(AM as mob|obj)
- if(isturf(loc))
- if(ismob(AM))
- var/mob/MM = AM
- if(!(MM.movement_type & FLYING))
- triggermine(AM)
- else
- triggermine(AM)
+/obj/effect/mine/Crossed(atom/movable/AM)
+ if(triggered || !isturf(loc))
+ return
+ . = ..()
+
+ if(AM.movement_type & FLYING)
+ return
+
+ triggermine(AM)
/obj/effect/mine/proc/triggermine(mob/victim)
if(triggered)
@@ -31,6 +33,9 @@
triggered = 1
qdel(src)
+/obj/effect/mine/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir)
+ . = ..()
+ triggermine()
/obj/effect/mine/explosive
name = "explosive mine"
@@ -118,7 +123,7 @@
/obj/effect/mine/pickup/triggermine(mob/victim)
if(triggered)
return
- triggered = 1
+ triggered = TRUE
invisibility = INVISIBILITY_ABSTRACT
mineEffect(victim)
qdel(src)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 770b2e7129..883c9717b6 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -918,7 +918,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
// if w_volume is 0 you fucked up anyways lol
return w_volume || AUTO_SCALE_VOLUME(w_class)
-/obj/item/proc/embedded(mob/living/carbon/human/embedded_mob)
+/obj/item/proc/embedded(atom/embedded_target)
return
/obj/item/proc/unembedded()
diff --git a/code/game/objects/items/grenades/antigravity.dm b/code/game/objects/items/grenades/antigravity.dm
index 313b91acd7..b6700599a3 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()
+/obj/item/grenade/antigravity/prime(mob/living/lanced_by)
. = ..()
update_mob()
@@ -15,4 +15,4 @@
T.AddElement(/datum/element/forced_gravity, forced_value)
addtimer(CALLBACK(T, /datum/.proc/_RemoveElement, list(forced_value)), duration)
- resolve()
+ qdel(src)
diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm
index 03ceda048f..4ce0e811c3 100644
--- a/code/game/objects/items/grenades/chem_grenade.dm
+++ b/code/game/objects/items/grenades/chem_grenade.dm
@@ -174,7 +174,7 @@
message_admins(message)
user.log_message("primed [src] ([reagent_string])",LOG_GAME)
-/obj/item/grenade/chem_grenade/prime()
+/obj/item/grenade/chem_grenade/prime(mob/living/lanced_by)
if(stage != READY)
return FALSE
@@ -218,7 +218,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()
+/obj/item/grenade/chem_grenade/large/prime(mob/living/lanced_by)
if(stage != READY)
return FALSE
@@ -287,7 +287,7 @@
return
..()
-/obj/item/grenade/chem_grenade/adv_release/prime()
+/obj/item/grenade/chem_grenade/adv_release/prime(mob/living/lanced_by)
if(stage != READY)
return FALSE
diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm
index 728c6a0b57..9980ff34ce 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()
+/obj/item/grenade/clusterbuster/prime(mob/living/lanced_by)
. = ..()
update_mob()
var/numspawned = rand(min_spawned,max_spawned)
@@ -30,7 +30,7 @@
new payload_spawner(drop_location(), payload, numspawned)//Launches payload
playsound(src, prime_sound, 75, 1, -3)
- resolve()
+ qdel(src)
//////////////////////
//Clusterbang segment
@@ -60,10 +60,10 @@
step_away(src,loc)
addtimer(CALLBACK(src, .proc/prime), rand(15,60))
-/obj/item/grenade/clusterbuster/segment/prime()
+/obj/item/grenade/clusterbuster/segment/prime(mob/living/lanced_by)
new payload_spawner(drop_location(), payload, rand(min_spawned,max_spawned))
playsound(src, prime_sound, 75, 1, -3)
- resolve()
+ qdel(src)
//////////////////////////////////
//The payload spawner effect
diff --git a/code/game/objects/items/grenades/emgrenade.dm b/code/game/objects/items/grenades/emgrenade.dm
index 5780dc1bbf..815a3b343c 100644
--- a/code/game/objects/items/grenades/emgrenade.dm
+++ b/code/game/objects/items/grenades/emgrenade.dm
@@ -4,8 +4,8 @@
icon_state = "emp"
item_state = "emp"
-/obj/item/grenade/empgrenade/prime()
+/obj/item/grenade/empgrenade/prime(mob/living/lanced_by)
. = ..()
update_mob()
empulse(src, 4, 10)
- resolve()
+ qdel(src)
diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm
index 2965f98a05..f51db9fa4c 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()
+/obj/item/grenade/flashbang/prime(mob/living/lanced_by)
. = ..()
update_mob()
var/flashbang_turf = get_turf(src)
@@ -16,7 +16,7 @@
playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9)
new /obj/effect/dummy/lighting_obj (flashbang_turf, LIGHT_COLOR_WHITE, (flashbang_range + 2), 4, 2)
flashbang_mobs(flashbang_turf, flashbang_range)
- resolve()
+ qdel(src)
/obj/item/grenade/flashbang/proc/flashbang_mobs(turf/source, range)
var/list/banged = get_hearers_in_view(range, source)
@@ -45,142 +45,40 @@
M.DefaultCombatKnockdown(max(200/max(1,distance), 60))
/obj/item/grenade/stingbang
-
-
-
name = "stingbang"
-
-
-
icon_state = "timeg"
-
-
-
item_state = "flashbang"
-
-
-
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
-
-
-
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
-
-
-
var/flashbang_range = 1 //how many tiles away the mob will be stunned.
-
-
-
shrapnel_type = /obj/item/projectile/bullet/pellet/stingball
-
-
-
shrapnel_radius = 5
-
-
-
custom_premium_price = 700 // mostly gotten through cargo, but throw in one for the sec vendor ;)
-
-
-
-
-
-
/obj/item/grenade/stingbang/mega
-
-
-
name = "mega stingbang"
-
-
-
shrapnel_type = /obj/item/projectile/bullet/pellet/stingball/mega
-
-
-
shrapnel_radius = 12
-
-
-
-
-
-
-/obj/item/grenade/stingbang/prime()
-
-
-
+/obj/item/grenade/stingbang/prime(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)
-
-
-
if(B)
-
-
-
C.visible_message("[src] goes off in [C]'s hand, blowing [C.p_their()] [B.name] to bloody shreds!", "[src] goes off in your hand, blowing your [B.name] to bloody shreds!")
-
-
-
B.dismember()
-
-
-
-
-
-
. = ..()
-
-
-
update_mob()
-
-
-
var/flashbang_turf = get_turf(src)
-
-
-
if(!flashbang_turf)
-
-
-
return
-
-
-
do_sparks(rand(5, 9), FALSE, src)
-
-
-
playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 50, TRUE, 8, 0.9)
-
-
-
new /obj/effect/dummy/lighting_obj (flashbang_turf, LIGHT_COLOR_WHITE, (flashbang_range + 2), 2, 1)
-
-
-
for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf))
-
-
-
pop(get_turf(M), M)
-
-
-
- resolve()
+ qdel(src)
/obj/item/grenade/stingbang/proc/pop(turf/T , mob/living/M)
if(M.stat == DEAD) //They're dead!
@@ -194,7 +92,7 @@
M.Knockdown(max(100/max(1,distance), 60))
//Bang
- if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
+ if(!distance || loc == M || loc == M.loc)
M.Paralyze(20)
M.Knockdown(200)
M.soundbang_act(1, 200, 10, 15)
@@ -222,10 +120,10 @@
rots++
user.changeNext_move(CLICK_CD_RAPID)
-/obj/item/grenade/primer/prime()
+/obj/item/grenade/primer/prime(mob/living/lanced_by)
shrapnel_radius = round(rots / rots_per_mag)
. = ..()
- resolve()
+ qdel(src)
/obj/item/grenade/primer/stingbang
name = "rotsting"
diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm
index dad1fdb6a2..3553d79faf 100644
--- a/code/game/objects/items/grenades/ghettobomb.dm
+++ b/code/game/objects/items/grenades/ghettobomb.dm
@@ -50,11 +50,11 @@
cut_overlay("improvised_grenade_filled")
preprime(user, null, FALSE)
-/obj/item/grenade/iedcasing/prime() //Blowing that can up
+/obj/item/grenade/iedcasing/prime(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.
- resolve()
+ qdel(src)
/obj/item/grenade/iedcasing/examine(mob/user)
. = ..()
diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm
index bb99bf3d6e..7a6157bf65 100644
--- a/code/game/objects/items/grenades/grenade.dm
+++ b/code/game/objects/items/grenades/grenade.dm
@@ -112,7 +112,7 @@
icon_state = initial(icon_state) + "_active"
addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride)
-/obj/item/grenade/proc/prime()
+/obj/item/grenade/proc/prime(mob/living/lanced_by)
var/turf/T = get_turf(src)
log_game("Grenade detonation at [AREACOORD(T)], location [loc]")
@@ -120,7 +120,7 @@
shrapnel_initialized = TRUE
AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_radius)
- SEND_SIGNAL(src, COMSIG_GRENADE_PRIME)
+ SEND_SIGNAL(src, COMSIG_GRENADE_PRIME, lanced_by)
if(ex_dev || ex_heavy || ex_light || ex_flame)
explosion(loc, ex_dev, ex_heavy, ex_light, flame_range = ex_flame)
@@ -165,13 +165,3 @@
/obj/item/proc/grenade_prime_react(obj/item/grenade/nade)
return
-
-/// Don't call qdel() directly on the grenade after it booms, call this instead so it can still resolve its pellet_cloud component if it has shrapnel, then the component will qdel it
-
-
-
-/obj/item/grenade/proc/resolve()
- if(shrapnel_type)
- moveToNullspace()
- else
- qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index 77cc0cd59f..ebf50cbc3d 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -158,7 +158,7 @@
shout_syndicate_crap(user)
explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes
user.gib(1, 1)
- resolve()
+ qdel(src)
/obj/item/grenade/plastic/update_icon_state()
if(nadeassembly)
@@ -207,7 +207,7 @@
else
return ..()
-/obj/item/grenade/plastic/c4/prime()
+/obj/item/grenade/c4/prime(mob/living/lanced_by)
if(QDELETED(src))
return
. = ..()
@@ -222,7 +222,7 @@
location = get_turf(src)
if(location)
explosion(location,0,0,3)
- resolve()
+ qdel(src)
/obj/item/grenade/plastic/c4/attack(mob/M, mob/user, def_zone)
return
diff --git a/code/game/objects/items/grenades/smokebomb.dm b/code/game/objects/items/grenades/smokebomb.dm
index ef779ac8e4..1b856fc013 100644
--- a/code/game/objects/items/grenades/smokebomb.dm
+++ b/code/game/objects/items/grenades/smokebomb.dm
@@ -17,7 +17,7 @@
qdel(smoke)
return ..()
-/obj/item/grenade/smokebomb/prime()
+/obj/item/grenade/smokebomb/prime(mob/living/lanced_by)
. = ..()
update_mob()
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -29,4 +29,4 @@
var/damage = round(30/(get_dist(B,src)+1))
B.take_damage(damage, BURN, "melee", 0)
sleep(80)
- resolve()
+ qdel(src)
diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm
index 594e5ad2e5..a8b0fa3cd3 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() // Prime now just handles the two loops that query for people in lockers and people who can see it.
+/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.
. = ..()
update_mob()
if(spawner_type && deliveryamt)
@@ -20,7 +20,7 @@
// Spawn some hostile syndicate critters and spread them out
spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=((flags_1 & ADMIN_SPAWNED_1) ? TRUE : FALSE))
- resolve()
+ qdel(src)
/obj/item/grenade/spawnergrenade/manhacks
name = "viscerator delivery grenade"
diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm
index ae2877dcaf..9f12edeb17 100644
--- a/code/game/objects/items/grenades/syndieminibomb.dm
+++ b/code/game/objects/items/grenades/syndieminibomb.dm
@@ -10,10 +10,10 @@
ex_flame = 2
-/obj/item/grenade/syndieminibomb/prime()
+/obj/item/grenade/syndieminibomb/prime(mob/living/lanced_by)
. = ..()
update_mob()
- resolve()
+ qdel(src)
/obj/item/grenade/syndieminibomb/concussion
name = "HE Grenade"
@@ -39,10 +39,10 @@
shrapnel_type = /obj/item/projectile/bullet/shrapnel/mega
shrapnel_radius = 12
-/obj/item/grenade/frag/prime()
+/obj/item/grenade/frag/prime(mob/living/lanced_by)
. = ..()
update_mob()
- resolve()
+ qdel(src)
/obj/item/grenade/gluon
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also likely wet any nearby floors."
@@ -54,7 +54,7 @@
var/rad_damage = 350
var/stamina_damage = 30
-/obj/item/grenade/gluon/prime()
+/obj/item/grenade/gluon/prime(mob/living/lanced_by)
. = ..()
update_mob()
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
@@ -66,4 +66,4 @@
for(var/mob/living/carbon/L in T)
L.adjustStaminaLoss(stamina_damage)
L.adjust_bodytemperature(-230)
- resolve()
+ qdel(src)
diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm
index fca85952c9..738eb03fbf 100644
--- a/code/modules/cargo/packs/security.dm
+++ b/code/modules/cargo/packs/security.dm
@@ -8,7 +8,7 @@
/datum/supply_pack/security
group = "Security"
- access_any = ACCESS_FORENSICS_LOCKERS //| ACCESS_SECURITY
+ access = ACCESS_SECURITY
crate_type = /obj/structure/closet/crate/secure/gear
can_private_buy = FALSE
diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm
index 851753da46..f4748ccde8 100644
--- a/code/modules/hydroponics/grown/citrus.dm
+++ b/code/modules/hydroponics/grown/citrus.dm
@@ -195,7 +195,7 @@
/obj/item/reagent_containers/food/snacks/grown/firelemon/ex_act(severity)
qdel(src) //Ensuring that it's deleted by its own explosion
-/obj/item/reagent_containers/food/snacks/grown/firelemon/proc/prime()
+/obj/item/reagent_containers/food/snacks/grown/firelemon/proc/prime(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 f356ed7b68..e5c8f72dfe 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -223,7 +223,7 @@
/obj/item/reagent_containers/food/snacks/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/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime()
+/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime(mob/living/lanced_by)
icon_state = "cherry_bomb_lit"
playsound(src, 'sound/effects/fuse.ogg', seed.potency, 0)
addtimer(CALLBACK(src, /obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/detonate), rand(50, 100))
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index d20553d8ad..b3b49cb7cd 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -1,5 +1,5 @@
-/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = null, soften_text = null, silent=FALSE, armour_penetration, penetrated_text)
+/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = null, soften_text = null, armour_penetration, penetrated_text, silent=FALSE)
var/armor = getarmor(def_zone, attack_flag)
if(armor <= 0)