From b4315a284f4dff4f68adbbe67005d4e33fff0775 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Sat, 27 Dec 2025 11:21:15 -0500 Subject: [PATCH] fixes cells (#7445) --- code/game/objects/items/inducer.dm | 14 +++++--------- code/modules/power/cells/types/microfission.dm | 13 ++++++++++--- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index 0d0ed227bb8..d26b5e80d49 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -33,13 +33,9 @@ opened = TRUE /obj/item/inducer/Initialize(mapload) - . = ..() - var/datum/object_system/cell_slot/cell_slot = init_cell_slot(cell_type, cell_accept) - cell_slot.receive_emp = TRUE - cell_slot.receive_inducer = TRUE - cell_slot.remove_yank_offhand = TRUE - cell_slot.remove_yank_context = TRUE + var/datum/object_system/cell_slot/cell_slot = init_cell_slot_easy_tool(cell_type, cell_accept) cell_slot.remove_yank_inhand = TRUE + . = ..() update_appearance() /obj/item/inducer/examine(mob/user, dist) @@ -148,15 +144,15 @@ inducing = FALSE user.visible_message(SPAN_NOTICE("[user] recharged [A]."), SPAN_NOTICE("Recharged [A] with [used] units of power.")) -/obj/item/inducer/object_cell_slot_removed(obj/item/cell/cell, datum/object_system/cell_slot/slot) +/obj/item/inducer/object_cell_slot_removed(obj/item/cell/cell, datum/object_system/cell_slot/slot, silent, datum/event_args/actor/actor) . = ..() update_icon() -/obj/item/inducer/object_cell_slot_inserted(obj/item/cell/cell, datum/object_system/cell_slot/slot) +/obj/item/inducer/object_cell_slot_inserted(obj/item/cell/cell, datum/object_system/cell_slot/slot, silent, datum/event_args/actor/actor) . = ..() update_icon() -/obj/item/inducer/object_cell_slot_mutable(mob/user, datum/object_system/cell_slot/slot) +/obj/item/inducer/object_cell_slot_mutable(mob/user, datum/object_system/cell_slot/slot, silent, datum/event_args/actor/actor) return opened && ..() /obj/item/inducer/update_icon() diff --git a/code/modules/power/cells/types/microfission.dm b/code/modules/power/cells/types/microfission.dm index 1fac988d387..245f611eb26 100644 --- a/code/modules/power/cells/types/microfission.dm +++ b/code/modules/power/cells/types/microfission.dm @@ -82,7 +82,7 @@ GENERATE_DESIGN_FOR_NT_PROTOLATHE(/obj/item/cell/microfission/weapon, /power_cel // TODO: automated way to update when prototypes change? if(cell_datum) c_regen_left = c_regen_initial = (isnull(regen_as_static) ? (regen_as_multiplier * max_charge) : regen_as_static) \ - * cell_datum.c_fuel_adjust + cell_datum.c_fuel_multiplier + * cell_datum.c_fuel_multiplier + cell_datum.c_fuel_adjust c_regen_min_per_second = max(0, regen_min_per_second * cell_datum.c_reaction_multiplier + cell_datum.c_reaction_adjust) c_regen_max_per_second = max(0, regen_max_per_second * cell_datum.c_reaction_multiplier + cell_datum.c_reaction_adjust) else @@ -111,8 +111,11 @@ GENERATE_DESIGN_FOR_NT_PROTOLATHE(/obj/item/cell/microfission/weapon, /power_cel /obj/item/cell/microfission/process(delta_time) ..() + if(c_regen_left <= 0) + return PROCESS_KILL var/reaction_ratio = 0 - if(charge >= max_charge) + var/missing_charge = max(0, max_charge - charge) + if(!missing_charge) // don't charge if(!leaking) return PROCESS_KILL @@ -130,8 +133,12 @@ GENERATE_DESIGN_FOR_NT_PROTOLATHE(/obj/item/cell/microfission/weapon, /power_cel var/effective_charge_units = LERP(c_regen_min_per_second, c_regen_max_per_second, reaction_ratio) if(effective_charge_units) + if(effective_charge_units > missing_charge) + // this basically means you don't lose charge BUT you're still reacting full strength so enjoy your radiation if you're leaking lol + effective_charge_units = missing_charge // just to be nice, allow overcharging. - give(effective_charge_units, TRUE) + give(effective_charge_units) + c_regen_left -= effective_charge_units else if(!leaking) return PROCESS_KILL if(leaking)