From 0ee84fbf301b5b6bb3e2a5069b1537fc8bcde83e Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 1 May 2023 22:15:43 +0100 Subject: [PATCH] [MIRROR] Makes North Star's regenerating shields work (kinda my bad) [MDB IGNORE] (#20863) * Makes North Star's regenerating shields work (kinda my bad) (#75048) ## About The Pull Request I helped Chesh with the code behind these, but they kinda don't work, so it's partially my bad. They never started processing, so the code was dead. Changed it to start processing on taking damage and stop processing when it reaches max integrity. Also made some proper use of `/datum/element/empprotection` for the shield and cult shields while I was there. ## Why It's Good For The Game Makes it work ## Changelog :cl: Melbert fix: North Star's shields now regenerate integrity over time /:cl: * Makes North Star's regenerating shields work (kinda my bad) --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/game/machinery/shieldgen.dm | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 09f4e5a0835..e7cfc8a9a81 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -47,17 +47,33 @@ if(.) //damage was dealt new /obj/effect/temp_visual/impact_effect/ion(loc) +/// Subtype of shields that repair over time after sustaining integrity damage /obj/structure/emergency_shield/regenerating name = "energy shield" desc = "An energy shield used to let ships through, but keep out the void of space." max_integrity = 400 + /// How much integrity is healed per second (per process multiplied by seconds per tick) + var/heal_rate_per_second = 5 -/obj/structure/emergency_shield/regenerating/emp_act(severity) - return +/obj/structure/emergency_shield/regenerating/Initialize(mapload) + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_SELF) -/obj/structure/emergency_shield/regenerating/process(delta_time) - if(get_integrity() < max_integrity) - repair_damage(5 * delta_time) +/obj/structure/emergency_shield/regenerating/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/emergency_shield/regenerating/take_damage(damage, damage_type, damage_flag, sound_effect, attack_dir) + . = ..() + if(.) + // We took some damage so we'll start processing to heal said damage. + START_PROCESSING(SSobj, src) + +/obj/structure/emergency_shield/regenerating/process(seconds_per_tick) + var/repaired_amount = repair_damage(heal_rate_per_second * seconds_per_tick) + if(repaired_amount <= 0) + // 0 damage repaired means we're at the max integrity, so don't need to process anymore + STOP_PROCESSING(SSobj, src) /obj/structure/emergency_shield/cult name = "cult barrier" @@ -65,8 +81,9 @@ max_integrity = 100 icon_state = "shield-red" -/obj/structure/emergency_shield/cult/emp_act(severity) - return +/obj/structure/emergency_shield/cult/Initialize(mapload) + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_SELF) /obj/structure/emergency_shield/cult/narsie name = "sanguine barrier"