[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

🆑 Melbert
fix: North Star's shields now regenerate integrity over time
/🆑

* Makes North Star's regenerating shields work (kinda my bad)

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
This commit is contained in:
SkyratBot
2023-05-01 22:15:43 +01:00
committed by GitHub
parent 97ed91be26
commit 0ee84fbf30
+24 -7
View File
@@ -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"