From f9ea062b644f1a0203d25df3eb144a7624252a4d Mon Sep 17 00:00:00 2001 From: CHOMPStation2 <58959929+CHOMPStation2@users.noreply.github.com> Date: Tue, 24 Oct 2023 17:44:50 -0700 Subject: [PATCH] [MIRROR] Scel and lunging (#7089) Co-authored-by: Selis Co-authored-by: Nadyr <41974248+Darlantanis@users.noreply.github.com> --- .../station/station_special_abilities_vr.dm | 69 +++++++++++++++++++ .../living/simple_mob/subtypes/vore/scel.dm | 7 +- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index 0da6318df0..9bf21baae6 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -1461,3 +1461,72 @@ hitsound = 'sound/vore/sunesound/pred/schlorp.ogg' hitsound_wall = 'sound/vore/sunesound/pred/schlorp.ogg' zaptype = /obj/item/projectile/beam/appendage + +/mob/living/proc/target_lunge() //The leaper leap, but usable as an ability + set name = "Lunge At Prey" + set category = "Abilities" + set desc = "Dive atop your prey and gobble them up!" + + var/leap_warmup = 1 SECOND //Easy to modify + var/leap_sound = 'sound/weapons/spiderlunge.ogg' + + if(stat || paralysis || weakened || stunned || world.time < last_special) //No tongue flicking while stunned. + to_chat(src, "You can't do that in your current state.") + return + + last_special = world.time + 10 //Anti-spam. + + if (!istype(src, /mob/living)) + to_chat(src, "It doesn't work that way.") + return + + else + var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT. + + for(var/mob/living/L in range(5, src)) + if(!istype(L, /mob/living)) //Don't eat anything that isn't mob/living. Failsafe. + continue + if(L == src) //no eating yourself. 1984. + continue + if(L.devourable && L.throw_vore && (L.can_be_drop_pred || L.can_be_drop_prey)) + targets += L + + if(!(targets.len)) + to_chat(src, "No eligible targets found.") + return + + var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets) + + if(!target) + return + + if(!istype(target, /mob/living)) //Safety. + to_chat(src, "You need to select a living target!") + return + + if (get_dist(src,target) >= 6) + to_chat(src, "You need to be closer to do that.") + return + + visible_message(span("warning","\The [src] rears back, ready to lunge!")) + to_chat(target, span("danger","\The [src] focuses on you!")) + // Telegraph, since getting stunned suddenly feels bad. + do_windup_animation(target, leap_warmup) + sleep(leap_warmup) // For the telegraphing. + + if(target.z != z) //Make sure you haven't disappeared to somewhere we can't go + return FALSE + + // Do the actual leap. + status_flags |= LEAPING // Lets us pass over everything. + visible_message(span("critical","\The [src] leaps at \the [target]!")) + throw_at(get_step(target, get_turf(src)), 7, 1, src) + playsound(src, leap_sound, 75, 1) + + sleep(5) // For the throw to complete. + + if(status_flags & LEAPING) + status_flags &= ~LEAPING // Revert special passage ability. + + if(Adjacent(target)) //We leapt at them but we didn't manage to hit them, let's see if we're next to them + target.Weaken(2) //get knocked down, idiot diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm index cde9adb29a..9c6edf6707 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm @@ -71,7 +71,7 @@ vore_escape_chance = 5 vore_pounce_chance = 100 vore_active = 1 - vore_icons = 2 + vore_icons = 1 vore_icons = SA_ICON_LIVING | SA_ICON_REST vore_capacity = 2 swallowTime = 50 @@ -89,6 +89,7 @@ verbs |= /mob/living/proc/glow_toggle verbs |= /mob/living/proc/glow_color verbs |= /mob/living/proc/long_vore + verbs |= /mob/living/proc/target_lunge movement_cooldown = -1 /mob/living/simple_mob/vore/scel/init_vore() @@ -143,6 +144,8 @@ /mob/living/simple_mob/vore/scel/do_special_attack(atom/A) . = TRUE + if(ckey) + return if(prob(50)) lunge(A) else @@ -192,7 +195,7 @@ name = "Extra-Realspace Fauna - Scel" desc = "Classification: Voidwyrm\

\ - Scel, colloquially known as Voidwyrms, are creatures originating from outside of realspace, typically found at extradimensional breaches such as redpsace tears or within redgate locations. \ + Scel, colloquially known as Voidwyrms, are creatures originating from outside of realspace, typically found at extradimensional breaches such as bluepsace tears. \ While they are known to appear in many variants, the serpentine shape with antennae or whiskers is known to be the most common, due to being the closest and most accurate approximation of their natural forms from their home reality. \ Scel bodies, contrary to popular belief, are not slime. They are solid matter, but are still incredibly malleable, which they use to 'shapeshift' when desired. The shifting is limited to just their figure. A scel attempting to look human would still have black squishy flesh and glowing eyes and spots for example. \ Various other appendages seem to manifest at will, growing out of their body when needed. Tentacles are by-far the most preferred and commonly seen, but hardened legs and even clawed hands have been seen. While able to shapeshift into even human or animal shapes, it is always in shape only, and certain traits are universal. \