diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm index 4616ce8243..138bceae5e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm @@ -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 creature’s inner walls tenderly ripple and squeeze about your form for a few moments, squelching softly... until another wave of warmth pulses through the chamber.", diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm index adebf178b4..275769d9d9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm @@ -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" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm index 2883899eaf..14933b0e54 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm @@ -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 diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index a2f6975171..3193987b88 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -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, "You make no progress in escaping [owner]'s [lowertext(name)].") + to_chat(R, struggle_user_message) to_chat(owner, "Your prey appears to be unable to make any progress in escaping your [lowertext(name)].") 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, "You try to force yourself out of \the [lowertext(name)].") + to_chat(owner, "Someone is attempting to free themselves from your [lowertext(name)]!") + 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,"You manage to free yourself from \the [lowertext(name)].") + to_chat(owner,"[R] forces themselves free of your [lowertext(name)]!") + for(var/mob/M in hearers(4, owner)) + M.show_message("[R] climbs out of [owner]'s [lowertext(name)]!", 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,"Before you manage to reach freedom, you feel yourself getting dragged back into \the [lowertext(name)]!") + to_chat(owner,"The attempt to escape from your [lowertext(name)] has failed!") + 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()