Files
Aurora.3/code/modules/heavy_vehicle/premade/powerloader.dm
VMSolidusandGitHub a436fa65a6 More Mech Damage Feedback (#22118)
This PR adds some new "Damage Feedback" interactions to mechs, which I'm
adding in response to what I think is player perception of mechs being
invincible. Previously mech manipulators and torsos had no actual
mechanics for damage states, and having 0 damage on a mechs arms was
functionally the same thing as having 100 damage, so long as the arm
wasn't completely destroyed.

This PR changes that by making it so that mech manipulators have a
chance to fail (loudly and visibly) on use with a probability that
varies based on how much damage the arms have taken. Additionally,
there's also now a mechanic for mech ejections and hatch opening to fail
if the torso has taken sufficient damage, with chances that also vary
based on how much damage said torso has taken. In both cases, the mech
plays audible and visual effects to indicate to the players involved
that it is being hindered by damage.


https://github.com/user-attachments/assets/934e4561-1fda-4c47-9770-438960834aa9

Yes this does mean that you can smash someone's hatch closed, to a point
you'll need a welder to get them out.

<img width="772" height="181" alt="image"
src="https://github.com/user-attachments/assets/75f98060-7c4c-468b-bd31-e6c4ec4c0be2"
/>
2026-04-04 22:27:01 +00:00

192 lines
6.4 KiB
Plaintext

/mob/living/heavy_vehicle/premade/ripley
name = "power loader"
desc = "An ancient but well-liked cargo handling exosuit."
e_head = /obj/item/mech_component/sensors/ripley
e_body = /obj/item/mech_component/chassis/ripley/cell
e_arms = /obj/item/mech_component/manipulators/ripley
e_legs = /obj/item/mech_component/propulsion/ripley
e_color = COLOR_RIPLEY
h_l_hand = /obj/item/mecha_equipment/drill
h_r_hand = /obj/item/mecha_equipment/clamp
/mob/living/heavy_vehicle/premade/ripley/cargo
h_back = /obj/item/mecha_equipment/autolathe
/mob/living/heavy_vehicle/premade/ripley/loader
h_l_hand = /obj/item/mecha_equipment/clamp
/mob/living/heavy_vehicle/premade/ripley/loader/sol
name = "solarian powerloader"
e_color = COLOR_DARK_GREEN_GRAY
/mob/living/heavy_vehicle/premade/ripley/loader/sol/damaged
name = "damaged solarian powerloader"
h_l_hand = null
/mob/living/heavy_vehicle/premade/ripley/loader/tcaf
name = "TCAF powerloader"
e_color = COLOR_TCFL
/mob/living/heavy_vehicle/premade/ripley/janitorial
name = "janitorial power loader"
desc = "A standard cargo-handling power loader converted into a cleaning machine."
e_color = COLOR_PURPLE
h_l_hand = /obj/item/mecha_equipment/clamp
h_l_shoulder = /obj/item/mecha_equipment/mounted_system/grenadecleaner
h_r_shoulder = /obj/item/mecha_equipment/mounted_system/grenadecleaner
h_back = /obj/item/mecha_equipment/quick_enter
/obj/item/mech_component/manipulators/ripley
name = "exosuit arms"
exosuit_desc_string = "heavy-duty industrial lifters"
max_damage = 225
power_use = 1000
melee_damage = 40
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
name = "exosuit legs"
exosuit_desc_string = "reinforced hydraulic legs"
desc = "Wide and stable but not particularly fast."
max_damage = 150
move_delay = 4
turn_delay = 4
power_use = 1000
trample_damage = 10
/obj/item/mech_component/sensors/ripley
name = "exosuit sensors"
gender = PLURAL
exosuit_desc_string = "simple collision detection sensors"
desc = "A primitive set of sensors designed to work in tandem with most MKI Eyeball platforms."
max_damage = 200
power_use = 0
/obj/item/mech_component/sensors/ripley/prebuild()
..()
software = new(src)
software.installed_software = list(MECH_SOFTWARE_UTILITY, MECH_SOFTWARE_ENGINEERING)
/obj/item/mech_component/chassis/ripley
name = "open exosuit chassis"
hatch_descriptor = "roll cage"
pilot_coverage = 40
exosuit_desc_string = "an industrial rollcage"
desc = "A Xion industrial brand roll cage. Technically OSHA compliant. Technically. This variant has an extra compartment for a copilot, but has no sealed atmosphere."
max_damage = 200
power_use = 500
/obj/item/mech_component/chassis/ripley/prebuild()
. = ..()
mech_armor = new /obj/item/robot_parts/robot_component/armor/mech(src)
/obj/item/mech_component/chassis/ripley/cell
cell_type = /obj/item/cell/mecha
/obj/item/mech_component/chassis/ripley/nuclear
cell_type = /obj/item/cell/mecha/nuclear
/obj/item/mech_component/chassis/ripley/Initialize()
pilot_positions = list(
list(
"[NORTH]" = list("x" = 8, "y" = 8),
"[SOUTH]" = list("x" = 8, "y" = 8),
"[EAST]" = list("x" = 8, "y" = 8),
"[WEST]" = list("x" = 8, "y" = 8)
),
list(
"[NORTH]" = list("x" = 8, "y" = 16),
"[SOUTH]" = list("x" = 8, "y" = 16),
"[EAST]" = list("x" = 0, "y" = 16),
"[WEST]" = list("x" = 16, "y" = 16)
)
)
. = ..()
/mob/living/heavy_vehicle/premade/firefighter
name = "firefighting exosuit"
desc = "A mix and match of industrial parts designed to withstand fires."
icon_state = "firefighter"
e_head = /obj/item/mech_component/sensors/ripley
e_body = /obj/item/mech_component/chassis/ripley/cell
e_arms = /obj/item/mech_component/manipulators/ripley
e_legs = /obj/item/mech_component/propulsion/ripley
e_color = "#385b3c"
h_l_hand = /obj/item/mecha_equipment/drill
h_r_hand = /obj/item/mecha_equipment/mounted_system/extinguisher
/mob/living/heavy_vehicle/premade/firefighter/Initialize()
. = ..()
material = SSmaterials.get_material_by_name(MATERIAL_PLASTEEL)
/obj/item/mech_component/sensors/firefighter/prebuild()
..()
software = new(src)
software.installed_software = list(MECH_SOFTWARE_UTILITY, MECH_SOFTWARE_ENGINEERING)
/mob/living/heavy_vehicle/premade/firefighter/sol
name = "solarian firefighting exosuit"
e_color = COLOR_DARK_GREEN_GRAY
/mob/living/heavy_vehicle/premade/combatripley
name = "combat APLU \"Ripley\""
desc = "A large APLU unit fitted with specialized composite armor and fancy, though old targeting systems."
icon_state = "combatripley"
decal = "ripley_legion"
e_head = /obj/item/mech_component/sensors/combatripley
e_body = /obj/item/mech_component/chassis/ripley/nuclear
e_arms = /obj/item/mech_component/manipulators/ripley
e_legs = /obj/item/mech_component/propulsion/ripley
e_color = COLOR_TCFL
h_l_shoulder = /obj/item/mecha_equipment/mounted_system/combat/grenadesmoke
h_r_shoulder = /obj/item/mecha_equipment/mounted_system/flarelauncher
h_l_hand = /obj/item/mecha_equipment/mounted_system/combat/blaster
h_r_hand = /obj/item/mecha_equipment/mounted_system/combat/gauss
/mob/living/heavy_vehicle/premade/combatripley/Initialize()
. = ..()
body.mech_armor = new /obj/item/robot_parts/robot_component/armor/mech/combat(body)
/obj/item/mech_component/sensors/combatripley
name = "exosuit sensors"
gender = PLURAL
power_use = 50000
vision_flags = SEE_MOBS
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
/obj/item/mech_component/sensors/combatripley/prebuild()
..()
software = new(src)
software.installed_software = list(MECH_SOFTWARE_UTILITY, MECH_SOFTWARE_WEAPONS)
/mob/living/heavy_vehicle/premade/ripley/remote
name = "remote power loader"
dummy_colour = "#ffc44f"
remote_network = REMOTE_GENERIC_MECH
does_hardpoint_lock = FALSE
/mob/living/heavy_vehicle/premade/ripley/remote_prison
name = "penal power loader"
dummy_colour = "#302e2b"
remote_network = REMOTE_PRISON_MECH
remote_type = /obj/item/remote_mecha/penal
/mob/living/heavy_vehicle/premade/ripley/remote_ai
name = "stationbound power loader"
e_color = COLOR_GREEN_GRAY
dummy_colour = COLOR_GREEN_GRAY
dummy_type = /mob/living/simple_animal/spiderbot/ai
remote_network = REMOTE_AI_MECH
remote_type = /obj/item/remote_mecha/ai
does_hardpoint_lock = FALSE
h_l_hand = /obj/item/mecha_equipment/toolset