diff --git a/code/mob/living/critter/flock/flockdrone.dm b/code/mob/living/critter/flock/flockdrone.dm index 76b4f9fbb..53bccd623 100644 --- a/code/mob/living/critter/flock/flockdrone.dm +++ b/code/mob/living/critter/flock/flockdrone.dm @@ -33,7 +33,7 @@ // antigrab powers var/antigrab_counter = 0 - var/antigrab_fires_at = 100 + var/antigrab_fires_at = 2 var/glow_color = "#26ffe6a2" @@ -399,6 +399,20 @@ if (src.dormant) return + //if we're blocking that means we're not grabbed + if (!length(src.grabbed_by) || src.find_type_in_hand(/obj/item/grab/block)) + src.antigrab_counter = 0 + else + src.antigrab_counter++ + if (src.antigrab_counter >= src.antigrab_fires_at) + playsound(src, "sound/effects/electric_shock.ogg", 40, 1, -3) + boutput(src, "\[SYSTEM: Anti-grapple countermeasures deployed.\]") + for(var/obj/item/grab/G in src.grabbed_by) + var/mob/living/L = G.assailant + L.shock(src, 5000) + qdel(G) //in case they don't fall over from our shock + src.antigrab_counter = 0 + var/obj/item/I = absorber.item if (!I) @@ -456,20 +470,6 @@ /mob/living/critter/flock/drone/process_move(keys) - if(keys && length(src.grabbed_by)) - if (length(src.grabbed_by) == 1 && src.find_type_in_hand(/obj/item/grab/block)) - src.antigrab_counter = 0 - else - ++src.antigrab_counter - if(src.antigrab_counter >= src.antigrab_fires_at) - playsound(src, "sound/effects/electric_shock.ogg", 40, 1, -3) - boutput(src, "\[SYSTEM: Anti-grapple countermeasures deployed.\]") - for(var/obj/item/grab/G in src.grabbed_by) - var/mob/living/L = G.assailant - L.shock(src, 5000) - src.antigrab_counter = 0 - else - src.antigrab_counter = 0 if(keys & KEY_RUN && src.resources >= 1) if(!src.floorrunning && isfeathertile(src.loc)) if (length(src.grabbed_by)) diff --git a/code/turf/turf_flock.dm b/code/turf/turf_flock.dm index a307b80e0..46501fc38 100644 --- a/code/turf/turf_flock.dm +++ b/code/turf/turf_flock.dm @@ -49,6 +49,9 @@ // do not call parent, this is not an ordinary floor if(!C || !user) return + if (istype(C, /obj/item/grab)) + grab_smash(C, user) + return if(ispryingtool(C) && src.broken) playsound(src, "sound/items/Crowbar.ogg", 80, 1) src.break_tile_to_plating()