Adds more absorbs-related vore messages and rearranges vore panel a bit

This commit is contained in:
Casey
2021-12-22 08:53:57 -05:00
committed by CHOMPStation2
parent 09c686d59c
commit 0495d7ab40
9 changed files with 614 additions and 153 deletions

View File

@@ -1,5 +1,6 @@
// Normal digestion modes
#define DM_HOLD "Hold"
#define DM_HOLD_ABSORBED "Hold Absorbed" // Not a real bellymode, used for handling different idle messages for absorbed prey.
#define DM_DIGEST "Digest"
#define DM_ABSORB "Absorb"
#define DM_UNABSORB "Unabsorb"
@@ -10,10 +11,6 @@
#define DM_HEAL "Heal"
#define DM_EGG "Encase In Egg"
//#define DM_ITEMWEAK "Digest (Item Friendly)"
//#define DM_STRIPDIGEST "Strip Digest (Items Only)"
//#define DM_DIGEST_NUMB "Digest (Numbing)"
//Addon mode flags
#define DM_FLAG_NUMBING 0x1
#define DM_FLAG_STRIPPING 0x2

View File

@@ -631,6 +631,9 @@
resist_grab()
if(!weakened)
process_resist()
else if(absorbed && isbelly(loc)) // Allow absorbed resistance
var/obj/belly/B = loc
B.relay_absorbed_resist(src)
/mob/living/proc/process_resist()

View File

@@ -33,6 +33,7 @@
var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone.
var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine.
var/display_absorbed_examine = FALSE // Do we display absorption examine messages for this belly at all?
var/absorbed_desc // Desc shown to absorbed prey. Defaults to regular if left empty.
var/shrink_grow_size = 1 // This horribly named variable determines the minimum/maximum size it will shrink/grow prey to.
var/transferlocation // Location that the prey is released if they struggle and get dropped off.
var/transferlocation_secondary // Secondary location that prey is released to.
@@ -95,6 +96,16 @@
"You jostle %pred's %belly with movement.",
"You squirm inside of %pred's %belly, making it wobble around.")
var/list/absorbed_struggle_messages_outside = list(
"%pred's %belly wobbles, seemingly on its own.",
"%pred's %belly jiggles without apparent cause.",
"%pred's %belly seems to shake for a second without an obvious reason.")
var/list/absorbed_struggle_messages_inside = list(
"You try and resist %pred's %belly, but only cause it to jiggle slightly.",
"Your fruitless mental struggles only shift %pred's %belly a tiny bit.",
"You can't make any progress freeing yourself from %pred's %belly.")
var/list/digest_messages_owner = list(
"You feel %prey's body succumb to your digestive system, which breaks it apart into soft slurry.",
"You hear a lewd glorp as your %belly muscles grind %prey into a warm pulp.",
@@ -119,6 +130,18 @@
"%pred's %belly kneads on every fiber of your body, softening you down into mush to fuel their next hunt.",
"%pred's %belly churns you down into a hot slush. Your nutrient-rich remains course through their digestive track with a series of long, wet glorps.")
var/list/absorb_messages_owner = list(
"You feel %prey becoming part of you.")
var/list/absorb_messages_prey = list(
"Your feel yourself becoming part of %pred's %belly!")
var/list/unabsorb_messages_owner = list(
"You feel %prey reform into a recognizable state again.")
var/list/unabsorb_messages_prey = list(
"You are released from being part of %pred's %belly.")
var/list/examine_messages = list(
"They have something solid in their %belly!",
"It looks like they have something in their %belly!")
@@ -141,6 +164,7 @@
return ..() + list(
"name",
"desc",
"absorbed_desc",
"vore_sound",
"vore_verb",
"human_prey_swallow_time",
@@ -166,8 +190,14 @@
"shrink_grow_size",
"struggle_messages_outside",
"struggle_messages_inside",
"absorbed_struggle_messages_outside",
"absorbed_struggle_messages_inside",
"digest_messages_owner",
"digest_messages_prey",
"absorb_messages_owner",
"absorb_messages_prey",
"unabsorb_messages_owner",
"unabsorb_messages_prey",
"examine_messages",
"examine_messages_absorbed",
"emote_lists",
@@ -264,7 +294,9 @@
if(isliving(thing))
var/mob/living/M = thing
M.updateVRPanel()
if(desc)
if(absorbed_desc && M.absorbed)
to_chat(M, "<span class='notice'><B>[absorbed_desc]</B></span>")
else if(desc)
to_chat(M, "<span class='notice'><B>[desc]</B></span>")
var/taste
if(can_taste && (taste = M.get_taste_message(FALSE)))
@@ -493,7 +525,7 @@
// This is useful in customization boxes and such. The delimiter right now is \n\n so
// in message boxes, this looks nice and is easily delimited.
/obj/belly/proc/get_messages(type, delim = "\n\n")
ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")
ASSERT(type == "smo" || type == "smi" || type == "asmo" || type == "asmi" || type == "dmo" || type == "dmp" || type == "amo" || type == "amp" || type == "uamo" || type == "uamp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")
var/list/raw_messages
switch(type)
@@ -501,6 +533,10 @@
raw_messages = struggle_messages_outside
if("smi")
raw_messages = struggle_messages_inside
if("asmo")
raw_messages = absorbed_struggle_messages_outside
if("asmi")
raw_messages = absorbed_struggle_messages_inside
if("dmo")
raw_messages = digest_messages_owner
if("dmp")
@@ -509,10 +545,20 @@
raw_messages = examine_messages
if("ema")
raw_messages = examine_messages_absorbed
if("amo")
raw_messages = absorb_messages_owner
if("amp")
raw_messages = absorb_messages_prey
if("uamo")
raw_messages = unabsorb_messages_owner
if("uamp")
raw_messages = unabsorb_messages_prey
if("im_digest")
raw_messages = emote_lists[DM_DIGEST]
if("im_hold")
raw_messages = emote_lists[DM_HOLD]
if("im_holdabsorbed")
raw_messages = emote_lists[DM_HOLD_ABSORBED]
if("im_absorb")
raw_messages = emote_lists[DM_ABSORB]
if("im_heal")
@@ -538,7 +584,7 @@
// replacement strings and linebreaks as delimiters (two \n\n by default).
// They also sanitize the messages.
/obj/belly/proc/set_messages(raw_text, type, delim = "\n\n")
ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")
ASSERT(type == "smo" || type == "smi" || type == "asmo" || type == "asmi" || type == "dmo" || type == "dmp" || type == "amo" || type == "amp" || type == "uamo" || type == "uamp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")
var/list/raw_list = splittext(html_encode(raw_text),delim)
if(raw_list.len > 10)
@@ -546,10 +592,10 @@
log_debug("[owner] tried to set [lowertext(name)] with 11+ messages")
for(var/i = 1, i <= raw_list.len, i++)
if((length(raw_list[i]) > 160 || length(raw_list[i]) < 10) && !(type == "im_digest" || type == "im_hold" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")) //160 is fudged value due to htmlencoding increasing the size
if((length(raw_list[i]) > 160 || length(raw_list[i]) < 10) && !(type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")) //160 is fudged value due to htmlencoding increasing the size
raw_list.Cut(i,i)
log_debug("[owner] tried to set [lowertext(name)] with >121 or <10 char message")
else if((type == "im_digest" || type == "im_hold" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb") && (length(raw_list[i]) > 510 || length(raw_list[i]) < 10))
else if((type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb") && (length(raw_list[i]) > 510 || length(raw_list[i]) < 10))
raw_list.Cut(i,i)
log_debug("[owner] tried to set [lowertext(name)] idle message with >501 or <10 char message")
else
@@ -564,10 +610,22 @@
struggle_messages_outside = raw_list
if("smi")
struggle_messages_inside = raw_list
if("asmo")
absorbed_struggle_messages_outside = raw_list
if("asmi")
absorbed_struggle_messages_inside = raw_list
if("dmo")
digest_messages_owner = raw_list
if("dmp")
digest_messages_prey = raw_list
if("amo")
absorb_messages_owner = raw_list
if("amp")
absorb_messages_prey = raw_list
if("uamo")
unabsorb_messages_owner = raw_list
if("uamp")
unabsorb_messages_prey = raw_list
if("em")
examine_messages = raw_list
if("ema")
@@ -576,6 +634,8 @@
emote_lists[DM_DIGEST] = raw_list
if("im_hold")
emote_lists[DM_HOLD] = raw_list
if("im_holdabsorbed")
emote_lists[DM_HOLD_ABSORBED] = raw_list
if("im_absorb")
emote_lists[DM_ABSORB] = raw_list
if("im_heal")
@@ -647,9 +707,28 @@
// Handle a mob being absorbed
/obj/belly/proc/absorb_living(mob/living/M)
M.absorbed = 1
to_chat(M, "<span class='notice'>[owner]'s [lowertext(name)] absorbs your body, making you part of them.</span>")
to_chat(owner, "<span class='notice'>Your [lowertext(name)] absorbs [M]'s body, making them part of you.</span>")
var/absorb_alert_owner = pick(absorb_messages_owner)
var/absorb_alert_prey = pick(absorb_messages_prey)
var/absorbed_count = 0
for(var/mob/living/L in contents)
if(L.absorbed)
absorbed_count++
//Replace placeholder vars
absorb_alert_owner = replacetext(absorb_alert_owner, "%pred", owner)
absorb_alert_owner = replacetext(absorb_alert_owner, "%prey", M)
absorb_alert_owner = replacetext(absorb_alert_owner, "%belly", lowertext(name))
absorb_alert_owner = replacetext(absorb_alert_owner, "%countprey", absorbed_count)
absorb_alert_prey = replacetext(absorb_alert_prey, "%pred", owner)
absorb_alert_prey = replacetext(absorb_alert_prey, "%prey", M)
absorb_alert_prey = replacetext(absorb_alert_prey, "%belly", lowertext(name))
absorb_alert_prey = replacetext(absorb_alert_prey, "%countprey", absorbed_count)
M.absorbed = TRUE
to_chat(M, "<span class='notice'>[absorb_alert_prey]</span>")
to_chat(owner, "<span class='notice'>[absorb_alert_owner]</span>")
if(M.noisy) //Mute drained absorbee hunger if enabled.
M.noisy = FALSE
@@ -677,6 +756,43 @@
if(Mm.absorbed)
absorb_living(Mm)
if(absorbed_desc)
to_chat(M, "<span class='notice'><B>[absorbed_desc]</B></span>")
//Update owner
owner.updateVRPanel()
if(isanimal(owner))
owner.update_icon()
// Handle a mob being unabsorbed
/obj/belly/proc/unabsorb_living(mob/living/M)
var/unabsorb_alert_owner = pick(unabsorb_messages_owner)
var/unabsorb_alert_prey = pick(unabsorb_messages_prey)
var/absorbed_count = 0
for(var/mob/living/L in contents)
if(L.absorbed)
absorbed_count++
//Replace placeholder vars
unabsorb_alert_owner = replacetext(unabsorb_alert_owner, "%pred", owner)
unabsorb_alert_owner = replacetext(unabsorb_alert_owner, "%prey", M)
unabsorb_alert_owner = replacetext(unabsorb_alert_owner, "%belly", lowertext(name))
unabsorb_alert_owner = replacetext(unabsorb_alert_owner, "%countprey", absorbed_count)
unabsorb_alert_prey = replacetext(unabsorb_alert_prey, "%pred", owner)
unabsorb_alert_prey = replacetext(unabsorb_alert_prey, "%prey", M)
unabsorb_alert_prey = replacetext(unabsorb_alert_prey, "%belly", lowertext(name))
unabsorb_alert_prey = replacetext(unabsorb_alert_prey, "%countprey", absorbed_count)
M.absorbed = FALSE
to_chat(M, "<span class='notice'>[unabsorb_alert_prey]</span>")
to_chat(owner, "<span class='notice'>[unabsorb_alert_owner]</span>")
if(desc)
to_chat(M, "<span class='notice'><B>[desc]</B></span>")
//Update owner
owner.updateVRPanel()
if(isanimal(owner))
@@ -794,7 +910,7 @@
for(var/mob/M in hearers(4, owner))
M.show_message("<span class='warning'>[C] suddenly slips out of [owner]'s [lowertext(name)]!</span>", 2)
return
if((escapable) && (R.loc == src) && !R.absorbed) //Does the owner still have escapable enabled?
if(escapable && (R.loc == src) && !R.absorbed) //Does the owner still have escapable enabled?
release_specific_contents(R)
to_chat(R,"<span class='warning'>You climb out of \the [lowertext(name)].</span>")
to_chat(owner,"<span class='warning'>[R] climbs out of your [lowertext(name)]!</span>")
@@ -867,6 +983,50 @@
to_chat(owner, "<span class='warning'>Your prey appears to be unable to make any progress in escaping your [lowertext(name)].</span>")
return
/obj/belly/proc/relay_absorbed_resist(mob/living/R)
if (!(R in contents) || !R.absorbed)
return // User is not in this belly or isn't actually absorbed
R.setClickCooldown(50)
var/struggle_outer_message = pick(absorbed_struggle_messages_outside)
var/struggle_user_message = pick(absorbed_struggle_messages_inside)
var/absorbed_count = 0
for(var/mob/living/L in contents)
if(L.absorbed)
absorbed_count++
struggle_outer_message = replacetext(struggle_outer_message, "%pred", owner)
struggle_outer_message = replacetext(struggle_outer_message, "%prey", R)
struggle_outer_message = replacetext(struggle_outer_message, "%belly", lowertext(name))
struggle_outer_message = replacetext(struggle_outer_message, "%countprey", absorbed_count)
struggle_user_message = replacetext(struggle_user_message, "%pred", owner)
struggle_user_message = replacetext(struggle_user_message, "%prey", R)
struggle_user_message = replacetext(struggle_user_message, "%belly", lowertext(name))
struggle_user_message = replacetext(struggle_user_message, "%countprey", absorbed_count)
struggle_outer_message = "<span class='alert'>[struggle_outer_message]</span>"
struggle_user_message = "<span class='alert'>[struggle_user_message]</span>"
for(var/mob/M in hearers(4, owner))
M.show_message(struggle_outer_message, 2) // hearable
to_chat(R, struggle_user_message)
var/sound/struggle_snuggle
var/sound/struggle_rustle = sound(get_sfx("rustle"))
if(is_wet)
if(!fancy_vore)
struggle_snuggle = sound(get_sfx("classic_struggle_sounds"))
else
struggle_snuggle = sound(get_sfx("fancy_prey_struggle"))
playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
else
playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
/obj/belly/proc/get_mobs_and_objs_in_belly()
var/list/see = list()
var/list/belly_mobs = list()
@@ -925,6 +1085,7 @@
//// Non-object variables
dupe.name = name
dupe.desc = desc
dupe.absorbed_desc = absorbed_desc
dupe.vore_sound = vore_sound
dupe.vore_verb = vore_verb
dupe.human_prey_swallow_time = human_prey_swallow_time
@@ -1001,6 +1162,16 @@
for(var/I in struggle_messages_inside)
dupe.struggle_messages_inside += I
//absorbed_struggle_messages_outside - strings
dupe.absorbed_struggle_messages_outside.Cut()
for(var/I in absorbed_struggle_messages_outside)
dupe.absorbed_struggle_messages_outside += I
//absorbed_struggle_messages_inside - strings
dupe.absorbed_struggle_messages_inside.Cut()
for(var/I in absorbed_struggle_messages_inside)
dupe.absorbed_struggle_messages_inside += I
//digest_messages_owner - strings
dupe.digest_messages_owner.Cut()
for(var/I in digest_messages_owner)
@@ -1011,11 +1182,32 @@
for(var/I in digest_messages_prey)
dupe.digest_messages_prey += I
//absorb_messages_owner - strings
dupe.absorb_messages_owner.Cut()
for(var/I in absorb_messages_owner)
dupe.absorb_messages_owner += I
//absorb_messages_prey - strings
dupe.absorb_messages_prey.Cut()
for(var/I in absorb_messages_prey)
dupe.absorb_messages_prey += I
//unabsorb_messages_owner - strings
dupe.unabsorb_messages_owner.Cut()
for(var/I in unabsorb_messages_owner)
dupe.unabsorb_messages_owner += I
//unabsorb_messages_prey - strings
dupe.unabsorb_messages_prey.Cut()
for(var/I in unabsorb_messages_prey)
dupe.unabsorb_messages_prey += I
//examine_messages - strings
dupe.examine_messages.Cut()
for(var/I in examine_messages)
dupe.examine_messages += I
<<<<<<< HEAD
// CHOMP reagent belly
//generated_reagents - strings
@@ -1055,6 +1247,9 @@
//examine_messages - strings
=======
//examine_messages_absorbed - strings
>>>>>>> b19948a0832... Merge pull request #12021 from Heroman3003/more-absorb-vore
dupe.examine_messages_absorbed.Cut()
for(var/I in examine_messages_absorbed)
dupe.examine_messages_absorbed += I

View File

@@ -104,10 +104,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
/datum/digest_mode/unabsorb/process_mob(obj/belly/B, mob/living/L)
if(L.absorbed && B.owner.nutrition >= 100)
L.absorbed = FALSE
to_chat(L, "<span class='notice'>You suddenly feel solid again.</span>")
to_chat(B.owner,"<span class='notice'>You feel like a part of you is missing.</span>")
B.owner.adjust_nutrition(-100)
B.unabsorb_living(L)
return list("to_update" = TRUE)
/datum/digest_mode/drain

View File

@@ -139,12 +139,16 @@
if(emote_active)
var/list/EL = emote_lists[digest_mode]
if(LAZYLEN(EL) && next_emote <= world.time)
if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD]))) && next_emote <= world.time)
var/living_count = 0
var/absorbed_count = 0
for(var/mob/living/L in contents)
living_count++
if(L.absorbed)
absorbed_count++
next_emote = world.time + (emote_time SECONDS)
for(var/mob/living/M in contents)
<<<<<<< HEAD
if(digest_mode == DM_DIGEST && !M.digestable)
continue // don't give digesty messages to indigestible people
@@ -156,6 +160,30 @@
formatted_message = replacetext(formatted_message, "%countprey", living_count)
formatted_message = replacetext(formatted_message, "%count", contents.len)
to_chat(M, "<span class='notice'>[formatted_message]</span>")
=======
if(M.absorbed)
EL = emote_lists[DM_HOLD_ABSORBED]
var/raw_message = pick(EL)
var/formatted_message
formatted_message = replacetext(raw_message, "%belly", lowertext(name))
formatted_message = replacetext(formatted_message, "%pred", owner)
formatted_message = replacetext(formatted_message, "%prey", M)
formatted_message = replacetext(formatted_message, "%countprey", absorbed_count)
to_chat(M, "<span class='notice'>[formatted_message]</span>")
else
if(digest_mode == DM_DIGEST && !M.digestable)
EL = emote_lists[DM_HOLD] // Use Hold's emote list if we're indigestible
var/raw_message = pick(EL)
var/formatted_message
formatted_message = replacetext(raw_message, "%belly", lowertext(name))
formatted_message = replacetext(formatted_message, "%pred", owner)
formatted_message = replacetext(formatted_message, "%prey", M)
formatted_message = replacetext(formatted_message, "%countprey", living_count)
formatted_message = replacetext(formatted_message, "%count", contents.len)
to_chat(M, "<span class='notice'>[formatted_message]</span>")
>>>>>>> b19948a0832... Merge pull request #12021 from Heroman3003/more-absorb-vore
if(to_update)
updateVRPanels()

View File

@@ -950,6 +950,7 @@
var/obj/belly/B = belly
to_chat(src, "<span class='notice'><b>Belly name:</b> [B.name]</span>")
to_chat(src, "<span class='notice'><b>Belly desc:</b> [B.desc]</span>")
to_chat(src, "<span class='notice'><b>Belly absorbed desc:</b> [B.absorbed_desc]</span>")
to_chat(src, "<span class='notice'><b>Vore verb:</b> [B.vore_verb]</span>")
to_chat(src, "<span class='notice'><b>Struggle messages (outside):</b></span>")
for(var/msg in B.struggle_messages_outside)
@@ -957,12 +958,30 @@
to_chat(src, "<span class='notice'><b>Struggle messages (inside):</b></span>")
for(var/msg in B.struggle_messages_inside)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Absorbed struggle messages (outside):</b></span>")
for(var/msg in B.absorbed_struggle_messages_outside)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Absorbed struggle messages (inside):</b></span>")
for(var/msg in B.absorbed_struggle_messages_inside)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Digest messages (owner):</b></span>")
for(var/msg in B.digest_messages_owner)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Digest messages (prey):</b></span>")
for(var/msg in B.digest_messages_prey)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Absorb messages:</b></span>")
for(var/msg in B.absorb_messages_owner)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Absorb messages (prey):</b></span>")
for(var/msg in B.absorb_messages_prey)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Unabsorb messages:</b></span>")
for(var/msg in B.unabsorb_messages_owner)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Unabsorb messages (prey):</b></span>")
for(var/msg in B.unabsorb_messages_prey)
to_chat(src, "<span class='notice'>[msg]</span>")
to_chat(src, "<span class='notice'><b>Examine messages:</b></span>")
for(var/msg in B.examine_messages)
to_chat(src, "<span class='notice'>[msg]</span>")

View File

@@ -112,11 +112,17 @@
var/obj/belly/inside_belly = hostloc
var/mob/living/pred = inside_belly.owner
var/inside_desc = "No description."
if(host.absorbed && inside_belly.absorbed_desc)
inside_desc = inside_belly.absorbed_desc
else if(inside_belly.desc)
inside_desc = inside_belly.desc
inside = list(
"absorbed" = host.absorbed,
"belly_name" = inside_belly.name,
"belly_mode" = inside_belly.digest_mode,
"desc" = inside_belly.desc || "No description.",
"desc" = inside_desc,
"pred" = pred,
"ref" = "\ref[inside_belly]",
)
@@ -169,6 +175,7 @@
"item_mode" = selected.item_digest_mode,
"verb" = selected.vore_verb,
"desc" = selected.desc,
"absorbed_desc" = selected.absorbed_desc,
"fancy" = selected.fancy_vore,
"sound" = selected.vore_sound,
"release_sound" = selected.release_sound,
@@ -814,9 +821,19 @@
return FALSE
host.vore_selected.desc = new_desc
. = TRUE
if("b_absorbed_desc")
var/new_desc = html_encode(input(usr,"Belly Description for absorbed prey ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.absorbed_desc) as message|null)
if(new_desc)
new_desc = readd_quotes(new_desc)
if(length(new_desc) > BELLIES_DESC_MAX)
tgui_alert_async(usr, "Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error")
return FALSE
host.vore_selected.absorbed_desc = new_desc
. = TRUE
if("b_msgs")
tgui_alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message (500 for idle messages), max 10 messages per topic.","Really, don't.") // Should remain tgui_alert() (blocking)
var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. '%count' will be replaced with the number of anything in your belly (will not work for absorbed examine). '%countprey' will be replaced with the number of living prey in your belly (or absorbed prey for absorbed examine)."
var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. '%count' will be replaced with the number of anything in your belly. '%countprey' will be replaced with the number of living prey in your belly."
switch(params["msgtype"])
if("dmp")
var/new_message = input(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages("dmp")) as message
@@ -828,6 +845,26 @@
if(new_message)
host.vore_selected.set_messages(new_message,"dmo")
if("amp")
var/new_message = input(user,"These are sent to prey when their absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("amp")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"amp")
if("amo")
var/new_message = input(user,"These are sent to you when prey's absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("amo")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"amo")
if("uamp")
var/new_message = input(user,"These are sent to prey when their unnabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("uamp")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"uamp")
if("uamo")
var/new_message = input(user,"These are sent to you when prey's unabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("uamo")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"uamo")
if("smo")
var/new_message = input(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages("smo")) as message
if(new_message)
@@ -838,13 +875,23 @@
if(new_message)
host.vore_selected.set_messages(new_message,"smi")
if("asmo")
var/new_message = input(user,"These are sent to those nearby when absorbed prey struggles. Write them in 3rd person ('X's Y bulges'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (outside)",host.vore_selected.get_messages("asmo")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"asmo")
if("asmi")
var/new_message = input(user,"These are sent to absorbed prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (inside)",host.vore_selected.get_messages("asmi")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"asmi")
if("em")
var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages("em")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"em")
if("ema")
var/new_message = input(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger')."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages("ema")) as message
var/new_message = input(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages("ema")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"ema")
@@ -858,6 +905,11 @@
if(new_message)
host.vore_selected.set_messages(new_message,"im_hold")
if("im_holdabsorbed")
var/new_message = input(user,"These are sent to prey every minute when you are absorbed. Write them in 2nd person ('%pred's %belly squishes down on you.') %count will not work for this type, and %countprey will only count absorbed victims."+help,"Idle Message (Hold Absorbed)",host.vore_selected.get_messages("im_holdabsorbed")) as message
if(new_message)
host.vore_selected.set_messages(new_message,"im_holdabsorbed")
if("im_absorb")
var/new_message = input(user,"These are sent to prey every minute when you are on Absorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Absorb)",host.vore_selected.get_messages("im_absorb")) as message
if(new_message)
@@ -903,8 +955,14 @@
if(confirm == "DELETE")
host.vore_selected.digest_messages_prey = initial(host.vore_selected.digest_messages_prey)
host.vore_selected.digest_messages_owner = initial(host.vore_selected.digest_messages_owner)
host.vore_selected.absorb_messages_prey = initial(host.vore_selected.absorb_messages_prey)
host.vore_selected.absorb_messages_owner = initial(host.vore_selected.absorb_messages_owner)
host.vore_selected.unabsorb_messages_prey = initial(host.vore_selected.unabsorb_messages_prey)
host.vore_selected.unabsorb_messages_owner = initial(host.vore_selected.unabsorb_messages_owner)
host.vore_selected.struggle_messages_outside = initial(host.vore_selected.struggle_messages_outside)
host.vore_selected.struggle_messages_inside = initial(host.vore_selected.struggle_messages_inside)
host.vore_selected.absorbed_struggle_messages_outside = initial(host.vore_selected.absorbed_struggle_messages_outside)
host.vore_selected.absorbed_struggle_messages_inside = initial(host.vore_selected.absorbed_struggle_messages_inside)
host.vore_selected.examine_messages = initial(host.vore_selected.examine_messages)
host.vore_selected.examine_messages_absorbed = initial(host.vore_selected.examine_messages_absorbed)
host.vore_selected.emote_lists = initial(host.vore_selected.emote_lists)

View File

@@ -287,19 +287,27 @@ const VoreSelectedBelly = (props, context) => {
);
tabs[1] = (
<VoreSelectedBellyOptions belly={belly} />
<VoreSelectedBellyDescriptions belly={belly} />
);
tabs[2] = (
<VoreContentsPanel outside contents={contents} />
<VoreSelectedBellyOptions belly={belly} />
);
tabs[3] = (
<VoreSelectedBellyInteractions belly={belly} />
<VoreSelectedBellySounds belly={belly} />
);
tabs[4] = (
<VoreSelectedBellyStyles belly={belly} />
<VoreSelectedBellyVisuals belly={belly} />
);
tabs[5] = (
<VoreSelectedBellyInteractions belly={belly} />
);
tabs[6] = (
<VoreContentsPanel outside contents={contents} />
);
tabs[5] = (
@@ -317,16 +325,22 @@ const VoreSelectedBelly = (props, context) => {
Controls
</Tabs.Tab>
<Tabs.Tab selected={tabIndex === 1} onClick={() => setTabIndex(1)}>
Options
Descriptions
</Tabs.Tab>
<Tabs.Tab selected={tabIndex === 2} onClick={() => setTabIndex(2)}>
Contents ({contents.length})
Options
</Tabs.Tab>
<Tabs.Tab selected={tabIndex === 3} onClick={() => setTabIndex(3)}>
Interactions
Sounds
</Tabs.Tab>
<Tabs.Tab selected={tabIndex === 4} onClick={() => setTabIndex(4)}>
Belly Styles
Visuals
</Tabs.Tab>
<Tabs.Tab selected={tabIndex === 5} onClick={() => setTabIndex(5)}>
Interactions
</Tabs.Tab>
<Tabs.Tab selected={tabIndex === 6} onClick={() => setTabIndex(6)}>
Contents ({contents.length})
</Tabs.Tab>
<Tabs.Tab selected={tabIndex === 5} onClick={() => setTabIndex(5)}>
Liquid Options
@@ -348,8 +362,6 @@ const VoreSelectedBellyControls = (props, context) => {
belly_name,
mode,
item_mode,
verb,
desc,
addons,
} = belly;
@@ -379,13 +391,6 @@ const VoreSelectedBellyControls = (props, context) => {
onClick={() => act("set_attribute", { attribute: "b_mode" })}
content={mode} />
</LabeledList.Item>
<LabeledList.Item label="Flavor Text" buttons={
<Button
onClick={() => act("set_attribute", { attribute: "b_desc" })}
icon="pen" />
}>
{desc}
</LabeledList.Item>
<LabeledList.Item label="Mode Addons">
{addons.length && addons.join(", ") || "None"}
<Button
@@ -398,18 +403,60 @@ const VoreSelectedBellyControls = (props, context) => {
onClick={() => act("set_attribute", { attribute: "b_item_mode" })}
content={item_mode} />
</LabeledList.Item>
<LabeledList.Item basis="100%" mt={1}>
<Button.Confirm
fluid
icon="exclamation-triangle"
confirmIcon="trash"
color="red"
content="Delete Belly"
confirmContent="This is irreversable!"
onClick={() => act("set_attribute", { attribute: "b_del" })} />
</LabeledList.Item>
</LabeledList>
);
};
const VoreSelectedBellyDescriptions = (props, context) => {
const { act } = useBackend(context);
const { belly } = props;
const {
verb,
desc,
absorbed_desc,
} = belly;
return (
<LabeledList>
<LabeledList.Item label="Description" buttons={
<Button
onClick={() => act("set_attribute", { attribute: "b_desc" })}
icon="pen" />
}>
{desc}
</LabeledList.Item>
<LabeledList.Item label="Description (Absorbed)" buttons={
<Button
onClick={() => act("set_attribute", { attribute: "b_absorbed_desc" })}
icon="pen" />
}>
{absorbed_desc}
</LabeledList.Item>
<LabeledList.Item label="Vore Verb">
<Button
onClick={() => act("set_attribute", { attribute: "b_verb" })}
content={verb} />
</LabeledList.Item>
<LabeledList.Item label="Belly Messages">
<LabeledList.Item label="Examine Messages">
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "dmp" })}
content="Digest Message (to prey)" />
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "em" })}
content="Examine Message (when full)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "dmo" })}
content="Digest Message (to you)" />
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "ema" })}
content="Examine Message (with absorbed victims)" />
</LabeledList.Item>
<LabeledList.Item label="Struggle Messages">
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "smo" })}
content="Struggle Message (outside)" />
@@ -417,14 +464,39 @@ const VoreSelectedBellyControls = (props, context) => {
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "smi" })}
content="Struggle Message (inside)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "em" })}
content="Examine Message (when full)" />
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "asmo" })}
content="Absorbed Struggle Message (outside)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "ema" })}
content="Examine Message (with absorbed victims)" />
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "asmi" })}
content="Absorbed Struggle Message (inside)" />
</LabeledList.Item>
<LabeledList.Item label="Bellymode Messages">
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "dmp" })}
content="Digest Message (to prey)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "dmo" })}
content="Digest Message (to you)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "amp" })}
content="Absorb Message (to prey)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "amo" })}
content="Absorb Message (to you)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "uamp" })}
content="Unabsorb Message (to prey)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "uamo" })}
content="Unabsorb Message (to you)" />
</LabeledList.Item>
<LabeledList.Item label="Idle Messages">
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "im_hold" })}
content="Idle Messages (Hold)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "im_holdabsorbed" })}
content="Idle Messages (Hold Absorbed)" />
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "im_digest" })}
content="Idle Messages (Digest)" />
@@ -452,6 +524,8 @@ const VoreSelectedBellyControls = (props, context) => {
<Button
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "im_egg" })}
content="Idle Messages (Encase In Egg)" />
</LabeledList.Item>
<LabeledList.Item label="Reset Messages">
<Button
color="red"
onClick={() => act("set_attribute", { attribute: "b_msgs", msgtype: "reset" })}
@@ -466,11 +540,6 @@ const VoreSelectedBellyOptions = (props, context) => {
const { belly } = props;
const {
is_wet,
wet_loop,
fancy,
sound,
release_sound,
can_taste,
nutrition_percent,
digest_brute,
@@ -492,25 +561,12 @@ const VoreSelectedBellyOptions = (props, context) => {
<Flex wrap="wrap">
<Flex.Item basis="49%" grow={1}>
<LabeledList>
<LabeledList.Item label="Digest Brute Damage">
<LabeledList.Item label="Can Taste">
<Button
onClick={() => act("set_attribute", { attribute: "b_brute_dmg" })}
content={digest_brute} />
</LabeledList.Item>
<LabeledList.Item label="Digest Burn Damage">
<Button
onClick={() => act("set_attribute", { attribute: "b_burn_dmg" })}
content={digest_burn} />
</LabeledList.Item>
<LabeledList.Item label="Digest Suffocation Damage">
<Button
onClick={() => act("set_attribute", { attribute: "b_oxy_dmg" })}
content={digest_oxy} />
</LabeledList.Item>
<LabeledList.Item label="Nutritional Gain">
<Button
onClick={() => act("set_attribute", { attribute: "b_nutritionpercent" })}
content={nutrition_percent + "%"} />
onClick={() => act("set_attribute", { attribute: "b_tastes" })}
icon={can_taste ? "toggle-on" : "toggle-off"}
selected={can_taste}
content={can_taste ? "Yes" : "No"} />
</LabeledList.Item>
<LabeledList.Item label="Contaminates">
<Button
@@ -535,12 +591,58 @@ const VoreSelectedBellyOptions = (props, context) => {
</LabeledList.Item>
</Fragment>
) || null}
<LabeledList.Item label="Can Taste">
<LabeledList.Item label="Nutritional Gain">
<Button
onClick={() => act("set_attribute", { attribute: "b_tastes" })}
icon={can_taste ? "toggle-on" : "toggle-off"}
selected={can_taste}
content={can_taste ? "Yes" : "No"} />
onClick={() => act("set_attribute", { attribute: "b_nutritionpercent" })}
content={nutrition_percent + "%"} />
</LabeledList.Item>
<LabeledList.Item label="Required Examine Size">
<Button
onClick={() => act("set_attribute", { attribute: "b_bulge_size" })}
content={bulge_size * 100 + "%"} />
</LabeledList.Item>
<LabeledList.Item label="Display Absorbed Examines">
<Button
onClick={() => act("set_attribute", { attribute: "b_display_absorbed_examine" })}
icon={display_absorbed_examine ? "toggle-on" : "toggle-off"}
selected={display_absorbed_examine}
content={display_absorbed_examine ? "True" : "False"} />
</LabeledList.Item>
</LabeledList>
</Flex.Item>
<Flex.Item basis="49%" grow={1}>
<LabeledList>
<LabeledList.Item label="Idle Emotes">
<Button
onClick={() => act("set_attribute", { attribute: "b_emoteactive" })}
icon={emote_active ? "toggle-on" : "toggle-off"}
selected={emote_active}
content={emote_active ? "Active" : "Inactive"} />
</LabeledList.Item>
<LabeledList.Item label="Idle Emote Delay">
<Button
onClick={() => act("set_attribute", { attribute: "b_emotetime" })}
content={emote_time + " seconds"} />
</LabeledList.Item>
<LabeledList.Item label="Digest Brute Damage">
<Button
onClick={() => act("set_attribute", { attribute: "b_brute_dmg" })}
content={digest_brute} />
</LabeledList.Item>
<LabeledList.Item label="Digest Burn Damage">
<Button
onClick={() => act("set_attribute", { attribute: "b_burn_dmg" })}
content={digest_burn} />
</LabeledList.Item>
<LabeledList.Item label="Digest Suffocation Damage">
<Button
onClick={() => act("set_attribute", { attribute: "b_oxy_dmg" })}
content={digest_oxy} />
</LabeledList.Item>
<LabeledList.Item label="Shrink/Grow Size">
<Button
onClick={() => act("set_attribute", { attribute: "b_grow_shrink" })}
content={shrink_grow_size * 100 + "%"} />
</LabeledList.Item>
<LabeledList.Item label="Egg Type">
<Button
@@ -550,6 +652,24 @@ const VoreSelectedBellyOptions = (props, context) => {
</LabeledList.Item>
</LabeledList>
</Flex.Item>
</Flex>
);
};
const VoreSelectedBellySounds = (props, context) => {
const { act } = useBackend(context);
const { belly } = props;
const {
is_wet,
wet_loop,
fancy,
sound,
release_sound,
} = belly;
return (
<Flex wrap="wrap">
<Flex.Item basis="49%" grow={1}>
<LabeledList>
<LabeledList.Item label="Fleshy Belly">
@@ -589,6 +709,7 @@ const VoreSelectedBellyOptions = (props, context) => {
onClick={() => act("set_attribute", { attribute: "b_releasesoundtest" })}
icon="volume-up" />
</LabeledList.Item>
<<<<<<< HEAD
<LabeledList.Item label="Required Examine Size">
<Button
onClick={() => act("set_attribute", { attribute: "b_bulge_size" })}
@@ -625,92 +746,62 @@ const VoreSelectedBellyOptions = (props, context) => {
onClick={() => act("set_attribute", { attribute: "b_emotetime" })}
content={emote_time + " seconds"} />
</LabeledList.Item>
=======
>>>>>>> b19948a0832... Merge pull request #12021 from Heroman3003/more-absorb-vore
</LabeledList>
</Flex.Item>
<Flex.Item basis="100%" mt={1}>
<Button.Confirm
fluid
icon="exclamation-triangle"
confirmIcon="trash"
color="red"
content="Delete Belly"
confirmContent="This is irreversable!"
onClick={() => act("set_attribute", { attribute: "b_del" })} />
</Flex.Item>
</Flex>
);
};
const VoreContentsPanel = (props, context) => {
const { act, data } = useBackend(context);
const VoreSelectedBellyVisuals = (props, context) => {
const { act } = useBackend(context);
const { belly } = props;
const {
show_pictures,
} = data;
const {
contents,
belly,
outside = false,
} = props;
belly_fullscreen,
possible_fullscreens,
disable_hud,
} = belly;
return (
<Fragment>
{outside && (
<Button
textAlign="center"
fluid
mb={1}
onClick={() => act("pick_from_outside", { "pickall": true })}>
All
</Button>
) || null}
{show_pictures && (
<Flex wrap="wrap" justify="center" align="center">
{contents.map(thing => (
<Flex.Item key={thing.name} basis="33%">
<Button
width="64px"
color={thing.absorbed ? "purple" : stats[thing.stat]}
style={{
'vertical-align': 'middle',
'margin-right': '5px',
'border-radius': '20px',
}}
onClick={() => act(thing.outside ? "pick_from_outside" : "pick_from_inside", {
"pick": thing.ref,
"belly": belly,
})}>
<img
src={"data:image/jpeg;base64, " + thing.icon}
width="64px"
height="64px"
style={{
'-ms-interpolation-mode': 'nearest-neighbor',
'margin-left': '-5px',
}} />
</Button>
{thing.name}
</Flex.Item>
))}
</Flex>
) || (
<Section title="Vore FX">
<LabeledList>
{contents.map(thing => (
<LabeledList.Item key={thing.ref} label={thing.name}>
<Button
fluid
mt={-1}
mb={-1}
color={thing.absorbed ? "purple" : stats[thing.stat]}
onClick={() => act(thing.outside ? "pick_from_outside" : "pick_from_inside", {
"pick": thing.ref,
"belly": belly,
})}>
Interact
</Button>
</LabeledList.Item>
))}
<LabeledList.Item label="Disable Prey HUD">
<Button
onClick={() => act("set_attribute", { attribute: "b_disable_hud" })}
icon={disable_hud ? "toggle-on" : "toggle-off"}
selected={disable_hud}
content={disable_hud ? "Yes" : "No"} />
</LabeledList.Item>
</LabeledList>
)}
</Section>
<Section title="Belly Fullscreens">
<Button
fluid
selected={belly_fullscreen === "" || belly_fullscreen === null}
onClick={() => act("set_attribute", { attribute: "b_fullscreen", val: null })}>
Disabled
</Button>
{Object.keys(possible_fullscreens).map(key => (
<Button
key={key}
width="256px"
height="256px"
selected={key === belly_fullscreen}
onClick={() => act("set_attribute", { attribute: "b_fullscreen", val: key })}>
<Box
className={classes([
'vore240x240',
key,
])}
style={{
transform: 'translate(0%, 4%)',
}} />
</Button>
))}
</Section>
</Fragment>
);
};
@@ -824,11 +915,10 @@ const VoreSelectedBellyInteractions = (props, context) => {
);
};
const VoreSelectedBellyStyles = (props, context) => {
const { act } = useBackend(context);
const { belly } = props;
const VoreContentsPanel = (props, context) => {
const { act, data } = useBackend(context);
const {
<<<<<<< HEAD
belly_fullscreen,
belly_fullscreen_color,
mapRef,
@@ -896,6 +986,75 @@ const VoreSelectedBellyStyles = (props, context) => {
))}
</Section>
</Section>
=======
show_pictures,
} = data;
const {
contents,
belly,
outside = false,
} = props;
return (
<Fragment>
{outside && (
<Button
textAlign="center"
fluid
mb={1}
onClick={() => act("pick_from_outside", { "pickall": true })}>
All
</Button>
) || null}
{show_pictures && (
<Flex wrap="wrap" justify="center" align="center">
{contents.map(thing => (
<Flex.Item key={thing.name} basis="33%">
<Button
width="64px"
color={thing.absorbed ? "purple" : stats[thing.stat]}
style={{
'vertical-align': 'middle',
'margin-right': '5px',
'border-radius': '20px',
}}
onClick={() => act(thing.outside ? "pick_from_outside" : "pick_from_inside", {
"pick": thing.ref,
"belly": belly,
})}>
<img
src={"data:image/jpeg;base64, " + thing.icon}
width="64px"
height="64px"
style={{
'-ms-interpolation-mode': 'nearest-neighbor',
'margin-left': '-5px',
}} />
</Button>
{thing.name}
</Flex.Item>
))}
</Flex>
) || (
<LabeledList>
{contents.map(thing => (
<LabeledList.Item key={thing.ref} label={thing.name}>
<Button
fluid
mt={-1}
mb={-1}
color={thing.absorbed ? "purple" : stats[thing.stat]}
onClick={() => act(thing.outside ? "pick_from_outside" : "pick_from_inside", {
"pick": thing.ref,
"belly": belly,
})}>
Interact
</Button>
</LabeledList.Item>
))}
</LabeledList>
)}
>>>>>>> b19948a0832... Merge pull request #12021 from Heroman3003/more-absorb-vore
</Fragment>
);
};

File diff suppressed because one or more lines are too long