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 666de9cef0..6736dc737f 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -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
diff --git a/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm b/code/modules/vore/eating/belly_dat_vr.dm
similarity index 100%
rename from modular_citadel/code/modules/vore/eating/belly_dat_vr.dm
rename to code/modules/vore/eating/belly_dat_vr.dm
diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj.dm
similarity index 95%
rename from modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
rename to code/modules/vore/eating/belly_obj.dm
index 1ad29c1af3..5433c5ae96 100644
--- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj.dm
@@ -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,"[thing] slides into your [lowertext(name)].")
//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("[owner] expels everything from their [lowertext(name)]!")
- 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("[owner] expels [M] from their [lowertext(name)]!")
- 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 = "" + struggle_outer_message + ""
struggle_user_message = "" + struggle_user_message + ""
- 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,"You start to climb out of \the [lowertext(name)].")
to_chat(owner,"Someone is attempting to climb out of your [lowertext(name)]!")
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,"You climb out of \the [lowertext(name)].")
+ to_chat(owner,"[R] climbs out of your [lowertext(name)]!")
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
diff --git a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes.dm
similarity index 99%
rename from modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
rename to code/modules/vore/eating/bellymodes.dm
index da323f02e2..4784ec6f3b 100644
--- a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes.dm
@@ -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
diff --git a/modular_citadel/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act.dm
similarity index 100%
rename from modular_citadel/code/modules/vore/eating/digest_act_vr.dm
rename to code/modules/vore/eating/digest_act.dm
diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living.dm
similarity index 97%
rename from modular_citadel/code/modules/vore/eating/living_vr.dm
rename to code/modules/vore/eating/living.dm
index d9adde04d1..e6ddcdc56d 100644
--- a/modular_citadel/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living.dm
@@ -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,"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
+ 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,"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
+ 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
diff --git a/modular_citadel/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore.dm
similarity index 94%
rename from modular_citadel/code/modules/vore/eating/vore_vr.dm
rename to code/modules/vore/eating/vore.dm
index dc813d70aa..a9b14dcdc8 100644
--- a/modular_citadel/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore.dm
@@ -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,
diff --git a/modular_citadel/code/modules/vore/eating/voreitems.dm b/code/modules/vore/eating/voreitems.dm
similarity index 100%
rename from modular_citadel/code/modules/vore/eating/voreitems.dm
rename to code/modules/vore/eating/voreitems.dm
diff --git a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel.dm
similarity index 93%
rename from modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
rename to code/modules/vore/eating/vorepanel.dm
index ae7da895a6..781417d17c 100644
--- a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel.dm
@@ -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 += "
Is Fleshy:"
dat += "[selected.is_wet ? "Yes" : "No"]"
+ if(selected.is_wet)
+ dat += "
Internal loop for prey?:"
+ dat += "[selected.wet_loop ? "Yes" : "No"]"
//Digest Mode Button
dat += "
Belly Mode:"
@@ -241,21 +244,19 @@
dat += "