[MIRROR] move inside to its own tab, only shwoing when inside a belly (#11907)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-11-05 01:29:08 +01:00
committed by GitHub
co-authored by Kashargul
parent f9eb7665a5
commit 749fffc8ff
6 changed files with 376 additions and 342 deletions
@@ -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
@@ -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)
@@ -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
+35 -27
View File
@@ -4,9 +4,10 @@
#define STATION_PREF_NAME "Chomp" // CHOMPEdit
#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
@@ -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 <Section title="Inside">You aren&apos;t inside anyone.</Section>;
return (
<Section fill title="Inside">
You aren&apos;t inside anyone.
</Section>
);
}
return (
<Section title="Inside" fill scrollable>
<Box color="green" inline>
You are currently {absorbed ? 'absorbed into' : 'inside'}
</Box>
&nbsp;
<Box color="yellow" inline>
{pred}&apos;s
</Box>
&nbsp;
<Box color="red" inline>
{belly_name}
</Box>
{!!liq_lvl && liq_lvl > 0 && (
<>
,&nbsp;
<Box color="yellow" inline>
bathing in a pool of
<Stack vertical fill>
<Stack.Item>
<Box color="green" inline>
You are currently {absorbed ? 'absorbed into' : 'inside'}
</Box>
&nbsp;
<Box color={reagentToColor[liq_reagent_type!]} inline>
{liuq_name}
<Box color="yellow" inline>
{pred}&apos;s
</Box>
</>
)}
&nbsp;
<Box color="yellow" inline>
and you are
</Box>
&nbsp;
<Box color={digestModeToColor[belly_mode!]} inline>
{digestModeToPreyMode[belly_mode!]}
</Box>
&nbsp;
<Box color="label">{desc}</Box>
{contents?.length ? (
<Collapsible title="Belly Contents">
<VoreContentsPanel
contents={contents}
belly={ref}
show_pictures={show_pictures}
icon_overflow={icon_overflow}
/>
</Collapsible>
) : (
'There is nothing else around you.'
)}
&nbsp;
<Box color="red" inline>
{belly_name}
</Box>
{!!liq_lvl && liq_lvl > 0 && (
<>
,&nbsp;
<Box color="yellow" inline>
bathing in a pool of
</Box>
&nbsp;
<Box color={reagentToColor[liq_reagent_type!]} inline>
{liuq_name}
</Box>
</>
)}
&nbsp;
<Box color="yellow" inline>
and you are
</Box>
&nbsp;
<Box color={digestModeToColor[belly_mode!]} inline>
{digestModeToPreyMode[belly_mode!]}
</Box>
&nbsp;
<Stack.Item>
<Box color="label">{desc}</Box>
</Stack.Item>
</Stack.Item>
</Stack>
</Section>
);
};
@@ -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 ? (
<VoreContentsPanel
contents={inside.contents}
belly={inside.ref}
show_pictures={show_pictures}
icon_overflow={icon_overflow}
/>
) : (
<Section fill>
<Box>There is nothing else around you.</Box>
</Section>
);
tabs[2] = our_bellies && soulcatcher && abilities && (
<VoreSoulcatcher
our_bellies={our_bellies}
soulcatcher={soulcatcher}
@@ -71,7 +98,7 @@ export const VorePanel = () => {
persist_edit_mode={persist_edit_mode}
/>
);
tabs[2] = general_pref_data && our_bellies && (
tabs[3] = general_pref_data && our_bellies && (
<VoreUserGeneral
general_pref_data={general_pref_data}
our_bellies={our_bellies}
@@ -80,7 +107,7 @@ export const VorePanel = () => {
persist_edit_mode={persist_edit_mode}
/>
);
tabs[3] = prefs && <VoreUserPreferences prefs={prefs} />;
tabs[4] = prefs && <VoreUserPreferences prefs={prefs} />;
return (
<Window width={1030} height={760} theme="abstract">
@@ -113,11 +140,7 @@ export const VorePanel = () => {
''}
</Stack.Item>
<Stack.Item basis={inside?.desc?.length || 0 > 500 ? '30%' : '20%'}>
<VoreInsidePanel
inside={inside}
show_pictures={show_pictures}
icon_overflow={icon_overflow}
/>
<VoreInsidePanel inside={inside} />
</Stack.Item>
<Stack.Item>
<Tabs>
@@ -128,23 +151,32 @@ export const VorePanel = () => {
Bellies
<Icon name="list" ml={0.5} />
</Tabs.Tab>
{!!inside.ref && (
<Tabs.Tab
selected={active_tab === 1}
onClick={() => act('change_tab', { tab: 1 })}
>
Inside
<Icon name="person-shelter" ml={0.5} />
</Tabs.Tab>
)}
<Tabs.Tab
selected={active_tab === 1}
onClick={() => act('change_tab', { tab: 1 })}
selected={active_tab === 2}
onClick={() => act('change_tab', { tab: 2 })}
>
Soulcatcher
<Icon name="ghost" ml={0.5} />
</Tabs.Tab>
<Tabs.Tab
selected={active_tab === 2}
onClick={() => act('change_tab', { tab: 2 })}
selected={active_tab === 3}
onClick={() => act('change_tab', { tab: 3 })}
>
General
<Icon name="user-circle" ml={0.5} />
</Tabs.Tab>
<Tabs.Tab
selected={active_tab === 3}
onClick={() => act('change_tab', { tab: 3 })}
selected={active_tab === 4}
onClick={() => act('change_tab', { tab: 4 })}
>
Preferences
<Icon name="user-cog" ml={0.5} />