diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 9a9133c196..8ae850cc80 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -34,6 +34,8 @@ #define STATUS_EFFECT_HIPPOCRATIC_OATH /datum/status_effect/hippocraticOath //Gives you an aura of healing as well as regrowing the Rod of Asclepius if lost +#define STATUS_EFFECT_REGENERATIVE_CORE /datum/status_effect/regenerative_core //removes damage slowdown while giving a slow regenerating effect + ///////////// // DEBUFFS // ///////////// diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 4d18e60b71..91a4a6f2c3 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -78,6 +78,7 @@ #define TRAIT_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE #define TRAIT_PACIFISM "pacifism" #define TRAIT_IGNORESLOWDOWN "ignoreslow" +#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown" #define TRAIT_DEATHCOMA "deathcoma" //Causes death-like unconsciousness #define TRAIT_FAKEDEATH "fakedeath" //Makes the owner appear as dead to most forms of medical examination #define TRAIT_DISFIGURED "disfigured" @@ -187,7 +188,7 @@ #define TRAIT_NO_INTERNALS "no-internals" #define TRAIT_NO_ALCOHOL "alcohol_intolerance" #define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing. -#define TRAIT_FAST_PUMP "fast_pump" +#define TRAIT_FAST_PUMP "fast_pump" // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 86afd2cc15..cf37355327 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -550,3 +550,27 @@ else if(isanimal(L)) var/mob/living/simple_animal/SM = L SM.adjustHealth(-3.5, forced = TRUE) + +/obj/screen/alert/status_effect/regenerative_core + name = "Reinforcing Tendrils" + desc = "You can move faster than your broken body could normally handle!" + icon_state = "regenerative_core" + name = "Regenerative Core Tendrils" + +/datum/status_effect/regenerative_core + id = "Regenerative Core" + duration = 1 MINUTES + status_type = STATUS_EFFECT_REPLACE + alert_type = /obj/screen/alert/status_effect/regenerative_core + +/datum/status_effect/regenerative_core/on_apply() + ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core") + owner.adjustBruteLoss(-25) + if(!AmBloodsucker(owner)) //use your coffin you lazy bastard + owner.adjustFireLoss(-25) + owner.remove_CC() + owner.bodytemperature = BODYTEMP_NORMAL + return TRUE + +/datum/status_effect/regenerative_core/on_remove() + REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core") \ No newline at end of file diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index 7380a9135d..439929b9c1 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -85,15 +85,12 @@ to_chat(user, "[src] are useless on the dead.") return if(H != user) - H.visible_message("[user] forces [H] to apply [src]... [H.p_they()] quickly regenerate all injuries!") + H.visible_message("[user] forces [H] to apply [src]... Black tendrils entangle and reinforce [H.p_them()]!") SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "other")) else - to_chat(user, "You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments.") + to_chat(user, "You start to smear [src] on yourself. Disgusting tendrils hold you together and allow you to keep moving, but for how long?") SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self")) - if(AmBloodsucker(H)) - H.revive(full_heal = FALSE) - else - H.revive(full_heal = TRUE) + H.apply_status_effect(STATUS_EFFECT_REGENERATIVE_CORE) qdel(src) user.log_message("[user] used [src] to heal [H == user ? "[H.p_them()]self" : H]! Wake the fuck up, Samurai!", LOG_ATTACK, color="green") //Logging for 'old' style legion core use, when clicking on a sprite of yourself or another. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 7f5f912ff6..5d097c0f54 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1049,15 +1049,16 @@ /mob/living/carbon/human/updatehealth() . = ..() - if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN)) + if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN)) //if we want to ignore slowdown from damage and equipment remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown) remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying) return var/stambufferinfluence = (bufferedstam*(100/stambuffer))*0.2 //CIT CHANGE - makes stamina buffer influence movedelay - var/health_deficiency = ((100 + stambufferinfluence) - health + (getStaminaLoss()*0.75))//CIT CHANGE - reduces the impact of staminaloss and makes stamina buffer influence it - if(health_deficiency >= 40) - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown, TRUE, (health_deficiency-39) / 75) - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying, TRUE, (health_deficiency-39) / 25) + if(!HAS_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN)) //if we want to ignore slowdown from damage, but not from equipment + var/health_deficiency = ((maxHealth + stambufferinfluence) - health + (getStaminaLoss()*0.75))//CIT CHANGE - reduces the impact of staminaloss and makes stamina buffer influence it + if(health_deficiency >= 40) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown, TRUE, (health_deficiency-39) / 75) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying, TRUE, (health_deficiency-39) / 25) else remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown) remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 6242fa56be..18c3fde188 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -74,9 +74,10 @@ /mob/living/carbon/monkey/updatehealth() . = ..() var/slow = 0 - var/health_deficiency = (100 - health) - if(health_deficiency >= 45) - slow += (health_deficiency / 25) + if(!HAS_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN)) + var/health_deficiency = (maxHealth - health) + if(health_deficiency >= 45) + slow += (health_deficiency / 25) add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_health_speedmod, TRUE, slow) /mob/living/carbon/monkey/adjust_bodytemperature(amount) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 89f8381087..0ec99ac14d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -502,8 +502,16 @@ var/obj/effect/proc_holder/spell/spell = S spell.updateButtonIcon() +//proc used to remove all immobilisation effects + reset stamina +/mob/living/proc/remove_CC(should_update_mobility = TRUE) + SetAllImmobility(0, FALSE) + setStaminaLoss(0) + SetUnconscious(0, FALSE) + if(should_update_mobility) + update_mobility() + //proc used to completely heal a mob. -/mob/living/proc/fully_heal(admin_revive = 0) +/mob/living/proc/fully_heal(admin_revive = FALSE) restore_blood() setToxLoss(0, 0) //zero as second argument not automatically call updatehealth(). setOxyLoss(0, 0) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index dd454c4243..78f7b17616 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -159,12 +159,13 @@ /mob/living/simple_animal/slime/updatehealth() . = ..() remove_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod) - var/health_deficiency = (100 - health) var/mod = 0 - if(health_deficiency >= 45) - mod += (health_deficiency / 25) - if(health <= 0) - mod += 2 + if(!HAS_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN)) + var/health_deficiency = (maxHealth - health) + if(health_deficiency >= 45) + mod += (health_deficiency / 25) + if(health <= 0) + mod += 2 add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod, multiplicative_slowdown = mod) /mob/living/simple_animal/slime/adjust_bodytemperature() diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index a65ac3f926..60fe2f9839 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ