diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index 2fc2249607..a555748964 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -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. \ diff --git a/code/modules/admin/player_effects.dm b/code/modules/admin/player_effects.dm index 642d8ee6bd..ae8a25dcb1 100644 --- a/code/modules/admin/player_effects.dm +++ b/code/modules/admin/player_effects.dm @@ -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 diff --git a/code/modules/admin/verbs/smite.dm b/code/modules/admin/verbs/smite.dm index 2c2928b702..dc262596b5 100644 --- a/code/modules/admin/verbs/smite.dm +++ b/code/modules/admin/verbs/smite.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e90a18fc6a..7ac0358701 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/human_bellies.dm b/code/modules/mob/living/carbon/human/human_bellies.dm new file mode 100644 index 0000000000..9c3227996c --- /dev/null +++ b/code/modules/mob/living/carbon/human/human_bellies.dm @@ -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 diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index e2c13da37b..a0debff86e 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -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) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0523f7e43c..67d9de2f04 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -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. diff --git a/code/modules/mob/living/silicon/robot/robot_bellies.dm b/code/modules/mob/living/silicon/robot/robot_bellies.dm new file mode 100644 index 0000000000..4f39cb2d6b --- /dev/null +++ b/code/modules/mob/living/silicon/robot/robot_bellies.dm @@ -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 diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 79a9869b98..77612fe667 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -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 diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index 7df1b35e9c..87bba1f204 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -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)) diff --git a/code/modules/mob/living/silicon/robot/sprites/civilian.dm b/code/modules/mob/living/silicon/robot/sprites/civilian.dm index 758745093c..9f30445cc5 100644 --- a/code/modules/mob/living/silicon/robot/sprites/civilian.dm +++ b/code/modules/mob/living/silicon/robot/sprites/civilian.dm @@ -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)) diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index 36c473149b..8494a51730 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -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() diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index 3aec8b7492..98a6090d76 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -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 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm index 715144e76c..a518bcf130 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm @@ -116,9 +116,9 @@ 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 B.name = "stomach" B.desc = "The hot slick gut of a catslug!! Copious slime smears over you as you’re packed away into the gloom and oppressive humidity of this churning gastric sac. The pressure around you is intense, the squashy flesh bends and forms to your figure, clinging to you insistently! There’s basically no free space at all as your ears are filled with the slick slide of flesh against flesh and the burbling of gastric juices glooping all around you. The thumping of a heart booms from somewhere nearby, making everything pulse in against you in time with it! This is it! You’ve been devoured by a catslug!!!" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm index 6804ef09a7..de99206b8c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm @@ -88,7 +88,7 @@ GLOBAL_VAR_INIT(jellyfish_count, 0) /mob/living/simple_mob/vore/alienanimals/space_jellyfish/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "internal chamber" B.desc = "It's smooth and translucent. You can see the world around you distort and wobble with the movement of the space jellyfish. It floats casually, while the delicate flesh seems to form to you. It's surprisingly cool, and flickers with its own light. You're on display for all to see, trapped within the confines of this strange space alien!" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm index 51a9ca8c40..97c4127720 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm @@ -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!" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm index 6139efbbc6..3e2e7d25aa 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm index de3245c494..b28bb2fcf7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm index 083a514ac0..f301658bf1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm @@ -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..." diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm index 63480dadf4..d5f051f00f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm @@ -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!" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm index a62900a94c..93c6a1f391 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm @@ -169,9 +169,9 @@ 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 B.name = "stomach" B.desc = "The heat of the roiling flesh around you bakes into you immediately as you’re cast into the gloom of a Teppi’s primary gastric chamber. The undulations are practically smothering, clinging to you and grinding you all over as the Teppi continues about its day. The walls are heavy against you, so it’s really difficult to move at all, while the heart of this creature pulses rhythmically somewhere nearby, and you can feel the throb of its pulse in the doughy squish pressing up against you. Your figure sinks a ways into the flesh as it presses in, wrapping limbs up between countless slick folds and kneading waves. It’s not long before you’re positively soaked in a thin layer of slime as you’re rocked and squeezed and jostled in the stomach of your captor." @@ -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) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm index 5e6062339a..1b9e64e004 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm @@ -1,7 +1,7 @@ /mob/living/simple_mob/animal/passive/cat/runtime/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "Stomach" B.desc = "The slimy wet insides of Runtime! Not quite as clean as the cat on the outside." diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm index 2aa8f932ed..8ae49ab9da 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm @@ -53,7 +53,7 @@ /mob/living/simple_mob/animal/passive/fox/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "Stomach" B.desc = "Slick foxguts. Cute on the outside, slimy on the inside!" @@ -201,7 +201,7 @@ /mob/living/simple_mob/animal/passive/fox/renault/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "Stomach" B.desc = "Slick foxguts. They seem somehow more regal than perhaps other foxes!" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm index 12676fd143..9b724ad8b6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm index 6745771d49..3b801ba373 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm @@ -90,7 +90,7 @@ TODO: Make them light up and heat the air when exposed to oxygen. /mob/living/simple_mob/animal/passive/gaslamp/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "internal chamber" B.desc = "Having been too slow to disentangle yourself from the gaslamp's tentacles, the alien creature eventually winds enough of them around your body to lift you up off of the ground. Struggle as you might now, it is too late to deny the jellyfish-esque scavenger its lucky catch; inch by inch, the gaslamp tugs you upwards into its equivalent of a stomach, the transition between the cool-to-frigid atmosphere on the outside to its surprising internal heat something you can feel through any outer wear you possess. Minutes pass, soon resulting in the gentle creature's body sporting a rounded, bulging swell, an indistinct shadow shifting and twitching inside it as you squirm about. Be it to escape or simply to get settled, you might want to take care, however. The gaslamp's internal chamber is slick and squishy instead of overly oppressive, yet, each wave of warmth that pulses over you leaves you feeling weaker than the last..." diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm index 64741f332b..c6ebacbc76 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm @@ -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 @@ -76,7 +77,7 @@ /mob/living/simple_mob/animal/passive/snake/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "The snake coils its tail around you, pushing you to the ground and pinning you with its weight. It flicks its tongue at you, before pouncing onto your head, engulfing the upper half of your body with ease as it unhinges its jaw. With greedy swallows, it pulls you deeper, and deeper. The tight walls undulate rhythmically as the danger noodle rumbles contentedly at this new meal. The snake sends the last of you down with a deep swallow, hissing softly and closing its eyes as it enjoys its new meal, tucked away nicely under those beautiful, green scales." @@ -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 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm b/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm index 240a45a92e..95a70d271b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm @@ -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 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm b/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm index 4b1507b428..33f48276fb 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm @@ -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..." diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm index 839a57ac85..8be2d053ee 100644 --- a/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm +++ b/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm index 23a5516559..2fdd74aa02 100644 --- a/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm +++ b/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm index 7a7a5a48dd..6a85304ac3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm +++ b/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm index a6f90e7d90..55749ab469 100644 --- a/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm +++ b/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm index 975b2728c9..6ab6004b85 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm index 1a175c4eaa..9a5025466a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm @@ -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.", diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm index 28f0dcf897..62c8fe07ed 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm @@ -129,7 +129,7 @@ /mob/living/simple_mob/vore/aggressive/corrupthound/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "fuel processor" B.desc = "Uttering distorted growls and fragmented voice clips all the while, the corrupted hound gulps the rest of your squirming figure past its jaws... which snap shut with an audible click of metal on metal. Your trip down its slickly lubricated, rubbery gullet is a tight and efficient one... and once you spill out into the machine's fuel processor, your weight making it sag slightly, hot-and-thick slime begins oozing all over your form. Only time will tell if you're destined to become fuel for its next bout of rampaging... be it days, hours, or just mere minutes..." @@ -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..." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm b/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm index a5f6c825fc..a44eed03ca 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm index f7e8498c6b..f6d042a4f3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm @@ -86,7 +86,7 @@ /mob/living/simple_mob/vore/aggressive/deathclaw/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "The giant mutant of a lizard finishes stuffing you into its jaws and down its ravenously clenching gullet with a worrying ease and efficiency. An assortment of slick, slimy noises assault your senses for a few gulp-filled moments... before you spill out into the apex predator's swelteringly hot stomach, its walls already possessively grinding into your body." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm index 9a666cede4..a678c8f8c9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm @@ -46,13 +46,13 @@ var/shift_state = AB_SHIFT_NONE var/last_shift = 0 var/is_shifting = FALSE - + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/demon/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "Stomach" B.desc = "You slide down the slick, slippery gullet of the creature. It's warm, and the air is thick. You can feel the doughy walls of the creatures gut push and knead into your form! Slimy juices coat your form stinging against your flesh as they waste no time to start digesting you. The creature's heartbeat and the gurgling of their stomach are all you can hear as your jostled about, treated like nothing but food." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm b/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm index adb940974f..e21854b4c5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm b/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm index 82a2565c48..7fcad177f8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm index ea4718291c..ab68292cdf 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm index a11ab89edb..99a3033c0a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm @@ -83,7 +83,7 @@ /mob/living/simple_mob/vore/horse/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "With a final few gulps, the horse finishes swallowing you down into its hot, dark gut... and with a slosh, your weight makes the equine's belly hang down slightly like some sort of organic hammock. The thick, humid air is tinged with the smell of half-digested grass, 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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm index 7d55909cb5..6be090b946 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm @@ -54,21 +54,8 @@ say_list_type = /datum/say_list/lamia ai_holder_type = /datum/ai_holder/simple_mob/passive - - 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) -*/ + can_be_drop_prey = FALSE //CHOMP Add /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() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm index b53ac31260..31e6beb018 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm b/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm index 3e340e0abc..edfbaa5dc1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm @@ -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) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm index 6bd2db7503..c4c64dd400 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm @@ -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..." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm index 5eae98f9d2..6dba73b644 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm @@ -168,7 +168,7 @@ /mob/living/simple_mob/vore/oregrub/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "Through either grave error, overwhelming willingness, or some other factor, you find yourself lodged halfway past the grub's mandibles. While it had initially hissed and chittered in glee at the prospect of a new meal, it is clearly more versed in crunching ores to feed off of; inch by inch, bit by bit, it undulates forth to slowly, noisily gulp you down its short esophagus... and right into its extra-cramped, surprisingly hot stomach. As the rest of you spills out into the plush-walled chamber, the grub's soft body bulges outwards here and there with your compressed figure. Before long, a thick slime oozes out from the surrounding stomach walls; only time will tell how effective it is on something fleshy like you, although given it's usual diet..." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm index c8282d91e3..85403737f1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm @@ -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 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm index 1a3e3d6c54..08d28ccc1f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm @@ -72,7 +72,7 @@ /mob/living/simple_mob/vore/aggressive/panther/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "All it takes is a few more rasps of the panther's rough, barbed tongue to shovel the rest of you down its tightly rippling gullet... and with a final couple ravenous swallows, you spill out into the predatory feline's stomach! Right away, that gut's muscular walls knead and contract around you, forcing you into a curled-up ball as the panther's noisy purring rumbles into you from every direction." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm b/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm index ce19ddab88..4a15908f6b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm b/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm index 9a6dac0625..f35a5424f9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm b/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm index a5d114c75d..7b02c43304 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm index df02bbd977..1920b68737 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm @@ -76,7 +76,7 @@ /mob/living/simple_mob/vore/aggressive/rat/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "In a cruel game of cat-and-mouse gone horribly wrong, you struggle to breathe clearly as the giant rat holds your head in its jaws, the rest of its bulk pinning you to the ground. Slimy slurps and its own muffled squeaking fill your senses as it simultaneously tosses its head while backing up. Quickly, ravenously consuming you, bit by bit, packing you down its gullet no matter how you struggle. Passing by its excited heartbeat, your thoroughly slickened head pushes out into its awaiting stomach, a dark and humid hammock eager to accept the rest of you. Soon, those too-warm, plush walls clench and squeeze around you with undeniable need! A need for mere filling, or, perhaps, a proper meal?" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm index 1397807d4f..44e754802b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm @@ -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..." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm index 14fa00f40f..98e31178b1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm index 9f0af9c977..8ab405ab0a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm @@ -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 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm index 2869becb1f..6f68198e17 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm @@ -56,9 +56,9 @@ return /mob/living/simple_mob/vore/sheep/init_vore() - if(!voremob_loaded) //CHOMPEdit + if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "With a final few gulps, the sheep finishes swallowing you down into its hot, dark guts… The wool on the outside is doing you no favors with its insulation. The toasty organic flesh kneads and grinds around you with the stank of wet grass. The sheep seems to have already forgotten about you as it lets out a soft BAAH like belch and carries on doing nothing. " diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm b/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm index 39cac36ed5..85f05711b5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm @@ -67,7 +67,7 @@ /mob/living/simple_mob/vore/aggressive/giant_snake/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "As the giant snake's closed jaws seal you away from the outside world, you are immediately greeted with a seemingly endless passage of tightly squeezing flesh. Hot and coated in thick, body-clinging slime, the serpent's stomach walls immediately get to work at rhythmically pulsing and contracting against your figure, slowly tugging you deeper into its ravenous clutches." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm index d5ae7c5044..290898a120 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm @@ -97,7 +97,7 @@ /mob/living/simple_mob/vore/woof/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "You have found yourself pumping on down, down, down into this extremely soft dog. The slick touches of pulsing walls roll over you in greedy fashion as you're swallowed away, the flesh forms to your figure as in an instant the world is replaced by the hot squeeze of canine gullet. And in another moment a heavy GLLRMMPTCH seals you away, the dog tossing its head eagerly, the way forward stretching to accommodate your shape as you are greedily guzzled down. The wrinkled, doughy walls pulse against you in time to the creature's steady heartbeat. The sounds of the outside world muffled into obscure tones as the wet, grumbling rolls of this soft creature's gut hold you, churning you tightly such that no part of you is spared from these gastric affections." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm index 1d6ecf9b03..9966dfdd93 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm @@ -178,7 +178,7 @@ var/global/moth_amount = 0 // Chompstation Addition, Rykka waz here. *pawstamp* /mob/living/simple_mob/vore/solargrub/init_vore() if(!voremob_loaded) return - .=..() + . = ..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "Through either grave error, overwhelming willingness, or some other factor, you find yourself lodged halfway past the solargrub's mandibles. While it had initially hissed and chittered in glee at the prospect of a new meal, it is clearly more versed in suckling on power cables; inch by inch, bit by bit, it undulates forth to slowly, noisily gulp you down its short esophagus... and right into its extra-cramped, surprisingly hot stomach. As the rest of you spills out into the plush-walled chamber, the grub's soft body bulges outwards here and there with your compressed figure. Before long, a thick slime oozes out from the surrounding stomach walls; only time will tell how effective it is on something solid like you..." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm index 938a3ea957..f28c646f8f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm b/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm index 9d7b8c036e..968b91bcc4 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm b/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm index 400d96d10c..67fa43187d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm index 6269b1bce0..43d2b86575 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm index df418f3e76..775693ac9a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm @@ -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." diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm index 97567219ae..6412124b2e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm @@ -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." diff --git a/code/modules/vore/eating/belly_import.dm b/code/modules/vore/eating/belly_import.dm index 742dc98b0b..f0e35be336 100644 --- a/code/modules/vore/eating/belly_import.dm +++ b/code/modules/vore/eating/belly_import.dm @@ -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 diff --git a/code/modules/vore/eating/belly_obj_ch.dm b/code/modules/vore/eating/belly_obj_ch.dm index 603be0b85a..642ceb611b 100644 --- a/code/modules/vore/eating/belly_obj_ch.dm +++ b/code/modules/vore/eating/belly_obj_ch.dm @@ -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 diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 8c0709f8c7..69d080c8b4 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -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 diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 4d1a25466c..6df8250170 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -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)) diff --git a/code/modules/vore/eating/exportpanel_vr.dm b/code/modules/vore/eating/exportpanel_vr.dm index f0352cb985..ad5c82b7ac 100644 --- a/code/modules/vore/eating/exportpanel_vr.dm +++ b/code/modules/vore/eating/exportpanel_vr.dm @@ -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 - */ diff --git a/code/modules/vore/eating/living_bellies.dm b/code/modules/vore/eating/living_bellies.dm new file mode 100644 index 0000000000..e21936da7c --- /dev/null +++ b/code/modules/vore/eating/living_bellies.dm @@ -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 diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 02a6f8d9c5..a7b7199213 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -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. diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 3303459485..e1e8ee1830 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -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 diff --git a/code/modules/vore/eating/mob_ch.dm b/code/modules/vore/eating/mob_ch.dm index 3d9a466c5d..ee67f26d56 100644 --- a/code/modules/vore/eating/mob_ch.dm +++ b/code/modules/vore/eating/mob_ch.dm @@ -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 diff --git a/code/modules/vore/eating/mob_vr.dm b/code/modules/vore/eating/mob_vr.dm index 3895f38759..96236396e5 100644 --- a/code/modules/vore/eating/mob_vr.dm +++ b/code/modules/vore/eating/mob_vr.dm @@ -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. diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/code/modules/vore/eating/simple_animal_vr.dm index f628ed6318..0edab44b63 100644 --- a/code/modules/vore/eating/simple_animal_vr.dm +++ b/code/modules/vore/eating/simple_animal_vr.dm @@ -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 diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 7546f5bab8..e48835fa6e 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -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 diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 62e7f0f892..c85a3396f0 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -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,35 +2788,56 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", return FALSE else host.vore_selected.belly_sprite_to_affect = belly_choice - host.update_fullness() + 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 - host.update_fullness() + 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 - host.update_fullness() + 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) - host.update_fullness() + 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 - host.update_fullness() + 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) - host.update_fullness() + 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 - host.update_fullness() + if(isanimal(host)) + host.update_icon() + else + host.update_fullness() . = TRUE if("b_resist_animation") host.vore_selected.resist_triggers_animation = !host.vore_selected.resist_triggers_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) - host.update_fullness() + 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 - host.update_fullness() + 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) - host.update_fullness() + 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 diff --git a/modular_chomp/code/modules/mob/living/carbon/human/human.dm b/modular_chomp/code/modules/mob/living/carbon/human/human.dm index dd0a13e093..2714918085 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/human.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/human.dm @@ -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" diff --git a/modular_chomp/code/modules/mob/living/living.dm b/modular_chomp/code/modules/mob/living/living.dm index 6bfe2805aa..5b6b49cc9a 100644 --- a/modular_chomp/code/modules/mob/living/living.dm +++ b/modular_chomp/code/modules/mob/living/living.dm @@ -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. diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm b/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm index 9226b10e28..5aed16e421 100644 --- a/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm +++ b/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm @@ -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)) ..() diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/modular_chomp/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm deleted file mode 100644 index 60be844202..0000000000 --- a/modular_chomp/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ /dev/null @@ -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 diff --git a/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm b/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm index 84a24f84d6..fc1004aa67 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm @@ -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" diff --git a/modular_chomp/code/modules/vore/eating/exportpanel_ch.dm b/modular_chomp/code/modules/vore/eating/exportpanel_ch.dm deleted file mode 100644 index 7209d84877..0000000000 --- a/modular_chomp/code/modules/vore/eating/exportpanel_ch.dm +++ /dev/null @@ -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 diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx index c0afa7fd39..d9af4b0ade 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx @@ -163,7 +163,11 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => { ) : ( - '' + + + You do not have any bellysprites. + + )} {tail_option_shown && vore_sprite_flags.includes('Undergarment addition') ? ( diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedMobTypeBellyButtons.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedMobTypeBellyButtons.tsx index 15bf0c2b0f..894e3b4b46 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedMobTypeBellyButtons.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedMobTypeBellyButtons.tsx @@ -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,62 +9,43 @@ 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) { - return ( -
- - - - - - - - - - - - - - -
- ); + if (belly_sprite_option_shown && belly_sprite_to_affect === 'sleeper') { + return ( +
+ + + + + +
+ ); + } else { + return ( +
+ + Your module does either not support vore sprites or you've + selected a belly sprite other than the sleeper within the Visuals + section. + +
+ ); + } } else if (is_vore_simple_mob) { return ( // For now, we're only returning empty. TODO: Simple mob belly controls diff --git a/vorestation.dme b/vorestation.dme index a9a749fe03..41fc8d5a98 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -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"