Move files and tweaks vore panel stuff

This commit is contained in:
Poojawa
2019-10-15 03:35:00 -05:00
parent 304eae3407
commit ff21b992ad
18 changed files with 137 additions and 132 deletions
@@ -35,8 +35,8 @@
/mob/living/simple_animal/proc/update_fullness(var/atom/movable/M)
var/new_fullness = 0
for(var/I in vore_organs)
var/datum/belly/B = vore_organs[I]
if (!(M in B.internal_contents))
var/obj/belly/B = vore_organs[I]
if (!(M in B.contents))
return FALSE // Nothing's inside
new_fullness += M
@@ -60,7 +60,7 @@
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
B.immutable = 1
B.immutable = TRUE
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
B.digest_mode = vore_default_mode
@@ -38,6 +38,7 @@
var/swallow_time = 10 SECONDS // for mob transfering automation
var/vore_capacity = 1 // simple animal nom capacity
var/is_wet = TRUE // Is this belly inside slimy parts?
var/wet_loop = TRUE // Does this belly have a slimy internal loop?
//I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY,DM_ABSORB,DM_UNABSORB) // Possible digest modes
@@ -138,7 +139,8 @@
"digest_messages_prey",
"examine_messages",
"emote_lists",
"is_wet"
"is_wet",
"wet_loop"
)
//ommitted list
@@ -152,13 +154,11 @@
SSbellies.belly_list += src
/obj/belly/Destroy()
SSbellies.belly_list -= src
if(owner)
Remove(owner)
return ..()
/obj/belly/proc/Remove(mob/living/owner)
owner.vore_organs -= src
owner = null
owner.vore_organs -= src
owner = null
. = ..()
// Called whenever an atom enters this belly
/obj/belly/Entered(var/atom/movable/thing,var/atom/OldLoc)
@@ -169,7 +169,7 @@
to_chat(owner,"<span class='notice'>[thing] slides into your [lowertext(name)].</span>")
//Sound w/ antispam flag setting
if(is_wet && (world.time > recent_sound))
if(vore_sound && (world.time > recent_sound))
var/turf/source = get_turf(owner)
var/sound/eating = GLOB.vore_sounds[vore_sound]
for(var/mob/living/M in get_hearers_in_view(3, source))
@@ -187,7 +187,7 @@
// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in.
// Returns the number of mobs so released.
/obj/belly/proc/release_all_contents(var/include_absorbed = FALSE, var/silent = FALSE)
var/atom/destination = drop_location()
// var/atom/destination = drop_location()
//Don't bother if we don't have contents
if(!contents.len)
return FALSE
@@ -207,22 +207,18 @@
SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
SEND_SIGNAL(OW, COMSIG_ADD_MOOD_EVENT, "emptypred", /datum/mood_event/emptypred)
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
AM.forceMove(destination) // Move the belly contents into the same location as belly's owner.
count++
for(var/mob/living/M in get_hearers_in_view(2, get_turf(owner)))
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
var/sound/releasement = GLOB.release_sounds[release_sound]
SEND_SOUND(M, releasement)
count += release_specific_contents(AM, silent = TRUE)
//Clean up our own business
items_preserved.Cut()
if(isanimal(owner))
owner.update_icons()
owner.update_icons()
if(!silent)
for(var/mob/living/M in get_hearers_in_view(2, get_turf(owner)))
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
var/sound/releasement = GLOB.release_sounds[release_sound]
SEND_SOUND(M, releasement)
owner.visible_message("<font color='green'><b>[owner] expels everything from their [lowertext(name)]!</b></font>")
items_preserved.Cut()
owner.update_icons()
return count
@@ -235,16 +231,13 @@
M.forceMove(drop_location()) // Move the belly contents into the same location as belly's owner.
items_preserved -= M
if(!silent)
for(var/mob/living/H in get_hearers_in_view(2, get_turf(owner)))
if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES))
var/sound/releasement = GLOB.release_sounds[release_sound]
SEND_SOUND(H, releasement)
if(istype(M,/mob/living))
var/mob/living/ML = M
var/mob/living/OW = owner
ML.stop_sound_channel(CHANNEL_PREYLOOP)
if(ML.client)
ML.stop_sound_channel(CHANNEL_PREYLOOP) //Stop the internal loop, it'll restart if the isbelly check on next tick anyway
ML.cure_blind("belly_[REF(src)]")
SEND_SIGNAL(OW, COMSIG_CLEAR_MOOD_EVENT, "fedpred", /datum/mood_event/fedpred)
SEND_SIGNAL(ML, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
@@ -263,12 +256,15 @@
Pred.reagents.trans_to(Prey, Pred.reagents.total_volume / absorbed_count)
//Clean up our own business
if(isanimal(owner))
owner.update_icons()
owner.update_icons()
if(!silent)
for(var/mob/living/H in get_hearers_in_view(2, get_turf(owner)))
if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES))
var/sound/releasement = GLOB.release_sounds[release_sound]
SEND_SOUND(H, releasement)
owner.visible_message("<font color='green'><b>[owner] expels [M] from their [lowertext(name)]!</b></font>")
owner.update_icons()
return TRUE
// Actually perform the mechanics of devouring the tasty prey.
@@ -312,13 +308,13 @@
/obj/belly/proc/transfer_contents(var/atom/movable/content, var/obj/belly/target, silent = FALSE)
if(!(content in src) || !istype(target))
return
content.forceMove(target)
for(var/mob/living/M in contents)
M.cure_blind("belly_[REF(src)]")
target.nom_mob(content, target.owner)
// target.nom_mob(content, target.owner)
if(!silent)
var/turf/source = get_turf(owner)
var/sound/eating = GLOB.vore_sounds[vore_sound]
for(var/mob/living/M in get_hearers_in_view(3, source))
for(var/mob/living/M in get_hearers_in_view(3, src))
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
SEND_SOUND(M, eating)
@@ -424,9 +420,12 @@
if(!M.dropItemToGround(W))
qdel(W)
//Incase they have the loop going, let's double check to stop it.
M.stop_sound_channel(CHANNEL_PREYLOOP)
// Delete the digested mob
qdel(M)
M.stop_sound_channel(CHANNEL_PREYLOOP)
//Update owner
owner.updateVRPanel()
@@ -470,7 +469,7 @@
/obj/belly/drop_location()
//Should be the case 99.99% of the time
if(owner)
return owner.loc
return owner.drop_location()
//Sketchy fallback for safety, put them somewhere safe.
else if(ismob(src))
testing("[src] (\ref[src]) doesn't have an owner, and dropped someone at a latespawn point!")
@@ -525,17 +524,16 @@
struggle_outer_message = "<span class='alert'>" + struggle_outer_message + "</span>"
struggle_user_message = "<span class='alert'>" + struggle_user_message + "</span>"
var/turf/source = get_turf(owner)
var/sound/struggle_snuggle = sound(get_sfx("struggle_sound"))
var/sound/struggle_rustle = sound(get_sfx("rustle"))
if(is_wet)
for(var/mob/living/M in get_hearers_in_view(3, source))
for(var/mob/living/M in get_hearers_in_view(3, src))
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
SEND_SOUND(M, struggle_snuggle)
else
for(var/mob/living/M in get_hearers_in_view(3, source))
for(var/mob/living/M in get_hearers_in_view(3, src))
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
SEND_SOUND(M, struggle_rustle)
@@ -551,8 +549,10 @@
to_chat(R,"<span class='warning'>You start to climb out of \the [lowertext(name)].</span>")
to_chat(owner,"<span class='warning'>Someone is attempting to climb out of your [lowertext(name)]!</span>")
if(do_after(R, escapetime))
if((owner.stat || escapable) && (R.loc == src)) //Can still escape?
if((escapable) && (R.loc == src)) //Can still escape?
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>")
return
else if(R.loc != src) //Aren't even in the belly. Quietly fail.
return
@@ -641,6 +641,7 @@
dupe.swallow_time = swallow_time
dupe.vore_capacity = vore_capacity
dupe.is_wet = is_wet
dupe.wet_loop = wet_loop
//// Object-holding variables
//struggle_messages_outside - strings
@@ -31,7 +31,7 @@
for(var/mob/living/M in contents)
if(isbelly(M.loc))
if(world.time > M.next_preyloop)
if(is_wet)
if(is_wet && wet_loop)
if(!M.client)
continue
M.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
@@ -8,7 +8,7 @@
var/feeding = FALSE // Are we going to feed someone else?
var/vore_taste = null // What the character tastes like
var/no_vore = FALSE // If the character/mob can vore.
var/openpanel = 0 // Is the vore panel open?
var/openpanel = FALSE // Is the vore panel open?
var/absorbed = FALSE //are we absorbed?
var/next_preyloop
var/vore_init = FALSE //Has this mob's vore been initialized yet?
@@ -23,7 +23,7 @@
M.verbs += /mob/living/proc/escapeOOC
if(M.no_vore) //If the mob isn't supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach.
return 1
return TRUE
M.verbs += /mob/living/proc/insidePanel
//Tries to load prefs if a client is present otherwise gives freebie stomach
@@ -31,8 +31,8 @@
if(M)
M.init_vore()
//Return 1 to hook-caller
return 1
//return TRUE to hook-caller
return TRUE
/mob/living/proc/init_vore()
vore_init = TRUE
@@ -54,10 +54,10 @@
LAZYINITLIST(vore_organs)
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
B.immutable = 1
B.immutable = TRUE
B.name = "Stomach"
B.desc = "It appears to be rather warm and wet. Makes sense, considering it's inside [name]."
B.can_taste = 1
B.can_taste = TRUE
return TRUE
// Handle being clicked, perhaps with something to devour
@@ -183,7 +183,7 @@
if(prey.ckey)
prey_stat = prey.stat//only return this if they're not an unmonkey or whatever
if(!prey.client)//if they disconnected, tell us
prey_braindead = 1
prey_braindead = TRUE
if (pred == user)
message_admins("[ADMIN_LOOKUPFLW(pred)] ate [ADMIN_LOOKUPFLW(prey)][!prey_braindead ? "" : " (BRAINDEAD)"][prey_stat ? " (DEAD/UNCONSCIOUS)" : ""].")
pred.log_message("[key_name(pred)] ate [key_name(prey)].", LOG_ATTACK)
@@ -212,7 +212,7 @@
//Other overridden resists go here
return 0
return FALSE
// internal slimy button in case the loop stops playing but the player wants to hear it
/mob/living/proc/preyloop_refresh()
@@ -265,28 +265,28 @@
//
/mob/living/proc/save_vore_prefs()
if(!client || !client.prefs_vr)
return 0
return FALSE
if(!copy_to_prefs_vr())
return 0
return FALSE
if(!client.prefs_vr.save_vore())
return 0
return FALSE
return 1
return TRUE
/mob/living/proc/apply_vore_prefs()
if(!client || !client.prefs_vr)
return 0
return FALSE
if(!client.prefs_vr.load_vore())
return 0
return FALSE
if(!copy_from_prefs_vr())
return 0
return FALSE
return 1
return TRUE
/mob/living/proc/copy_to_prefs_vr()
if(!client || !client.prefs_vr)
to_chat(src,"<span class='warning'>You attempted to save your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev.</span>")
return 0
return FALSE
var/datum/vore_preferences/P = client.prefs_vr
@@ -302,7 +302,7 @@
P.belly_prefs = serialized
return 1
return TRUE
//
// Proc for applying vore preferences, given bellies
@@ -310,7 +310,7 @@
/mob/living/proc/copy_from_prefs_vr()
if(!client || !client.prefs_vr)
to_chat(src,"<span class='warning'>You attempted to apply your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev.</span>")
return 0
return FALSE
vorepref_init = TRUE
var/datum/vore_preferences/P = client.prefs_vr
@@ -325,7 +325,7 @@
for(var/entry in P.belly_prefs)
list_to_object(entry,src)
return 1
return TRUE
//
// Release everything in every vore organ
@@ -84,22 +84,22 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
/datum/vore_preferences/proc/load_vore()
if(!client || !client_ckey)
return 0 //No client, how can we save?
return FALSE //No client, how can we save?
if(!client.prefs || !client.prefs.default_slot)
return 0 //Need to know what character to load!
return FALSE //Need to know what character to load!
slot = client.prefs.default_slot
load_path(client_ckey,slot)
if(!path) return 0 //Path couldn't be set?
if(!path) return FALSE //Path couldn't be set?
if(!fexists(path)) //Never saved before
save_vore() //Make the file first
return 1
return TRUE
var/list/json_from_file = json_decode(file2text(path))
if(!json_from_file)
return 0 //My concern grows
return FALSE //My concern grows
var/version = json_from_file["version"]
json_from_file = patch_version(json_from_file,version)
@@ -120,11 +120,11 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
if(isnull(belly_prefs))
belly_prefs = list()
return 1
return TRUE
/datum/vore_preferences/proc/save_vore()
if(!path)
return 0
return FALSE
var/version = VORE_VERSION //For "good times" use in the future
var/list/settings_list = list(
@@ -140,7 +140,7 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
var/json_to_file = json_encode(settings_list)
if(!json_to_file)
testing("Saving: [path] failed jsonencode")
return 0
return FALSE
//Write it out
//#ifdef RUST_G
@@ -153,9 +153,9 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums)
//#endif
if(!fexists(path))
testing("Saving: [path] failed file write")
return 0
return FALSE
return 1
return TRUE
/* commented out list things
"allowmobvore" = allowmobvore,
@@ -21,10 +21,10 @@
picker_holder.popup = new(src, "insidePanel","Vore Panel", 450, 700, picker_holder)
picker_holder.popup.set_content(dat)
picker_holder.popup.open()
src.openpanel = 1
src.openpanel = TRUE
/mob/living/proc/updateVRPanel() //Panel popup update call from belly events.
if(src.openpanel == 1)
if(src.openpanel == TRUE)
var/datum/vore_look/picker_holder = new()
picker_holder.loop = picker_holder
picker_holder.selected = vore_selected
@@ -40,7 +40,7 @@
//
/datum/vore_look
var/obj/belly/selected
var/show_interacts = 0
var/show_interacts = FALSE
var/datum/browser/popup
var/loop = null; // Magic self-reference to stop the handler from being GC'd before user takes action.
@@ -163,6 +163,9 @@
//Belly Type button
dat += "<br><a href='?src=\ref[src];b_wetness=\ref[selected]'>Is Fleshy:</a>"
dat += "[selected.is_wet ? "Yes" : "No"]"
if(selected.is_wet)
dat += "<br><a href='?src=\ref[src];b_wetloop=\ref[selected]'>Internal loop for prey?:</a>"
dat += "[selected.wet_loop ? "Yes" : "No"]"
//Digest Mode Button
dat += "<br><a href='?src=\ref[src];b_mode=\ref[selected]'>Belly Mode:</a>"
@@ -241,21 +244,19 @@
dat += "<HR>"
switch(user.digestable)
if(TRUE)
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable <font color='darkgreen'>(Currently: ON)</font></a>"
dat += "<br><a style='background:#173d15;' href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: ON)</a>"
if(FALSE)
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable <font color='red'>(Currently: OFF)</font></a>"
dat += "<br><a style='background:#990000;' href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: OFF)</a>"
switch(user.devourable)
if(TRUE)
dat += "<br><a href='?src=\ref[src];toggledvor=1'>Toggle Devourable <font color='darkgreen'>(Currently: ON)</font></a>"
dat += "<br><a style='background:#173d15;' href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: ON)</a>"
if(FALSE)
dat += "<br><a href='?src=\ref[src];toggledvor=1'>Toggle Devourable <font color='red'>(Currently: OFF)</font></a>"
dat += "<br><a style='background:#990000;' href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: OFF)</a>"
switch(user.feeding)
if(TRUE)
dat += "<br><a href='?src=\ref[src];toggledfeed=1'>Toggle Feeding <font color='darkgreen'>(Currently: ON)</font></a>"
dat += "<br><a style='background:#173d15;' href='?src=\ref[src];toggledfeed=1'>Toggle Feeding (Currently: ON)</a>"
if(FALSE)
dat += "<br><a href='?src=\ref[src];toggledfeed=1'>Toggle Feeding <font color='red'>(Currently: OFF)</font></a>"
dat += "<br><a style='background:#990000;' href='?src=\ref[src];toggledfeed=1'>Toggle Feeding (Currently: OFF)</a>"
//Returns the dat html to the vore_look
return dat
@@ -266,12 +267,12 @@
if(href_list["close"])
qdel(src) // Cleanup
user.openpanel = 0
user.openpanel = FALSE
return
if(href_list["show_int"])
show_interacts = !show_interacts
return 1 //Force update
return TRUE //Force update
if(href_list["int_help"])
alert("These control how your belly responds to someone using 'resist' while inside you. The percent chance to trigger each is listed below, \
@@ -279,13 +280,13 @@
These only function as long as interactions are turned on in general. Keep in mind, the 'belly mode' interactions (digest/absorb) \
will affect all prey in that belly, if one resists and triggers digestion/absorption. If multiple trigger at the same time, \
only the first in the order of 'Escape > Transfer > Absorb > Digest' will occur.","Interactions Help")
return 0 //Force update
return FALSE //Force update
if(href_list["outsidepick"])
var/atom/movable/tgt = locate(href_list["outsidepick"])
var/obj/belly/OB = locate(href_list["outsidebelly"])
if(!(tgt in OB)) //Aren't here anymore, need to update menu.
return 1
return TRUE
var/intent = "Examine"
if(istype(tgt,/mob/living))
@@ -298,7 +299,7 @@
if("Help Out") //Help the inside-mob out
if(user.stat || user.absorbed || M.absorbed)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 1
return TRUE
to_chat(user,"<font color='green'>You begin to push [M] to freedom!</font>")
to_chat(M,"[usr] begins to push you to freedom!")
@@ -317,11 +318,11 @@
if("Devour") //Eat the inside mob
if(user.absorbed || user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 1
return TRUE
if(!user.vore_selected)
to_chat(user,"<span class='warning'>Pick a belly on yourself first!</span>")
return 1
return TRUE
var/obj/belly/TB = user.vore_selected
to_chat(user,"<span class='warning'>You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!</span>")
@@ -339,7 +340,7 @@
var/obj/item/T = tgt
if(!(tgt in OB))
//Doesn't exist anymore, update.
return 1
return TRUE
intent = alert("What do you want to do to that?","Query","Examine","Use Hand")
switch(intent)
if("Examine")
@@ -348,7 +349,7 @@
if("Use Hand")
if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 1
return TRUE
user.ClickOn(T)
sleep(5) //Seems to exit too fast for the panel to update
@@ -361,23 +362,23 @@
intent = alert("Eject all, Move all?","Query","Eject all","Cancel","Move all")
switch(intent)
if("Cancel")
return 0
return FALSE
if("Eject all")
if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 0
return FALSE
selected.release_all_contents()
if("Move all")
if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 0
return FALSE
var/obj/belly/choice = input("Move all where?","Select Belly") as null|anything in user.vore_organs
if(!choice)
return 0
return FALSE
for(var/atom/movable/tgt in selected)
to_chat(tgt,"<span class='warning'>You're squished from [user]'s [lowertext(selected)] to their [lowertext(choice.name)]!</span>")
@@ -385,7 +386,7 @@
var/atom/movable/tgt = locate(href_list["insidepick"])
if(!(tgt in selected)) //Old menu, needs updating because they aren't really there.
return 1 //Forces update
return TRUE //Forces update
intent = "Examine"
intent = alert("Examine, Eject, Move? Examine if you want to leave this box.","Query","Examine","Eject","Move")
switch(intent)
@@ -395,25 +396,25 @@
if("Eject")
if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 0
return FALSE
selected.release_specific_contents(tgt)
if("Move")
if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 0
return FALSE
var/obj/belly/choice = input("Move [tgt] where?","Select Belly") as null|anything in user.vore_organs
if(!choice || !(tgt in selected))
return 0
return FALSE
to_chat(tgt,"<span class='warning'>You're squished from [user]'s [lowertext(selected.name)] to their [lowertext(choice.name)]!</span>")
selected.transfer_contents(tgt, choice)
if(href_list["newbelly"])
if(user.vore_organs.len >= BELLIES_MAX)
return 0
return FALSE
var/new_name = html_encode(input(usr,"New belly's name:","New Belly") as text|null)
@@ -430,7 +431,7 @@
if(failure_msg) //Something went wrong.
alert(user,failure_msg,"Error!")
return 0
return FALSE
var/obj/belly/NB = new(user)
NB.name = new_name
@@ -459,19 +460,22 @@
if(failure_msg) //Something went wrong.
alert(user,failure_msg,"Error!")
return 0
return FALSE
selected.name = new_name
if(href_list["b_wetness"])
selected.is_wet = !selected.is_wet
if(href_list["b_wetloop"])
selected.wet_loop = !selected.wet_loop
if(href_list["b_mode"])
var/list/menu_list = selected.digest_modes
var/new_mode = input("Choose Mode (currently [selected.digest_mode])") as null|anything in menu_list
if(!new_mode)
return 0
return FALSE
selected.digest_mode = new_mode
if(href_list["b_desc"])
@@ -539,7 +543,7 @@
if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN)
alert("Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error")
return 0
return FALSE
selected.vore_verb = new_verb
@@ -586,17 +590,17 @@
selected.bulge_size = (new_bulge/100)
if(href_list["b_escapable"])
if(selected.escapable == 0) //Possibly escapable and special interactions.
selected.escapable = 1
if(selected.escapable == FALSE) //Possibly escapable and special interactions.
selected.escapable = TRUE
to_chat(usr,"<span class='warning'>Prey now have special interactions with your [lowertext(selected.name)] depending on your settings.</span>")
else if(selected.escapable == 1) //Never escapable.
selected.escapable = 0
else if(selected.escapable == TRUE) //Never escapable.
selected.escapable = FALSE
to_chat(usr,"<span class='warning'>Prey will not be able to have special interactions with your [lowertext(selected.name)].</span>")
show_interacts = 0 //Force the hiding of the panel
show_interacts = FALSE //Force the hiding of the panel
else
alert("Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.","Error") //If they somehow have a varable that's not 0 or 1
selected.escapable = 0
show_interacts = 0 //Force the hiding of the panel
selected.escapable = FALSE
show_interacts = FALSE //Force the hiding of the panel
if(href_list["b_escapechance"])
var/escape_chance_input = input(user, "Set prey escape chance on resist (as %)", "Prey Escape Chance") as num|null
@@ -617,7 +621,7 @@
var/obj/belly/choice = input("Where do you want your [lowertext(selected.name)] to lead if prey resists?","Select Belly") as null|anything in (user.vore_organs + "None - Remove" - selected)
if(!choice) //They cancelled, no changes
return 0
return FALSE
else if(choice == "None - Remove")
selected.transferlocation = null
else
@@ -636,7 +640,7 @@
if(href_list["b_del"])
var/alert = alert("Are you sure you want to delete your [lowertext(selected.name)]?","Confirmation","Delete","Cancel")
if(!alert == "Delete")
return 0
return FALSE
var/failure_msg = ""
@@ -657,7 +661,7 @@
if(failure_msg)
alert(user,failure_msg,"Error!")
return 0
return FALSE
qdel(selected)
selected = user.vore_organs[1]
@@ -674,7 +678,7 @@
if(href_list["applyprefs"])
var/alert = alert("Are you sure you want to reload character slot preferences? This will remove your current vore organs and eject their contents.","Confirmation","Reload","Cancel")
if(!alert == "Reload")
return 0
return FALSE
if(!user.apply_vore_prefs())
alert("ERROR: Vore preferences failed to apply!","Error")
else
@@ -683,19 +687,19 @@
if(href_list["setflavor"])
var/new_flavor = html_encode(input(usr,"What your character tastes like (40ch limit). This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream':","Character Flavor",user.vore_taste) as text|null)
if(!new_flavor)
return 0
return FALSE
new_flavor = readd_quotes(new_flavor)
if(length(new_flavor) > FLAVOR_MAX)
alert("Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error!")
return 0
return FALSE
user.vore_taste = new_flavor
if(href_list["toggledg"])
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable to all mobs. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
switch(choice)
if("Cancel")
return 0
return FALSE
if("Allow Digestion")
user.digestable = TRUE
if("Prevent Digestion")
@@ -708,7 +712,7 @@
var/choice = alert(user, "This button is for those who don't like vore at all. Devouring you is currently: [user.devourable ? "Allowed" : "Prevented"]", "", "Allow Devourment", "Cancel", "Prevent Devourment")
switch(choice)
if("Cancel")
return 0
return FALSE
if("Allow Devourment")
user.devourable = TRUE
if("Prevent Devourment")
@@ -721,7 +725,7 @@
var/choice = alert(user, "This button is to toggle your ability to be fed to others. Feeding predators is currently: [user.feeding ? "Allowed" : "Prevented"]", "", "Allow Feeding", "Cancel", "Prevent Feeding")
switch(choice)
if("Cancel")
return 0
return FALSE
if("Allow Feeding")
user.feeding = TRUE
if("Prevent Feeding")
@@ -731,4 +735,4 @@
user.client.prefs_vr.feeding = user.feeding
//Refresh when interacted with, returning 1 makes vore_look.Topic update
return 1
return TRUE
+11 -11
View File
@@ -2887,6 +2887,17 @@
#include "code\modules\vending\toys.dm"
#include "code\modules\vending\wardrobes.dm"
#include "code\modules\vending\youtool.dm"
#include "code\modules\vore\hook-defs.dm"
#include "code\modules\vore\persistence.dm"
#include "code\modules\vore\trycatch.dm"
#include "code\modules\vore\eating\belly_dat_vr.dm"
#include "code\modules\vore\eating\belly_obj.dm"
#include "code\modules\vore\eating\bellymodes.dm"
#include "code\modules\vore\eating\digest_act.dm"
#include "code\modules\vore\eating\living.dm"
#include "code\modules\vore\eating\vore.dm"
#include "code\modules\vore\eating\voreitems.dm"
#include "code\modules\vore\eating\vorepanel.dm"
#include "code\modules\VR\vr_mob.dm"
#include "code\modules\VR\vr_sleeper.dm"
#include "code\modules\zombie\items.dm"
@@ -3109,16 +3120,5 @@
#include "modular_citadel\code\modules\research\techweb\_techweb.dm"
#include "modular_citadel\code\modules\research\xenobiology\xenobio_camera.dm"
#include "modular_citadel\code\modules\vehicles\secway.dm"
#include "modular_citadel\code\modules\vore\hook-defs_vr.dm"
#include "modular_citadel\code\modules\vore\persistence.dm"
#include "modular_citadel\code\modules\vore\trycatch_vr.dm"
#include "modular_citadel\code\modules\vore\eating\belly_dat_vr.dm"
#include "modular_citadel\code\modules\vore\eating\belly_obj_vr.dm"
#include "modular_citadel\code\modules\vore\eating\bellymodes_vr.dm"
#include "modular_citadel\code\modules\vore\eating\digest_act_vr.dm"
#include "modular_citadel\code\modules\vore\eating\living_vr.dm"
#include "modular_citadel\code\modules\vore\eating\vore_vr.dm"
#include "modular_citadel\code\modules\vore\eating\voreitems.dm"
#include "modular_citadel\code\modules\vore\eating\vorepanel_vr.dm"
#include "modular_citadel\interface\skin.dmf"
// END_INCLUDE