diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index fad9ddcda5..e2ace84156 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -40,6 +40,9 @@ #define STATUS_EFFECT_DETERMINED /datum/status_effect/determined //currently in a combat high from being seriously wounded +#define STATUS_EFFECT_MANTRA /datum/status_effect/mantra // a toggled self buff that makes you stronger and more resilient, but drains stamina over time +#define STATUS_EFFECT_ASURA /datum/status_effect/asura // like a weaker version of mantra, drains HP instead of stamina and has no armor + ///////////// // DEBUFFS // ///////////// diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index f4a53d5c72..904e122241 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -647,3 +647,120 @@ if(D.severity == DISEASE_SEVERITY_POSITIVE) continue D.cure() + +/datum/status_effect/mantra // available to wizards and admins alone, currently + id = "Mantra" + examine_text = "Their aura is filled with yellow energy!" + alert_type = null + var/damageboost = 10 + var/woundboost = 5 + var/prev_hair_color + var/powerup + var/powerdown + +/datum/status_effect/mantra/on_apply() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/human/H = owner + playsound(H, 'sound/magic/powerup.ogg', 50, 1) + H.add_filter("mantra_glow", 2, list("type" = "outline", "color" = "#edfa347a", "size" = 2)) + prev_hair_color = H.hair_color + H.hair_color = "ffe11e" + H.update_hair() + ADD_TRAIT(H, TRAIT_PUGILIST, "Mantra") + ADD_TRAIT(H, TRAIT_NOSOFTCRIT, "Mantra") + ADD_TRAIT(H, TRAIT_STUNIMMUNE, "Mantra") + ADD_TRAIT(H, TRAIT_PUSHIMMUNE, "Mantra") + ADD_TRAIT(H, TRAIT_NOGUNS, "Mantra") + H.dna.species.punchdamagehigh += damageboost + H.dna.species.punchdamagelow += damageboost + H.dna.species.punchwoundbonus += woundboost + H.physiology.brute_mod *= 0.9 // slightly resilient against lethal damage, but... + H.physiology.burn_mod *= 0.9 + H.physiology.stamina_mod *= 0.5 // very resistant to non-lethal damage, because they're already draining stamina every second + to_chat(H, "Your inner mantra coalesces around you, granting you incredible strength and durability - but at what cost?") + +/datum/status_effect/mantra/tick() + . = ..() + if(owner.health < HEALTH_THRESHOLD_FULLCRIT) + owner.remove_status_effect(STATUS_EFFECT_MANTRA) + return + if(owner.combat_flags & COMBAT_FLAG_HARD_STAMCRIT) + owner.remove_status_effect(STATUS_EFFECT_MANTRA) + return + if(iscarbon(owner)) + var/mob/living/carbon/human/C = owner + C.adjustBruteLoss(-1) // slightly resilient against lethal damage + C.adjustFireLoss(-1) + C.adjustStaminaLoss(3) // in testing i personally found that 2/sec was too minimal and 4/sec was too much + /*if(SEND_SIGNAL(owner, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) // turning on combat mode flares up your aura + + else*/ + +/datum/status_effect/mantra/on_remove() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/human/M = owner + playsound(M, 'sound/magic/powerdown.ogg', 50, 1) + M.remove_filter("mantra_glow") + M.hair_color = prev_hair_color + M.update_hair() + REMOVE_TRAIT(M, TRAIT_PUGILIST, "Mantra") + REMOVE_TRAIT(M, TRAIT_NOSOFTCRIT, "Mantra") + REMOVE_TRAIT(M, TRAIT_STUNIMMUNE, "Mantra") + REMOVE_TRAIT(M, TRAIT_PUSHIMMUNE, "Mantra") + REMOVE_TRAIT(M, TRAIT_NOGUNS, "Mantra") + M.dna.species.punchdamagehigh -= damageboost + M.dna.species.punchdamagelow -= damageboost + M.dna.species.punchwoundbonus -= woundboost + M.physiology.brute_mod /= 0.9 + M.physiology.burn_mod /= 0.9 + M.physiology.stamina_mod /= 0.5 + to_chat(M, "Your inner mantra collapses, for now.") + +/datum/status_effect/asura // mfw miner gear + id = "Asura" + examine_text = "Their aura is filled with red-hot rage!" + alert_type = null + var/damageboost = 10 + var/woundboost = 5 + +/datum/status_effect/asura/on_apply() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/human/H = owner + playsound(H, 'sound/magic/powerup.ogg', 50, 1) + H.add_filter("asura_glow", 2, list("type" = "outline", "color" = "#fc21217a", "size" = 2)) + ADD_TRAIT(H, TRAIT_PUGILIST, "Asura") + H.dna.species.punchdamagehigh += damageboost + H.dna.species.punchdamagelow += damageboost + H.dna.species.punchwoundbonus += woundboost + to_chat(H, "Your anger unleashes in a crimson blaze around you and corrosive power fills your muscles.") + +/datum/status_effect/asura/tick() + . = ..() + if(owner.health < HEALTH_THRESHOLD_CRIT) + owner.remove_status_effect(STATUS_EFFECT_ASURA) + return + if(owner.combat_flags & COMBAT_FLAG_HARD_STAMCRIT) + owner.remove_status_effect(STATUS_EFFECT_ASURA) + return + if(iscarbon(owner)) + var/mob/living/carbon/human/C = owner + C.adjustBruteLoss(1) // drains 1 hp per second. You're gonna need some Senzu Cores. + C.adjustStaminaLoss(-2) // angry man punch a lot + /*if(SEND_SIGNAL(owner, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) // turning on combat mode flares up your aura + + else*/ + +/datum/status_effect/asura/on_remove() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/human/M = owner + playsound(M, 'sound/magic/powerdown.ogg', 50, 1) + M.remove_filter("asura_glow") + REMOVE_TRAIT(M, TRAIT_PUGILIST, "Asura") + M.dna.species.punchdamagehigh -= damageboost + M.dna.species.punchdamagelow -= damageboost + M.dna.species.punchwoundbonus -= woundboost + to_chat(M, "You calm yourself, and your unnatural strength dissipates.") diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index edfa9caa22..bcba1e1e1e 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -38,7 +38,7 @@ dat += "Robeless
" dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" dat += "Martial Artist
" - dat += "Your apprentice is training in ancient martial arts. They know the Plasmafist and Nuclear Fist.
" + dat += "Your apprentice is training in ancient martial arts. They know an Inner Mantra and the Nuclear Fist technique.
" user << browse(dat, "window=radio") onclose(user, "radio") return diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 1e98b2f753..9b2def48d7 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -189,6 +189,10 @@ name = "Mutate" spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate +/datum/spellbook_entry/mantra + name = "Inner Mantra" + spell_type = /obj/effect/proc_holder/spell/self/mantra + /datum/spellbook_entry/jaunt name = "Ethereal Jaunt" spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 42954c3542..23e870a0ec 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -181,8 +181,8 @@ to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") if(APPRENTICE_MARTIAL) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist(null)) - H.put_in_hands(new /obj/item/book/granter/martial/plasma_fist(H)) - to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned mystical martial abilities. You are also able to use the Nuclear Fist at will.") + owner.AddSpell(new /obj/effect/proc_holder/spell/self/mantra(null)) + to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned to control your Inner Mantra. You are also able to use the Nuclear Fist at will.") /datum/antagonist/wizard/apprentice/create_objectives() var/datum/objective/protect/new_objective = new /datum/objective/protect diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 0953ea138d..9c39601b4e 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1104,7 +1104,7 @@ if(1) new /obj/item/mayhem(src) if(2) - new /obj/item/gun/ballistic/revolver/doublebarrel/super(src) + new /obj/item/book/granter/spell/asura(src) if(3) new /obj/item/guardiancreator(src) @@ -1187,6 +1187,13 @@ unique_reskin = null sawn_off = TRUE +/obj/item/book/granter/spell/asura + spell = /obj/effect/proc_holder/spell/self/asura + spellname = "asuras wrath" + icon_state = "bookasura" + desc = "This crimson novel emanates rage incarnate." + remarks = list("Kaio-What?", "It can only be sustained for a short time...", "It's like a massive upsurge of energy...", "Takes a heavy toll on the user's body...?", "Extra arms not included...", "There's stronger levels? Why aren't they in the book...") + //Colossus /obj/structure/closet/crate/necropolis/colossus name = "colossus chest" diff --git a/icons/obj/magic.dmi b/icons/obj/magic.dmi index c376dc7321..6555373ae1 100644 Binary files a/icons/obj/magic.dmi and b/icons/obj/magic.dmi differ diff --git a/sound/magic/powerdown.ogg b/sound/magic/powerdown.ogg new file mode 100644 index 0000000000..9d514c64ca Binary files /dev/null and b/sound/magic/powerdown.ogg differ diff --git a/sound/magic/powerup.ogg b/sound/magic/powerup.ogg new file mode 100644 index 0000000000..909c2a33c7 Binary files /dev/null and b/sound/magic/powerup.ogg differ