[MIRROR] Makes absorbs escapable (and other tweaks) (#7318)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Co-authored-by: CHOMPStation2 <chompsation2@gmail.com>
This commit is contained in:
CHOMPStation2
2023-12-03 13:29:08 +01:00
committed by GitHub
co-authored by Heroman3003 CHOMPStation2
parent 45430008b1
commit dad9d2cbca
4 changed files with 30 additions and 9 deletions
@@ -81,7 +81,7 @@ TODO: Make them light up and heat the air when exposed to oxygen.
vore_ignores_undigestable = 0 // they absorb rather than digest, you're going in either way
vore_default_mode = DM_HOLD
vore_digest_chance = 0 // Chance to switch to digest mode if resisted
vore_absorb_chance = 20 // BECOME A PART OF ME.
vore_absorb_chance = 100 // Will always start to absorb if the prey fails its generous escape chance
vore_pounce_chance = 5 // Small chance to punish people who abuse their nomming behaviour to try and kite them forever with repeated melee attacks.
vore_stomach_name = "internal chamber"
vore_stomach_flavor = "You are squeezed into the tight embrace of the alien creature's warm and cozy insides."
@@ -94,7 +94,8 @@ TODO: Make them light up and heat the air when exposed to oxygen.
var/obj/belly/B = vore_selected
B.name = "internal chamber"
B.desc = "Having been too slow to disentangle yourself from the gaslamp's tentacles, the alien creature eventually winds enough of them around your body to lift you up off of the ground. Struggle as you might now, it is too late to deny the jellyfish-esque scavenger its lucky catch; inch by inch, the gaslamp tugs you upwards into its equivalent of a stomach, the transition between the cool-to-frigid atmosphere on the outside to its surprising internal heat something you can feel through any outer wear you possess. Minutes pass, soon resulting in the gentle creature's body sporting a rounded, bulging swell, an indistinct shadow shifting and twitching inside it as you squirm about. Be it to escape or simply to get settled, you might want to take care, however. The gaslamp's internal chamber is slick and squishy instead of overly oppressive, yet, each wave of warmth that pulses over you leaves you feeling weaker than the last..."
B.escapechance = 40 //easy to squirm out of...
B.escapechance_absorbed = 5 //...but EXTREMELY clingy if you fail
B.emote_lists[DM_HOLD] = list(
"The gaslamp gently bobs up and down as it lazily drifts elsewhere, the movement hardly enough to disturb the shadowy, indistinct figure curled up within it: you.",
"The fungal creatures inner walls tenderly ripple and squeeze about your form for a few moments, squelching softly... until another wave of warmth pulses through the chamber.",
@@ -572,7 +572,7 @@ I think I covered everything.
autotransferwait = 150
escapable = 1
escapechance = 100
escapetime = 30
escapetime = 15
fancy_vore = 1
contamination_color = "grey"
contamination_flavor = "Wet"
@@ -325,7 +325,7 @@
B.digestchance = 0
B.absorbchance = 0
B.escapechance = 10
B.escapetime = 10 SECONDS
B.escapetime = 5 SECONDS
B.selective_preference = DM_DIGEST
B.escape_stun = 3
+25 -5
View File
@@ -27,10 +27,11 @@
var/digest_clone = 0 // Clone damage per tick in digestion mode
var/immutable = FALSE // Prevents this belly from being deleted
var/escapable = FALSE // Belly can be resisted out of at any time
var/escapetime = 20 SECONDS // Deciseconds, how long to escape this belly
var/escapetime = 10 SECONDS // Deciseconds, how long to escape this belly
var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
var/escapechance_absorbed = 20 // % Chance of absorbed prey finishing an escape. Requires a successful escape roll against the above as well.
var/escape_stun = 0 // AI controlled mobs with a number here will be weakened by the provided var when someone escapes, to prevent endless nom loops
var/transferchance = 0 // % Chance of prey being trasnsfered, goes from 0-100%
var/transferchance_secondary = 0 // % Chance of prey being transfered to transferchance_secondary, also goes 0-100%
@@ -1545,7 +1546,6 @@
for(var/mob/M in hearers(4, owner))
M.show_message(struggle_outer_message, 2) // hearable
to_chat(R, struggle_user_message)
var/sound/struggle_snuggle
var/sound/struggle_rustle = sound(get_sfx("rustle"))
@@ -1645,10 +1645,10 @@
return
else //Nothing interesting happened.
to_chat(R, "<span class='warning'>You make no progress in escaping [owner]'s [lowertext(name)].</span>")
to_chat(R, struggle_user_message)
to_chat(owner, "<span class='warning'>Your prey appears to be unable to make any progress in escaping your [lowertext(name)].</span>")
return
to_chat(R, struggle_user_message)
/obj/belly/proc/relay_absorbed_resist(mob/living/R)
if (!(R in contents) || !R.absorbed)
@@ -1679,7 +1679,6 @@
for(var/mob/M in hearers(4, owner))
M.show_message(struggle_outer_message, 2) // hearable
to_chat(R, struggle_user_message)
var/sound/struggle_snuggle
var/sound/struggle_rustle = sound(get_sfx("rustle"))
@@ -1693,6 +1692,27 @@
else
playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/client_preference/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
//absorb resists
if(escapable || owner.stat) //If the stomach has escapable enabled or the owner is dead/unconscious
if(prob(escapechance) || owner.stat) //Let's have it check to see if the prey's escape attempt starts.
to_chat(R, "<span class='warning'>You try to force yourself out of \the [lowertext(name)].</span>")
to_chat(owner, "<span class='warning'>Someone is attempting to free themselves from your [lowertext(name)]!</span>")
if(do_after(R, escapetime))
if((escapable || owner.stat) && (R.loc == src) && prob(escapechance_absorbed)) //Does the escape attempt succeed?
release_specific_contents(R)
to_chat(R,"<span class='warning'>You manage to free yourself from \the [lowertext(name)].</span>")
to_chat(owner,"<span class='warning'>[R] forces themselves free of your [lowertext(name)]!</span>")
for(var/mob/M in hearers(4, owner))
M.show_message("<span class='warning'>[R] climbs out of [owner]'s [lowertext(name)]!</span>", 2)
return
else if(!(R.loc == src)) //Aren't even in the belly. Quietly fail.
return
else //Belly became inescapable or you failed your roll.
to_chat(R,"<span class='warning'>Before you manage to reach freedom, you feel yourself getting dragged back into \the [lowertext(name)]!</span>")
to_chat(owner,"<span class='notice'>The attempt to escape from your [lowertext(name)] has failed!</span>")
return
to_chat(R, struggle_user_message)
/obj/belly/proc/get_mobs_and_objs_in_belly()
var/list/see = list()
var/list/belly_mobs = list()