diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 2e1524ebac..b481ba7ddd 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -28,6 +28,8 @@ #define STATUS_EFFECT_BLOODDRUNK /datum/status_effect/blooddrunk //Stun immunity and greatly reduced damage taken +#define STATUS_EFFECT_FLESHMEND /datum/status_effect/fleshmend //Very fast healing; suppressed by fire, and heals less fire damage + ///////////// // DEBUFFS // ///////////// diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index ec4b81acbe..9179b9bea4 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -412,3 +412,27 @@ /datum/status_effect/sword_spin/on_remove() owner.visible_message("[owner]'s inhuman strength dissipates and the sword's runes grow cold!") + + +//Used by changelings to rapidly heal +//Heals 10 brute and oxygen damage every second, and 5 fire +//Being on fire will suppress this healing +/datum/status_effect/fleshmend + id = "fleshmend" + duration = 100 + alert_type = /obj/screen/alert/status_effect/fleshmend + +/datum/status_effect/fleshmend/tick() + if(owner.on_fire) + linked_alert.icon_state = "fleshmend_fire" + return + else + linked_alert.icon_state = "fleshmend" + owner.adjustBruteLoss(-10, FALSE) + owner.adjustFireLoss(-5, FALSE) + owner.adjustOxyLoss(-10) + +/obj/screen/alert/status_effect/fleshmend + name = "Fleshmend" + desc = "Our wounds are rapidly healing. This effect is prevented if we are on fire." + icon_state = "fleshmend" diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index dd9d4a8634..df6a787d60 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -1,52 +1,19 @@ -/obj/effect/proc_holder/changeling/fleshmend - name = "Fleshmend" - desc = "Our flesh rapidly regenerates, healing our burns, bruises and shortness of breath. Effectiveness decreases with quick, repeated use." - helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious. Does not regrow limbs or restore lost blood." - chemical_cost = 20 - dna_cost = 2 - req_stat = UNCONSCIOUS - var/recent_uses = 1 //The factor of which the healing should be divided by - var/healing_ticks = 10 - // The ideal total healing amount, - // divided by healing_ticks to get heal/tick - var/total_healing = 100 - -/obj/effect/proc_holder/changeling/fleshmend/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/effect/proc_holder/changeling/fleshmend/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/effect/proc_holder/changeling/fleshmend/process() - if(recent_uses > 1) - recent_uses = max(1, recent_uses - (1 / healing_ticks)) - -//Starts healing you every second for 10 seconds. -//Can be used whilst unconscious. -/obj/effect/proc_holder/changeling/fleshmend/sting_action(mob/living/user) - to_chat(user, "We begin to heal rapidly.") - if(recent_uses > 1) - to_chat(user, "Our healing's effectiveness is reduced \ - by quick repeated use!") - - recent_uses++ - INVOKE_ASYNC(src, .proc/fleshmend, user) - return TRUE - -/obj/effect/proc_holder/changeling/fleshmend/proc/fleshmend(mob/living/user) - - // The healing itself - doesn't heal toxin damage - // (that's anatomic panacea) and the effectiveness decreases with - // each use in a short timespan - for(var/i in 1 to healing_ticks) - if(user) - var/healpertick = -(total_healing / healing_ticks) - user.adjustBruteLoss(healpertick / recent_uses, 0) - user.adjustOxyLoss(healpertick / recent_uses, 0) - user.adjustFireLoss(healpertick / recent_uses, 0) - user.updatehealth() - else - break - sleep(10) +/obj/effect/proc_holder/changeling/fleshmend + name = "Fleshmend" + desc = "Our flesh rapidly regenerates, healing our burns, bruises, and shortness of breath. Functions while unconscious." + helptext = "If we are on fire, the healing effect will not function. Does not regrow limbs or restore lost blood." + chemical_cost = 20 + dna_cost = 2 + req_stat = UNCONSCIOUS + +//Starts healing you every second for 10 seconds. +//Can be used whilst unconscious. +/obj/effect/proc_holder/changeling/fleshmend/sting_action(mob/living/user) + if(user.has_status_effect(STATUS_EFFECT_FLESHMEND)) + to_chat(user, "We are already fleshmending!") + return + to_chat(user, "We begin to heal rapidly.") + user.apply_status_effect(STATUS_EFFECT_FLESHMEND) + return TRUE + +//Check buffs.dm for the fleshmend status effect code diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index e6d40977a7..01fcdcddad 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ