mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
[MIRROR] On demand belly loading & multibelly (#9701)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
bbbc49354e
commit
9c5fa078e4
@@ -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. \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
38
code/modules/mob/living/carbon/human/human_bellies.dm
Normal file
38
code/modules/mob/living/carbon/human/human_bellies.dm
Normal 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
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
36
code/modules/mob/living/silicon/robot/robot_bellies.dm
Normal file
36
code/modules/mob/living/silicon/robot/robot_bellies.dm
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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 dragon’s 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.",
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
36
code/modules/vore/eating/living_bellies.dm
Normal file
36
code/modules/vore/eating/living_bellies.dm
Normal 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
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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))
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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') ? (
|
||||
|
||||
@@ -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'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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user