import { capitalize } from 'common/string'; import { Fragment } from 'inferno'; import { useBackend, useLocalState } from '../backend'; import { Box, Button, Flex, Collapsible, Icon, LabeledList, NoticeBox, Section, Tabs, Divider, Stack } from '../components'; import { Window } from '../layouts'; import { classes } from 'common/react'; const stats = [null, 'average', 'bad']; const digestModeToColor = { 'Hold': null, 'Digest': 'red', 'Absorb': 'purple', 'Unabsorb': 'purple', 'Drain': 'orange', 'Selective': 'orange', 'Shrink': 'teal', 'Grow': 'teal', 'Size Steal': 'teal', 'Heal': 'green', 'Encase In Egg': 'blue', }; const digestModeToPreyMode = { 'Hold': 'being held.', 'Digest': 'being digested.', 'Absorb': 'being absorbed.', 'Unabsorb': 'being unabsorbed.', 'Drain': 'being drained.', 'Selective': 'being processed.', 'Shrink': 'being shrunken.', 'Grow': 'being grown.', 'Size Steal': 'having your size stolen.', 'Heal': 'being healed.', 'Encase In Egg': 'being encased in an egg.', }; /** * There are three main sections to this UI. * - The Inside Panel, where all relevant data for interacting with a belly you're in is located. * - The Belly Selection Panel, where you can select what belly people will go into and customize the active one. * - User Preferences, where you can adjust all of your vore preferences on the fly. */ /** * CHOMPedits specified here. Read ALL of this if conflicts happen, I can't find a way to add comments line by line. * * Under VoreSelectedBelly the following strings have been added to const{}: * show_liq, liq_interacts, liq_reagent_gen, liq_reagent_type, liq_reagent_name, * liq_reagent_transfer_verb, liq_reagent_nutri_rate, liq_reagent_capacity, liq_sloshing, liq_reagent_addons, * show_liq_fullness, liq_messages, liq_msg_toggle1, liq_msg_toggle2, liq_msg_toggle3, liq_msg_toggle4, * liq_msg_toggle5, liq_msg1, liq_msg2, liq_msg3, liq_msg4, liq_msg5, sound_volume, egg_name, * * To the tabs section of VoreSelectedBelly return * setTabIndex(5)}> * Liquid Options * * setTabIndex(6)}> * Liquid Messages * * * All of the content for tabIndex === 5 and tabIndex === 6 * * Under VoreUserPreferences the following strings have been added to const{}: * liq_rec, liq_giv, * * To VoreUserPreferences return * * * * * *
*
* * *
*
* Belly styles: * * {Object.keys(possible_fullscreens).map(key => ( * * ))} *
*
* * LINE 900 - const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0); * * return tabIndex===4 ? null : ( * * New preference added, noisy_full * noisy_full enables belching when nutrition exceeds 500, very similar to the noisy preference. * * That's everything so far. * */ export const VorePanel = (props, context) => { const { act, data } = useBackend(context); const [tabIndex, setTabIndex] = useLocalState(context, 'panelTabIndex', 0); const tabs = []; tabs[0] = ; tabs[1] = ; return ( {(data.unsaved_changes && ( Warning: Unsaved Changes! {Object.keys(possible_fullscreens).map((key) => ( ))} ); }; const VoreSelectedBellyInteractions = (props, context) => { const { act } = useBackend(context); const { belly } = props; const { escapable, interacts, vorespawn_blacklist, autotransfer_enabled, autotransfer } = belly; return (
act('set_attribute', { attribute: 'b_escapable' })} icon={escapable ? 'toggle-on' : 'toggle-off'} selected={escapable} content={escapable ? 'Interactions On' : 'Interactions Off'} /> }> {escapable ? (
); }; const VoreContentsPanel = (props, context) => { const { act, data } = useBackend(context); const { show_pictures } = data; const { contents, belly, outside = false } = props; return ( {(outside && ( )) || null} {(show_pictures && ( {contents.map((thing) => ( {thing.name} ))} )) || ( {contents.map((thing) => ( ))} )} ); }; const VoreSelectedBellyLiquidOptions = (props, context) => { const { act } = useBackend(context); const { belly } = props; const { show_liq, liq_interacts, liq_reagent_gen, liq_reagent_type, liq_reagent_name, liq_reagent_transfer_verb, liq_reagent_nutri_rate, liq_reagent_capacity, liq_sloshing, liq_reagent_addons, show_liq_fullness, liq_messages, liq_msg1, liq_msg2, liq_msg3, liq_msg4, liq_msg5, } = belly; return (
act('liq_set_attribute', { liq_attribute: 'b_show_liq' })} icon={show_liq ? 'toggle-on' : 'toggle-off'} selected={show_liq} tooltipPosition="left" tooltip={'These are the settings for liquid bellies, every belly has a liquid storage.'} content={show_liq ? 'Liquids On' : 'Liquids Off'} /> }> {show_liq ? (
); }; const VoreSelectedBellyLiquidMessages = (props, context) => { const { act } = useBackend(context); const { belly } = props; const { liq_interacts, liq_reagent_gen, liq_reagent_type, liq_reagent_name, liq_reagent_transfer_verb, liq_reagent_nutri_rate, liq_reagent_capacity, liq_sloshing, liq_reagent_addons, show_liq_fullness, liq_messages, liq_msg_toggle1, liq_msg_toggle2, liq_msg_toggle3, liq_msg_toggle4, liq_msg_toggle5, liq_msg1, liq_msg2, liq_msg3, liq_msg4, liq_msg5, } = belly; return (
act('liq_set_messages', { liq_messages: 'b_show_liq_fullness' })} icon={show_liq_fullness ? 'toggle-on' : 'toggle-off'} selected={show_liq_fullness} tooltipPosition="left" tooltip={'These are the settings for belly visibility when involving liquids fullness.'} content={show_liq_fullness ? 'Messages On' : 'Messages Off'} /> }> {show_liq_fullness ? (
); }; const VoreUserPreferences = (props, context) => { const { act, data } = useBackend(context); const { digestable, devourable, resizable, feeding, absorbable, digest_leave_remains, allowmobvore, permit_healbelly, show_vore_fx, can_be_drop_prey, can_be_drop_pred, latejoin_vore, latejoin_prey, allow_spontaneous_tf, step_mechanics_active, pickup_mechanics_active, noisy, noisy_full, liq_rec, liq_giv, autotransferable, drop_vore, stumble_vore, slip_vore, throw_vore, nutrition_message_visible, weight_message_visible, eating_privacy_global, } = data.prefs; const { show_pictures } = data; const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0); const preferences = { digestion: { action: 'toggle_digest', test: digestable, tooltip: { main: "This button is for those who don't like being digested. It can make you undigestable.", enable: 'Click here to allow digestion.', disable: 'Click here to prevent digestion.', }, content: { enabled: 'Digestion Allowed', disabled: 'No Digestion', }, }, absorbable: { action: 'toggle_absorbable', test: absorbable, tooltip: { main: "This button allows preds to know whether you prefer or don't prefer to be absorbed.", enable: 'Click here to allow being absorbed.', disable: 'Click here to disallow being absorbed.', }, content: { enabled: 'Absorption Allowed', disabled: 'No Absorption', }, }, devour: { action: 'toggle_devour', test: devourable, tooltip: { main: 'This button is to toggle your ability to be devoured by others.', enable: 'Click here to allow being devoured.', disable: 'Click here to prevent being devoured.', }, content: { enabled: 'Devouring Allowed', disabled: 'No Devouring', }, }, mobvore: { action: 'toggle_mobvore', test: allowmobvore, tooltip: { main: "This button is for those who don't like being eaten by mobs.", enable: 'Click here to allow being eaten by mobs.', disable: 'Click here to prevent being eaten by mobs.', }, content: { enabled: 'Mobs eating you allowed', disabled: 'No Mobs eating you', }, }, feed: { action: 'toggle_feed', test: feeding, tooltip: { main: 'This button is to toggle your ability to be fed to or by others vorishly.', enable: 'Click here to allow being fed to/by other people.', disable: 'Click here to prevent being fed to/by other people.', }, content: { enabled: 'Feeding Allowed', disabled: 'No Feeding', }, }, healbelly: { action: 'toggle_healbelly', test: permit_healbelly, tooltip: { main: "This button is for those who don't like healbelly used on them as a mechanic." + ' It does not affect anything, but is displayed under mechanical prefs for ease of quick checks.', enable: 'Click here to allow being heal-bellied.', disable: 'Click here to prevent being heal-bellied.', }, content: { enabled: 'Heal-bellies Allowed', disabled: 'No Heal-bellies', }, }, dropnom_prey: { action: 'toggle_dropnom_prey', test: can_be_drop_prey, tooltip: { main: 'This toggle is for spontaneous, environment related vore' + ' as prey, including drop-noms, teleporters, etc.', enable: 'Click here to allow being spontaneous prey.', disable: 'Click here to prevent being spontaneous prey.', }, content: { enabled: 'Spontaneous Prey Enabled', disabled: 'Spontaneous Prey Disabled', }, }, dropnom_pred: { action: 'toggle_dropnom_pred', test: can_be_drop_pred, tooltip: { main: 'This toggle is for spontaneous, environment related vore' + ' as a predator, including drop-noms, teleporters, etc.', enable: 'Click here to allow being spontaneous pred.', disable: 'Click here to prevent being spontaneous pred.', }, content: { enabled: 'Spontaneous Pred Enabled', disabled: 'Spontaneous Pred Disabled', }, }, toggle_drop_vore: { action: 'toggle_drop_vore', test: drop_vore, tooltip: { main: 'Allows for dropnom spontaneous vore to occur. ' + 'Note, you still need spontaneous vore pred and/or prey enabled.', enable: 'Click here to allow for dropnoms.', disable: 'Click here to disable dropnoms.', }, content: { enabled: 'Drop Noms Enabled', disabled: 'Drop Noms Disabled', }, }, toggle_slip_vore: { action: 'toggle_slip_vore', test: slip_vore, tooltip: { main: 'Allows for slip related spontaneous vore to occur. ' + 'Note, you still need spontaneous vore pred and/or prey enabled.', enable: 'Click here to allow for slip vore.', disable: 'Click here to disable slip vore.', }, content: { enabled: 'Slip Vore Enabled', disabled: 'Slip Vore Disabled', }, }, toggle_stumble_vore: { action: 'toggle_stumble_vore', test: stumble_vore, tooltip: { main: 'Allows for stumble related spontaneous vore to occur. ' + ' Note, you still need spontaneous vore pred and/or prey enabled.', enable: 'Click here to allow for stumble vore.', disable: 'Click here to disable stumble vore.', }, content: { enabled: 'Stumble Vore Enabled', disabled: 'Stumble Vore Disabled', }, }, toggle_throw_vore: { action: 'toggle_throw_vore', test: throw_vore, tooltip: { main: 'Allows for throw related spontaneous vore to occur. ' + ' Note, you still need spontaneous vore pred and/or prey enabled.', enable: 'Click here to allow for throw vore.', disable: 'Click here to disable throw vore.', }, content: { enabled: 'Throw Vore Enabled', disabled: 'Throw Vore Disabled', }, }, spawnbelly: { action: 'toggle_latejoin_vore', test: latejoin_vore, tooltip: { main: 'Toggle late join vore spawnpoint.', enable: 'Click here to turn on vorish spawnpoint.', disable: 'Click here to turn off vorish spawnpoint.', }, content: { enabled: 'Vore Spawn Pred Enabled', disabled: 'Vore Spawn Pred Disabled', }, }, spawnprey: { action: 'toggle_latejoin_prey', test: latejoin_prey, tooltip: { main: 'Toggle late join preds spawning on you.', enable: 'Click here to turn on preds spawning around you.', disable: 'Click here to turn off preds spawning around you.', }, content: { enabled: 'Vore Spawn Prey Enabled', disabled: 'Vore Spawn Prey Disabled', }, }, noisy: { action: 'toggle_noisy', test: noisy, tooltip: { main: 'Toggle audible hunger noises.', enable: 'Click here to turn on hunger noises.', disable: 'Click here to turn off hunger noises.', }, content: { enabled: 'Hunger Noises Enabled', disabled: 'Hunger Noises Disabled', }, }, noisy_full: { action: 'toggle_noisy_full', test: noisy_full, tooltip: { main: 'Toggle belching while full.', enable: 'Click here to turn on belching while full.', disable: 'Click here to turn off belching while full.', }, content: { enabled: 'Belching Enabled', disabled: 'Belching Disabled', }, }, resize: { action: 'toggle_resize', test: resizable, tooltip: { main: 'This button is to toggle your ability to be resized by others.', enable: 'Click here to allow being resized.', disable: 'Click here to prevent being resized.', }, content: { enabled: 'Resizing Allowed', disabled: 'No Resizing', }, }, steppref: { action: 'toggle_steppref', test: step_mechanics_active, tooltip: { main: '', enable: 'You will not participate in step mechanics.' + ' Click to enable step mechanics.', disable: 'This setting controls whether or not you participate in size-based step mechanics.' + ' Includes both stepping on others, as well as getting stepped on. Click to disable step mechanics.', }, content: { enabled: 'Step Mechanics Enabled', disabled: 'Step Mechanics Disabled', }, }, vore_fx: { action: 'toggle_fx', test: show_vore_fx, tooltip: { main: '', enable: 'Regardless of Predator Setting, you will not see their FX settings.' + ' Click this to enable showing FX.', disable: 'This setting controls whether or not a pred is allowed to mess with your HUD and fullscreen overlays.' + ' Click to disable all FX.', }, content: { enabled: 'Show Vore FX', disabled: 'Do Not Show Vore FX', }, }, remains: { action: 'toggle_leaveremains', test: digest_leave_remains, tooltip: { main: '', enable: 'Regardless of Predator Setting, you will not leave remains behind.' + ' Click this to allow leaving remains.', disable: 'Your Predator must have this setting enabled in their belly modes to allow remains to show up,' + ' if they do not, they will not leave your remains behind, even with this on. Click to disable remains.', }, content: { enabled: 'Allow Leaving Remains', disabled: 'Do Not Allow Leaving Remains', }, }, pickuppref: { action: 'toggle_pickuppref', test: pickup_mechanics_active, tooltip: { main: '', enable: 'You will not participate in pick-up mechanics.' + ' Click this to allow picking up/being picked up.', disable: 'Allows macros to pick you up into their hands, and you to pick up micros.' + ' Click to disable pick-up mechanics.', }, content: { enabled: 'Pick-up Mechanics Enabled', disabled: 'Pick-up Mechanics Disabled', }, }, spontaneous_tf: { action: 'toggle_allow_spontaneous_tf', test: allow_spontaneous_tf, tooltip: { main: 'This toggle is for spontaneous or environment related transformation' + ' as a victim, such as via chemicals.', enable: 'Click here to allow being spontaneously transformed.', disable: 'Click here to disable being spontaneously transformed.', }, content: { enabled: 'Spontaneous TF Enabled', disabled: 'Spontaneous TF Disabled', }, }, examine_nutrition: { action: 'toggle_nutrition_ex', test: nutrition_message_visible, tooltip: { main: '', enable: 'Click here to enable nutrition messages.', disable: 'Click here to disable nutrition messages.', }, content: { enabled: 'Examine Nutrition Messages Active', disabled: 'Examine Nutrition Messages Inactive', }, }, examine_weight: { action: 'toggle_weight_ex', test: weight_message_visible, tooltip: { main: '', enable: 'Click here to enable weight messages.', disable: 'Click here to disable weight messages.', }, content: { enabled: 'Examine Weight Messages Active', disabled: 'Examine Weight Messages Inactive', }, }, eating_privacy_global: { action: 'toggle_global_privacy', test: eating_privacy_global, tooltip: { main: 'Sets default belly behaviour for vorebellies for announcing' + ' ingesting or expelling prey' + ' Overwritten by belly-specific preferences if set.', enable: ' Click here to turn your messages subtle', disable: ' Click here to turn your messages loud', }, content: { enabled: 'Global Vore Privacy: Subtle', disabled: 'Global Vore Privacy: Loud', }, }, liquid_receive: { action: 'toggle_liq_rec', test: liq_rec, tooltip: { main: 'This button is for allowing or preventing others from giving you liquids from their vore organs.', enable: 'Click here to allow receiving liquids.', disable: 'Click here to prevent receiving liquids.', }, content: { enabled: 'Receiving Liquids Allowed', disabled: 'Do Not Allow Receiving Liquids', }, }, liquid_give: { action: 'toggle_liq_giv', test: liq_giv, tooltip: { main: 'This button is for allowing or preventing others from taking liquids from your vore organs.', enable: 'Click here to allow taking liquids.', disable: 'Click here to prevent taking liquids.', }, content: { enabled: 'Taking Liquids Allowed', disabled: 'Do Not Allow Taking Liquids', }, }, autotransferable: { action: 'toggle_autotransferable', test: autotransferable, tooltip: { main: 'This button is for allowing or preventing belly auto-transfer mechanics from moving you.', enable: 'Click here to allow autotransfer.', disable: 'Click here to prevent autotransfer.', }, content: { enabled: 'Auto-Transfer Allowed', disabled: 'Do Not Allow Auto-Transfer', }, }, }; return (
act('show_pictures')}> Contents Preference: {show_pictures ? 'Show Pictures' : 'Show List'} }>
); }; const VoreUserPreferenceItem = (props, context) => { const { act } = useBackend(context); const { spec, ...rest } = props; const { action, test, tooltip, content } = spec; return ( ); };