diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm index 1aa8122be5..e76a09d4b7 100644 --- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm +++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm @@ -26,18 +26,19 @@ var/escapetime = 20 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 = 100 // % Chance of prey beginning to escape if prey struggles. + var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles. var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone. var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine. // var/shrink_grow_size = 1 // This horribly named variable determines the minimum/maximum size it will shrink/grow prey to. var/silent = FALSE - var/transferlocation = null // Location that the prey is released if they struggle and get dropped off. + var/transferlocation // Location that the prey is released if they struggle and get dropped off. var/transferchance = 0 // % Chance of prey being transferred to transfer location when resisting var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location var/autotransferwait = 10 // Time between trying to transfer. var/swallow_time = 10 SECONDS // for mob transfering automation var/vore_capacity = 1 // simple animal nom capacity + var/is_wet = TRUE // Is this belly inside slimy parts? //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere. var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY,DM_ABSORB,DM_UNABSORB) // Possible digest modes @@ -138,7 +139,8 @@ "digest_messages_owner", "digest_messages_prey", "examine_messages", - "emote_lists" + "emote_lists", + "is_wet" ) //ommitted list @@ -167,7 +169,7 @@ to_chat(owner,"[thing] slides into your [lowertext(name)].") //Sound w/ antispam flag setting - if(!silent && !recent_sound) + if(is_wet && !recent_sound) for(var/mob/M in get_hearers_in_view(5, get_turf(owner))) if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) playsound(get_turf(owner),"[src.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) @@ -268,8 +270,10 @@ prey.forceMove(src) var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE) - if(!silent) + + if(is_wet) prey.playsound_local(loc,preyloop,70,0, channel = CHANNEL_PREYLOOP) + owner.updateVRPanel() for(var/mob/living/M in contents) @@ -461,6 +465,9 @@ //Yes, it's ""safe"" to drop items here /obj/belly/AllowDrop() return TRUE +/* +/obj/belly/onDropInto(var/atom/movable/AM) + return null */ //Handle a mob struggling // Called from /mob/living/carbon/relaymove() @@ -469,6 +476,23 @@ return // User is not in this belly R.setClickCooldown(50) + + if(owner.stat) //If owner is stat (dead, KO) we can actually escape + to_chat(R,"You attempt to climb out of \the [lowertext(name)]. (This will take around [escapetime/10] seconds.)") + to_chat(owner,"Someone is attempting to climb out of your [lowertext(name)]!") + + if(do_after(R, owner, escapetime)) + if((owner.stat || escapable) && (R.loc == src)) //Can still escape? + release_specific_contents(R) + return + else if(R.loc != src) //Aren't even in the belly. Quietly fail. + return + else //Belly became inescapable or mob revived + to_chat(R,"Your attempt to escape [lowertext(name)] has failed!") + to_chat(owner,"The attempt to escape from your [lowertext(name)] has failed!") + return + return + var/struggle_outer_message = pick(struggle_messages_outside) var/struggle_user_message = pick(struggle_messages_inside) @@ -483,41 +507,33 @@ struggle_outer_message = "" + struggle_outer_message + "" struggle_user_message = "" + struggle_user_message + "" - if((owner.stat || !owner.client) && (R.a_intent != INTENT_HELP)) //If owner is stat (dead, KO) we can actually escape - to_chat(R,"You attempt to climb out of \the [lowertext(name)]. (This will take around 5 seconds.)") - to_chat(owner,"Someone is attempting to climb out of your [lowertext(name)]!") - - if(!do_mob(R,owner,50)) - return - if(!(R in contents)) //Aren't even in the belly. Quietly fail. - return - if(R.a_intent != INTENT_HELP) //still want to? - release_specific_contents(R) - return - else //Belly became inescapable or mob revived - to_chat(R,"Your attempt to escape [lowertext(name)] has failed!") - to_chat(owner,"The attempt to escape from your [lowertext(name)] has failed!") - return - else if(R.a_intent != INTENT_HELP) //failsafe to make sure people are able to struggle out. friendly ERP should be on help intent. - to_chat(R,"You attempt to climb out of [lowertext(name)]. (This will take around [escapetime] seconds.)") - to_chat(owner,"Someone is attempting to climb out of your [lowertext(name)]!") - if(!do_mob(R,owner,escapetime)) - return - release_specific_contents(R) - return - else if (R.a_intent == INTENT_HELP) - for(var/mob/M in get_hearers_in_view(3, get_turf(owner))) - M.show_message(struggle_outer_message, 1) // visible - to_chat(R,struggle_user_message) - - if(!silent) - for(var/mob/M in get_hearers_in_view(5, get_turf(owner))) + if(is_wet) + for(var/mob/M in get_hearers_in_view(2, get_turf(owner))) if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) playsound(get_turf(owner),"struggle_sound",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED) R.stop_sound_channel(CHANNEL_PRED) var/sound/prey_struggle = sound(get_sfx("prey_struggle")) R.playsound_local(get_turf(R),prey_struggle,45,0) + for(var/mob/M in get_hearers_in_view(3, get_turf(owner))) + if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) //Might as well censor the normies here too. + M.show_message(struggle_outer_message, 1) // visible + to_chat(R,struggle_user_message) + + if(escapable) //If the stomach has escapable enabled. + if(prob(escapechance)) //Let's have it check to see if the prey escapes first. + to_chat(R,"You start to climb out of \the [lowertext(name)].") + to_chat(owner,"Someone is attempting to climb out of your [lowertext(name)]!") + if(do_after(R, escapetime)) + if((owner.stat || escapable) && (R.loc == src)) //Can still escape? + release_specific_contents(R) + return + else if(R.loc != src) //Aren't even in the belly. Quietly fail. + return + else //Belly became inescapable or mob revived + to_chat(R,"Your attempt to escape [lowertext(name)] has failed!") + to_chat(owner,"The attempt to escape from your [lowertext(name)] has failed!") + return else if(prob(transferchance) && transferlocation) //Next, let's have it see if they end up getting into an even bigger mess then when they started. var/obj/belly/dest_belly for(var/belly in owner.vore_organs) @@ -525,6 +541,7 @@ if(B.name == transferlocation) dest_belly = B break + if(!dest_belly) to_chat(owner, "Something went wrong with your belly transfer settings. Your [lowertext(name)] has had it's transfer chance and transfer location cleared as a precaution.") transferchance = 0 @@ -541,21 +558,10 @@ to_chat(owner,"You feel your [lowertext(name)] start to cling onto its contents...") digest_mode = DM_ABSORB return -/* - else if(prob(digestchance) && digest_mode != DM_ITEMWEAK && digest_mode != DM_DIGEST) //Finally, let's see if it should run the digest chance. + + else if(prob(digestchance) && digest_mode != DM_DIGEST) //Finally, let's see if it should run the digest chance. to_chat(R,"In response to your struggling, \the [lowertext(name)] begins to get more active...") to_chat(owner,"You feel your [lowertext(name)] beginning to become active!") - digest_mode = DM_ITEMWEAK - return - - else if(prob(digestchance) && digest_mode == DM_ITEMWEAK) //Oh god it gets even worse if you fail twice! - to_chat(R,"In response to your struggling, \the [lowertext(name)] begins to get even more active!") - to_chat(owner,"You feel your [lowertext(name)] beginning to become even more active!") - digest_mode = DM_DIGEST - return */ - else if(prob(digestchance)) //Finally, let's see if it should run the digest chance.) - to_chat(R, "In response to your struggling, \the [name] begins to get more active...") - to_chat(owner, "You feel your [name] beginning to become active!") digest_mode = DM_DIGEST return @@ -609,6 +615,7 @@ dupe.autotransferwait = autotransferwait dupe.swallow_time = swallow_time dupe.vore_capacity = vore_capacity + dupe.is_wet = is_wet //// Object-holding variables //struggle_messages_outside - strings diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm index 2e6018f112..74ae0bfe35 100644 --- a/modular_citadel/code/modules/vore/eating/living_vr.dm +++ b/modular_citadel/code/modules/vore/eating/living_vr.dm @@ -1,15 +1,16 @@ ///////////////////// Mob Living ///////////////////// /mob/living var/digestable = FALSE // Can the mob be digested inside a belly? - var/obj/belly/vore_selected // Default to no vore capability. - var/list/vore_organs = list() // List of vore containers inside a mob + var/showvoreprefs = TRUE // Determines if the mechanical vore preferences button will be displayed on the mob or not. + var/obj/belly/vore_selected // Default to no vore capability. + var/list/vore_organs = list() // List of vore containers inside a mob var/devourable = FALSE // Can the mob be vored at all? -// var/feeding = FALSE // Are we going to feed someone else? - var/vore_taste = null // What the character tastes like +// var/feeding = FALSE // Are we going to feed someone else? + var/vore_taste = null // What the character tastes like var/no_vore = FALSE // If the character/mob can vore. - var/openpanel = 0 // Is the vore panel open? - var/noisy = FALSE // tummies are rumbly? - var/absorbed = FALSE //are we absorbed? + var/openpanel = 0 // Is the vore panel open? + var/noisy = FALSE // tummies are rumbly? + var/absorbed = FALSE //are we absorbed? var/next_preyloop // @@ -26,7 +27,8 @@ //Tries to load prefs if a client is present otherwise gives freebie stomach spawn(10 SECONDS) // long delay because the server delays in its startup. just on the safe side. - M.init_vore() + if(M) + M.init_vore() //Return 1 to hook-caller return 1 @@ -281,7 +283,7 @@ */ // -// Custom resist catches for /mob/living +// Our custom resist catches for /mob/living // /mob/living/proc/vore_process_resist() @@ -293,7 +295,7 @@ //Other overridden resists go here - return FALSE + return 0 // internal slimy button in case the loop stops playing but the player wants to hear it /mob/living/proc/preyloop_refresh() diff --git a/modular_citadel/code/modules/vore/eating/vore_vr.dm b/modular_citadel/code/modules/vore/eating/vore_vr.dm index 16366bbb14..32d19fc11b 100644 --- a/modular_citadel/code/modules/vore/eating/vore_vr.dm +++ b/modular_citadel/code/modules/vore/eating/vore_vr.dm @@ -28,7 +28,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE // The datum type bolted onto normal preferences datums for storing Vore stuff // -#define VORE_VERSION 2 +#define VORE_VERSION 3 GLOBAL_LIST_EMPTY(vore_preferences_datums) diff --git a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm index 30209b6da2..bc30de6ca6 100644 --- a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm +++ b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm @@ -156,6 +156,10 @@ dat += "Name:" dat += " '[selected.name]'" + //Belly Type button + dat += "Has Flesh Noises?" + dat += "[selected.is_wet ? "Yes" : "No"]" + //Digest Mode Button dat += "
Belly Mode:" dat += " [selected.digest_mode]" @@ -457,6 +461,9 @@ selected.name = new_name + if(href_list["b_wetness"]) + selected.is_wet = !selected.is_wet + if(href_list["b_mode"]) var/list/menu_list = selected.digest_modes