diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index 2f1417fe1e8..d390b0c7994 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -36,6 +36,7 @@
#define STATUS_EFFECT_GOOD_MUSIC /datum/status_effect/good_music
+#define STATUS_EFFECT_REGENERATIVE_CORE /datum/status_effect/regenerative_core
#define STATUS_EFFECT_CREEP /datum/status_effect/creep //you feel fuckin great around your obsession
/////////////
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index cdcae49ce80..30aaff31176 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -12,6 +12,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"
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index f617ade5c72..c43bb8eba6a 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -114,7 +114,7 @@
mood_change = -4
/datum/mood_event/healsbadman
- description = "I feel a lot better, but wow that was disgusting.\n" //when you read the latest felinid removal PR and realize you're really not that much of a degenerate
+ description = "I feel like I'm held together by flimsy string, and could fall apart at any moment!\n"
mood_change = -4
timeout = 1200
@@ -180,4 +180,4 @@
/datum/mood_event/surgery
description = "HE'S CUTTING ME OPEN!!\n"
- mood_change = -8
\ No newline at end of file
+ mood_change = -8
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 8d60f062ca4..c10e65e95eb 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -554,3 +554,26 @@
owner.jitteriness = max(0, owner.jitteriness - 2)
owner.confused = max(0, owner.confused - 1)
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "goodmusic", /datum/mood_event/goodmusic)
+
+/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()
+ owner.add_trait(TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core")
+ owner.adjustBruteLoss(-25)
+ owner.adjustFireLoss(-25)
+ owner.remove_CC()
+ owner.bodytemperature = BODYTEMP_NORMAL
+ return TRUE
+
+/datum/status_effect/regenerative_core/on_remove()
+ owner.remove_trait(TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core")
diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index 30702075397..985b9921feb 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -78,12 +78,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"))
- H.revive(full_heal = 1)
+ H.apply_status_effect(STATUS_EFFECT_REGENERATIVE_CORE)
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "core", /datum/mood_event/healsbadman) //Now THIS is a miner buff (fixed - nerf)
qdel(src)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index e128d9fcfb4..2a27595f55f 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1095,12 +1095,13 @@ GLOBAL_LIST_EMPTY(roundstart_races)
for(var/obj/item/I in H.held_items)
if(I.item_flags & SLOWS_WHILE_IN_HAND)
. += I.slowdown
- var/health_deficiency = (100 - H.health + H.staminaloss)
- if(health_deficiency >= 40)
- if(flight)
- . += (health_deficiency / 75)
- else
- . += (health_deficiency / 25)
+ if(!H.has_trait(TRAIT_IGNOREDAMAGESLOWDOWN))
+ var/health_deficiency = (H.maxHealth - H.health + H.staminaloss)
+ if(health_deficiency >= 40)
+ if(flight)
+ . += (health_deficiency / 75)
+ else
+ . += (health_deficiency / 25)
if(CONFIG_GET(flag/disable_human_mood))
if(!H.has_trait(TRAIT_NOHUNGER))
var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index f990ee35e27..2cf8e07f4fb 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -71,9 +71,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(TRAIT_IGNOREDAMAGESLOWDOWN))
+ var/health_deficiency = (maxHealth - health)
+ if(health_deficiency >= 45)
+ slow += (health_deficiency / 25)
add_movespeed_modifier(MOVESPEED_ID_MONKEY_HEALTH_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = 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 f83d5200647..c56ea07ca31 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -504,6 +504,17 @@
var/obj/effect/proc_holder/spell/spell = S
spell.updateButtonIcon()
+/mob/living/proc/remove_CC(should_update_mobility = TRUE)
+ SetStun(0, FALSE)
+ SetKnockdown(0, FALSE)
+ SetImmobilized(0, FALSE)
+ SetParalyzed(0, FALSE)
+ SetSleeping(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)
restore_blood()
@@ -511,14 +522,8 @@
setOxyLoss(0, 0)
setCloneLoss(0, 0)
setBrainLoss(0)
- setStaminaLoss(0, 0)
- SetUnconscious(0, FALSE)
+ remove_CC(FALSE)
set_disgust(0)
- SetStun(0, FALSE)
- SetKnockdown(0, FALSE)
- SetImmobilized(0, FALSE)
- SetParalyzed(0, FALSE)
- SetSleeping(0, FALSE)
radiation = 0
set_nutrition(NUTRITION_LEVEL_FED + 50)
bodytemperature = BODYTEMP_NORMAL
@@ -533,10 +538,10 @@
ExtinguishMob()
fire_stacks = 0
confused = 0
- update_mobility()
GET_COMPONENT(mood, /datum/component/mood)
if (mood)
mood.remove_temp_moods(admin_revive)
+ update_mobility()
//proc called by revive(), to check if we can actually ressuscitate the mob (we don't want to revive him and have him instantly die again)
/mob/living/proc/can_be_revived()
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index ac25431ae2e..33341fa4682 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -149,14 +149,14 @@
/mob/living/simple_animal/slime/updatehealth()
. = ..()
- remove_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, FALSE)
- var/health_deficiency = (100 - health)
var/mod = 0
- if(health_deficiency >= 45)
- mod += (health_deficiency / 25)
- if(health <= 0)
- mod += 2
- add_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, TRUE, 100, multiplicative_slowdown = mod)
+ if(!has_trait(TRAIT_IGNOREDAMAGESLOWDOWN))
+ var/health_deficiency = (maxHealth - health)
+ if(health_deficiency >= 45)
+ mod += (health_deficiency / 25)
+ if(health <= 0)
+ mod += 2
+ add_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, TRUE, 100, multiplicative_slowdown = mod, override = TRUE)
/mob/living/simple_animal/slime/adjust_bodytemperature()
. = ..()
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
index 70f3884fcff..da2aaa4d3e2 100644
Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ