From 1a1171935f69a46523ddc332bae87dcb3fca45a7 Mon Sep 17 00:00:00 2001 From: faustbyte <75549227+tired-wired@users.noreply.github.com> Date: Sat, 4 Apr 2026 17:38:49 -0300 Subject: [PATCH 1/7] Initial start --- code/datums/status_effects/neutral.dm | 4 ++ .../human/species_types/other/aasimar.dm | 2 + .../undirected/eternal_vigilance.dm | 48 +++++++++++++++++++ vanderlin.dme | 1 + 4 files changed, 55 insertions(+) create mode 100644 code/modules/spells/spell_types/undirected/eternal_vigilance.dm diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 927d4ed5500..847bad16e76 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -12,6 +12,10 @@ desc = "I am knocked off balance!" icon_state = "off_balanced" +/datum/status_effect/stasis + id = "aasimar_stasis" + examine_text = span_notice("SUBJECTPRONOUN is as still as a statue.") + //ENDROGUE /datum/status_effect/sigil_mark //allows the affected target to always trigger sigils while mindless diff --git a/code/modules/mob/living/carbon/human/species_types/other/aasimar.dm b/code/modules/mob/living/carbon/human/species_types/other/aasimar.dm index a1321f89f36..61bafff7fa9 100644 --- a/code/modules/mob/living/carbon/human/species_types/other/aasimar.dm +++ b/code/modules/mob/living/carbon/human/species_types/other/aasimar.dm @@ -126,11 +126,13 @@ . = ..() C.grant_language(/datum/language/celestial) to_chat(C, "I can speak Celestial with ,c before my speech.") + C.add_spell(/datum/action/cooldown/spell/undirected/eternal_vigilance) /datum/species/aasimar/on_species_loss(mob/living/carbon/C) . = ..() UnregisterSignal(C, COMSIG_MOB_SAY) C.remove_language(/datum/language/celestial) + C.remove_spell(/datum/action/cooldown/spell/undirected/eternal_vigilance) /datum/species/aasimar/qualifies_for_rank(rank, list/features) return TRUE diff --git a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm new file mode 100644 index 00000000000..fcd3cf538d6 --- /dev/null +++ b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm @@ -0,0 +1,48 @@ +/datum/action/cooldown/spell/undirected/eternal_vigilance + name = "Eternal Vigilance" + desc = "Enter a dreamless stasis. Close your eyes for a deeper trance." + has_visual_effects = FALSE + + //so we don't accidentally give them arcane exp... + associated_skill = /datum/attribute/skill/magic/holy + + //quick to get in and out. + charge_required = FALSE + cooldown_time = 3 SECONDS + spell_cost = 0 + + //tracking if we're already in stasis + var/stasis = FALSE + var/deep_stasis = FALSE + + +/datum/action/cooldown/spell/undirected/eternal_vigilance/cast(mob/living/carbon/human/cast_on) + . = ..() + if(stasis) + //we're ALREADY in stasis, time to wake up + REMOVE_TRAIT(cast_on, TRAIT_IMMOBILIZED, "species ability") + stasis = FALSE + cast_on.remove_status_effect(/datum/status_effect/stasis) + if(deep_stasis) + deep_stasis = FALSE + //wake up!! + else + //try to enter stasis + if(cast_on.eyesclosed) + var/list/equipped_items = cast_on.get_equipped_items() + for(var/obj/item/clothing/thing in equipped_items) + if(thing.clothing_flags & CANT_SLEEP_IN) + //we're too uncomfortable for deep stasis + to_chat(src, span_boldwarning("I can't enter stasis...the [thing] bothers me...")) + break + //we made it through the items check, fall asleep standing + ADD_TRAIT(cast_on, TRAIT_IMMOBILIZED, "species ability") + stasis = TRUE + deep_stasis = TRUE + cast_on.apply_status_effect(/datum/status_effect/stasis) + //TODO: make them eepy + else + //time for regular stasis + ADD_TRAIT(cast_on, TRAIT_IMMOBILIZED, "species ability") + cast_on.apply_status_effect(/datum/status_effect/stasis) + stasis = TRUE diff --git a/vanderlin.dme b/vanderlin.dme index 3ebaeeaffa4..aa624bc4378 100644 --- a/vanderlin.dme +++ b/vanderlin.dme @@ -3784,6 +3784,7 @@ #include "code\modules\spells\spell_types\undirected\create_cloud.dm" #include "code\modules\spells\spell_types\undirected\divine_strike.dm" #include "code\modules\spells\spell_types\undirected\embrace_death.dm" +#include "code\modules\spells\spell_types\undirected\eternal_vigilance.dm" #include "code\modules\spells\spell_types\undirected\fart.dm" #include "code\modules\spells\spell_types\undirected\feather_fall.dm" #include "code\modules\spells\spell_types\undirected\forcewall.dm" From 2d9da7db68f196b4528df672fa107db993e0c054 Mon Sep 17 00:00:00 2001 From: faustbyte <75549227+tired-wired@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:23:20 -0300 Subject: [PATCH 2/7] I THINK it works now. --- code/datums/status_effects/neutral.dm | 36 ++++++++++++++++++- .../undirected/eternal_vigilance.dm | 24 +++++-------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 847bad16e76..91a93c27bbb 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -12,10 +12,44 @@ desc = "I am knocked off balance!" icon_state = "off_balanced" -/datum/status_effect/stasis +/datum/status_effect/aasimar_stasis id = "aasimar_stasis" examine_text = span_notice("SUBJECTPRONOUN is as still as a statue.") +/datum/status_effect/aasimar_stasis/on_apply() + . = ..() + ADD_TRAIT(owner, TRAIT_IMMOBILIZED, "stasis") + to_chat(owner, span_notice("My stone settles into stillness.")) + +/datum/status_effect/aasimar_stasis/on_remove() + . = ..() + REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, "stasis") + to_chat(owner, span_notice("It's time to serve once more.")) + +/datum/status_effect/aasimar_stasis/deep + id = "aasimar_stasis_deep" + duration = 20 SECONDS + remove_on_fullheal = TRUE + +/datum/status_effect/aasimar_stasis/deep/on_apply() + . = ..() + to_chat(owner, span_notice("I let my 'self' sink deep.")) + ADD_TRAIT(owner, TRAIT_DEAF, "stasis") + owner.apply_status_effect(/datum/status_effect/grouped/blindness) + +/datum/status_effect/aasimar_stasis/deep/on_remove() + . = ..() + to_chat(owner, span_notice("I return to the surface.")) + REMOVE_TRAIT(owner, TRAIT_DEAF, "stasis") + owner.remove_status_effect(/datum/status_effect/grouped/blindness) + +/datum/status_effect/aasimar_stasis/deep/tick() + . = ..() + owner.adjust_energy((owner.max_energy * 0.02)) + if(!(owner.blood_volume == BLOOD_VOLUME_MAXIMUM)) + owner.blood_volume = min(owner.blood_volume + 2, BLOOD_VOLUME_NORMAL) + owner.heal_overall_damage(2, 2, BODYPART_ORGANIC, TRUE) + //ENDROGUE /datum/status_effect/sigil_mark //allows the affected target to always trigger sigils while mindless diff --git a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm index fcd3cf538d6..7bafb3a30dc 100644 --- a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm +++ b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm @@ -10,22 +10,18 @@ charge_required = FALSE cooldown_time = 3 SECONDS spell_cost = 0 + check_flags = NONE - //tracking if we're already in stasis + //tracking if we're already in basic stasis var/stasis = FALSE - var/deep_stasis = FALSE /datum/action/cooldown/spell/undirected/eternal_vigilance/cast(mob/living/carbon/human/cast_on) . = ..() if(stasis) - //we're ALREADY in stasis, time to wake up - REMOVE_TRAIT(cast_on, TRAIT_IMMOBILIZED, "species ability") + //we're ALREADY in basic stasis, time to wake up stasis = FALSE - cast_on.remove_status_effect(/datum/status_effect/stasis) - if(deep_stasis) - deep_stasis = FALSE - //wake up!! + cast_on.remove_status_effect(/datum/status_effect/aasimar_stasis) else //try to enter stasis if(cast_on.eyesclosed) @@ -35,14 +31,10 @@ //we're too uncomfortable for deep stasis to_chat(src, span_boldwarning("I can't enter stasis...the [thing] bothers me...")) break - //we made it through the items check, fall asleep standing - ADD_TRAIT(cast_on, TRAIT_IMMOBILIZED, "species ability") - stasis = TRUE - deep_stasis = TRUE - cast_on.apply_status_effect(/datum/status_effect/stasis) - //TODO: make them eepy + else + //we made it through the items check, go into deep stasis. Set duration. + cast_on.apply_status_effect(/datum/status_effect/aasimar_stasis/deep) else //time for regular stasis - ADD_TRAIT(cast_on, TRAIT_IMMOBILIZED, "species ability") - cast_on.apply_status_effect(/datum/status_effect/stasis) + cast_on.apply_status_effect(/datum/status_effect/aasimar_stasis) stasis = TRUE From 1eb5d0a6d41bd1912896a6c1919b470995516e82 Mon Sep 17 00:00:00 2001 From: faustbyte <75549227+tired-wired@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:28:35 -0300 Subject: [PATCH 3/7] Update eternal_vigilance.dm --- .../spells/spell_types/undirected/eternal_vigilance.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm index 7bafb3a30dc..b5c2af7733d 100644 --- a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm +++ b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm @@ -29,10 +29,10 @@ for(var/obj/item/clothing/thing in equipped_items) if(thing.clothing_flags & CANT_SLEEP_IN) //we're too uncomfortable for deep stasis - to_chat(src, span_boldwarning("I can't enter stasis...the [thing] bothers me...")) + to_chat(cast_on, span_boldwarning("I can't enter stasis...the [thing] bothers me...")) break else - //we made it through the items check, go into deep stasis. Set duration. + //we made it through the items check, go into deep stasis for a set duration. cast_on.apply_status_effect(/datum/status_effect/aasimar_stasis/deep) else //time for regular stasis From f7ebd1194ddf4f5b270de1474de1049c8276d970 Mon Sep 17 00:00:00 2001 From: faustbyte <75549227+tired-wired@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:30:50 -0300 Subject: [PATCH 4/7] minor grammar thing --- code/modules/spells/spell_types/undirected/eternal_vigilance.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm index b5c2af7733d..677c474f61c 100644 --- a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm +++ b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm @@ -29,7 +29,7 @@ for(var/obj/item/clothing/thing in equipped_items) if(thing.clothing_flags & CANT_SLEEP_IN) //we're too uncomfortable for deep stasis - to_chat(cast_on, span_boldwarning("I can't enter stasis...the [thing] bothers me...")) + to_chat(cast_on, span_boldwarning("I can't enter stasis...[thing] bothers me...")) break else //we made it through the items check, go into deep stasis for a set duration. From e538c9edfc832d997f701a90c0762fe95374b46e Mon Sep 17 00:00:00 2001 From: faustbyte <75549227+tired-wired@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:33:18 -0300 Subject: [PATCH 5/7] Update eternal_vigilance.dm --- .../spells/spell_types/undirected/eternal_vigilance.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm index 677c474f61c..e1053c3ce29 100644 --- a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm +++ b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm @@ -14,6 +14,7 @@ //tracking if we're already in basic stasis var/stasis = FALSE + var/can_sleep = TRUE /datum/action/cooldown/spell/undirected/eternal_vigilance/cast(mob/living/carbon/human/cast_on) @@ -30,10 +31,11 @@ if(thing.clothing_flags & CANT_SLEEP_IN) //we're too uncomfortable for deep stasis to_chat(cast_on, span_boldwarning("I can't enter stasis...[thing] bothers me...")) + can_sleep = FALSE break - else - //we made it through the items check, go into deep stasis for a set duration. - cast_on.apply_status_effect(/datum/status_effect/aasimar_stasis/deep) + //we made it through the items check, go into deep stasis for a set duration. + if(can_sleep) + cast_on.apply_status_effect(/datum/status_effect/aasimar_stasis/deep) else //time for regular stasis cast_on.apply_status_effect(/datum/status_effect/aasimar_stasis) From 08e45342a2a4a14594be3a273e6646572c8abd3d Mon Sep 17 00:00:00 2001 From: faustbyte <75549227+tired-wired@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:35:12 -0300 Subject: [PATCH 6/7] Update eternal_vigilance.dm --- code/modules/spells/spell_types/undirected/eternal_vigilance.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm index e1053c3ce29..ed659ea123f 100644 --- a/code/modules/spells/spell_types/undirected/eternal_vigilance.dm +++ b/code/modules/spells/spell_types/undirected/eternal_vigilance.dm @@ -19,6 +19,7 @@ /datum/action/cooldown/spell/undirected/eternal_vigilance/cast(mob/living/carbon/human/cast_on) . = ..() + can_sleep = TRUE if(stasis) //we're ALREADY in basic stasis, time to wake up stasis = FALSE From bc2acc08bed8bc1f6887663cf6f289fa292f9e69 Mon Sep 17 00:00:00 2001 From: faustbyte <75549227+tired-wired@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:39:41 -0300 Subject: [PATCH 7/7] Update neutral.dm --- code/datums/status_effects/neutral.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 91a93c27bbb..063d1787840 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -48,7 +48,7 @@ owner.adjust_energy((owner.max_energy * 0.02)) if(!(owner.blood_volume == BLOOD_VOLUME_MAXIMUM)) owner.blood_volume = min(owner.blood_volume + 2, BLOOD_VOLUME_NORMAL) - owner.heal_overall_damage(2, 2, BODYPART_ORGANIC, TRUE) + owner.heal_overall_damage(1, 1, BODYPART_ORGANIC, TRUE) //ENDROGUE