diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm
index 49cfba8cd2..5775e128f8 100644
--- a/code/__DEFINES/say.dm
+++ b/code/__DEFINES/say.dm
@@ -81,7 +81,8 @@
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
-#define MAX_FAVOR_LEN 4096 //double the maximum message length.
+#define MAX_FLAVOR_LEN 4096 //double the maximum message length.
+#define MAX_TASTE_LEN 40 //lick... vore... ew...
#define MAX_NAME_LEN 42
#define MAX_BROADCAST_LEN 512
#define MAX_CHARTER_LEN 80
diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm
index a26b9285d4..7dfd8ffa77 100644
--- a/code/__HELPERS/_cit_helpers.dm
+++ b/code/__HELPERS/_cit_helpers.dm
@@ -113,7 +113,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
set desc = "Sets an extended description of your character's features."
set category = "IC"
- var/new_flavor = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", flavor_text, MAX_FAVOR_LEN, TRUE)
+ var/new_flavor = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", flavor_text, MAX_FLAVOR_LEN, TRUE)
if(!isnull(new_flavor))
flavor_text = new_flavor
to_chat(src, "Your flavor text has been updated.")
@@ -124,7 +124,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
set desc = "Sets a description of your character's current appearance. Use this for emotions, poses etc."
set category = "IC"
- var/new_flavor = stripped_multiline_input(usr, "Set the temporary flavor text in your 'examine' verb. This should be used only for things pertaining to the current round!", "Short-Term Flavor Text", flavor_text_2, MAX_FAVOR_LEN, TRUE)
+ var/new_flavor = stripped_multiline_input(usr, "Set the temporary flavor text in your 'examine' verb. This should be used only for things pertaining to the current round!", "Short-Term Flavor Text", flavor_text_2, MAX_FLAVOR_LEN, TRUE)
if(!isnull(new_flavor))
flavor_text_2 = new_flavor
to_chat(src, "Your temporary flavor text has been updated.")
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 62304112b2..5ea17d0498 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -216,7 +216,7 @@
if(!is_operational()) //Autoeject if power is lost
if(mob_occupant)
go_out()
- mob_occupant.apply_vore_prefs()
+ mob_occupant.copy_from_prefs_vr()
connected_message("Clone Ejected: Loss of power.")
else if(mob_occupant && (mob_occupant.loc == src))
@@ -226,7 +226,7 @@
SPEAK("The cloning has been \
aborted due to unrecoverable tissue failure.")
go_out()
- mob_occupant.apply_vore_prefs()
+ mob_occupant.copy_from_prefs_vr()
else if(mob_occupant.cloneloss > (100 - heal_level))
mob_occupant.Unconscious(80)
@@ -272,7 +272,7 @@
BP.attach_limb(mob_occupant)
go_out()
- mob_occupant.apply_vore_prefs()
+ mob_occupant.copy_from_prefs_vr()
else if (!mob_occupant || mob_occupant.loc != src)
occupant = null
@@ -320,7 +320,7 @@
SPEAK("An emergency ejection of the current clone has occurred. Survival not guaranteed.")
to_chat(user, "You force an emergency ejection. ")
go_out()
- mob_occupant.apply_vore_prefs()
+ mob_occupant.copy_from_prefs_vr()
else
return ..()
@@ -418,7 +418,7 @@
if(mob_occupant && prob(100/(severity*efficiency)))
connected_message(Gibberish("EMP-caused Accidental Ejection", 0))
SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of, ERROR: John Doe, prematurely." ,0))
- mob_occupant.apply_vore_prefs()
+ mob_occupant.copy_from_prefs_vr()
go_out()
/obj/machinery/clonepod/ex_act(severity, target)
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index dc550179f8..84096b1367 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -223,7 +223,6 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
new /datum/admins(localhost_rank, ckey, 1, 1)
//preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum)
prefs = GLOB.preferences_datums[ckey]
- prefs_vr = GLOB.vore_preferences_datums[ckey] //CITADEL EDIT bypassing a failing hook
if(prefs)
prefs.parent = src
@@ -231,13 +230,6 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
prefs = new /datum/preferences(src)
GLOB.preferences_datums[ckey] = prefs
- if(prefs_vr) //CITADEL EDIT bypassing a failing hook START
- prefs_vr.client = src
- else
- prefs_vr = new/datum/vore_preferences(src)
- GLOB.vore_preferences_datums[ckey] = prefs_vr
- //CITADEL EDIT bypassing a failing hook END
-
prefs.last_ip = address //these are gonna be used for banning
prefs.last_id = computer_id //these are gonna be used for banning
fps = prefs.clientfps
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 793a72c1f7..ca7e982214 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -205,6 +205,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/action_buttons_screen_locs = list()
+ //bad stuff
+ var/digestable = FALSE
+ var/devourable = FALSE
+ var/feeding = FALSE
+ var/lickable = FALSE
+ var/list/belly_prefs = list()
+ var/vore_taste = "nothing in particular"
+
//backgrounds
var/mutable_appearance/character_background
var/icon/bgstate = "steel"
@@ -1473,7 +1481,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
if("flavor_text")
- var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", features["flavor_text"], MAX_FAVOR_LEN, TRUE)
+ var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", features["flavor_text"], MAX_FLAVOR_LEN, TRUE)
if(msg)
features["flavor_text"] = msg
@@ -2262,16 +2270,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("load")
load_preferences()
load_character()
- if(parent && parent.prefs_vr)
- attempt_vr(parent.prefs_vr,"load_vore","")
if("changeslot")
if(!load_character(text2num(href_list["num"])))
random_character()
real_name = random_unique_name(gender)
save_character()
- if(parent && parent.prefs_vr)
- attempt_vr(parent.prefs_vr,"load_vore","")
if("tab")
if (href_list["tab"])
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 03c6051c5d..4ee8f37d63 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -5,7 +5,7 @@
// You do not need to raise this if you are adding new values that have sane defaults.
// Only raise this value when changing the meaning/format/name/layout of an existing value
// where you would want the updater procs below to run
-#define SAVEFILE_VERSION_MAX 25
+#define SAVEFILE_VERSION_MAX 26
/*
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
@@ -115,6 +115,36 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(digi == "Digitigrade Legs")
WRITE_FILE(S["feature_lizard_legs"], "Digitigrade")
+ if(current_version < 26)
+ var/vr_path = "data/player_saves/[parent.ckey[1]]/[parent.ckey]/vore/character[default_slot].json"
+ if(fexists(vr_path))
+ var/list/json_from_file = json_decode(file2text(vr_path))
+ if(json_from_file)
+ digestable = json_from_file["digestable"]
+ devourable = json_from_file["devourable"]
+ feeding = json_from_file["feeding"]
+ lickable = json_from_file["lickable"]
+ belly_prefs = json_from_file["belly_prefs"]
+ vore_taste = json_from_file["vore_taste"]
+
+ for(var/V in all_quirks) // quirk migration
+ switch(V)
+ if("Acute hepatic pharmacokinesis")
+ DISABLE_BITFIELD(cit_toggles, PENIS_ENLARGEMENT)
+ DISABLE_BITFIELD(cit_toggles, BREAST_ENLARGEMENT)
+ ENABLE_BITFIELD(cit_toggles,FORCED_FEM)
+ ENABLE_BITFIELD(cit_toggles,FORCED_MASC)
+ all_quirks -= V
+ if("Crocin Immunity")
+ ENABLE_BITFIELD(cit_toggles,NO_APHRO)
+ all_quirks -= V
+ if("Buns of Steel")
+ ENABLE_BITFIELD(cit_toggles,NO_ASS_SLAP)
+ all_quirks -= V
+
+ if(features["meat_type"] == "Inesct")
+ features["meat_type"] = "Insect"
+
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
if(!ckey)
return
@@ -226,6 +256,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
cit_toggles = sanitize_integer(cit_toggles, 0, 65535, initial(cit_toggles))
auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc))
+ belly_prefs = SANITIZE_LIST(belly_prefs)
+
return 1
/datum/preferences/proc/save_preferences()
@@ -446,6 +478,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
else //We have no old flavortext, default to new
S["feature_flavor_text"] >> features["flavor_text"]
+ S["digestable"] >> digestable
+ S["devourable"] >> devourable
+ S["feeding"] >> feeding
+ S["vore_taste"] >> vore_taste
+ S["lickable"] >> lickable
+ S["belly_prefs"] >> belly_prefs
//try to fix any outdated data if necessary
if(needs_update >= 0)
@@ -509,6 +547,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list)
features["insect_markings"] = sanitize_inlist(features["insect_markings"], GLOB.insect_markings_list, "None")
features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list)
+ features["flavor_text"] = copytext(features["flavor_text"], 1, MAX_FLAVOR_LEN)
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
//Validate job prefs
@@ -518,23 +557,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
all_quirks = SANITIZE_LIST(all_quirks)
- for(var/V in all_quirks) // quirk migration
- switch(V)
- if("Acute hepatic pharmacokinesis")
- DISABLE_BITFIELD(cit_toggles, PENIS_ENLARGEMENT)
- DISABLE_BITFIELD(cit_toggles, BREAST_ENLARGEMENT)
- ENABLE_BITFIELD(cit_toggles,FORCED_FEM)
- ENABLE_BITFIELD(cit_toggles,FORCED_MASC)
- all_quirks -= V
- if("Crocin Immunity")
- ENABLE_BITFIELD(cit_toggles,NO_APHRO)
- all_quirks -= V
- if("Buns of Steel")
- ENABLE_BITFIELD(cit_toggles,NO_ASS_SLAP)
- all_quirks -= V
+ lickable = sanitize_integer(lickable, FALSE, TRUE, initial(lickable))
+ devourable = sanitize_integer(devourable, FALSE, TRUE, initial(devourable))
+ digestable = sanitize_integer(digestable, FALSE, TRUE, initial(digestable))
+ vore_taste = copytext(vore_taste, 1, MAX_TASTE_LEN)
- if(features["meat_type"] == "Inesct")
- features["meat_type"] = "Insect"
cit_character_pref_load(S)
return 1
@@ -613,6 +640,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Quirks
WRITE_FILE(S["all_quirks"] , all_quirks)
+ WRITE_FILE(S["digestable"] , digestable)
+ WRITE_FILE(S["devourable"] , devourable)
+ WRITE_FILE(S["feeding"] , feeding)
+ WRITE_FILE(S["vore_taste"] , vore_taste)
+ WRITE_FILE(S["lickable"] , lickable)
+ WRITE_FILE(S["belly_prefs"] , belly_prefs)
+
cit_character_pref_save(S)
return 1
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index f2e6fdce03..e0bd8a16b3 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -24,4 +24,4 @@
if(ranged_ability)
ranged_ability.add_ranged_ability(src, "You currently have [ranged_ability] active!")
if(vore_init && !vorepref_init) //Vore's been initialized, voreprefs haven't. If this triggers then that means that voreprefs failed to load due to the client being missing.
- apply_vore_prefs()
+ copy_from_prefs_vr()
diff --git a/code/modules/vore/eating/belly_obj.dm b/code/modules/vore/eating/belly_obj.dm
index e33f748292..7d034e97d8 100644
--- a/code/modules/vore/eating/belly_obj.dm
+++ b/code/modules/vore/eating/belly_obj.dm
@@ -732,3 +732,11 @@
for(var/I in emote_lists[K])
dupe.emote_lists[K] += I
return dupe
+
+//
+// Belly searching for simplifying other procs
+// Mostly redundant now with belly-objects and isbelly(loc)
+//
+/proc/check_belly(atom/movable/A)
+ return isbelly(A.loc)
+
diff --git a/code/modules/vore/eating/living.dm b/code/modules/vore/eating/living.dm
index 5f280fb04d..62ba420b15 100644
--- a/code/modules/vore/eating/living.dm
+++ b/code/modules/vore/eating/living.dm
@@ -41,7 +41,7 @@
return TRUE
//We'll load our client's organs if we have one
- if(client && client.prefs_vr)
+ if(client?.prefs)
if(!copy_from_prefs_vr())
to_chat(src,"ERROR: You seem to have saved vore prefs, but they couldn't be loaded.")
return FALSE
@@ -262,47 +262,22 @@
else
to_chat(src,"You aren't inside anyone, though, is the thing.")
-//
-// Verb for saving vore preferences to save file
-//
-/mob/living/proc/save_vore_prefs()
- if(!client || !client.prefs_vr)
- return FALSE
- if(!copy_to_prefs_vr())
- return FALSE
- if(!client.prefs_vr.save_vore())
- return FALSE
-
- return TRUE
-
-/mob/living/proc/apply_vore_prefs()
- if(!client || !client.prefs_vr)
- return FALSE
- if(!client.prefs_vr.load_vore())
- return FALSE
- if(!copy_from_prefs_vr())
- return FALSE
-
- return TRUE
-
/mob/living/proc/copy_to_prefs_vr()
- if(!client || !client.prefs_vr)
- to_chat(src,"You attempted to save your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev.")
+ if(!client || !client.prefs)
+ to_chat(src,"You attempted to save your vore prefs but somehow you're in this character without a client.prefs variable. Tell a dev.")
return FALSE
- var/datum/vore_preferences/P = client.prefs_vr
-
- P.digestable = src.digestable
- P.devourable = src.devourable
- P.feeding = src.feeding
- P.vore_taste = src.vore_taste
+ client.prefs.digestable = digestable
+ client.prefs.devourable = devourable
+ client.prefs.feeding = feeding
+ client.prefs.vore_taste = vore_taste
var/list/serialized = list()
- for(var/belly in src.vore_organs)
+ for(var/belly in vore_organs)
var/obj/belly/B = belly
serialized += list(B.serialize()) //Can't add a list as an object to another list in Byond. Thanks.
- P.belly_prefs = serialized
+ client.prefs.belly_prefs = serialized
return TRUE
@@ -310,21 +285,20 @@
// Proc for applying vore preferences, given bellies
//
/mob/living/proc/copy_from_prefs_vr()
- if(!client || !client.prefs_vr)
- to_chat(src,"You attempted to apply your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev.")
+ if(!client || !client.prefs)
+ to_chat(src,"You attempted to apply your vore prefs but somehow you're in this character without a client.prefs variable. Tell a dev.")
return FALSE
vorepref_init = TRUE
- var/datum/vore_preferences/P = client.prefs_vr
- digestable = P.digestable
- devourable = P.devourable
- feeding = P.feeding
- vore_taste = P.vore_taste
+ digestable = client.prefs.digestable
+ devourable = client.prefs.devourable
+ feeding = client.prefs.feeding
+ vore_taste = client.prefs.vore_taste
release_vore_contents(silent = TRUE)
- vore_organs.Cut()
- for(var/entry in P.belly_prefs)
+ QDEL_LIST(vore_organs)
+ for(var/entry in client.prefs.belly_prefs)
list_to_object(entry,src)
return TRUE
@@ -381,18 +355,12 @@
set category = "Vore"
set desc = "Lick someone nearby!"
- if(!istype(tasted))
+ if(!istype(tasted) || !(tasted.client?.prefs.lickable))
return
- if(!tasted.client?.prefs_vr.lickable)
- return
+ setClickCooldown(100)
- if(src == stat)
- return
-
- src.setClickCooldown(100)
-
- src.visible_message("[src] licks [tasted]!","You lick [tasted]. They taste rather like [tasted.get_taste_message()].","Slurp!")
+ visible_message("[src] licks [tasted]!","You lick [tasted]. They taste rather like [tasted.get_taste_message()].","Slurp!")
/mob/living/proc/get_taste_message(allow_generic = TRUE, datum/species/mrace)
@@ -408,3 +376,11 @@
else
taste_message += "a plain old normal [src]"
return taste_message
+// Check if an object is capable of eating things, based on vore_organs
+//
+/proc/is_vore_predator(var/mob/living/O)
+ if(istype(O))
+ if(O.vore_organs.len > 0)
+ return TRUE
+
+ return FALSE
diff --git a/code/modules/vore/eating/vore.dm b/code/modules/vore/eating/vore.dm
deleted file mode 100644
index abb5bbb988..0000000000
--- a/code/modules/vore/eating/vore.dm
+++ /dev/null
@@ -1,174 +0,0 @@
-
-/*
-VVVVVVVV VVVVVVVV OOOOOOOOO RRRRRRRRRRRRRRRRR EEEEEEEEEEEEEEEEEEEEEE
-V::::::V V::::::V OO:::::::::OO R::::::::::::::::R E::::::::::::::::::::E
-V::::::V V::::::V OO:::::::::::::OO R::::::RRRRRR:::::R E::::::::::::::::::::E
-V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEEEEE::::E
- V:::::V V:::::V O::::::O O::::::O R::::R R:::::R E:::::E EEEEEE
- V:::::V V:::::V O:::::O O:::::O R::::R R:::::R E:::::E
- V:::::V V:::::V O:::::O O:::::O R::::RRRRRR:::::R E::::::EEEEEEEEEE
- V:::::V V:::::V O:::::O O:::::O R:::::::::::::RR E:::::::::::::::E
- V:::::V V:::::V O:::::O O:::::O R::::RRRRRR:::::R E:::::::::::::::E
- V:::::V V:::::V O:::::O O:::::O R::::R R:::::R E::::::EEEEEEEEEE
- V:::::V:::::V O:::::O O:::::O R::::R R:::::R E:::::E
- V:::::::::V O::::::O O::::::O R::::R R:::::R E:::::E EEEEEE
- V:::::::V O:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEEEE:::::E
- V:::::V OO:::::::::::::OO R::::::R R:::::RE::::::::::::::::::::E
- V:::V OO:::::::::OO R::::::R R:::::RE::::::::::::::::::::E
- VVV OOOOOOOOO RRRRRRRR RRRRRRREEEEEEEEEEEEEEEEEEEEEE
-
--Aro <3 */
-
-//
-// 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 datum type bolted onto normal preferences datums for storing Vore stuff
-//
-
-#define VORE_VERSION 4
-
-GLOBAL_LIST_EMPTY(vore_preferences_datums)
-
-/client
- var/datum/vore_preferences/prefs_vr
-
-/datum/vore_preferences
- //Actual preferences
- var/digestable = FALSE
- var/devourable = FALSE
- var/feeding = FALSE
- var/lickable = FALSE
-// var/allowmobvore = TRUE
- var/list/belly_prefs = list()
- var/vore_taste = "nothing in particular"
-// var/can_be_drop_prey = FALSE
-// var/can_be_drop_pred = FALSE
-
- //Mechanically required
- var/path
- var/slot
- var/client/client
- var/client_ckey
-
-/datum/vore_preferences/New(client/C)
- if(istype(C))
- client = C
- client_ckey = C.ckey
- load_vore()
-
-//
-// Check if an object is capable of eating things, based on vore_organs
-//
-/proc/is_vore_predator(var/mob/living/O)
- if(istype(O,/mob/living))
- if(O.vore_organs.len > 0)
- return TRUE
-
- return FALSE
-
-//
-// Belly searching for simplifying other procs
-// Mostly redundant now with belly-objects and isbelly(loc)
-//
-/proc/check_belly(atom/movable/A)
- return isbelly(A.loc)
-
-//
-// Save/Load Vore Preferences
-//
-/datum/vore_preferences/proc/load_path(ckey,slot,filename="character",ext="json")
- if(!ckey || !slot) return
- path = "data/player_saves/[ckey[1]]/[ckey]/vore/[filename][slot].[ext]"
-
-/datum/vore_preferences/proc/load_vore()
- if(!client || !client_ckey)
- return FALSE //No client, how can we save?
- if(!client.prefs || !client.prefs.default_slot)
- return FALSE //Need to know what character to load!
-
- slot = client.prefs.default_slot
-
- load_path(client_ckey,slot)
-
- if(!path) return FALSE //Path couldn't be set?
- if(!fexists(path)) //Never saved before
- save_vore() //Make the file first
- return TRUE
-
- var/list/json_from_file = json_decode(file2text(path))
- if(!json_from_file)
- return FALSE //My concern grows
-
- var/version = json_from_file["version"]
- json_from_file = patch_version(json_from_file,version)
-
- digestable = json_from_file["digestable"]
- devourable = json_from_file["devourable"]
- feeding = json_from_file["feeding"]
- lickable = json_from_file["lickable"]
- vore_taste = json_from_file["vore_taste"]
- belly_prefs = json_from_file["belly_prefs"]
-
- //Quick sanitize
- if(isnull(digestable))
- digestable = FALSE
- if(isnull(devourable))
- devourable = FALSE
- if(isnull(feeding))
- feeding = FALSE
- if(isnull(lickable))
- lickable = FALSE
- if(isnull(belly_prefs))
- belly_prefs = list()
-
- return TRUE
-
-/datum/vore_preferences/proc/save_vore()
- if(!path)
- return FALSE
-
- var/version = VORE_VERSION //For "good times" use in the future
- var/list/settings_list = list(
- "version" = version,
- "digestable" = digestable,
- "devourable" = devourable,
- "feeding" = feeding,
- "lickable" = lickable,
- "vore_taste" = vore_taste,
- "belly_prefs" = belly_prefs,
- )
-
- //List to JSON
- var/json_to_file = json_encode(settings_list)
- if(!json_to_file)
- testing("Saving: [path] failed jsonencode")
- return FALSE
-
- //Write it out
-//#ifdef RUST_G
-// call(RUST_G, "file_write")(json_to_file, path)
-//#else
- // Fall back to using old format if we are not using rust-g
- if(fexists(path))
- fdel(path) //Byond only supports APPENDING to files, not replacing.
- text2file(json_to_file, path)
-//#endif
- if(!fexists(path))
- testing("Saving: [path] failed file write")
- return FALSE
-
- return TRUE
-
-/* commented out list things
- "allowmobvore" = allowmobvore,
- "can_be_drop_prey" = can_be_drop_prey,
- "can_be_drop_pred" = can_be_drop_pred, */
-
-//Can do conversions here
-datum/vore_preferences/proc/patch_version(var/list/json_from_file,var/version)
- return json_from_file
-
-#undef VORE_VERSION
diff --git a/code/modules/vore/eating/vorepanel.dm b/code/modules/vore/eating/vorepanel.dm
index a2746f35e8..59ef8661c6 100644
--- a/code/modules/vore/eating/vorepanel.dm
+++ b/code/modules/vore/eating/vorepanel.dm
@@ -6,7 +6,6 @@
#define BELLIES_NAME_MIN 2
#define BELLIES_NAME_MAX 12
#define BELLIES_DESC_MAX 1024
-#define FLAVOR_MAX 40
/mob/living/proc/insidePanel()
set name = "Vore Panel"
@@ -247,8 +246,8 @@
dat += "
Toggle Digestable (Currently: [user.digestable ? "ON" : "OFF"])"
dat += "
Toggle Devourable (Currently: [user.devourable ? "ON" : "OFF"])"
dat += "
Toggle Feeding (Currently: [user.feeding ? "ON" : "OFF"])"
- if(user.client.prefs_vr)
- dat += "
Toggle Licking (Currently: [user.client.prefs_vr.lickable ? "ON" : "OFF"])"
+ if(user.client.prefs)
+ dat += "
Toggle Licking (Currently: [user.client.prefs.lickable ? "ON" : "OFF"])"
//Returns the dat html to the vore_look
return dat
@@ -659,18 +658,19 @@
user.vore_selected = user.vore_organs[1]
if(href_list["saveprefs"])
- if(!user.save_vore_prefs())
+ if(!(user.client?.prefs))
+ return FALSE
+ if(!user.client.prefs.save_character())
to_chat(user, "Belly Preferences not saved!")
-
+ log_admin("Could not save vore prefs on USER: [user].")
else
to_chat(user, "Belly Preferences were saved!")
- log_admin("Could not save vore prefs on USER: [user].")
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 the current slot preferences? This will remove your current vore organs and eject their contents.","Confirmation","Reload","Cancel")
if(!alert == "Reload")
return FALSE
- if(!user.apply_vore_prefs())
+ if(!user.copy_from_prefs_vr())
alert("ERROR: Vore preferences failed to apply!","Error")
else
to_chat(user,"Vore preferences applied from active slot!")
@@ -681,13 +681,15 @@
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!")
+ if(length(new_flavor) > MAX_TASTE_LEN)
+ alert("Entered flavor/taste text too long. [MAX_TASTE_LEN] character limit.","Error!")
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")
+ if(!user || !user.client)
+ return
switch(choice)
if("Cancel")
return FALSE
@@ -696,11 +698,12 @@
if("Prevent Digestion")
user.digestable = FALSE
- if(user.client.prefs_vr)
- user.client.prefs_vr.digestable = user.digestable
+ user.client.prefs.digestable = user.digestable
if(href_list["toggledvor"])
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")
+ if(!user || !user.client)
+ return
switch(choice)
if("Cancel")
return FALSE
@@ -709,11 +712,12 @@
if("Prevent Devourment")
user.devourable = FALSE
- if(user.client.prefs_vr)
- user.client.prefs_vr.devourable = user.devourable
+ user.client.prefs.devourable = user.devourable
if(href_list["toggledfeed"])
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")
+ if(!user || !user.client)
+ return
switch(choice)
if("Cancel")
return FALSE
@@ -722,19 +726,19 @@
if("Prevent Feeding")
user.feeding = FALSE
- if(user.client.prefs_vr)
- user.client.prefs_vr.feeding = user.feeding
+ user.client.prefs.feeding = user.feeding
if(href_list["toggledlickable"])
- if(user.client.prefs_vr)
- var/choice = alert(user, "This button is to toggle your ability to be licked. Being licked is currently: [user.client.prefs_vr.lickable ? "Allowed" : "Prevented"]", "", "Allow Licking", "Cancel", "Prevent Licking")
- switch(choice)
- if("Cancel")
- return FALSE
- if("Allow Licking")
- user.client.prefs_vr.lickable = TRUE
- if("Prevent Licking")
- user.client.prefs_vr.lickable = FALSE
+ var/choice = alert(user, "This button is to toggle your ability to be licked. Being licked is currently: [user.client.prefs.lickable ? "Allowed" : "Prevented"]", "", "Allow Licking", "Cancel", "Prevent Licking")
+ if(!user || !user.client)
+ return
+ switch(choice)
+ if("Cancel")
+ return FALSE
+ if("Allow Licking")
+ user.client.prefs.lickable = TRUE
+ if("Prevent Licking")
+ user.client.prefs.lickable = FALSE
//Refresh when interacted with, returning 1 makes vore_look.Topic update
return TRUE
diff --git a/tgstation.dme b/tgstation.dme
index 9ecf1ddd5e..a8110526f8 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -79,8 +79,8 @@
#include "code\__DEFINES\obj_flags.dm"
#include "code\__DEFINES\pinpointers.dm"
#include "code\__DEFINES\pipe_construction.dm"
-#include "code\__DEFINES\power.dm"
#include "code\__DEFINES\pool.dm"
+#include "code\__DEFINES\power.dm"
#include "code\__DEFINES\preferences.dm"
#include "code\__DEFINES\procpath.dm"
#include "code\__DEFINES\profile.dm"
@@ -3132,7 +3132,6 @@
#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"