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