From 31f974195ddfaa5d325987c2620d540b0f1d50ef Mon Sep 17 00:00:00 2001 From: Heroman Date: Sat, 7 May 2022 17:04:16 +1000 Subject: [PATCH] Adds Vertical Nom trait --- .../species/station/traits_vr/neutral.dm | 10 ++++ code/modules/vore/eating/vertical_nom_vr.dm | 47 +++++++++++++++++++ vorestation.dme | 1 + 3 files changed, 58 insertions(+) create mode 100644 code/modules/vore/eating/vertical_nom_vr.dm diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index a96772a5172..8ccca058aca 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -528,3 +528,13 @@ /datum/trait/neutral/submit_to_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/proc/lend_prey_control + +/datum/trait/neutral/vertical_nom + name = "Vertical Nom" + desc = "Allows you to consume people from up above." + cost = 0 + custom_only = FALSE + +/datum/trait/neutral/vertical_nom/apply(var/datum/species/S,var/mob/living/carbon/human/H) + ..(S,H) + H.verbs |= /mob/living/proc/vertical_nom diff --git a/code/modules/vore/eating/vertical_nom_vr.dm b/code/modules/vore/eating/vertical_nom_vr.dm new file mode 100644 index 00000000000..c9ff0a3096a --- /dev/null +++ b/code/modules/vore/eating/vertical_nom_vr.dm @@ -0,0 +1,47 @@ +/mob/living/proc/vertical_nom() + set name = "Nom from Above" + set desc = "Allows you to eat people who are below your tile or adjacent one. Requires passability." + set category = "Abilities" + + if(stat == DEAD || paralysis || weakened || stunned) + to_chat(src, "You cannot do that while in your current state.") + return + + if(!(src.vore_selected)) + to_chat(src, "No selected belly found.") + return + + var/list/targets = list() + + for(var/turf/T in range(1, src)) + if(isopenspace(T)) + while(isopenspace(T)) + T = GetBelow(T) + if(T) + for(var/mob/living/L in T) + if(L.devourable && 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 + + to_chat(target, "You feel yourself being pulled up by something... Or someone?!") + var/starting_loc = target.loc + + if(do_after(src, 50)) + if(target.loc != starting_loc) + to_chat(target, "You have interrupted whatever that was...") + to_chat(src, "They got away.") + return + if(target.buckled) + target.buckled.unbuckle_mob() + target.visible_message("\The [target] suddenly disappears somewhere above!",\ + "You are dragged above and feel yourself slipping directly into \the [src]'s [vore_selected]!") + to_chat(src, "You successfully snatch \the [target], slipping them into your [vore_selected].") + target.forceMove(src.vore_selected) \ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index 768fb81ea79..5c5442d54b8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3986,6 +3986,7 @@ #include "code\modules\vore\eating\slipvore_vr.dm" #include "code\modules\vore\eating\stumblevore_vr.dm" #include "code\modules\vore\eating\transforming_vr.dm" +#include "code\modules\vore\eating\vertical_nom_vr.dm" #include "code\modules\vore\eating\vore_vr.dm" #include "code\modules\vore\eating\vorehooks_vr.dm" #include "code\modules\vore\eating\vorepanel_vr.dm"