diff --git a/code/modules/heavy_vehicle/components/legs.dm b/code/modules/heavy_vehicle/components/legs.dm
index fec92ba0156..fa72714378d 100644
--- a/code/modules/heavy_vehicle/components/legs.dm
+++ b/code/modules/heavy_vehicle/components/legs.dm
@@ -8,6 +8,7 @@
var/obj/item/robot_parts/robot_component/actuator/motivator
var/mech_turn_sound = 'sound/mecha/mechturn.ogg'
var/mech_step_sound = 'sound/mecha/mechstep.ogg'
+ var/trample_damage = 5
/obj/item/mech_component/propulsion/Destroy()
QDEL_NULL(motivator)
diff --git a/code/modules/heavy_vehicle/mech_interaction.dm b/code/modules/heavy_vehicle/mech_interaction.dm
index bfc59af6f85..f1d60a50ce4 100644
--- a/code/modules/heavy_vehicle/mech_interaction.dm
+++ b/code/modules/heavy_vehicle/mech_interaction.dm
@@ -462,4 +462,31 @@
if(!new_name || new_name == name || (user != src && !(user in pilots)))
return
name = new_name
- to_chat(user, "You have redesignated this exosuit as \the [name].")
\ No newline at end of file
+ to_chat(user, "You have redesignated this exosuit as \the [name].")
+
+/mob/living/heavy_vehicle/proc/trample(var/mob/living/H)
+ if(!LAZYLEN(pilots))
+ return
+ if(!isliving(H))
+ return
+
+ if(legs)
+ if(ishuman(H))
+ var/mob/living/carbon/human/D = H
+ if(D.lying)
+ D.attack_log += "\[[time_stamp()]\] Was trampled by [src]"
+ attack_log += text("\[[time_stamp()]\] trampled [D.name] ([D.ckey]) with \the [src].")
+ msg_admin_attack("[src] trampled [key_name(D)] at (JMP)" )
+ src.visible_message("\The [src] runs over \the [D]!")
+ D.apply_damage(legs.trample_damage, BRUTE)
+ return TRUE
+
+ else
+ var/mob/living/L = H
+ src.visible_message("\The [src] runs over \the [L]!")
+ if(isanimal(L))
+ if(issmall(L) && (L.stat == DEAD))
+ L.gib()
+ return TRUE
+ L.apply_damage(legs.trample_damage, BRUTE)
+ return TRUE
diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm
index 7698a282643..758c7271997 100644
--- a/code/modules/heavy_vehicle/mecha.dm
+++ b/code/modules/heavy_vehicle/mecha.dm
@@ -7,6 +7,7 @@
status_flags = PASSEMOTES
a_intent = I_HURT
mob_size = MOB_LARGE
+ mob_push_flags = ALLMOBS
var/decal
var/emp_damage = 0
diff --git a/code/modules/heavy_vehicle/premade/combat.dm b/code/modules/heavy_vehicle/premade/combat.dm
index 5aeaaba6ac8..ab48f0b666c 100644
--- a/code/modules/heavy_vehicle/premade/combat.dm
+++ b/code/modules/heavy_vehicle/premade/combat.dm
@@ -39,6 +39,7 @@
move_delay = 3
turn_delay = 3
power_use = 5000
+ trample_damage = 35
/obj/item/mech_component/sensors/combat
name = "combat sensors"
diff --git a/code/modules/heavy_vehicle/premade/heavy.dm b/code/modules/heavy_vehicle/premade/heavy.dm
index 8e9e3ba4040..9822335e85b 100644
--- a/code/modules/heavy_vehicle/premade/heavy.dm
+++ b/code/modules/heavy_vehicle/premade/heavy.dm
@@ -36,11 +36,12 @@
/obj/item/mech_component/propulsion/heavy
name = "heavy legs"
exosuit_desc_string = "heavy hydraulic legs"
- desc = "Oversized actuators struggle to move these armoured legs. "
+ desc = "Oversized actuators struggle to move these armoured legs."
icon_state = "heavy_legs"
move_delay = 5
max_damage = 90
power_use = 5000
+ trample_damage = 45
/obj/item/mech_component/sensors/heavy
name = "heavy sensors"
diff --git a/code/modules/heavy_vehicle/premade/light.dm b/code/modules/heavy_vehicle/premade/light.dm
index 2362782087e..417105a3f55 100644
--- a/code/modules/heavy_vehicle/premade/light.dm
+++ b/code/modules/heavy_vehicle/premade/light.dm
@@ -33,7 +33,7 @@
action_delay = 15
max_damage = 40
power_use = 3000
- desc = "As flexible as they are fragile, these Vey-Med manipulators can follow a pilot's movements in close to real time."
+ desc = "As flexible as they are fragile, these Bishop Cybernetics manipulators can follow a pilot's movements in close to real time."
punch_sound = 'sound/mecha/mech_punch_fast.ogg'
/obj/item/mech_component/propulsion/light
diff --git a/code/modules/heavy_vehicle/premade/misc.dm b/code/modules/heavy_vehicle/premade/misc.dm
index b0dbc89afcc..f08b611d8a1 100644
--- a/code/modules/heavy_vehicle/premade/misc.dm
+++ b/code/modules/heavy_vehicle/premade/misc.dm
@@ -1,12 +1,13 @@
/obj/item/mech_component/propulsion/spider
name = "quadlegs"
exosuit_desc_string = "hydraulic quadlegs"
- desc = "Xion Industrial's arachnid series boasts more leg per leg than the leading competitor."
+ desc = "Xion Manufacturing Group's arachnid series boasts more leg per leg than the leading competitor."
icon_state = "spiderlegs"
max_damage = 80
move_delay = 4
turn_delay = 1
power_use = 2500
+ trample_damage = 10
/obj/item/mech_component/propulsion/tracks
name = "tracks"
@@ -19,6 +20,7 @@
power_use = 7500
color = COLOR_WHITE
mech_step_sound = 'sound/mecha/tanktread.ogg'
+ trample_damage = 25
/obj/item/mech_component/chassis/pod
name = "spherical exosuit chassis"
diff --git a/code/modules/heavy_vehicle/premade/powerloader.dm b/code/modules/heavy_vehicle/premade/powerloader.dm
index 82c27598602..678855056d0 100644
--- a/code/modules/heavy_vehicle/premade/powerloader.dm
+++ b/code/modules/heavy_vehicle/premade/powerloader.dm
@@ -31,7 +31,7 @@
max_damage = 70
power_use = 2000
melee_damage = 40
- desc = "The Xion Industrial Digital Interaction Manifolds allow you poke untold dangers from the relative safety of your cockpit."
+ desc = "The Xion Manufacturing Group Digital Interaction Manifolds allow you poke untold dangers from the relative safety of your cockpit."
punch_sound = 'sound/mecha/mech_punch_slow.ogg'
/obj/item/mech_component/propulsion/ripley
@@ -42,6 +42,7 @@
move_delay = 4
turn_delay = 4
power_use = 2000
+ trample_damage = 10
/obj/item/mech_component/sensors/ripley
name = "exosuit sensors"
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 8f508774153..11d60aa69e8 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -864,12 +864,17 @@ default behaviour is:
/mob/living/proc/get_digestion_product()
return null
-
/proc/is_valid_for_devour(var/mob/living/test, var/eat_types)
//eat_types must contain all types that the mob has. For example we need both humanoid and synthetic to eat an IPC.
var/test_types = test.find_type()
. = (eat_types & test_types) == test_types
-
+
+/mob/living/Crossed(var/atom/movable/AM)
+ if(istype(AM, /mob/living/heavy_vehicle))
+ var/mob/living/heavy_vehicle/MB = AM
+ MB.trample(src)
+ ..()
+
#define PPM 9 //Protein per meat, used for calculating the quantity of protein in an animal
/mob/living/proc/calculate_composition()
if (!composition_reagent)//if no reagent has been set, then we'll set one
diff --git a/html/changelogs/alberyk-mechleg.yml b/html/changelogs/alberyk-mechleg.yml
new file mode 100644
index 00000000000..90090a4096e
--- /dev/null
+++ b/html/changelogs/alberyk-mechleg.yml
@@ -0,0 +1,7 @@
+author: Alberyk
+
+delete-after: True
+
+changes:
+ - rscadd: "Mechs will now trample, dealing brute damaged based on their leg types, mobs that they run over."
+ - rscadd: "Mechs can now push most mobs."