diff --git a/code/__defines/_planes+layers_vr.dm b/code/__defines/_planes+layers_vr.dm index 125f492cd7..a3cb889b46 100644 --- a/code/__defines/_planes+layers_vr.dm +++ b/code/__defines/_planes+layers_vr.dm @@ -3,5 +3,6 @@ #define PLANE_CH_STATUS_R 27 //Right-side status icon #define PLANE_CH_BACKUP 28 //Backup implant #define PLANE_CH_VANTAG 29 //Vore Antag hud +#define PLANE_CH_STOMACH 30 //Stomach Plane #define PLANE_AUGMENTED 40 //Augmented-reality plane diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index 61080f2fca..ae87b1c624 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -7,7 +7,9 @@ #define VIS_AUGMENTED 32 -#define VIS_COUNT 32 +#define VIS_CH_STOMACH 33 + +#define VIS_COUNT 33 //Protean organs #define O_ORCH "orchestrator" diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 20c38938a5..8a722ac767 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1580,6 +1580,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage) . += new /obj/screen/plane_master{plane = PLANE_CH_HEALTH_VR} //Health bar but transparent at 100 . += new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status . += new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags + . += new /obj/screen/plane_master{plane = PLANE_CH_STOMACH} //Stomachs . += new /obj/screen/plane_master{plane = PLANE_AUGMENTED} //Augmented reality //VOREStation Add End /proc/CallAsync(datum/source, proctype, list/arguments) diff --git a/code/modules/client/preference_setup/vore/09_misc.dm b/code/modules/client/preference_setup/vore/09_misc.dm index bde733d4c8..963354baea 100644 --- a/code/modules/client/preference_setup/vore/09_misc.dm +++ b/code/modules/client/preference_setup/vore/09_misc.dm @@ -11,6 +11,7 @@ S["capture_crystal"] >> pref.capture_crystal S["auto_backup_implant"] >> pref.auto_backup_implant S["borg_petting"] >> pref.borg_petting + S["stomach_vision"] >> pref.stomach_vision /datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S) S["show_in_directory"] << pref.show_in_directory @@ -21,12 +22,21 @@ S["capture_crystal"] << pref.capture_crystal S["auto_backup_implant"] << pref.auto_backup_implant S["borg_petting"] << pref.borg_petting + S["stomach_vision"] << pref.stomach_vision /datum/category_item/player_setup_item/vore/misc/copy_to_mob(var/mob/living/carbon/human/character) if(pref.sensorpref > 5 || pref.sensorpref < 1) pref.sensorpref = 5 character.sensorpref = pref.sensorpref character.capture_crystal = pref.capture_crystal + //Vore Stomach Sprite Preference + character.stomach_vision = pref.stomach_vision + if((character && !istype(character,/mob/living/carbon/human/dummy)) && character.stomach_vision && !(VIS_CH_STOMACH in character.vis_enabled)) + character.plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + character.vis_enabled += VIS_CH_STOMACH + else if((character && !istype(character,/mob/living/carbon/human/dummy)) && !character.stomach_vision && (VIS_CH_STOMACH in character.vis_enabled)) + character.plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + character.vis_enabled -= VIS_CH_STOMACH /datum/category_item/player_setup_item/vore/misc/sanitize_character() pref.show_in_directory = sanitize_integer(pref.show_in_directory, 0, 1, initial(pref.show_in_directory)) @@ -36,6 +46,7 @@ pref.capture_crystal = sanitize_integer(pref.capture_crystal, 0, 1, initial(pref.capture_crystal)) pref.auto_backup_implant = sanitize_integer(pref.auto_backup_implant, 0, 1, initial(pref.auto_backup_implant)) pref.borg_petting = sanitize_integer(pref.borg_petting, 0, 1, initial(pref.borg_petting)) + pref.stomach_vision = sanitize_integer(pref.stomach_vision, 0, 1, initial(pref.stomach_vision)) /datum/category_item/player_setup_item/vore/misc/content(var/mob/user) . += "
" @@ -47,6 +58,7 @@ . += "Capture Crystal Preference: [pref.capture_crystal ? "Yes" : "No"]
" . += "Spawn With Backup Implant: [pref.auto_backup_implant ? "Yes" : "No"]
" . += "Allow petting as robot: [pref.borg_petting ? "Yes" : "No"]
" + . += "Enable Stomach Sprites: [pref.stomach_vision ? "Yes" : "No"]
" /datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user) if(href_list["toggle_show_in_directory"]) @@ -84,4 +96,7 @@ else if(href_list["toggle_borg_petting"]) pref.borg_petting = pref.borg_petting ? 0 : 1; return TOPIC_REFRESH + else if(href_list["toggle_stomach_vision"]) + pref.stomach_vision = pref.stomach_vision ? 0 : 1; + return TOPIC_REFRESH return ..(); diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm index ee3363dff5..f1cfc4413a 100644 --- a/code/modules/client/preferences_vr.dm +++ b/code/modules/client/preferences_vr.dm @@ -7,6 +7,7 @@ var/capture_crystal = 1 //Whether or not someone is able to be caught with capture crystals var/auto_backup_implant = FALSE //Whether someone starts with a backup implant or not. var/borg_petting = TRUE //Whether someone can be petted as a borg or not. + var/stomach_vision = TRUE //Whether or not someone can view stomach sprites var/job_talon_high = 0 var/job_talon_med = 0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f298a47fcb..712f549626 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -7,6 +7,17 @@ has_huds = TRUE //We do have HUDs (like health, wanted, status, not inventory slots) + + var/vore_capacity = 3 + var/vore_capacity_ex = list("stomach" = 3, "taur belly" = 3) + var/vore_fullness_ex = list("stomach" = 0, "taur belly" = 0) + var/vore_icon_bellies = list("stomach", "taur belly") + var/struggle_anim_stomach = FALSE + var/struggle_anim_taur = FALSE + var/vore_sprite_color = list("stomach" = "#FFFFFF", "taur belly" = "#FFFFFF") + var/vore_sprite_multiply = list("stomach" = TRUE, "taur belly" = TRUE) + var/vore_fullness = 0 + var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. var/last_push_time //For human_attackhand.dm, keeps track of the last use of disarm @@ -1778,3 +1789,19 @@ /mob/living/carbon/human/get_mob_riding_slots() return list(back, head, wear_suit) + +/mob/living/carbon/human/proc/update_fullness() + var/list/new_fullness = list() + vore_fullness = 0 + for(var/belly_class in vore_icon_bellies) + new_fullness[belly_class] = 0 + for(var/obj/belly/B as anything in vore_organs) + new_fullness[B.belly_sprite_to_affect] += B.GetFullnessFromBelly() + for(var/belly_class in vore_icon_bellies) + new_fullness[belly_class] /= size_multiplier //Divided by pred's size so a macro mob won't get macro belly from a regular prey. + new_fullness[belly_class] = round(new_fullness[belly_class], 1) // Because intervals of 0.25 are going to make sprite artists cry. + vore_fullness_ex[belly_class] = min(vore_capacity_ex[belly_class], new_fullness[belly_class]) + vore_fullness += new_fullness[belly_class] + vore_fullness = min(vore_capacity, vore_fullness) + update_vore_belly_sprite() + update_vore_tail_sprite() diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 692f121ba8..c531ef5086 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -192,6 +192,15 @@ compiled_vis |= VIS_CH_VANTAG //VOREStation Add End + //Vore Stomach addition start. This goes here. + if(stomach_vision && !(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + compiled_vis += VIS_CH_STOMACH + else if(!stomach_vision && (VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + compiled_vis -= VIS_CH_STOMACH + //Vore Stomach addition end + if(!compiled_vis.len && !vis_enabled.len) return //Nothin' doin'. diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index b83b36eeda..3b471a84a3 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -222,6 +222,8 @@ var/rarity_value = 1 // Relative rarity/collector value for this species. var/economic_modifier = 2 // How much money this species makes + var/vore_belly_default_variant = "H" + // Determines the organs that the species spawns with and var/list/has_organ = list( // which required-organ checks are conducted. O_HEART = /obj/item/organ/internal/heart, diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 9d82aaa30a..3a1441f334 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -97,7 +97,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define FIRE_LAYER 35 //'Mob on fire' overlay layer // # define MOB_WATER_LAYER 36 //'Mob submerged' overlay layer // Moved to global defines #define TARGETED_LAYER 37 //'Aimed at' overlay layer -#define TOTAL_LAYERS 37 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. +#define VORE_BELLY_LAYER 38 +#define VORE_TAIL_LAYER 39 + +#define TOTAL_LAYERS 39 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. ////////////////////////////////// /mob/living/carbon/human @@ -421,6 +424,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //tail update_tail_showing() update_wing_showing() + update_vore_belly_sprite() + update_vore_tail_sprite() /mob/living/carbon/human/proc/update_skin() if(QDESTROYING(src)) @@ -1393,6 +1398,74 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if((. = ..())) update_wing_showing() +/mob/living/carbon/human/proc/update_vore_belly_sprite() + if(QDESTROYING(src)) + return + + remove_layer(VORE_BELLY_LAYER) + + var/image/vore_belly_image = get_vore_belly_image() + if(vore_belly_image) + vore_belly_image.layer = BODY_LAYER+VORE_BELLY_LAYER + overlays_standing[VORE_BELLY_LAYER] = vore_belly_image + vore_belly_image.plane = PLANE_CH_STOMACH //This one line of code. This ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT. + + apply_layer(VORE_BELLY_LAYER) + +/mob/living/carbon/human/proc/get_vore_belly_image() + if(!(wear_suit && wear_suit.flags_inv & HIDETAIL)) + var/vs_fullness = vore_fullness_ex["stomach"] + var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Bellies.dmi', icon_state = "[species.vore_belly_default_variant]Belly[vs_fullness][struggle_anim_stomach ? "" : " idle"]") + vorebelly_s.Blend(vore_sprite_color["stomach"], vore_sprite_multiply["stomach"] ? ICON_MULTIPLY : ICON_ADD) + var/image/working = image(vorebelly_s) + working.overlays += em_block_image_generic(working) + return working + return null + +/mob/living/carbon/human/proc/vore_belly_animation() + if(!struggle_anim_stomach) + struggle_anim_stomach = TRUE + update_vore_belly_sprite() + spawn(12) + struggle_anim_stomach = FALSE + update_vore_belly_sprite() + +/mob/living/carbon/human/proc/update_vore_tail_sprite() + if(QDESTROYING(src)) + return + + remove_layer(VORE_TAIL_LAYER) + + var/image/vore_tail_image = get_vore_tail_image() + if(vore_tail_image) + vore_tail_image.layer = BODY_LAYER+VORE_TAIL_LAYER + overlays_standing[VORE_TAIL_LAYER] = vore_tail_image + vore_tail_image.plane = PLANE_CH_STOMACH //This one line of code. This ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT. + + apply_layer(VORE_TAIL_LAYER) + +/mob/living/carbon/human/proc/get_vore_tail_image() + if(tail_style && istaurtail(tail_style) && tail_style:vore_tail_sprite_variant) + var/vs_fullness = vore_fullness_ex["taur belly"] + var/loaf_alt = lying && tail_style:belly_variant_when_loaf + var/fullness_icons = min(tail_style.fullness_icons, vs_fullness) + var/icon/vorebelly_s = new/icon(icon = tail_style.bellies_icon_path, icon_state = "Taur[tail_style:vore_tail_sprite_variant]-Belly-[fullness_icons][loaf_alt ? " loaf" : (struggle_anim_taur ? "" : " idle")]") + vorebelly_s.Blend(vore_sprite_color["taur belly"], vore_sprite_multiply["taur belly"] ? ICON_MULTIPLY : ICON_ADD) + var/image/working = image(vorebelly_s) + working.pixel_x = -16 + if(tail_style.em_block) + working.overlays += em_block_image_generic(working) + return working + return null + +/mob/living/carbon/human/proc/vore_tail_animation() + if(tail_style.struggle_anim && !struggle_anim_taur) + struggle_anim_taur = TRUE + update_vore_tail_sprite() + spawn(12) + struggle_anim_taur = FALSE + update_vore_tail_sprite() + //Human Overlays Indexes///////// #undef MUTATIONS_LAYER #undef SKIN_LAYER diff --git a/code/modules/mob/mob_defines_vr.dm b/code/modules/mob/mob_defines_vr.dm index 619cfe5940..0eaed29131 100644 --- a/code/modules/mob/mob_defines_vr.dm +++ b/code/modules/mob/mob_defines_vr.dm @@ -1,5 +1,6 @@ /mob var/vantag_hud = 0 // Do I have the HUD enabled? + var/stomach_vision = 1 // By default, you will see stomachs. var/mob/temporary_form // For holding onto a temporary form var/disconnect_time = null //Time of client loss, set by Logout(), for timekeeping diff --git a/code/modules/mob/mob_helpers_vr.dm b/code/modules/mob/mob_helpers_vr.dm index 663cfc7f4a..81ae7da305 100644 --- a/code/modules/mob/mob_helpers_vr.dm +++ b/code/modules/mob/mob_helpers_vr.dm @@ -1,5 +1,13 @@ /mob/recalculate_vis() . = ..() + + if(stomach_vision && !(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + vis_enabled += VIS_CH_STOMACH + else if(!stomach_vision && (VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + vis_enabled -= VIS_CH_STOMACH + if(!plane_holder || !vis_enabled) return @@ -12,3 +20,33 @@ plane_holder.set_vis(VIS_CH_VANTAG,FALSE) vis_enabled -= VIS_CH_VANTAG return + + +/mob/verb/toggle_stomach_vision() + set name = "Toggle Stomach Sprites" + set category = "Preferences" + set desc = "Toggle the ability to see stomachs or not" + + var/toggle + toggle = tgui_alert(src, "Would you like to see visible stomachs?", "Visible Tummy?", list("Yes", "No")) + if(toggle =="Yes") + stomach_vision = 1 //Simple! Easy! + if(!(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + vis_enabled += VIS_CH_STOMACH + to_chat("You can now see stomachs!") + else + stomach_vision = 0 + if(VIS_CH_STOMACH in vis_enabled) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + vis_enabled -= VIS_CH_STOMACH + to_chat("You will no longer see stomachs!") + +/* //Leaving this in as an example of 'how to properly enable a plane to hide/show itself' for future PRs. +if(stomach_vision && !(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + vis_enabled += VIS_CH_STOMACH +else if(!stomach_vision && (VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + vis_enabled -= VIS_CH_STOMACH +*/ diff --git a/code/modules/mob/mob_planes_vr.dm b/code/modules/mob/mob_planes_vr.dm index b23067733f..9f5b30f579 100644 --- a/code/modules/mob/mob_planes_vr.dm +++ b/code/modules/mob/mob_planes_vr.dm @@ -4,6 +4,7 @@ plane_masters[VIS_CH_HEALTH_VR] = new /obj/screen/plane_master{plane = PLANE_CH_HEALTH_VR} //Health bar but transparent at 100 plane_masters[VIS_CH_BACKUP] = new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status plane_masters[VIS_CH_VANTAG] = new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags + plane_masters[VIS_CH_STOMACH] = new /obj/screen/plane_master{plane = PLANE_CH_STOMACH} //Stomach plane_masters[VIS_AUGMENTED] = new /obj/screen/plane_master/augmented(M = my_mob) //Augmented reality ..() diff --git a/code/modules/mob/new_player/sprite_accessories_taur.dm b/code/modules/mob/new_player/sprite_accessories_taur.dm index 0e052d9c50..89a264c82e 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur.dm @@ -1,3 +1,10 @@ +/datum/sprite_accessory/tail + var/vore_tail_sprite_variant = "" + var/belly_variant_when_loaf = FALSE + var/fullness_icons = 0 + var/struggle_anim = FALSE + var/bellies_icon_path = 'icons/mob/vore/Taur_Bellies.dmi' + /datum/riding/taur keytype = /obj/item/weapon/material/twohanded/riding_crop // Crack! nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs. @@ -355,4 +362,70 @@ /datum/sprite_accessory/tail/taur/zorgoia/fat name = "Zorgoia (Fat Taur)" - extra_overlay = "zorgoia_fat" \ No newline at end of file + extra_overlay = "zorgoia_fat" + + +/datum/sprite_accessory/tail/taur/wolf + vore_tail_sprite_variant = "N" + fullness_icons = 3 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/naga/naga_2c + vore_tail_sprite_variant = "Naga" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/horse + vore_tail_sprite_variant = "Horse" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/cow + vore_tail_sprite_variant = "Cow" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/lizard + vore_tail_sprite_variant = "Lizard" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/lizard/synthlizard + vore_tail_sprite_variant = "SynthLiz" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/feline + vore_tail_sprite_variant = "Feline" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/slug + vore_tail_sprite_variant = "Slug" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/drake + vore_tail_sprite_variant = "Drake" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/otie + vore_tail_sprite_variant = "Otie" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/deer + vore_tail_sprite_variant = "Deer" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/skunk + vore_tail_sprite_variant = "Skunk" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index 17e716fd4e..2a85dda15f 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -60,6 +60,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 4 + vore_tail_sprite_variant = "N" + fullness_icons = 3 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/wolf/fatwolf name = "Fat Wolf (Taur)" @@ -131,6 +134,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 3 + vore_tail_sprite_variant = "Skunk" //Sadly there appears to be no sprites... For now! + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/naga name = "Naga (Taur)" @@ -165,34 +172,43 @@ msg_prey_stepunder = "You jump over %prey's thick tail." msg_owner_stepunder = "%owner bounds over your tail." -/datum/sprite_accessory/tail/taur/naga/naga_2c +/datum/sprite_accessory/tail/taur/naga/vore_compatable + name = "Naga (Taur) (Vore Compatable)" + vore_tail_sprite_variant = "Naga" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/naga/vore_compatable/naga_2c name = "Naga dual-color (Taur)" icon_state = "naga_s" extra_overlay = "naga_markings" //icon_sprite_tag = "naga2c" + vore_tail_sprite_variant = "Naga" + fullness_icons = 1 + struggle_anim = TRUE -/datum/sprite_accessory/tail/taur/naga/alt_2c +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_2c name = "Naga alt style dual-color (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnaga_s" extra_overlay = "altnaga_markings" //icon_sprite_tag = "altnaga2c" -/datum/sprite_accessory/tail/taur/naga/alt_3c +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_3c name = "Naga alt style tri-color (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnaga_s" extra_overlay = "altnaga_markings" extra_overlay2 = "altnaga_stripes" -/datum/sprite_accessory/tail/taur/naga/alt_3c_rattler +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_3c_rattler name = "Naga alt style tri-color, rattler (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnaga_s" extra_overlay = "altnaga_markings" extra_overlay2 = "altnaga_rattler" -/datum/sprite_accessory/tail/taur/naga/alt_3c_tailmaw +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_3c_tailmaw name = "Naga alt style tri-color, tailmaw (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnagatailmaw_s" @@ -208,6 +224,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 4 + vore_tail_sprite_variant = "Horse" + fullness_icons = 1 + struggle_anim = TRUE msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -242,6 +261,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 3 + vore_tail_sprite_variant = "Cow" + fullness_icons = 1 + struggle_anim = TRUE msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -267,6 +289,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 7 + vore_tail_sprite_variant = "Deer" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -303,6 +329,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 5 + vore_tail_sprite_variant = "Lizard" + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/lizard/fatlizard name = "Fat Lizard (Taur)" @@ -349,6 +378,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 3 + vore_tail_sprite_variant = "SynthLiz" + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/lizard/fatsynthlizard name = "Fat SynthLizard dual-color (Taur)" @@ -424,6 +456,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 5 + vore_tail_sprite_variant = "Feline" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/fatfeline name = "Fat Feline (Taur)" @@ -529,6 +565,9 @@ icon_state = "slug_s" suit_sprites = 'icons/mob/taursuits_slug_vr.dmi' icon_sprite_tag = "slug" + vore_tail_sprite_variant = "Slug" + fullness_icons = 1 + struggle_anim = TRUE msg_owner_help_walk = "You carefully slither around %prey." msg_prey_help_walk = "%owner's huge tail slithers past beside you!" @@ -599,6 +638,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 6 + vore_tail_sprite_variant = "Drake" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/drake/fat name = "Fat Drake (Taur)" @@ -626,6 +669,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 5 + vore_tail_sprite_variant = "Otie" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/alraune/alraune_2c name = "Alraune (dual color)" @@ -1071,4 +1118,4 @@ offset_x = -32 offset_y = -11 mob_offset_y = 11 -*/ \ No newline at end of file +*/ diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 21602a1c27..23b0796789 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -8,6 +8,12 @@ // // Parent type of all the various "belly" varieties. // + +#define DM_FLAG_VORESPRITE_TAIL 0x2 +#define DM_FLAG_VORESPRITE_MARKING 0x4 +#define DM_FLAG_VORESPRITE_ARTICLE 0x8 + + /obj/belly name = "belly" // Name of this location desc = "It's a belly! You're in it!" // Flavor text description of inside sight/sound/smells/feels. @@ -60,6 +66,30 @@ var/belly_item_mult = 1 //Multiplier for how filling items are in borg borg bellies. Items are also weighted on item size var/belly_overall_mult = 1 //Multiplier applied ontop of any other specific multipliers + + var/vore_sprite_flags = DM_FLAG_VORESPRITE_ARTICLE + var/tmp/static/list/vore_sprite_flag_list= list( + "Normal Belly Sprite" = DM_FLAG_VORESPRITE_ARTICLE, + //"Tail adjustment" = DM_FLAG_VORESPRITE_TAIL, + //"Marking addition" = DM_FLAG_VORESPRITE_MARKING + ) + var/affects_vore_sprites = FALSE + var/count_absorbed_prey_for_sprite = TRUE + var/absorbed_multiplier = 1 + var/count_liquid_for_sprite = FALSE + var/liquid_multiplier = 1 + var/count_items_for_sprite = FALSE + var/item_multiplier = 1 + var/health_impacts_size = TRUE + var/resist_triggers_animation = TRUE + var/size_factor_for_sprite = 1 + var/belly_sprite_to_affect = "stomach" + var/datum/sprite_accessory/tail/tail_to_change_to = FALSE + var/tail_colouration = FALSE + var/tail_extra_overlay = FALSE + var/tail_extra_overlay2 = FALSE + var/undergarment_chosen = "Underwear, bottom" + // Generally just used by AI var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location var/autotransferwait = 10 // Time between trying to transfer. @@ -345,6 +375,15 @@ "belly_item_mult", "belly_overall_mult", "drainmode", + "vore_sprite_flags", + "affects_vore_sprites", + "count_absorbed_prey_for_sprite", + "resist_triggers_animation", + "size_factor_for_sprite", + "belly_sprite_to_affect", + "health_impacts_size", + "count_items_for_sprite", + "item_multiplier" ) if (save_digest_mode == 1) @@ -426,6 +465,10 @@ if(M.ai_holder) M.ai_holder.handle_eaten() + if (istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/hum = owner + hum.update_fullness() + // Intended for simple mobs if(!owner.client && autotransferlocation && autotransferchance > 0) addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/belly, check_autotransfer), thing, autotransferlocation), autotransferwait) @@ -444,6 +487,10 @@ L.toggle_hud_vis() if((L.stat != DEAD) && L.ai_holder) L.ai_holder.go_wake() + if (istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/hum = owner + hum.update_fullness() + /obj/belly/proc/vore_fx(mob/living/L) if(!istype(L)) @@ -1757,6 +1804,15 @@ dupe.belly_mob_mult = belly_mob_mult dupe.belly_item_mult = belly_item_mult dupe.belly_overall_mult = belly_overall_mult + dupe.vore_sprite_flags = vore_sprite_flags + dupe.affects_vore_sprites = affects_vore_sprites + dupe.count_absorbed_prey_for_sprite = count_absorbed_prey_for_sprite + dupe.resist_triggers_animation = resist_triggers_animation + dupe.size_factor_for_sprite = size_factor_for_sprite + dupe.belly_sprite_to_affect = belly_sprite_to_affect + dupe.health_impacts_size = health_impacts_size + dupe.count_items_for_sprite = count_items_for_sprite + dupe.item_multiplier = item_multiplier //// Object-holding variables //struggle_messages_outside - strings @@ -1955,3 +2011,38 @@ /obj/belly/container_resist(mob/M) return relay_resist(M) + +/obj/belly/proc/GetFullnessFromBelly() + if(!affects_vore_sprites) + return 0 + var/belly_fullness = 0 + for(var/mob/living/M in src) + if(count_absorbed_prey_for_sprite || !M.absorbed) + var/fullness_to_add = M.size_multiplier + fullness_to_add *= M.mob_size / 20 + if(M.absorbed) + fullness_to_add *= absorbed_multiplier + if(health_impacts_size) + fullness_to_add *= M.health / M.getMaxHealth() + belly_fullness += fullness_to_add + if(count_liquid_for_sprite) + belly_fullness += (reagents.total_volume / 100) * liquid_multiplier + if(count_items_for_sprite) + for(var/obj/item/I in src) + var/fullness_to_add = 0 + if(I.w_class == ITEMSIZE_TINY) + fullness_to_add = ITEMSIZE_COST_TINY + else if(I.w_class == ITEMSIZE_SMALL) + fullness_to_add = ITEMSIZE_COST_SMALL + else if(I.w_class == ITEMSIZE_NORMAL) + fullness_to_add = ITEMSIZE_COST_NORMAL + else if(I.w_class == ITEMSIZE_LARGE) + fullness_to_add = ITEMSIZE_COST_LARGE + else if(I.w_class == ITEMSIZE_HUGE) + fullness_to_add = ITEMSIZE_COST_HUGE + else + fullness_to_add = ITEMSIZE_COST_NO_CONTAINER + fullness_to_add /= 32 + belly_fullness += fullness_to_add * item_multiplier + belly_fullness *= size_factor_for_sprite + return belly_fullness diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index b372dc2ce9..9c49d8f93f 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -35,6 +35,10 @@ GLOBAL_LIST_INIT(digest_modes, list()) else SEND_SOUND(L, sound(get_sfx("fancy_death_prey"))) B.handle_digestion_death(L) + if(!L) + if (istype(B.owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/howner = B.owner + howner.update_fullness() if(!B.fancy_vore) return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("classic_death_sounds"))) return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("fancy_death_pred"))) @@ -61,6 +65,11 @@ GLOBAL_LIST_INIT(digest_modes, list()) var/offset = (1 + ((L.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 var/difference = B.owner.size_multiplier / L.size_multiplier + if(B.health_impacts_size) + if (istype(B.owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/howner = B.owner + howner.update_fullness() + consider_healthbar(L, old_health, B.owner) if(isrobot(B.owner)) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index f4bf873316..91f528c8ba 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -256,6 +256,8 @@ P.weight_message_visible = src.weight_message_visible P.weight_messages = src.weight_messages + P.vore_sprite_color = istype(src, /mob/living/carbon/human) ? src:vore_sprite_color : null + var/list/serialized = list() for(var/obj/belly/B as anything in src.vore_organs) serialized += list(B.serialize()) //Can't add a list as an object to another list in Byond. Thanks. @@ -306,6 +308,10 @@ weight_message_visible = P.weight_message_visible weight_messages = P.weight_messages + + if (istype(src, /mob/living/carbon/human)) + src:vore_sprite_color = P.vore_sprite_color + if(bellies) if(isliving(src)) var/mob/living/L = src diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 7888cdb010..d7fe76ed5a 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -69,6 +69,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/step_mechanics_pref = FALSE var/pickup_pref = TRUE + var/vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000") + var/list/belly_prefs = list() var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" @@ -193,6 +195,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE weight_message_visible = json_from_file["weight_message_visible"] weight_messages = json_from_file["weight_messages"] eating_privacy_global = json_from_file["eating_privacy_global"] + vore_sprite_color = json_from_file["vore_sprite_color"] //Quick sanitize if(isnull(digestable)) @@ -279,7 +282,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE else if(weight_messages.len < 10) while(weight_messages.len < 10) weight_messages.Add("") - + if(isnull(vore_sprite_color)) + vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000") return TRUE /datum/vore_preferences/proc/save_vore() @@ -320,6 +324,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "weight_message_visible" = weight_message_visible, "weight_messages" = weight_messages, "eating_privacy_global" = eating_privacy_global, + "vore_sprite_color" = vore_sprite_color, ) //List to JSON diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index bb59b7c7ad..d2286f78b5 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -227,7 +227,23 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", "belly_item_mult" = selected.belly_item_mult, "belly_overall_mult" = selected.belly_overall_mult, "drainmode" = selected.drainmode, - + "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_option_shown" = istype(host, /mob/living/carbon/human) ? (LAZYLEN(host:vore_icon_bellies) >= 1 ? TRUE : FALSE) : FALSE, // TODO: FIX THIS (It won't be fixed) + "tail_option_shown" = istype(host, /mob/living/carbon/human), + "tail_to_change_to" = selected.tail_to_change_to, + "tail_colouration" = selected.tail_colouration, + "tail_extra_overlay" = selected.tail_extra_overlay, + "tail_extra_overlay2" = selected.tail_extra_overlay2 ) var/list/addons = list() @@ -236,6 +252,13 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", addons.Add(flag_name) selected_list["addons"] = addons + var/list/vs_flags = list() + for(var/flag_name in selected.vore_sprite_flag_list) + if(selected.vore_sprite_flags & selected.vore_sprite_flag_list[flag_name]) + vs_flags.Add(flag_name) + selected_list["vore_sprite_flags"] = vs_flags + + selected_list["egg_type"] = selected.egg_type selected_list["contaminates"] = selected.contaminates selected_list["contaminate_flavor"] = null @@ -609,6 +632,20 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.weight_message_visible = !host.weight_message_visible unsaved_changes = TRUE return TRUE + if("set_vs_color") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/belly_choice = tgui_input_list(usr, "Which vore sprite are you going to edit the color of?", "Vore Sprite Color", hhost.vore_icon_bellies) + var/newcolor = input(usr, "Choose a color.", "", hhost.vore_sprite_color[belly_choice]) as color|null + if(newcolor) + hhost.vore_sprite_color[belly_choice] = newcolor + var/multiply = tgui_input_list(usr, "Set the color to be applied multiplicatively or additively? Currently in [hhost.vore_sprite_multiply[belly_choice] ? "Multiply" : "Add"]", "Vore Sprite Color", list("Multiply", "Add")) + if(multiply == "Multiply") + hhost.vore_sprite_multiply[belly_choice] = TRUE + else if(multiply == "Add") + hhost.vore_sprite_multiply[belly_choice] = FALSE + hhost.update_icons_body() + return TRUE /datum/vore_look/proc/pick_from_inside(mob/user, params) var/atom/movable/target = locate(params["pick"]) @@ -1680,6 +1717,98 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", qdel(host.vore_selected) host.vore_selected = host.vore_organs[1] . = TRUE - + if("b_belly_sprite_to_affect") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/belly_choice = tgui_input_list(usr, "Which belly sprite do you want your [lowertext(hhost.vore_selected.name)] to affect?","Select Region", hhost.vore_icon_bellies) + if(!belly_choice) //They cancelled, no changes + return FALSE + else + hhost.vore_selected.belly_sprite_to_affect = belly_choice + hhost.update_fullness() + . = TRUE + if("b_affects_vore_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.affects_vore_sprites = !hhost.vore_selected.affects_vore_sprites + hhost.update_fullness() + . = TRUE + if("b_count_absorbed_prey_for_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.count_absorbed_prey_for_sprite = !hhost.vore_selected.count_absorbed_prey_for_sprite + hhost.update_fullness() + . = TRUE + if("b_absorbed_multiplier") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/absorbed_multiplier_input = input(user, "Set the impact absorbed prey's size have on your vore sprite. 1 means no scaling, 0.5 means absorbed prey count half as much, 2 means absorbed prey count double. (Range from 0.1 - 3)", "Absorbed Multiplier") as num|null + if(!isnull(absorbed_multiplier_input)) + hhost.vore_selected.absorbed_multiplier = CLAMP(absorbed_multiplier_input, 0.1, 3) + hhost.update_fullness() + . = TRUE + if("b_count_items_for_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.count_items_for_sprite = !hhost.vore_selected.count_items_for_sprite + hhost.update_fullness() + . = TRUE + if("b_item_multiplier") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/item_multiplier_input = input(user, "Set the impact items will have on your vore sprite. 1 means a belly with 8 normal-sized items will count as 1 normal sized prey-thing's worth, 0.5 means items count half as much, 2 means items count double. (Range from 0.1 - 10)", "Item Multiplier") as num|null + if(!isnull(item_multiplier_input)) + hhost.vore_selected.item_multiplier = CLAMP(item_multiplier_input, 0.1, 10) + hhost.update_fullness() + . = TRUE + if("b_health_impacts_size") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.health_impacts_size = !hhost.vore_selected.health_impacts_size + hhost.update_fullness() + . = TRUE + if("b_resist_animation") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.resist_triggers_animation = !hhost.vore_selected.resist_triggers_animation + . = TRUE + if("b_size_factor_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/size_factor_input = input(user, "Set the impact all belly content's collective size has on your vore sprite. 1 means no scaling, 0.5 means content counts half as much, 2 means contents count double. (Range from 0.1 - 3)", "Size Factor") as num|null + if(!isnull(size_factor_input)) + hhost.vore_selected.size_factor_for_sprite = CLAMP(size_factor_input, 0.1, 3) + hhost.update_fullness() + . = TRUE + if("b_tail_to_change_to") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/tail_choice = tgui_input_list(usr, "Which tail sprite do you want to use when your [lowertext(host.vore_selected.name)] is filled?","Select Sprite", global.tail_styles_list) + if(!tail_choice) //They cancelled, no changes + return FALSE + else + hhost.vore_selected.tail_to_change_to = tail_choice + . = TRUE + if("b_tail_color") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/newcolor = input(usr, "Choose tail color.", "", hhost.vore_selected.tail_colouration) as color|null + if(newcolor) + hhost.vore_selected.tail_colouration = newcolor + . = TRUE + if("b_tail_color2") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/newcolor = input(usr, "Choose tail secondary color.", "", hhost.vore_selected.tail_extra_overlay) as color|null + if(newcolor) + hhost.vore_selected.tail_extra_overlay = newcolor + . = TRUE + if("b_tail_color3") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/newcolor = input(usr, "Choose tail tertiary color.", "", hhost.vore_selected.tail_extra_overlay2) as color|null + if(newcolor) + hhost.vore_selected.tail_extra_overlay2 = newcolor + . = TRUE if(.) unsaved_changes = TRUE diff --git a/icons/mob/vore/Bellies.dmi b/icons/mob/vore/Bellies.dmi new file mode 100644 index 0000000000..4f0d94f008 Binary files /dev/null and b/icons/mob/vore/Bellies.dmi differ diff --git a/icons/mob/vore/Taur_Bellies.dmi b/icons/mob/vore/Taur_Bellies.dmi new file mode 100644 index 0000000000..e606c64d18 Binary files /dev/null and b/icons/mob/vore/Taur_Bellies.dmi differ diff --git a/tgui/packages/tgui/interfaces/VorePanel.jsx b/tgui/packages/tgui/interfaces/VorePanel.jsx index 5a5236545c..0de645c5f7 100644 --- a/tgui/packages/tgui/interfaces/VorePanel.jsx +++ b/tgui/packages/tgui/interfaces/VorePanel.jsx @@ -1369,10 +1369,192 @@ const VoreSelectedBellyVisuals = (props) => { belly_fullscreen_color_trinary, mapRef, colorization_enabled, + vore_sprite_flags, + affects_voresprite, + absorbed_voresprite, + absorbed_multiplier, + item_voresprite, + item_multiplier, + health_voresprite, + resist_animation, + voresprite_size_factor, + belly_sprite_option_shown, + belly_sprite_to_affect, + undergarment_chosen, + undergarment_if_none, + undergarment_color, + tail_option_shown, + tail_to_change_to, + tail_colouration, + tail_extra_overlay, + tail_extra_overlay2, } = belly; return ( <> +
+ + + +
{ + +