diff --git a/code/__DEFINES/rust_g.config.dm b/code/__DEFINES/rust_g.config.dm
new file mode 100644
index 0000000000..68a1b42fb1
--- /dev/null
+++ b/code/__DEFINES/rust_g.config.dm
@@ -0,0 +1 @@
+#define RUSTG_OVERRIDE_BUILTINS
\ No newline at end of file
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 540803848d..85d1b4f150 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -211,11 +211,21 @@ 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
else
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
@@ -409,8 +419,6 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
if (menuitem)
menuitem.Load_checked(src)
- hook_vr("client_new",list(src)) // CIT CHANGE - hook for client/New() changes
-
Master.UpdateTickRate()
//////////////
diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
index 146b613060..41c7971533 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -17,13 +17,12 @@
var/list/living_mobs = list()
-// Release belly contents beforey being gc'd!
+// Release belly contents before being gc'd!
/mob/living/simple_animal/Destroy()
- release_vore_contents(silent = TRUE)
+ release_vore_contents(include_absorbed = TRUE, silent = TRUE)
prey_excludes.Cut()
. = ..()
-
// Update fullness based on size & quantity of belly contents
/mob/living/simple_animal/proc/update_fullness(var/atom/movable/M)
var/new_fullness = 0
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index 456478ae63..d7124d949c 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -4,8 +4,8 @@
default_color = "4B4B4B"
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
- mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout", "taur")
- default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "snout" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None")
+ mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout", "taur", "legs")
+ default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "snout" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs")
attack_verb = "claw"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
@@ -114,8 +114,8 @@
default_color = "BCAC9B"
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
- mutant_bodyparts = list("mam_tail", "mam_body_markings", "mam_ears", "taur")
- default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Shark", "mam_body_markings" = "Shark", "mam_ears" = "None", "snout" = "Round")
+ mutant_bodyparts = list("mam_tail", "mam_body_markings", "mam_ears", "taur", "legs")
+ default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Shark", "mam_body_markings" = "Shark", "mam_ears" = "None", "snout" = "Round", "taur" = "None", "legs" = "Normal Legs")
attack_verb = "bite"
attack_sound = 'sound/weapons/bite.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
@@ -169,7 +169,7 @@
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
mutant_bodyparts = list("mam_body_markings", "mam_ears", "mam_tail", "taur", "moth_wings")
- default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "Moth", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain", "snout" = "None")
+ default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "Moth", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain", "snout" = "None", "taur" = "None")
attack_verb = "flutter" //wat?
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
index a651541870..2ae5308835 100644
--- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
@@ -125,8 +125,12 @@
"can_taste",
"bulge_size",
"silent",
- "transferchance",
"transferlocation",
+ "transferchance",
+ "autotransferchance",
+ "autotransferwait",
+ "swallow_time",
+ "vore_capacity",
"struggle_messages_outside",
"struggle_messages_inside",
"digest_messages_owner",
@@ -228,7 +232,7 @@
SEND_SIGNAL(ML, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
SEND_SIGNAL(OW, COMSIG_ADD_MOOD_EVENT, "emptypred", /datum/mood_event/emptypred)
SEND_SIGNAL(ML, COMSIG_ADD_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
-
+
if(ML.absorbed)
ML.absorbed = FALSE
if(ishuman(M) && ishuman(OW))
@@ -252,14 +256,14 @@
return
if (prey.buckled)
prey.buckled.unbuckle_mob(prey,TRUE)
-
+
if(!isbelly(prey.loc))
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "fedpred", /datum/mood_event/fedpred)
SEND_SIGNAL(prey, COMSIG_ADD_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
else
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "emptypred", /datum/mood_event/emptypred)
SEND_SIGNAL(prey, COMSIG_CLEAR_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
-
+
prey.forceMove(src)
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
if(!silent)
@@ -389,13 +393,7 @@
// If digested prey is also a pred... anyone inside their bellies gets moved up.
if(is_vore_predator(M))
- for(var/belly in M.vore_organs)
- var/obj/belly/B = belly
- for(var/thing in B)
- var/atom/movable/AM = thing
- AM.forceMove(owner.loc)
- if(isliving(AM))
- to_chat(AM,"As [M] melts away around you, you find yourself in [owner]'s [lowertext(name)]")
+ M.release_vore_contents(include_absorbed = TRUE, silent = TRUE)
//Drop all items into the belly
for(var/obj/item/W in M)
diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm
index a559d42c20..2e6018f112 100644
--- a/modular_citadel/code/modules/vore/eating/living_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/living_vr.dm
@@ -280,14 +280,6 @@
return 0
*/
-//
-// Release everything in every vore organ
-//
-/mob/living/proc/release_vore_contents(var/include_absorbed = TRUE)
- for(var/belly in vore_organs)
- var/obj/belly/B = belly
- B.release_all_contents(include_absorbed)
-
//
// Custom resist catches for /mob/living
//
@@ -354,35 +346,29 @@
// Verb for saving vore preferences to save file
//
/mob/living/proc/save_vore_prefs()
- if(!client)
- return FALSE
- if(client && !client.prefs_vr)
- return FALSE
+ if(!client || !client.prefs_vr)
+ return 0
if(!copy_to_prefs_vr())
- return FALSE
- if(client && !client.prefs_vr.save_vore())
- return FALSE
+ return 0
+ if(!client.prefs_vr.save_vore())
+ return 0
- return TRUE
+ return 1
/mob/living/proc/apply_vore_prefs()
- if(!client)
- return FALSE
- if(client && !client.prefs_vr)
- return FALSE
- if(client && !client.prefs_vr.load_vore())
- return FALSE
+ if(!client || !client.prefs_vr)
+ return 0
+ if(!client.prefs_vr.load_vore())
+ return 0
if(!copy_from_prefs_vr())
- return FALSE
+ return 0
- return TRUE
+ return 1
/mob/living/proc/copy_to_prefs_vr()
- if(!client)
- return FALSE
- if(client && !client.prefs_vr)
- src << "You attempted to save your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev."
- return FALSE
+ 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.")
+ return 0
var/datum/vore_preferences/P = client.prefs_vr
@@ -397,17 +383,15 @@
P.belly_prefs = serialized
- return TRUE
+ return 1
//
// Proc for applying vore preferences, given bellies
//
/mob/living/proc/copy_from_prefs_vr()
- if(!client)
- return FALSE
- if(client && !client.prefs_vr)
- src << "You attempted to apply your vore prefs but somehow you're in this character without a client.prefs_vr variable. Tell a dev."
- return FALSE
+ 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.")
+ return 0
var/datum/vore_preferences/P = client.prefs_vr
@@ -415,11 +399,20 @@
devourable = P.devourable
vore_taste = P.vore_taste
+ release_vore_contents(silent = TRUE)
vore_organs.Cut()
for(var/entry in P.belly_prefs)
list_to_object(entry,src)
- return TRUE
+ return 1
+
+//
+// Release everything in every vore organ
+//
+/mob/living/proc/release_vore_contents(var/include_absorbed = TRUE, var/silent = FALSE)
+ for(var/belly in vore_organs)
+ var/obj/belly/B = belly
+ B.release_all_contents(include_absorbed, silent)
//
// Returns examine messages for bellies
diff --git a/modular_citadel/code/modules/vore/eating/vore_vr.dm b/modular_citadel/code/modules/vore/eating/vore_vr.dm
index 5dd17af1db..16366bbb14 100644
--- a/modular_citadel/code/modules/vore/eating/vore_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/vore_vr.dm
@@ -27,16 +27,14 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//
// The datum type bolted onto normal preferences datums for storing Vore stuff
//
+
+#define VORE_VERSION 2
+
+GLOBAL_LIST_EMPTY(vore_preferences_datums)
+
/client
var/datum/vore_preferences/prefs_vr
-/hook/client_new/proc/add_prefs_vr(client/C)
- C.prefs_vr = new/datum/vore_preferences(C)
- if(C.prefs_vr)
- return TRUE
-
- return FALSE
-
/datum/vore_preferences
//Actual preferences
var/digestable = FALSE
@@ -83,25 +81,24 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
if(!ckey || !slot) return
path = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/vore/[filename][slot].[ext]"
-
/datum/vore_preferences/proc/load_vore()
if(!client || !client_ckey)
- return FALSE //No client, how can we save?
+ return 0 //No client, how can we save?
if(!client.prefs || !client.prefs.default_slot)
- return FALSE //Need to know what character to load!
+ return 0 //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(!path) return 0 //Path couldn't be set?
if(!fexists(path)) //Never saved before
save_vore() //Make the file first
- return TRUE
+ return 1
var/list/json_from_file = json_decode(file2text(path))
if(!json_from_file)
- return FALSE //My concern grows
+ return 0 //My concern grows
var/version = json_from_file["version"]
json_from_file = patch_version(json_from_file,version)
@@ -119,23 +116,13 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
if(isnull(belly_prefs))
belly_prefs = list()
- return TRUE
-/*
- allowmobvore = json_from_file["allowmobvore"]
- can_be_drop_prey = json_from_file["can_be_drop_prey"]
- can_be_drop_prey = json_from_file["can_be_drop_pred"]
-
- if(isnull(allowmobvore))
- allowmobvore = TRUE
- if(isnull(can_be_drop_prey))
- allowmobvore = FALSE
- if(isnull(can_be_drop_pred))
- allowmobvore = FALSE */
+ return 1
/datum/vore_preferences/proc/save_vore()
- if(!path) return FALSE
+ if(!path)
+ return 0
- var/version = 1 //For "good times" use in the future
+ var/version = VORE_VERSION //For "good times" use in the future
var/list/settings_list = list(
"version" = version,
"digestable" = digestable,
@@ -148,22 +135,22 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/json_to_file = json_encode(settings_list)
if(!json_to_file)
testing("Saving: [path] failed jsonencode")
- return FALSE
+ return 0
//Write it out
-#ifdef RUST_G
- call(RUST_G, "file_write")(json_to_file, path)
-#else
+//#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
+//#endif
if(!fexists(path))
testing("Saving: [path] failed file write")
- return FALSE
+ return 0
- return TRUE
+ return 1
/* commented out list things
"allowmobvore" = allowmobvore,
@@ -171,5 +158,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"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
\ No newline at end of file
+datum/vore_preferences/proc/patch_version(var/list/json_from_file,var/version)
+ return json_from_file
+
+#undef VORE_VERSION
diff --git a/rust_g.dll b/rust_g.dll
index ec072b01b0..3d38adccd5 100644
Binary files a/rust_g.dll and b/rust_g.dll differ
diff --git a/tgstation.dme b/tgstation.dme
index 8fad053ed3..5c12fb6d94 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -83,6 +83,7 @@
#include "code\__DEFINES\research.dm"
#include "code\__DEFINES\robots.dm"
#include "code\__DEFINES\role_preferences.dm"
+#include "code\__DEFINES\rust_g.config.dm"
#include "code\__DEFINES\rust_g.dm"
#include "code\__DEFINES\say.dm"
#include "code\__DEFINES\shuttles.dm"