mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-29 02:21:44 +00:00
## About The Pull Request This makes it so leeching walk and ascended rust heretic healing effects (the healing that occurs during life ticks) have the healing amount multiplied by `DELTA_WORLD_TIME(SSmobs)`, to compensate for skipped/delayed fires. ## Why It's Good For The Game Delays in SSmobs firing (i.e explosions pausing all non-ticker subsystems) can very easily get you killed if you're relying on the rust heretic healing mid-combat. ## Changelog 🆑 qol: Rust heretic healing (leeching walk, rust ascension) now, so server lag shouldn't fuck you over nearly as much if you're relying on the healing. /🆑
60 lines
2.2 KiB
Plaintext
60 lines
2.2 KiB
Plaintext
/// Buffs and heals the target while standing on rust.
|
|
/datum/element/leeching_walk
|
|
|
|
/datum/element/leeching_walk/Attach(datum/target)
|
|
. = ..()
|
|
if (!isliving(target))
|
|
return ELEMENT_INCOMPATIBLE
|
|
|
|
RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
|
|
RegisterSignal(target, COMSIG_LIVING_LIFE, PROC_REF(on_life))
|
|
|
|
/datum/element/leeching_walk/Detach(datum/source)
|
|
. = ..()
|
|
UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_LIFE))
|
|
|
|
/*
|
|
* Signal proc for [COMSIG_MOVABLE_MOVED].
|
|
*
|
|
* Checks if we should have baton resistance on the new turf.
|
|
*/
|
|
/datum/element/leeching_walk/proc/on_move(mob/source, atom/old_loc, dir, forced, list/old_locs)
|
|
SIGNAL_HANDLER
|
|
|
|
var/turf/mover_turf = get_turf(source)
|
|
if(HAS_TRAIT(mover_turf, TRAIT_RUSTY))
|
|
ADD_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
|
|
else
|
|
REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
|
|
|
|
/**
|
|
* Signal proc for [COMSIG_LIVING_LIFE].
|
|
*
|
|
* Gradually heals the heretic ([source]) on rust,
|
|
* including baton knockdown and stamina damage.
|
|
*/
|
|
/datum/element/leeching_walk/proc/on_life(mob/living/source, seconds_per_tick, times_fired)
|
|
SIGNAL_HANDLER
|
|
|
|
var/turf/our_turf = get_turf(source)
|
|
if(!HAS_TRAIT(our_turf, TRAIT_RUSTY))
|
|
return
|
|
|
|
// Heals all damage + Stamina
|
|
var/need_mob_update = FALSE
|
|
var/delta_time = DELTA_WORLD_TIME(SSmobs) * 0.5 // SSmobs.wait is 2 secs, so this should be halved.
|
|
need_mob_update += source.adjustBruteLoss(-3 * delta_time, updating_health = FALSE)
|
|
need_mob_update += source.adjustFireLoss(-3 * delta_time, updating_health = FALSE)
|
|
need_mob_update += source.adjustToxLoss(-3 * delta_time, updating_health = FALSE, forced = TRUE) // Slimes are people too
|
|
need_mob_update += source.adjustOxyLoss(-1.5 * delta_time, updating_health = FALSE)
|
|
need_mob_update += source.adjustStaminaLoss(-10 * delta_time, updating_stamina = FALSE)
|
|
if(need_mob_update)
|
|
source.updatehealth()
|
|
// Reduces duration of stuns/etc
|
|
source.AdjustAllImmobility((-0.5 SECONDS) * delta_time)
|
|
// Heals blood loss
|
|
if(source.blood_volume < BLOOD_VOLUME_NORMAL)
|
|
source.blood_volume += 2.5 * delta_time
|
|
// Slowly regulates your body temp
|
|
source.adjust_bodytemperature((source.get_body_temp_normal() - source.bodytemperature) / 5)
|