mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Adds more absorbs-related vore messages and rearranges vore panel a bit
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user