mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-31 09:00:25 +01:00
Mech Legs Balance Pass (#21946)
This PR tweaks the stats for several of the mech legs to have fairer movespeed characteristics and be a lot less punishing for taking damage. The general complaint I saw from players was that taking enough damage made the mechs suddenly feel useless, as the extra delays from leg damage were far too punishing. I also added a new mechanic for the extremely rare Cult Mech that allows it to actually GAIN movement speed when damaged, as a sort of "Fragile Berserker" mechanic that will help make it actually useful as a melee combatant gimmick. I came up with that idea after watching a round where an antag managed to get a cult mech, but he was physically incapable of getting into melee with anyone while driving it. As a bugfix, this PR fixes glide sizes for mechs so that their smooth movement correctly reflects how the different directions have different movement speeds. https://github.com/user-attachments/assets/0bf63edd-b0db-4257-a6e4-c42e5cf16962
This commit is contained in:
@@ -25,6 +25,12 @@
|
||||
*/
|
||||
var/damaged_delay = 10
|
||||
|
||||
/**
|
||||
* Linear slope of a mech's damage delay characteristics, EG how "fast" it linearly scales.
|
||||
* This allows floating points, and can technically be a negative number. EG: "Rage mechanic where being damaged makes the mech faster"
|
||||
*/
|
||||
var/damaged_delay_slope = 1.0
|
||||
|
||||
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'
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
to_chat(user, SPAN_WARNING("The power indicator flashes briefly."))
|
||||
return
|
||||
|
||||
next_mecha_move = world.time + (incorporeal_move ? legs.move_delay / 2 : legs.move_delay) + (legs.damaged_delay * (legs.total_damage / legs.max_damage))
|
||||
next_mecha_move = world.time + (incorporeal_move ? legs.move_delay / 2 : legs.move_delay) + (legs.damaged_delay * (legs.total_damage / legs.max_damage) * legs.damaged_delay_slope)
|
||||
return TRUE
|
||||
|
||||
/mob/living/heavy_vehicle/proc/can_turn(var/mob/user)
|
||||
@@ -61,7 +61,7 @@
|
||||
to_chat(user, SPAN_WARNING("The power indicator flashes briefly."))
|
||||
return
|
||||
|
||||
next_mecha_turn = world.time + legs.turn_delay + (legs.damaged_delay * (legs.total_damage / legs.max_damage))
|
||||
next_mecha_turn = world.time + legs.turn_delay + (legs.damaged_delay * (legs.total_damage / legs.max_damage) * legs.damaged_delay_slope)
|
||||
return TRUE
|
||||
|
||||
/mob/living/heavy_vehicle/proc/can_strafe(var/mob/user)
|
||||
@@ -100,7 +100,7 @@
|
||||
to_chat(user, SPAN_WARNING("The power indicator flashes briefly."))
|
||||
return
|
||||
|
||||
next_mecha_move = world.time + ((legs.move_delay + (legs.damaged_delay * (legs.total_damage / legs.max_damage))) * legs.strafe_delay_modifier)
|
||||
next_mecha_move = world.time + ((legs.move_delay + (legs.damaged_delay * (legs.total_damage / legs.max_damage) * legs.damaged_delay_slope)) * legs.strafe_delay_modifier)
|
||||
return TRUE
|
||||
|
||||
/mob/living/heavy_vehicle/get_standard_pixel_x()
|
||||
|
||||
@@ -361,12 +361,15 @@
|
||||
Move(src.loc, direction, 0, TRUE)
|
||||
|
||||
/mob/living/heavy_vehicle/Move(atom/newloc, direct, glide_size_override = 0, update_dir = TRUE)
|
||||
// They shouldn't get to this proc without legs in the first place, but its okay to guard here.
|
||||
if (!legs)
|
||||
return
|
||||
. = ..()
|
||||
set_glide_size(DELAY_TO_GLIDE_SIZE(next_mecha_move - world.time))
|
||||
if(. && !istype(loc, /turf/space))
|
||||
if(legs)
|
||||
if(legs.mech_step_sound)
|
||||
playsound(src.loc, legs.mech_step_sound, 40, TRUE)
|
||||
use_cell_power(legs.power_use * CELLRATE)
|
||||
if(legs.mech_step_sound)
|
||||
playsound(src.loc, legs.mech_step_sound, 40, TRUE)
|
||||
use_cell_power(legs.power_use * CELLRATE)
|
||||
update_icon()
|
||||
|
||||
/mob/living/heavy_vehicle/Post_Incorpmove()
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
max_damage = 100
|
||||
power_use = 2500
|
||||
trample_damage = 35
|
||||
// Dedicated combat chassis is highly resistant to mobility loss until a full "mobility kill"
|
||||
damaged_delay = 3
|
||||
damaged_delay_slope = 0.5
|
||||
|
||||
/obj/item/mech_component/sensors/combat
|
||||
name = "combat sensors"
|
||||
|
||||
@@ -38,6 +38,11 @@
|
||||
power_use = 2500
|
||||
trample_damage = 45
|
||||
|
||||
// Uniquely increases speed when damaged. Fragile, but good for melee.
|
||||
// It can become faster than a light mech, but only when on the verge of death.
|
||||
damaged_delay = 4
|
||||
damaged_delay_slope = -1
|
||||
|
||||
/obj/item/mech_component/sensors/cult
|
||||
name = "daemon sensors"
|
||||
desc = "A hard shell to protect those that follow the Great One, these sensors assist in the slaughter."
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
max_damage = 200
|
||||
power_use = 2500
|
||||
trample_damage = 45
|
||||
damaged_delay = 5
|
||||
|
||||
/obj/item/mech_component/sensors/heavy
|
||||
name = "heavy sensors"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
max_damage = 150
|
||||
move_delay = 5
|
||||
turn_delay = 2
|
||||
strafe_delay_modifier = 1 // No delay on strafing.
|
||||
strafe_delay_modifier = 1.2 // minimal delay on strafing.
|
||||
reverse_delay = 10
|
||||
power_use = 2500
|
||||
trample_damage = 0
|
||||
@@ -22,6 +22,6 @@
|
||||
max_damage = 75
|
||||
move_delay = 2
|
||||
turn_delay = 2
|
||||
strafe_delay_modifier = 1 // No delay on strafing.
|
||||
strafe_delay_modifier = 1.2 // minimal delay on strafing.
|
||||
reverse_delay = 5
|
||||
power_use = 2000
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
icon_state = "light_legs"
|
||||
move_delay = 2
|
||||
turn_delay = 2
|
||||
damaged_delay = 4
|
||||
max_damage = 100
|
||||
power_use = 1500
|
||||
desc = "The electrical systems driving these legs are almost totally silent. Unfortunately slamming a plate of metal against the ground is not."
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
desc = "Four utterly goliath stump-like pistons hold this propulsion mechanism together."
|
||||
icon_state = "strider_legs"
|
||||
move_delay = 5
|
||||
damaged_delay = 5
|
||||
damaged_delay_slope = 0.5
|
||||
max_damage = 650
|
||||
power_use = 2500
|
||||
trample_damage = 45
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
max_damage = 160
|
||||
move_delay = 4
|
||||
turn_delay = 1
|
||||
reverse_delay = 2 // Faster than usual reverse for legs
|
||||
strafe_delay_modifier = 1.2 // Faster than usual strafing
|
||||
reverse_delay = 1 // Faster than usual reverse for legs
|
||||
strafe_delay_modifier = 1 // Uniquely the only chassis without a strafe delay
|
||||
damaged_delay = 4
|
||||
power_use = 1250
|
||||
trample_damage = 10
|
||||
|
||||
@@ -18,8 +19,8 @@
|
||||
icon_state = "spiderlegs-industrial"
|
||||
max_damage = 250
|
||||
move_delay = 5
|
||||
damaged_delay = 5
|
||||
turn_delay = 1
|
||||
strafe_delay_modifier = 1.2 // Faster than usual strafing
|
||||
power_use = 3500
|
||||
trample_damage = 25
|
||||
|
||||
@@ -30,6 +31,7 @@
|
||||
icon_state = "tracks"
|
||||
max_damage = 450
|
||||
move_delay = 2 //Its fast
|
||||
damaged_delay = 2
|
||||
turn_delay = 7
|
||||
reverse_delay = 0 // Uniquely the only chassis without a reverse delay.
|
||||
power_use = 3500
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
desc = "Strong legs adapted for the Adhomian rought terrain."
|
||||
icon_state = "egg_legs"
|
||||
move_delay = 3
|
||||
damaged_delay = 3
|
||||
turn_delay = 3
|
||||
max_damage = 100
|
||||
power_use = 2500
|
||||
|
||||
Reference in New Issue
Block a user