diff --git a/code/datums/spells/bloodcrawl.dm b/code/datums/spells/bloodcrawl.dm index 468c09da197..364241407e6 100644 --- a/code/datums/spells/bloodcrawl.dm +++ b/code/datums/spells/bloodcrawl.dm @@ -87,20 +87,21 @@ C.regenerate_icons() return TRUE +/obj/effect/temp_visual/dir_setting/bloodcrawl + icon = 'icons/mob/mob.dmi' + icon_state = "blank" // Flicks are used instead + duration = 0.6 SECONDS + layer = MOB_LAYER + 0.1 + +/obj/effect/temp_visual/dir_setting/bloodcrawl/Initialize(mapload, set_dir, animation_state) + . = ..() + flick(animation_state, src) // Setting the icon_state to the animation has timing issues and can cause frame skips + /obj/effect/proc_holder/spell/bloodcrawl/proc/sink_animation(atom/A, mob/living/L) var/turf/mob_loc = get_turf(L) visible_message("[L] sinks into [A].") playsound(mob_loc, 'sound/misc/enter_blood.ogg', 100, 1, -1) - var/atom/movable/overlay/animation = new(mob_loc) - animation.name = "odd blood" - animation.density = FALSE - animation.anchored = TRUE - animation.icon = 'icons/mob/mob.dmi' - animation.icon_state = "jaunt" - animation.layer = 5 - animation.master = mob_loc - animation.dir = L.dir - QDEL_IN(animation, 0.6 SECONDS) + new /obj/effect/temp_visual/dir_setting/bloodcrawl(mob_loc, L.dir, "jaunt") /obj/effect/proc_holder/spell/bloodcrawl/proc/handle_consumption(mob/living/L, mob/living/victim, atom/A, obj/effect/dummy/slaughter/holder) if(!HAS_TRAIT(L, TRAIT_BLOODCRAWL_EAT)) @@ -188,21 +189,12 @@ post_phase_in(L, holder) /obj/effect/proc_holder/spell/bloodcrawl/proc/rise_animation(turf/tele_loc, mob/living/L, atom/A) - var/atom/movable/overlay/animation = new(tele_loc) - animation.name = "odd blood" - animation.density = FALSE - animation.anchored = TRUE - animation.icon = 'icons/mob/mob.dmi' - animation.icon_state = "jauntup" //Paradise Port:I reversed the jaunt animation so it looks like its rising up - animation.layer = 5 - animation.master = tele_loc - animation.dir = L.dir + new /obj/effect/temp_visual/dir_setting/bloodcrawl(tele_loc, L.dir, "jauntup") if(prob(25) && isdemon(L)) var/list/voice = list('sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/i_see_you1.ogg') playsound(tele_loc, pick(voice),50, 1, -1) A.visible_message("[L] rises out of [A]!") playsound(get_turf(tele_loc), 'sound/misc/exit_blood.ogg', 100, 1, -1) - QDEL_IN(animation, 0.6 SECONDS) /obj/effect/proc_holder/spell/bloodcrawl/proc/unblock_hands(mob/living/carbon/C) if(!istype(C)) @@ -260,13 +252,14 @@ return /obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/rise_animation(turf/tele_loc, mob/living/L, atom/A) - return + new /obj/effect/temp_visual/dir_setting/bloodcrawl(get_turf(L), L.dir, "shadowwalk_appear") /obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/handle_consumption(mob/living/L, mob/living/victim, atom/A, obj/effect/dummy/slaughter/holder) return /obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/sink_animation(atom/A, mob/living/L) A.visible_message("[L] sinks into the shadows...") + new /obj/effect/temp_visual/dir_setting/bloodcrawl(get_turf(L), L.dir, "shadowwalk_disappear") /obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/post_phase_in(mob/living/L, obj/effect/dummy/slaughter/holder) ..() @@ -274,4 +267,3 @@ return var/mob/living/simple_animal/demon/shadow/S = L S.RegisterSignal(holder, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/simple_animal/demon/shadow, check_darkness)) - diff --git a/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm b/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm index 34869d46d84..ba308b0677e 100644 --- a/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm +++ b/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm @@ -32,10 +32,13 @@ AddSpell(new /obj/effect/proc_holder/spell/fireball/shadow_grapple) var/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/S = new AddSpell(S) + whisper_action.button_icon_state = "shadow_whisper" + whisper_action.background_icon_state = "shadow_demon_bg" if(istype(loc, /obj/effect/dummy/slaughter)) S.phased = TRUE RegisterSignal(loc, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/simple_animal/demon/shadow, check_darkness)) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(check_darkness)) + add_overlay(emissive_appearance(icon, "shadow_demon_eye_glow_overlay")) /mob/living/simple_animal/demon/shadow/proc/check_darkness() var/turf/T = get_turf(src) diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index 4a939231c99..8e034e98b84 100644 Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 90c30c0c3d8..498c3203785 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ