From ff22619e809a638c9a15ec674b543fa1f88bc472 Mon Sep 17 00:00:00 2001 From: Casey Date: Sun, 31 Jul 2022 05:22:48 -0400 Subject: [PATCH 1/4] Selective bellymode now selectable and pref-adjustible --- code/__defines/belly_modes_vr.dm | 1 + .../living/simple_mob/subtypes/vore/vore.dm | 28 +++++++++++++ code/modules/vore/eating/belly_obj_vr.dm | 5 ++- .../vore/eating/bellymodes_datum_vr.dm | 40 +++++++++++++++++++ code/modules/vore/eating/living_vr.dm | 7 ++++ code/modules/vore/eating/vore_vr.dm | 6 +++ code/modules/vore/eating/vorepanel_vr.dm | 15 +++++++ code/modules/vore/mouseray.dm | 1 + tgui/packages/tgui/interfaces/VorePanel.js | 11 +++++ 9 files changed, 113 insertions(+), 1 deletion(-) diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 2d5ba3e308..2218b37836 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -1,4 +1,5 @@ // Normal digestion modes +#define DM_DEFAULT "Default" // Not a real bellymode, used for handling on 'selective' bellymode prefs. #define DM_HOLD "Hold" #define DM_HOLD_ABSORBED "Hold Absorbed" // Not a real bellymode, used for handling different idle messages for absorbed prey. #define DM_DIGEST "Digest" 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 706031ce78..d956987d99 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -11,6 +11,34 @@ verbs |= /mob/living/simple_mob/proc/set_name verbs |= /mob/living/simple_mob/proc/set_desc +<<<<<<< HEAD +======= + ooc_notes = client.prefs.metadata + digestable = client.prefs_vr.digestable + devourable = client.prefs_vr.devourable + absorbable = client.prefs_vr.absorbable + 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 + allow_inbelly_spawning = client.prefs_vr.allow_inbelly_spawning + allow_spontaneous_tf = client.prefs_vr.allow_spontaneous_tf + digest_leave_remains = client.prefs_vr.digest_leave_remains + allowmobvore = client.prefs_vr.allowmobvore + permit_healbelly = client.prefs_vr.permit_healbelly + noisy = client.prefs_vr.noisy + selective_preference = client.prefs_vr.selective_preference + + drop_vore = client.prefs_vr.drop_vore + stumble_vore = client.prefs_vr.stumble_vore + slip_vore = client.prefs_vr.slip_vore + + resizable = client.prefs_vr.resizable + show_vore_fx = client.prefs_vr.show_vore_fx + step_mechanics_pref = client.prefs_vr.step_mechanics_pref + pickup_pref = client.prefs_vr.pickup_pref + + +>>>>>>> 7550df1e26... Merge pull request #13406 from Heroman3003/selective-upgrade /mob/living/simple_mob/proc/set_name() set name = "Set Name" set desc = "Sets your mobs name. You only get to do this once." diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index e649c937e0..ba1d2cd566 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -50,6 +50,7 @@ var/emote_time = 60 // How long between stomach emotes at prey (in seconds) var/emote_active = TRUE // Are we even giving emotes out at all or not? var/next_emote = 0 // When we're supposed to print our next emote, as a world.time + var/selective_preference = DM_DIGEST // Which type of selective bellymode do we default to? // Generally just used by AI var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location @@ -62,7 +63,7 @@ //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere. //Actual full digest modes - var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) + var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_SELECT,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) //Digest mode addon flags var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY) //Item related modes @@ -204,6 +205,7 @@ "emote_lists", "emote_time", "emote_active", + "selective_preference", "mode_flags", "item_digest_mode", "contaminates", @@ -1221,6 +1223,7 @@ dupe.egg_type = egg_type dupe.emote_time = emote_time dupe.emote_active = emote_active + dupe.selective_preference = selective_preference dupe.save_digest_mode = save_digest_mode //// Object-holding variables diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index b378cdfd47..f0412bb8cc 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -242,3 +242,43 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.ownegg = null return list("to_update" = TRUE) return +<<<<<<< HEAD +======= + +/datum/digest_mode/selective //unselectable, "smart" digestion mode for mobs only + id = DM_SELECT + +/datum/digest_mode/selective/process_mob(obj/belly/B, mob/living/L) + var/datum/digest_mode/tempmode = GLOB.digest_modes[DM_HOLD] // Default to Hold in case of big oof fallback + //if not absorbed, see if they're food + switch(L.selective_preference) // First, we respect prey prefs + if(DM_DIGEST) + if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // They want to be digested and can be, Digest + else + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be digested but can't be! Drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // They want to be absorbed and can be. Absorb. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be absorbed but can't be! Drain. + if(DM_DRAIN) + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be drained. Drain. + if(DM_DEFAULT) + switch(B.selective_preference) // They don't actually care? Time for our own preference. + if(DM_DIGEST) + if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // We prefer digestion and they're digestible? Digest + else if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // If not digestible, are they absorbable? Then absorb. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // We prefer absorption and they're absorbable? Absorb. + else if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // If not absorbable, are they digestible? Then digest. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain. + return tempmode.process_mob(B, L) +>>>>>>> 7550df1e26... Merge pull request #13406 from Heroman3003/selective-upgrade diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 24894172db..4c30ab5eb6 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -44,9 +44,13 @@ var/adminbus_eat_minerals = FALSE // This creature subsists on a diet of pure adminium. var/vis_height = 32 // Sprite height used for resize features. var/show_vore_fx = TRUE // Show belly fullscreens +<<<<<<< HEAD var/latejoin_vore = FALSE //CHOMPedit: If enabled, latejoiners can spawn into this, assuming they have a client var/latejoin_prey = FALSE //CHOMPedit: If enabled, latejoiners can spawn ontop of and instantly eat the victim var/noisy_full = FALSE //CHOMPedit: Enables belching when a mob has overeaten +======= + var/selective_preference = DM_DEFAULT // Preference for selective bellymode +>>>>>>> 7550df1e26... Merge pull request #13406 from Heroman3003/selective-upgrade var/regen_sounds = list( 'sound/effects/mob_effects/xenochimera/regen_1.ogg', 'sound/effects/mob_effects/xenochimera/regen_2.ogg', @@ -266,6 +270,7 @@ P.vore_smell = src.vore_smell P.permit_healbelly = src.permit_healbelly P.noisy = src.noisy + P.selective_preference = src.selective_preference P.show_vore_fx = src.show_vore_fx P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred @@ -316,6 +321,7 @@ vore_taste = P.vore_taste vore_smell = P.vore_smell permit_healbelly = P.permit_healbelly + selective_preference = P.selective_preference noisy = P.noisy show_vore_fx = P.show_vore_fx can_be_drop_prey = P.can_be_drop_prey @@ -1039,6 +1045,7 @@ dispvoreprefs += "Leaves Remains: [digest_leave_remains ? "Enabled" : "Disabled"]
" dispvoreprefs += "Mob Vore: [allowmobvore ? "Enabled" : "Disabled"]
" dispvoreprefs += "Healbelly permission: [permit_healbelly ? "Allowed" : "Disallowed"]
" + dispvoreprefs += "Selective Mode Pref: [src.selective_preference]
" dispvoreprefs += "Spontaneous vore prey: [can_be_drop_prey ? "Enabled" : "Disabled"]
" dispvoreprefs += "Spontaneous vore pred: [can_be_drop_pred ? "Enabled" : "Disabled"]
" dispvoreprefs += "Late join spawn point belly: [latejoin_vore ? "Enabled" : "Disabled"]
" //CHOMPstation edit diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 72b4349096..1cc9bb8072 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -77,6 +77,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" + var/selective_preference = DM_DEFAULT + var/nutrition_message_visible = TRUE var/list/nutrition_messages = list( @@ -180,6 +182,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE vore_smell = json_from_file["vore_smell"] permit_healbelly = json_from_file["permit_healbelly"] noisy = json_from_file["noisy"] + selective_preference = json_from_file["selective_preference"] 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"] @@ -221,6 +224,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE allowmobvore = TRUE if(isnull(permit_healbelly)) permit_healbelly = TRUE + if(isnull(selective_preference)) + selective_preference = DM_DEFAULT if (isnull(noisy)) noisy = FALSE if(isnull(show_vore_fx)) @@ -304,6 +309,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "vore_smell" = vore_smell, "permit_healbelly" = permit_healbelly, "noisy" = noisy, + "selective_preference" = selective_preference, "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, "can_be_drop_pred" = can_be_drop_pred, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 68732e3421..e79ddf9b2d 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -191,6 +191,7 @@ "shrink_grow_size" = selected.shrink_grow_size, "emote_time" = selected.emote_time, "emote_active" = selected.emote_active, + "selective_preference" = selected.selective_preference, "nutrition_ex" = host.nutrition_message_visible, "weight_ex" = host.weight_message_visible, "belly_fullscreen" = selected.belly_fullscreen, @@ -586,6 +587,14 @@ host.stumble_vore = !host.stumble_vore 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)) + host.selective_preference = DM_DEFAULT + if(host.client.prefs_vr) + host.client.prefs_vr.selective_preference = host.selective_preference + unsaved_changes = TRUE + return TRUE if("toggle_nutrition_ex") host.nutrition_message_visible = !host.nutrition_message_visible unsaved_changes = TRUE @@ -1178,6 +1187,12 @@ if("b_emoteactive") host.vore_selected.emote_active = !host.vore_selected.emote_active . = TRUE + if("b_selective_mode_pref_toggle") + if(host.vore_selected.selective_preference == DM_DIGEST) + host.vore_selected.selective_preference = DM_ABSORB + else + host.vore_selected.selective_preference = DM_DIGEST + . = TRUE if("b_emotetime") var/new_time = tgui_input_number(user, "Choose the period it takes for idle belly emotes to be shown to prey. Measured in seconds, Minimum 1 minute, Maximum 10 minutes.", "Set Belly Emote Delay.", host.vore_selected.digest_brute, 600, 60) if(new_time == null) diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm index 9f6f98d1bc..6196210d69 100644 --- a/code/modules/vore/mouseray.dm +++ b/code/modules/vore/mouseray.dm @@ -229,6 +229,7 @@ new_mob.allowmobvore = allowmobvore new_mob.permit_healbelly = permit_healbelly new_mob.noisy = noisy + new_mob.selective_preference = selective_preference new_mob.drop_vore = drop_vore new_mob.stumble_vore = stumble_vore new_mob.slip_vore = slip_vore diff --git a/tgui/packages/tgui/interfaces/VorePanel.js b/tgui/packages/tgui/interfaces/VorePanel.js index f3a28cb2ce..2553868ca9 100644 --- a/tgui/packages/tgui/interfaces/VorePanel.js +++ b/tgui/packages/tgui/interfaces/VorePanel.js @@ -632,6 +632,7 @@ const VoreSelectedBellyOptions = (props, context) => { contaminate_flavor, contaminate_color, egg_type, + selective_preference, save_digest_mode, vorespawn_blacklist, } = belly; @@ -752,6 +753,12 @@ const VoreSelectedBellyOptions = (props, context) => { content={capitalize(egg_type)} /> + +