diff --git a/code/__defines/vore_prefs.dm b/code/__defines/vore_prefs.dm index c507d076b6d..28eed19fcd5 100644 --- a/code/__defines/vore_prefs.dm +++ b/code/__defines/vore_prefs.dm @@ -20,6 +20,8 @@ \ target.can_be_drop_prey = source.can_be_drop_prey; \ target.can_be_drop_pred = source.can_be_drop_pred; \ + target.can_be_afk_prey = source.can_be_afk_prey; \ + target.can_be_afk_pred = source.can_be_afk_pred; \ target.throw_vore = source.throw_vore; \ target.food_vore = source.food_vore; \ target.drop_vore = source.drop_vore; \ @@ -56,6 +58,7 @@ \ target.autotransferable = source.autotransferable; \ target.strip_pref = source.strip_pref; \ + target.contaminate_pref = source.contaminate_pref; \ target.vore_sprite_multiply = source.vore_sprite_multiply; \ target.vore_sprite_color = source.vore_sprite_color; \ target.belly_rub_target = source.belly_rub_target; \ diff --git a/code/_helpers/vore.dm b/code/_helpers/vore.dm index 84bb89af82f..77d88ff0646 100644 --- a/code/_helpers/vore.dm +++ b/code/_helpers/vore.dm @@ -17,6 +17,10 @@ return FALSE if(!pred.vore_selected) return FALSE + if(!pred.can_be_afk_pred && (!pred.client || pred.away_from_keyboard)) + return FALSE + if(!prey.can_be_afk_prey && (!prey.client || prey.away_from_keyboard)) + return FALSE return TRUE /// Basic spont vore check. 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 c829b4fefd8..6e1352176da 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -32,6 +32,8 @@ feeding = client.prefs_vr.feeding can_be_drop_prey = client.prefs_vr.can_be_drop_prey can_be_drop_pred = client.prefs_vr.can_be_drop_pred + can_be_afk_prey = client.prefs_vr.can_be_afk_prey + can_be_afk_pred = client.prefs_vr.can_be_afk_pred throw_vore = client.prefs_vr.throw_vore food_vore = client.prefs_vr.food_vore consume_liquid_belly = client.prefs_vr.consume_liquid_belly @@ -65,6 +67,7 @@ autotransferable = client.prefs_vr.autotransferable noisy_full = client.prefs_vr.noisy_full strip_pref = client.prefs_vr.strip_pref + contaminate_pref = client.prefs_vr.contaminate_pref vore_sprite_color = client.prefs_vr.vore_sprite_color vore_sprite_multiply = client.prefs_vr.vore_sprite_multiply no_latejoin_vore_warning = client.prefs_vr.no_latejoin_vore_warning diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index ed0814463e1..62b91cbb089 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -210,7 +210,7 @@ H.forced_psay = FALSE //Worn items flag - if(mode_flags & DM_FLAG_AFFECTWORN) + if((mode_flags & DM_FLAG_AFFECTWORN) && H.contaminate_pref) for(var/slot in slots) var/obj/item/I = H.get_equipped_item(slot = slot) if(I && I.canremove) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index fac4cbf526a..d7ae220ee34 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -1059,10 +1059,13 @@ dat += span_bold("Affected by temperature:") + " [allowtemp ? span_green("Enabled") : span_red("Disabled")]
" dat += span_bold("Autotransferable:") + " [autotransferable ? span_green("Enabled") : span_red("Disabled")]
" dat += span_bold("Can be stripped:") + " [strip_pref ? span_green("Allowed") : span_red("Disallowed")]
" + dat += span_bold("Worn items can be contaminated:") + " [contaminate_pref ? span_green("Allowed") : span_red("Disallowed")]
" dat += span_bold("Applying reagents:") + " [apply_reagents ? span_green("Allowed") : span_red("Disallowed")]
" dat += span_bold("Leaves Remains:") + " [digest_leave_remains ? span_green("Enabled") : span_red("Disabled")]
" - dat += span_bold("Spontaneous vore prey:") + " [can_be_drop_prey ? span_green("Enabled") : span_red("Disabled")]
" + dat += span_bold("Spontaneous vore prey:") + " [can_be_drop_prey ? span_green("Enabled") : span_red("Disabled")]
" + dat += span_bold("AFK/Disconnected vore prey:") + " [can_be_afk_prey ? span_green("Enabled") : span_red("Disabled")]
" dat += span_bold("Spontaneous vore pred:") + " [can_be_drop_pred ? span_green("Enabled") : span_red("Disabled")]
" + dat += span_bold("AFK/Disconnected vore pred:") + " [can_be_afk_pred ? span_green("Enabled") : span_red("Disabled")]
" if(can_be_drop_prey || can_be_drop_pred) dat += span_bold("Drop Vore:") + " [drop_vore ? span_green("Enabled") : span_red("Disabled")]
" dat += span_bold("Slip Vore:") + " [slip_vore ? span_green("Enabled") : span_red("Disabled")]
" diff --git a/code/modules/vore/eating/mob_vr.dm b/code/modules/vore/eating/mob_vr.dm index be5c0bea0e7..af2c079f179 100644 --- a/code/modules/vore/eating/mob_vr.dm +++ b/code/modules/vore/eating/mob_vr.dm @@ -23,6 +23,8 @@ var/digest_pain = TRUE var/can_be_drop_prey = FALSE var/can_be_drop_pred = FALSE + var/can_be_afk_prey = TRUE + var/can_be_afk_pred = TRUE var/allow_spontaneous_tf = FALSE // Obviously. var/show_vore_fx = TRUE // Show belly fullscreens var/selective_preference = DM_DEFAULT // Preference for selective bellymode @@ -80,6 +82,7 @@ var/noisy_full = FALSE //Enables belching when a mob has overeaten var/phase_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway var/strip_pref = TRUE //Enables the ability for worn items to be stripped + var/contaminate_pref = TRUE //Enables the ability for worn items to be digested/contaminated. var/no_latejoin_vore_warning = FALSE //Auto accepts pred spwan notifications (roundbased / saveable) var/no_latejoin_prey_warning = FALSE //Auto accepts prey spawn notifications (roundbased / saveable) var/no_latejoin_vore_warning_time = 15 //Time until accepting prey diff --git a/code/modules/vore/eating/panel_databackend/vorepanel_pref_data.dm b/code/modules/vore/eating/panel_databackend/vorepanel_pref_data.dm index 24333a13eb5..8fde893c2bf 100644 --- a/code/modules/vore/eating/panel_databackend/vorepanel_pref_data.dm +++ b/code/modules/vore/eating/panel_databackend/vorepanel_pref_data.dm @@ -12,6 +12,8 @@ "show_vore_fx" = owner.show_vore_fx, "can_be_drop_prey" = owner.can_be_drop_prey, "can_be_drop_pred" = owner.can_be_drop_pred, + "can_be_afk_prey" = owner.can_be_afk_prey, + "can_be_afk_pred" = owner.can_be_afk_pred, "latejoin_vore" = owner.latejoin_vore, "latejoin_prey" = owner.latejoin_prey, "no_spawnpred_warning" = owner.no_latejoin_vore_warning, @@ -24,6 +26,7 @@ "step_mechanics_active" = owner.step_mechanics_pref, "pickup_mechanics_active" = owner.pickup_pref, "strip_mechanics_active" = owner.strip_pref, + "contaminate_worn_items" = owner.contaminate_pref, "noisy" = owner.noisy, //liquid belly prefs "liq_rec" = owner.receive_reagents, diff --git a/code/modules/vore/eating/vore_procs.dm b/code/modules/vore/eating/vore_procs.dm index 728e027f16c..eaddfc5356c 100644 --- a/code/modules/vore/eating/vore_procs.dm +++ b/code/modules/vore/eating/vore_procs.dm @@ -186,4 +186,16 @@ if(prey.absorbed || pred.absorbed) to_chat(user, span_vwarning("They aren't aren't in a state to be devoured.")) return FALSE + if(!pred.can_be_afk_pred && (!pred.client || pred.away_from_keyboard)) + if(user == pred) + to_chat(user, span_vwarning("You aren't set as being able to pred while AFK")) + return FALSE + to_chat(user, span_vnotice("The predator prefers not to be fed while AFK")) + return FALSE + if(!prey.can_be_afk_prey && (!prey.client || prey.away_from_keyboard)) + if(user == prey) + to_chat(user, span_vwarning("You aren't set as being able to prey while AFK")) + return FALSE + to_chat(user, span_vnotice("The prey prefers not to be eaten while AFK")) + return FALSE return TRUE diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index bc8f3489a8c..c6e694519da 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -41,6 +41,8 @@ var/feeding = TRUE var/can_be_drop_prey = FALSE var/can_be_drop_pred = FALSE + var/can_be_afk_prey = FALSE + var/can_be_afk_pred = FALSE var/allow_spontaneous_tf = FALSE var/digest_leave_remains = FALSE var/allowmobvore = TRUE @@ -78,6 +80,7 @@ var/latejoin_prey = FALSE var/autotransferable = TRUE var/strip_pref = FALSE + var/contaminate_pref = TRUE var/no_latejoin_vore_warning = FALSE // Only load, when... no_latejoin_vore_warning_persists var/no_latejoin_prey_warning = FALSE // Only load, when... no_latejoin_vore_warning_persists var/no_latejoin_vore_warning_time = 15 // Only load, when... no_latejoin_vore_warning_persists @@ -203,6 +206,8 @@ show_vore_fx = json_from_file["show_vore_fx"] can_be_drop_prey = json_from_file["can_be_drop_prey"] can_be_drop_pred = json_from_file["can_be_drop_pred"] + can_be_afk_prey = json_from_file["can_be_afk_prey"] + can_be_afk_pred = json_from_file["can_be_afk_pred"] allow_spontaneous_tf = json_from_file["allow_spontaneous_tf"] step_mechanics_pref = json_from_file["step_mechanics_pref"] pickup_pref = json_from_file["pickup_pref"] @@ -234,6 +239,7 @@ autotransferable = json_from_file["autotransferable"] vore_sprite_multiply = json_from_file["vore_sprite_multiply"] strip_pref = json_from_file["strip_pref"] + contaminate_pref = json_from_file["contaminate_pref"] no_latejoin_vore_warning_persists = json_from_file["no_latejoin_vore_warning_persists"] if(no_latejoin_vore_warning_persists) @@ -278,6 +284,10 @@ can_be_drop_prey = FALSE if(isnull(can_be_drop_pred)) can_be_drop_pred = FALSE + if(isnull(can_be_afk_prey)) + can_be_afk_prey = FALSE + if(isnull(can_be_afk_pred)) + can_be_afk_pred = FALSE if(isnull(allow_spontaneous_tf)) allow_spontaneous_tf = FALSE if(isnull(step_mechanics_pref)) @@ -363,6 +373,8 @@ vore_sprite_multiply = list("stomach" = FALSE, "taur belly" = FALSE) if(isnull(strip_pref)) strip_pref = TRUE + if(isnull(contaminate_pref)) + contaminate_pref = TRUE if(isnull(no_latejoin_vore_warning)) no_latejoin_vore_warning = FALSE if(isnull(no_latejoin_prey_warning)) @@ -410,6 +422,8 @@ "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, "can_be_drop_pred" = can_be_drop_pred, + "can_be_afk_prey" = can_be_afk_prey, + "can_be_afk_pred" = can_be_afk_pred, "latejoin_vore" = latejoin_vore, "latejoin_prey" = latejoin_prey, "allow_spontaneous_tf" = allow_spontaneous_tf, @@ -437,6 +451,7 @@ "allow_mimicry" = allow_mimicry, "vore_sprite_multiply" = vore_sprite_multiply, "strip_pref" = strip_pref, + "contaminate_pref" = contaminate_pref, "no_latejoin_vore_warning" = no_latejoin_vore_warning, "no_latejoin_prey_warning" = no_latejoin_prey_warning, "no_latejoin_vore_warning_time" = no_latejoin_vore_warning_time, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 8bd72ab4d35..24cec3f5cf6 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -392,6 +392,18 @@ host.client.prefs_vr.can_be_drop_prey = host.can_be_drop_prey unsaved_changes = TRUE return TRUE + if("toggle_afk_pred") + host.can_be_afk_pred = !host.can_be_afk_pred + if(host.client.prefs_vr) + host.client.prefs_vr.can_be_afk_pred = host.can_be_afk_pred + unsaved_changes = TRUE + return TRUE + if("toggle_afk_prey") + host.can_be_afk_prey = !host.can_be_afk_prey + if(host.client.prefs_vr) + host.client.prefs_vr.can_be_afk_prey = host.can_be_afk_prey + unsaved_changes = TRUE + return TRUE if("toggle_latejoin_vore") host.latejoin_vore = !host.latejoin_vore if(host.client.prefs_vr) @@ -494,6 +506,12 @@ host.client.prefs_vr.strip_pref = host.strip_pref unsaved_changes = TRUE return TRUE + if("toggle_contaminate_pref") + host.contaminate_pref = !host.contaminate_pref + if(host.client.prefs_vr) + host.client.prefs_vr.contaminate_pref = host.contaminate_pref + unsaved_changes = TRUE + return TRUE if("toggle_allow_mind_transfer") host.allow_mind_transfer = !host.allow_mind_transfer if(host.client.prefs_vr) diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx index 679df1b4954..dc51f21bd3c 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx @@ -21,6 +21,8 @@ export const VoreUserPreferences = (props: { prefs: prefData }) => { permit_healbelly, can_be_drop_prey, can_be_drop_pred, + can_be_afk_prey, + can_be_afk_pred, drop_vore, slip_vore, stumble_vore, @@ -43,6 +45,7 @@ export const VoreUserPreferences = (props: { prefs: prefData }) => { vore_death_privacy, allow_mimicry, strip_mechanics_active, + contaminate_worn_items, autotransferable, liq_rec, liq_giv, @@ -187,6 +190,36 @@ export const VoreUserPreferences = (props: { prefs: prefData }) => { disabled: 'Spontaneous Pred Disabled', }, }, + afk_prey: { + action: 'toggle_afk_prey', + test: can_be_afk_prey, + tooltip: { + main: + 'This toggle is for vore interactions as prey while you' + + ' are disconnected or inactive for a period of time.', + enable: 'Click here to allow being AFK prey.', + disable: 'Click here to prevent being AFK prey.', + }, + content: { + enabled: 'AFK Prey Enabled', + disabled: 'AFK Prey Disabled', + }, + }, + afk_pred: { + action: 'toggle_afk_pred', + test: can_be_afk_pred, + tooltip: { + main: + 'This toggle is for vore interactions as pred while you' + + ' are disconnected or inactive for a period of time.', + enable: 'Click here to allow being AFK pred.', + disable: 'Click here to prevent being AFK pred.', + }, + content: { + enabled: 'AFK Pred Enabled', + disabled: 'AFK Pred Disabled', + }, + }, toggle_drop_vore: { action: 'toggle_drop_vore', test: drop_vore, @@ -487,6 +520,23 @@ export const VoreUserPreferences = (props: { prefs: prefData }) => { disabled: 'Do Not Allow Worn Item Stripping', }, }, + contaminatepref: { + action: 'toggle_contaminate_pref', + test: contaminate_worn_items, + tooltip: { + main: '', + enable: + 'Regardless of Predator Setting, items worn by you will not be digested/contaminated inside their bellies.' + + ' Click this to allow worn item digestion/contamination.', + disable: + 'Your Predator must have this setting enabled in their belly modes to allow contaminating/digesting your worn gear,' + + ' if they do not, they will not contaminate/digest your gear, even with this on. Click to disable contamination/digestion.', + }, + content: { + enabled: 'Allow Worn Item Digestion/Contamination', + disabled: 'Do Not Allow Worn Item Digestion/Contamination', + }, + }, eating_privacy_global: { action: 'toggle_global_privacy', test: eating_privacy_global, diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx index 9ddd2a4c1dd..f6ecf97a44a 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx @@ -77,28 +77,40 @@ export const VoreUserPreferencesDevouring = (props: { + + + + + + ) : ( '' diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx index bb4e4ef97d9..68dc8350ac0 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx @@ -89,12 +89,18 @@ export const VoreUserPreferencesMechanical = (props: { tooltipPosition="right" /> - + + + + ); diff --git a/tgui/packages/tgui/interfaces/VorePanel/types.ts b/tgui/packages/tgui/interfaces/VorePanel/types.ts index b22f0c4d58e..e2b1d46c508 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/types.ts +++ b/tgui/packages/tgui/interfaces/VorePanel/types.ts @@ -310,6 +310,8 @@ export type prefData = { show_vore_fx: BooleanLike; can_be_drop_prey: BooleanLike; can_be_drop_pred: BooleanLike; + can_be_afk_prey: BooleanLike; + can_be_afk_pred: BooleanLike; latejoin_vore: BooleanLike; latejoin_prey: BooleanLike; no_spawnpred_warning: BooleanLike; @@ -322,6 +324,7 @@ export type prefData = { step_mechanics_active: BooleanLike; pickup_mechanics_active: BooleanLike; strip_mechanics_active: BooleanLike; + contaminate_worn_items: BooleanLike; noisy: BooleanLike; liq_rec: BooleanLike; liq_giv: BooleanLike; @@ -425,6 +428,8 @@ export type localPrefs = { healbelly: preferenceData; dropnom_prey: preferenceData; dropnom_pred: preferenceData; + afk_prey: preferenceData; + afk_pred: preferenceData; toggle_drop_vore: preferenceData; toggle_slip_vore: preferenceData; toggle_stumble_vore: preferenceData; @@ -444,6 +449,7 @@ export type localPrefs = { spontaneous_tf: preferenceData; mind_transfer: preferenceData; strippref: preferenceData; + contaminatepref: preferenceData; eating_privacy_global: preferenceData; vore_death_privacy: preferenceData; allow_mimicry: preferenceData;