From 3a4ccd04c331316e3f4cb8635c1bba1dd1cdc4df Mon Sep 17 00:00:00 2001
From: Kashargul <144968721+Kashargul@users.noreply.github.com>
Date: Wed, 5 Nov 2025 00:55:16 +0100
Subject: [PATCH] move inside to its own tab, only shwoing when inside a belly
(#18726)
* move inside to its own tab, only shwoing when inside a belly
* data handling
* .
* reset tab
* .
---
.../panel_databackend/vorepanel_pref_data.dm | 61 +--
.../vorepanel_soulcatcher_data.dm | 61 +--
.../panel_databackend/vorepanel_vore_data.dm | 372 +++++++++---------
code/modules/vore/eating/vorepanel_vr.dm | 62 +--
.../VorePanelMainTabs/VoreInsidePanel.tsx | 98 +++--
.../tgui/interfaces/VorePanel/index.tsx | 64 ++-
6 files changed, 376 insertions(+), 342 deletions(-)
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 62052f8d73..24333a13eb 100644
--- a/code/modules/vore/eating/panel_databackend/vorepanel_pref_data.dm
+++ b/code/modules/vore/eating/panel_databackend/vorepanel_pref_data.dm
@@ -76,36 +76,37 @@
"possible_messages" = list(SET_TASTE, SET_SMELL, SET_NUTRITION_EX, SET_WEIGHT_EX),
"aest_subtab" = aset_message_subtab
)
- if(aset_message_subtab == SET_TASTE)
- tab_data["max_length"] = FLAVOR_MAX
- tab_data["active_message"] = owner.vore_taste
- tab_data["set_action"] = TASTE_FLAVOR
- tab_data["tooltip"] = "What your character tastes like. This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream'"
- if(aset_message_subtab == SET_SMELL)
- tab_data["max_length"] = FLAVOR_MAX
- tab_data["active_message"] = owner.vore_smell
- tab_data["set_action"] = SMELL_FLAVOR
- tab_data["tooltip"] = "What your character smells like. This text will be printed to the pred after 'X smells of...' so just put something like 'strawberries and cream'"
- if(aset_message_subtab == SET_NUTRITION_EX)
- tab_data["max_length"] = BELLIES_EXAMINE_MAX
- tab_data["active_message"] = owner.nutrition_messages
- tab_data["set_action"] = "set_attribute"
- tab_data["sub_action"] = GENERAL_EXAMINE_NUTRI
- tab_data["tooltip"] = "Change the nutrition display messages on examine."
- tab_data["button_label"] = "Display Nutrition Examine"
- tab_data["button_action"] = "toggle_nutrition_ex"
- tab_data["button_data"] = owner.nutrition_message_visible
- tab_data["button_tooltip"] = "the nutition messages on examine." // those will automatically be preceeded by Enables / Disables!
- if(aset_message_subtab == SET_WEIGHT_EX)
- tab_data["max_length"] = BELLIES_EXAMINE_MAX
- tab_data["active_message"] = owner.weight_messages
- tab_data["set_action"] = "set_attribute"
- tab_data["sub_action"] = GENERAL_EXAMINE_WEIGHT
- tab_data["tooltip"] = "Change the weight display messages on examine."
- tab_data["button_label"] = "Display Weight Examine"
- tab_data["button_action"] = "toggle_weight_ex"
- tab_data["button_data"] = owner.weight_message_visible
- tab_data["button_tooltip"] = "the weight messages on examine." // those will automatically be preceeded by Enables / Disables!
+ switch(aset_message_subtab)
+ if(SET_TASTE)
+ tab_data["max_length"] = FLAVOR_MAX
+ tab_data["active_message"] = owner.vore_taste
+ tab_data["set_action"] = TASTE_FLAVOR
+ tab_data["tooltip"] = "What your character tastes like. This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream'"
+ if(SET_SMELL)
+ tab_data["max_length"] = FLAVOR_MAX
+ tab_data["active_message"] = owner.vore_smell
+ tab_data["set_action"] = SMELL_FLAVOR
+ tab_data["tooltip"] = "What your character smells like. This text will be printed to the pred after 'X smells of...' so just put something like 'strawberries and cream'"
+ if(SET_NUTRITION_EX)
+ tab_data["max_length"] = BELLIES_EXAMINE_MAX
+ tab_data["active_message"] = owner.nutrition_messages
+ tab_data["set_action"] = "set_attribute"
+ tab_data["sub_action"] = GENERAL_EXAMINE_NUTRI
+ tab_data["tooltip"] = "Change the nutrition display messages on examine."
+ tab_data["button_label"] = "Display Nutrition Examine"
+ tab_data["button_action"] = "toggle_nutrition_ex"
+ tab_data["button_data"] = owner.nutrition_message_visible
+ tab_data["button_tooltip"] = "the nutition messages on examine." // those will automatically be preceeded by Enables / Disables!
+ if(SET_WEIGHT_EX)
+ tab_data["max_length"] = BELLIES_EXAMINE_MAX
+ tab_data["active_message"] = owner.weight_messages
+ tab_data["set_action"] = "set_attribute"
+ tab_data["sub_action"] = GENERAL_EXAMINE_WEIGHT
+ tab_data["tooltip"] = "Change the weight display messages on examine."
+ tab_data["button_label"] = "Display Weight Examine"
+ tab_data["button_action"] = "toggle_weight_ex"
+ tab_data["button_data"] = owner.weight_message_visible
+ tab_data["button_tooltip"] = "the weight messages on examine." // those will automatically be preceeded by Enables / Disables!
return tab_data
#undef SET_TASTE
diff --git a/code/modules/vore/eating/panel_databackend/vorepanel_soulcatcher_data.dm b/code/modules/vore/eating/panel_databackend/vorepanel_soulcatcher_data.dm
index ed8816eb37..eebeb15634 100644
--- a/code/modules/vore/eating/panel_databackend/vorepanel_soulcatcher_data.dm
+++ b/code/modules/vore/eating/panel_databackend/vorepanel_soulcatcher_data.dm
@@ -42,36 +42,37 @@
"possible_messages" = list(INTERIOR_DESIGN, CAPTURE_MESSAGE, TRANSIT_MESSAGE, TRANSFER_MESSAGE, RELEASE_MESSAGE, DELETE_MESSAGE),
"sc_subtab" = sc_message_subtab
)
- if(sc_message_subtab == INTERIOR_DESIGN)
- tab_data["max_length"] = VORE_SC_DESC_MAX
- tab_data["active_message"] = gem.inside_flavor
- tab_data["set_action"] = SC_INTERIOR_MESSAGE
- tab_data["tooltip"] = "Displayed to prey after being 'caught' by the soulcatcher. This will be displayed after an intro set in the capture message. If you already have prey and change the interior, this will be displayed after the transit message."
- if(sc_message_subtab == CAPTURE_MESSAGE)
- tab_data["max_length"] = VORE_SC_MAX
- tab_data["active_message"] = gem.capture_message
- tab_data["set_action"] = SC_CAPTURE_MEESAGE
- tab_data["tooltip"] = "Change what the prey sees while being 'caught'. This will be printed before the iterior design to the prey."
- if(sc_message_subtab == TRANSIT_MESSAGE)
- tab_data["max_length"] = VORE_SC_MAX
- tab_data["active_message"] = gem.transit_message
- tab_data["set_action"] = SC_TRANSIT_MESSAGE
- tab_data["tooltip"] = "Change what the prey sees when you change the interior with them already captured."
- if(sc_message_subtab == TRANSFER_MESSAGE)
- tab_data["max_length"] = VORE_SC_MAX
- tab_data["active_message"] = gem.transfer_message
- tab_data["set_action"] = SC_TRANSFERE_MESSAGE
- tab_data["tooltip"] = "Change what the prey sees when they are transfered."
- if(sc_message_subtab == RELEASE_MESSAGE)
- tab_data["max_length"] = VORE_SC_MAX
- tab_data["active_message"] = gem.release_message
- tab_data["set_action"] = SC_RELEASE_MESSAGE
- tab_data["tooltip"] = "Change what the prey sees when they are released."
- if(sc_message_subtab == DELETE_MESSAGE)
- tab_data["max_length"] = VORE_SC_MAX
- tab_data["active_message"] = gem.delete_message
- tab_data["set_action"] = SC_DELETE_MESSAGE
- tab_data["tooltip"] = "Change what the prey sees when they are deleted."
+ switch(sc_message_subtab)
+ if(INTERIOR_DESIGN)
+ tab_data["max_length"] = VORE_SC_DESC_MAX
+ tab_data["active_message"] = gem.inside_flavor
+ tab_data["set_action"] = SC_INTERIOR_MESSAGE
+ tab_data["tooltip"] = "Displayed to prey after being 'caught' by the soulcatcher. This will be displayed after an intro set in the capture message. If you already have prey and change the interior, this will be displayed after the transit message."
+ if(CAPTURE_MESSAGE)
+ tab_data["max_length"] = VORE_SC_MAX
+ tab_data["active_message"] = gem.capture_message
+ tab_data["set_action"] = SC_CAPTURE_MEESAGE
+ tab_data["tooltip"] = "Change what the prey sees while being 'caught'. This will be printed before the iterior design to the prey."
+ if(TRANSIT_MESSAGE)
+ tab_data["max_length"] = VORE_SC_MAX
+ tab_data["active_message"] = gem.transit_message
+ tab_data["set_action"] = SC_TRANSIT_MESSAGE
+ tab_data["tooltip"] = "Change what the prey sees when you change the interior with them already captured."
+ if(TRANSFER_MESSAGE)
+ tab_data["max_length"] = VORE_SC_MAX
+ tab_data["active_message"] = gem.transfer_message
+ tab_data["set_action"] = SC_TRANSFERE_MESSAGE
+ tab_data["tooltip"] = "Change what the prey sees when they are transfered."
+ if(RELEASE_MESSAGE)
+ tab_data["max_length"] = VORE_SC_MAX
+ tab_data["active_message"] = gem.release_message
+ tab_data["set_action"] = SC_RELEASE_MESSAGE
+ tab_data["tooltip"] = "Change what the prey sees when they are released."
+ if(DELETE_MESSAGE)
+ tab_data["max_length"] = VORE_SC_MAX
+ tab_data["active_message"] = gem.delete_message
+ tab_data["set_action"] = SC_DELETE_MESSAGE
+ tab_data["tooltip"] = "Change what the prey sees when they are deleted."
return tab_data
/datum/vore_look/proc/get_ability_data(mob/owner)
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 611de1bd7c..bcd4a076e0 100644
--- a/code/modules/vore/eating/panel_databackend/vorepanel_vore_data.dm
+++ b/code/modules/vore/eating/panel_databackend/vorepanel_vore_data.dm
@@ -108,191 +108,192 @@
"belly_name" = selected.name,
"display_name" = selected.display_name
)
- if(active_vore_tab == CONTROL_TAB)
- var/list/addons = list()
- for(var/flag_name in selected.mode_flag_list)
- UNTYPED_LIST_ADD(addons, list("label" = flag_name, "selection" = selected.mode_flags & selected.mode_flag_list[flag_name]))
- var/list/belly_mode_data = list(
- "mode" = selected.digest_mode,
- "item_mode" = selected.item_digest_mode,
- "addons" = addons,
- "name_length" = BELLIES_NAME_MAX,
- "name_min" = BELLIES_NAME_MIN,
- "mode_options" = selected.digest_modes,
- "item_mode_options" = selected.item_digest_modes,
+ switch(active_vore_tab)
+ if(CONTROL_TAB)
+ var/list/addons = list()
+ for(var/flag_name in selected.mode_flag_list)
+ UNTYPED_LIST_ADD(addons, list("label" = flag_name, "selection" = selected.mode_flags & selected.mode_flag_list[flag_name]))
+ var/list/belly_mode_data = list(
+ "mode" = selected.digest_mode,
+ "item_mode" = selected.item_digest_mode,
+ "addons" = addons,
+ "name_length" = BELLIES_NAME_MAX,
+ "name_min" = BELLIES_NAME_MIN,
+ "mode_options" = selected.digest_modes,
+ "item_mode_options" = selected.item_digest_modes,
- )
- selected_list["belly_mode_data"] = belly_mode_data
-
- if(active_vore_tab == DESCRIPTIONS_TAB)
- // Compile our displayed options
- var/list/displayed_options = list(
- VPANEL_DESCRIPTION_TAB,
- VPANEL_EXAMINE_TAB,
- VPANEL_TRASH_EATER_TAB
- )
- if(selected.message_mode || selected.escapable)
- displayed_options += VPANEL_STRUGGLE_TAB
- displayed_options += VPANEL_ESCAPE_TAB
- displayed_options += VPANEL_ESCAPE_ABSORBED_TAB
- if(selected.message_mode || (selected.escapable && (selected.transferlocation || selected.transferlocation_secondary)) || selected.autotransfer_enabled && (selected.autotransferlocation || selected.autotransferlocation_secondary))
- displayed_options += VPANEL_TRANSFER_TAB
- if(selected.message_mode || selected.escapable && (selected.digestchance || selected.absorbchance))
- displayed_options += VPANEL_INTERACTION_TAB
- if(selected.message_mode || selected.digest_mode == DM_DIGEST || selected.digest_mode == DM_SELECT || selected.digest_mode == DM_ABSORB || selected.digest_mode == DM_UNABSORB)
- displayed_options += VPANEL_BELLYMODE_TAB
- if(selected.message_mode || selected.emote_active)
- displayed_options += VPANEL_IDLE_TAB
- if(selected.message_mode || selected.show_fullness_messages)
- displayed_options += VPANEL_LIQUIDS_TAB
-
- var/list/belly_description_data = list(
- "displayed_message_types" = compile_message_data(selected),
- "verb" = selected.vore_verb,
- "release_verb" = selected.release_verb,
- "message_mode" = selected.message_mode,
- "displayed_options" = displayed_options,
- "message_option" = message_option,
- "message_subtab" = message_subtab,
- "selected_message" = selected_message,
- "show_liq_fullness" = selected.show_fullness_messages,
- "emote_time" = selected.emote_time,
- "emote_active" = selected.emote_active,
- "entrance_logs" = selected.entrance_logs,
- "item_digest_logs" = selected.item_digest_logs,
- "name_min" = BELLIES_NAME_MIN,
- "name_length" = BELLIES_NAME_MAX,
- )
- selected_list["belly_description_data"] = belly_description_data
-
- if(active_vore_tab == OPTIONS_TAB)
- var/list/belly_option_data = list(
- "can_taste" = selected.can_taste,
- "is_feedable" = selected.is_feedable,
- "nutrition_percent" = selected.nutrition_percent,
- "digest_brute" = selected.digest_brute,
- "digest_burn" = selected.digest_burn,
- "digest_oxy" = selected.digest_oxy,
- "digest_tox" = selected.digest_tox,
- "digest_clone" = selected.digest_clone,
- "digest_max" = selected.digest_max,
- "digest_free" = selected.get_unused_digestion_damage(),
- "bellytemperature" = selected.bellytemperature,
- "temperature_damage" = selected.temperature_damage,
- "bulge_size" = selected.bulge_size,
- "shrink_grow_size" = selected.shrink_grow_size,
- "contaminates" = selected.contaminates,
- "egg_type" = selected.egg_type,
- "egg_types" = GLOB.global_vore_egg_types,
- "egg_name" = selected.egg_name,
- "egg_name_length" = BELLIES_NAME_MAX,
- "egg_size" = selected.egg_size,
- "recycling" = selected.recycling,
- "storing_nutrition" = selected.storing_nutrition,
- "selective_preference" = selected.selective_preference,
- "save_digest_mode" = selected.save_digest_mode,
- "eating_privacy_local" = selected.eating_privacy_local,
- "vorespawn_blacklist" = selected.vorespawn_blacklist,
- "vorespawn_whitelist" = selected.vorespawn_whitelist,
- "vorespawn_absorbed" = (global_flag_check(selected.vorespawn_absorbed, VS_FLAG_ABSORB_YES) + global_flag_check(selected.vorespawn_absorbed, VS_FLAG_ABSORB_PREY)),
- "private_struggle" = selected.private_struggle,
- "absorbedrename_enabled" = selected.absorbedrename_enabled,
- "absorbedrename_name" = selected.absorbedrename_name,
- "absorbedrename_name_max" = BELLIES_NAME_MAX,
- "absorbedrename_name_min" = BELLIES_NAME_MIN,
- "drainmode" = selected.drainmode,
- "drainmode_options" = selected.drainmodes,
- )
- if(selected.contaminates)
- belly_option_data += list(
- "contaminate_flavor" = selected.contamination_flavor,
- "contaminate_options" = GLOB.contamination_flavors,
- "contaminate_color" = selected.contamination_color,
- "contaminate_colors" = GLOB.contamination_colors
)
+ selected_list["belly_mode_data"] = belly_mode_data
- selected_list["belly_option_data"] = belly_option_data
+ if(DESCRIPTIONS_TAB)
+ // Compile our displayed options
+ var/list/displayed_options = list(
+ VPANEL_DESCRIPTION_TAB,
+ VPANEL_EXAMINE_TAB,
+ VPANEL_TRASH_EATER_TAB
+ )
+ if(selected.message_mode || selected.escapable)
+ displayed_options += VPANEL_STRUGGLE_TAB
+ displayed_options += VPANEL_ESCAPE_TAB
+ displayed_options += VPANEL_ESCAPE_ABSORBED_TAB
+ if(selected.message_mode || (selected.escapable && (selected.transferlocation || selected.transferlocation_secondary)) || selected.autotransfer_enabled && (selected.autotransferlocation || selected.autotransferlocation_secondary))
+ displayed_options += VPANEL_TRANSFER_TAB
+ if(selected.message_mode || selected.escapable && (selected.digestchance || selected.absorbchance))
+ displayed_options += VPANEL_INTERACTION_TAB
+ if(selected.message_mode || selected.digest_mode == DM_DIGEST || selected.digest_mode == DM_SELECT || selected.digest_mode == DM_ABSORB || selected.digest_mode == DM_UNABSORB)
+ displayed_options += VPANEL_BELLYMODE_TAB
+ if(selected.message_mode || selected.emote_active)
+ displayed_options += VPANEL_IDLE_TAB
+ if(selected.message_mode || selected.show_fullness_messages)
+ displayed_options += VPANEL_LIQUIDS_TAB
- if(active_vore_tab == SOUNDS_TAB)
- var/list/belly_sound_data = list(
- "is_wet" = selected.is_wet,
- "wet_loop" = selected.wet_loop,
- "fancy" = selected.fancy_vore,
- "sound" = selected.vore_sound,
- "release_sound" = selected.release_sound,
- "sound_volume" = selected.sound_volume,
- "noise_freq" = selected.noise_freq,
- "min_voice_freq" = MIN_VOICE_FREQ,
- "max_voice_freq" = MAX_VOICE_FREQ,
- "vore_sound_list" = (selected.fancy_vore ? GLOB.fancy_vore_sounds : GLOB.classic_vore_sounds),
- "release_sound_list" = (selected.fancy_vore ? GLOB.fancy_release_sounds : GLOB.classic_release_sounds)
- )
- selected_list["belly_sound_data"] = belly_sound_data
+ var/list/belly_description_data = list(
+ "displayed_message_types" = compile_message_data(selected),
+ "verb" = selected.vore_verb,
+ "release_verb" = selected.release_verb,
+ "message_mode" = selected.message_mode,
+ "displayed_options" = displayed_options,
+ "message_option" = message_option,
+ "message_subtab" = message_subtab,
+ "selected_message" = selected_message,
+ "show_liq_fullness" = selected.show_fullness_messages,
+ "emote_time" = selected.emote_time,
+ "emote_active" = selected.emote_active,
+ "entrance_logs" = selected.entrance_logs,
+ "item_digest_logs" = selected.item_digest_logs,
+ "name_min" = BELLIES_NAME_MIN,
+ "name_length" = BELLIES_NAME_MAX,
+ )
+ selected_list["belly_description_data"] = belly_description_data
- if(active_vore_tab == VISUALS_TAB)
- var/list/silicon_control = list(
- "silicon_belly_overlay_preference" = selected.silicon_belly_overlay_preference,
- "belly_sprite_option_shown" = LAZYLEN(owner.vore_icon_bellies) >= 1 ? TRUE : FALSE,
- "belly_sprite_to_affect" = selected.belly_sprite_to_affect
- )
- var/list/belly_fullscreens
- if(selected.colorization_enabled)
- belly_fullscreens = cached_icon_states('icons/mob/screen_full_vore_list.dmi') //Makes any icons inside of here selectable.
- else
- belly_fullscreens = cached_icon_states('icons/mob/screen_full_vore.dmi') //Non colorable
+ if(OPTIONS_TAB)
+ var/list/belly_option_data = list(
+ "can_taste" = selected.can_taste,
+ "is_feedable" = selected.is_feedable,
+ "nutrition_percent" = selected.nutrition_percent,
+ "digest_brute" = selected.digest_brute,
+ "digest_burn" = selected.digest_burn,
+ "digest_oxy" = selected.digest_oxy,
+ "digest_tox" = selected.digest_tox,
+ "digest_clone" = selected.digest_clone,
+ "digest_max" = selected.digest_max,
+ "digest_free" = selected.get_unused_digestion_damage(),
+ "bellytemperature" = selected.bellytemperature,
+ "temperature_damage" = selected.temperature_damage,
+ "bulge_size" = selected.bulge_size,
+ "shrink_grow_size" = selected.shrink_grow_size,
+ "contaminates" = selected.contaminates,
+ "egg_type" = selected.egg_type,
+ "egg_types" = GLOB.global_vore_egg_types,
+ "egg_name" = selected.egg_name,
+ "egg_name_length" = BELLIES_NAME_MAX,
+ "egg_size" = selected.egg_size,
+ "recycling" = selected.recycling,
+ "storing_nutrition" = selected.storing_nutrition,
+ "selective_preference" = selected.selective_preference,
+ "save_digest_mode" = selected.save_digest_mode,
+ "eating_privacy_local" = selected.eating_privacy_local,
+ "vorespawn_blacklist" = selected.vorespawn_blacklist,
+ "vorespawn_whitelist" = selected.vorespawn_whitelist,
+ "vorespawn_absorbed" = (global_flag_check(selected.vorespawn_absorbed, VS_FLAG_ABSORB_YES) + global_flag_check(selected.vorespawn_absorbed, VS_FLAG_ABSORB_PREY)),
+ "private_struggle" = selected.private_struggle,
+ "absorbedrename_enabled" = selected.absorbedrename_enabled,
+ "absorbedrename_name" = selected.absorbedrename_name,
+ "absorbedrename_name_max" = BELLIES_NAME_MAX,
+ "absorbedrename_name_min" = BELLIES_NAME_MIN,
+ "drainmode" = selected.drainmode,
+ "drainmode_options" = selected.drainmodes,
+ )
+ if(selected.contaminates)
+ belly_option_data += list(
+ "contaminate_flavor" = selected.contamination_flavor,
+ "contaminate_options" = GLOB.contamination_flavors,
+ "contaminate_color" = selected.contamination_color,
+ "contaminate_colors" = GLOB.contamination_colors
+ )
- var/list/vs_flags = list()
- for(var/flag_name in selected.vore_sprite_flag_list)
- UNTYPED_LIST_ADD(vs_flags, list("label" = flag_name, "selection" = selected.vore_sprite_flags & selected.vore_sprite_flag_list[flag_name]))
+ selected_list["belly_option_data"] = belly_option_data
- var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[host.vore_selected.undergarment_chosen]
- var/list/undergarments
- if(UWC)
- undergarments = UWC.items
+ if(SOUNDS_TAB)
+ var/list/belly_sound_data = list(
+ "is_wet" = selected.is_wet,
+ "wet_loop" = selected.wet_loop,
+ "fancy" = selected.fancy_vore,
+ "sound" = selected.vore_sound,
+ "release_sound" = selected.release_sound,
+ "sound_volume" = selected.sound_volume,
+ "noise_freq" = selected.noise_freq,
+ "min_voice_freq" = MIN_VOICE_FREQ,
+ "max_voice_freq" = MAX_VOICE_FREQ,
+ "vore_sound_list" = (selected.fancy_vore ? GLOB.fancy_vore_sounds : GLOB.classic_vore_sounds),
+ "release_sound_list" = (selected.fancy_vore ? GLOB.fancy_release_sounds : GLOB.classic_release_sounds)
+ )
+ selected_list["belly_sound_data"] = belly_sound_data
- var/list/belly_visual_data = list(
- "belly_fullscreen" = selected.belly_fullscreen,
- "colorization_enabled" = selected.colorization_enabled,
- "belly_fullscreen_color" = selected.belly_fullscreen_color,
- "belly_fullscreen_color2" = selected.belly_fullscreen_color2,
- "belly_fullscreen_color3" = selected.belly_fullscreen_color3,
- "belly_fullscreen_color4" = selected.belly_fullscreen_color4,
- "belly_fullscreen_alpha" = selected.belly_fullscreen_alpha,
- "possible_fullscreens" = belly_fullscreens,
- "disable_hud" = selected.disable_hud,
- "vore_sprite_flags" = vs_flags,
- "affects_voresprite" = selected.affects_vore_sprites,
- "absorbed_voresprite" = selected.count_absorbed_prey_for_sprite,
- "absorbed_multiplier" = selected.absorbed_multiplier,
- "liquid_voresprite" = selected.count_liquid_for_sprite,
- "liquid_multiplier" = selected.liquid_multiplier,
- "item_voresprite" = selected.count_items_for_sprite,
- "item_multiplier" = selected.item_multiplier,
- "health_voresprite" = selected.health_impacts_size,
- "resist_animation" = selected.resist_triggers_animation,
- "voresprite_size_factor" = selected.size_factor_for_sprite,
- "belly_sprite_to_affect" = selected.belly_sprite_to_affect,
- "belly_sprite_options" = host.vore_icon_bellies,
- "undergarment_chosen" = selected.undergarment_chosen,
- "undergarment_if_none" = selected.undergarment_if_none || "None",
- "undergarment_options" = global_underwear.categories,
- "undergarment_options_if_none" = undergarments,
- "undergarment_color" = selected.undergarment_color,
- "tail_option_shown" = ishuman(owner),
- "tail_to_change_to" = selected.tail_to_change_to,
- "tail_sprite_options" = GLOB.tail_styles_list,
- "mob_belly_controls" = silicon_control
- )
- selected_list["belly_visual_data"] = belly_visual_data
+ if(VISUALS_TAB)
+ var/list/silicon_control = list(
+ "silicon_belly_overlay_preference" = selected.silicon_belly_overlay_preference,
+ "belly_sprite_option_shown" = LAZYLEN(owner.vore_icon_bellies) >= 1 ? TRUE : FALSE,
+ "belly_sprite_to_affect" = selected.belly_sprite_to_affect
+ )
+ var/list/belly_fullscreens
+ if(selected.colorization_enabled)
+ belly_fullscreens = cached_icon_states('icons/mob/screen_full_vore_list.dmi') //Makes any icons inside of here selectable.
+ else
+ belly_fullscreens = cached_icon_states('icons/mob/screen_full_vore.dmi') //Non colorable
- if(active_vore_tab == INTERACTIONS_TAB)
- var/list/belly_interaction_data = list(
- "escapable" = selected.escapable,
- "interacts" = compile_interact_data(selected),
- "autotransfer_enabled" = selected.autotransfer_enabled,
- "autotransfer" = compile_autotransfer_data(selected)
- )
- selected_list["belly_interaction_data"] = belly_interaction_data
+ var/list/vs_flags = list()
+ for(var/flag_name in selected.vore_sprite_flag_list)
+ UNTYPED_LIST_ADD(vs_flags, list("label" = flag_name, "selection" = selected.vore_sprite_flags & selected.vore_sprite_flag_list[flag_name]))
+
+ var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[host.vore_selected.undergarment_chosen]
+ var/list/undergarments
+ if(UWC)
+ undergarments = UWC.items
+
+ var/list/belly_visual_data = list(
+ "belly_fullscreen" = selected.belly_fullscreen,
+ "colorization_enabled" = selected.colorization_enabled,
+ "belly_fullscreen_color" = selected.belly_fullscreen_color,
+ "belly_fullscreen_color2" = selected.belly_fullscreen_color2,
+ "belly_fullscreen_color3" = selected.belly_fullscreen_color3,
+ "belly_fullscreen_color4" = selected.belly_fullscreen_color4,
+ "belly_fullscreen_alpha" = selected.belly_fullscreen_alpha,
+ "possible_fullscreens" = belly_fullscreens,
+ "disable_hud" = selected.disable_hud,
+ "vore_sprite_flags" = vs_flags,
+ "affects_voresprite" = selected.affects_vore_sprites,
+ "absorbed_voresprite" = selected.count_absorbed_prey_for_sprite,
+ "absorbed_multiplier" = selected.absorbed_multiplier,
+ "liquid_voresprite" = selected.count_liquid_for_sprite,
+ "liquid_multiplier" = selected.liquid_multiplier,
+ "item_voresprite" = selected.count_items_for_sprite,
+ "item_multiplier" = selected.item_multiplier,
+ "health_voresprite" = selected.health_impacts_size,
+ "resist_animation" = selected.resist_triggers_animation,
+ "voresprite_size_factor" = selected.size_factor_for_sprite,
+ "belly_sprite_to_affect" = selected.belly_sprite_to_affect,
+ "belly_sprite_options" = host.vore_icon_bellies,
+ "undergarment_chosen" = selected.undergarment_chosen,
+ "undergarment_if_none" = selected.undergarment_if_none || "None",
+ "undergarment_options" = global_underwear.categories,
+ "undergarment_options_if_none" = undergarments,
+ "undergarment_color" = selected.undergarment_color,
+ "tail_option_shown" = ishuman(owner),
+ "tail_to_change_to" = selected.tail_to_change_to,
+ "tail_sprite_options" = GLOB.tail_styles_list,
+ "mob_belly_controls" = silicon_control
+ )
+ selected_list["belly_visual_data"] = belly_visual_data
+
+ if(INTERACTIONS_TAB)
+ var/list/belly_interaction_data = list(
+ "escapable" = selected.escapable,
+ "interacts" = compile_interact_data(selected),
+ "autotransfer_enabled" = selected.autotransfer_enabled,
+ "autotransfer" = compile_autotransfer_data(selected)
+ )
+ selected_list["belly_interaction_data"] = belly_interaction_data
var/list/selected_contents
@@ -337,18 +338,19 @@
if(M.absorbed)
info["absorbed"] = TRUE
LAZYADD(selected_contents, list(info))
- if(active_vore_tab == CONTENTS_TAB)
- selected_list["contents"] = selected_contents
selected_list["content_length"] = total_content_count
+ switch(active_vore_tab)
+ if(CONTENTS_TAB)
+ selected_list["contents"] = selected_contents
- if(active_vore_tab == LIQUID_OPTIONS_TAB)
- // liquid belly options
- var/list/belly_liquid_data = list(
- "show_liq" = selected.show_liquids,
- "liq_interacts" = compile_liquid_interact_data(selected)
- )
- selected_list["belly_liquid_data"] = belly_liquid_data
+ if(LIQUID_OPTIONS_TAB)
+ // liquid belly options
+ var/list/belly_liquid_data = list(
+ "show_liq" = selected.show_liquids,
+ "liq_interacts" = compile_liquid_interact_data(selected)
+ )
+ selected_list["belly_liquid_data"] = belly_liquid_data
return selected_list
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index f5548a4b91..875d0d7680 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -4,9 +4,10 @@
#define STATION_PREF_NAME "Virgo"
#define VORE_BELLY_TAB 0
-#define SOULCATCHER_TAB 1
-#define GENERAL_TAB 2
-#define PREFERENCE_TAB 3
+#define VORE_INSIDE_TAB 1
+#define SOULCATCHER_TAB 2
+#define GENERAL_TAB 3
+#define PREFERENCE_TAB 4
/mob
var/datum/vore_look/vorePanel
@@ -144,36 +145,42 @@
data["prefs"] = null
data["general_pref_data"] = null
- if(active_tab == VORE_BELLY_TAB)
- data["active_vore_tab"] = active_vore_tab
- data["host_mobtype"] = get_host_mobtype(host)
+ switch(active_tab)
+ if(VORE_BELLY_TAB)
+ data["active_vore_tab"] = active_vore_tab
+ data["host_mobtype"] = get_host_mobtype(host)
- // Content Data
- data["show_pictures"] = show_pictures
- data["icon_overflow"] = icon_overflow
+ // Content Data
+ data["show_pictures"] = show_pictures
+ data["icon_overflow"] = icon_overflow
- // List of all our bellies
- data["our_bellies"] = get_vorebellies(host)
+ // List of all our bellies
+ data["our_bellies"] = get_vorebellies(host)
- // Selected belly data. TODO, split this into sub data per tab, we don't need all of this at once, ever!
- data["selected"] = get_selected_data(host)
+ // Selected belly data. TODO, split this into sub data per tab, we don't need all of this at once, ever!
+ data["selected"] = get_selected_data(host)
- if(active_tab == SOULCATCHER_TAB)
- // Soulcatcher and abilities
- data["our_bellies"] = get_vorebellies(host, FALSE)
- data["soulcatcher"] = get_soulcatcher_data(host)
- data["abilities"] = get_ability_data(host)
+ if(VORE_INSIDE_TAB)
+ // Content Data
+ data["show_pictures"] = show_pictures
+ data["icon_overflow"] = icon_overflow
- if(active_tab == PREFERENCE_TAB)
- // Preference data, we only ever need that when we go to the pref page!
- data["prefs"] = get_preference_data(host)
- // Content Data
- data["show_pictures"] = show_pictures
- data["icon_overflow"] = icon_overflow
+ if(SOULCATCHER_TAB)
+ // Soulcatcher and abilities
+ data["our_bellies"] = get_vorebellies(host, FALSE)
+ data["soulcatcher"] = get_soulcatcher_data(host)
+ data["abilities"] = get_ability_data(host)
- if(active_tab == GENERAL_TAB)
- data["general_pref_data"] = get_general_data(host)
- data["our_bellies"] = get_vorebellies(host, FALSE)
+ if(PREFERENCE_TAB)
+ // Preference data, we only ever need that when we go to the pref page!
+ data["prefs"] = get_preference_data(host)
+ // Content Data
+ data["show_pictures"] = show_pictures
+ data["icon_overflow"] = icon_overflow
+
+ if(GENERAL_TAB)
+ data["general_pref_data"] = get_general_data(host)
+ data["our_bellies"] = get_vorebellies(host, FALSE)
return data
@@ -1339,6 +1346,7 @@
#undef STATION_PREF_NAME
#undef VORE_BELLY_TAB
+#undef VORE_INSIDE_TAB
#undef SOULCATCHER_TAB
#undef PREFERENCE_TAB
#undef GENERAL_TAB
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx
index cdaf1bc1ad..b4145bbd70 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreInsidePanel.tsx
@@ -1,19 +1,13 @@
-import { Box, Collapsible, Section } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { Box, Section, Stack } from 'tgui-core/components';
import {
digestModeToColor,
digestModeToPreyMode,
reagentToColor,
} from '../constants';
import type { insideData } from '../types';
-import { VoreContentsPanel } from '../VoreSelectedBellyTabs/VoreContentsPanel';
-export const VoreInsidePanel = (props: {
- inside: insideData;
- show_pictures: BooleanLike;
- icon_overflow: BooleanLike;
-}) => {
- const { inside, show_pictures, icon_overflow } = props;
+export const VoreInsidePanel = (props: { inside: insideData }) => {
+ const { inside } = props;
const {
absorbed,
@@ -21,64 +15,60 @@ export const VoreInsidePanel = (props: {
belly_mode,
desc,
pred,
- contents,
- ref,
liq_lvl,
liq_reagent_type,
liuq_name,
} = inside;
if (!belly_name) {
- return You aren't inside anyone.;
+ return (
+
+ You aren't inside anyone.
+
+ );
}
return (
-
- You are currently {absorbed ? 'absorbed into' : 'inside'}
-
-
-
- {pred}'s
-
-
-
- {belly_name}
-
- {!!liq_lvl && liq_lvl > 0 && (
- <>
- ,
-
- bathing in a pool of
+
+
+
+ You are currently {absorbed ? 'absorbed into' : 'inside'}
-
- {liuq_name}
+
+ {pred}'s
- >
- )}
-
-
- and you are
-
-
-
- {digestModeToPreyMode[belly_mode!]}
-
-
- {desc}
- {contents?.length ? (
-
-
-
- ) : (
- 'There is nothing else around you.'
- )}
+
+
+ {belly_name}
+
+ {!!liq_lvl && liq_lvl > 0 && (
+ <>
+ ,
+
+ bathing in a pool of
+
+
+
+ {liuq_name}
+
+ >
+ )}
+
+
+ and you are
+
+
+
+ {digestModeToPreyMode[belly_mode!]}
+
+
+
+ {desc}
+
+
+
);
};
diff --git a/tgui/packages/tgui/interfaces/VorePanel/index.tsx b/tgui/packages/tgui/interfaces/VorePanel/index.tsx
index c282d7a441..9ebf943d39 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/index.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/index.tsx
@@ -1,7 +1,15 @@
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { useBackend } from 'tgui/backend';
import { Window } from 'tgui/layouts';
-import { Button, Icon, NoticeBox, Stack, Tabs } from 'tgui-core/components';
+import {
+ Box,
+ Button,
+ Icon,
+ NoticeBox,
+ Section,
+ Stack,
+ Tabs,
+} from 'tgui-core/components';
import type { Data } from './types';
import { VoreBellySelectionAndCustomization } from './VorePanelMainTabs/VoreBellySelectionAndCustomization';
@@ -9,6 +17,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';
/**
* There are three main sections to this UI.
@@ -43,6 +52,12 @@ export const VorePanel = () => {
const [editMode, setEditMode] = useState(!!persist_edit_mode);
+ useEffect(() => {
+ if (active_tab === 1 && !inside?.ref) {
+ act('change_tab', { tab: 0 });
+ }
+ }, [inside?.ref]);
+
const tabs: (React.JSX.Element | null | undefined)[] = [];
tabs[0] = our_bellies && selected && host_mobtype && (
@@ -61,7 +76,19 @@ export const VorePanel = () => {
maxBellyName={max_belly_name}
/>
);
- tabs[1] = our_bellies && soulcatcher && abilities && (
+ tabs[1] = inside.contents?.length ? (
+
+ ) : (
+
+ There is nothing else around you.
+
+ );
+ tabs[2] = our_bellies && soulcatcher && abilities && (
{
persist_edit_mode={persist_edit_mode}
/>
);
- tabs[2] = general_pref_data && our_bellies && (
+ tabs[3] = general_pref_data && our_bellies && (
{
persist_edit_mode={persist_edit_mode}
/>
);
- tabs[3] = prefs && ;
+ tabs[4] = prefs && ;
return (
@@ -113,11 +140,7 @@ export const VorePanel = () => {
''}
500 ? '30%' : '20%'}>
-
+
@@ -128,23 +151,32 @@ export const VorePanel = () => {
Bellies
+ {!!inside.ref && (
+ act('change_tab', { tab: 1 })}
+ >
+ Inside
+
+
+ )}
act('change_tab', { tab: 1 })}
+ selected={active_tab === 2}
+ onClick={() => act('change_tab', { tab: 2 })}
>
Soulcatcher
act('change_tab', { tab: 2 })}
+ selected={active_tab === 3}
+ onClick={() => act('change_tab', { tab: 3 })}
>
General
act('change_tab', { tab: 3 })}
+ selected={active_tab === 4}
+ onClick={() => act('change_tab', { tab: 4 })}
>
Preferences