[MIRROR] updates belly handling (#10152)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-02-13 02:03:58 -07:00
committed by GitHub
parent e465c23293
commit 35fc6f0aaa
11 changed files with 53 additions and 92 deletions

View File

@@ -188,7 +188,7 @@
phaseanim.dir = H.dir
H.invisibility = initial(H.invisibility)
respite_activating = FALSE
belly.owner.update_fullness()
belly.owner.handle_belly_update() // CHOMPEdit
H.clear_fullscreen("belly")
if(H.hud_used)
if(!H.hud_used.hud_shown)

View File

@@ -16,7 +16,7 @@
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
handle_belly_update() //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))

View File

@@ -302,7 +302,7 @@
forceMove(pick(floors))
flick("tp_in",src)
respite_activating = FALSE
belly.owner.update_fullness()
belly.owner.handle_belly_update() // CHOMPEdit
clear_fullscreen("belly")
if(hud_used)
if(!hud_used.hud_shown)

View File

@@ -1177,6 +1177,6 @@
new_belly.items_preserved.Cut()
new_belly.update_internal_overlay() // Signal not implemented! CHOMPEnable
host.update_fullness()
host.handle_belly_update()
host.updateVRPanel()
unsaved_changes = TRUE

View File

@@ -177,7 +177,7 @@
for(var/reagent in generated_reagents)
reagents.add_reagent(reagent, generated_reagents[reagent])
if(count_liquid_for_sprite)
owner.update_fullness() //This is run whenever a belly's contents are changed.
owner.handle_belly_update() //This is run whenever a belly's contents are changed.
if(LAZYLEN(belly_surrounding))
SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_VORE_FX, FALSE, reagents.total_volume) // Signals vore_fx() reagents updates.

View File

@@ -443,6 +443,7 @@
var/mob/living/L = thing
startfx.Add(L)
startfx.Add(get_belly_surrounding(L.contents))
owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(istype(thing,/obj/item))
var/obj/item/I = thing
startfx.Add(get_belly_surrounding(I.contents))
@@ -466,16 +467,15 @@
vore_fx(M, TRUE) //CHOMPEdit: update belleh
if(owner.previewing_belly == src) //CHOMPEdit
vore_fx(owner, TRUE) //CHOMPEdit: update belleh
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
//Stop AI processing in bellies
if(M.ai_holder)
M.ai_holder.go_sleep()
if(reagents.total_volume >= 5) //CHOMPEdit Start
if(digest_mode == DM_DIGEST && M.digestable)
reagents.trans_to(M, reagents.total_volume * 0.1, 1 / max(LAZYLEN(contents), 1), FALSE)
to_chat(M, span_vwarning("<B>You splash into a pool of [reagent_name]!</B>"))
to_chat(M, span_vwarning(span_bold("You splash into a pool of [reagent_name]!")))
if(!isliving(thing) && count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
//if(istype(thing, /obj/item/capture_crystal)) //CHOMPEdit start: Capture crystal occupant gets to see belly text too. Moved to modular_chomp capture_crystal.dm.
//var/obj/item/capture_crystal/CC = thing
//if(CC.bound_mob && desc)
@@ -500,7 +500,7 @@
if(isbelly(thing.loc)) //CHOMPEdit Start
var/obj/belly/NB = thing.loc
if(count_items_for_sprite && !NB.count_items_for_sprite)
owner.update_fullness()
owner.handle_belly_update()
return //CHOMPEdit End
//CHOMPEdit Start - Remove vorefx from all those indirectly viewing as well
@@ -509,13 +509,13 @@
var/mob/living/L = thing
endfx.Add(L)
endfx.Add(get_belly_surrounding(L.contents))
owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(istype(thing,/obj/item))
var/obj/item/I = thing
endfx.Add(get_belly_surrounding(I.contents))
if(!isbelly(thing.loc))
for(var/mob/living/L in endfx) //CHOMPEdit End
if(L.surrounding_belly()) continue
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
L.clear_fullscreen("belly")
//L.clear_fullscreen("belly2") // CHOMP Disable - using our implementation, not upstream's
//L.clear_fullscreen("belly3") // CHOMP Disable - using our implementation, not upstream's
@@ -529,7 +529,7 @@
//CHOMPEdit End of indirect vorefx changes
if(isitem(thing) && !isbelly(thing.loc)) //CHOMPEdit: Digest stage effects. Don't bother adding overlays to stuff that won't make it back out.
if(count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
var/obj/item/I = thing
if(I.gurgled)
I.cut_overlay(gurgled_overlays[I.gurgled_color]) //No double-overlay for worn items.
@@ -922,8 +922,6 @@
//Clean up our own business
items_preserved.Cut()
if(!ishuman(owner))
owner.update_icons()
//Determines privacy
var/privacy_range = world.view
@@ -1007,9 +1005,6 @@
if(ML.stat)
ML.SetSleeping(min(ML.sleeping,20))
//Clean up our own business
if(!ishuman(owner))
owner.update_icons()
//Determines privacy
var/privacy_range = world.view
@@ -1059,8 +1054,6 @@
var/mob/ourmob = prey
ourmob.reset_view(owner)
owner.updateVRPanel()
if(isanimal(owner))
owner.update_icon()
for(var/mob/living/M in contents)
M.updateVRPanel()
@@ -1161,7 +1154,7 @@
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()
owner.handle_belly_update()
//Incase they have the loop going, let's double check to stop it.
M.stop_sound_channel(CHANNEL_PREYLOOP)
@@ -1204,8 +1197,7 @@
M.forceMove(G)
else
qdel(M)
if(isanimal(owner))
owner.update_icon()
owner.handle_belly_update()
//CHOMPEdit End
// Handle a mob being absorbed
@@ -1259,10 +1251,7 @@
//Update owner
owner.updateVRPanel()
if(isanimal(owner))
owner.update_icon()
else
owner.update_fullness()
owner.handle_belly_update()
// Finally, if they're to be sent to a special pudge belly, send them there
if(transferlocation_absorb)
var/obj/belly/dest_belly
@@ -1289,10 +1278,7 @@
//Update owner
owner.updateVRPanel()
if(isanimal(owner))
owner.update_icon()
else
owner.update_fullness()
owner.handle_belly_update()
/////////////////////////////////////////////////////////////////////////
/obj/belly/proc/handle_absorb_langs()
@@ -1617,7 +1603,7 @@
owner.updateVRPanel()
for(var/mob/living/M in contents)
M.updateVRPanel()
owner.update_icon()
owner.handle_belly_update()
//Autotransfer callback CHOMPEdit Start
/obj/belly/proc/check_autotransfer(var/atom/movable/prey)

View File

@@ -42,7 +42,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
else
B.handle_digestion_death(L)
if(!L)
B.owner.update_fullness()
B.owner.handle_belly_update()
return list("to_update" = TRUE)
if(!L)
return //CHOMPEdit End
@@ -56,7 +56,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.adjustBruteLoss(-paratox*2) //Should automaticaly clamp to 0
L.adjustFireLoss(-paratox*2) //Should automaticaly clamp to 0
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.
B.owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
return
//CHOMPedit end
@@ -89,7 +89,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
var/difference = B.owner.size_multiplier / L.size_multiplier
if(B.health_impacts_size)
B.owner.update_fullness()
B.owner.handle_belly_update()
consider_healthbar(L, old_health, B.owner)
/*if(isrobot(B.owner)) //CHOMPEdit: Borgos can now use nutrition too
@@ -158,7 +158,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.resize(L.size_multiplier - 0.01) // Shrink by 1% per tick
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()
B.owner.handle_belly_update()
. = ..()
/datum/digest_mode/grow
@@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.resize(L.size_multiplier + 0.01) // Shrink by 1% per tick
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()
B.owner.handle_belly_update()
/datum/digest_mode/drain/sizesteal
id = DM_SIZE_STEAL
@@ -183,7 +183,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.resize(L.size_multiplier - 0.01) //Shrink by 1% per tick
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()
B.owner.handle_belly_update()
. = ..()
/datum/digest_mode/heal
@@ -202,14 +202,14 @@ GLOBAL_LIST_INIT(digest_modes, list())
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)
B.owner.update_fullness()
B.owner.handle_belly_update()
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)
B.owner.update_fullness()
B.owner.handle_belly_update()
if(B.owner.nutrition > 90 && (L.health < L.maxHealth) && !H.isSynthetic())
L.adjustBruteLoss(-2.5)
L.adjustFireLoss(-2.5)
@@ -218,7 +218,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.adjustCloneLoss(-1.25)
B.owner.adjust_nutrition(-2)
if(B.health_impacts_size)
B.owner.update_fullness()
B.owner.handle_belly_update()
if(L.nutrition <= 400)
L.adjust_nutrition(1)
else if(B.owner.nutrition > 90 && (L.nutrition <= 400))

View File

@@ -34,3 +34,10 @@
/mob/living/proc/vs_animate(var/belly_to_animate)
return
// use this instead of upsate fullness where you need to directly update a belly size
/mob/proc/handle_belly_update()
if(ishuman(src))
update_fullness()
return
update_icon()

View File

@@ -135,7 +135,7 @@
add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
if(RTB.count_liquid_for_sprite || TB.count_liquid_for_sprite)
update_fullness()
handle_belly_update()
else if(TR.receive_reagents == FALSE)
to_chat(user, span_vwarning("This person's prefs dont allow that!"))
@@ -159,9 +159,9 @@
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
add_attack_logs(user,TR,"Transfered reagents from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
if(RTB.count_liquid_for_sprite)
update_fullness()
handle_belly_update()
if(TB.count_liquid_for_sprite)
TR.update_fullness()
TR.handle_belly_update()
if("Stomach")
@@ -178,7 +178,7 @@
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach")
if(RTB.count_liquid_for_sprite)
update_fullness()
handle_belly_update()
else if(TR.receive_reagents == FALSE)
to_chat(user, span_vwarning("This person's prefs dont allow that!"))
@@ -193,7 +193,7 @@
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") //Bonus for staff so they can see if people have abused transfer and done pref breaks
if(RTB.count_liquid_for_sprite)
update_fullness()
handle_belly_update()
if("Container")
if(RTB.reagentid == REAGENT_ID_STOMACID)
@@ -215,13 +215,13 @@
RTB.reagents.vore_trans_to_con(T, transfer_amount, 1, 0)
add_attack_logs(user, T,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to a [T]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
if(RTB.count_liquid_for_sprite)
update_fullness()
handle_belly_update()
if("Floor")
if(RTB.reagentid == REAGENT_ID_WATER)
return
var/amount_removed = RTB.reagents.remove_any(transfer_amount)
if(RTB.count_liquid_for_sprite)
update_fullness()
handle_belly_update()
var/puddle_amount = round(amount_removed/5)
if(puddle_amount == 0)

View File

@@ -628,9 +628,7 @@
LAZYSET(SA.prey_excludes, src, world.time)
log_and_message_admins("used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[B.owner.x];Y=[B.owner.y];Z=[B.owner.z]'>JMP</a>" : "null"])", src)
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
if(!ishuman(B.owner))
B.owner.update_icons()
B.owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
//You're in a dogborg!
else if(istype(loc, /obj/item/dogborg/sleeper))

View File

@@ -2788,56 +2788,35 @@ 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()
host.handle_belly_update()
. = 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()
host.handle_belly_update()
. = 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()
host.handle_belly_update()
. = TRUE
if("b_absorbed_multiplier")
var/absorbed_multiplier_input = tgui_input_number(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", host.vore_selected.absorbed_multiplier, 3, 0.1, round_value=FALSE)
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()
host.handle_belly_update()
. = 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()
host.handle_belly_update()
. = TRUE
if("b_item_multiplier")
var/item_multiplier_input = tgui_input_number(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", host.vore_selected.item_multiplier, 10, 0.1, round_value=FALSE)
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()
host.handle_belly_update()
. = 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()
host.handle_belly_update()
. = TRUE
if("b_resist_animation")
host.vore_selected.resist_triggers_animation = !host.vore_selected.resist_triggers_animation
@@ -2846,10 +2825,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/size_factor_input = tgui_input_number(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", host.vore_selected.size_factor_for_sprite, 3, 0.1, round_value=FALSE)
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()
host.handle_belly_update()
. = TRUE
if("b_vore_sprite_flags")
var/list/menu_list = host.vore_selected.vore_sprite_flag_list.Copy()
@@ -2860,19 +2836,13 @@ 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()
host.handle_belly_update()
. = TRUE
if("b_liquid_multiplier") //CHOMP Addition
var/liquid_multiplier_input = tgui_input_number(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", host.vore_selected.liquid_multiplier, 10, 0.1, round_value=FALSE)
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()
host.handle_belly_update()
. = TRUE
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)
@@ -2880,7 +2850,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
else
host.vore_selected.undergarment_chosen = undergarment_choice.name
host.update_fullness()
host.handle_belly_update()
. = TRUE
if("b_undergarment_if_none")
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[host.vore_selected.undergarment_chosen]
@@ -2889,13 +2859,13 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
else
host.vore_selected.undergarment_if_none = selected_underwear
host.update_fullness()
host.handle_belly_update()
host.updateVRPanel()
if("b_undergarment_color")
var/newcolor = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.undergarment_color)
if(newcolor)
host.vore_selected.undergarment_color = newcolor
host.update_fullness()
host.handle_belly_update()
. = TRUE
if("b_tail_to_change_to")
var/tail_choice = tgui_input_list(user, "Which tail sprite do you want to use when your [lowertext(host.vore_selected.name)] is filled?","Select Sprite", global.tail_styles_list)