diff --git a/code/game/dna/mutations/mutation_powers.dm b/code/game/dna/mutations/mutation_powers.dm
index da930664a2c..d25a11adfd7 100644
--- a/code/game/dna/mutations/mutation_powers.dm
+++ b/code/game/dna/mutations/mutation_powers.dm
@@ -478,6 +478,7 @@
invocation_type = "none"
action_icon_state = "genetic_jump"
+ var/leap_distance = 10
/datum/spell/leap/create_new_targeting()
return new /datum/spell_targeting/self
@@ -510,15 +511,25 @@
user.layer = 9
user.flying = TRUE
- for(var/i=0, i<10, i++)
+ for(var/i in 1 to leap_distance)
+ var/turf/hit_turf = get_step(user, user.dir)
+ var/atom/hit_atom = get_blocking_atom(hit_turf)
+ if(hit_atom)
+ hit_atom.hit_by_thrown_mob(user, damage = 10)
+ break
+
step(user, user.dir)
- if(i < 5) user.pixel_y += 8
- else user.pixel_y -= 8
+ if(i < 6)
+ user.pixel_y += 8
+ else
+ user.pixel_y -= 8
sleep(1)
+
user.flying = prevFlying
+ user.pixel_y = 0 // In case leap was varedited to be longer or shorter
if(HAS_TRAIT(user, TRAIT_FAT) && prob(66))
- user.visible_message("[user.name] crashes due to [user.p_their()] heavy weight!")
+ user.visible_message("[user.name] crashes due to [user.p_their()] heavy weight!")
//playsound(user.loc, 'zhit.wav', 50, 1)
user.AdjustWeakened(20 SECONDS)
user.AdjustStunned(10 SECONDS)
@@ -541,6 +552,24 @@
container.pixel_x = 0
container.pixel_y = 0
+/datum/spell/leap/proc/get_blocking_atom(turf/turf_to_check)
+ if(!turf_to_check)
+ return FALSE
+
+ if(turf_to_check.density)
+ return turf_to_check
+
+ for(var/atom/movable/hit_thing in turf_to_check)
+ if(isliving(hit_thing))
+ var/mob/living/hit_mob = hit_thing
+ return hit_mob.density
+
+ if(isobj(hit_thing))
+ var/obj/hit_obj = hit_thing
+ return hit_obj.density
+
+ return FALSE
+
////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/polymorphism