Fixes mech chargers (#22486)

Fixes mech chargers being impossible to deconstruct or upgrade.
Fixes mech charger upgrades doing nothing.

Adds a pre-filled rapid part exchanger for testing machine upgrades, or
maybe spawning as loot.

<img width="435" height="159" alt="image"
src="https://github.com/user-attachments/assets/ca534837-ef29-44ff-b9cb-c4fb107e6f99"
/>
This commit is contained in:
FenodyreeAv
2026-05-27 15:53:56 +00:00
committed by GitHub
parent eda591585c
commit 78d17e1d6c
3 changed files with 104 additions and 10 deletions
@@ -12,9 +12,14 @@
var/mob/living/heavy_vehicle/charging
var/base_charge_rate = 90 KILO WATTS
var/repair_power_usage = 15 KILO WATTS // Per 1 HP of health.
var/repair = 0
var/repair
var/charge
var/charge_per_capacitor_rating = 0.5
var/charge_per_scanner_rating = 0.25
var/repair_per_scanner_rating = 0.25
var/repair_per_manipulator_rating = 0.5
component_types = list(
/obj/item/circuitboard/mech_recharger,
/obj/item/stock_parts/capacitor = 2,
@@ -26,7 +31,11 @@
. += ..()
. += "Upgraded <b>capacitors</b> will increase charging rate."
. += "Upgraded <b>scanning modules</b> will increase both charging rate and repair speed."
. += SPAN_NOTICE(" - The current charge speed is <b>[active_power_usage / 1000]</b> kW")
. += "Upgraded <b>manipulators</b> will increase repair speed."
if(repair > 0)
. += SPAN_NOTICE(" - The current repair speed is <b>[repair]</b> HP per second</b>")
. += SPAN_NOTICE(" - The current repair power usage is <b>[(repair_power_usage * repair) / 1000]</b> kW")
/obj/structure/machinery/mech_recharger/Initialize(mapload)
. = ..()
@@ -50,19 +59,30 @@
if(gone == charging)
stop_charging()
/obj/structure/machinery/mech_recharger/attackby(obj/item/attacking_item, mob/user)
if(default_part_replacement(user, attacking_item))
return TRUE
else if(default_deconstruction_screwdriver(user, attacking_item))
return TRUE
else if(default_deconstruction_crowbar(user, attacking_item))
return TRUE
return ..()
/obj/structure/machinery/mech_recharger/RefreshParts()
..()
charge = 0
repair = -5
charge = -0.25
repair = -1.75
for(var/obj/item/stock_parts/P in component_parts)
for(var/obj/item/stock_parts/P in component_parts) //Charges at 315 kW and repairs at 2 HP/s fully upgraded.
if(iscapacitor(P))
charge += P.rating * 20
charge += P.rating * charge_per_capacitor_rating
else if(isscanner(P))
charge += P.rating * 5
repair += P.rating
charge += P.rating * charge_per_scanner_rating
repair += P.rating * repair_per_scanner_rating
else if(ismanipulator(P))
repair += P.rating * 2
repair += P.rating * repair_per_manipulator_rating
change_power_consumption(initial(base_charge_rate) * charge, POWER_USE_ACTIVE)
/obj/structure/machinery/mech_recharger/process()
if(!charging)
@@ -81,9 +101,9 @@
stop_charging()
return
var/remaining_energy = active_power_usage
var/remaining_energy = active_power_usage * charge
if(repair && !fully_repaired())
if(repair > 0 && !fully_repaired())
for(var/obj/item/mech_component/MC in charging)
if(MC)
MC.repair_brute_damage(repair)