[MIRROR] On demand belly loading & multibelly (#9701)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2024-12-28 12:41:09 -07:00
committed by GitHub
parent bbbc49354e
commit 9c5fa078e4
88 changed files with 712 additions and 1131 deletions

View File

@@ -120,8 +120,8 @@
var/mob/living/simple_mob/newPred = new mobtype(get_turf(src))
qdel(newPred.ai_holder)
newPred.ai_holder = null
newPred.voremob_loaded = TRUE //CHOMPedit: On-demand belly loading.
newPred.init_vore() //CHOMPedit: On-demand belly loading.
newPred.voremob_loaded = TRUE // On-demand belly loading.
newPred.init_vore() // On-demand belly loading.
//newPred.movement_cooldown = 0 // The "needless artificial speed cap" exists for a reason
if(M.mind)
M.mind.transfer_to(newPred)
@@ -159,8 +159,8 @@
return
var/mob/living/simple_mob/vore/morph/newMorph = new /mob/living/simple_mob/vore/morph(get_turf(src))
newMorph.voremob_loaded = TRUE //CHOMPedit: On-demand belly loading.
newMorph.init_vore() //CHOMPedit: On-demand belly loading.
newMorph.voremob_loaded = TRUE // On-demand belly loading.
newMorph.init_vore() // On-demand belly loading.
if(M.mind)
M.mind.transfer_to(newMorph)
to_chat(M, span_notice("You are a " + span_bold("Morph") + ", somehow having gotten aboard the station in your wandering. \

View File

@@ -104,7 +104,7 @@
var/mob/living/simple_mob/shadekin/red/shadekin = new(Ts)
//Abuse of shadekin
shadekin.real_name = shadekin.name
shadekin.voremob_loaded = TRUE // CHOMPAdd
shadekin.voremob_loaded = TRUE
shadekin.init_vore()
shadekin.ability_flags |= 0x1
shadekin.phase_shift()
@@ -158,7 +158,7 @@
target.transforming = TRUE //Cheap hack to stop them from moving
var/mob/living/simple_mob/shadekin/shadekin = new kin_type(Tt)
shadekin.real_name = shadekin.name
shadekin.voremob_loaded = TRUE // CHOMPAdd
shadekin.voremob_loaded = TRUE
shadekin.init_vore()
shadekin.can_be_drop_pred = TRUE
shadekin.dir = SOUTH

View File

@@ -64,7 +64,7 @@
var/mob/living/simple_mob/shadekin/red/shadekin = new(Ts)
//Abuse of shadekin
shadekin.real_name = shadekin.name
shadekin.voremob_loaded = TRUE // CHOMPAdd
shadekin.voremob_loaded = TRUE
shadekin.init_vore()
shadekin.ability_flags |= 0x1
shadekin.phase_shift()
@@ -118,7 +118,7 @@
target.transforming = TRUE //Cheap hack to stop them from moving
var/mob/living/simple_mob/shadekin/shadekin = new kin_type(Tt)
shadekin.real_name = shadekin.name
shadekin.voremob_loaded = TRUE // CHOMPAdd
shadekin.voremob_loaded = TRUE
shadekin.init_vore()
shadekin.can_be_drop_pred = TRUE
shadekin.dir = SOUTH

View File

@@ -7,17 +7,13 @@
has_huds = TRUE //We do have HUDs (like health, wanted, status, not inventory slots)
vore_capacity = 3 // CHOMPEdit
vore_capacity_ex = list("stomach" = 3, "taur belly" = 3) //CHOMPEdit
vore_fullness_ex = list("stomach" = 0, "taur belly" = 0) //CHOMPEdit
vore_icon_bellies = list("stomach", "taur belly") //CHOMPEdit
vore_capacity = 3
vore_capacity_ex = list("stomach" = 3, "taur belly" = 3)
vore_fullness_ex = list("stomach" = 0, "taur belly" = 0)
vore_icon_bellies = list("stomach", "taur belly")
var/struggle_anim_stomach = FALSE
var/struggle_anim_taur = FALSE
/* CHOMPRemove Start, THIS ALL GOES TO MOB!
var/vore_sprite_color = list("stomach" = "#FFFFFF", "taur belly" = "#FFFFFF")
var/vore_sprite_multiply = list("stomach" = TRUE, "taur belly" = TRUE)
var/vore_fullness = 0
*/// CHOMPRemove End
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/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
@@ -1848,21 +1844,3 @@
resting = !resting
to_chat(src, span_notice("You are now [resting ? "resting" : "getting up"]."))
update_canmove()
/*CHOMPRemove Start
/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()
*///CHOMPRemove End

View File

@@ -0,0 +1,38 @@
/mob/living/carbon/human/update_fullness(var/returning = FALSE)
if(!returning)
if(updating_fullness)
return
var/previous_stomach_fullness = vore_fullness_ex["stomach"]
var/previous_taur_fullness = vore_fullness_ex["taur belly"]
//update_vore_tail_sprite()
//update_vore_belly_sprite()
var/list/new_fullness = ..(TRUE)
. = new_fullness
for(var/datum/category_group/underwear/undergarment_class in global_underwear.categories)
if(!new_fullness[undergarment_class.name])
continue
new_fullness[undergarment_class.name] = -1 * round(-1 * new_fullness[undergarment_class.name]) // Doing a ceiling the only way BYOND knows how I guess
new_fullness[undergarment_class.name] = (min(2, new_fullness[undergarment_class.name]) - 2) * -1 //Complicated stuff to get it correctly aligned with the expected TRUE/FALSE
var/datum/category_item/underwear/UWI = all_underwear[undergarment_class.name]
if(!UWI || UWI.name == "None")
//Welllll okay then. If the former then something went wrong, if None was selected then...
if(istype(undergarment_class.items_by_name[new_fullness[undergarment_class.name + "-ifnone"]], /datum/category_item/underwear))
UWI = undergarment_class.items_by_name[new_fullness[undergarment_class.name + "-ifnone"]]
all_underwear[undergarment_class.name] = UWI
if(UWI && UWI.has_color && new_fullness[undergarment_class.name + "-color"])
all_underwear_metadata[undergarment_class.name]["[gear_tweak_free_color_choice]"] = new_fullness[undergarment_class.name + "-color"]
if(UWI && UWI.name != "None" && hide_underwear[undergarment_class.name] != new_fullness[undergarment_class.name])
hide_underwear[undergarment_class.name] = new_fullness[undergarment_class.name]
update_underwear(1)
if(vore_fullness_ex["stomach"] != previous_stomach_fullness)
update_vore_belly_sprite()
if(vore_fullness_ex["taur belly"] != previous_taur_fullness)
update_vore_tail_sprite()
/mob/living/carbon/human/vs_animate(var/belly_to_animate)
if(belly_to_animate == "stomach")
vore_belly_animation()
else if(belly_to_animate == "taur belly")
vore_tail_animation()
else
return

View File

@@ -68,10 +68,8 @@
var/soft_si = FALSE //signaler
var/soft_ar = FALSE //ar hud
//CHOMPEdit Begin - Add vore capacity
vore_capacity = 1
vore_capacity_ex = list("stomach" = 1)
//CHOMPEdit End
/mob/living/silicon/pai/Initialize()
. = ..()
@@ -113,15 +111,6 @@
return
return feed_grabbed_to_self(src,T)
/*CHOMPEdit - Just using the update_fullness from living now.
/mob/living/silicon/pai/proc/update_fullness_pai() //Determines if they have something in their stomach. Copied and slightly modified.
var/new_people_eaten = 0
for(var/obj/belly/B as anything in vore_organs)
for(var/mob/living/M in B)
new_people_eaten += M.size_multiplier
people_eaten = min(1, new_people_eaten)
*/
/mob/living/silicon/pai/update_icon() //Some functions cause this to occur, such as resting
..()
if(chassis == "13")
@@ -129,28 +118,27 @@
add_eyes()
return
update_fullness() //CHOMPEdit - Switch to /living update_fullness
//CHOMPEdit begin - Add multiple belly size support
update_fullness()
//Add a check when selecting a chassis if you add in support for this, to set vore_capacity to 2 or however many states you have.
var/fullness_extension = ""
if(vore_capacity > 1 && vore_fullness > 1)
fullness_extension = "_[vore_fullness]"
//CHOMPEdit end
if(!vore_fullness && !resting) //CHOMPEdit - Use vore_fullness instead of people_eaten
if(!vore_fullness && !resting)
icon_state = "[chassis]" //Using icon_state here resulted in quite a few bugs. Chassis is much less buggy.
else if(!vore_fullness && resting) //CHOMPEdit - Use vore_fullness instead of people_eaten
else if(!vore_fullness && resting)
icon_state = "[chassis]_rest"
// Unfortunately not all these states exist, ugh.
else if(vore_fullness && !resting) //CHOMPEdit - Use vore_fullness instead of people_eaten
if("[chassis]_full[fullness_extension]" in cached_icon_states(icon)) //CHOMPEdit begin - Add multiple belly size support
icon_state = "[chassis]_full[fullness_extension]" //CHOMPEdit - Add multiple belly size support
else if(vore_fullness && !resting)
if("[chassis]_full[fullness_extension]" in cached_icon_states(icon))
icon_state = "[chassis]_full[fullness_extension]"
else
icon_state = "[chassis]"
else if(vore_fullness && resting) //CHOMPEdit - Use vore_fullness instead of people_eaten
if("[chassis]_rest_full[fullness_extension]" in cached_icon_states(icon)) //CHOMPEdit begin - Add multiple belly size support
icon_state = "[chassis]_rest_full[fullness_extension]" //CHOMPEdit begin - Add multiple belly size support
else if(vore_fullness && resting)
if("[chassis]_rest_full[fullness_extension]" in cached_icon_states(icon))
icon_state = "[chassis]_rest_full[fullness_extension]"
else
icon_state = "[chassis]_rest"
if(chassis in wide_chassis)
@@ -202,17 +190,8 @@
resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset
chassis = possible_chassis[choice]
//CHOMPEdit Begin - Reset vore_capacity to allow multiple belly sizes as an option
vore_capacity = 1
vore_capacity_ex = list("stomach" = 1)
//As an example of how you would add support for multiple belly sizes...
/*
if(chassis == "example")
vore_capacity = 2
vore_capacity_ex = list("stomach" = 2)
*/
//Vore sprites would need to be added with sizes being example, example_full, example_full_2, example_full_3, and so forth
//CHOMPEdit End
if(chassis == "13")
if(!holo_icon)

View File

@@ -135,6 +135,11 @@
buckle_movable = TRUE
buckle_lying = FALSE
var/list/vore_light_states = list() //Robot exclusive
vore_capacity_ex = list()
vore_fullness_ex = list()
vore_icon_bellies = list()
/mob/living/silicon/robot/New(loc, var/unfinished = 0)
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
@@ -793,6 +798,9 @@
updatename("Default")
has_recoloured = FALSE
robotact?.update_static_data_for_all_viewers()
vore_capacity_ex = list()
vore_fullness_ex = list()
vore_light_states = list()
/mob/living/silicon/robot/proc/ColorMate()
set name = "Recolour Module"
@@ -937,8 +945,6 @@
old_x = sprite_datum.pixel_x
if(stat == CONSCIOUS)
//CHOMPAdd Start
// Let us handle the bellies with our own system
update_fullness()
for(var/belly_class in vore_fullness_ex)
reset_belly_lights(belly_class)
@@ -957,55 +963,6 @@
else
update_belly_lights(belly_class)
add_overlay(sprite_datum.get_belly_overlay(src, vs_fullness, belly_class))
//CHOMPAdd End
/*CHOMPRemove Start
var/belly_size = 0
if(sprite_datum.has_vore_belly_sprites && vore_selected.belly_overall_mult != 0)
if(vore_selected.silicon_belly_overlay_preference == "Sleeper")
if(sleeper_state)
belly_size = sprite_datum.max_belly_size
else if(vore_selected.silicon_belly_overlay_preference == "Vorebelly" || vore_selected.silicon_belly_overlay_preference == "Both")
if(sleeper_state && vore_selected.silicon_belly_overlay_preference == "Both")
belly_size += 1
if(LAZYLEN(vore_selected.contents) > 0)
for(var/borgfood in vore_selected.contents) //"inspired" (kinda copied) from Chompstation's belly fullness system's procs
if(istype(borgfood, /mob/living))
if(vore_selected.belly_mob_mult <= 0) //If mobs dont contribute, dont calculate further
continue
var/mob/living/prey = borgfood //typecast to living
belly_size += (prey.size_multiplier / size_multiplier) / vore_selected.belly_mob_mult //Smaller prey are less filling to larger bellies
else if(istype(borgfood, /obj/item))
if(vore_selected.belly_item_mult <= 0) //If items dont contribute, dont calculate further
continue
var/obj/item/junkfood = borgfood //typecast to item
var/fullness_to_add = 0
switch(junkfood.w_class)
if(ITEMSIZE_TINY)
fullness_to_add = ITEMSIZE_COST_TINY
if(ITEMSIZE_SMALL)
fullness_to_add = ITEMSIZE_COST_SMALL
if(ITEMSIZE_NORMAL)
fullness_to_add = ITEMSIZE_COST_NORMAL
if(ITEMSIZE_LARGE)
fullness_to_add = ITEMSIZE_COST_LARGE
if(ITEMSIZE_HUGE)
fullness_to_add = ITEMSIZE_COST_HUGE
else
fullness_to_add = ITEMSIZE_COST_NO_CONTAINER
belly_size += (fullness_to_add / 32) // vore_selected.overlay_item_multiplier //Enable this later when vorepanel is reworked.
else
belly_size += 1 //if it's not a person, nor an item... lets just go with 1
belly_size *= vore_selected.belly_overall_mult //Enable this after vore panel rework
belly_size = round(belly_size, 1)
belly_size = clamp(belly_size, 0, sprite_datum.max_belly_size) //Value from 0 to however many bellysizes the borg has
if(belly_size > 0) //Borgs probably only have 1 belly size. but here's support for larger ones if that changes.
if(resting && sprite_datum.has_vore_belly_resting_sprites)
add_overlay(sprite_datum.get_belly_resting_overlay(src, belly_size))
else if(!resting)
add_overlay(sprite_datum.get_belly_overlay(src, belly_size))
*///CHOMPRemove End
sprite_datum.handle_extra_icon_updates(src) // Various equipment-based sprites go here.

View File

@@ -0,0 +1,36 @@
/mob/living/silicon/robot/proc/update_multibelly()
vore_icon_bellies = list() //Clear any belly options that may not exist now
vore_capacity_ex = list()
vore_fullness_ex = list()
if(sprite_datum.belly_capacity_list.len)
for(var/belly in sprite_datum.belly_capacity_list) //vore icons list only contains a list of names with no associated data
vore_capacity_ex[belly] = sprite_datum.belly_capacity_list[belly] //I dont know why but this wasnt working when I just
vore_fullness_ex[belly] = 0 //set the lists equal to the old lists
vore_icon_bellies += belly
for(var/belly in sprite_datum.belly_light_list)
vore_light_states[belly] = 0
else if(sprite_datum.has_vore_belly_sprites)
vore_capacity_ex = list("sleeper" = 1)
vore_fullness_ex = list("sleeper" = 0)
vore_icon_bellies = list("sleeper")
if(sprite_datum.has_sleeper_light_indicator)
vore_light_states = list("sleeper" = 0)
sprite_datum.belly_light_list = list("sleeper")
update_fullness() //Set how full the newly defined bellies are, if they're already full
/mob/living/silicon/robot/proc/reset_belly_lights(var/b_class)
if(sprite_datum.belly_light_list.len && sprite_datum.belly_light_list.Find(b_class))
vore_light_states[b_class] = 0
/mob/living/silicon/robot/proc/update_belly_lights(var/b_class)
if(sprite_datum.belly_light_list.len && sprite_datum.belly_light_list.Find(b_class))
vore_light_states[b_class] = 2
for (var/belly in vore_organs)
var/obj/belly/B = belly
if(b_class == "sleeper" && (B.silicon_belly_overlay_preference == "Vorebelly" || B.silicon_belly_overlay_preference == "Both") || b_class != "sleeper")
if(B.digest_mode != DM_DIGEST || B.belly_sprite_to_affect != b_class || !B.contents.len)
continue
for(var/contents in B.contents)
if(istype(contents, /mob/living))
vore_light_states[b_class] = 1
return

View File

@@ -146,7 +146,7 @@
if("confirm")
R.apply_name(new_name)
R.apply_module(sprite_datum, selected_module)
R.update_multibelly() // CHOMPAdd Multibelly
R.update_multibelly()
R.transform_module()
close_ui()
. = TRUE

View File

@@ -28,6 +28,8 @@
var/is_whitelisted = FALSE
var/whitelist_ckey
var/whitelist_charname
var/list/belly_light_list = list() // Support multiple sleepers with r/g light "sleeper"
var/list/belly_capacity_list = list() //Support multiple bellies with multiple sizes, default: "sleeper" = 1
/// Determines if the borg has the proper flags to show an overlay.
/datum/robot_sprite/proc/sprite_flag_check(var/flag_to_check)
@@ -85,9 +87,8 @@
continue //Go on to the next.
return
/datum/robot_sprite/proc/get_belly_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class) //CHOMPEdit, allows use of our multi belly system
/datum/robot_sprite/proc/get_belly_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class)
//Size
//CHOMPEdit Start, using our own belly handling
if(has_sleeper_light_indicator || belly_light_list.len)
if(belly_light_list.len)
if(belly_light_list.Find(b_class))
@@ -107,18 +108,17 @@
sleeperColor = "r"
return "[sprite_icon_state]-[b_class]-[size]-[sleeperColor]"
return "[sprite_icon_state]-[b_class]-[size]"
//CHOMPEdit End
/datum/robot_sprite/proc/get_belly_resting_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class) //CHOMPEdit, allows use of our multi belly system
/datum/robot_sprite/proc/get_belly_resting_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class)
if(!(ourborg.rest_style in rest_sprite_options))
ourborg.rest_style = "Default"
switch(ourborg.rest_style)
if("Sit")
return "[get_belly_overlay(ourborg, size, b_class)]-sit" //CHOMPEdit, allows use of our multi belly system
return "[get_belly_overlay(ourborg, size, b_class)]-sit"
if("Bellyup")
return "[get_belly_overlay(ourborg, size, b_class)]-bellyup" //CHOMPEdit, allows use of our multi belly system
return "[get_belly_overlay(ourborg, size, b_class)]-bellyup"
else
return "[get_belly_overlay(ourborg, size, b_class)]-rest" //CHOMPEdit, allows use of our multi belly system
return "[get_belly_overlay(ourborg, size, b_class)]-rest"
/datum/robot_sprite/proc/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
if(!(ourborg.resting && has_rest_sprites))

View File

@@ -223,11 +223,11 @@
else
ourborg.icon_state = booze_options[ourborg.sprite_extra_customization["boozehound"]]
/datum/robot_sprite/dogborg/service/booze/get_belly_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class) //CHOMPEdit for multibelly handling
if(!("boozehound" in ourborg.sprite_extra_customization) || !ourborg.sprite_extra_customization["boozehound"] || b_class != "sleeper") //CHOMPEdit for multibelly handling
/datum/robot_sprite/dogborg/service/booze/get_belly_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class)
if(!("boozehound" in ourborg.sprite_extra_customization) || !ourborg.sprite_extra_customization["boozehound"] || b_class != "sleeper")
return ..()
else
return "[booze_options[ourborg.sprite_extra_customization["boozehound"]]]-[b_class]-[size]" //CHOMPEdit for multibelly handling
return "[booze_options[ourborg.sprite_extra_customization["boozehound"]]]-[b_class]-[size]"
/datum/robot_sprite/dogborg/service/booze/get_rest_sprite(var/mob/living/silicon/robot/ourborg)
if(!(ourborg.rest_style in rest_sprite_options))

View File

@@ -181,6 +181,10 @@
var/hasthermals = TRUE
var/isthermal = 0
//vars for vore_icons toggle control
var/vore_icons_cache = null // null by default. Going from ON to OFF should store vore_icons val here, OFF to ON reset as null
/mob/living/simple_mob/Initialize()
remove_verb(src, /mob/verb/observe)
health = maxHealth
@@ -233,7 +237,7 @@
/mob/living/simple_mob/Login()
. = ..()
to_chat(src,span_boldnotice("You are \the [src].") + " [player_msg]")
if(vore_active && !voremob_loaded) //CHOMPedit: On-demand belly loading.
if(vore_active && !voremob_loaded)
voremob_loaded = TRUE
init_vore()
if(hasthermals)
@@ -403,3 +407,22 @@
/mob/living/simple_mob/proc/character_directory_species()
return "simplemob"
/mob/living/simple_mob/verb/toggle_vore_icons()
set name = "Toggle Vore Sprite"
set desc = "Toggle visibility of changed mob sprite when you have eaten other things."
set category = "Abilities.Vore"
if(!vore_icons && !vore_icons_cache)
to_chat(src,span_warning("This simplemob has no vore sprite."))
else if(isnull(vore_icons_cache))
vore_icons_cache = vore_icons
vore_icons = 0
to_chat(src,span_warning("Vore sprite disabled."))
else
vore_icons = vore_icons_cache
vore_icons_cache = null
to_chat(src,span_warning("Vore sprite enabled."))
update_icon()

View File

@@ -7,7 +7,6 @@
var/vore_active = 0 // If vore behavior is enabled for this mob
//CHOMPEdit - Vore_capacity is now defined on code/modules/vore/eating/living_ch.dm
vore_capacity = 1 // The capacity (in people) this person can hold
var/vore_max_size = RESIZE_HUGE // The max size this mob will consider eating
var/vore_min_size = RESIZE_TINY // The min size this mob will consider eating
@@ -37,13 +36,6 @@
var/vore_default_contamination_flavor = "Generic" //Contamination descriptors
var/vore_default_contamination_color = "green" //Contamination color
//CHOMPEDIT start - Moved to code/modules/vore/eating/living_ch
//var/vore_fullness = 0 // How "full" the belly is (controls icons)
//var/vore_icons = 0 // Bitfield for which fields we have vore icons for.
//var/vore_eyes = FALSE // For mobs with fullness specific eye overlays.
//var/belly_size_multiplier = 1
//CHOMPEDIT end.
var/life_disabled = 0 // For performance reasons
var/vore_attack_override = FALSE // Enable on mobs you want to have special behaviour on melee grab attack.
@@ -59,7 +51,7 @@
var/nom_mob = FALSE //If a mob is meant to be hostile for vore purposes but is otherwise not hostile, if true makes certain AI ignore the mob
var/voremob_loaded = FALSE //CHOMPedit: On-demand belly loading.
var/voremob_loaded = FALSE // On-demand belly loading.
// Release belly contents before being gc'd!
/mob/living/simple_mob/Destroy()
@@ -77,20 +69,6 @@
if(myid)
return myid
// Update fullness based on size & quantity of belly contents
/* CHOMPEdit - moved to code/modules/vore/eating/living_ch
/mob/living/simple_mob/proc/update_fullness()
var/new_fullness = 0
for(var/obj/belly/B as anything in vore_organs)
for(var/mob/living/M in B)
if(!M.absorbed || B.count_absorbed_prey_for_sprite)
new_fullness += M.size_multiplier
new_fullness = new_fullness / size_multiplier //Divided by pred's size so a macro mob won't get macro belly from a regular prey.
new_fullness = new_fullness * belly_size_multiplier // Some mobs are small even at 100% size. Let's account for that.
new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry.
vore_fullness = min(vore_capacity, new_fullness)
*/
/mob/living/simple_mob/update_icon()
. = ..()
if(vore_active)
@@ -111,6 +89,10 @@
remove_eyes()
add_eyes()
update_transform()
for(var/belly_class in vore_fullness_ex)
var/vs_fullness = vore_fullness_ex[belly_class]
if(vs_fullness > 0)
add_overlay("[icon_state]_[belly_class]-[vs_fullness]")
/mob/living/simple_mob/regenerate_icons()
..()
@@ -232,7 +214,7 @@
// Make sure you don't call ..() on this one, otherwise you duplicate work.
/mob/living/simple_mob/init_vore()
if(!vore_active || no_vore || !voremob_loaded) //CHOMPedit: On-demand belly loading.
if(!vore_active || no_vore || !voremob_loaded)
return
AddElement(/datum/element/slosh) // Sloshy element
@@ -260,7 +242,7 @@
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
B.immutable = 1
B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs!
B.affects_vore_sprites = TRUE
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
B.digest_mode = vore_default_mode

View File

@@ -116,7 +116,7 @@
say_got_target = list()
/mob/living/simple_mob/vore/alienanimals/catslug/init_vore()
if(!voremob_loaded) //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected

View File

@@ -88,9 +88,9 @@
emote_hear = list("rattles","makes a spooky sound","cackles madly","plinks","clacks")
/mob/living/simple_mob/vore/alienanimals/skeleton/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You're not sure quite how, but you've found your way inside of the skeleton's stomach! It's cramped and cold and sounds heavily of xylophones!"

View File

@@ -65,9 +65,9 @@
vore_default_item_mode = IM_DIGEST
/mob/living/simple_mob/vore/alienanimals/dustjumper/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You've been packed into the impossibly tight stomach of the dust jumper!!! The broiling heat seeps into you while the walls churn in powerfully, forcing you to curl up in the darkness."

View File

@@ -53,9 +53,9 @@
emote_see = list("ripples and flows", "flashes rhythmically","glows faintly","investigates something")
/mob/living/simple_mob/vore/overmap/spacewhale/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "It's warm and wet, makes sense, considering it's inside of a space whale. You should take a moment to reflect upon how you got here, and how you might avoid situations like this in the future, while this whale attempts to mercilessly destroy you through various gastric processes."

View File

@@ -94,9 +94,9 @@
/mob/living/simple_mob/vore/alienanimals/startreader/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "gastric sac"
B.desc = "It's cramped and hot! You're forced into a small ball as your shape is squeezed into the slick, wet chamber. Despite being swallowed into the creature, you find that you actually stretch out of the top a ways, and can JUST BARELY wiggle around..."

View File

@@ -73,9 +73,9 @@
say_got_target = list("...")
/mob/living/simple_mob/vore/alienanimals/succlet/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stummy"
B.desc = "It's a star shaped stomach. A stummy, if you will. It's warm and soft, not unlike plush, but it's tight!"

View File

@@ -169,7 +169,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
can_be_drop_prey = FALSE //CHOMP Add
/mob/living/simple_mob/vore/alienanimals/teppi/init_vore()
if(!voremob_loaded) //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
@@ -285,7 +285,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
// The friend zone.
var/obj/belly/p = new /obj/belly(src)
p.immutable = TRUE
p.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs!
p.affects_vore_sprites = TRUE
p.mode_flags = 40
p.human_prey_swallow_time = 0.01 SECONDS
p.digestchance = 0
@@ -798,7 +798,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
vore_selected.digest_burn = 0.05
/mob/living/simple_mob/vore/alienanimals/teppi/animal_nom(mob/living/T in living_mobs(1))
if(vore_active && !voremob_loaded) //CHOMPedit: On-demand belly loading.
if(vore_active && !voremob_loaded)
voremob_loaded = TRUE
init_vore()
if(client)

View File

@@ -147,9 +147,9 @@
ai_holder_type = /datum/ai_holder/simple_mob/vore
/mob/living/simple_mob/animal/space/carp/large/huge/vorny/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You've been swallowed whole and alive by a massive white carp! The stomach around you is oppressively tight, squeezing and grinding wrinkled walls across your body, making it hard to make any movement at all. The chamber is flooded with fluids that completely overwhelm you."

View File

@@ -59,11 +59,12 @@
icon_dead = "snek_dead"
icon_rest = "snek_rest"
icon = 'modular_chomp/icons/mob/animal_ch.dmi'
// CHOMPEdit End
vore_active = 1
vore_capacity = 1
vore_default_mode = DM_DIGEST
vore_icons = SA_ICON_LIVING | SA_ICON_REST
vore_icons = SA_ICON_LIVING | SA_ICON_REST // CHOMPEdit
vore_escape_chance = 20
swallowTime = 50
vore_bump_chance = 10
@@ -108,7 +109,6 @@
"\the [name]'s tail lurches with the struggles of a live meal.")
B.examine_messages = list(
"\the [name]'s tail is swollen fat with a lump of prey it swallowed whole.")
// CHOMPEdit End
/datum/say_list/snake
emote_hear = list("hisses")
@@ -144,7 +144,7 @@
makes_dirt = FALSE
vore_default_mode = DM_HOLD // CHOMPEdit because Noodle isn't a meanie! Unless you struggle. Honestly I'm happy leaving it as digestion, but since he can bump nom now, maybe don't have gurgles on by default. -Ace
vore_default_mode = DM_HOLD
var/turns_since_scan = 0
var/obj/movement_target

View File

@@ -70,11 +70,9 @@
vore_default_item_mode = IM_DIGEST
/mob/living/simple_mob/vore/squirrel/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.digest_mode = DM_SELECT

View File

@@ -44,11 +44,9 @@
vore_standing_too = TRUE
/mob/living/simple_mob/vore/turkeygirl/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The hot churning stomach of a turkey girl! The doughy flesh presses inward to form to your figure, thick slime coating everything, and very shortly that includes you as well! There isn't any escaping that constant full body motion, as her body works to ball yours up into a tight little package. Gurgling and glubbing with every shifting movement, while her pulse throbs through the flesh all around you with every beat of her heart. All in all, one thing is for certain! You've become turkey stuffing! Oh no..."

View File

@@ -55,11 +55,9 @@
movement_cooldown = -1
/mob/living/simple_mob/vore/blaidd/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The canine pounces atop you and wastes now time in wrapping its jaws around your entire head. The beast is strong and determined, there is no wriggling out of it's iron grip. Within its maw, the tongue slathers canine drool across you, hot doglike breaths wash across your face, triangular teeth hold you firmly in place. It doesn't take long before the blaidd is gulping you down aggressively, like a big chunk of meat. The creature's stomach distends and hangs beneath it with your weight, swaying heavily not just with your movements, but every step from the wolf. Bound up uncomfortably tight in this sweltering, dark gut, movement is almost impossible and it's hard to tell which way is up."

View File

@@ -77,11 +77,9 @@
movement_cooldown = -1
/mob/living/simple_mob/vore/ddraig/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "Despite the jaws of the dragon not being particular visible, once they begin to part it reveals a rather vast maw. More than wide enough to engulf your head and upper body, the ddraig lifts you effortlessly from the ground, standing up to full height with only your legs dangling from the beast's mouth. Inside you are engulfed in the wet, slimy and hot slobber of the creature. A massive tongue beneath your body curls over you to taste and lather every inch on offer. Soon enough, the dragon tosses its head backwards, sending your body beyond the throat, wrapped in the rippled lining of the creatures gullet for a slow, dark descent into the abyss below. It is a long journey through that seemingly endless neck, but eventually you are deposited in the creature's stomach. Little sound from the outside makes it inside, all drowned out by the cacophony of bodily functions groaning, burbling and beating around you. Despite the size of the beast, the gut is not massive, the walls clench down tight around your helplessly trapped body. The stomach lining grinds roughly over your body, smearing you in a slurry of slimy fluids."

View File

@@ -42,11 +42,9 @@
vore_standing_too = 1
/mob/living/simple_mob/vore/fluffball/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "tail"
B.desc = "The small critter seems to suddenly panic, lunging at you with its massive fluffy tail, using it like a weapon. Despite the appearance of the tail, it seems to be much larger on the inside, suddenly engulfing you completely in a world of endless softness. Inside, you are bound up nice and tight in an oddly comfortable prison of hair, it ripples over your body tickling every bit of exposed body on offer."

View File

@@ -36,11 +36,9 @@
projectile_accuracy = -20
/mob/living/simple_mob/vore/horse/unicorn/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "With a final few gulps, the unicorn finishes swallowing you down into its hot, humid gut... and with a slosh, your weight makes the equine's belly hang down slightly like some sort of organic hammock. The thick, damp air is tinged with the smell of... candyfloss(?), and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder."

View File

@@ -43,11 +43,9 @@
emote_see = list("flaps","grooms itself")
/mob/living/simple_mob/vore/bat/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The giant bat has managed to swallow you alive, which is particularly impressive given that it's still a rather small creature. It's belly bulges out as you're squeezed into the oppressively tight stomach, and it lands to manage the weight, wings curling over your form beneath. The body groans under your strain, burbling and growling as it gets to work on it's feed. However, at least for now, it seems to do you no physical harm. Instead, the damp walls that squelch across your body try to leech out your energy through some less direct means."

View File

@@ -330,19 +330,6 @@ I think I covered everything.
update_fullness()
build_icons()
/* CHOMPEDIT - removed
/mob/living/simple_mob/vore/bigdragon/update_fullness()
var/new_fullness = 0
// Only count stomachs to fullness
for(var/obj/belly/B in vore_organs)
if(B.name == "Stomach" || B.name == "Second Stomach")
for(var/mob/living/M in B)
new_fullness += M.size_multiplier
new_fullness /= size_multiplier
new_fullness = round(new_fullness, 1)
vore_fullness = min(vore_capacity, new_fullness)
*/
/mob/living/simple_mob/vore/bigdragon/proc/build_icons(var/random)
cut_overlays()
if(stat == DEAD)
@@ -519,10 +506,10 @@ I think I covered everything.
/// My thanks to Raeschen for these descriptions
/mob/living/simple_mob/vore/bigdragon/init_vore()
if(!voremob_loaded || LAZYLEN(vore_organs)) //CHOMPEdit
if(!voremob_loaded || LAZYLEN(vore_organs))
return
var/obj/belly/B = new /obj/belly/dragon/maw(src)
B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite.
B.affects_vore_sprites = FALSE
B.emote_lists[DM_HOLD] = list(
"The dragon's breath continues to pant over you rhythmically, each exhale carrying a bone-shivering growl",
"The thick, heavy tongue lifts, curling around you, cramming you tightly against it's teeth, to squeeze some flavor out of you.",
@@ -532,7 +519,7 @@ I think I covered everything.
gut1 = B
vore_selected = B
B = new /obj/belly/dragon/throat(src)
B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite.
B.affects_vore_sprites = FALSE
B.emote_lists[DM_HOLD] = list(
"Gggllrrrk! Another loud, squelching swallow rings out in your ears, dragging you a little deeper into the furnace-like humid heat of the dragon's body.",
"Nestling in a still throat for a moment, you feel the walls quiver and undulate excitedly in tune with the beast's heartbeat.",
@@ -540,7 +527,7 @@ I think I covered everything.
"The throat closes in tightly, utterly cocooning you with it's silken spongey embrace. Like this it holds, until you feel like you might pass out... eventually, it would shlllrrk agape and loosen up all around you once more, the beast not wanting to lose the wriggly sensation of live prey.",
"Blrrbles and squelching pops from it's stomach echo out below you. Each swallow brings greater clarity to those digestive sounds, and stronger acidity to the muggy air around you, inching you closer to it's grasp. Not long now.")
B = new /obj/belly/dragon/stomach(src)
B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs!
B.affects_vore_sprites = TRUE
B.emote_lists[DM_DIGEST] = list(
"The stomach walls spontaneously contract! Those wavey, fleshy walls binding your body in their embrace for the moment, slathering you with thick, caustic acids.",
"You hear a soft rumbling as the dragons insides churn around your body, the well-used stomach walls shuddering with a growl as you melt down.",
@@ -549,7 +536,7 @@ I think I covered everything.
"The constant, rhythmic kneading and massaging starts to take its toll along with the muggy heat, making you feel weaker and weaker!",
"The drake happily wanders around while digesting its meal, almost like it is trying to show off the hanging gut you've given it.")
B = new /obj/belly/dragon/maw/heal(src)
B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite.
B.affects_vore_sprites = FALSE
B.emote_lists[DM_HEAL] = list(
"Gently, the dragon's hot, bumpy tongue cradles you, feeling like a slime-soaked memory-foam bed, twitching with life. The delicacy that the dragon holds you with is quite soothing.",
"The wide, slick throat infront of you constantly quivers and undulates. Every hot muggy exhale of the beast makes that throat spread, ropes of slime within it's hold shivering in the flow, inhales causing it to clench up somewhat.",
@@ -558,7 +545,7 @@ I think I covered everything.
"Saliva soaks the area all around you thickly, lubricating absolutely everything with the hot liquid. From time to time, the beast carefully shifts the rear of it's tongue to piston a cache of the goop down the hatch. The throat seen clenching tightly shut, the tongue's rear bobbing upwards, before down again - showing off a freshly slime-soaked entrance.")
gut2 = B
B = new /obj/belly/dragon/throat/heal(src)
B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite.
B.affects_vore_sprites = FALSE
B.emote_lists[DM_HEAL] = list(
"The tunnel of the gullet closely wraps around you, mummifying you in a hot writhing embrace of silky flesh. The walls are slick, soaked in a lubricating slime, and so very warm.",
"The walls around you pulse in time with the dragon's heartbeat, which itself pounds in your ears. Rushing wind of calm breaths fill the gaps, and distant squelches of slimy payloads shifted around by soft flesh echo down below.",
@@ -566,7 +553,7 @@ I think I covered everything.
"Soothing thrumms from the beast sound out, to try help calm you on your way down. The dragon seems to not want you to panic, using surprisingly gentle intent.",
"Clenchy embraces rhythmically squelch over you. Spreading outwards, the walls would relent, letting you spread a hot, gooey pocket of space around yourself. You linger, before another undulation of a swallow nudges you further down.")
B = new /obj/belly/dragon/stomach/heal(src)
B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs!
B.affects_vore_sprites = TRUE
B.emote_lists[DM_HEAL] = list(
"In tune with the beast's heartbeat, the walls heave and spread all around you. In, tight and close, and then outwards, spreading cobwebs of slime all around.",
"The thick folds of flesh around you blrrrble and sqllrrch, as the flesh itself secretes more of this strange, pure, goopy liquid, clenching it among it's crevices to squeeze it all over you in a mess.",

View File

@@ -153,7 +153,7 @@
/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi/init_vore()
if(!voremob_loaded)
return
..()
. = ..()
var/obj/belly/B = vore_selected
B.name = "fuel processor"
B.desc = "The twice-corrupted hound takes a moment to lather over the rest of your figure in heated, slimy synth-slobber before gulping you the rest of the way down its lubricated, rubbery throat. After a short string of slick-sounding, autonomous swallows, you spill out into its awaiting processor, your body immediately making its synth-flesh sag down slightly... and, as an oddly distorted rumble vibrates into the chamber, so too does a slowly accumulating pool of hot, viscous ooze. Only time will tell if whatever extra programming the hound has will spare you from being processed..."

View File

@@ -69,11 +69,9 @@
movement_cooldown = -1
/mob/living/simple_mob/vore/cryptdrake/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The enormous beast snaps it's boney jaws around your form, effortlessly lifting you from the ground. Throwing it's head backwards, your body is tossed up momentarily as the maw parts wider, only for you to descend rapidly moments later. You're caught in the creature's throat for a moment, contracting dark purple flesh holding tightly onto you, there's no going back at this point. The peristaltic motions squeeze you down this tunnel towards your final destination, where you're soon relieved of the intense squelching to be pushed into a move flexible, stretching chamber. Immediately coated in caustic oozes, the world around you seems more than eager to ensure that you're soaked over every inch, wrinkled walls twisting and grinding around your body. The drake's stomach clenches and compresses over you rhythmically, attempting to eagerly add you to the soup of fluids that fill this sloshing gut. Omnipresent sounds of groaning, gurgling and burbling bodily functions signify just how active this process already is."

View File

@@ -43,11 +43,9 @@
vore_bump_emote = "pounces on"
/mob/living/simple_mob/vore/devil/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "It turns out that this was not just any old statue, but some form of android waiting for its chance to ambush you. The moment that it laid its hands on you, your fate was decided. The jaws of the machine parted, if you could call them that, and immediately enveloped your head. The inside was hot and slick, but dry. The textures were startlingly realistic, the base was clearly a tongue, the top palate of the mouth was hard but somewhat pliable. Not that you had time to admire it before the rest of your body was stuffed inside. Through a short passage down through a rubbery tube of a gullet, mechanical contractions squeezing you down from behind, you're quickly deposited in something much resembling a stomach. Amid the sounds of mechanical whirrs, you can heard glorping, gurgling and burbling from unknown sources. The walls wrap firmly around your body, deliberately dramping you up into the smallest space that the machine can crush you into, whilst the synthetic lining around you ripples across your hunched up form. You can even see yourself, the gut itself is backlit by some eerie red glow, just enough to tell exactly what is happening to you. It doesn't help that you can see the drooling fluids glistening in the dim light."

View File

@@ -148,9 +148,9 @@
add_overlay(bigshadow)
/mob/living/simple_mob/vore/fennec/huge/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
B.desc = "The slimy wet insides of a rather large fennec! Not quite as clean as the fen on the outside."

View File

@@ -123,9 +123,9 @@
. = ..()
/mob/living/simple_mob/vore/greatwolf/init_vore()
if(!voremob_loaded) //CHOMP add to fix runtime
return //CHOMP Add
.=..() //CHOMP Add
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The moment the wolf gets its jaws around you, it scoops you right up off of the ground, and greedily scarfs you down with a few swift gulps. Your small frame alone is hardly enough to make him look somewhat plump as you slop wetly into that dark, hot chamber, although the dense squish is rather comfortable. The thick, humid air is tinged with the smell of digested meat, and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder."

View File

@@ -140,9 +140,9 @@
vore_bump_emote = "chomps down on"
/mob/living/simple_mob/vore/horse/kelpie/init_vore()
if(!voremob_loaded) // CHOMPedit start
if(!voremob_loaded)
return
.=..() // CHOMPedit end
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "With a final few gulps, the kelpie finishes swallowing you down into its hot, humid gut... and with a slosh, your weight makes the equine's belly hang down slightly like some sort of organic hammock. The thick, damp air is tinged with the smell of seaweed, and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder."

View File

@@ -57,19 +57,6 @@
can_be_drop_prey = FALSE //CHOMP Add
/* CHOMPEdit - now handled by new belly features.
/mob/living/simple_mob/vore/lamia/update_fullness()
var/new_fullness = 0
// We only want to count our upper_stomach towards capacity
for(var/obj/belly/B as anything in vore_organs)
if(B.name == "upper stomach")
for(var/mob/living/M in B)
new_fullness += M.size_multiplier
new_fullness /= size_multiplier
new_fullness = round(new_fullness, 1)
vore_fullness = min(vore_capacity, new_fullness)
*/
/mob/living/simple_mob/vore/lamia/update_icon()
. = ..()
@@ -80,25 +67,6 @@
// And copper_vore_1_0 is full upper stomach, but empty tail stomach
// For unconscious: [icon_rest]_vore_[upper]_[tail]
// For dead, it doesn't show.
/* CHOMPEdit - Handled differently now.
var/upper_shows = FALSE
var/tail_shows = FALSE
for(var/obj/belly/B as anything in vore_organs)
if(!(B.name in list("upper stomach", "tail stomach")))
continue
var/belly_fullness = 0
for(var/mob/living/M in B)
belly_fullness += M.size_multiplier
belly_fullness /= size_multiplier
belly_fullness = round(belly_fullness, 1)
if(belly_fullness)
if(B.name == "upper stomach")
upper_shows = TRUE
else if(B.name == "tail stomach")
tail_shows = TRUE
*/
var/upper_shows = vore_fullness_ex["stomach"]
var/tail_shows = vore_fullness_ex["tail"]
@@ -122,7 +90,7 @@
var/obj/belly/tail = new /obj/belly(src)
tail.immutable = TRUE
tail.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs!
tail.affects_vore_sprites = TRUE
tail.name = "tail stomach"
tail.desc = "You slide out into the narrow, constricting tube of flesh that is the lamia's snake half, heated walls and strong muscles all around clinging to your form with every slither."
tail.digest_mode = vore_default_mode
@@ -140,7 +108,7 @@
tail.human_prey_swallow_time = swallowTime
tail.nonhuman_prey_swallow_time = swallowTime
tail.vore_verb = "stuff"
tail.belly_sprite_to_affect = "tail" //CHOMPEdit - So that tail belly affects tail vore sprite.
tail.belly_sprite_to_affect = "tail"
tail.emote_lists[DM_HOLD] = B.emote_lists[DM_HOLD].Copy()
tail.emote_lists[DM_DIGEST] = B.emote_lists[DM_DIGEST].Copy()

View File

@@ -82,8 +82,8 @@
src.adjust_nutrition(src.max_nutrition)
/mob/living/simple_mob/vore/leopardmander/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -151,9 +151,9 @@
add_verb(src, /mob/living/simple_mob/vore/leopardmander/exotic/proc/toggle_glow)
/mob/living/simple_mob/vore/leopardmander/exotic/init_vore()
if(!voremob_loaded) //CHOMP add to fix runtime
return //CHOMP Add
.=..() //CHOMP Add
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The exotic leopardmander tosses its head back with you firmly clasped in its jaws, and in a few swift moments it finishes swallowing you down into its hot, brightly glowing gut. Your weight makes absolutely no impact on its form, the doughy walls giving way beneath you, with their unnatural softness. The thick, humid air is tinged with an oddly pleasant smell, and the surrounding flesh wastes no time in clenching and massaging down over its newfound fodder, smothering you in thick hot gutflesh~ You can only really sort of see outside that thick-walled gut."

View File

@@ -62,7 +62,7 @@
/mob/living/simple_mob/vore/aggressive/macrophage/init_vore()
if(LAZYLEN(vore_organs))
if(!voremob_loaded || LAZYLEN(vore_organs))
return TRUE
var/obj/belly/B = new /obj/belly/macrophage(src)

View File

@@ -39,11 +39,9 @@
vore_bump_emote = "pounces on"
/mob/living/simple_mob/vore/meowl/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The strange critter suddenly takes advantage of you being alone to pounce atop you and quickly engulf your head within its maw! Before you even have a chance to react, the world goes dark with the inside of the meowls mouth covering your face, a rough tounge lapping smearing wet hot slobber over you. The rest of the process is pretty quick as the cat-owl begins to gulp your head down through a surprisingly stretchy throat and along the tight, flexing tunnel of its gullet. Before long you are pushing face first into the creature's stomach, the wrinkled walls quickly beginning grind slick flesh across it like any other piece of food. The rest of your body soon follows into the increasingly tight space, forced to curl up over yourself as the stomach lining bears down on you from every angle. At first, the stomach itself seems rather inactive, happily just squeezing and massaging you as the meowl settles down to slowly enjoy their snack. Though, struggling might risk setting off the gut one way or another..."

View File

@@ -149,9 +149,9 @@
ai_holder.remove_target()
/mob/living/simple_mob/vore/pakkun/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
if(isbelly(B)) //ChompEDIT - fix a runtime
B.name = "stomach"
@@ -276,9 +276,9 @@
..()
/mob/living/simple_mob/vore/pakkun/snapdragon/snappy/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
if(isbelly(B)) //ChompEDIT - fix a runtime
B.digest_mode = DM_HOLD

View File

@@ -55,11 +55,9 @@
emote_see = list("exists","just stands there","smiles","looks around")
/mob/living/simple_mob/vore/peasant/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You've somehow managed to get yourself eaten by one of the local peasants. After jamming you down into their stomach, you find yourself cramped up tight in a space that clearly shouldn't be able to accept you. They let out a relieved sigh as they heft around their new found weight, giving it a hearty pat, clearly content to get a good meal for once. The world around you groans and grumbles, but the gut is far from harmful to you right now, even as the walls clench down on your body."

View File

@@ -38,11 +38,9 @@
vore_bump_emote = "encloses on"
/mob/living/simple_mob/vore/mantrap/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "trap"
B.desc = "As you step onto the large leaves of the mantrap, they suddenly shoot up and snap shut around you, encasing you in a fleshy-feeling gut. The saw-toothed spikes around the edge of the leaves interlock with one another and exerts a tremendous pressure on your body. Copious volumes of fluids begin to seep in from the walls themselves, rapidly coating your body and pooling around you, all of your movements only seem to speed up this process.."
@@ -129,11 +127,9 @@
projectilesound = 'sound/effects/slime_squish.ogg'
/mob/living/simple_mob/vore/pitcher/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "Walking a little too close to the pitcher plant, you trigger its trap mechanism and a tendril shoots out towards you. Wrapping around your body, you are rapidly dragged into the open mouth of the plant, stuffing your entire body into a fleshy, green stomach filled with a pool of some sort of tingling liquid. The lid of the plant slams down over the mouth, making it far more difficult to escape, all whilst that pool steadily seems to be filling up."

View File

@@ -83,11 +83,9 @@
movement_cooldown = -1
/mob/living/simple_mob/vore/raptor/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The raptor pounces atop you, pinning you under sharp taloned feet, a heavy weight on your chest. Unable to do much more than look up at the reptilian face, looking back down at you with a curious bird-like expression, you're helpless in the moment. With little more warning, the jaws lunge open and dive down towards your head. Engulfing you in the wet maw, tongue pushing against your face, a cage of jagged teeth hold you in place. Pulling you upwards roughly, the creature begins to chomp it's way down your body, and you're steadily transferred down the rippling, tight tunnel of its gullet. The beast throws its head backwards, sending you spiralling down toward's its stomach, where you land with a wet splash. The walls of the gut immediately clamp down on you, wrinkled flesh grinding the gastric slurry of acids and enzymes into your trapped form. A cacophony of bodily functions, groans, gurgles and heart beats overwhelm your hearing. This creature's body has clearly decided you're little more than meat to it now."

View File

@@ -95,11 +95,9 @@
movement_cooldown = -1
/mob/living/simple_mob/vore/scel/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The strange beast pounces atop of you, pinning you with it's hefty weight, the greedy stomach sloshing atop you before it looms closer, with that maw stretching almost impossibly wide and easily enveloping your body. The jaws of the scel are solid and fleshy, preventing any movement. Immediately you are embraced into the tight pull of oily black flesh, and you are rapidly dragged down into the humid, more malleable depths of the creature! Splashing down into a thick, ominously bubbling sludge, you fall into place as food among the remnants of previous meals. As you settle, you are completely hidden away inside of it's serpentine body, left to complete darkness and the sounds of squelching bodily functions. Movement is not difficult as the flesh around you is easily pushed back, but it quickly snaps back into place to keep you constrained. Slowly, the neon liquid that you could see from the outside of the creature begins to seep into the chamber. With that hefty stomach bloated with yet another meal, a lazy burp signals its meal complete. Leaving you to simmer in its depths as it continues its prowling..."

View File

@@ -41,11 +41,9 @@
vore_standing_too = 1
/mob/living/simple_mob/vore/scrubble/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "Despite the small size of the scrubble, it seems to have a lot of energy behind it. The critter dives atop you in a panic, its maw quickly engulfing your head as its paws flail scrabble against you, hot slobber slathering across your tightly trapped face. It takes a little repositioning to get itself in the right position, but soon the creature is gulping its way down your entire body. Somehow it manages to squeeze you completely into a gut that should rightly be far too small for anything but a mouse, bundling up your body into a tight ball as the walls around you clench in tightly to keep you nice and compact. The sounds of burbling and glorping echo through the intensely tight space as the stomach lining grinds in thick oozes against your skin, pressure so high that you can barely move a muscle."

View File

@@ -143,15 +143,15 @@
. = ..()
/mob/living/simple_mob/shadekin/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
if(!voremob_loaded)
return
if(LAZYLEN(vore_organs))
return
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
B.immutable = 1
B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs!
B.affects_vore_sprites = TRUE
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
B.digest_mode = vore_default_mode

View File

@@ -56,7 +56,7 @@
return
/mob/living/simple_mob/vore/sheep/init_vore()
if(!voremob_loaded) //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected

View File

@@ -44,11 +44,9 @@
vore_bump_emote = "pounces on"
/mob/living/simple_mob/vore/sonadile/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The creature's huge maw drops down over your body, the long neck preventing it from barely having to shift its torso at all. The jaws quickly travel down you, slathering you in a drool as you're quickly stuffed through the flexible muscle of the throat. In a matter of seconds you are effortlessly lifted from the ground, your entire figure now reduced to a bulge within the neck of the beast, your feet soon vanishing into its mouth with a visceral gulp. The journey down is a long and slow one, the gullet squeezing you steadily along with heavy rippling contractions, the sonadile is quite content that you're heading in the right direction. With every inch, the world around you grows louder with the sound of a heartbeat and the gutteral grumbles of your upcoming destination. Before long you are squeezed down through a tight fleshy valve and deposited in the stomach of the reptile, walls immediately bearing down on you from every direction to ensure that you're tightly confined with little room to move. Hot, humid and slick with all manner of thick and thin liquids, this place isn't treating you any different from whatever else this animal likes to eat."

View File

@@ -44,11 +44,9 @@
vore_bump_emote = "pounces on"
/mob/living/simple_mob/vore/stalker/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The lithe creature spends only minimal time with you pinned beneath it, before it's jaws stretch wide ahead of your face. The slightly blue hued interior squelches tightly over your head as the stalker's teeth prod against you, threatening to become much more of a danger if you put up too much of a fight. However, the process is quick, your body is efficiently squeezed through that tight gullet, contractions dragging you effortlessly towards the creature's gut. The stomach swells and hangs beneath the animal, swaying like a hammock under the newfound weight. The walls wrap incredibly tightly around you, compressing you tightly into a small ball as it grinds caustic juices over you."

View File

@@ -56,11 +56,9 @@
emote_see = list("gestures for you to come over","winks","smiles","stretches")
/mob/living/simple_mob/vore/succubus/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You find yourself tightly compressed into the stomach of the succubus, with immense pressure squeezing down on you from every direction. The wrinkled walls of the gut knead over you, like a swelteringly hot, wet massage. You can feel movement from the outside, as though the demoness is running her hands over your form with delight. The world around you groans and gurgles, but the fluids that ooze into this place don't seem harmful, yet. Instead, you feel your very energy being steadily depleted, much to the joy of the woman who's claiming it all for herself."

View File

@@ -55,11 +55,9 @@
emote_see = list("wafts about","licks their lips","flaps a bit")
/mob/living/simple_mob/vore/vampire/init_vore()
//CHOMPEdit Start
if(!voremob_loaded)
return
. = ..()
//CHOMPEdit End
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "Having been rapidly gulped up by the vampire, you find yourself tightly contained with a set of groaning, wrinkled walls. It seems that the beast has decided against draining your lifeforce through you blood, and instead taking a more direct approach as it saps your strength from all around you. Your attacker seems content to just take that essence for now, but it is a gut afterall and struggling may set it off."

View File

@@ -71,9 +71,9 @@
unacidable = TRUE
/mob/living/simple_mob/vore/vore_hostile/abyss_lurker/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "interior"
B.desc = "It's hot and overwhelmingly tight! The interior of the pale creature groans with the effort of squeezing you. Everything is hot and churning and eager to grind and smother you in thick fluids. The weight of the creature's body pressing in at you makes it hard to move at all, while you are squeezed to the very core of the creature! There seems almost not to even be an organ for this so much as the creature has folded around you, trying to incorporate your matter into its body with vigor!"
@@ -191,9 +191,9 @@
var/leap_sound = 'sound/weapons/spiderlunge.ogg'
/mob/living/simple_mob/vore/vore_hostile/leaper/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The flesh of the tall creature's stomach folds over you in doughy waves, squeezing you into the tightest shape it can manage with idle flexes churning down on you. Your limbs often find themselves lost between folds and tugged this way or that, held in a skin tight press that is not painful, but is hard to pull away from. You can see a strange, glittering pink and purple light glimmering through the flesh of the monster all around you, like your very own sea of stars. The walls rush in to fill all the space, squeezing you from head to toe no matter how you might wiggle, the weight of the semi-transparent interior flesh keeping you neatly secured deep inside while wringing the fight out of you."
@@ -309,9 +309,9 @@
unacidable = TRUE
/mob/living/simple_mob/vore/vore_hostile/gelatinous_cube/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "interior"
B.desc = "An incredibly thick oozing slime surrounds you, filling in all the space around your form! It's hard to catch a breath here as the jiggling gel that makes up the body of the creature swiftly fills in the hole you made in its surface by entering. The gel is semi-transparent, and you can see your surroundings though its surface, and similarly you can be seen floating in the gel from the outside. When the cube moves, your whole body is wobbled along with it. There are clouds of still processing material floating all around you as the corrosive substance works on breaking everything down."

View File

@@ -69,9 +69,9 @@
belly_attack = FALSE
/mob/living/simple_mob/vore/wolftaur/init_vore()
if(!voremob_loaded) //CHOMPAdd
return //CHOMPAdd
.=..() //CHOMPEdit
if(!voremob_loaded)
return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "After a gruelling compressive traversal down through the taur's gullet, you briefly get deposited in an oppressively tight stomach at it's humanoid waist. However, the wolf has little interest in keeping you here, instead treating you as a mere snack, an orifice opens beneath you and you're soon dragged deeper into her depths. Soon you're splashing into an active, waiting caustic slurry, and the world around you drops as though you're trapped in a hammock. The taur's underbelly sags with your weight, and you feel a heavy pat from the woman outside settling in to make the most of her meal."

View File

@@ -715,7 +715,7 @@
if(istext(belly_data["belly_sprite_to_affect"]))
var/new_belly_sprite_to_affect = sanitize(belly_data["belly_sprite_to_affect"],MAX_MESSAGE_LEN,0,0,0)
if(new_belly_sprite_to_affect)
if (new_belly_sprite_to_affect in host.vore_icon_bellies) // CHOMPEdit, all, not only human
if (new_belly_sprite_to_affect in host.vore_icon_bellies)
new_belly.belly_sprite_to_affect = new_belly_sprite_to_affect
if(istext(belly_data["undergarment_chosen"]))
@@ -726,7 +726,6 @@
new_belly.undergarment_chosen = U.name
break
// Not implemented on virgo -> CHOMPEnable Start
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[new_belly.undergarment_chosen]
var/invalid_if_none = TRUE
for(var/datum/category_item/underwear/U in UWC.items)
@@ -747,7 +746,6 @@
if(istext(belly_data["undergarment_color"]))
var/new_undergarment_color = sanitize_hexcolor(belly_data["undergarment_color"],new_belly.undergarment_color)
new_belly.undergarment_color = new_undergarment_color
// CHOMPEnable End
/* These don't seem to actually be available yet
if(istext(belly_data["tail_to_change_to"]))
var/new_tail_to_change_to = sanitize(belly_data["tail_to_change_to"],MAX_MESSAGE_LEN,0,0,0)
@@ -1179,6 +1177,6 @@
new_belly.items_preserved.Cut()
new_belly.update_internal_overlay() // Signal not implemented! CHOMPEnable
host.update_fullness() // CHOMPEdit, all, not only human
host.update_fullness()
host.updateVRPanel()
unsaved_changes = TRUE

View File

@@ -99,8 +99,6 @@
REAGENT_TRICORDRAZINE
)
var/undergarment_if_none
var/undergarment_color = COLOR_GRAY
var/tail_colouration = FALSE
//var/marking_to_add = NULL
//var/marking_color = NULL

View File

@@ -69,12 +69,12 @@
var/private_struggle = FALSE // If struggles are made public or not //CHOMPAdd
var/vore_sprite_flags = DM_FLAG_VORESPRITE_BELLY //CHOMPEdit
var/vore_sprite_flags = DM_FLAG_VORESPRITE_BELLY
var/tmp/static/list/vore_sprite_flag_list= list(
"Normal Belly Sprite" = DM_FLAG_VORESPRITE_BELLY, //CHOMPEdit
"Normal Belly Sprite" = DM_FLAG_VORESPRITE_BELLY,
//"Tail adjustment" = DM_FLAG_VORESPRITE_TAIL,
//"Marking addition" = DM_FLAG_VORESPRITE_MARKING
"Undergarment addition" = DM_FLAG_VORESPRITE_ARTICLE, //CHOMPAdd
"Undergarment addition" = DM_FLAG_VORESPRITE_ARTICLE,
)
var/affects_vore_sprites = FALSE
var/count_absorbed_prey_for_sprite = TRUE
@@ -91,6 +91,8 @@
var/tail_extra_overlay = FALSE
var/tail_extra_overlay2 = FALSE
var/undergarment_chosen = "Underwear, bottom"
var/undergarment_if_none
var/undergarment_color = COLOR_GRAY
// Generally just used by AI
var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
@@ -352,7 +354,10 @@
"belly_sprite_to_affect",
"health_impacts_size",
"count_items_for_sprite",
"item_multiplier"
"item_multiplier",
"undergarment_chosen",
"undergarment_if_none",
"undergarment_color"
)
if (save_digest_mode == 1)
@@ -1156,7 +1161,8 @@
M.reagents.del_reagent(REAGENT_ID_CLEANER) //Don't need this stuff in our bloodstream.
M.reagents.trans_to_holder(Pred.ingested, M.reagents.total_volume, 0.5, TRUE) //CHOMPEdit End
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
owner.update_fullness()
//Incase they have the loop going, let's double check to stop it.
M.stop_sound_channel(CHANNEL_PREYLOOP)
// Delete the digested mob
@@ -1253,9 +1259,10 @@
//Update owner
owner.updateVRPanel()
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(isanimal(owner))
owner.update_icon()
else
owner.update_fullness()
// Finally, if they're to be sent to a special pudge belly, send them there
if(transferlocation_absorb)
var/obj/belly/dest_belly
@@ -1282,9 +1289,10 @@
//Update owner
owner.updateVRPanel()
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(isanimal(owner))
owner.update_icon()
else
owner.update_fullness()
/////////////////////////////////////////////////////////////////////////
/obj/belly/proc/handle_absorb_langs()
@@ -1376,10 +1384,8 @@
var/sound/struggle_snuggle
var/sound/struggle_rustle = sound(get_sfx("rustle"))
//CHOMPEdit Start - vore sprites struggle animation
if((vore_sprite_flags & DM_FLAG_VORESPRITE_BELLY) && (owner.vore_capacity_ex[belly_sprite_to_affect] >= 1) && !private_struggle && resist_triggers_animation && affects_vore_sprites)
if((vore_sprite_flags & DM_FLAG_VORESPRITE_BELLY) && (owner.vore_capacity_ex[belly_sprite_to_affect] >= 1) && !private_struggle && resist_triggers_animation && affects_vore_sprites) // CHOMPEdit
owner.vs_animate(belly_sprite_to_affect)
//CHOMPEdit End
//CHOMPEdit Start
if(!private_struggle)
@@ -1609,8 +1615,6 @@
I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color)
items_preserved -= content
owner.updateVRPanel()
if(isanimal(owner))
owner.update_icon()
for(var/mob/living/M in contents)
M.updateVRPanel()
owner.update_icon()
@@ -1910,6 +1914,9 @@
dupe.health_impacts_size = health_impacts_size
dupe.count_items_for_sprite = count_items_for_sprite
dupe.item_multiplier = item_multiplier
dupe.undergarment_chosen = undergarment_chosen
dupe.undergarment_if_none = undergarment_if_none
dupe.undergarment_color = undergarment_color
//// Object-holding variables
//struggle_messages_outside - strings
@@ -2157,16 +2164,14 @@
if(M.absorbed)
fullness_to_add *= absorbed_multiplier
if(health_impacts_size)
//CHOMPEdit Start
if(ishuman(M))
fullness_to_add *= (M.health + 100) / (M.getMaxHealth() + 100)
else
fullness_to_add *= M.health / M.getMaxHealth()
if(fullness_to_add > 0)
belly_fullness += fullness_to_add
//CHOMPEdit End
if(count_liquid_for_sprite)
belly_fullness += (reagents.total_volume / 100) * liquid_multiplier
if(count_liquid_for_sprite) // CHOMPEnable
belly_fullness += (reagents.total_volume / 100) * liquid_multiplier // CHOMPEnable
if(count_items_for_sprite)
for(var/obj/item/I in src)
var/fullness_to_add = 0
@@ -2181,7 +2186,7 @@
else if(I.w_class == ITEMSIZE_HUGE)
fullness_to_add = ITEMSIZE_COST_HUGE
else
fullness_to_add = I.w_class //CHOMPEdit
fullness_to_add = I.w_class
fullness_to_add /= 32
belly_fullness += fullness_to_add * item_multiplier
belly_fullness *= size_factor_for_sprite

View File

@@ -88,8 +88,8 @@ 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) //CHOMPEdit - Health probably changed so...
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(B.health_impacts_size)
B.owner.update_fullness()
consider_healthbar(L, old_health, B.owner)
/*if(isrobot(B.owner)) //CHOMPEdit: Borgos can now use nutrition too
@@ -156,9 +156,9 @@ GLOBAL_LIST_INIT(digest_modes, list())
/datum/digest_mode/drain/shrink/process_mob(obj/belly/B, mob/living/L)
if(L.size_multiplier > B.shrink_grow_size)
L.resize(L.size_multiplier - 0.01) // Shrink by 1% per tick
if(L.size_multiplier <= B.shrink_grow_size) //CHOMPEdit - Adds some feedback so the pred knows their prey has stopped shrinking.
to_chat(B.owner, span_notice("You feel [L] get as small as you would like within your [lowertext(B.name)]."))
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(L.size_multiplier <= B.shrink_grow_size) // Adds some feedback so the pred knows their prey has stopped shrinking.
to_chat(B.owner, span_vnotice("You feel [L] get as small as you would like within your [lowertext(B.name)]."))
B.owner.update_fullness()
. = ..()
/datum/digest_mode/grow
@@ -168,9 +168,9 @@ GLOBAL_LIST_INIT(digest_modes, list())
/datum/digest_mode/grow/process_mob(obj/belly/B, mob/living/L)
if(L.size_multiplier < B.shrink_grow_size)
L.resize(L.size_multiplier + 0.01) // Shrink by 1% per tick
if(L.size_multiplier >= B.shrink_grow_size) //CHOMPEdit - Adds some feedback so the pred knows their prey has stopped growing.
to_chat(B.owner, span_notice("You feel [L] get as big as you would like within your [lowertext(B.name)]."))
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(L.size_multiplier >= B.shrink_grow_size) // Adds some feedback so the pred knows their prey has stopped growing.
to_chat(B.owner, span_vnotice("You feel [L] get as big as you would like within your [lowertext(B.name)]."))
B.owner.update_fullness()
/datum/digest_mode/drain/sizesteal
id = DM_SIZE_STEAL
@@ -178,12 +178,12 @@ GLOBAL_LIST_INIT(digest_modes, list())
/datum/digest_mode/drain/sizesteal/process_mob(obj/belly/B, mob/living/L)
if(L.size_multiplier > B.shrink_grow_size && B.owner.size_multiplier < 2) //Grow until either pred is large or prey is small.
B.owner.resize(B.owner.size_multiplier + 0.01) //Grow by 1% per tick.
if(B.owner.size_multiplier >= 2) //CHOMPEdit - Adds some feedback so the pred knows they can't grow anymore.
if(B.owner.size_multiplier >= 2) // Adds some feedback so the pred knows they can't grow anymore.
to_chat(B.owner, span_notice("You feel you have grown as much as you can."))
L.resize(L.size_multiplier - 0.01) //Shrink by 1% per tick
if(L.size_multiplier <= B.shrink_grow_size) //CHOMPEdit - Adds some feedback so the pred knows their prey has stopped shrinking.
if(L.size_multiplier <= B.shrink_grow_size) // Adds some feedback so the pred knows their prey has stopped shrinking.
to_chat(B.owner, span_notice("You feel [L] get as small as you would like within your [lowertext(B.name)]."))
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
B.owner.update_fullness()
. = ..()
/datum/digest_mode/heal
@@ -201,15 +201,15 @@ GLOBAL_LIST_INIT(digest_modes, list())
if(O.brute_dam > 0 || O.burn_dam > 0) //Making sure healing continues until fixed.
O.heal_damage(0.5, 0.5, 0, 1) // Less effective healing as able to fix broken limbs
B.owner.adjust_nutrition(-5) // More costly for the pred, since metals and stuff
if(B.health_impacts_size) //CHOMPEdit - Health probably changed so...
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(B.health_impacts_size)
B.owner.update_fullness()
if(L.health < L.maxHealth)
L.adjustToxLoss(-2)
L.adjustOxyLoss(-2)
L.adjustCloneLoss(-1)
B.owner.adjust_nutrition(-1) // Normal cost per old functionality
if(B.health_impacts_size) //CHOMPEdit - Health probably changed so...
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(B.health_impacts_size)
B.owner.update_fullness()
if(B.owner.nutrition > 90 && (L.health < L.maxHealth) && !H.isSynthetic())
L.adjustBruteLoss(-2.5)
L.adjustFireLoss(-2.5)
@@ -217,8 +217,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.adjustOxyLoss(-5)
L.adjustCloneLoss(-1.25)
B.owner.adjust_nutrition(-2)
if(B.health_impacts_size) //CHOMPEdit - Health probably changed so...
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(B.health_impacts_size)
B.owner.update_fullness()
if(L.nutrition <= 400)
L.adjust_nutrition(1)
else if(B.owner.nutrition > 90 && (L.nutrition <= 400))

View File

@@ -1,40 +1,48 @@
//CHOMPERemove. We got our own. We don't use this. Only here as a reminder on further PRs.
/*
//
// Belly Export Panel
//
/datum/vore_look/export_panel/proc/open_export_panel(mob/user)
tgui_interact(user)
/datum/vore_look/export_panel/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "VorePanelExport", "Vore Export Panel")
ui.open()
ui.set_autoupdate(FALSE)
/datum/vore_look/export_panel/tgui_fallback(payload)
if(..())
return TRUE
//var/mob/living/host = usr
//host.vorebelly_printout(TRUE)
/datum/vore_look/export_panel/tgui_act(action, params)
if(..())
return TRUE
/datum/vore_look/export_panel/tgui_data(mob/user)
var/list/data = list()
var/mob/living/host = user
data["db_version"] = "0.1"
data["db_repo"] = "vorestation"
data["db_repo"] = "chompstation" // CHOMPEdit
data["mob_name"] = host.real_name
for(var/belly in host.vore_organs)
if(isbelly(belly))
var/obj/belly/B = belly
var/belly_data = list()
// General Information
belly_data["name"] = B.name
belly_data["desc"] = B.desc
belly_data["absorbed_desc"] = B.absorbed_desc
belly_data["vore_verb"] = B.vore_verb
belly_data["release_verb"] = B.release_verb
// Controls
belly_data["mode"] = B.digest_mode
var/list/addons = list()
@@ -44,165 +52,235 @@
belly_data["addons"] = addons
belly_data["item_mode"] = B.item_digest_mode
belly_data["message_mode"] = B.message_mode
// Messages
belly_data["struggle_messages_outside"] = list()
for(var/msg in B.struggle_messages_outside)
belly_data["struggle_messages_outside"] += msg
belly_data["struggle_messages_inside"] = list()
for(var/msg in B.struggle_messages_inside)
belly_data["struggle_messages_inside"] += msg
belly_data["absorbed_struggle_messages_outside"] = list()
for(var/msg in B.absorbed_struggle_messages_outside)
belly_data["absorbed_struggle_messages_outside"] += msg
belly_data["absorbed_struggle_messages_inside"] = list()
for(var/msg in B.absorbed_struggle_messages_inside)
belly_data["absorbed_struggle_messages_inside"] += msg
belly_data["escape_attempt_messages_owner"] = list()
for(var/msg in B.escape_attempt_messages_owner)
belly_data["escape_attempt_messages_owner"] += msg
belly_data["escape_attempt_messages_prey"] = list()
for(var/msg in B.escape_attempt_messages_prey)
belly_data["escape_attempt_messages_prey"] += msg
belly_data["escape_messages_owner"] = list()
for(var/msg in B.escape_messages_owner)
belly_data["escape_messages_owner"] += msg
belly_data["escape_messages_prey"] = list()
for(var/msg in B.escape_messages_prey)
belly_data["escape_messages_prey"] += msg
belly_data["escape_messages_outside"] = list()
for(var/msg in B.escape_messages_outside)
belly_data["escape_messages_outside"] += msg
belly_data["escape_item_messages_owner"] = list()
for(var/msg in B.escape_item_messages_owner)
belly_data["escape_item_messages_owner"] += msg
belly_data["escape_item_messages_prey"] = list()
for(var/msg in B.escape_item_messages_prey)
belly_data["escape_item_messages_prey"] += msg
belly_data["escape_item_messages_outside"] = list()
for(var/msg in B.escape_item_messages_outside)
belly_data["escape_item_messages_outside"] += msg
belly_data["escape_fail_messages_owner"] = list()
for(var/msg in B.escape_fail_messages_owner)
belly_data["escape_fail_messages_owner"] += msg
belly_data["escape_fail_messages_prey"] = list()
for(var/msg in B.escape_fail_messages_prey)
belly_data["escape_fail_messages_prey"] += msg
belly_data["escape_attempt_absorbed_messages_owner"] = list()
for(var/msg in B.escape_attempt_absorbed_messages_owner)
belly_data["escape_attempt_absorbed_messages_owner"] += msg
belly_data["escape_attempt_absorbed_messages_prey"] = list()
for(var/msg in B.escape_attempt_absorbed_messages_prey)
belly_data["escape_attempt_absorbed_messages_prey"] += msg
belly_data["escape_absorbed_messages_owner"] = list()
for(var/msg in B.escape_absorbed_messages_owner)
belly_data["escape_absorbed_messages_owner"] += msg
belly_data["escape_absorbed_messages_prey"] = list()
for(var/msg in B.escape_absorbed_messages_prey)
belly_data["escape_absorbed_messages_prey"] += msg
belly_data["escape_absorbed_messages_outside"] = list()
for(var/msg in B.escape_absorbed_messages_outside)
belly_data["escape_absorbed_messages_outside"] += msg
belly_data["escape_fail_absorbed_messages_owner"] = list()
for(var/msg in B.escape_fail_absorbed_messages_owner)
belly_data["escape_fail_absorbed_messages_owner"] += msg
belly_data["escape_fail_absorbed_messages_prey"] = list()
for(var/msg in B.escape_fail_absorbed_messages_prey)
belly_data["escape_fail_absorbed_messages_prey"] += msg
belly_data["primary_transfer_messages_owner"] = list()
for(var/msg in B.primary_transfer_messages_owner)
belly_data["primary_transfer_messages_owner"] += msg
belly_data["primary_transfer_messages_prey"] = list()
for(var/msg in B.primary_transfer_messages_prey)
belly_data["primary_transfer_messages_prey"] += msg
belly_data["secondary_transfer_messages_owner"] = list()
for(var/msg in B.secondary_transfer_messages_owner)
belly_data["secondary_transfer_messages_owner"] += msg
belly_data["secondary_transfer_messages_prey"] = list()
for(var/msg in B.secondary_transfer_messages_prey)
belly_data["secondary_transfer_messages_prey"] += msg
// CHOMPEnable Start
belly_data["primary_autotransfer_messages_owner"] = list()
for(var/msg in B.primary_autotransfer_messages_owner)
belly_data["primary_autotransfer_messages_owner"] += msg
belly_data["primary_autotransfer_messages_prey"] = list()
for(var/msg in B.primary_autotransfer_messages_prey)
belly_data["primary_autotransfer_messages_prey"] += msg
belly_data["secondary_autotransfer_messages_owner"] = list()
for(var/msg in B.secondary_autotransfer_messages_owner)
belly_data["secondary_autotransfer_messages_owner"] += msg
belly_data["secondary_autotransfer_messages_prey"] = list()
for(var/msg in B.secondary_autotransfer_messages_prey)
belly_data["secondary_autotransfer_messages_prey"] += msg
// CHOMPEnable End
belly_data["digest_chance_messages_owner"] = list()
for(var/msg in B.digest_chance_messages_owner)
belly_data["digest_chance_messages_owner"] += msg
belly_data["digest_chance_messages_prey"] = list()
for(var/msg in B.digest_chance_messages_prey)
belly_data["digest_chance_messages_prey"] += msg
belly_data["absorb_chance_messages_owner"] = list()
for(var/msg in B.absorb_chance_messages_owner)
belly_data["absorb_chance_messages_owner"] += msg
belly_data["absorb_chance_messages_prey"] = list()
for(var/msg in B.absorb_chance_messages_prey)
belly_data["absorb_chance_messages_prey"] += msg
belly_data["digest_messages_owner"] = list()
for(var/msg in B.digest_messages_owner)
belly_data["digest_messages_owner"] += msg
belly_data["digest_messages_prey"] = list()
for(var/msg in B.digest_messages_prey)
belly_data["digest_messages_prey"] += msg
belly_data["absorb_messages_owner"] = list()
for(var/msg in B.absorb_messages_owner)
belly_data["absorb_messages_owner"] += msg
belly_data["absorb_messages_prey"] = list()
for(var/msg in B.absorb_messages_prey)
belly_data["absorb_messages_prey"] += msg
belly_data["unabsorb_messages_owner"] = list()
for(var/msg in B.unabsorb_messages_owner)
belly_data["unabsorb_messages_owner"] += msg
belly_data["unabsorb_messages_prey"] = list()
for(var/msg in B.unabsorb_messages_prey)
belly_data["unabsorb_messages_prey"] += msg
belly_data["examine_messages"] = list()
for(var/msg in B.examine_messages)
belly_data["examine_messages"] += msg
belly_data["examine_messages_absorbed"] = list()
for(var/msg in B.examine_messages_absorbed)
belly_data["examine_messages_absorbed"] += msg
//belly_data["emote_list"] = list()
//for(var/EL in B.emote_lists)
// for(var/msg in B.emote_lists[EL])
// msg_list += msg
//
// belly_data["emote_lists"] += list(EL, msg_list)
// I will use this first before the code above gets fixed
belly_data["emotes_digest"] = list()
for(var/msg in B.emote_lists[DM_DIGEST])
belly_data["emotes_digest"] += msg
belly_data["emotes_hold"] = list()
for(var/msg in B.emote_lists[DM_HOLD])
belly_data["emotes_hold"] += msg
belly_data["emotes_holdabsorbed"] = list()
for(var/msg in B.emote_lists[DM_HOLD_ABSORBED])
belly_data["emotes_holdabsorbed"] += msg
belly_data["emotes_absorb"] = list()
for(var/msg in B.emote_lists[DM_ABSORB])
belly_data["emotes_absorb"] += msg
belly_data["emotes_heal"] = list()
for(var/msg in B.emote_lists[DM_HEAL])
belly_data["emotes_heal"] += msg
belly_data["emotes_drain"] = list()
for(var/msg in B.emote_lists[DM_DRAIN])
belly_data["emotes_drain"] += msg
belly_data["emotes_steal"] = list()
for(var/msg in B.emote_lists[DM_SIZE_STEAL])
belly_data["emotes_steal"] += msg
belly_data["emotes_egg"] = list()
for(var/msg in B.emote_lists[DM_EGG])
belly_data["emotes_egg"] += msg
belly_data["emotes_shrink"] = list()
for(var/msg in B.emote_lists[DM_SHRINK])
belly_data["emotes_shrink"] += msg
belly_data["emotes_grow"] = list()
for(var/msg in B.emote_lists[DM_GROW])
belly_data["emotes_grow"] += msg
belly_data["emotes_unabsorb"] = list()
for(var/msg in B.emote_lists[DM_UNABSORB])
belly_data["emotes_unabsorb"] += msg
// Options
belly_data["digest_brute"] = B.digest_brute
belly_data["digest_burn"] = B.digest_burn
belly_data["digest_oxy"] = B.digest_oxy
belly_data["digest_tox"] = B.digest_tox
belly_data["digest_clone"] = B.digest_clone
belly_data["can_taste"] = B.can_taste
belly_data["is_feedable"] = B.is_feedable // CHOMPEnable
belly_data["contaminates"] = B.contaminates
belly_data["contamination_flavor"] = B.contamination_flavor
belly_data["contamination_color"] = B.contamination_color
@@ -213,27 +291,210 @@
belly_data["emote_active"] = B.emote_active
belly_data["emote_time"] = B.emote_time
belly_data["shrink_grow_size"] = B.shrink_grow_size
// CHOMPEnable Start
belly_data["vorespawn_blacklist"] = B.vorespawn_blacklist
belly_data["vorespawn_whitelist"] = B.vorespawn_whitelist
belly_data["vorespawn_absorbed"] = B.vorespawn_absorbed
// CHOMPEnable End
belly_data["egg_type"] = B.egg_type
// CHOMPEnable Start
belly_data["egg_name"] = B.egg_name
belly_data["egg_size"] = B.egg_size
// CHOMPEnable End
belly_data["selective_preference"] = B.selective_preference
// CHOMPEnable Start
belly_data["recycling"] = B.recycling
belly_data["storing_nutrition"] = B.storing_nutrition
belly_data["entrance_logs"] = B.entrance_logs
belly_data["item_digest_logs"] = B.item_digest_logs
belly_data["eating_privacy_local"] = B.eating_privacy_local
belly_data["private_struggle"] = B.private_struggle
// CHOMPEnable End
// Sounds
belly_data["is_wet"] = B.is_wet
belly_data["wet_loop"] = B.wet_loop
belly_data["fancy_vore"] = B.fancy_vore
belly_data["vore_sound"] = B.vore_sound
belly_data["release_sound"] = B.release_sound
// CHOMPEnable Start
belly_data["sound_volume"] = B.sound_volume
belly_data["noise_freq"] = B.noise_freq
// CHOMPEnable End
// Visuals
belly_data["affects_vore_sprites"] = B.affects_vore_sprites
var/list/sprite_flags = list()
for(var/flag_name in B.vore_sprite_flag_list)
if(B.vore_sprite_flags & B.vore_sprite_flag_list[flag_name])
sprite_flags.Add(flag_name)
belly_data["vore_sprite_flags"] = sprite_flags
belly_data["count_absorbed_prey_for_sprite"] = B.count_absorbed_prey_for_sprite
belly_data["absorbed_multiplier"] = B.absorbed_multiplier
belly_data["count_liquid_for_sprite"] = B.count_liquid_for_sprite // CHOMPEnable
belly_data["liquid_multiplier"] = B.liquid_multiplier // CHOMPEnable
belly_data["count_items_for_sprite"] = B.count_items_for_sprite
belly_data["item_multiplier"] = B.item_multiplier
belly_data["health_impacts_size"] = B.health_impacts_size
belly_data["resist_triggers_animation"] = B.resist_triggers_animation
belly_data["size_factor_for_sprite"] = B.size_factor_for_sprite
belly_data["belly_sprite_to_affect"] = B.belly_sprite_to_affect
belly_data["undergarment_chosen"] = B.undergarment_chosen
belly_data["undergarment_if_none"] = B.undergarment_if_none
belly_data["undergarment_color"] = B.undergarment_color
//belly_data["tail_to_change_to"] = B.tail_to_change_to
//belly_data["tail_colouration"] = B.tail_colouration
//belly_data["tail_extra_overlay"] = B.tail_extra_overlay
//belly_data["tail_extra_overlay2"] = B.tail_extra_overlay2
// Visuals (Belly Fullscreens Preview and Coloring)
// CHOMPEnable Start
belly_data["belly_fullscreen_color"] = B.belly_fullscreen_color
belly_data["belly_fullscreen_color2"] = B.belly_fullscreen_color2
belly_data["belly_fullscreen_color3"] = B.belly_fullscreen_color3
belly_data["belly_fullscreen_color4"] = B.belly_fullscreen_color4
belly_data["belly_fullscreen_alpha"] = B.belly_fullscreen_alpha
belly_data["colorization_enabled"] = B.colorization_enabled
// CHOMPEnable End
// Visuals (Vore FX)
belly_data["disable_hud"] = B.disable_hud
belly_data["belly_fullscreen"] = B.belly_fullscreen // CHOMPEnable
// Interactions
belly_data["escapable"] = B.escapable
belly_data["escapechance"] = B.escapechance
belly_data["escapechance_absorbed"] = B.escapechance_absorbed
belly_data["escapetime"] = B.escapetime
belly_data["escapetime"] = B.escapetime/10
belly_data["belchchance"] = B.belchchance // CHOMPEnable
belly_data["transferchance"] = B.transferchance
belly_data["transferlocation"] = B.transferlocation
belly_data["transferchance_secondary"] = B.transferchance_secondary
belly_data["transferlocation_secondary"] = B.transferlocation_secondary
belly_data["absorbchance"] = B.absorbchance
belly_data["digestchance"] = B.digestchance
// Interactions (Auto-Transfer)
// CHOMPEnable Start
belly_data["autotransferchance"] = B.autotransferchance
belly_data["autotransferwait"] = B.autotransferwait/10
belly_data["autotransferlocation"] = B.autotransferlocation
belly_data["autotransferextralocation"] = B.autotransferextralocation
belly_data["autotransfer_enabled"] = B.autotransfer_enabled
belly_data["autotransferchance_secondary"] = B.autotransferchance_secondary
belly_data["autotransferlocation_secondary"] = B.autotransferlocation_secondary
belly_data["autotransferextralocation_secondary"] = B.autotransferextralocation_secondary
belly_data["autotransfer_min_amount"] = B.autotransfer_min_amount
belly_data["autotransfer_max_amount"] = B.autotransfer_max_amount
var/list/at_whitelist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_whitelist & B.autotransfer_flags_list[flag_name])
at_whitelist.Add(flag_name)
belly_data["autotransfer_whitelist"] = at_whitelist
var/list/at_blacklist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_blacklist & B.autotransfer_flags_list[flag_name])
at_blacklist.Add(flag_name)
belly_data["autotransfer_blacklist"] = at_blacklist
var/list/at_whitelist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_whitelist_items & B.autotransfer_flags_list_items[flag_name])
at_whitelist_items.Add(flag_name)
belly_data["autotransfer_whitelist_items"] = at_whitelist_items
var/list/at_blacklist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_blacklist_items & B.autotransfer_flags_list_items[flag_name])
at_blacklist_items.Add(flag_name)
belly_data["autotransfer_blacklist_items"] = at_blacklist_items
var/list/at_secondary_whitelist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_secondary_whitelist & B.autotransfer_flags_list[flag_name])
at_secondary_whitelist.Add(flag_name)
belly_data["autotransfer_secondary_whitelist"] = at_secondary_whitelist
var/list/at_secondary_blacklist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_secondary_blacklist & B.autotransfer_flags_list[flag_name])
at_secondary_blacklist.Add(flag_name)
belly_data["autotransfer_secondary_blacklist"] = at_secondary_blacklist
var/list/at_secondary_whitelist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_secondary_whitelist_items & B.autotransfer_flags_list_items[flag_name])
at_secondary_whitelist_items.Add(flag_name)
belly_data["autotransfer_secondary_whitelist_items"] = at_secondary_whitelist_items
var/list/at_secondary_blacklist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_secondary_blacklist_items & B.autotransfer_flags_list_items[flag_name])
at_secondary_blacklist_items.Add(flag_name)
belly_data["autotransfer_secondary_blacklist_items"] = at_secondary_blacklist_items
// Liquid Options
belly_data["show_liquids"] = B.show_liquids
belly_data["reagentbellymode"] = B.reagentbellymode
belly_data["reagent_chosen"] = B.reagent_chosen
belly_data["reagent_name"] = B.reagent_name
belly_data["reagent_transfer_verb"] = B.reagent_transfer_verb
belly_data["gen_time_display"] = B.gen_time_display
belly_data["custom_max_volume"] = B.custom_max_volume
belly_data["vorefootsteps_sounds"] = B.vorefootsteps_sounds
belly_data["liquid_overlay"] = B.liquid_overlay
belly_data["max_liquid_level"] = B.max_liquid_level
belly_data["reagent_toches"] = B.reagent_touches
belly_data["mush_overlay"] = B.mush_overlay
belly_data["mush_color"] = B.mush_color
belly_data["mush_alpha"] = B.mush_alpha
belly_data["max_mush"] = B.max_mush
belly_data["min_mush"] = B.min_mush
belly_data["item_mush_val"] = B.item_mush_val
belly_data["custom_reagentcolor"] = B.custom_reagentcolor
belly_data["custom_reagentalpha"] = B.custom_reagentalpha
belly_data["metabolism_overlay"] = B.metabolism_overlay
belly_data["metabolism_mush_ratio"] = B.metabolism_mush_ratio
belly_data["max_ingested"] = B.max_ingested
belly_data["custom_ingested_color"] = B.custom_ingested_color
belly_data["custom_ingested_alpha"] = B.custom_ingested_alpha
var/list/reagent_flags = list()
for(var/flag_name in B.reagent_mode_flag_list)
if(B.reagent_mode_flags & B.reagent_mode_flag_list[flag_name])
reagent_flags.Add(flag_name)
belly_data["reagent_mode_flag_list"] = reagent_flags
// CHOMPEnable End
data["bellies"] += list(belly_data)
// Liquid Messages
// CHOMPEnable Start
belly_data["show_fullness_messages"] = B.show_fullness_messages
belly_data["liquid_fullness1_messages"] = B.liquid_fullness1_messages
belly_data["liquid_fullness2_messages"] = B.liquid_fullness2_messages
belly_data["liquid_fullness3_messages"] = B.liquid_fullness3_messages
belly_data["liquid_fullness4_messages"] = B.liquid_fullness4_messages
belly_data["liquid_fullness5_messages"] = B.liquid_fullness5_messages
belly_data["fullness1_messages"] = list()
for(var/msg in B.fullness1_messages)
belly_data["fullness1_messages"] += msg
belly_data["fullness2_messages"] = list()
for(var/msg in B.fullness2_messages)
belly_data["fullness2_messages"] += msg
belly_data["fullness3_messages"] = list()
for(var/msg in B.fullness3_messages)
belly_data["fullness3_messages"] += msg
belly_data["fullness4_messages"] = list()
for(var/msg in B.fullness4_messages)
belly_data["fullness4_messages"] += msg
belly_data["fullness5_messages"] = list()
for(var/msg in B.fullness5_messages)
belly_data["fullness5_messages"] += msg
// CHOMPEnable End
return data
*/

View File

@@ -0,0 +1,36 @@
/mob/proc/update_fullness(var/returning = FALSE)
if(!returning)
if(updating_fullness)
return
updating_fullness = TRUE
spawn(2)
updating_fullness = FALSE
src.update_fullness(TRUE)
return
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)
if(DM_FLAG_VORESPRITE_BELLY & B.vore_sprite_flags)
new_fullness[B.belly_sprite_to_affect] += B.GetFullnessFromBelly()
if(istype(src, /mob/living/carbon/human) && DM_FLAG_VORESPRITE_ARTICLE & B.vore_sprite_flags)
if(!new_fullness[B.undergarment_chosen])
new_fullness[B.undergarment_chosen] = 1
new_fullness[B.undergarment_chosen] += B.GetFullnessFromBelly()
new_fullness[B.undergarment_chosen + "-ifnone"] = B.undergarment_if_none
new_fullness[B.undergarment_chosen + "-color"] = B.undergarment_color
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] *= belly_size_multiplier // Some mobs are small even at 100% size. Let's account for that.
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]
if(vore_fullness < 0)
vore_fullness = 0
vore_fullness = min(vore_capacity, vore_fullness)
updating_fullness = FALSE
return new_fullness
/mob/living/proc/vs_animate(var/belly_to_animate)
return

View File

@@ -12,48 +12,9 @@
var/passtable_reset // For crawling
var/passtable_crawl_checked = FALSE
// CHOMP vore icons refactor (Now on living)
var/vore_icons = 0 // Bitfield for which fields we have vore icons for.
var/vore_eyes = FALSE // For mobs with fullness specific eye overlays.
/mob/living/proc/handle_special_unlocks()
return
// Update fullness based on size & quantity of belly contents
/mob/proc/update_fullness(var/returning = FALSE)
if(!returning)
if(updating_fullness)
return
updating_fullness = TRUE
spawn(2)
updating_fullness = FALSE
src.update_fullness(TRUE)
return
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)
if(DM_FLAG_VORESPRITE_BELLY & B.vore_sprite_flags)
new_fullness[B.belly_sprite_to_affect] += B.GetFullnessFromBelly()
if(istype(src, /mob/living/carbon/human) && DM_FLAG_VORESPRITE_ARTICLE & B.vore_sprite_flags)
if(!new_fullness[B.undergarment_chosen])
new_fullness[B.undergarment_chosen] = 1
new_fullness[B.undergarment_chosen] += B.GetFullnessFromBelly()
new_fullness[B.undergarment_chosen + "-ifnone"] = B.undergarment_if_none
new_fullness[B.undergarment_chosen + "-color"] = B.undergarment_color
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] *= belly_size_multiplier // Some mobs are small even at 100% size. Let's account for that.
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]
if(vore_fullness < 0)
vore_fullness = 0
vore_fullness = min(vore_capacity, vore_fullness)
updating_fullness = FALSE
return new_fullness
/* This is an ELEMENT now
/mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
if(vore_footstep_volume_cooldown++ >= 5) //updating the 'dominating' belly, the one that has most liquid and is loudest.

View File

@@ -351,7 +351,7 @@
nutrition_messages = P.nutrition_messages
weight_message_visible = P.weight_message_visible
weight_messages = P.weight_messages
vore_sprite_color = P.vore_sprite_color //CHOMPEdit
vore_sprite_color = P.vore_sprite_color
allow_mind_transfer = P.allow_mind_transfer
//CHOMP stuff

View File

@@ -16,17 +16,4 @@
var/belly_rub_target = null
var/soulcatcher_pref_flags = 0 //Default disabled
// CHOMP vore icons refactor (Now on mob)
var/vore_capacity = 0 // Maximum capacity, -1 for unlimited
var/vore_capacity_ex = list("stomach" = 0) //expanded list of capacities
var/vore_fullness = 0 // How "full" the belly is (controls icons)
var/list/vore_fullness_ex = list("stomach" = 0) // Expanded list of fullness
var/belly_size_multiplier = 1
var/vore_sprite_multiply = list("stomach" = FALSE, "taur belly" = FALSE)
var/vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000")
var/list/vore_icon_bellies = list("stomach")
var/updating_fullness = FALSE
var/obj/belly/previewing_belly
var/obj/soulgem/soulgem

View File

@@ -53,3 +53,18 @@
"They have a very fat frame with a bulging potbelly, squishy rolls of pudge, very wide hips, and plump set of jiggling thighs.",
"They are incredibly obese. Their massive potbelly sags over their waistline while their fat ass would probably require two chairs to sit down comfortably!",
"They are so morbidly obese, you wonder how they can even stand, let alone waddle around the station. They can't get any fatter without being immobilized.")
var/vore_capacity = 0 // Maximum capacity, -1 for unlimited
var/vore_capacity_ex = list("stomach" = 0) //expanded list of capacities
var/vore_fullness = 0 // How "full" the belly is (controls icons)
var/list/vore_fullness_ex = list("stomach" = 0) // Expanded list of fullness
var/belly_size_multiplier = 1
var/vore_sprite_multiply = list("stomach" = FALSE, "taur belly" = FALSE)
var/vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000")
var/list/vore_icon_bellies = list("stomach")
var/updating_fullness = FALSE
var/obj/belly/previewing_belly
var/vore_icons = 0 // Bitfield for which fields we have vore icons for.
var/vore_eyes = FALSE // For mobs with fullness specific eye overlays.

View File

@@ -3,7 +3,7 @@
var/swallowTime = (3 SECONDS) //How long it takes to eat its prey in 1/10 of a second. The default is 3 seconds.
var/list/prey_excludes = null //For excluding people from being eaten.
/mob/living/simple_mob/insidePanel() //CHOMPedit: On-demand belly loading.
/mob/living/simple_mob/insidePanel() //On-demand belly loading.
if(vore_active && !voremob_loaded)
voremob_loaded = TRUE
init_vore()
@@ -17,9 +17,10 @@
set category = "Abilities.Vore" // Moving this to abilities from IC as it's more fitting there
set desc = "Since you can't grab, you get a verb!"
if(vore_active && !voremob_loaded) //CHOMPedit: On-demand belly loading.
if(vore_active && !voremob_loaded) // On-demand belly loading.
voremob_loaded = TRUE
init_vore()
if(stat != CONSCIOUS)
return
// Verbs are horrifying. They don't call overrides. So we're stuck with this.
@@ -33,7 +34,6 @@
feed_grabbed_to_self(src,T)
//update_icon() CHOMPEdit
//CHOMPedit: On-demand belly loading.
/mob/living/simple_mob/perform_the_nom(mob/living/user, mob/living/prey, mob/living/pred, obj/belly/belly, delay)
if(vore_active && !voremob_loaded && pred == src) //Only init your own bellies.
voremob_loaded = TRUE

View File

@@ -69,6 +69,7 @@ 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/vore_sprite_multiply = list("stomach" = FALSE, "taur belly" = FALSE)
var/allow_mind_transfer = FALSE
//CHOMP stuff
@@ -81,7 +82,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/latejoin_prey = FALSE
var/autotransferable = TRUE
var/strip_pref = FALSE
var/vore_sprite_multiply = list("stomach" = FALSE, "taur belly" = FALSE)
var/no_latejoin_vore_warning = FALSE // Only load, when... no_latejoin_vore_warning_persists
var/no_latejoin_prey_warning = FALSE // Only load, when... no_latejoin_vore_warning_persists
var/no_latejoin_vore_warning_time = 15 // Only load, when... no_latejoin_vore_warning_persists
@@ -142,7 +142,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//
/proc/is_vore_predator(mob/living/O)
if(istype(O,/mob/living))
if(istype(O,/mob/living/simple_mob)) //CHOMPEdit: On-demand belly loading.
if(istype(O,/mob/living/simple_mob)) //On-demand belly loading.
var/mob/living/simple_mob/SM = O
if(SM.vore_active && !SM.voremob_loaded)
SM.voremob_loaded = TRUE

View File

@@ -277,12 +277,15 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"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" = LAZYLEN(host.vore_icon_bellies) >= 1 ? TRUE : FALSE, //CHOMPEdit
"belly_sprite_option_shown" = LAZYLEN(host.vore_icon_bellies) >= 1 ? TRUE : FALSE,
"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,
"undergarment_chosen" = selected.undergarment_chosen,
"undergarment_if_none" = selected.undergarment_if_none || "None",
"undergarment_color" = selected.undergarment_color,
//CHOMP add: vore sprite options and additional stuff
"belly_fullscreen_color" = selected.belly_fullscreen_color,
//"belly_fullscreen_color_secondary" = selected.belly_fullscreen_color_secondary, // Chomp REMOVE - use our solution, not upstream's
@@ -313,9 +316,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"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)),
"sound_volume" = selected.sound_volume,
"undergarment_chosen" = selected.undergarment_chosen,
"undergarment_if_none" = selected.undergarment_if_none || "None",
"undergarment_color" = selected.undergarment_color,
"noise_freq" = selected.noise_freq,
"item_digest_logs" = selected.item_digest_logs,
"private_struggle" = selected.private_struggle,
@@ -1004,7 +1004,6 @@ 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
//CHOMPEdit start - vore sprites color
if("set_vs_color")
var/belly_choice = tgui_input_list(ui.user, "Which vore sprite are you going to edit the color of?", "Vore Sprite Color", host.vore_icon_bellies)
if(belly_choice)
@@ -1019,6 +1018,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.update_icons_body()
unsaved_changes = TRUE
return TRUE
//CHOMPAdd start - vore sprites color
if("set_belly_rub")
host.belly_rub_target = tgui_input_list(ui.user, "Which belly would you prefer to be rubbed?","Select Target", host.vore_organs)
if(!(host.belly_rub_target))
@@ -1237,7 +1237,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
unsaved_changes = TRUE
host.soulgem.set_custom_message(message, "delete")
return TRUE
//CHOMPEdit end
//CHOMPAdd end
/datum/vore_look/proc/pick_from_inside(mob/user, params)
var/atom/movable/target = locate(params["pick"])
@@ -2249,11 +2249,9 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
list("Sleeper", "Vorebelly", "Both"))
if(belly_choice == null)
return FALSE
//CHOMPEdit Start, changed to sync the setting among all sleepers for multibelly support
for (var/belly in host.vore_organs)
var/obj/belly/B = belly
B.silicon_belly_overlay_preference = belly_choice
//CHOMPEdit End
host.update_icon()
. = TRUE
if("b_belly_mob_mult")
@@ -2790,34 +2788,55 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
else
host.vore_selected.belly_sprite_to_affect = belly_choice
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_affects_vore_sprites")
host.vore_selected.affects_vore_sprites = !host.vore_selected.affects_vore_sprites
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_count_absorbed_prey_for_sprites")
host.vore_selected.count_absorbed_prey_for_sprite = !host.vore_selected.count_absorbed_prey_for_sprite
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_absorbed_multiplier")
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))
host.vore_selected.absorbed_multiplier = CLAMP(absorbed_multiplier_input, 0.1, 3)
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_count_items_for_sprites")
host.vore_selected.count_items_for_sprite = !host.vore_selected.count_items_for_sprite
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_item_multiplier")
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))
host.vore_selected.item_multiplier = CLAMP(item_multiplier_input, 0.1, 10)
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_health_impacts_size")
host.vore_selected.health_impacts_size = !host.vore_selected.health_impacts_size
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_resist_animation")
@@ -2827,10 +2846,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
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))
host.vore_selected.size_factor_for_sprite = CLAMP(size_factor_input, 0.1, 3)
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
//CHOMPEdit End
if("b_vore_sprite_flags") //CHOMP Addition
if("b_vore_sprite_flags")
var/list/menu_list = host.vore_selected.vore_sprite_flag_list.Copy()
var/toggle_vs_flag = tgui_input_list(user, "Toggle Vore Sprite Modes", "Mode Choice", menu_list)
if(!toggle_vs_flag)
@@ -2839,15 +2860,21 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
. = TRUE
if("b_count_liquid_for_sprites") //CHOMP Addition
host.vore_selected.count_liquid_for_sprite = !host.vore_selected.count_liquid_for_sprite
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_liquid_multiplier") //CHOMP Addition
var/liquid_multiplier_input = input(user, "Set the impact amount of liquid reagents will have on your vore sprite. 1 means a belly with 100 reagents of fluid will count as 1 normal sized prey-thing's worth, 0.5 means liquid counts half as much, 2 means liquid counts double. (Range from 0.1 - 10)", "Liquid Multiplier") as num|null
if(!isnull(liquid_multiplier_input))
host.vore_selected.liquid_multiplier = CLAMP(liquid_multiplier_input, 0.1, 10)
if(isanimal(host))
host.update_icon()
else
host.update_fullness()
. = TRUE
if("b_undergarment_choice") //CHOMP Addition
if("b_undergarment_choice")
var/datum/category_group/underwear/undergarment_choice = tgui_input_list(user, "Which undergarment do you want to enable when your [lowertext(host.vore_selected.name)] is filled?","Select Undergarment Class", global_underwear.categories)
if(!undergarment_choice) //They cancelled, no changes
return FALSE
@@ -2855,7 +2882,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.vore_selected.undergarment_chosen = undergarment_choice.name
host.update_fullness()
. = TRUE
if("b_undergarment_if_none") //CHOMP Addition
if("b_undergarment_if_none")
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[host.vore_selected.undergarment_chosen]
var/datum/category_item/underwear/selected_underwear = tgui_input_list(user, "If no undergarment is equipped, which undergarment style do you want to use?","Select Underwear Style",UWC.items,host.vore_selected.undergarment_if_none)
if(!selected_underwear) //They cancelled, no changes
@@ -2864,7 +2891,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.vore_selected.undergarment_if_none = selected_underwear
host.update_fullness()
host.updateVRPanel()
if("b_undergarment_color") //CHOMP Addition
if("b_undergarment_color")
var/newcolor = input(user, "Choose a color.", "", host.vore_selected.undergarment_color) as color|null
if(newcolor)
host.vore_selected.undergarment_color = newcolor
@@ -2892,7 +2919,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(newcolor)
host.vore_selected.tail_extra_overlay2 = newcolor
. = TRUE
if(.)
unsaved_changes = TRUE

View File

@@ -1,42 +1,3 @@
/mob/living/carbon/human/update_fullness(var/returning = FALSE)
if(!returning)
if(updating_fullness)
return
var/previous_stomach_fullness = vore_fullness_ex["stomach"]
var/previous_taur_fullness = vore_fullness_ex["taur belly"]
//update_vore_tail_sprite()
//update_vore_belly_sprite()
var/list/new_fullness = ..(TRUE)
. = new_fullness
for(var/datum/category_group/underwear/undergarment_class in global_underwear.categories)
if(!new_fullness[undergarment_class.name])
continue
new_fullness[undergarment_class.name] = -1 * round(-1 * new_fullness[undergarment_class.name]) // Doing a ceiling the only way BYOND knows how I guess
new_fullness[undergarment_class.name] = (min(2, new_fullness[undergarment_class.name]) - 2) * -1 //Complicated stuff to get it correctly aligned with the expected TRUE/FALSE
var/datum/category_item/underwear/UWI = all_underwear[undergarment_class.name]
if(!UWI || UWI.name == "None")
//Welllll okay then. If the former then something went wrong, if None was selected then...
if(istype(undergarment_class.items_by_name[new_fullness[undergarment_class.name + "-ifnone"]], /datum/category_item/underwear))
UWI = undergarment_class.items_by_name[new_fullness[undergarment_class.name + "-ifnone"]]
all_underwear[undergarment_class.name] = UWI
if(UWI && UWI.has_color && new_fullness[undergarment_class.name + "-color"])
all_underwear_metadata[undergarment_class.name]["[gear_tweak_free_color_choice]"] = new_fullness[undergarment_class.name + "-color"]
if(UWI && UWI.name != "None" && hide_underwear[undergarment_class.name] != new_fullness[undergarment_class.name])
hide_underwear[undergarment_class.name] = new_fullness[undergarment_class.name]
update_underwear(1)
if(vore_fullness_ex["stomach"] != previous_stomach_fullness)
update_vore_belly_sprite()
if(vore_fullness_ex["taur belly"] != previous_taur_fullness)
update_vore_tail_sprite()
/mob/living/carbon/human/vs_animate(var/belly_to_animate)
if(belly_to_animate == "stomach")
vore_belly_animation()
else if(belly_to_animate == "taur belly")
vore_tail_animation()
else
return
/mob/living/carbon/human/verb/hide_headset()
set name = "Show/Hide Headset"
set category = "IC.Settings"

View File

@@ -44,9 +44,6 @@
QDEL_NULL(firesoundloop)
// QDEL_NULL(stunnedloop)
/mob/living/proc/vs_animate(var/belly_to_animate)
return
/*
Maybe later, gotta figure out a way to click yourself when in a locker etc.

View File

@@ -2,10 +2,6 @@
var/sleeper_resting = FALSE //Enable resting belly sprites for dogborgs that have the sprites
var/datum/matter_synth/water_res = null //Enable water for lick clean
//Multibelly support. We do not want to apply it to any module not supporting it in it's sprites
var/list/vore_light_states = list() //Robot exclusive
vore_capacity_ex = list()
vore_fullness_ex = list()
vore_icon_bellies = list()
/mob/living/silicon/robot/verb/purge_nutrition()
set name = "Purge Nutrition"
@@ -34,51 +30,6 @@
else
to_chat(src, span_filter_notice("Insufficient water reserves."))
/mob/living/silicon/robot/proc/update_multibelly()
vore_icon_bellies = list() //Clear any belly options that may not exist now
vore_capacity_ex = list()
vore_fullness_ex = list()
if(sprite_datum.belly_capacity_list.len)
for(var/belly in sprite_datum.belly_capacity_list) //vore icons list only contains a list of names with no associated data
vore_capacity_ex[belly] = sprite_datum.belly_capacity_list[belly] //I dont know why but this wasnt working when I just
vore_fullness_ex[belly] = 0 //set the lists equal to the old lists
vore_icon_bellies += belly
for(var/belly in sprite_datum.belly_light_list)
vore_light_states[belly] = 0
else if(sprite_datum.has_vore_belly_sprites)
vore_capacity_ex = list("sleeper" = 1)
vore_fullness_ex = list("sleeper" = 0)
vore_icon_bellies = list("sleeper")
if(sprite_datum.has_sleeper_light_indicator)
vore_light_states = list("sleeepr" = 0)
sprite_datum.belly_light_list = list("sleeper")
update_fullness() //Set how full the newly defined bellies are, if they're already full
/mob/living/silicon/robot/proc/reset_belly_lights(var/b_class)
if(sprite_datum.belly_light_list.len && sprite_datum.belly_light_list.Find(b_class))
vore_light_states[b_class] = 0
/mob/living/silicon/robot/proc/update_belly_lights(var/b_class)
if(sprite_datum.belly_light_list.len && sprite_datum.belly_light_list.Find(b_class))
vore_light_states[b_class] = 2
for (var/belly in vore_organs)
var/obj/belly/B = belly
if(b_class == "sleeper" && (B.silicon_belly_overlay_preference == "Vorebelly" || B.silicon_belly_overlay_preference == "Both") || b_class != "sleeper")
if(B.digest_mode != DM_DIGEST || B.belly_sprite_to_affect != b_class || !B.contents.len)
continue
for(var/contents in B.contents)
if(istype(contents, /mob/living))
vore_light_states[b_class] = 1
return
/mob/living/silicon/robot/module_reset()
..()
// We only use the chomp system when the sprite supports it. Else we go through the fallback
vore_capacity_ex = list()
vore_fullness_ex = list()
vore_light_states = list()
/obj/machinery/door/airlock/BorgCtrlShiftClick(var/mob/living/silicon/robot/user)
if(check_access(user.idcard))
..()

View File

@@ -1,3 +0,0 @@
/datum/robot_sprite
var/list/belly_light_list = list() // Support multiple sleepers with r/g light "sleeper"
var/list/belly_capacity_list = list() //Support multiple bellies with multiple sizes, default: "sleeper" = 1

View File

@@ -4,9 +4,6 @@
var/speech_chance = 75 //mobs can be a bit more emotive than carbon/humans
var/speech_sound_enabled = TRUE
//vars for vore_icons toggle control
var/vore_icons_cache = null // null by default. Going from ON to OFF should store vore_icons val here, OFF to ON reset as null
//spitting projectiles
var/spitting = 0
var/spit_projectile = null // what our spit projectile is. Can be anything
@@ -19,25 +16,6 @@
Spit(A)
. = ..()
/mob/living/simple_mob/verb/toggle_vore_icons()
set name = "Toggle Vore Sprite"
set desc = "Toggle visibility of changed mob sprite when you have eaten other things."
set category = "Abilities.Vore"
if(!vore_icons && !vore_icons_cache)
to_chat(src,span_warning("This simplemob has no vore sprite."))
else if(isnull(vore_icons_cache))
vore_icons_cache = vore_icons
vore_icons = 0
to_chat(src,span_warning("Vore sprite disabled."))
else
vore_icons = vore_icons_cache
vore_icons_cache = null
to_chat(src,span_warning("Vore sprite enabled."))
update_icon()
/mob/living/simple_mob/verb/toggle_speech_sounds()
set name = "Toggle Species Speech Sounds"
set desc = "Toggle if your species defined speech sound has a chance of playing on a Say"

View File

@@ -1,484 +0,0 @@
//
// Belly Export Panel
//
/datum/vore_look/export_panel/proc/open_export_panel(mob/user)
tgui_interact(user)
/datum/vore_look/export_panel/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "VorePanelExport", "Vore Export Panel")
ui.open()
ui.set_autoupdate(FALSE)
/datum/vore_look/export_panel/tgui_fallback(payload)
if(..())
return TRUE
//var/mob/living/host = usr
//host.vorebelly_printout(TRUE)
/datum/vore_look/export_panel/tgui_act(action, params)
if(..())
return TRUE
/datum/vore_look/export_panel/tgui_data(mob/user)
var/list/data = list()
var/mob/living/host = user
data["db_version"] = "0.1"
data["db_repo"] = "chompstation"
data["mob_name"] = host.real_name
for(var/belly in host.vore_organs)
if(isbelly(belly))
var/obj/belly/B = belly
var/belly_data = list()
// General Information
belly_data["name"] = B.name
belly_data["desc"] = B.desc
belly_data["absorbed_desc"] = B.absorbed_desc
belly_data["vore_verb"] = B.vore_verb
belly_data["release_verb"] = B.release_verb
// Controls
belly_data["mode"] = B.digest_mode
var/list/addons = list()
for(var/flag_name in B.mode_flag_list)
if(B.mode_flags & B.mode_flag_list[flag_name])
addons.Add(flag_name)
belly_data["addons"] = addons
belly_data["item_mode"] = B.item_digest_mode
belly_data["message_mode"] = B.message_mode
// Messages
belly_data["struggle_messages_outside"] = list()
for(var/msg in B.struggle_messages_outside)
belly_data["struggle_messages_outside"] += msg
belly_data["struggle_messages_inside"] = list()
for(var/msg in B.struggle_messages_inside)
belly_data["struggle_messages_inside"] += msg
belly_data["absorbed_struggle_messages_outside"] = list()
for(var/msg in B.absorbed_struggle_messages_outside)
belly_data["absorbed_struggle_messages_outside"] += msg
belly_data["absorbed_struggle_messages_inside"] = list()
for(var/msg in B.absorbed_struggle_messages_inside)
belly_data["absorbed_struggle_messages_inside"] += msg
belly_data["escape_attempt_messages_owner"] = list()
for(var/msg in B.escape_attempt_messages_owner)
belly_data["escape_attempt_messages_owner"] += msg
belly_data["escape_attempt_messages_prey"] = list()
for(var/msg in B.escape_attempt_messages_prey)
belly_data["escape_attempt_messages_prey"] += msg
belly_data["escape_messages_owner"] = list()
for(var/msg in B.escape_messages_owner)
belly_data["escape_messages_owner"] += msg
belly_data["escape_messages_prey"] = list()
for(var/msg in B.escape_messages_prey)
belly_data["escape_messages_prey"] += msg
belly_data["escape_messages_outside"] = list()
for(var/msg in B.escape_messages_outside)
belly_data["escape_messages_outside"] += msg
belly_data["escape_item_messages_owner"] = list()
for(var/msg in B.escape_item_messages_owner)
belly_data["escape_item_messages_owner"] += msg
belly_data["escape_item_messages_prey"] = list()
for(var/msg in B.escape_item_messages_prey)
belly_data["escape_item_messages_prey"] += msg
belly_data["escape_item_messages_outside"] = list()
for(var/msg in B.escape_item_messages_outside)
belly_data["escape_item_messages_outside"] += msg
belly_data["escape_fail_messages_owner"] = list()
for(var/msg in B.escape_fail_messages_owner)
belly_data["escape_fail_messages_owner"] += msg
belly_data["escape_fail_messages_prey"] = list()
for(var/msg in B.escape_fail_messages_prey)
belly_data["escape_fail_messages_prey"] += msg
belly_data["escape_attempt_absorbed_messages_owner"] = list()
for(var/msg in B.escape_attempt_absorbed_messages_owner)
belly_data["escape_attempt_absorbed_messages_owner"] += msg
belly_data["escape_attempt_absorbed_messages_prey"] = list()
for(var/msg in B.escape_attempt_absorbed_messages_prey)
belly_data["escape_attempt_absorbed_messages_prey"] += msg
belly_data["escape_absorbed_messages_owner"] = list()
for(var/msg in B.escape_absorbed_messages_owner)
belly_data["escape_absorbed_messages_owner"] += msg
belly_data["escape_absorbed_messages_prey"] = list()
for(var/msg in B.escape_absorbed_messages_prey)
belly_data["escape_absorbed_messages_prey"] += msg
belly_data["escape_absorbed_messages_outside"] = list()
for(var/msg in B.escape_absorbed_messages_outside)
belly_data["escape_absorbed_messages_outside"] += msg
belly_data["escape_fail_absorbed_messages_owner"] = list()
for(var/msg in B.escape_fail_absorbed_messages_owner)
belly_data["escape_fail_absorbed_messages_owner"] += msg
belly_data["escape_fail_absorbed_messages_prey"] = list()
for(var/msg in B.escape_fail_absorbed_messages_prey)
belly_data["escape_fail_absorbed_messages_prey"] += msg
belly_data["primary_transfer_messages_owner"] = list()
for(var/msg in B.primary_transfer_messages_owner)
belly_data["primary_transfer_messages_owner"] += msg
belly_data["primary_transfer_messages_prey"] = list()
for(var/msg in B.primary_transfer_messages_prey)
belly_data["primary_transfer_messages_prey"] += msg
belly_data["secondary_transfer_messages_owner"] = list()
for(var/msg in B.secondary_transfer_messages_owner)
belly_data["secondary_transfer_messages_owner"] += msg
belly_data["secondary_transfer_messages_prey"] = list()
for(var/msg in B.secondary_transfer_messages_prey)
belly_data["secondary_transfer_messages_prey"] += msg
belly_data["primary_autotransfer_messages_owner"] = list()
for(var/msg in B.primary_autotransfer_messages_owner)
belly_data["primary_autotransfer_messages_owner"] += msg
belly_data["primary_autotransfer_messages_prey"] = list()
for(var/msg in B.primary_autotransfer_messages_prey)
belly_data["primary_autotransfer_messages_prey"] += msg
belly_data["secondary_autotransfer_messages_owner"] = list()
for(var/msg in B.secondary_autotransfer_messages_owner)
belly_data["secondary_autotransfer_messages_owner"] += msg
belly_data["secondary_autotransfer_messages_prey"] = list()
for(var/msg in B.secondary_autotransfer_messages_prey)
belly_data["secondary_autotransfer_messages_prey"] += msg
belly_data["digest_chance_messages_owner"] = list()
for(var/msg in B.digest_chance_messages_owner)
belly_data["digest_chance_messages_owner"] += msg
belly_data["digest_chance_messages_prey"] = list()
for(var/msg in B.digest_chance_messages_prey)
belly_data["digest_chance_messages_prey"] += msg
belly_data["absorb_chance_messages_owner"] = list()
for(var/msg in B.absorb_chance_messages_owner)
belly_data["absorb_chance_messages_owner"] += msg
belly_data["absorb_chance_messages_prey"] = list()
for(var/msg in B.absorb_chance_messages_prey)
belly_data["absorb_chance_messages_prey"] += msg
belly_data["digest_messages_owner"] = list()
for(var/msg in B.digest_messages_owner)
belly_data["digest_messages_owner"] += msg
belly_data["digest_messages_prey"] = list()
for(var/msg in B.digest_messages_prey)
belly_data["digest_messages_prey"] += msg
belly_data["absorb_messages_owner"] = list()
for(var/msg in B.absorb_messages_owner)
belly_data["absorb_messages_owner"] += msg
belly_data["absorb_messages_prey"] = list()
for(var/msg in B.absorb_messages_prey)
belly_data["absorb_messages_prey"] += msg
belly_data["unabsorb_messages_owner"] = list()
for(var/msg in B.unabsorb_messages_owner)
belly_data["unabsorb_messages_owner"] += msg
belly_data["unabsorb_messages_prey"] = list()
for(var/msg in B.unabsorb_messages_prey)
belly_data["unabsorb_messages_prey"] += msg
belly_data["examine_messages"] = list()
for(var/msg in B.examine_messages)
belly_data["examine_messages"] += msg
belly_data["examine_messages_absorbed"] = list()
for(var/msg in B.examine_messages_absorbed)
belly_data["examine_messages_absorbed"] += msg
//belly_data["emote_list"] = list()
//for(var/EL in B.emote_lists)
// for(var/msg in B.emote_lists[EL])
// msg_list += msg
//
// belly_data["emote_lists"] += list(EL, msg_list)
// I will use this first before the code above gets fixed
belly_data["emotes_digest"] = list()
for(var/msg in B.emote_lists[DM_DIGEST])
belly_data["emotes_digest"] += msg
belly_data["emotes_hold"] = list()
for(var/msg in B.emote_lists[DM_HOLD])
belly_data["emotes_hold"] += msg
belly_data["emotes_holdabsorbed"] = list()
for(var/msg in B.emote_lists[DM_HOLD_ABSORBED])
belly_data["emotes_holdabsorbed"] += msg
belly_data["emotes_absorb"] = list()
for(var/msg in B.emote_lists[DM_ABSORB])
belly_data["emotes_absorb"] += msg
belly_data["emotes_heal"] = list()
for(var/msg in B.emote_lists[DM_HEAL])
belly_data["emotes_heal"] += msg
belly_data["emotes_drain"] = list()
for(var/msg in B.emote_lists[DM_DRAIN])
belly_data["emotes_drain"] += msg
belly_data["emotes_steal"] = list()
for(var/msg in B.emote_lists[DM_SIZE_STEAL])
belly_data["emotes_steal"] += msg
belly_data["emotes_egg"] = list()
for(var/msg in B.emote_lists[DM_EGG])
belly_data["emotes_egg"] += msg
belly_data["emotes_shrink"] = list()
for(var/msg in B.emote_lists[DM_SHRINK])
belly_data["emotes_shrink"] += msg
belly_data["emotes_grow"] = list()
for(var/msg in B.emote_lists[DM_GROW])
belly_data["emotes_grow"] += msg
belly_data["emotes_unabsorb"] = list()
for(var/msg in B.emote_lists[DM_UNABSORB])
belly_data["emotes_unabsorb"] += msg
// Options
belly_data["digest_brute"] = B.digest_brute
belly_data["digest_burn"] = B.digest_burn
belly_data["digest_oxy"] = B.digest_oxy
belly_data["digest_tox"] = B.digest_tox
belly_data["digest_clone"] = B.digest_clone
belly_data["can_taste"] = B.can_taste
belly_data["is_feedable"] = B.is_feedable
belly_data["contaminates"] = B.contaminates
belly_data["contamination_flavor"] = B.contamination_flavor
belly_data["contamination_color"] = B.contamination_color
belly_data["nutrition_percent"] = B.nutrition_percent
belly_data["bulge_size"] = B.bulge_size
belly_data["display_absorbed_examine"] = B.display_absorbed_examine
belly_data["save_digest_mode"] = B.save_digest_mode
belly_data["emote_active"] = B.emote_active
belly_data["emote_time"] = B.emote_time
belly_data["shrink_grow_size"] = B.shrink_grow_size
belly_data["vorespawn_blacklist"] = B.vorespawn_blacklist
belly_data["vorespawn_whitelist"] = B.vorespawn_whitelist
belly_data["vorespawn_absorbed"] = B.vorespawn_absorbed
belly_data["egg_type"] = B.egg_type
belly_data["egg_name"] = B.egg_name
belly_data["egg_size"] = B.egg_size
belly_data["selective_preference"] = B.selective_preference
belly_data["recycling"] = B.recycling
belly_data["storing_nutrition"] = B.storing_nutrition
belly_data["entrance_logs"] = B.entrance_logs
belly_data["item_digest_logs"] = B.item_digest_logs
belly_data["eating_privacy_local"] = B.eating_privacy_local
belly_data["private_struggle"] = B.private_struggle
// Sounds
belly_data["is_wet"] = B.is_wet
belly_data["wet_loop"] = B.wet_loop
belly_data["fancy_vore"] = B.fancy_vore
belly_data["vore_sound"] = B.vore_sound
belly_data["release_sound"] = B.release_sound
belly_data["sound_volume"] = B.sound_volume
belly_data["noise_freq"] = B.noise_freq
// Visuals
belly_data["affects_vore_sprites"] = B.affects_vore_sprites
var/list/sprite_flags = list()
for(var/flag_name in B.vore_sprite_flag_list)
if(B.vore_sprite_flags & B.vore_sprite_flag_list[flag_name])
sprite_flags.Add(flag_name)
belly_data["vore_sprite_flags"] = sprite_flags
belly_data["count_absorbed_prey_for_sprite"] = B.count_absorbed_prey_for_sprite
belly_data["absorbed_multiplier"] = B.absorbed_multiplier
belly_data["count_liquid_for_sprite"] = B.count_liquid_for_sprite
belly_data["liquid_multiplier"] = B.liquid_multiplier
belly_data["count_items_for_sprite"] = B.count_items_for_sprite
belly_data["item_multiplier"] = B.item_multiplier
belly_data["health_impacts_size"] = B.health_impacts_size
belly_data["resist_triggers_animation"] = B.resist_triggers_animation
belly_data["size_factor_for_sprite"] = B.size_factor_for_sprite
belly_data["belly_sprite_to_affect"] = B.belly_sprite_to_affect
belly_data["undergarment_chosen"] = B.undergarment_chosen
belly_data["undergarment_if_none"] = B.undergarment_if_none
belly_data["undergarment_color"] = B.undergarment_color
//belly_data["tail_to_change_to"] = B.tail_to_change_to
//belly_data["tail_colouration"] = B.tail_colouration
//belly_data["tail_extra_overlay"] = B.tail_extra_overlay
//belly_data["tail_extra_overlay2"] = B.tail_extra_overlay2
// Visuals (Belly Fullscreens Preview and Coloring)
belly_data["belly_fullscreen_color"] = B.belly_fullscreen_color
belly_data["belly_fullscreen_color2"] = B.belly_fullscreen_color2
belly_data["belly_fullscreen_color3"] = B.belly_fullscreen_color3
belly_data["belly_fullscreen_color4"] = B.belly_fullscreen_color4
belly_data["belly_fullscreen_alpha"] = B.belly_fullscreen_alpha
belly_data["colorization_enabled"] = B.colorization_enabled
// Visuals (Vore FX)
belly_data["disable_hud"] = B.disable_hud
belly_data["belly_fullscreen"] = B.belly_fullscreen
// Interactions
belly_data["escapable"] = B.escapable
belly_data["escapechance"] = B.escapechance
belly_data["escapechance_absorbed"] = B.escapechance_absorbed
belly_data["escapetime"] = B.escapetime/10
belly_data["belchchance"] = B.belchchance
belly_data["transferchance"] = B.transferchance
belly_data["transferlocation"] = B.transferlocation
belly_data["transferchance_secondary"] = B.transferchance_secondary
belly_data["transferlocation_secondary"] = B.transferlocation_secondary
belly_data["absorbchance"] = B.absorbchance
belly_data["digestchance"] = B.digestchance
// Interactions (Auto-Transfer)
belly_data["autotransferchance"] = B.autotransferchance
belly_data["autotransferwait"] = B.autotransferwait/10
belly_data["autotransferlocation"] = B.autotransferlocation
belly_data["autotransferextralocation"] = B.autotransferextralocation
belly_data["autotransfer_enabled"] = B.autotransfer_enabled
belly_data["autotransferchance_secondary"] = B.autotransferchance_secondary
belly_data["autotransferlocation_secondary"] = B.autotransferlocation_secondary
belly_data["autotransferextralocation_secondary"] = B.autotransferextralocation_secondary
belly_data["autotransfer_min_amount"] = B.autotransfer_min_amount
belly_data["autotransfer_max_amount"] = B.autotransfer_max_amount
var/list/at_whitelist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_whitelist & B.autotransfer_flags_list[flag_name])
at_whitelist.Add(flag_name)
belly_data["autotransfer_whitelist"] = at_whitelist
var/list/at_blacklist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_blacklist & B.autotransfer_flags_list[flag_name])
at_blacklist.Add(flag_name)
belly_data["autotransfer_blacklist"] = at_blacklist
var/list/at_whitelist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_whitelist_items & B.autotransfer_flags_list_items[flag_name])
at_whitelist_items.Add(flag_name)
belly_data["autotransfer_whitelist_items"] = at_whitelist_items
var/list/at_blacklist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_blacklist_items & B.autotransfer_flags_list_items[flag_name])
at_blacklist_items.Add(flag_name)
belly_data["autotransfer_blacklist_items"] = at_blacklist_items
var/list/at_secondary_whitelist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_secondary_whitelist & B.autotransfer_flags_list[flag_name])
at_secondary_whitelist.Add(flag_name)
belly_data["autotransfer_secondary_whitelist"] = at_secondary_whitelist
var/list/at_secondary_blacklist = list()
for(var/flag_name in B.autotransfer_flags_list)
if(B.autotransfer_secondary_blacklist & B.autotransfer_flags_list[flag_name])
at_secondary_blacklist.Add(flag_name)
belly_data["autotransfer_secondary_blacklist"] = at_secondary_blacklist
var/list/at_secondary_whitelist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_secondary_whitelist_items & B.autotransfer_flags_list_items[flag_name])
at_secondary_whitelist_items.Add(flag_name)
belly_data["autotransfer_secondary_whitelist_items"] = at_secondary_whitelist_items
var/list/at_secondary_blacklist_items = list()
for(var/flag_name in B.autotransfer_flags_list_items)
if(B.autotransfer_secondary_blacklist_items & B.autotransfer_flags_list_items[flag_name])
at_secondary_blacklist_items.Add(flag_name)
belly_data["autotransfer_secondary_blacklist_items"] = at_secondary_blacklist_items
// Liquid Options
belly_data["show_liquids"] = B.show_liquids
belly_data["reagentbellymode"] = B.reagentbellymode
belly_data["reagent_chosen"] = B.reagent_chosen
belly_data["reagent_name"] = B.reagent_name
belly_data["reagent_transfer_verb"] = B.reagent_transfer_verb
belly_data["gen_time_display"] = B.gen_time_display
belly_data["custom_max_volume"] = B.custom_max_volume
belly_data["vorefootsteps_sounds"] = B.vorefootsteps_sounds
belly_data["liquid_overlay"] = B.liquid_overlay
belly_data["max_liquid_level"] = B.max_liquid_level
belly_data["reagent_toches"] = B.reagent_touches
belly_data["mush_overlay"] = B.mush_overlay
belly_data["mush_color"] = B.mush_color
belly_data["mush_alpha"] = B.mush_alpha
belly_data["max_mush"] = B.max_mush
belly_data["min_mush"] = B.min_mush
belly_data["item_mush_val"] = B.item_mush_val
belly_data["custom_reagentcolor"] = B.custom_reagentcolor
belly_data["custom_reagentalpha"] = B.custom_reagentalpha
belly_data["metabolism_overlay"] = B.metabolism_overlay
belly_data["metabolism_mush_ratio"] = B.metabolism_mush_ratio
belly_data["max_ingested"] = B.max_ingested
belly_data["custom_ingested_color"] = B.custom_ingested_color
belly_data["custom_ingested_alpha"] = B.custom_ingested_alpha
var/list/reagent_flags = list()
for(var/flag_name in B.reagent_mode_flag_list)
if(B.reagent_mode_flags & B.reagent_mode_flag_list[flag_name])
reagent_flags.Add(flag_name)
belly_data["reagent_mode_flag_list"] = reagent_flags
data["bellies"] += list(belly_data)
// Liquid Messages
belly_data["show_fullness_messages"] = B.show_fullness_messages
belly_data["liquid_fullness1_messages"] = B.liquid_fullness1_messages
belly_data["liquid_fullness2_messages"] = B.liquid_fullness2_messages
belly_data["liquid_fullness3_messages"] = B.liquid_fullness3_messages
belly_data["liquid_fullness4_messages"] = B.liquid_fullness4_messages
belly_data["liquid_fullness5_messages"] = B.liquid_fullness5_messages
belly_data["fullness1_messages"] = list()
for(var/msg in B.fullness1_messages)
belly_data["fullness1_messages"] += msg
belly_data["fullness2_messages"] = list()
for(var/msg in B.fullness2_messages)
belly_data["fullness2_messages"] += msg
belly_data["fullness3_messages"] = list()
for(var/msg in B.fullness3_messages)
belly_data["fullness3_messages"] += msg
belly_data["fullness4_messages"] = list()
for(var/msg in B.fullness4_messages)
belly_data["fullness4_messages"] += msg
belly_data["fullness5_messages"] = list()
for(var/msg in B.fullness5_messages)
belly_data["fullness5_messages"] += msg
return data

View File

@@ -163,7 +163,11 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
</Button>
</LabeledList.Item>
) : (
''
<LabeledList.Item label="Belly Sprite to affect">
<span style={{ color: 'red' }}>
You do not have any bellysprites.
</span>
</LabeledList.Item>
)}
{tail_option_shown &&
vore_sprite_flags.includes('Undergarment addition') ? (

View File

@@ -1,7 +1,7 @@
import { capitalize } from 'common/string';
import { useBackend } from 'tgui/backend';
import { Button, LabeledList, Section } from 'tgui/components';
import { useBackend } from '../../../backend';
import { Button, LabeledList, Section } from '../../../components';
import { hostMob, selectedData } from '../types';
export const VoreSelectedMobTypeBellyButtons = (props: {
@@ -9,18 +9,17 @@ export const VoreSelectedMobTypeBellyButtons = (props: {
host_mobtype: hostMob;
}) => {
const { act } = useBackend();
const { belly, host_mobtype } = props;
const {
silicon_belly_overlay_preference,
belly_mob_mult,
belly_item_mult,
belly_overall_mult,
belly_sprite_option_shown,
belly_sprite_to_affect,
} = belly;
const { is_cyborg, is_vore_simple_mob } = host_mobtype;
if (is_cyborg) {
if (belly_sprite_option_shown && belly_sprite_to_affect === 'sleeper') {
return (
<Section title={'Cyborg Controls'} width={'80%'}>
<LabeledList>
@@ -33,38 +32,20 @@ export const VoreSelectedMobTypeBellyButtons = (props: {
{capitalize(silicon_belly_overlay_preference)}
</Button>
</LabeledList.Item>
<LabeledList.Item label="Mob Vorebelly Size Mult">
<Button
onClick={() =>
act('set_attribute', { attribute: 'b_belly_mob_mult' })
}
>
{belly_mob_mult}
</Button>
</LabeledList.Item>
<LabeledList.Item label="Item Vorebelly Size Mult">
<Button
onClick={() =>
act('set_attribute', { attribute: 'b_belly_item_mult' })
}
>
{belly_item_mult}
</Button>
</LabeledList.Item>
<LabeledList.Item label="Belly Size Multiplier">
<Button
onClick={() =>
act('set_attribute', {
attribute: 'b_belly_overall_mult',
})
}
>
{belly_overall_mult}
</Button>
</LabeledList.Item>
</LabeledList>
</Section>
);
} else {
return (
<Section title={'Cyborg Controls'} width={'80%'}>
<span style={{ color: 'red' }}>
Your module does either not support vore sprites or you&apos;ve
selected a belly sprite other than the sleeper within the Visuals
section.
</span>
</Section>
);
}
} else if (is_vore_simple_mob) {
return (
// For now, we're only returning empty. TODO: Simple mob belly controls

View File

@@ -3225,6 +3225,7 @@
#include "code\modules\mob\living\carbon\human\gradient.dm"
#include "code\modules\mob\living\carbon\human\human.dm"
#include "code\modules\mob\living\carbon\human\human_attackhand.dm"
#include "code\modules\mob\living\carbon\human\human_bellies.dm"
#include "code\modules\mob\living\carbon\human\human_damage.dm"
#include "code\modules\mob\living\carbon\human\human_defense.dm"
#include "code\modules\mob\living\carbon\human\human_defines.dm"
@@ -3378,6 +3379,7 @@
#include "code\modules\mob\living\silicon\robot\photos.dm"
#include "code\modules\mob\living\silicon\robot\robot.dm"
#include "code\modules\mob\living\silicon\robot\robot_animation_vr.dm"
#include "code\modules\mob\living\silicon\robot\robot_bellies.dm"
#include "code\modules\mob\living\silicon\robot\robot_damage.dm"
#include "code\modules\mob\living\silicon\robot\robot_items.dm"
#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
@@ -4597,6 +4599,7 @@
#include "code\modules\vore\eating\inbelly_spawn.dm"
#include "code\modules\vore\eating\leave_remains_vr.dm"
#include "code\modules\vore\eating\living_ch.dm"
#include "code\modules\vore\eating\living_bellies.dm"
#include "code\modules\vore\eating\living_vr.dm"
#include "code\modules\vore\eating\mob_ch.dm"
#include "code\modules\vore\eating\mob_vr.dm"
@@ -4996,7 +4999,6 @@
#include "modular_chomp\code\modules\mob\living\silicon\robot\dogborg\dog_modules.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\dogborg\dog_sleeper.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\modules\exploration.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\_sprite_datum.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\civilian.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\clown.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\combat.dm"
@@ -5159,7 +5161,6 @@
#include "modular_chomp\code\modules\tickets\tickets.dm"
#include "modular_chomp\code\modules\tickets\tickets_player_ui.dm"
#include "modular_chomp\code\modules\tickets\tickets_ui.dm"
#include "modular_chomp\code\modules\vore\eating\exportpanel_ch.dm"
#include "modular_chomp\code\modules\vore\eating\soulcatcher.dm"
#include "modular_chomp\code\modules\vore\eating\soulcatcher_mob.dm"
#include "modular_chomp\code\modules\vore\eating\soulcatcher_observer.dm"