Merge pull request #6060 from Poojawa/Feeding-prefs

Adds 'Devourable" and 'feeding' prefs
This commit is contained in:
Novacat
2019-10-17 02:57:36 -04:00
committed by GitHub
104 changed files with 226 additions and 112 deletions

View File

@@ -1,6 +1,8 @@
///////////////////// Mob Living ///////////////////// ///////////////////// Mob Living /////////////////////
/mob/living /mob/living
var/digestable = TRUE // Can the mob be digested inside a belly? var/digestable = TRUE // Can the mob be digested inside a belly?
var/devourable = TRUE // Can the mob be devoured at all?
var/feeding = TRUE // Can the mob be vorishly force fed or fed to others?
var/digest_leave_remains = FALSE // Will this mob leave bones/skull/etc after the melty demise? var/digest_leave_remains = FALSE // Will this mob leave bones/skull/etc after the melty demise?
var/allowmobvore = TRUE // Will simplemobs attempt to eat the mob? var/allowmobvore = TRUE // Will simplemobs attempt to eat the mob?
var/showvoreprefs = TRUE // Determines if the mechanical vore preferences button will be displayed on the mob or not. var/showvoreprefs = TRUE // Determines if the mechanical vore preferences button will be displayed on the mob or not.
@@ -35,7 +37,7 @@
M.verbs += /mob/living/proc/lick M.verbs += /mob/living/proc/lick
M.verbs += /mob/living/proc/switch_scaling M.verbs += /mob/living/proc/switch_scaling
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. 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 M.verbs += /mob/living/proc/insidePanel
//Tries to load prefs if a client is present otherwise gives freebie stomach //Tries to load prefs if a client is present otherwise gives freebie stomach
@@ -43,8 +45,8 @@
if(M) if(M)
M.init_vore() M.init_vore()
//Return 1 to hook-caller //return TRUE to hook-caller
return 1 return TRUE
/mob/living/proc/init_vore() /mob/living/proc/init_vore()
//Something else made organs, meanwhile. //Something else made organs, meanwhile.
@@ -65,10 +67,10 @@
LAZYINITLIST(vore_organs) LAZYINITLIST(vore_organs)
var/obj/belly/B = new /obj/belly(src) var/obj/belly/B = new /obj/belly(src)
vore_selected = B vore_selected = B
B.immutable = 1 B.immutable = TRUE
B.name = "Stomach" B.name = "Stomach"
B.desc = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [name]." B.desc = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [name]."
B.can_taste = 1 B.can_taste = TRUE
return TRUE return TRUE
// //
@@ -93,29 +95,45 @@
var/mob/living/attacker = user // Typecast to living var/mob/living/attacker = user // Typecast to living
// src is the mob clicked on // src is the mob clicked on and attempted predator
///// If grab clicked on grabber ///// If user clicked on themselves
if((src == G.assailant) && (is_vore_predator(src))) if((src == G.assailant) && (is_vore_predator(src)))
if (src.feed_grabbed_to_self(src, G.affecting)) if(!(G.affecting.devourable))
to_chat(user, "<span class='notice'>They aren't able to be devoured.</span>")
return FALSE
if(src.feed_grabbed_to_self(src, G.affecting))
qdel(G) qdel(G)
return 1 return TRUE
else else
log_debug("[attacker] attempted to feed [G.affecting] to [user] ([user.type]) but it failed.") log_debug("[attacker] attempted to feed [G.affecting] to [user] ([user.type]) but it failed.")
///// If grab clicked on grabbed ///// If user clicked on their grabbed target
else if((src == G.affecting) && (attacker.a_intent == I_GRAB) && (attacker.zone_sel.selecting == BP_TORSO) && (is_vore_predator(G.affecting))) else if((src == G.affecting) && (attacker.a_intent == I_GRAB) && (attacker.zone_sel.selecting == BP_TORSO) && (is_vore_predator(G.affecting)))
if(!(G.affecting.feeding))
to_chat(user, "<span class='notice'>[G.affecting] isn't willing to be fed.</span>")
return FALSE
if (attacker.feed_self_to_grabbed(attacker, G.affecting)) if (attacker.feed_self_to_grabbed(attacker, G.affecting))
qdel(G) qdel(G)
return 1 return TRUE
else else
log_debug("[attacker] attempted to feed [user] to [G.affecting] ([G.affecting.type]) but it failed.") log_debug("[attacker] attempted to feed [user] to [G.affecting] ([G.affecting.type]) but it failed.")
///// If grab clicked on anyone else ///// If user clicked on anyone else but their grabbed target
else if((src != G.affecting) && (src != G.assailant) && (is_vore_predator(src))) else if((src != G.affecting) && (src != G.assailant) && (is_vore_predator(src)))
if(!(src.feeding))
to_chat(user, "<span class='notice'>[src] isn't willing to be fed.</span>")
return FALSE
if(!(G.affecting.devourable))
to_chat(user, "<span class='notice'>[G.affecting] isn't able to be devoured.</span>")
return FALSE
if(!(G.affecting.feeding))
to_chat(user, "<span class='notice'>[src] isn't able to be fed to someone.</span>")
return FALSE
if (attacker.feed_grabbed_to_other(attacker, G.affecting, src)) if (attacker.feed_grabbed_to_other(attacker, G.affecting, src))
qdel(G) qdel(G)
return 1 return TRUE
else else
log_debug("[attacker] attempted to feed [G.affecting] to [src] ([src.type]) but it failed.") log_debug("[attacker] attempted to feed [G.affecting] to [src] ([src.type]) but it failed.")
@@ -123,7 +141,7 @@
else if(istype(I,/obj/item/weapon/holder)) else if(istype(I,/obj/item/weapon/holder))
var/obj/item/weapon/holder/H = I var/obj/item/weapon/holder/H = I
if(!isliving(user)) return 0 // Return 0 to continue upper procs if(!isliving(user)) return FALSE // return FALSE to continue upper procs
var/mob/living/attacker = user // Typecast to living var/mob/living/attacker = user // Typecast to living
if (is_vore_predator(src)) if (is_vore_predator(src))
@@ -131,7 +149,7 @@
if (attacker.eat_held_mob(attacker, M, src)) if (attacker.eat_held_mob(attacker, M, src))
if (H.held_mob == M) if (H.held_mob == M)
H.held_mob = null H.held_mob = null
return 1 //Return 1 to exit upper procs return TRUE //return TRUE to exit upper procs
else else
log_debug("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.") log_debug("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.")
@@ -141,16 +159,16 @@
if(confirm == "Yes!") if(confirm == "Yes!")
var/obj/belly/B = input("Which belly?","Select A Belly") as null|anything in vore_organs var/obj/belly/B = input("Which belly?","Select A Belly") as null|anything in vore_organs
if(!istype(B)) if(!istype(B))
return 1 return TRUE
visible_message("<span class='warning'>[user] is trying to stuff a beacon into [src]'s [lowertext(B.name)]!</span>","<span class='warning'>[user] is trying to stuff a beacon into you!</span>") visible_message("<span class='warning'>[user] is trying to stuff a beacon into [src]'s [lowertext(B.name)]!</span>","<span class='warning'>[user] is trying to stuff a beacon into you!</span>")
if(do_after(user,30,src)) if(do_after(user,30,src))
user.drop_item() user.drop_item()
I.forceMove(B) I.forceMove(B)
return 1 return TRUE
else else
return 1 //You don't get to hit someone 'later' return TRUE //You don't get to hit someone 'later'
return 0 return FALSE
// //
// Our custom resist catches for /mob/living // Our custom resist catches for /mob/living
@@ -165,39 +183,41 @@
//Other overridden resists go here //Other overridden resists go here
return 0 return FALSE
// //
// Verb for saving vore preferences to save file // Verb for saving vore preferences to save file
// //
/mob/living/proc/save_vore_prefs() /mob/living/proc/save_vore_prefs()
if(!client || !client.prefs_vr) if(!client || !client.prefs_vr)
return 0 return FALSE
if(!copy_to_prefs_vr()) if(!copy_to_prefs_vr())
return 0 return FALSE
if(!client.prefs_vr.save_vore()) if(!client.prefs_vr.save_vore())
return 0 return FALSE
return 1 return TRUE
/mob/living/proc/apply_vore_prefs() /mob/living/proc/apply_vore_prefs()
if(!client || !client.prefs_vr) if(!client || !client.prefs_vr)
return 0 return FALSE
if(!client.prefs_vr.load_vore()) if(!client.prefs_vr.load_vore())
return 0 return FALSE
if(!copy_from_prefs_vr()) if(!copy_from_prefs_vr())
return 0 return FALSE
return 1 return TRUE
/mob/living/proc/copy_to_prefs_vr() /mob/living/proc/copy_to_prefs_vr()
if(!client || !client.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>") 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 var/datum/vore_preferences/P = client.prefs_vr
P.digestable = src.digestable P.digestable = src.digestable
P.devourable = src.devourable
P.feeding = src.feeding
P.digest_leave_remains = src.digest_leave_remains P.digest_leave_remains = src.digest_leave_remains
P.allowmobvore = src.allowmobvore P.allowmobvore = src.allowmobvore
P.vore_taste = src.vore_taste P.vore_taste = src.vore_taste
@@ -212,7 +232,7 @@
P.belly_prefs = serialized P.belly_prefs = serialized
return 1 return TRUE
// //
// Proc for applying vore preferences, given bellies // Proc for applying vore preferences, given bellies
@@ -220,11 +240,13 @@
/mob/living/proc/copy_from_prefs_vr() /mob/living/proc/copy_from_prefs_vr()
if(!client || !client.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>") 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
var/datum/vore_preferences/P = client.prefs_vr var/datum/vore_preferences/P = client.prefs_vr
digestable = P.digestable digestable = P.digestable
devourable = P.devourable
feeding = P.feeding
digest_leave_remains = P.digest_leave_remains digest_leave_remains = P.digest_leave_remains
allowmobvore = P.allowmobvore allowmobvore = P.allowmobvore
vore_taste = P.vore_taste vore_taste = P.vore_taste
@@ -237,7 +259,7 @@
for(var/entry in P.belly_prefs) for(var/entry in P.belly_prefs)
list_to_object(entry,src) list_to_object(entry,src)
return 1 return TRUE
// //
// Release everything in every vore organ // Release everything in every vore organ
@@ -305,7 +327,7 @@
/mob/living/proc/get_taste_message(allow_generic = 1) /mob/living/proc/get_taste_message(allow_generic = 1)
if(!vore_taste && !allow_generic) if(!vore_taste && !allow_generic)
return 0 return FALSE
var/taste_message = "" var/taste_message = ""
if(vore_taste && (vore_taste != "")) if(vore_taste && (vore_taste != ""))
@@ -411,7 +433,7 @@
var/user_to_prey = get_dist(get_turf(user),get_turf(prey)) var/user_to_prey = get_dist(get_turf(user),get_turf(prey))
if(user_to_pred > 1 || user_to_prey > 1) if(user_to_pred > 1 || user_to_prey > 1)
return 0 return FALSE
// Prepare messages // Prepare messages
if(user == pred) //Feeding someone to yourself if(user == pred) //Feeding someone to yourself
@@ -433,7 +455,7 @@
//Timer and progress bar //Timer and progress bar
if(!do_after(user, swallow_time, prey)) if(!do_after(user, swallow_time, prey))
return 0 // Prey escpaed (or user disabled) before timer expired. return FALSE // Prey escpaed (or user disabled) before timer expired.
// If we got this far, nom successful! Announce it! // If we got this far, nom successful! Announce it!
user.visible_message(success_msg) user.visible_message(success_msg)
@@ -452,7 +474,7 @@
add_attack_logs(pred,prey,"Eaten via [belly.name]") add_attack_logs(pred,prey,"Eaten via [belly.name]")
else else
add_attack_logs(user,pred,"Forced to eat [key_name(prey)]") add_attack_logs(user,pred,"Forced to eat [key_name(prey)]")
return 1 return TRUE
// //
// Magical pred-air breathing for inside preds // Magical pred-air breathing for inside preds
@@ -685,11 +707,13 @@
if("CHAT_LOOC" in client.prefs.preferences_disabled) if("CHAT_LOOC" in client.prefs.preferences_disabled)
dispvoreprefs += "<font color='red'><b>LOOC DISABLED</b></font><br>" dispvoreprefs += "<font color='red'><b>LOOC DISABLED</b></font><br>"
dispvoreprefs += "<b>Digestable:</b> [digestable ? "Enabled" : "Disabled"]<br>" dispvoreprefs += "<b>Digestable:</b> [digestable ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Devourable:</b> [devourable ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Feedable:</b> [feeding ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Leaves Remains:</b> [digest_leave_remains ? "Enabled" : "Disabled"]<br>" dispvoreprefs += "<b>Leaves Remains:</b> [digest_leave_remains ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Mob Vore:</b> [allowmobvore ? "Enabled" : "Disabled"]<br>" dispvoreprefs += "<b>Mob Vore:</b> [allowmobvore ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Healbelly permission:</b> [permit_healbelly ? "Allowed" : "Disallowed"]<br>" dispvoreprefs += "<b>Healbelly permission:</b> [permit_healbelly ? "Allowed" : "Disallowed"]<br>"
dispvoreprefs += "<b>Drop-nom prey:</b> [can_be_drop_prey ? "Enabled" : "Disabled"]<br>" dispvoreprefs += "<b>Spontaneous vore prey:</b> [can_be_drop_prey ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Drop-nom pred:</b> [can_be_drop_pred ? "Enabled" : "Disabled"]<br>" dispvoreprefs += "<b>Spontaneous vore pred:</b> [can_be_drop_pred ? "Enabled" : "Disabled"]<br>"
user << browse("<html><head><title>Vore prefs: [src]</title></head><body><center>[dispvoreprefs]</center></body></html>", "window=[name];size=200x300;can_resize=0;can_minimize=0") user << browse("<html><head><title>Vore prefs: [src]</title></head><body><center>[dispvoreprefs]</center></body></html>", "window=[name];size=200x300;can_resize=0;can_minimize=0")
onclose(user, "[name]") onclose(user, "[name]")
return return

View File

@@ -19,14 +19,14 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
-Aro <3 */ -Aro <3 */
#define VORE_VERSION 1 //This is a Define so you don't have to worry about magic numbers. #define VORE_VERSION 2 //This is a Define so you don't have to worry about magic numbers.
// //
// Overrides/additions to stock defines go here, as well as hooks. Sort them by // Overrides/additions to stock defines go here, as well as hooks. Sort them by
// the object they are overriding. So all /mob/living together, etc. // the object they are overriding. So all /mob/living together, etc.
// //
/datum/configuration /datum/configuration
var/items_survive_digestion = 1 //For configuring if the important_items survive digestion var/items_survive_digestion = TRUE //For configuring if the important_items survive digestion
// //
// The datum type bolted onto normal preferences datums for storing Virgo stuff // The datum type bolted onto normal preferences datums for storing Virgo stuff
@@ -37,13 +37,15 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
/hook/client_new/proc/add_prefs_vr(client/C) /hook/client_new/proc/add_prefs_vr(client/C)
C.prefs_vr = new/datum/vore_preferences(C) C.prefs_vr = new/datum/vore_preferences(C)
if(C.prefs_vr) if(C.prefs_vr)
return 1 return TRUE
return 0 return FALSE
/datum/vore_preferences /datum/vore_preferences
//Actual preferences //Actual preferences
var/digestable = TRUE var/digestable = TRUE
var/devourable = TRUE
var/feeding = TRUE
var/digest_leave_remains = FALSE var/digest_leave_remains = FALSE
var/allowmobvore = TRUE var/allowmobvore = TRUE
var/list/belly_prefs = list() var/list/belly_prefs = list()
@@ -70,9 +72,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
/proc/is_vore_predator(var/mob/living/O) /proc/is_vore_predator(var/mob/living/O)
if(istype(O,/mob/living)) if(istype(O,/mob/living))
if(O.vore_organs.len > 0) if(O.vore_organs.len > 0)
return 1 return TRUE
return 0 return FALSE
// //
// Belly searching for simplifying other procs // Belly searching for simplifying other procs
@@ -91,27 +93,29 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
/datum/vore_preferences/proc/load_vore() /datum/vore_preferences/proc/load_vore()
if(!client || !client_ckey) 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) 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 slot = client.prefs.default_slot
load_path(client_ckey,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 if(!fexists(path)) //Never saved before
save_vore() //Make the file first save_vore() //Make the file first
return 1 return TRUE
var/list/json_from_file = json_decode(file2text(path)) var/list/json_from_file = json_decode(file2text(path))
if(!json_from_file) if(!json_from_file)
return 0 //My concern grows return FALSE //My concern grows
var/version = json_from_file["version"] var/version = json_from_file["version"]
json_from_file = patch_version(json_from_file,version) json_from_file = patch_version(json_from_file,version)
digestable = json_from_file["digestable"] digestable = json_from_file["digestable"]
devourable = json_from_file["devourable"]
feeding = json_from_file["feeding"]
digest_leave_remains = json_from_file["digest_leave_remains"] digest_leave_remains = json_from_file["digest_leave_remains"]
allowmobvore = json_from_file["allowmobvore"] allowmobvore = json_from_file["allowmobvore"]
vore_taste = json_from_file["vore_taste"] vore_taste = json_from_file["vore_taste"]
@@ -123,6 +127,10 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//Quick sanitize //Quick sanitize
if(isnull(digestable)) if(isnull(digestable))
digestable = TRUE digestable = TRUE
if(isnull(devourable))
devourable = TRUE
if(isnull(feeding))
feeding = TRUE
if(isnull(digest_leave_remains)) if(isnull(digest_leave_remains))
digest_leave_remains = FALSE digest_leave_remains = FALSE
if(isnull(allowmobvore)) if(isnull(allowmobvore))
@@ -136,15 +144,17 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
if(isnull(belly_prefs)) if(isnull(belly_prefs))
belly_prefs = list() belly_prefs = list()
return 1 return TRUE
/datum/vore_preferences/proc/save_vore() /datum/vore_preferences/proc/save_vore()
if(!path) return 0 if(!path) return FALSE
var/version = VORE_VERSION //For "good times" use in the future var/version = VORE_VERSION //For "good times" use in the future
var/list/settings_list = list( var/list/settings_list = list(
"version" = version, "version" = version,
"digestable" = digestable, "digestable" = digestable,
"devourable" = devourable,
"feeding" = feeding,
"digest_leave_remains" = digest_leave_remains, "digest_leave_remains" = digest_leave_remains,
"allowmobvore" = allowmobvore, "allowmobvore" = allowmobvore,
"vore_taste" = vore_taste, "vore_taste" = vore_taste,
@@ -158,7 +168,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/json_to_file = json_encode(settings_list) var/json_to_file = json_encode(settings_list)
if(!json_to_file) if(!json_to_file)
log_debug("Saving: [path] failed jsonencode") log_debug("Saving: [path] failed jsonencode")
return 0 return FALSE
//Write it out //Write it out
#ifdef RUST_G #ifdef RUST_G
@@ -171,9 +181,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
#endif #endif
if(!fexists(path)) if(!fexists(path))
log_debug("Saving: [path] failed file write") log_debug("Saving: [path] failed file write")
return 0 return FALSE
return 1 return TRUE
//Can do conversions here //Can do conversions here
/datum/vore_preferences/proc/patch_version(var/list/json_from_file,var/version) /datum/vore_preferences/proc/patch_version(var/list/json_from_file,var/version)

View File

@@ -193,7 +193,7 @@
dat += "<br><a href='?src=\ref[src];b_wetness=\ref[selected]'>Is this belly fleshy:</a>" dat += "<br><a href='?src=\ref[src];b_wetness=\ref[selected]'>Is this belly fleshy:</a>"
dat += "[selected.is_wet ? "Yes" : "No"]" dat += "[selected.is_wet ? "Yes" : "No"]"
if(selected.is_wet) if(selected.is_wet)
dat += "<a href='?src=\ref[src];b_wetloop=\ref[selected]'>Internal loop for prey?:</a>" dat += "<br><a href='?src=\ref[src];b_wetloop=\ref[selected]'>Internal loop for prey?:</a>"
dat += "[selected.wet_loop ? "Yes" : "No"]" dat += "[selected.wet_loop ? "Yes" : "No"]"
//Digest Mode Button //Digest Mode Button
@@ -309,30 +309,47 @@
switch(user.digestable) switch(user.digestable)
if(TRUE) if(TRUE)
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable</a>" dat += "<a style='background:#173d15;' href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: ON)</a>"
if(FALSE) if(FALSE)
dat += "<a href='?src=\ref[src];toggledg=1'><span style='color:green;'>Toggle Digestable</span></a>" dat += "<a style='background:#990000;' href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: OFF)</a>"
switch(user.devourable)
if(TRUE)
dat += "<a style='background:#173d15;' href='?src=\ref[src];toggleddevour=1'>Toggle Devourable (Currently: ON)</a>"
if(FALSE)
dat += "<a style='background:#990000;' href='?src=\ref[src];toggleddevour=1'>Toggle Devourable (Currently: OFF)</a>"
switch(user.feeding)
if(TRUE)
dat += "<br><a style='background:#173d15;' href='?src=\ref[src];toggledfeed=1'>Toggle Feeding (Currently: ON)</a>"
if(FALSE)
dat += "<br><a style='background:#990000;' href='?src=\ref[src];toggledfeed=1'>Toggle Feeding (Currently: OFF)</a>"
switch(user.digest_leave_remains) switch(user.digest_leave_remains)
if(TRUE) if(TRUE)
dat += "<a href='?src=\ref[src];toggledlm=1'><span style='color:red;'>Toggle Leaving Remains</span></a>" dat += "<a style='background:#173d15;' href='?src=\ref[src];toggledlm=1'>Toggle Leaving Remains (Currently: ON)</a>"
if(FALSE) if(FALSE)
dat += "<a href='?src=\ref[src];toggledlm=1'>Toggle Leaving Remains</a>" dat += "<a style='background:#990000;' href='?src=\ref[src];toggledlm=1'>Toggle Leaving Remains (Currently: OFF)</a>"
switch(user.allowmobvore) switch(user.allowmobvore)
if(TRUE) if(TRUE)
dat += "<br><a href='?src=\ref[src];togglemv=1'>Toggle Mob Vore</a>" dat += "<br><a style='background:#173d15;' href='?src=\ref[src];togglemv=1'>Toggle Mob Vore (Currently: ON)</a>"
if(FALSE) if(FALSE)
dat += "<br><a href='?src=\ref[src];togglemv=1'><span style='color:green;'>Toggle Mob Vore</span></a>" dat += "<br><a style='background:#990000;' href='?src=\ref[src];togglemv=1'>Toggle Mob Vore (Currently: OFF)</a>"
switch(user.permit_healbelly) switch(user.permit_healbelly)
if(TRUE) if(TRUE)
dat += "<a href='?src=\ref[src];togglehealbelly=1'>Toggle Healbelly Permission</a>" dat += "<a style='background:#173d15;' href='?src=\ref[src];togglehealbelly=1'>Toggle Healbelly Permission (Currently: ON)</a>"
if(FALSE) if(FALSE)
dat += "<a href='?src=\ref[src];togglehealbelly=1'><span style='color:red;'>Toggle Healbelly Permission</span></a>" dat += "<a style='background:#990000;' href='?src=\ref[src];togglehealbelly=1'>Toggle Healbelly Permission (Currently: OFF)</a>"
switch(user.can_be_drop_prey)
if(TRUE)
dat += "<br><a style='background:#173d15;' href='?src=\ref[src];toggle_dropnom_prey=1'>Toggle Prey Spontaneous Vore (Currently: ON)</a>"
if(FALSE)
dat += "<br><a style='background:#990000;' href='?src=\ref[src];toggle_dropnom_prey=1'>Toggle Prey Spontaneous Vore (Currently: OFF)</a>"
switch(user.can_be_drop_pred)
if(TRUE)
dat += "<a style='background:#173d15;' href='?src=\ref[src];toggle_dropnom_pred=1'>Toggle Pred Spontaneous Vore (Currently: ON)</a>"
if(FALSE)
dat += "<a style='background:#990000;' href='?src=\ref[src];toggle_dropnom_pred=1'>Toggle Pred Spontaneous Vore (Currently: OFF)</a>"
dat += "<br><a href='?src=\ref[src];toggle_dropnom_prey=1'>Toggle Drop-nom Prey</a>" //These two get their own, custom row, too.
dat += "<a href='?src=\ref[src];toggle_dropnom_pred=1'>Toggle Drop-nom Pred</a>"
dat += "<br><a href='?src=\ref[src];setflavor=1'>Set Your Taste</a>" dat += "<br><a href='?src=\ref[src];setflavor=1'>Set Your Taste</a>"
dat += "<a href='?src=\ref[src];togglenoisy=1'>Toggle Hunger Noises</a>" dat += "<a href='?src=\ref[src];togglenoisy=1'>Toggle Hunger Noises</a>"
@@ -357,7 +374,7 @@
if(href_list["show_int"]) if(href_list["show_int"])
show_interacts = !show_interacts show_interacts = !show_interacts
return 1 //Force update return TRUE //Force update
if(href_list["int_help"]) 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, \ alert("These control how your belly responds to someone using 'resist' while inside you. The percent chance to trigger each is listed below, \
@@ -365,13 +382,13 @@
These only function as long as interactions are turned on in general. Keep in mind, the 'belly mode' interactions (digest/absorb) \ 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, \ 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") 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"]) if(href_list["outsidepick"])
var/atom/movable/tgt = locate(href_list["outsidepick"]) var/atom/movable/tgt = locate(href_list["outsidepick"])
var/obj/belly/OB = locate(href_list["outsidebelly"]) var/obj/belly/OB = locate(href_list["outsidebelly"])
if(!(tgt in OB)) //Aren't here anymore, need to update menu. if(!(tgt in OB)) //Aren't here anymore, need to update menu.
return 1 return TRUE
var/intent = "Examine" var/intent = "Examine"
if(istype(tgt,/mob/living)) if(istype(tgt,/mob/living))
@@ -384,7 +401,7 @@
if("Help Out") //Help the inside-mob out if("Help Out") //Help the inside-mob out
if(user.stat || user.absorbed || M.absorbed) if(user.stat || user.absorbed || M.absorbed)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>") 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(user,"<font color='green'>You begin to push [M] to freedom!</font>")
to_chat(M,"[usr] begins to push you to freedom!") to_chat(M,"[usr] begins to push you to freedom!")
@@ -403,11 +420,11 @@
if("Devour") //Eat the inside mob if("Devour") //Eat the inside mob
if(user.absorbed || user.stat) if(user.absorbed || user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>") to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 1 return TRUE
if(!user.vore_selected) if(!user.vore_selected)
to_chat(user,"<span class='warning'>Pick a belly on yourself first!</span>") to_chat(user,"<span class='warning'>Pick a belly on yourself first!</span>")
return 1 return TRUE
var/obj/belly/TB = user.vore_selected 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>") to_chat(user,"<span class='warning'>You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!</span>")
@@ -425,7 +442,7 @@
var/obj/item/T = tgt var/obj/item/T = tgt
if(!(tgt in OB)) if(!(tgt in OB))
//Doesn't exist anymore, update. //Doesn't exist anymore, update.
return 1 return TRUE
intent = alert("What do you want to do to that?","Query","Examine","Use Hand") intent = alert("What do you want to do to that?","Query","Examine","Use Hand")
switch(intent) switch(intent)
if("Examine") if("Examine")
@@ -434,7 +451,7 @@
if("Use Hand") if("Use Hand")
if(user.stat) if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>") to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 1 return TRUE
user.ClickOn(T) user.ClickOn(T)
sleep(5) //Seems to exit too fast for the panel to update sleep(5) //Seems to exit too fast for the panel to update
@@ -447,23 +464,23 @@
intent = alert("Eject all, Move all?","Query","Eject all","Cancel","Move all") intent = alert("Eject all, Move all?","Query","Eject all","Cancel","Move all")
switch(intent) switch(intent)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Eject all") if("Eject all")
if(user.stat) if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>") to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 0 return FALSE
selected.release_all_contents() selected.release_all_contents()
if("Move all") if("Move all")
if(user.stat) if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>") 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 var/obj/belly/choice = input("Move all where?","Select Belly") as null|anything in user.vore_organs
if(!choice) if(!choice)
return 0 return FALSE
for(var/atom/movable/tgt in selected) 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>") to_chat(tgt,"<span class='warning'>You're squished from [user]'s [lowertext(selected)] to their [lowertext(choice.name)]!</span>")
@@ -471,7 +488,7 @@
var/atom/movable/tgt = locate(href_list["insidepick"]) var/atom/movable/tgt = locate(href_list["insidepick"])
if(!(tgt in selected)) //Old menu, needs updating because they aren't really there. 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 = "Examine"
intent = alert("Examine, Eject, Move? Examine if you want to leave this box.","Query","Examine","Eject","Move") intent = alert("Examine, Eject, Move? Examine if you want to leave this box.","Query","Examine","Eject","Move")
switch(intent) switch(intent)
@@ -481,25 +498,25 @@
if("Eject") if("Eject")
if(user.stat) if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>") to_chat(user,"<span class='warning'>You can't do that in your state!</span>")
return 0 return FALSE
selected.release_specific_contents(tgt) selected.release_specific_contents(tgt)
if("Move") if("Move")
if(user.stat) if(user.stat)
to_chat(user,"<span class='warning'>You can't do that in your state!</span>") 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 var/obj/belly/choice = input("Move [tgt] where?","Select Belly") as null|anything in user.vore_organs
if(!choice || !(tgt in selected)) 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>") 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) selected.transfer_contents(tgt, choice)
if(href_list["newbelly"]) if(href_list["newbelly"])
if(user.vore_organs.len >= BELLIES_MAX) 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) var/new_name = html_encode(input(usr,"New belly's name:","New Belly") as text|null)
@@ -516,7 +533,7 @@
if(failure_msg) //Something went wrong. if(failure_msg) //Something went wrong.
alert(user,failure_msg,"Error!") alert(user,failure_msg,"Error!")
return 0 return FALSE
var/obj/belly/NB = new(user) var/obj/belly/NB = new(user)
NB.name = new_name NB.name = new_name
@@ -545,7 +562,7 @@
if(failure_msg) //Something went wrong. if(failure_msg) //Something went wrong.
alert(user,failure_msg,"Error!") alert(user,failure_msg,"Error!")
return 0 return FALSE
selected.name = new_name selected.name = new_name
@@ -562,13 +579,13 @@
var/new_mode = input("Choose Mode (currently [selected.digest_mode])") as null|anything in menu_list var/new_mode = input("Choose Mode (currently [selected.digest_mode])") as null|anything in menu_list
if(!new_mode) if(!new_mode)
return 0 return FALSE
if(new_mode == DM_TRANSFORM) //Snowflek submenu if(new_mode == DM_TRANSFORM) //Snowflek submenu
var/list/tf_list = selected.transform_modes var/list/tf_list = selected.transform_modes
var/new_tf_mode = input("Choose TF Mode (currently [selected.tf_mode])") as null|anything in tf_list var/new_tf_mode = input("Choose TF Mode (currently [selected.tf_mode])") as null|anything in tf_list
if(!new_tf_mode) if(!new_tf_mode)
return 0 return FALSE
selected.tf_mode = new_tf_mode selected.tf_mode = new_tf_mode
selected.digest_mode = new_mode selected.digest_mode = new_mode
@@ -578,7 +595,7 @@
var/list/menu_list = selected.mode_flag_list.Copy() var/list/menu_list = selected.mode_flag_list.Copy()
var/toggle_addon = input("Toggle Addon") as null|anything in menu_list var/toggle_addon = input("Toggle Addon") as null|anything in menu_list
if(!toggle_addon) if(!toggle_addon)
return 0 return FALSE
selected.mode_flags ^= selected.mode_flag_list[toggle_addon] selected.mode_flags ^= selected.mode_flag_list[toggle_addon]
selected.items_preserved.Cut() //Re-evaltuate all items in belly on addon toggle selected.items_preserved.Cut() //Re-evaltuate all items in belly on addon toggle
@@ -587,7 +604,7 @@
var/new_mode = input("Choose Mode (currently [selected.item_digest_mode])") as null|anything in menu_list var/new_mode = input("Choose Mode (currently [selected.item_digest_mode])") as null|anything in menu_list
if(!new_mode) if(!new_mode)
return 0 return FALSE
selected.item_digest_mode = new_mode selected.item_digest_mode = new_mode
selected.items_preserved.Cut() //Re-evaltuate all items in belly on belly-mode change selected.items_preserved.Cut() //Re-evaltuate all items in belly on belly-mode change
@@ -599,14 +616,14 @@
var/list/menu_list = contamination_flavors.Copy() var/list/menu_list = contamination_flavors.Copy()
var/new_flavor = input("Choose Contamination Flavor Text Type (currently [selected.contamination_flavor])") as null|anything in menu_list var/new_flavor = input("Choose Contamination Flavor Text Type (currently [selected.contamination_flavor])") as null|anything in menu_list
if(!new_flavor) if(!new_flavor)
return 0 return FALSE
selected.contamination_flavor = new_flavor selected.contamination_flavor = new_flavor
if(href_list["b_contamination_color"]) if(href_list["b_contamination_color"])
var/list/menu_list = contamination_colors.Copy() var/list/menu_list = contamination_colors.Copy()
var/new_color = input("Choose Contamination Color (currently [selected.contamination_color])") as null|anything in menu_list var/new_color = input("Choose Contamination Color (currently [selected.contamination_color])") as null|anything in menu_list
if(!new_color) if(!new_color)
return 0 return FALSE
selected.contamination_color = new_color selected.contamination_color = new_color
selected.items_preserved.Cut() //To re-contaminate for new color selected.items_preserved.Cut() //To re-contaminate for new color
@@ -617,10 +634,10 @@
new_desc = readd_quotes(new_desc) new_desc = readd_quotes(new_desc)
if(length(new_desc) > BELLIES_DESC_MAX) if(length(new_desc) > BELLIES_DESC_MAX)
alert("Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error") alert("Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error")
return 0 return FALSE
selected.desc = new_desc selected.desc = new_desc
else //Returned null else //Returned null
return 0 return FALSE
if(href_list["b_msgs"]) if(href_list["b_msgs"])
var/list/messages = list( var/list/messages = list(
@@ -675,7 +692,7 @@
if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN) 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") 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 selected.vore_verb = new_verb
@@ -800,7 +817,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) 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 if(!choice) //They cancelled, no changes
return 0 return FALSE
else if(choice == "None - Remove") else if(choice == "None - Remove")
selected.transferlocation = null selected.transferlocation = null
else else
@@ -819,7 +836,7 @@
if(href_list["b_del"]) if(href_list["b_del"])
var/alert = alert("Are you sure you want to delete your [lowertext(selected.name)]?","Confirmation","Delete","Cancel") var/alert = alert("Are you sure you want to delete your [lowertext(selected.name)]?","Confirmation","Delete","Cancel")
if(!(alert == "Delete")) if(!(alert == "Delete"))
return 0 return FALSE
var/failure_msg = "" var/failure_msg = ""
@@ -840,7 +857,7 @@
if(failure_msg) if(failure_msg)
alert(user,failure_msg,"Error!") alert(user,failure_msg,"Error!")
return 0 return FALSE
qdel(selected) qdel(selected)
selected = user.vore_organs[1] selected = user.vore_organs[1]
@@ -855,7 +872,7 @@
if(href_list["applyprefs"]) 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") 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") if(!alert == "Reload")
return 0 return FALSE
if(!user.apply_vore_prefs()) if(!user.apply_vore_prefs())
alert("ERROR: Virgo-specific preferences failed to apply!","Error") alert("ERROR: Virgo-specific preferences failed to apply!","Error")
else else
@@ -864,29 +881,29 @@
if(href_list["setflavor"]) 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) 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) if(!new_flavor)
return 0 return FALSE
new_flavor = readd_quotes(new_flavor) new_flavor = readd_quotes(new_flavor)
if(length(new_flavor) > FLAVOR_MAX) if(length(new_flavor) > FLAVOR_MAX)
alert("Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error!") alert("Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error!")
return 0 return FALSE
user.vore_taste = new_flavor user.vore_taste = new_flavor
if(href_list["toggle_dropnom_pred"]) if(href_list["toggle_dropnom_pred"])
var/choice = alert(user, "You are currently [user.can_be_drop_pred ? " able to eat prey that fall from above or that you fall onto" : "not able to eat prey that fall from above or that you fall onto."]", "", "Be Pred", "Cancel", "Don't be Pred") var/choice = alert(user, "This toggle is for spontaneous, environment related vore as a predator, including drop-noms, teleporters, etc. You are currently [user.can_be_drop_pred ? " able to eat prey that you encounter by environmental actions." : "avoiding eating prey encountered in the environment."]", "", "Be Pred", "Cancel", "Don't be Pred")
switch(choice) switch(choice)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Be Pred") if("Be Pred")
user.can_be_drop_pred = TRUE user.can_be_drop_pred = TRUE
if("Don't be Pred") if("Don't be Pred")
user.can_be_drop_pred = FALSE user.can_be_drop_pred = FALSE
if(href_list["toggle_dropnom_prey"]) if(href_list["toggle_dropnom_prey"])
var/choice = alert(user, "You are currently [user.can_be_drop_prey ? "able to be eaten." : "not able to be eaten."]", "", "Be Prey", "Cancel", "Don't Be Prey") var/choice = alert(user, "This toggle is for spontaneous, environment related vore as a prey, including drop-noms, teleporters, etc. You are currently [user.can_be_drop_prey ? "able to be eaten by environmental actions." : "not able to be eaten by environmental actions."]", "", "Be Prey", "Cancel", "Don't Be Prey")
switch(choice) switch(choice)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Be Prey") if("Be Prey")
user.can_be_drop_prey = TRUE user.can_be_drop_prey = TRUE
if("Don't Be Prey") if("Don't Be Prey")
@@ -896,7 +913,7 @@
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion") var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
switch(choice) switch(choice)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Allow Digestion") if("Allow Digestion")
user.digestable = TRUE user.digestable = TRUE
if("Prevent Digestion") if("Prevent Digestion")
@@ -907,11 +924,37 @@
if(user.client.prefs_vr) if(user.client.prefs_vr)
user.client.prefs_vr.digestable = user.digestable user.client.prefs_vr.digestable = user.digestable
if(href_list["toggleddevour"])
var/choice = alert(user, "This button is to toggle your ability to be devoured by others. Devouring is currently: [user.devourable ? "Allowed" : "Prevented"]", "", "Be Devourable", "Cancel", "Prevent being Devoured")
switch(choice)
if("Cancel")
return FALSE
if("Be Devourable")
user.devourable = TRUE
if("Prevent being Devoured")
user.devourable = FALSE
if(user.client.prefs_vr)
user.client.prefs_vr.devourable = user.devourable
if(href_list["toggledfeed"])
var/choice = alert(user, "This button is to toggle your ability to be fed to or by others vorishly. Force Feeding is currently: [user.feeding ? "Allowed" : "Prevented"]", "", "Allow Feeding", "Cancel", "Prevent Feeding")
switch(choice)
if("Cancel")
return FALSE
if("Allow Feeding")
user.feeding = TRUE
if("Prevent Feeding")
user.feeding = FALSE
if(user.client.prefs_vr)
user.client.prefs_vr.feeding = user.feeding
if(href_list["toggledlm"]) if(href_list["toggledlm"])
var/choice = alert(user, "This button allows preds to have your remains be left in their belly after you are digested. This will only happen if pred sets their belly to do so. Remains consist of skeletal parts. Currently you are [user.digest_leave_remains? "" : "not"] leaving remains.", "", "Allow Post-digestion Remains", "Cancel", "Disallow Post-digestion Remains") var/choice = alert(user, "This button allows preds to have your remains be left in their belly after you are digested. This will only happen if pred sets their belly to do so. Remains consist of skeletal parts. Currently you are [user.digest_leave_remains? "" : "not"] leaving remains.", "", "Allow Post-digestion Remains", "Cancel", "Disallow Post-digestion Remains")
switch(choice) switch(choice)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Allow Post-digestion Remains") if("Allow Post-digestion Remains")
user.digest_leave_remains = TRUE user.digest_leave_remains = TRUE
if("Disallow Post-digestion Remains") if("Disallow Post-digestion Remains")
@@ -924,7 +967,7 @@
var/choice = alert(user, "This button is for those who don't like being eaten by mobs. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Mobs are currently: [user.allowmobvore ? "Allowed to eat" : "Prevented from eating"] you.", "", "Allow Mob Predation", "Cancel", "Prevent Mob Predation") var/choice = alert(user, "This button is for those who don't like being eaten by mobs. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Mobs are currently: [user.allowmobvore ? "Allowed to eat" : "Prevented from eating"] you.", "", "Allow Mob Predation", "Cancel", "Prevent Mob Predation")
switch(choice) switch(choice)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Allow Mob Predation") if("Allow Mob Predation")
user.allowmobvore = TRUE user.allowmobvore = TRUE
if("Prevent Mob Predation") if("Prevent Mob Predation")
@@ -939,7 +982,7 @@
var/choice = alert(user, "This button is for those who don't like healbelly used on them as a mechanic. It does not affect anything, but is displayed under mechanical prefs for ease of quick checks. You are currently: [user.allowmobvore ? "Okay" : "Not Okay"] with players using healbelly on you.", "", "Allow Healing Belly", "Cancel", "Disallow Healing Belly") var/choice = alert(user, "This button is for those who don't like healbelly used on them as a mechanic. It does not affect anything, but is displayed under mechanical prefs for ease of quick checks. You are currently: [user.allowmobvore ? "Okay" : "Not Okay"] with players using healbelly on you.", "", "Allow Healing Belly", "Cancel", "Disallow Healing Belly")
switch(choice) switch(choice)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Allow Healing Belly") if("Allow Healing Belly")
user.permit_healbelly = TRUE user.permit_healbelly = TRUE
if("Disallow Healing Belly") if("Disallow Healing Belly")
@@ -952,11 +995,11 @@
var/choice = alert(user, "Toggle audible hunger noises. Currently: [user.noisy ? "Enabled" : "Disabled"]", "", "Enable audible hunger", "Cancel", "Disable audible hunger") var/choice = alert(user, "Toggle audible hunger noises. Currently: [user.noisy ? "Enabled" : "Disabled"]", "", "Enable audible hunger", "Cancel", "Disable audible hunger")
switch(choice) switch(choice)
if("Cancel") if("Cancel")
return 0 return FALSE
if("Enable audible hunger") if("Enable audible hunger")
user.noisy = TRUE user.noisy = TRUE
if("Disable audible hunger") if("Disable audible hunger")
user.noisy = FALSE user.noisy = FALSE
//Refresh when interacted with, returning 1 makes vore_look.Topic update //Refresh when interacted with, returning 1 makes vore_look.Topic update
return 1 return TRUE

View File

@@ -0,0 +1,37 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: Poojawa
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Applies Feeding and Devourable prefs."
- bugfix: "Made VoreUI toggles a lot more clear of what mode they're in."

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More