//Largely beneficial effects go here, even if they have drawbacks. An example is provided in Shadow Mend. /datum/status_effect/shadow_mend id = "shadow_mend" duration = 30 alert_type = /obj/screen/alert/status_effect/shadow_mend /obj/screen/alert/status_effect/shadow_mend name = "Shadow Mend" desc = "Shadowy energies wrap around your wounds, sealing them at a price. After healing, you will slowly lose health every three seconds for thirty seconds." icon_state = "shadow_mend" /datum/status_effect/shadow_mend/on_apply() owner.visible_message("Violet light wraps around [owner]'s body!", "Violet light wraps around your body!") playsound(owner, 'sound/magic/teleport_app.ogg', 50, 1) return ..() /datum/status_effect/shadow_mend/tick() owner.adjustBruteLoss(-15) owner.adjustFireLoss(-15) /datum/status_effect/shadow_mend/on_remove() owner.visible_message("The violet light around [owner] glows black!", "The tendrils around you cinch tightly and reap their toll...") playsound(owner, 'sound/magic/teleport_diss.ogg', 50, 1) owner.apply_status_effect(STATUS_EFFECT_VOID_PRICE) /datum/status_effect/void_price id = "void_price" duration = 300 tick_interval = 30 alert_type = /obj/screen/alert/status_effect/void_price /obj/screen/alert/status_effect/void_price name = "Void Price" desc = "Black tendrils cinch tightly against you, digging wicked barbs into your flesh." icon_state = "shadow_mend" /datum/status_effect/void_price/tick() playsound(owner, 'sound/weapons/bite.ogg', 50, 1) owner.adjustBruteLoss(3) /datum/status_effect/blooddrunk id = "blooddrunk" duration = 10 tick_interval = 0 alert_type = /obj/screen/alert/status_effect/blooddrunk /obj/screen/alert/status_effect/blooddrunk name = "Blood-Drunk" desc = "You are drunk on blood! Your pulse thunders in your ears! Nothing can harm you!" //not true, and the item description mentions its actual effect icon_state = "blooddrunk" /datum/status_effect/blooddrunk/on_apply() . = ..() if(.) if(ishuman(owner)) owner.status_flags |= IGNORESLOWDOWN var/mob/living/carbon/human/H = owner for(var/X in H.bodyparts) var/obj/item/organ/external/BP = X BP.brute_mod *= 0.1 BP.burn_mod *= 0.1 H.dna.species.tox_mod *= 0.1 H.dna.species.oxy_mod *= 0.1 H.dna.species.clone_mod *= 0.1 H.dna.species.stamina_mod *= 0.1 add_attack_logs(owner, owner, "gained blood-drunk stun immunity", ATKLOG_ALL) owner.add_stun_absorption("blooddrunk", INFINITY, 4) owner.playsound_local(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1) /datum/status_effect/blooddrunk/on_remove() if(ishuman(owner)) var/mob/living/carbon/human/H = owner for(var/X in H.bodyparts) var/obj/item/organ/external/BP = X BP.brute_mod *= 10 BP.burn_mod *= 10 H.dna.species.tox_mod *= 10 H.dna.species.oxy_mod *= 10 H.dna.species.clone_mod *= 10 H.dna.species.stamina_mod *= 10 add_attack_logs(owner, owner, "lost blood-drunk stun immunity", ATKLOG_ALL) owner.status_flags &= ~IGNORESLOWDOWN if(islist(owner.stun_absorption) && owner.stun_absorption["blooddrunk"]) owner.stun_absorption -= "blooddrunk" /datum/status_effect/exercised id = "Exercised" duration = 1200 alert_type = null /datum/status_effect/exercised/on_creation(mob/living/new_owner, ...) . = ..() STOP_PROCESSING(SSfastprocess, src) START_PROCESSING(SSprocessing, src) //this lasts 20 minutes, so SSfastprocess isn't needed. /datum/status_effect/exercised/Destroy() . = ..() STOP_PROCESSING(SSprocessing, src) //Hippocratic Oath: Applied when the Rod of Asclepius is activated. /datum/status_effect/hippocraticOath id = "Hippocratic Oath" status_type = STATUS_EFFECT_UNIQUE duration = -1 tick_interval = 25 examine_text = "They seem to have an aura of healing and helpfulness about them." alert_type = null var/hand var/deathTick = 0 /datum/status_effect/hippocraticOath/on_apply() //Makes the user passive, it's in their oath not to harm! ADD_TRAIT(owner, TRAIT_PACIFISM, "hippocraticOath") var/datum/atom_hud/H = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] H.add_hud_to(owner) return ..() /datum/status_effect/hippocraticOath/on_remove() REMOVE_TRAIT(owner, TRAIT_PACIFISM, "hippocraticOath") var/datum/atom_hud/H = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] H.remove_hud_from(owner) /datum/status_effect/hippocraticOath/tick() if(owner.stat == DEAD) if(deathTick < 4) deathTick += 1 else owner.visible_message("[owner]'s soul is absorbed into the rod, relieving the previous snake of its duty.") var/mob/living/simple_animal/hostile/retaliate/poison/snake/healSnake = new(owner.loc) var/list/chems = list("bicaridine", "perfluorodecalin", "kelotane") healSnake.poison_type = pick(chems) healSnake.name = "Asclepius's Snake" healSnake.real_name = "Asclepius's Snake" healSnake.desc = "A mystical snake previously trapped upon the Rod of Asclepius, now freed of its burden. Unlike the average snake, its bites contain chemicals with minor healing properties." new /obj/effect/decal/cleanable/ash(owner.loc) new /obj/item/rod_of_asclepius(owner.loc) qdel(owner) else if(ishuman(owner)) var/mob/living/carbon/human/itemUser = owner var/obj/item/heldItem = (hand == 1 ? itemUser.l_hand : itemUser.r_hand) if(!heldItem || !istype(heldItem, /obj/item/rod_of_asclepius)) //Checks to make sure the rod is still in their hand var/obj/item/rod_of_asclepius/newRod = new(itemUser.loc) newRod.activated() if(hand) itemUser.drop_l_hand() if(itemUser.put_in_l_hand(newRod)) to_chat(itemUser, "The Rod of Asclepius suddenly grows back out of your arm!") else if(!itemUser.has_organ("l_arm")) new /obj/item/organ/external/arm(itemUser) new /obj/item/organ/external/hand(itemUser) itemUser.update_body() itemUser.put_in_l_hand(newRod) to_chat(itemUser, "Your arm suddenly grows back with the Rod of Asclepius still attached!") else itemUser.drop_r_hand() if(itemUser.put_in_r_hand(newRod)) to_chat(itemUser, "The Rod of Asclepius suddenly grows back out of your arm!") else if(!itemUser.has_organ("r_arm")) new /obj/item/organ/external/arm/right(itemUser) new /obj/item/organ/external/hand/right(itemUser) itemUser.update_body() itemUser.put_in_r_hand(newRod) to_chat(itemUser, "Your arm suddenly grows back with the Rod of Asclepius still attached!") //Because a servant of medicines stops at nothing to help others, lets keep them on their toes and give them an additional boost. if(itemUser.health < itemUser.maxHealth) new /obj/effect/temp_visual/heal(get_turf(itemUser), "#375637") itemUser.adjustBruteLoss(-1.5) itemUser.adjustFireLoss(-1.5) itemUser.adjustToxLoss(-1.5) itemUser.adjustOxyLoss(-1.5) itemUser.adjustStaminaLoss(-1.5) itemUser.adjustBrainLoss(-1.5) itemUser.adjustCloneLoss(-0.5) //Becasue apparently clone damage is the bastion of all health //Heal all those around you, unbiased for(var/mob/living/L in view(7, owner)) if(L.health < L.maxHealth) new /obj/effect/temp_visual/heal(get_turf(L), "#375637") if(iscarbon(L)) L.adjustBruteLoss(-3.5) L.adjustFireLoss(-3.5) L.adjustToxLoss(-3.5) L.adjustOxyLoss(-3.5) L.adjustStaminaLoss(-3.5) L.adjustBrainLoss(-3.5) L.adjustCloneLoss(-1) //Becasue apparently clone damage is the bastion of all health if(ishuman(L)) var/mob/living/carbon/human/H = L for(var/obj/item/organ/external/E in H.bodyparts) if(prob(10)) E.mend_fracture() E.internal_bleeding = FALSE else if(issilicon(L)) L.adjustBruteLoss(-3.5) L.adjustFireLoss(-3.5) else if(isanimal(L)) var/mob/living/simple_animal/SM = L SM.adjustHealth(-3.5) /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.status_flags |= IGNORESLOWDOWN owner.adjustBruteLoss(-25) owner.adjustFireLoss(-25) owner.remove_CC() owner.bodytemperature = BODYTEMP_NORMAL if(ishuman(owner)) var/mob/living/carbon/human/H = owner for(var/thing in H.bodyparts) var/obj/item/organ/external/E = thing E.internal_bleeding = FALSE E.mend_fracture() return TRUE /datum/status_effect/regenerative_core/on_remove() owner.status_flags &= ~IGNORESLOWDOWN