From 31c4ccf06493263e30ef77281fe92c06629a938b Mon Sep 17 00:00:00 2001 From: Olive <49600480+zeskorion@users.noreply.github.com> Date: Mon, 29 Dec 2025 18:15:26 -0800 Subject: [PATCH] Adds the "absorbed prey can devour" addon (#18906) * we gots this * removes verb implementation * no clue why that was such a mess * clean up the rest * implementation * cleanup * . * hide it otherwise * quick fix * missing stackitem --------- Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> --- code/__defines/belly_modes_vr.dm | 1 + code/__defines/traits.dm | 1 + .../carbon/human/species/shadekin/shadekin.dm | 1 - .../station/station_special_abilities.dm | 47 ++++ code/modules/vore/eating/belly_obj_vr.dm | 2 +- code/modules/vore/eating/bellymodes_vr.dm | 28 +-- .../panel_databackend/vorepanel_vore_data.dm | 124 +++++----- code/modules/vore/eating/vorepanel_vr.dm | 23 ++ .../VorePanelEditCheckboxes.tsx | 4 +- .../VoreUserPreferenceItem.tsx | 4 +- .../VorePanelMainTabs/VoreAbilities.tsx | 4 +- .../VoreBellySelectionAndCustomization.tsx | 10 +- .../VorePanelMainTabs/VoreInsidePanel.tsx | 4 +- .../VorePanelMainTabs/VoreSelectedBelly.tsx | 6 +- .../VorePanelMainTabs/VoreSoulcatcher.tsx | 8 +- .../VorePanelMainTabs/VoreUserGeneral.tsx | 6 +- .../VorePanelMainTabs/VoreUserPreferences.tsx | 6 +- .../VoreSelectedBellyDescriptionMatrix.tsx | 4 +- .../InteractionTab/AutoTransferOptions.tsx | 4 +- .../LiquidTab/LiquidOptionsLeft.tsx | 4 +- .../LiquidTab/LiquidOptionsRight.tsx | 4 +- .../OptionTab/BellyOptionsLeft.tsx | 4 +- .../OptionTab/BellyOptionsRight.tsx | 4 +- .../VisualTab/BellyFullscreenPreview.tsx | 2 + .../VoreSelectedMobTypeBellyButtons.tsx | 6 +- .../VisualTab/VoreSpriteAffect.tsx | 6 +- .../VoreContentsPanel.tsx | 9 +- .../VoreContentsPreyPanel.tsx | 57 +++++ .../VoreSelectedBellyControls.tsx | 4 +- .../VoreSelectedBellyDescriptions.tsx | 4 +- .../VoreSelectedBellyInteractions.tsx | 4 +- .../VoreSelectedBellyLiquidOptions.tsx | 4 +- .../VoreSelectedBellyOptions.tsx | 4 +- .../VoreSelectedBellySounds.tsx | 4 +- .../VoreSelectedBellyVisuals.tsx | 6 +- .../VoreUserPreferencesAesthetic.tsx | 6 +- .../VoreUserPreferencesDevouring.tsx | 14 +- .../VoreUserPreferencesFX.tsx | 4 +- .../VoreUserPreferencesMechanical.tsx | 4 +- .../VoreUserPreferencesSoulcatcher.tsx | 4 +- .../VoreUserPreferencesSpawn.tsx | 4 +- .../VoreUserPreferencesSpontaneous.tsx | 4 +- .../tgui/interfaces/VorePanel/constants.ts | 12 +- .../tgui/interfaces/VorePanel/index.tsx | 25 +-- .../tgui/interfaces/VorePanel/types.ts | 212 +++++++++--------- 45 files changed, 427 insertions(+), 275 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPreyPanel.tsx diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 246b9720d8c..afaaa65945d 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -25,6 +25,7 @@ #define DM_FLAG_SLOWBODY 0x100 #define DM_FLAG_MUFFLEITEMS 0x200 #define DM_FLAG_TURBOMODE 0x400 +#define DM_FLAG_ABSORBEDVORE 0x800 //Item related modes #define IM_HOLD "Hold" diff --git a/code/__defines/traits.dm b/code/__defines/traits.dm index 4011c312779..4dc4784d0a8 100644 --- a/code/__defines/traits.dm +++ b/code/__defines/traits.dm @@ -215,5 +215,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define STRONG_IMMUNITY_TRAIT "strongimmunity" #define SLIP_REFLEX_TRAIT "slip_reflex" + #define ORGANICS 1 #define SYNTHETICS 2 diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm index 856dc487dab..fdaedd2ccad 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm @@ -181,7 +181,6 @@ H.muffled = FALSE H.forced_psay = FALSE - addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living, can_leave_dark)), 5 MINUTES, TIMER_DELETE_ME) else H.add_modifier(/datum/modifier/dark_respite, 25 MINUTES) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm index 9f7ed7fd3b8..82c7d5757c0 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities.dm @@ -1364,3 +1364,50 @@ var/eggs = 0 src.visible_message(span_infoplain(span_red("[src] sinks their stinger into [T]!"))) T.bloodstr.add_reagent(REAGENT_ID_CONDENSEDCAPSAICINV,3) last_special = world.time + (5 SECONDS) // Many little jabs instead of one big one + +/mob/living/proc/absorb_devour() + if(!absorbed || !isbelly(loc)) + return + if(!isliving(loc.loc)) + return + var/mob/living/pred = loc.loc + var/obj/belly/belly = loc + var/list/targets = list() + for(var/mob/living/potentialtarget in range(1, pred)) + if(!isliving(potentialtarget)) //Don't eat anything that isn't mob/living. Failsafe. + continue + if(potentialtarget == pred) + continue + if(potentialtarget.devourable) + targets += potentialtarget + if(!(targets.len)) + to_chat(src, span_notice("No eligible targets found.")) + return + var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets) + if(!absorbed || !isbelly(loc)) + return + if(!isliving(loc.loc)) + return + if(!target) + return + if(!isliving(target)) //Safety. + to_chat(src, span_warning("You need to select a living target!")) + return + if (get_dist(src,target) >= 2) + to_chat(src, span_warning("You need to be closer to do that.")) + return + target.visible_message(span_vnotice("\The [pred]'s [belly] seems interested in \the [target]."),\ + span_vwarning("\The [pred]'s [belly] threatens to [lowertext(belly.vore_verb)] you!")) + to_chat(pred, span_vnotice("Your [belly] tries to [lowertext(belly.vore_verb)] \the [target].")) //people who want this will often be unaware pred players, so I'm making the warning a bit smaller text for them + to_chat(pred, span_vwarning("You look for a chance to [lowertext(belly.vore_verb)] \the [target].")) + var/starting_loc = target.loc + if(do_after(src, 5 SECONDS, target)) + if(target.loc != starting_loc) + to_chat(src, span_notice("\The [target] is no longer within reach.")) + return + if(target.buckled) + target.buckled.unbuckle_mob() + to_chat(src, span_vwarning("You manage to [lowertext(belly.vore_verb)] \the [target]!")) + to_chat(pred, span_vnotice("Your [belly] manages to [lowertext(belly.vore_verb)] \the [target].")) + to_chat(target, span_vwarning("You are [lowertext(belly.vore_verb)]ed by \The [pred]'s [belly]!")) + return pred.begin_instant_nom(src, target, pred, belly, FALSE) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 642d5acb5f3..a7abbe2a260 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -127,7 +127,7 @@ //Actual full digest modes 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, "Spare Prosthetics" = DM_FLAG_SPARELIMB, "Slow Body Digestion" = DM_FLAG_SLOWBODY, "Muffle Items" = DM_FLAG_MUFFLEITEMS, "TURBO MODE" = DM_FLAG_TURBOMODE) + 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, "Spare Prosthetics" = DM_FLAG_SPARELIMB, "Slow Body Digestion" = DM_FLAG_SLOWBODY, "Muffle Items" = DM_FLAG_MUFFLEITEMS, "TURBO MODE" = DM_FLAG_TURBOMODE, "Absorbed prey can devour" = DM_FLAG_ABSORBEDVORE) //Item related modes var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST,IM_DIGEST_PARALLEL) //drain modes diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 62b91cbb089..9a9a2058151 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -186,6 +186,20 @@ if(L.absorbed && !issilicon(L)) L.Weaken(5) + //Thickbelly flag + if((mode_flags & DM_FLAG_THICKBELLY) && !L.muffled) + L.muffled = TRUE + //Fix muffled sometimes being sticky. + else if(!(mode_flags & DM_FLAG_THICKBELLY) && L.muffled) + L.muffled = FALSE + + //Force psay + if((mode_flags & DM_FLAG_FORCEPSAY) && !L.forced_psay && L.absorbed) + L.forced_psay = TRUE + //Fix forcepsay sometimes being sticky. + else if(!(mode_flags & DM_FLAG_FORCEPSAY) && L.forced_psay) + L.forced_psay = FALSE + //Handle 'human' if(ishuman(L)) var/mob/living/carbon/human/H = L @@ -195,20 +209,6 @@ if(H.bloodstr.get_reagent_amount(REAGENT_ID_NUMBENZYME) < 2) H.bloodstr.add_reagent(REAGENT_ID_NUMBENZYME,4) - //Thickbelly flag - if((mode_flags & DM_FLAG_THICKBELLY) && !H.muffled) - H.muffled = TRUE - //Fix muffled sometimes being sticky. - else if(!(mode_flags & DM_FLAG_THICKBELLY) && H.muffled) - H.muffled = FALSE - - //Force psay - if((mode_flags & DM_FLAG_FORCEPSAY) && !H.forced_psay && H.absorbed) - H.forced_psay = TRUE - //Fix forcepsay sometimes being sticky. - else if(!(mode_flags & DM_FLAG_FORCEPSAY) && H.forced_psay) - H.forced_psay = FALSE - //Worn items flag if((mode_flags & DM_FLAG_AFFECTWORN) && H.contaminate_pref) for(var/slot in slots) diff --git a/code/modules/vore/eating/panel_databackend/vorepanel_vore_data.dm b/code/modules/vore/eating/panel_databackend/vorepanel_vore_data.dm index 5071ea702f5..d2e1e3e230b 100644 --- a/code/modules/vore/eating/panel_databackend/vorepanel_vore_data.dm +++ b/code/modules/vore/eating/panel_databackend/vorepanel_vore_data.dm @@ -28,70 +28,86 @@ /datum/vore_look/proc/get_inside_data(mob/owner) var/atom/hostloc = owner.loc - //Allow VorePanel to show pred belly details even while indirectly inside + // Allow VorePanel to show pred belly details even while indirectly inside if(isliving(owner)) var/mob/living/H = owner hostloc = H.surrounding_belly() - //End of indirect vorefx additions + if(!isbelly(hostloc)) + return list() + var/list/inside = list() - if(isbelly(hostloc)) - var/obj/belly/inside_belly = hostloc - var/mob/living/pred = inside_belly.owner + var/obj/belly/inside_belly = hostloc + var/mob/living/pred = inside_belly.owner - var/inside_desc = "No description." - if(owner.absorbed && inside_belly.absorbed_desc) - inside_desc = inside_belly.absorbed_desc - else if(inside_belly.desc) - inside_desc = inside_belly.desc + var/inside_desc = "No description." + if(owner.absorbed && inside_belly.absorbed_desc) + inside_desc = inside_belly.absorbed_desc + else if(inside_belly.desc) + inside_desc = inside_belly.desc - if(inside_desc != "No description.") - inside_desc = inside_belly.belly_format_string(inside_desc, owner, use_first_only = TRUE) + if(inside_desc != "No description.") + inside_desc = inside_belly.belly_format_string(inside_desc, owner, use_first_only = TRUE) - inside = list( - "absorbed" = owner.absorbed, - "belly_name" = inside_belly.name, - "belly_mode" = inside_belly.digest_mode, - "desc" = inside_desc, - "pred" = pred, - "ref" = "\ref[inside_belly]", - "liq_lvl" = inside_belly.reagents.total_volume, - "liq_reagent_type" = inside_belly.reagent_chosen, - "liuq_name" = inside_belly.reagent_name, + inside = list( + "absorbed" = owner.absorbed, + "belly_name" = inside_belly.name, + "belly_mode" = inside_belly.digest_mode, + "desc" = inside_desc, + "pred" = pred, + "ref" = "\ref[inside_belly]", + "liq_lvl" = inside_belly.reagents.total_volume, + "liq_reagent_type" = inside_belly.reagent_chosen, + "liuq_name" = inside_belly.reagent_name, + ) + + var/list/inside_contents = list() + for(var/atom/movable/O in inside_belly) + if(O == owner) + continue + var/our_type + if(isliving(O)) + our_type = "Living" + else if(isitem(O)) + our_type = "Item" + + var/list/info = list( + "name" = "[O]", + "absorbed" = FALSE, + "stat" = 0, + "ref" = "\ref[O]", + "outside" = FALSE, + "our_type" = our_type ) - - var/list/inside_contents = list() - for(var/atom/movable/O in inside_belly) - if(O == owner) - continue - var/our_type - if(isliving(O)) - our_type = "Living" - else if(isitem(O)) - our_type = "Item" - - var/list/info = list( - "name" = "[O]", - "absorbed" = FALSE, - "stat" = 0, - "ref" = "\ref[O]", - "outside" = FALSE, - "our_type" = our_type - ) - if(show_pictures) //disables icon mode - if(inside_belly.contents.len <= max_icon_content) - icon_overflow = FALSE - info["icon"] = cached_nom_icon(O) - else - icon_overflow = TRUE - if(isliving(O)) - var/mob/living/M = O - info["stat"] = M.stat - if(M.absorbed) - info["absorbed"] = TRUE - UNTYPED_LIST_ADD(inside_contents, info) - inside["contents"] = inside_contents + if(show_pictures) //disables icon mode + if(inside_belly.contents.len <= max_icon_content) + icon_overflow = FALSE + info["icon"] = cached_nom_icon(O) + else + icon_overflow = TRUE + if(isliving(O)) + var/mob/living/M = O + info["stat"] = M.stat + if(M.absorbed) + info["absorbed"] = TRUE + UNTYPED_LIST_ADD(inside_contents, info) + inside["contents"] = inside_contents return inside +/datum/vore_look/proc/get_prey_abilities(mob/owner) + var/atom/hostloc = owner.loc + // Allow VorePanel to show pred belly details even while indirectly inside + if(isliving(owner)) + var/mob/living/H = owner + hostloc = H.surrounding_belly() + if(!isbelly(hostloc)) + return list() + + var/obj/belly/inside_belly = hostloc + var/list/abilities = list() + if(inside_belly.mode_flags & DM_FLAG_ABSORBEDVORE) + UNTYPED_LIST_ADD(abilities, list("name" = "devour_as_absorbed", "available" = owner.absorbed)) + return abilities + /datum/vore_look/proc/get_host_mobtype(mob/owner) var/list/host_mobtype = list("is_cyborg" = FALSE, "is_vore_simple_mob" = FALSE) if(isrobot(owner)) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index fae69b4bc0f..7e55a962c90 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -133,6 +133,7 @@ data["host_mobtype"] = null data["show_pictures"] = null data["icon_overflow"] = null + data["prey_abilities"] = null data["our_bellies"] = null data["selected"] = null data["soulcatcher"] = null @@ -159,6 +160,7 @@ // Content Data data["show_pictures"] = show_pictures data["icon_overflow"] = icon_overflow + data["prey_abilities"] = get_prey_abilities(host) if(SOULCATCHER_TAB) // Soulcatcher and abilities @@ -237,6 +239,11 @@ host.persistend_edit_mode = !host.persistend_edit_mode return TRUE + if("prey_ability") + if(!isliving(ui.user)) + return FALSE + return perform_prey_ability(ui.user, params) + // Host is inside someone else, and is trying to interact with something else inside that person. if("pick_from_inside") return pick_from_inside(ui.user, params) @@ -1361,6 +1368,22 @@ to_chat(user, span_vwarning("\The [target] is currently [condition], they will not be able to [condition_consequences].")) return FALSE +/datum/vore_look/proc/perform_prey_ability(mob/living/user, params) + var/obj/belly/OB = locate(params["belly"]) + + if(!(user in OB)) + return TRUE // Aren't here anymore, need to update menu + + var/ability = params["ability"] + if(!(ability in list("devour_as_absorbed"))) + return FALSE + + switch(ability) + if("devour_as_absorbed") + user.absorb_devour() + + return TRUE + /datum/vore_look/proc/sanitize_fixed_list(var/list/messages, type, delim = "\n\n", limit) if(!limit) CRASH("[type] set message called without limit!") diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditCheckboxes.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditCheckboxes.tsx index 1e9a190c8c6..6650c10bd9c 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditCheckboxes.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelEditCheckboxes.tsx @@ -2,13 +2,13 @@ import type { ComponentProps } from 'react'; import { useBackend } from 'tgui/backend'; import { Box, Button, Floating, Stack, Tooltip } from 'tgui-core/components'; -import type { checkBoxEntry } from '../types'; +import type { CheckBoxEntry } from '../types'; export const VorePanelEditCheckboxes = (props: { /** Switch between Element editing and display */ editMode: boolean; /** Our option entry checboxes with labels and actiondata */ - options: checkBoxEntry[]; + options: CheckBoxEntry[]; /** Our backend action on text area blur */ action: string; /** Our secondary backend action on text area blur */ diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VoreUserPreferenceItem.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VoreUserPreferenceItem.tsx index 4414961860d..cb0fe42fdc3 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VoreUserPreferenceItem.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VoreUserPreferenceItem.tsx @@ -1,10 +1,10 @@ import { useBackend } from 'tgui/backend'; import { Button } from 'tgui-core/components'; -import type { preferenceData } from '../types'; +import type { PreferenceData } from '../types'; export const VoreUserPreferenceItem = (props: { - spec: preferenceData; + spec: PreferenceData; [rest: string]: any; }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreAbilities.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreAbilities.tsx index 9e667e4a155..810fb3b8eaf 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreAbilities.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreAbilities.tsx @@ -8,9 +8,9 @@ import { Stack, } from 'tgui-core/components'; import { abilitiy_usable } from '../functions'; -import type { abilities, abilitySizeChange } from '../types'; +import type { Abilities, abilitySizeChange } from '../types'; -export const VoreAbilities = (props: { abilities: abilities }) => { +export const VoreAbilities = (props: { abilities: Abilities }) => { const { abilities } = props; const { nutrition, size_change } = abilities; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx index 9a682a2fcd1..9868bc28f38 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreBellySelectionAndCustomization.tsx @@ -14,16 +14,16 @@ import type { BooleanLike } from 'tgui-core/react'; import { createSearch } from 'tgui-core/string'; import { digestModeToColor } from '../constants'; -import type { bellyData, hostMob, selectedData } from '../types'; +import type { BellyData, HostMob, SelectedData } from '../types'; import { VorePanelEditToggle } from '../VorePanelElements/VorePanelCommonElements'; import { VoreSelectedBelly } from './VoreSelectedBelly'; export const VoreBellySelectionAndCustomization = (props: { activeVoreTab?: number; - our_bellies: bellyData[]; - selected: selectedData | null; + our_bellies: BellyData[]; + selected: SelectedData | null; show_pictures: BooleanLike; - host_mobtype: hostMob; + host_mobtype: HostMob; icon_overflow: BooleanLike; vore_words: Record; toggleEditMode: React.Dispatch>; @@ -56,7 +56,7 @@ export const VoreBellySelectionAndCustomization = (props: { const bellySearch = createSearch( searchedBellies, - (belly: bellyData) => belly.name, + (belly: BellyData) => belly.name, ); const belliesToDisplay = our_bellies.filter(bellySearch); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx index b4145bbd70f..0c9875c7e2a 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx @@ -4,9 +4,9 @@ import { digestModeToPreyMode, reagentToColor, } from '../constants'; -import type { insideData } from '../types'; +import type { InsideData } from '../types'; -export const VoreInsidePanel = (props: { inside: insideData }) => { +export const VoreInsidePanel = (props: { inside: InsideData }) => { const { inside } = props; const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx index 9592767c68c..65488cec2fa 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx @@ -4,7 +4,7 @@ import { Section, Stack, Tabs } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; import { tabToNames } from '../constants'; -import type { DropdownEntry, hostMob, selectedData } from '../types'; +import type { DropdownEntry, HostMob, SelectedData } from '../types'; import { VoreContentsPanel } from '../VoreSelectedBellyTabs/VoreContentsPanel'; import { VoreSelectedBellyControls } from '../VoreSelectedBellyTabs/VoreSelectedBellyControls'; import { VoreSelectedBellyDescriptions } from '../VoreSelectedBellyTabs/VoreSelectedBellyDescriptions'; @@ -19,9 +19,9 @@ import { VoreSelectedBellyVisuals } from '../VoreSelectedBellyTabs/VoreSelectedB export const VoreSelectedBelly = (props: { bellyDropdownNames: DropdownEntry[]; activeVoreTab: number; - belly: selectedData; + belly: SelectedData; show_pictures: BooleanLike; - host_mobtype: hostMob; + host_mobtype: HostMob; icon_overflow: BooleanLike; vore_words: Record; editMode: boolean; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSoulcatcher.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSoulcatcher.tsx index 7e26dcc017a..3856940fc68 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSoulcatcher.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSoulcatcher.tsx @@ -9,7 +9,7 @@ import { import type { BooleanLike } from 'tgui-core/react'; import { noSelectionName } from '../constants'; -import type { abilities, DropdownEntry, soulcatcherData } from '../types'; +import type { Abilities, DropdownEntry, SoulcatcherData } from '../types'; import { VorePanelEditToggle } from '../VorePanelElements/VorePanelCommonElements'; import { VorePanelEditTextTabs } from '../VorePanelElements/VorePaneldEditTextTabs'; import { VorePanelEditDropdown } from '../VorePanelElements/VorePanelEditDropdown'; @@ -22,13 +22,13 @@ import { SoulOptions } from '../VoreSoulcatcherSettings/SoulOptions'; import { VoreAbilities } from './VoreAbilities'; export const VoreSoulcatcher = (props: { - soulcatcher: soulcatcherData | null; + soulcatcher: SoulcatcherData | null; our_bellies: Required<{ name: string; ref: string }[]> & { map( arg0: (belly: { name: string; ref: string }) => DropdownEntry, ): DropdownEntry[]; }; - abilities: abilities; + abilities: Abilities; toggleEditMode: React.Dispatch>; editMode: boolean; persist_edit_mode: BooleanLike; @@ -71,7 +71,7 @@ export const VoreSoulcatcher = (props: { }; const VoreSoulcatcherSection = (props: { - soulcatcher: soulcatcherData; + soulcatcher: SoulcatcherData; overlayBellies: DropdownEntry[]; toggleEditMode: React.Dispatch>; editMode: boolean; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserGeneral.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserGeneral.tsx index e437e89e6ee..e086a871ba2 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserGeneral.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserGeneral.tsx @@ -2,16 +2,16 @@ import { useBackend } from 'tgui/backend'; import { Button, Section, Stack } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; -import type { bellyData, generalPrefData } from '../types'; +import type { BellyData, GeneralPrefData } from '../types'; import { VoreUserPreferencesAesthetic } from '../VoreUserPreferencesTabs/VoreUserPreferencesAesthetic'; /** * Subtemplate of VoreBellySelectionAndCustomization */ export const VoreUserGeneral = (props: { - general_pref_data?: generalPrefData; + general_pref_data?: GeneralPrefData; editMode: boolean; persist_edit_mode: BooleanLike; - our_bellies: bellyData[]; + our_bellies: BellyData[]; toggleEditMode: React.Dispatch>; }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx index dc51f21bd3c..f44c1ccb975 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreUserPreferences.tsx @@ -1,7 +1,7 @@ import { Section } from 'tgui-core/components'; import { digestModeToColor } from '../constants'; -import type { localPrefs, prefData } from '../types'; +import type { LocalPrefs, PrefData } from '../types'; import { VoreUserPreferencesDevouring } from '../VoreUserPreferencesTabs/VoreUserPreferencesDevouring'; import { VoreUserPreferencesFX } from '../VoreUserPreferencesTabs/VoreUserPreferencesFX'; import { VoreUserPreferencesMechanical } from '../VoreUserPreferencesTabs/VoreUserPreferencesMechanical'; @@ -9,7 +9,7 @@ import { VoreUserPreferencesSoulcatcher } from '../VoreUserPreferencesTabs/VoreU import { VoreUserPreferencesSpawn } from '../VoreUserPreferencesTabs/VoreUserPreferencesSpawn'; import { VoreUserPreferencesSpontaneous } from '../VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous'; -export const VoreUserPreferences = (props: { prefs: prefData }) => { +export const VoreUserPreferences = (props: { prefs: PrefData }) => { const { prefs } = props; const { digestable, @@ -65,7 +65,7 @@ export const VoreUserPreferences = (props: { prefs: prefData }) => { max_voreoverlay_alpha, } = prefs; - const preferences: localPrefs = { + const preferences: LocalPrefs = { digestion: { action: 'toggle_digest', test: digestable, diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/DescriptionTab/VoreSelectedBellyDescriptionMatrix.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/DescriptionTab/VoreSelectedBellyDescriptionMatrix.tsx index eb3cc88e778..40a1ec48006 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/DescriptionTab/VoreSelectedBellyDescriptionMatrix.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/DescriptionTab/VoreSelectedBellyDescriptionMatrix.tsx @@ -9,7 +9,7 @@ import { import type { BooleanLike } from 'tgui-core/react'; import { messageTabLabel } from '../../constants'; -import type { bellyDescriptionData } from '../../types'; +import type { BellyDescriptionData } from '../../types'; import { VorePanelEditSwitch } from '../../VorePanelElements/VorePanelEditSwitch'; import { VorePanelEditTextArea } from '../../VorePanelElements/VorePanelTextArea'; @@ -18,7 +18,7 @@ export const VoreSelectedBellyDescriptionMatrix = (props: { showFormatHelp: boolean; onShowFormatHelp: React.Dispatch>; editMode: boolean; - bellyDescriptionData: bellyDescriptionData; + bellyDescriptionData: BellyDescriptionData; }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/InteractionTab/AutoTransferOptions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/InteractionTab/AutoTransferOptions.tsx index 263b3581b72..f03bcfef7b7 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/InteractionTab/AutoTransferOptions.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/InteractionTab/AutoTransferOptions.tsx @@ -1,7 +1,7 @@ import { LabeledList, Section, Stack } from 'tgui-core/components'; import { capitalize } from 'tgui-core/string'; -import type { autoTransferOption, DropdownEntry } from '../../types'; +import type { AutoTransferOption, DropdownEntry } from '../../types'; import { VorePanelEditCheckboxes } from '../../VorePanelElements/VorePanelEditCheckboxes'; import { VorePanelEditDropdown } from '../../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditNumber } from '../../VorePanelElements/VorePanelEditNumber'; @@ -11,7 +11,7 @@ export const AutoTransferOptions = (props: { title: string; bellyDropdownNames: DropdownEntry[]; locationNames: DropdownEntry[]; - autotransferData: autoTransferOption; + autotransferData: AutoTransferOption; }) => { const { editMode, diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsLeft.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsLeft.tsx index e2206bbdba2..8b4110697b3 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsLeft.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsLeft.tsx @@ -1,7 +1,7 @@ import { Box, LabeledList, Stack } from 'tgui-core/components'; import { reagentToColor } from '../../constants'; -import type { liqInteractData } from '../../types'; +import type { LiqInteractData } from '../../types'; import { VorePanelEditColor } from '../../VorePanelElements/VorePanelEditColor'; import { VorePanelEditDropdown } from '../../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditNumber } from '../../VorePanelElements/VorePanelEditNumber'; @@ -10,7 +10,7 @@ import { VorePanelEditText } from '../../VorePanelElements/VorePanelEditText'; export const LiquidOptionsLeft = (props: { editMode: boolean; - liquidInteract: liqInteractData; + liquidInteract: LiqInteractData; }) => { const { editMode, liquidInteract } = props; const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsRight.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsRight.tsx index 2e6d12c918e..a64d161624b 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsRight.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/LiquidTab/LiquidOptionsRight.tsx @@ -1,7 +1,7 @@ import { LabeledList } from 'tgui-core/components'; import { nutriTimeToText } from '../../constants'; -import type { liqInteractData } from '../../types'; +import type { LiqInteractData } from '../../types'; import { VorePanelEditDropdown } from '../../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditNumber } from '../../VorePanelElements/VorePanelEditNumber'; import { VorePanelEditSwitch } from '../../VorePanelElements/VorePanelEditSwitch'; @@ -9,7 +9,7 @@ import { VorePanelEditText } from '../../VorePanelElements/VorePanelEditText'; export const LiquidOptionsRight = (props: { editMode: boolean; - liquidInteract: liqInteractData; + liquidInteract: LiqInteractData; }) => { const { editMode, liquidInteract } = props; const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsLeft.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsLeft.tsx index a01d7b666a6..86ee3b789cc 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsLeft.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsLeft.tsx @@ -2,7 +2,7 @@ import { LabeledList, Stack } from 'tgui-core/components'; import { eatingMessagePrivacy } from '../../constants'; import { sanitize_color } from '../../functions'; -import type { bellyOptionData } from '../../types'; +import type { BellyOptionData } from '../../types'; import { VorePanelColorBox } from '../../VorePanelElements/VorePanelCommonElements'; import { VorePanelEditDropdown } from '../../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditNumber } from '../../VorePanelElements/VorePanelEditNumber'; @@ -12,7 +12,7 @@ import { VoreSelectedWhitelist } from '../VisualTab/VoreSelecetedWhitelist'; export const BellyOptionsLeft = (props: { editMode: boolean; - bellyOptionData: bellyOptionData; + bellyOptionData: BellyOptionData; }) => { const { editMode, bellyOptionData } = props; const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsRight.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsRight.tsx index 0bb86293688..60aa1563509 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsRight.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/OptionTab/BellyOptionsRight.tsx @@ -2,7 +2,7 @@ import { LabeledList } from 'tgui-core/components'; import { digestModeToColor, selectiveBellyOptions } from '../../constants'; import { bellyTemperatureToColor } from '../../functions'; -import type { bellyOptionData } from '../../types'; +import type { BellyOptionData } from '../../types'; import { VorePanelEditDropdown } from '../../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditNumber } from '../../VorePanelElements/VorePanelEditNumber'; import { VorePanelEditSwitch } from '../../VorePanelElements/VorePanelEditSwitch'; @@ -10,7 +10,7 @@ import { VorePanelEditText } from '../../VorePanelElements/VorePanelEditText'; export const BellyOptionsRight = (props: { editMode: boolean; - bellyOptionData: bellyOptionData; + bellyOptionData: BellyOptionData; }) => { const { editMode, bellyOptionData } = props; const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/BellyFullscreenPreview.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/BellyFullscreenPreview.tsx index 9b54d69e7b4..d3a291b9216 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/BellyFullscreenPreview.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/BellyFullscreenPreview.tsx @@ -32,6 +32,8 @@ export function BellyFullscreenPreview(props: { Selected overly "{belly_fullscreen}" no longer exists! + + Please select a new one. diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSelectedMobTypeBellyButtons.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSelectedMobTypeBellyButtons.tsx index 89767ea6908..2200715e660 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSelectedMobTypeBellyButtons.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSelectedMobTypeBellyButtons.tsx @@ -1,13 +1,13 @@ import { Box, LabeledList, Section } from 'tgui-core/components'; import { robotBellyOptions } from '../../constants'; -import type { hostMob, siliconeBellyControls } from '../../types'; +import type { HostMob, SiliconeBellyControls } from '../../types'; import { VorePanelEditDropdown } from '../../VorePanelElements/VorePanelEditDropdown'; export const VoreSelectedMobTypeBellyButtons = (props: { editMode: boolean; - bellyControl: siliconeBellyControls; - host_mobtype: hostMob; + bellyControl: SiliconeBellyControls; + host_mobtype: HostMob; }) => { const { editMode, bellyControl, host_mobtype } = props; const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSpriteAffect.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSpriteAffect.tsx index 8311479c44f..ca6d4fca4b1 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSpriteAffect.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VisualTab/VoreSpriteAffect.tsx @@ -1,7 +1,7 @@ import { Box, LabeledList, Stack } from 'tgui-core/components'; import { spriteToTooltip } from '../../constants'; -import type { bellyVisualData, hostMob } from '../../types'; +import type { BellyVisualData, HostMob } from '../../types'; import { VorePanelEditCheckboxes } from '../../VorePanelElements/VorePanelEditCheckboxes'; import { VorePanelEditColor } from '../../VorePanelElements/VorePanelEditColor'; import { VorePanelEditDropdown } from '../../VorePanelElements/VorePanelEditDropdown'; @@ -11,8 +11,8 @@ import { VoreSelectedMobTypeBellyButtons } from './VoreSelectedMobTypeBellyButto export const VoreSpriteAffects = (props: { editMode: boolean; - bellyVisualData: bellyVisualData; - hostMobtype: hostMob; + bellyVisualData: BellyVisualData; + hostMobtype: HostMob; }) => { const { editMode, bellyVisualData, hostMobtype } = props; const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPanel.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPanel.tsx index db1a3ab4af0..d8798e2ebde 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPanel.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPanel.tsx @@ -15,11 +15,12 @@ import type { BooleanLike } from 'tgui-core/react'; import { createSearch } from 'tgui-core/string'; import { stats } from '../constants'; import { ourTypeToOptions } from '../functions'; -import type { contentData, DropdownEntry } from '../types'; +import type { ContentData, DropdownEntry } from '../types'; export const VoreContentsPanel = (props: { - contents?: contentData[] | null; + contents?: ContentData[] | null; targetBelly?: string; + allow_absorbed_devour?: BooleanLike; onTargetBely?: React.Dispatch>; bellyDropdownNames?: DropdownEntry[]; belly?: string; @@ -28,7 +29,7 @@ export const VoreContentsPanel = (props: { icon_overflow: BooleanLike; }) => { const { act } = useBackend(); - const [selectedAtom, setSelectedAtom] = useState(null); + const [selectedAtom, setSelectedAtom] = useState(null); const [contentSearchText, setContentSearchText] = useState(''); const { @@ -68,7 +69,7 @@ export const VoreContentsPanel = (props: { const contentSearch = createSearch( contentSearchText, - (content: contentData) => content.name, + (content: ContentData) => content.name, ); const displayedContents = contents?.filter(contentSearch); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPreyPanel.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPreyPanel.tsx new file mode 100644 index 00000000000..4b3d665762b --- /dev/null +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreContentsPreyPanel.tsx @@ -0,0 +1,57 @@ +import { useBackend } from 'tgui/backend'; +import { Button, Section, Stack } from 'tgui-core/components'; +import type { BooleanLike } from 'tgui-core/react'; +import { preyAbilityToData } from '../constants'; +import type { InsideData, PreyAbilityData } from '../types'; +import { VoreContentsPanel } from './VoreContentsPanel'; + +export const VoreContentsPreyPanel = (props: { + inside: InsideData; + prey_abilities: PreyAbilityData[] | null; + show_pictures: BooleanLike; + icon_overflow: BooleanLike; +}) => { + const { act } = useBackend(); + + const { inside, prey_abilities, show_pictures, icon_overflow } = props; + + return ( +
+ + {!!prey_abilities?.length && ( + +
+ + {prey_abilities.map((ability) => ( + + + + ))} + +
+
+ )} + + + +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyControls.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyControls.tsx index 97ac489b24c..2209513e843 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyControls.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyControls.tsx @@ -2,7 +2,7 @@ import { useBackend } from 'tgui/backend'; import { Button, LabeledList, Stack } from 'tgui-core/components'; import { digestModeToColor, modeToTooltip } from '../constants'; -import type { bellyModeData, DropdownEntry } from '../types'; +import type { BellyModeData, DropdownEntry } from '../types'; import { VorePanelEditCheckboxes } from '../VorePanelElements/VorePanelEditCheckboxes'; import { VorePanelEditDropdown } from '../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditText } from '../VorePanelElements/VorePanelEditText'; @@ -12,7 +12,7 @@ export const VoreSelectedBellyControls = (props: { editMode: boolean; belly_name: string; display_name: string; - bellyModeData: bellyModeData; + bellyModeData: BellyModeData; }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx index f414c1ba556..99154db6f5e 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx @@ -7,7 +7,7 @@ import { Stack, } from 'tgui-core/components'; -import type { bellyDescriptionData } from '../types'; +import type { BellyDescriptionData } from '../types'; import { VorePanelEditNumber } from '../VorePanelElements/VorePanelEditNumber'; import { VorePanelEditSwitch } from '../VorePanelElements/VorePanelEditSwitch'; import { VorePanelEditText } from '../VorePanelElements/VorePanelEditText'; @@ -15,7 +15,7 @@ import { VoreSelectedBellyDescriptionMatrix } from './DescriptionTab/VoreSelecte export const VoreSelectedBellyDescriptions = (props: { editMode: boolean; - bellyDescriptionData: bellyDescriptionData; + bellyDescriptionData: BellyDescriptionData; vore_words: Record; }) => { const [showFormatHelp, setShowFormatHelp] = useState(false); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx index b6b3dcfb55f..362ab468edc 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx @@ -1,7 +1,7 @@ import { LabeledList, Section, Stack } from 'tgui-core/components'; import { noSelectionName } from '../constants'; -import type { bellyInteractionData, DropdownEntry } from '../types'; +import type { BellyInteractionData, DropdownEntry } from '../types'; import { VorePanelEditDropdown } from '../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditNumber } from '../VorePanelElements/VorePanelEditNumber'; import { VorePanelEditSwitch } from '../VorePanelElements/VorePanelEditSwitch'; @@ -10,7 +10,7 @@ import { AutoTransferOptions } from './InteractionTab/AutoTransferOptions'; export const VoreSelectedBellyInteractions = (props: { editMode: boolean; bellyDropdownNames: DropdownEntry[]; - bellyInteractData: bellyInteractionData; + bellyInteractData: BellyInteractionData; }) => { const { editMode, bellyDropdownNames, bellyInteractData } = props; const { escapable, interacts, autotransfer_enabled, autotransfer } = diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx index ed1d3b80449..a48bffbecf5 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx @@ -2,7 +2,7 @@ import { useBackend } from 'tgui/backend'; import { Box, Button, LabeledList, Section, Stack } from 'tgui-core/components'; import { liquidToTooltip, reagentToColor } from '../constants'; -import type { bellyLiquidData } from '../types'; +import type { BellyLiquidData } from '../types'; import { VorePanelEditCheckboxes } from '../VorePanelElements/VorePanelEditCheckboxes'; import { VorePanelEditSwitch } from '../VorePanelElements/VorePanelEditSwitch'; import { LiquidOptionsLeft } from './LiquidTab/LiquidOptionsLeft'; @@ -10,7 +10,7 @@ import { LiquidOptionsRight } from './LiquidTab/LiquidOptionsRight'; export const VoreSelectedBellyLiquidOptions = (props: { editMode: boolean; - bellyLiquidData: bellyLiquidData; + bellyLiquidData: BellyLiquidData; }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx index 89122dc7d7c..f15e2366f87 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx @@ -1,12 +1,12 @@ import { Stack } from 'tgui-core/components'; -import type { bellyOptionData } from '../types'; +import type { BellyOptionData } from '../types'; import { BellyOptionsLeft } from './OptionTab/BellyOptionsLeft'; import { BellyOptionsRight } from './OptionTab/BellyOptionsRight'; export const VoreSelectedBellyOptions = (props: { editMode: boolean; - bellyOptionData: bellyOptionData; + bellyOptionData: BellyOptionData; }) => { const { editMode, bellyOptionData } = props; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellySounds.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellySounds.tsx index af6a2fe1039..257ce3ce8b4 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellySounds.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellySounds.tsx @@ -1,13 +1,13 @@ import { useBackend } from 'tgui/backend'; import { Button, LabeledList, Stack } from 'tgui-core/components'; -import type { bellySoundData, DropdownEntry } from '../types'; +import type { BellySoundData, DropdownEntry } from '../types'; import { VorePanelEditDropdown } from '../VorePanelElements/VorePanelEditDropdown'; import { VorePanelEditNumber } from '../VorePanelElements/VorePanelEditNumber'; import { VorePanelEditSwitch } from '../VorePanelElements/VorePanelEditSwitch'; export const VoreSelectedBellySounds = (props: { editMode: boolean; - bellySoundData: bellySoundData; + bellySoundData: BellySoundData; }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx index 6be277f7f16..bae57ed5604 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx @@ -1,7 +1,7 @@ import { useBackend } from 'tgui/backend'; import { Button, LabeledList, Section, Stack } from 'tgui-core/components'; -import type { bellyVisualData, hostMob } from '../types'; +import type { BellyVisualData, HostMob } from '../types'; import { VorePanelEditColor } from '../VorePanelElements/VorePanelEditColor'; import { VorePanelEditSwitch } from '../VorePanelElements/VorePanelEditSwitch'; import { BellyFullscreenSelection } from './VisualTab/BellyFullscreenSelection'; @@ -9,8 +9,8 @@ import { VoreSpriteAffects } from './VisualTab/VoreSpriteAffect'; export const VoreSelectedBellyVisuals = (props: { editMode: boolean; - bellyVisualData: bellyVisualData; - hostMobtype: hostMob; + bellyVisualData: BellyVisualData; + hostMobtype: HostMob; }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesAesthetic.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesAesthetic.tsx index d3351e9f7f2..21963329c0f 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesAesthetic.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesAesthetic.tsx @@ -4,7 +4,7 @@ import { capitalize } from 'tgui-core/string'; import { aestehticTabsToIcons } from '../constants'; import { fixCorruptedData } from '../functions'; -import type { aestMessageData, bellyData } from '../types'; +import type { AestMessageData, BellyData } from '../types'; import { VorePanelEditToggle } from '../VorePanelElements/VorePanelCommonElements'; import { VorePanelEditTextTabs } from '../VorePanelElements/VorePaneldEditTextTabs'; import { VorePanelEditColor } from '../VorePanelElements/VorePanelEditColor'; @@ -16,12 +16,12 @@ export const VoreUserPreferencesAesthetic = (props: { persist_edit_mode: BooleanLike; toggleEditMode: React.Dispatch>; active_belly: string | null; - our_bellies: bellyData[]; + our_bellies: BellyData[]; belly_rub_target: string | null; vore_sprite_color: Record; vore_sprite_multiply: Record; vore_icon_options: string[]; - aestethicMessages: aestMessageData; + aestethicMessages: AestMessageData; }) => { const { editMode, diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx index f6ecf97a44a..28c96e02d07 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesDevouring.tsx @@ -3,14 +3,14 @@ import { Button, Section, Stack } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; import { capitalize } from 'tgui-core/string'; -import type { localPrefs } from '../types'; +import type { LocalPrefs } from '../types'; import { VoreUserPreferenceItem } from '../VorePanelElements/VoreUserPreferenceItem'; export const VoreUserPreferencesDevouring = (props: { devourable: BooleanLike; digestModeToColor: Record; selective_active: string; - preferences: localPrefs; + preferences: LocalPrefs; }) => { const { act } = useBackend(); const { devourable, digestModeToColor, selective_active, preferences } = @@ -106,11 +106,11 @@ export const VoreUserPreferencesDevouring = (props: { /> - - + + ) : ( '' diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesFX.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesFX.tsx index e0250acfbc0..8beca5c0be1 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesFX.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesFX.tsx @@ -1,12 +1,12 @@ import { LabeledList, Section } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; -import type { localPrefs } from '../types'; +import type { LocalPrefs } from '../types'; import { VorePanelEditNumber } from '../VorePanelElements/VorePanelEditNumber'; import { VoreUserPreferenceItem } from '../VorePanelElements/VoreUserPreferenceItem'; export const VoreUserPreferencesFX = (props: { - preferences: localPrefs; + preferences: LocalPrefs; show_vore_fx: BooleanLike; max_voreoverlay_alpha: number; }) => { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx index 68dc8350ac0..09a4748e065 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx @@ -1,10 +1,10 @@ import { Section, Stack } from 'tgui-core/components'; -import type { localPrefs } from '../types'; +import type { LocalPrefs } from '../types'; import { VoreUserPreferenceItem } from '../VorePanelElements/VoreUserPreferenceItem'; export const VoreUserPreferencesMechanical = (props: { - preferences: localPrefs; + preferences: LocalPrefs; }) => { const { preferences } = props; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx index 7a0f4580f4a..89c6d9b4497 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx @@ -1,12 +1,12 @@ import { Section, Stack } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; -import type { localPrefs } from '../types'; +import type { LocalPrefs } from '../types'; import { VoreUserPreferenceItem } from '../VorePanelElements/VoreUserPreferenceItem'; export const VoreUserPreferencesSoulcatcher = (props: { soulcatcher_allow_capture: BooleanLike; - preferences: localPrefs; + preferences: LocalPrefs; }) => { const { soulcatcher_allow_capture, preferences } = props; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx index c18f5bfea60..ed41874f567 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx @@ -2,7 +2,7 @@ import { useBackend } from 'tgui/backend'; import { Button, NumberInput, Section, Stack } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; -import type { localPrefs } from '../types'; +import type { LocalPrefs } from '../types'; import { VoreUserPreferenceItem } from '../VorePanelElements/VoreUserPreferenceItem'; export const VoreUserPreferencesSpawn = (props: { @@ -12,7 +12,7 @@ export const VoreUserPreferencesSpawn = (props: { latejoin_prey: BooleanLike; no_spawnprey_warning_time: number; no_spawnprey_warning_save: BooleanLike; - preferences: localPrefs; + preferences: LocalPrefs; }) => { const { act } = useBackend(); const { diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx index f2026259ba8..340b917587e 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx @@ -1,13 +1,13 @@ import { Section, Stack } from 'tgui-core/components'; import type { BooleanLike } from 'tgui-core/react'; -import type { localPrefs } from '../types'; +import type { LocalPrefs } from '../types'; import { VoreUserPreferenceItem } from '../VorePanelElements/VoreUserPreferenceItem'; export const VoreUserPreferencesSpontaneous = (props: { can_be_drop_prey: BooleanLike; can_be_drop_pred: BooleanLike; - preferences: localPrefs; + preferences: LocalPrefs; }) => { const { can_be_drop_prey, can_be_drop_pred, preferences } = props; diff --git a/tgui/packages/tgui/interfaces/VorePanel/constants.ts b/tgui/packages/tgui/interfaces/VorePanel/constants.ts index cbd97fdf417..dc190be1216 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/constants.ts +++ b/tgui/packages/tgui/interfaces/VorePanel/constants.ts @@ -82,12 +82,14 @@ export const modeToTooltip = { 'Leave Remains': 'Prey might leave remains like bones.', Muffles: 'Causes all prey messages to become subtles.', 'Affect Worn Items': 'Allows vorgan to coat and digest equipped items.', - 'Jams Sensors': 'Blocks trackers, such as GPS, sensors, and tracking implants.', + 'Jams Sensors': + 'Blocks trackers, such as GPS, sensors, and tracking implants.', 'Complete Absorb': 'Limits conversation to direct pred / prey.', 'Spare Prosthetics': 'Applies no damage to synthetic limbs. ', 'Slow Body Digestion': 'Continues to digest a body after the prey has died.', 'Muffle Items': ' Muffles noise from items inside the vorgan.', 'TURBO MODE': 'Heavily increases tick speed of the vorgan (6x).', + 'Absorbed Devour': 'Allows absorbed prey to devour other prey.', }; export const spriteToTooltip = { @@ -148,3 +150,11 @@ export const aestehticTabsToIcons = { 'Set Nutrition Examine': 'flask', 'Set Weight Examine': 'weight-hanging', }; + +export const preyAbilityToData = { + devour_as_absorbed: { + displayName: 'Devour Nearby', + desc: 'Allows you to devour nearby prey after having been absorbed.', + color: 'red', + }, +}; diff --git a/tgui/packages/tgui/interfaces/VorePanel/index.tsx b/tgui/packages/tgui/interfaces/VorePanel/index.tsx index 9ebf943d39e..ecc7be0342a 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/index.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/index.tsx @@ -1,15 +1,7 @@ import { useEffect, useState } from 'react'; import { useBackend } from 'tgui/backend'; import { Window } from 'tgui/layouts'; -import { - Box, - Button, - Icon, - NoticeBox, - Section, - Stack, - Tabs, -} from 'tgui-core/components'; +import { Button, Icon, NoticeBox, Stack, Tabs } from 'tgui-core/components'; import type { Data } from './types'; import { VoreBellySelectionAndCustomization } from './VorePanelMainTabs/VoreBellySelectionAndCustomization'; @@ -17,7 +9,7 @@ import { VoreInsidePanel } from './VorePanelMainTabs/VoreInsidePanel'; import { VoreSoulcatcher } from './VorePanelMainTabs/VoreSoulcatcher'; import { VoreUserGeneral } from './VorePanelMainTabs/VoreUserGeneral'; import { VoreUserPreferences } from './VorePanelMainTabs/VoreUserPreferences'; -import { VoreContentsPanel } from './VoreSelectedBellyTabs/VoreContentsPanel'; +import { VoreContentsPreyPanel } from './VoreSelectedBellyTabs/VoreContentsPreyPanel'; /** * There are three main sections to this UI. @@ -42,6 +34,7 @@ export const VorePanel = () => { prefs, show_pictures, icon_overflow, + prey_abilities, host_mobtype, unsaved_changes, vore_words, @@ -76,17 +69,13 @@ export const VorePanel = () => { maxBellyName={max_belly_name} /> ); - tabs[1] = inside.contents?.length ? ( - - ) : ( -
- There is nothing else around you. -
); tabs[2] = our_bellies && soulcatcher && abilities && ( ; unsaved_changes: BooleanLike; - inside: insideData; + inside: InsideData; show_pictures: BooleanLike; icon_overflow: BooleanLike; + prey_abilities: PreyAbilityData[] | null; active_tab: number; persist_edit_mode: BooleanLike; - host_mobtype: hostMob | null; - our_bellies?: bellyData[] | null; + host_mobtype: HostMob | null; + our_bellies?: BellyData[] | null; min_belly_name: number; max_belly_name: number; - selected?: selectedData | null; - prefs?: prefData | null; - soulcatcher?: soulcatcherData | null; - abilities?: abilities | null; + selected?: SelectedData | null; + prefs?: PrefData | null; + soulcatcher?: SoulcatcherData | null; + abilities?: Abilities | null; active_vore_tab?: number; - general_pref_data?: generalPrefData | null; + general_pref_data?: GeneralPrefData | null; }; -export type abilities = { +export type Abilities = { nutrition: number; size_change: abilitySizeChange; }; @@ -32,12 +33,12 @@ export type abilitySizeChange = { resize_cost: number; }; -export type hostMob = { +export type HostMob = { is_cyborg: BooleanLike; is_vore_simple_mob: BooleanLike; }; -export type insideData = { +export type InsideData = { absorbed: BooleanLike; belly_name?: string; belly_mode?: string; @@ -47,10 +48,10 @@ export type insideData = { liq_lvl?: number; liq_reagent_type?: string; liuq_name?: string; - contents?: contentData[]; + contents?: ContentData[]; }; -export type bellyData = { +export type BellyData = { name: string; display_name: string; ref: string; @@ -60,17 +61,17 @@ export type bellyData = { prevent_saving?: BooleanLike; }; -export type bellyModeData = { +export type BellyModeData = { mode: string; item_mode: string; - addons: checkBoxEntry[]; + addons: CheckBoxEntry[]; name_length: number; name_min: number; mode_options: string[]; item_mode_options: string[]; }; -export type bellyDescriptionData = { +export type BellyDescriptionData = { verb: string; release_verb: string; message_mode: BooleanLike; @@ -99,7 +100,7 @@ export type bellyDescriptionData = { } | null; }; -export type bellyOptionData = { +export type BellyOptionData = { can_taste: BooleanLike; is_feedable: BooleanLike; nutrition_percent: number; @@ -142,7 +143,7 @@ export type bellyOptionData = { temperature_damage: BooleanLike; }; -export type bellySoundData = { +export type BellySoundData = { is_wet: BooleanLike; wet_loop: BooleanLike; fancy: BooleanLike; @@ -156,7 +157,7 @@ export type bellySoundData = { release_sound_list: Record; }; -export type bellyVisualData = { +export type BellyVisualData = { belly_fullscreen: string; colorization_enabled: BooleanLike; belly_fullscreen_color: string; @@ -166,7 +167,7 @@ export type bellyVisualData = { belly_fullscreen_alpha: number; possible_fullscreens: string[]; disable_hud: BooleanLike; - vore_sprite_flags: checkBoxEntry[]; + vore_sprite_flags: CheckBoxEntry[]; affects_voresprite: BooleanLike; absorbed_voresprite: BooleanLike; absorbed_multiplier: number; @@ -187,17 +188,17 @@ export type bellyVisualData = { tail_option_shown: BooleanLike; tail_to_change_to: BooleanLike | string; tail_sprite_options: string[]; - mob_belly_controls: siliconeBellyControls; + mob_belly_controls: SiliconeBellyControls; }; -export type bellyInteractionData = { +export type BellyInteractionData = { escapable: BooleanLike; interacts: interactData; autotransfer_enabled: BooleanLike; - autotransfer: autotransferData; + autotransfer: AutotransferData; }; -export type contentData = { +export type ContentData = { name: string; absorbed: BooleanLike; stat: number; @@ -207,29 +208,29 @@ export type contentData = { our_type: string; }; -export type bellyLiquidData = { +export type BellyLiquidData = { show_liq: BooleanLike; - liq_interacts: liqInteractData; + liq_interacts: LiqInteractData; }; -export type siliconeBellyControls = { +export type SiliconeBellyControls = { silicon_belly_overlay_preference: string; belly_sprite_option_shown: BooleanLike; belly_sprite_to_affect: string; }; -export type selectedData = { +export type SelectedData = { belly_name: string; display_name: string; - belly_mode_data?: bellyModeData; - belly_description_data?: bellyDescriptionData; - belly_option_data?: bellyOptionData; - belly_sound_data?: bellySoundData; - belly_visual_data?: bellyVisualData; - belly_interaction_data?: bellyInteractionData; - contents?: contentData[] | null; + belly_mode_data?: BellyModeData; + belly_description_data?: BellyDescriptionData; + belly_option_data?: BellyOptionData; + belly_sound_data?: BellySoundData; + belly_visual_data?: BellyVisualData; + belly_interaction_data?: BellyInteractionData; + contents?: ContentData[] | null; content_length: number; - belly_liquid_data?: bellyLiquidData; + belly_liquid_data?: BellyLiquidData; }; export type interactData = { @@ -245,27 +246,27 @@ export type interactData = { belchchance: number; }; -export type autotransferData = { +export type AutotransferData = { autotransferwait: number; autotransfer_min_amount: number; autotransfer_max_amount: number; - primary_transfer: autoTransferOption; - secondary_transfer: autoTransferOption; + primary_transfer: AutoTransferOption; + secondary_transfer: AutoTransferOption; }; -export type autoTransferOption = { +export type AutoTransferOption = { autotransferchance: number; autotransferlocation: string | null; autotransferextralocation: string[]; - autotransfer_whitelist: checkBoxEntry[]; - autotransfer_blacklist: checkBoxEntry[]; - autotransfer_whitelist_items: checkBoxEntry[]; - autotransfer_blacklist_items: checkBoxEntry[]; + autotransfer_whitelist: CheckBoxEntry[]; + autotransfer_blacklist: CheckBoxEntry[]; + autotransfer_whitelist_items: CheckBoxEntry[]; + autotransfer_blacklist_items: CheckBoxEntry[]; }; -type bellyReagent = { name: string; volume: number }; +type BellyReagent = { name: string; volume: number }; -export type liqInteractData = { +export type LiqInteractData = { liq_reagent_gen: BooleanLike; liq_reagent_type: string; liq_reagent_types: string[]; @@ -276,7 +277,7 @@ export type liqInteractData = { liq_reagent_nutri_rate: number; liq_reagent_capacity: number; liq_sloshing: BooleanLike; - liq_reagent_addons: checkBoxEntry[]; + liq_reagent_addons: CheckBoxEntry[]; custom_reagentcolor: string; custom_reagentalpha: number | null; liquid_overlay: BooleanLike; @@ -294,10 +295,10 @@ export type liqInteractData = { custom_ingested_color: string; custom_ingested_alpha: number; total_volume: number; - current_reagents: bellyReagent[]; + current_reagents: BellyReagent[]; }; -export type prefData = { +export type PrefData = { digestable: BooleanLike; devourable: BooleanLike; resizable: BooleanLike; @@ -351,7 +352,7 @@ export type prefData = { max_voreoverlay_alpha: number; }; -export type scMessageData = { +export type ScMessageData = { sc_subtab: string; possible_messages: string[]; max_length: number; @@ -360,13 +361,13 @@ export type scMessageData = { tooltip: string; }; -export type soulcatcherData = { +export type SoulcatcherData = { active: BooleanLike; name: string; caught_souls: DropdownEntry[]; selected_sfx: string | null; selected_soul: string; - sc_message_data: scMessageData; + sc_message_data: ScMessageData; catch_self: BooleanLike; taken_over: BooleanLike; catch_prey: BooleanLike; @@ -385,22 +386,22 @@ export type DropdownEntry = { value: string; }; -export type checkBoxEntry = { +export type CheckBoxEntry = { label: string; selection: BooleanLike; ref?: string; }; -export type generalPrefData = { +export type GeneralPrefData = { active_belly: string | null; belly_rub_target: string | null; - aestethic_messages: aestMessageData; + aestethic_messages: AestMessageData; vore_sprite_color: Record; vore_sprite_multiply: Record; vore_icon_options: string[]; }; -export type aestMessageData = { +export type AestMessageData = { possible_messages: string[]; aest_subtab: string; max_length: number; @@ -418,55 +419,55 @@ export type aestMessageData = { button_tooltip?: string; }; -export type localPrefs = { - digestion: preferenceData; - absorbable: preferenceData; - devour: preferenceData; - mobvore: preferenceData; - temperature: preferenceData; - feed: preferenceData; - 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; - toggle_throw_vore: preferenceData; - toggle_phase_vore: preferenceData; - toggle_food_vore: preferenceData; - toggle_digest_pain: preferenceData; - spawnbelly: preferenceData; - spawnprey: preferenceData; - noisy: preferenceData; - noisy_full: preferenceData; - resize: preferenceData; - steppref: preferenceData; - vore_fx: preferenceData; - remains: preferenceData; - pickuppref: preferenceData; - spontaneous_tf: preferenceData; - mind_transfer: preferenceData; - strippref: preferenceData; - contaminatepref: preferenceData; - eating_privacy_global: preferenceData; - vore_death_privacy: preferenceData; - allow_mimicry: preferenceData; - autotransferable: preferenceData; - liquid_receive: preferenceData; - liquid_give: preferenceData; - liquid_apply: preferenceData; - toggle_consume_liquid_belly: preferenceData; - no_spawnpred_warning: preferenceData; - no_spawnprey_warning: preferenceData; - soulcatcher: preferenceData; - soulcatcher_transfer: preferenceData; - soulcatcher_takeover: preferenceData; - soulcatcher_delete: preferenceData; +export type LocalPrefs = { + digestion: PreferenceData; + absorbable: PreferenceData; + devour: PreferenceData; + mobvore: PreferenceData; + temperature: PreferenceData; + feed: PreferenceData; + 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; + toggle_throw_vore: PreferenceData; + toggle_phase_vore: PreferenceData; + toggle_food_vore: PreferenceData; + toggle_digest_pain: PreferenceData; + spawnbelly: PreferenceData; + spawnprey: PreferenceData; + noisy: PreferenceData; + noisy_full: PreferenceData; + resize: PreferenceData; + steppref: PreferenceData; + vore_fx: PreferenceData; + remains: PreferenceData; + pickuppref: PreferenceData; + spontaneous_tf: PreferenceData; + mind_transfer: PreferenceData; + strippref: PreferenceData; + contaminatepref: PreferenceData; + eating_privacy_global: PreferenceData; + vore_death_privacy: PreferenceData; + allow_mimicry: PreferenceData; + autotransferable: PreferenceData; + liquid_receive: PreferenceData; + liquid_give: PreferenceData; + liquid_apply: PreferenceData; + toggle_consume_liquid_belly: PreferenceData; + no_spawnpred_warning: PreferenceData; + no_spawnprey_warning: PreferenceData; + soulcatcher: PreferenceData; + soulcatcher_transfer: PreferenceData; + soulcatcher_takeover: PreferenceData; + soulcatcher_delete: PreferenceData; }; -export type preferenceData = { +export type PreferenceData = { action: string; test: BooleanLike; tooltip: { main: string; enable: string; disable: string }; @@ -483,6 +484,11 @@ export type ActionButtonData = { needsConfirm?: boolean; }; +export type PreyAbilityData = { + name: string; + available: BooleanLike; +}; + export type Overlay = { icon: string; iconState: string;