diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1021c36f32e..38427453e3a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1622,6 +1622,12 @@ /mob/living/carbon/human/can_feel_pain(var/obj/item/organ/check_organ) if(isSynthetic()) return 0 + //RS ADD START + if(!digest_pain && (isbelly(src.loc) || istype(src.loc, /turf/simulated/floor/water/digestive_enzymes))) + var/obj/belly/b = src.loc + if(b.digest_mode == DM_DIGEST || b.digest_mode == DM_SELECT) + return FALSE + //RS ADD END for(var/datum/modifier/M in modifiers) if(M.pain_immunity == TRUE) return 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm index 36dd136e184..229e0430eb2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -40,6 +40,7 @@ drop_vore = client.prefs_vr.drop_vore stumble_vore = client.prefs_vr.stumble_vore slip_vore = client.prefs_vr.slip_vore + digest_pain = client.prefs_vr.digest_pain resizable = client.prefs_vr.resizable show_vore_fx = client.prefs_vr.show_vore_fx diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index ad78b5bb49d..ede83168b9b 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -247,6 +247,7 @@ P.slip_vore = src.slip_vore P.throw_vore = src.throw_vore P.food_vore = src.food_vore + P.digest_pain = src.digest_pain P.stumble_vore = src.stumble_vore P.eating_privacy_global = src.eating_privacy_global diff --git a/code/modules/vore/eating/mob_vr.dm b/code/modules/vore/eating/mob_vr.dm index 62a8c9655c2..7567b3beb36 100644 --- a/code/modules/vore/eating/mob_vr.dm +++ b/code/modules/vore/eating/mob_vr.dm @@ -19,6 +19,7 @@ var/drop_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway var/throw_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway var/food_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway + var/digest_pain = TRUE var/can_be_drop_prey = FALSE var/can_be_drop_pred = FALSE var/allow_spontaneous_tf = FALSE // Obviously. diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 671416df9de..7888cdb010a 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -62,6 +62,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/throw_vore = TRUE var/food_vore = TRUE + var/digest_pain = TRUE + var/resizable = TRUE var/show_vore_fx = TRUE var/step_mechanics_pref = FALSE @@ -185,6 +187,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE food_vore = json_from_file["food_vore"] throw_vore = json_from_file["throw_vore"] stumble_vore = json_from_file["stumble_vore"] + digest_pain = json_from_file["digest_pain"] nutrition_message_visible = json_from_file["nutrition_message_visible"] nutrition_messages = json_from_file["nutrition_messages"] weight_message_visible = json_from_file["weight_message_visible"] @@ -238,6 +241,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE stumble_vore = TRUE if(isnull(food_vore)) food_vore = TRUE + if(isnull(digest_pain)) + digest_pain = TRUE if(isnull(nutrition_message_visible)) nutrition_message_visible = TRUE if(isnull(weight_message_visible)) @@ -309,6 +314,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "stumble_vore" = stumble_vore, "throw_vore" = throw_vore, "food_vore" = food_vore, + "digest_pain" = digest_pain, "nutrition_message_visible" = nutrition_message_visible, "nutrition_messages" = nutrition_messages, "weight_message_visible" = weight_message_visible, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 9703b537e31..7a4c831831f 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -316,6 +316,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", "stumble_vore" = host.stumble_vore, "throw_vore" = host.throw_vore, "food_vore" = host.food_vore, + "digest_pain" = host.digest_pain, "nutrition_message_visible" = host.nutrition_message_visible, "nutrition_messages" = host.nutrition_messages, "weight_message_visible" = host.weight_message_visible, @@ -587,6 +588,10 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.food_vore = !host.food_vore unsaved_changes = TRUE return TRUE + if("toggle_digest_pain") + host.digest_pain = !host.digest_pain + unsaved_changes = TRUE + return TRUE if("switch_selective_mode_pref") host.selective_preference = tgui_input_list(usr, "What would you prefer happen to you with selective bellymode?","Selective Bellymode", list(DM_DEFAULT, DM_DIGEST, DM_ABSORB, DM_DRAIN)) if(!(host.selective_preference)) diff --git a/tgui/packages/tgui/interfaces/VorePanel.jsx b/tgui/packages/tgui/interfaces/VorePanel.jsx index 7a415b55a86..70b114b4d9c 100644 --- a/tgui/packages/tgui/interfaces/VorePanel.jsx +++ b/tgui/packages/tgui/interfaces/VorePanel.jsx @@ -1412,6 +1412,7 @@ const VoreUserPreferences = (props) => { slip_vore, throw_vore, food_vore, + digest_pain, nutrition_message_visible, weight_message_visible, eating_privacy_global, @@ -1605,6 +1606,21 @@ const VoreUserPreferences = (props) => { disabled: 'Food Vore Disabled', }, }, + toggle_digest_pain: { + action: 'toggle_digest_pain', + test: digest_pain, + tooltip: { + main: + 'Allows for pain messages to show when being digested. ' + + ' Can be toggled off to disable pain messages.', + enable: 'Click here to allow for digestion pain.', + disable: 'Click here to disable digestion pain.', + }, + content: { + enabled: 'Digestion Pain Enabled', + disabled: 'Digestion Pain Disabled', + }, + }, inbelly_spawning: { action: 'toggle_allow_inbelly_spawning', test: allow_inbelly_spawning, @@ -1830,15 +1846,18 @@ const VoreUserPreferences = (props) => { + + + - + - + { tooltipPosition="top" /> - + - + { - + ",ae+='
',ae+='
',ae+="Addons:
"+x(_)+"

",ae+="== Descriptions ==
",ae+="Vore Verb:
"+b+"

",ae+="Release Verb:
"+I+"

",ae+='Description:
"'+C+'"

',ae+='Absorbed Description:
"'+j+'"

',ae+="
",ae+="== Messages ==
",ae+='
',ae+='
",ae+='
',ae+='
',ae+='
',ve==null||ve.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',be==null||be.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',we==null||we.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Je==null||Je.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',ze==null||ze.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Le==null||Le.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Be==null||Be.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',dt==null||dt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',xt==null||xt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',lt==null||lt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',rt==null||rt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Re==null||Re.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Ke==null||Ke.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Pe==null||Pe.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',ke==null||ke.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Me==null||Me.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Ve==null||Ve.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',We==null||We.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',He==null||He.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',gt==null||gt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Mt==null||Mt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',bt==null||bt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Dt==null||Dt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',ct==null||ct.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Ge==null||Ge.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',ue==null||ue.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',ce==null||ce.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',me==null||me.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',xe==null||xe.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',je==null||je.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Qe==null||Qe.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',vt==null||vt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Pt==null||Pt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',zt==null||zt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',en==null||en.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',Wt==null||Wt.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+='
',fn==null||fn.forEach(function(Se){ae+=Se+"
"}),ae+="
",ae+="
",ae+="
",ae+="
",ae+="
= Idle Messages =

",ae+="

Idle Messages (Hold):

",Fn==null||Fn.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Hold Absorbed):

",Vn==null||Vn.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Digest):

",Tn==null||Tn.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Absorb):

",Eo==null||Eo.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Unabsorb):

",bn==null||bn.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Drain):

",Oo==null||Oo.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Heal):

",bo==null||bo.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Size Steal):

",Xr==null||Xr.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Shrink):

",Hr==null||Hr.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Grow):

",ta==null||ta.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="
Idle Messages (Encase In Egg):

",Gr==null||Gr.forEach(function(Se){ae+=Se+"
"}),ae+="


",ae+="


",ae+="
",ae+='
',ae+='
',ae+='

',ae+='

",ae+='
',ae+='
',ae+='
    ',ae+='
  • Can Taste: '+(k?'Yes':'No')+"
  • ",ae+='
  • Contaminates: '+(V?'Yes':'No')+"
  • ",ae+='
  • Contamination Flavor: '+F+"
  • ",ae+='
  • Contamination Color: '+J+"
  • ",ae+='
  • Nutritional Gain: '+H+"%
  • ",ae+='
  • Required Examine Size: '+Q*100+"%
  • ",ae+='
  • Display Absorbed Examines: '+(Z?'True':'False')+"
  • ",ae+='
  • Save Digest Mode: '+(X?'True':'False')+"
  • ",ae+='
  • Idle Emotes: '+(z?'Active':'Inactive')+"
  • ",ae+='
  • Idle Emote Delay: '+Y+" seconds
  • ",ae+='
  • Shrink/Grow Size: '+ee*100+"%
  • ",ae+='
  • Egg Type: '+oe+"
  • ",ae+='
  • Selective Mode Preference: '+ne+"
  • ",ae+="
",ae+="
",ae+='
',ae+='

',ae+='

",ae+='
',ae+='
',ae+='
    ',ae+='
  • Fleshy Belly: '+(Io?'Yes':'No')+"
  • ",ae+='
  • Internal Loop: '+(br?'Yes':'No')+"
  • ",ae+='
  • Use Fancy Sounds: '+(xn?'Yes':'No')+"
  • ",ae+='
  • Vore Sound: '+pn+"
  • ",ae+='
  • Release Sound: '+sr+"
  • ",ae+="
",ae+="
",ae+='
',ae+='

',ae+='

",ae+='
",ae+='
',ae+="Vore FX",ae+='
    ',ae+='
  • Disable Prey HUD: '+(Or?'Yes':'No')+"
  • ",ae+="
",ae+="
",ae+='
',ae+='

',ae+='

",ae+='
',ae+='
',ae+="Belly Interactions ("+(_o?'Enabled':'Disabled')+")",ae+='
    ',ae+='
  • Escape Chance: '+ni+"%
  • ",ae+='
  • Escape Chance: '+ri+"%
  • ",ae+='
  • Escape Time: '+oi/10+"s
  • ",ae+='
  • Transfer Chance: '+An+"%
  • ",ae+='
  • Transfer Location: '+na+"
  • ",ae+='
  • Secondary Transfer Chance: '+ra+"%
  • ",ae+='
  • Secondary Transfer Location: '+ai+"
  • ",ae+='
  • Absorb Chance: '+oa+"%
  • ",ae+='
  • Digest Chance: '+aa+"%
  • ",ae+="
",ae+="
",ae+="
",ae},m=function(){var c=new Date,d=String(c.getHours());d.length<2&&(d="0"+d);var p=String(c.getMinutes());p.length<2&&(p="0"+p);var C=String(c.getDate());C.length<2&&(C="0"+C);var j=String(c.getMonth()+1);j.length<2&&(j="0"+j);var b=String(c.getFullYear());return" "+b+"-"+j+"-"+C+" ("+d+" "+p+")"},v=function(c){var d=(0,s.Oc)(),p=d.act,C=d.data,j=C.db_version,b=C.db_repo,I=C.mob_name,O=C.bellies,_=m(),M=I+_+c,D;if(c===".html"){var A="";D=new Blob([''+O.length+" Exported Bellies (DB_VER: "+b+"-"+j+')'+A+'

Bellies of '+I+'

Generated on: '+_+'

'],{type:"text/html;charset=utf8"}),O.forEach(function(R,K){D=new Blob([D,f(R,K)],{type:"text/html;charset=utf8"})}),D=new Blob([D,"
",'