From f79768c83741c58e3e183963677d12ff02310e65 Mon Sep 17 00:00:00 2001
From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com>
Date: Fri, 25 Mar 2022 13:46:21 -0400
Subject: [PATCH 1/2] Initial Commit
---
code/game/turfs/simulated.dm | 2 +
code/modules/vore/eating/living_vr.dm | 12 +++--
code/modules/vore/eating/slipvore_vr.dm | 64 +++++++++++++++++++++++++
vorestation.dme | 3 +-
4 files changed, 77 insertions(+), 4 deletions(-)
create mode 100644 code/modules/vore/eating/slipvore_vr.dm
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 8feb63148c..2001bbb71c 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -138,6 +138,8 @@
if(M.slip("the [floor_type] floor", slip_stun))
for(var/i = 1 to slip_dist)
+ if(M.slip_vore_in_progress) //Vore edit that's secretely a CHOMPEdit
+ break
step(M, M.dir)
sleep(1)
else
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 4038ed6c54..0d18a844b4 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -504,9 +504,15 @@
to_chat(user, "They aren't able to be devoured.")
log_and_message_admins("[key_name_admin(src)] attempted to devour [key_name_admin(prey)] against their prefs ([prey ? ADMIN_JMP(prey) : "null"])")
return FALSE
-
+ // Slipnoms from chompstation downstream, credit to cadyn for the original PR.
// Prepare messages
- if(user == pred) //Feeding someone to yourself
+ if(prey.is_slipping)
+ attempt_msg = "It seems like [prey] is about to slide into [pred]'s [lowertext(belly.name)]!"
+ success_msg = "[prey] suddenly slides into [pred]'s [lowertext(belly.name)]!"
+ else if(pred.is_slipping)
+ attempt_msg = "It seems like [prey] is gonna end up inside [pred]'s [lowertext(belly.name)] as [pred] comes sliding over!"
+ success_msg = "[prey] suddenly slips inside of [pred]'s [lowertext(belly.name)] as [pred] slides into them!"
+ else if(user == pred) //Feeding someone to yourself
attempt_msg = "[pred] is attempting to [lowertext(belly.vore_verb)] [prey] into their [lowertext(belly.name)]!"
success_msg = "[pred] manages to [lowertext(belly.vore_verb)] [prey] into their [lowertext(belly.name)]!"
else //Feeding someone to another person
@@ -566,7 +572,7 @@
var/air_type = /datum/gas_mixture/belly_air
if(istype(lifeform)) // If this doesn't succeed, then 'lifeform' is actually a bag or capture crystal with someone inside
air_type = lifeform.get_perfect_belly_air_type() // Without any overrides/changes, its gonna be /datum/gas_mixture/belly_air
-
+
var/air = new air_type(1000)
return air
diff --git a/code/modules/vore/eating/slipvore_vr.dm b/code/modules/vore/eating/slipvore_vr.dm
new file mode 100644
index 0000000000..9ca3e19176
--- /dev/null
+++ b/code/modules/vore/eating/slipvore_vr.dm
@@ -0,0 +1,64 @@
+// Slipnoms from chompstation downstream, credit to cadyn for the original PR.
+
+/mob/living
+ var/is_slipping = FALSE
+ var/slip_vore_in_progress = FALSE
+
+/mob/living/proc/can_slip_vore(var/mob/living/target)
+ if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
+ return FALSE
+ if(!(src.can_be_drop_pred && target.devourable && target.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
+ return FALSE
+ if(!is_vore_predator(src)) //Check their bellies and stuff
+ return FALSE
+ if(!src.vore_selected) //Gotta have one selected as well.
+ return FALSE
+ return TRUE
+
+/mob/living/proc/can_be_slip_vored_by(var/mob/living/target)
+ if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
+ return FALSE
+ if(!(target.can_be_drop_pred && src.devourable && src.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
+ return FALSE
+ if(!is_vore_predator(target)) //Check their bellies and stuff
+ return FALSE
+ if(!target.vore_selected) //Gotta have one selected as well.
+ return FALSE
+ return TRUE
+
+/mob/living/Crossed(var/atom/movable/AM)
+ if(AM == src || AM.is_incorporeal()) // We're not going to run over ourselves or ghosts
+ return
+
+ if(istype(AM, /mob/living/bot/mulebot))
+ var/mob/living/bot/mulebot/MB = AM
+ MB.runOver(src)
+
+ if(istype(AM, /obj/vehicle))
+ var/obj/vehicle/V = AM
+ V.RunOver(src)
+
+ var/mob/living/target = AM
+ if(istype(target) && !target.incorporeal_move && !src.incorporeal_move) //The slip vore begins
+ if(can_slip_vore(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //If we can vore them go for it
+ target.slip_vore_in_progress = TRUE //Make them stop slipping
+ perform_the_nom(src,target,src,src.vore_selected,1)
+ target.slip_vore_in_progress = FALSE
+ target.is_slipping = FALSE
+ else if(can_be_slip_vored_by(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //Otherwise, if they can vore us, make it happen.
+ target.slip_vore_in_progress = TRUE //Make them stop slipping
+ perform_the_nom(target,src,target,target.vore_selected,1)
+ target.slip_vore_in_progress = FALSE
+ target.is_slipping = FALSE
+
+/mob/living/carbon/slip(var/slipped_on,stun_duration=8)
+ . = ..()
+ if(.)
+ is_slipping = TRUE
+ return .
+
+/mob/living/update_canmove()
+ . = ..()
+ if(is_slipping && !lying)
+ is_slipping = FALSE
+ return .
\ No newline at end of file
diff --git a/vorestation.dme b/vorestation.dme
index bda8b0f4b4..2debe51537 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -3960,6 +3960,7 @@
#include "code\modules\vore\eating\living_vr.dm"
#include "code\modules\vore\eating\silicon_vr.dm"
#include "code\modules\vore\eating\simple_animal_vr.dm"
+#include "code\modules\vore\eating\slipvore_vr.dm"
#include "code\modules\vore\eating\transforming_vr.dm"
#include "code\modules\vore\eating\vore_vr.dm"
#include "code\modules\vore\eating\vorehooks_vr.dm"
@@ -4112,6 +4113,6 @@
#include "maps\submaps\space_submaps\debrisfield\debrisfield.dm"
#include "maps\submaps\surface_submaps\wilderness\wilderness.dm"
#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm"
-#include "maps\tether\tether.dm"
+#include "maps\virgo_minitest\virgo_minitest.dm"
#include "maps\~map_system\maps.dm"
// END_INCLUDE
From 76b36453707a319a0a3a18a4d6508bce75216675 Mon Sep 17 00:00:00 2001
From: FartMaster69420 <78667902+FartMaster69420@users.noreply.github.com>
Date: Fri, 25 Mar 2022 22:50:11 -0400
Subject: [PATCH 2/2] Adding sanity
Adds a short timer after being expelled from a belly, during this time frame you cannot be slip nom'd.
---
code/game/turfs/simulated.dm | 4 ++--
code/modules/vore/eating/belly_obj_vr.dm | 6 +++--
code/modules/vore/eating/slipvore_vr.dm | 28 ++++++++++--------------
vorestation.dme | 2 +-
4 files changed, 19 insertions(+), 21 deletions(-)
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 2001bbb71c..4b9ffbfed8 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -138,8 +138,8 @@
if(M.slip("the [floor_type] floor", slip_stun))
for(var/i = 1 to slip_dist)
- if(M.slip_vore_in_progress) //Vore edit that's secretely a CHOMPEdit
- break
+ if(isbelly(M.loc)) //VOREEdit, Stop the slip if we're in a belly. Inspired by a chompedit, cleaned it up with isbelly instead of a variable since the var was resetting too fast.
+ return
step(M, M.dir)
sleep(1)
else
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index 85d4fca868..351ca2191e 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -366,9 +366,11 @@
H.held_mob.muffled = FALSE
H.held_mob.forced_psay = FALSE
+ if(isliving(M))
+ var/mob/living/slip = M
+ slip.slip_protect = world.time + 25 // This is to prevent slipping back into your pred if they stand on soap or something.
//Place them into our drop_location
M.forceMove(drop_location())
-
items_preserved -= M
//Special treatment for absorbed prey
@@ -774,7 +776,7 @@
/////////////////////////////////////////////////////////////////////////
/obj/belly/proc/handle_absorb_langs()
owner.absorb_langs()
-
+
////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/vore/eating/slipvore_vr.dm b/code/modules/vore/eating/slipvore_vr.dm
index 9ca3e19176..2adc3f757e 100644
--- a/code/modules/vore/eating/slipvore_vr.dm
+++ b/code/modules/vore/eating/slipvore_vr.dm
@@ -3,10 +3,13 @@
/mob/living
var/is_slipping = FALSE
var/slip_vore_in_progress = FALSE
+ var/slip_protect = 1
/mob/living/proc/can_slip_vore(var/mob/living/target)
if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
return FALSE
+ if(world.time <= target.slip_protect)
+ return FALSE
if(!(src.can_be_drop_pred && target.devourable && target.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
return FALSE
if(!is_vore_predator(src)) //Check their bellies and stuff
@@ -18,6 +21,8 @@
/mob/living/proc/can_be_slip_vored_by(var/mob/living/target)
if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
return FALSE
+ if(world.time <= target.slip_protect)
+ return FALSE
if(!(target.can_be_drop_pred && src.devourable && src.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
return FALSE
if(!is_vore_predator(target)) //Check their bellies and stuff
@@ -27,29 +32,20 @@
return TRUE
/mob/living/Crossed(var/atom/movable/AM)
- if(AM == src || AM.is_incorporeal()) // We're not going to run over ourselves or ghosts
- return
-
- if(istype(AM, /mob/living/bot/mulebot))
- var/mob/living/bot/mulebot/MB = AM
- MB.runOver(src)
-
- if(istype(AM, /obj/vehicle))
- var/obj/vehicle/V = AM
- V.RunOver(src)
-
+ ..()
var/mob/living/target = AM
if(istype(target) && !target.incorporeal_move && !src.incorporeal_move) //The slip vore begins
if(can_slip_vore(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //If we can vore them go for it
- target.slip_vore_in_progress = TRUE //Make them stop slipping
perform_the_nom(src,target,src,src.vore_selected,1)
target.slip_vore_in_progress = FALSE
target.is_slipping = FALSE
+ return
else if(can_be_slip_vored_by(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //Otherwise, if they can vore us, make it happen.
- target.slip_vore_in_progress = TRUE //Make them stop slipping
perform_the_nom(target,src,target,target.vore_selected,1)
- target.slip_vore_in_progress = FALSE
- target.is_slipping = FALSE
+ slip_vore_in_progress = FALSE
+ is_slipping = FALSE
+ return
+
/mob/living/carbon/slip(var/slipped_on,stun_duration=8)
. = ..()
@@ -61,4 +57,4 @@
. = ..()
if(is_slipping && !lying)
is_slipping = FALSE
- return .
\ No newline at end of file
+ return .
diff --git a/vorestation.dme b/vorestation.dme
index 2debe51537..e004bde21d 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -4113,6 +4113,6 @@
#include "maps\submaps\space_submaps\debrisfield\debrisfield.dm"
#include "maps\submaps\surface_submaps\wilderness\wilderness.dm"
#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm"
-#include "maps\virgo_minitest\virgo_minitest.dm"
+#include "maps\tether\tether.dm"
#include "maps\~map_system\maps.dm"
// END_INCLUDE