[MIRROR] Spontaneous Prey Bellies (#12216)

Co-authored-by: SatinIsle <98125273+SatinIsle@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
Co-authored-by: C.L. <killer65311@gmail.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2026-01-05 20:57:07 +01:00
committed by GitHub
co-authored by SatinIsle Kashargul C.L.
parent caedc0bcaf
commit ddb541f067
42 changed files with 1093 additions and 593 deletions
+21
View File
@@ -775,6 +775,27 @@
var/belly = user.vore_selected
return begin_instant_nom(user, prey, user, belly)
/mob/living/proc/get_current_spont_belly(atom/movable/preything)
var/direction_diff = angle2dir_cardinal(dir2angle(get_dir(src, preything)) - dir2angle(dir))
var/spont_belly_name
switch(direction_diff)
if(NORTH)
if(spont_belly_front)
spont_belly_name = spont_belly_front
if(SOUTH)
if(spont_belly_rear)
spont_belly_name = spont_belly_rear
if(EAST)
if(spont_belly_right)
spont_belly_name = spont_belly_right
if(WEST)
if(spont_belly_left)
spont_belly_name = spont_belly_left
for(var/obj/belly/lookup_belly in vore_organs)
if(lookup_belly.name == spont_belly_name)
return lookup_belly
return vore_selected
/mob/living/proc/glow_toggle()
set name = "Glow (Toggle)"
set category = "Abilities.General"
+4
View File
@@ -19,6 +19,10 @@
var/drop_vore = TRUE
var/throw_vore = TRUE
var/food_vore = TRUE
var/obj/belly/spont_belly_front = null
var/obj/belly/spont_belly_rear = null
var/obj/belly/spont_belly_left = null
var/obj/belly/spont_belly_right = null
var/consume_liquid_belly = FALSE //starting off because if someone is into that, they'll toggle it first time they get the error. Otherway around would be more pref breaky.
var/digest_pain = TRUE
var/can_be_drop_prey = FALSE
@@ -43,6 +43,10 @@
"throw_vore" = owner.throw_vore,
"phase_vore" = owner.phase_vore,
"food_vore" = owner.food_vore,
"spont_belly_rear" = owner.spont_belly_rear,
"spont_belly_left" = owner.spont_belly_left,
"spont_belly_front" = owner.spont_belly_front,
"spont_belly_right" = owner.spont_belly_right,
"consume_liquid_belly" = owner.consume_liquid_belly,
"digest_pain" = owner.digest_pain,
"eating_privacy_global" = owner.eating_privacy_global,
@@ -69,7 +73,12 @@
"aestethic_messages" = compile_aesthetic_messages(owner),
"vore_sprite_color" = owner.vore_sprite_color,
"vore_sprite_multiply" = owner.vore_sprite_multiply,
"vore_icon_options" = owner.vore_icon_bellies
"vore_icon_options" = owner.vore_icon_bellies,
// spont options
"spont_rear" = owner.spont_belly_rear,
"spont_front" = owner.spont_belly_front,
"spont_left" = owner.spont_belly_left,
"spont_right" = owner.spont_belly_right
)
/datum/vore_look/proc/compile_aesthetic_messages(mob/owner)
@@ -822,25 +822,25 @@
host.vore_selected.clear_preview(host) //Clears the stomach overlay. This is a failsafe but shouldn't occur.
. = TRUE
if("b_fullscreen_color")
var/newcolor = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.belly_fullscreen_color = newcolor
host.vore_selected.update_internal_overlay()
. = TRUE
if("b_fullscreen_color2")
var/newcolor2 = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color2)
var/newcolor2 = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor2)
host.vore_selected.belly_fullscreen_color2 = newcolor2
host.vore_selected.update_internal_overlay()
. = TRUE
if("b_fullscreen_color3")
var/newcolor3 = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color3)
var/newcolor3 = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor3)
host.vore_selected.belly_fullscreen_color3 = newcolor3
host.vore_selected.update_internal_overlay()
. = TRUE
if("b_fullscreen_color4")
var/newcolor4 = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color4)
var/newcolor4 = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor4)
host.vore_selected.belly_fullscreen_color4 = newcolor4
host.vore_selected.update_internal_overlay()
@@ -1003,7 +1003,7 @@
host.handle_belly_update()
host.updateVRPanel()
if("b_undergarment_color")
var/newcolor = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.undergarment_color)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.undergarment_color = newcolor
host.handle_belly_update()
@@ -1015,17 +1015,17 @@
host.vore_selected.tail_to_change_to = tail_choice
. = TRUE
if("b_tail_color")
var/newcolor = tgui_color_picker(user, "Choose tail color.", "", host.vore_selected.tail_colouration)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.tail_colouration = newcolor
. = TRUE
if("b_tail_color2")
var/newcolor = tgui_color_picker(user, "Choose tail secondary color.", "", host.vore_selected.tail_extra_overlay)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.tail_extra_overlay = newcolor
. = TRUE
if("b_tail_color3")
var/newcolor = tgui_color_picker(user, "Choose tail tertiary color.", "", host.vore_selected.tail_extra_overlay2)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.tail_extra_overlay2 = newcolor
. = TRUE
@@ -102,7 +102,7 @@
host.vore_selected.update_internal_overlay()
. = TRUE
if("b_custom_reagentcolor")
var/newcolor = tgui_color_picker(user, "Choose custom color for liquid overlay. Cancel for normal reagent color.", "", host.vore_selected.custom_reagentcolor)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.custom_reagentcolor = newcolor
else
@@ -137,7 +137,7 @@
host.vore_selected.update_internal_overlay()
. = TRUE
if("b_mush_color")
var/newcolor = tgui_color_picker(user, "Choose custom color for mush overlay.", "", host.vore_selected.mush_color)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.mush_color = newcolor
host.vore_selected.update_internal_overlay()
@@ -194,7 +194,7 @@
host.vore_selected.update_internal_overlay()
. = TRUE
if("b_custom_ingested_color")
var/newcolor = tgui_color_picker(user, "Choose custom color for ingested metabolism overlay. Cancel for reagent-based dynamic blend.", "", host.vore_selected.custom_ingested_color)
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(newcolor)
host.vore_selected.custom_ingested_color = newcolor
else
@@ -149,7 +149,7 @@
if(selected.message_mode || selected.escapechance)
tab_data["subtypes"] += SUCCESS_MESSAGE
if(!message_subtab)
message_subtab = ATTEMPT_MESSAGE
message_subtab = ITEM_MESSAGE
if(message_subtab == ATTEMPT_MESSAGE)
tab_data["possible_messages"] = list(TO_PREY, TO_YOU)
if(!selected_message)
+12
View File
@@ -59,6 +59,10 @@
var/slip_vore = TRUE
var/throw_vore = TRUE
var/food_vore = TRUE
var/spont_belly_rear = null
var/spont_belly_left = null
var/spont_belly_right = null
var/spont_belly_front = null
var/consume_liquid_belly = FALSE //starting off because if someone is into that, they'll toggle it first time they get the error. Otherway around would be more pref breaky.
var/digest_pain = TRUE
@@ -216,6 +220,10 @@
slip_vore = json_from_file["slip_vore"]
food_vore = json_from_file["food_vore"]
throw_vore = json_from_file["throw_vore"]
spont_belly_rear = json_from_file["spont_belly_rear"]
spont_belly_left = json_from_file["spont_belly_left"]
spont_belly_front = json_from_file["spont_belly_front"]
spont_belly_right = json_from_file["spont_belly_right"]
consume_liquid_belly = json_from_file["consume_liquid_belly"]
stumble_vore = json_from_file["stumble_vore"]
digest_pain = json_from_file["digest_pain"]
@@ -438,6 +446,10 @@
"slip_vore" = slip_vore,
"stumble_vore" = stumble_vore,
"throw_vore" = throw_vore,
"spont_belly_rear" = spont_belly_rear,
"spont_belly_left" = spont_belly_left,
"spont_belly_front" = spont_belly_front,
"spont_belly_right" = spont_belly_right,
"allow_mind_transfer" = allow_mind_transfer,
"phase_vore" = phase_vore,
"consume_liquid_belly" = consume_liquid_belly,
+69 -1
View File
@@ -49,6 +49,7 @@
var/sc_message_subtab // our soulcatcher message subtab
var/aset_message_subtab
var/selected_message
var/list/preset_colors
/datum/vore_look/New(mob/new_host)
if(istype(new_host))
@@ -59,6 +60,11 @@
host = null
. = ..()
/datum/vore_look/tgui_close(mob/user)
if(user)
user.write_preference_directly(/datum/preference/text/preset_colors, preset_colors)
. = ..()
/datum/vore_look/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
@@ -113,6 +119,7 @@
)
data["min_belly_name"] = BELLIES_NAME_MIN
data["max_belly_name"] = BELLIES_NAME_MAX
preset_colors = user.read_preference(/datum/preference/text/preset_colors)
return data
@@ -126,6 +133,7 @@
data["unsaved_changes"] = unsaved_changes
data["active_tab"] = active_tab
data["persist_edit_mode"] = host.persistend_edit_mode
data["presets"] = preset_colors
// Inisde Data
data["inside"] = get_inside_data(host)
@@ -621,6 +629,8 @@
host.client.prefs_vr.food_vore = host.food_vore
unsaved_changes = TRUE
return TRUE
if("set_spont_belly")
return set_spont_belly(params)
if("toggle_consume_liquid_belly")
host.consume_liquid_belly = !host.consume_liquid_belly
if(host.client.prefs_vr)
@@ -651,7 +661,7 @@
var/belly_choice = params["attribute"]
if(!(belly_choice in host.vore_icon_bellies))
return FALSE
var/newcolor = tgui_color_picker(ui.user, "Choose a color.", "", host.vore_sprite_color[belly_choice])
var/newcolor = sanitize_hexcolor(lowertext(params["val"]))
if(!newcolor)
return FALSE
host.vore_sprite_color[belly_choice] = newcolor
@@ -884,6 +894,20 @@
unsaved_changes = TRUE
host.soulgem.set_custom_message(message, SC_DELETE_MESSAGE)
return TRUE
if("preset")
var/raw_data = lowertext(params["color"])
var/index = lowertext(params["index"])
var/list/entries = splittext(preset_colors, ";")
while(LAZYLEN(entries) < 20)
entries += "#FFFFFF"
if(LAZYLEN(entries) > 20)
entries.Cut(21)
var/hex = sanitize_hexcolor(raw_data)
if (!hex || !isnum(index) || entries[index] == hex)
return
entries[index] = hex
preset_colors = entries.Join(";")
return FALSE
/datum/vore_look/proc/pick_from_inside(mob/user, params)
var/atom/movable/target = locate(params["pick"])
@@ -1386,6 +1410,50 @@
return TRUE
/datum/vore_look/proc/set_spont_belly(params)
switch(params["attribute"])
if("rear")
var/spont_target = html_encode(params["val"])
if(spont_target == "Current Selected")
host.spont_belly_rear = null
else
host.spont_belly_rear = spont_target
if(host.client.prefs_vr)
host.client.prefs_vr.spont_belly_rear = host.spont_belly_rear
unsaved_changes = TRUE
return TRUE
if("front")
var/spont_target = html_encode(params["val"])
if(spont_target == "Current Selected")
host.spont_belly_front = null
else
host.spont_belly_front = spont_target
if(host.client.prefs_vr)
host.client.prefs_vr.spont_belly_front = host.spont_belly_front
unsaved_changes = TRUE
return TRUE
if("left")
var/spont_target = html_encode(params["val"])
if(spont_target == "Current Selected")
host.spont_belly_left = null
else
host.spont_belly_left = spont_target
if(host.client.prefs_vr)
host.client.prefs_vr.spont_belly_left = host.spont_belly_left
unsaved_changes = TRUE
return TRUE
if("right")
var/spont_target = html_encode(params["val"])
if(spont_target == "Current Selected")
host.spont_belly_right = null
else
host.spont_belly_right = spont_target
if(host.client.prefs_vr)
host.client.prefs_vr.spont_belly_right = host.spont_belly_right
unsaved_changes = TRUE
return TRUE
return FALSE
/datum/vore_look/proc/sanitize_fixed_list(var/list/messages, type, delim = "\n\n", limit)
if(!limit)
CRASH("[type] set message called without limit!")