diff --git a/code/ATMOSPHERICS/components/shutoff.dm b/code/ATMOSPHERICS/components/shutoff.dm
index 55d1162777..ea1f9fde70 100644
--- a/code/ATMOSPHERICS/components/shutoff.dm
+++ b/code/ATMOSPHERICS/components/shutoff.dm
@@ -26,7 +26,7 @@ GLOBAL_LIST_EMPTY(shutoff_valves)
/obj/machinery/atmospherics/valve/shutoff/Destroy()
GLOB.shutoff_valves -= src
- ..()
+ . = ..()
/obj/machinery/atmospherics/valve/shutoff/attack_ai(mob/user as mob)
return src.attack_hand(user)
diff --git a/code/__defines/_reagents.dm b/code/__defines/_reagents.dm
index bb5da52505..7759ba3cc3 100644
--- a/code/__defines/_reagents.dm
+++ b/code/__defines/_reagents.dm
@@ -69,6 +69,8 @@
#define REAGENT_ID_POTASSIUM "potassium"
#define REAGENT_RADIUM "Radium"
#define REAGENT_ID_RADIUM "radium"
+#define REAGENT_CONCENTRATEDRADIUM "Concentrated Radium"
+#define REAGENT_ID_CONCENTRATEDRADIUM "concentrated_radium"
#define REAGENT_SILICON "Silicon"
#define REAGENT_ID_SILICON "silicon"
#define REAGENT_SODIUM "Sodium"
@@ -1302,6 +1304,8 @@
#define REAGENT_ID_SIFSAP "sifsap"
#define REAGENT_STOMACID "Digestive acid"
#define REAGENT_ID_STOMACID "stomacid"
+#define REAGENT_DIETSTOMACID "Diluted digestive acid"
+#define REAGENT_ID_DIETSTOMACID "diet_stomacid"
#define REAGENT_THERMITEV "Pyrotoxin"
#define REAGENT_ID_THERMITEV "thermite_v"
#define REAGENT_CONDENSEDCAPSAICINV "Irritant toxin"
@@ -1353,3 +1357,18 @@
#define REAGENT_ID_SLIMEBONEFIXER "slime_bone_fixer"
#define REAGENT_SLIMEORGANFIXER "Agent C"
#define REAGENT_ID_SLIMEORGANFIXER "slime_organ_fixer"
+
+// Vore Belly Options
+
+#define REAGENT_ID_WATER_BELLY "water_liquidbelly"
+#define REAGENT_ID_MILK_BELLY "milk_liquidbelly"
+#define REAGENT_ID_CREAM_BELLY "cream_liquidbelly"
+#define REAGENT_ID_HONEY_BELLY "honey_liquidbelly"
+#define REAGENT_ID_CHERRYJELLY_BELLY "cherry_liquidbelly"
+#define REAGENT_ID_STOMACID_BELLY "stomacid_liquidbelly"
+#define REAGENT_ID_DIETSTOMACID_BELLY "diet_stomacid_liquidbelly"
+#define REAGENT_ID_CLEANER_BELLY "cleaner_liquidbelly"
+#define REAGENT_ID_LUBE_BELLY "lube_liquidbelly"
+#define REAGENT_ID_BIOMASS_BELLY "biomass_liquidbelly"
+#define REAGENT_ID_CONCENTRATEDRADIUM_BELLY "cradium_liquidbelly"
+#define REAGENT_ID_TRICORDRAZINE_BELLY "tricordrazine_liquidbelly"
diff --git a/code/__defines/_reagents_ch.dm b/code/__defines/_reagents_ch.dm
index 96a0348098..b1429fc8e3 100644
--- a/code/__defines/_reagents_ch.dm
+++ b/code/__defines/_reagents_ch.dm
@@ -37,8 +37,6 @@
#define REAGENT_ID_APHRODISIAC "aphrodisiac"
#define REAGENT_SORBITOL "Sorbitol"
#define REAGENT_ID_SORBITOL "sorbitol"
-#define REAGENT_CONCENTRATEDRADIUM "Concentrated Radium"
-#define REAGENT_ID_CONCENTRATEDRADIUM "concentrated_radium"
#define REAGENT_CLARIDYL "Claridyl Natural Remedy"
#define REAGENT_ID_CLARIDYL "claridyl"
#define REAGENT_DYLOTEANE "The Anti-Irish"
@@ -271,8 +269,6 @@
// Toxins
-#define REAGENT_DIETSTOMACID "Diluted digestive acid"
-#define REAGENT_ID_DIETSTOMACID "diet_stomacid"
#define REAGENT_DEATHBLOOD "Irradiating Blood"
#define REAGENT_ID_DEATHBLOOD "deathblood"
#define REAGENT_LIQUIDFIRE "Liquid Fire"
diff --git a/code/__defines/belly_messages.dm b/code/__defines/belly_messages.dm
new file mode 100644
index 0000000000..69eaff17d5
--- /dev/null
+++ b/code/__defines/belly_messages.dm
@@ -0,0 +1,83 @@
+// Vore belly options
+
+#define STRUGGLE_OUTSIDE "smo"
+#define STRUGGLE_INSIDE "smi"
+
+#define ABSORBED_STRUGGLE_OUSIDE "asmo"
+#define ABSORBED_STRUGGLE_INSIDE "asmi"
+
+#define ESCAPE_ATTEMPT_OWNER "escao"
+#define ESCAPE_ATTEMPT_PREY "escap"
+
+#define ESCAPE_OWNER "esco"
+#define ESCAPE_PREY "escp"
+#define ESCAPE_OUTSIDE "escout"
+
+#define ESCAPE_ITEM_OWNER "escio"
+#define ESCAPE_ITEM_PREY "escip"
+#define ESCAPE_ITEM_OUTSIDE "esciout"
+
+#define ESCAPE_FAIL_OWNER "escfo"
+#define ESCAPE_FAIL_PREY "escfp"
+
+#define ABSORBED_ESCAPE_ATTEMPT_OWNER "aescao"
+#define ABSORBED_ESCAPE_ATTEMPT_PREY "aescap"
+
+#define ABSORBED_ESCAPE_OWNER "aesco"
+#define ABSORBED_ESCAPE_PREY "aescp"
+#define ABSORBED_ESCAPE_OUTSIDE "aescout"
+
+#define FULL_ABSORBED_ESCAPE_OWNER "aescfo"
+#define FULL_ABSORBED_ESCAPE_PREY "aescfp"
+
+#define PRIMARY_TRANSFER_OWNER "trnspo"
+#define PRIMARY_TRANSFER_PREY "trnspp"
+
+#define SECONDARY_TRANSFER_OWNER "trnsso"
+#define SECONDARY_TRANSFER_PREY "trnssp"
+
+#define PRIMARY_AUTO_TRANSFER_OWNER "atrnspo"
+#define PRIMARY_AUTO_TRANSFER_PREY "atrnspp"
+
+#define SECONDARY_AUTO_TRANSFER_OWNER "atrnsso"
+#define SECONDARY_AUTO_TRANSFER_PREY "atrnssp"
+
+#define DIGEST_CHANCE_OWNER "stmodo"
+#define DIGEST_CHANCE_PREY "stmodp"
+
+#define ABSORB_CHANCE_OWNER "stmoao"
+#define ABSORB_CHANCE_PREY "stmoap"
+
+#define DIGEST_OWNER "dmo"
+#define DIGEST_PREY "dmp"
+
+#define EXAMINES "em"
+#define EXAMINES_ABSORBED "ema"
+
+#define ABSORB_OWNER "amo"
+#define ABSORB_PREY "amp"
+
+#define UNABSORBS_OWNER "uamo"
+#define UNABSORBS_PREY "uamp"
+
+#define BELLY_MODE_DIGEST "im_digest"
+#define BELLY_MODE_HOLD "im_hold"
+#define BELLY_MODE_HOLD_ABSORB "im_holdabsorbed"
+#define BELLY_MODE_ABSORB "im_absorb"
+#define BELLY_MODE_HEAL "im_heal"
+#define BELLY_MODE_DRAIN "im_drain"
+#define BELLY_MODE_STEAL "im_steal"
+#define BELLY_MODE_EGG "im_egg"
+#define BELLY_MODE_SHRINK "im_shrink"
+#define BELLY_MODE_GROW "im_grow"
+#define BELLY_MODE_UNABSORB "im_unabsorb"
+
+#define VB_MESSAGE_SANIRY(type) ASSERT(type == STRUGGLE_OUTSIDE || type == STRUGGLE_INSIDE || type == ABSORBED_STRUGGLE_OUSIDE || type == ABSORBED_STRUGGLE_INSIDE || type == ESCAPE_ATTEMPT_OWNER || type == ESCAPE_ATTEMPT_PREY ||\
+ type == ESCAPE_PREY || type == ESCAPE_OWNER || type == ESCAPE_OUTSIDE || type == ESCAPE_ITEM_PREY || type == ESCAPE_ITEM_OWNER || type == ESCAPE_ITEM_OUTSIDE || type == ESCAPE_FAIL_PREY ||\
+ type == ESCAPE_FAIL_OWNER || type == ABSORBED_ESCAPE_ATTEMPT_OWNER || type == ABSORBED_ESCAPE_ATTEMPT_PREY || type == ABSORBED_ESCAPE_PREY || type == ABSORBED_ESCAPE_OWNER ||\
+ type == ABSORBED_ESCAPE_OUTSIDE || type == FULL_ABSORBED_ESCAPE_PREY || type == FULL_ABSORBED_ESCAPE_OWNER || type == PRIMARY_TRANSFER_PREY || type == PRIMARY_TRANSFER_OWNER ||\
+ type == SECONDARY_TRANSFER_PREY || type == SECONDARY_TRANSFER_OWNER || type == PRIMARY_AUTO_TRANSFER_PREY || type == PRIMARY_AUTO_TRANSFER_OWNER || type == SECONDARY_AUTO_TRANSFER_PREY ||\
+ type == SECONDARY_AUTO_TRANSFER_OWNER || type == DIGEST_CHANCE_PREY || type == DIGEST_CHANCE_OWNER || type == ABSORB_CHANCE_PREY || type == ABSORB_CHANCE_OWNER || type == DIGEST_OWNER ||\
+ type == DIGEST_PREY || type == ABSORB_OWNER || type == ABSORB_PREY || type == UNABSORBS_OWNER || type == UNABSORBS_PREY || type == EXAMINES || type == EXAMINES_ABSORBED ||\
+ type == BELLY_MODE_DIGEST || type == BELLY_MODE_HOLD || type == BELLY_MODE_HOLD_ABSORB || type == BELLY_MODE_ABSORB || type == BELLY_MODE_HEAL || type == BELLY_MODE_DRAIN ||\
+ type == BELLY_MODE_STEAL || type == BELLY_MODE_EGG || type == BELLY_MODE_SHRINK || type == BELLY_MODE_GROW || type == BELLY_MODE_UNABSORB)
diff --git a/code/__defines/belly_modes_ch.dm b/code/__defines/belly_modes_ch.dm
deleted file mode 100644
index 5765a79595..0000000000
--- a/code/__defines/belly_modes_ch.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-//CHOMP belly modes
-
-
-
-//Belly Reagents mode flags
-#define DM_FLAG_REAGENTSNUTRI 0x1
-#define DM_FLAG_REAGENTSDIGEST 0x2
-#define DM_FLAG_REAGENTSABSORB 0x4
-#define DM_FLAG_REAGENTSDRAIN 0x8
-
-//For belly fullscreen shennanigans outside of bellies, due to Life() clearing belly fullscreens outside of bellies.
-#define ATOM_BELLY_FULLSCREEN "belly_atom_vfx"
-
-//Auto-transfer mob flags
-#define AT_FLAG_CREATURES 0x1
-#define AT_FLAG_ABSORBED 0x2
-#define AT_FLAG_CARBON 0x4
-#define AT_FLAG_SILICON 0x8
-#define AT_FLAG_MOBS 0x10
-#define AT_FLAG_ANIMALS 0x20
-#define AT_FLAG_MICE 0x40
-#define AT_FLAG_DEAD 0x80
-#define AT_FLAG_CANDIGEST 0x100
-#define AT_FLAG_CANABSORB 0x200
-#define AT_FLAG_HEALTHY 0x400
-
-//Auto-transfer item flags
-#define AT_FLAG_ITEMS 0x1
-#define AT_FLAG_TRASH 0x2
-#define AT_FLAG_EGGS 0x4
-#define AT_FLAG_REMAINS 0x8
-#define AT_FLAG_INDIGESTIBLE 0x10
-#define AT_FLAG_RECYCLABLE 0x20
-#define AT_FLAG_ORES 0x40
-#define AT_FLAG_CLOTHES 0x80
-#define AT_FLAG_FOOD 0x100
-
-//Vorespawn flags
-#define VS_FLAG_ABSORB_YES 0x1
-#define VS_FLAG_ABSORB_PREY 0x2
diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm
index ec7d0f18ff..d93fd3ee0b 100644
--- a/code/__defines/belly_modes_vr.dm
+++ b/code/__defines/belly_modes_vr.dm
@@ -22,15 +22,15 @@
#define DM_FLAG_JAMSENSORS 0x20
#define DM_FLAG_FORCEPSAY 0x40
#define DM_FLAG_SPARELIMB 0x80
-#define DM_FLAG_SLOWBODY 0x100 //CHOMPAdd
-#define DM_FLAG_MUFFLEITEMS 0x200 //CHOMPAdd
-#define DM_FLAG_TURBOMODE 0x400 //CHOMPAdd
+#define DM_FLAG_SLOWBODY 0x100
+#define DM_FLAG_MUFFLEITEMS 0x200
+#define DM_FLAG_TURBOMODE 0x400
//Item related modes
#define IM_HOLD "Hold"
#define IM_DIGEST_FOOD "Digest (Food Only)"
#define IM_DIGEST "Digest"
-#define IM_DIGEST_PARALLEL "Digest (Dispersed Damage)" //CHOMPedit
+#define IM_DIGEST_PARALLEL "Digest (Dispersed Damage)"
//Stance for hostile mobs to be in while devouring someone.
#define HOSTILE_STANCE_EATING 99
@@ -53,3 +53,40 @@
#define DM_FLAG_VORESPRITE_TAIL 0x2
#define DM_FLAG_VORESPRITE_MARKING 0x4
#define DM_FLAG_VORESPRITE_ARTICLE 0x8
+
+//Belly Reagents mode flags
+#define DM_FLAG_REAGENTSNUTRI 0x1
+#define DM_FLAG_REAGENTSDIGEST 0x2
+#define DM_FLAG_REAGENTSABSORB 0x4
+#define DM_FLAG_REAGENTSDRAIN 0x8
+
+//For belly fullscreen shennanigans outside of bellies, due to Life() clearing belly fullscreens outside of bellies.
+#define ATOM_BELLY_FULLSCREEN "belly_atom_vfx"
+
+//Auto-transfer mob flags
+#define AT_FLAG_CREATURES 0x1
+#define AT_FLAG_ABSORBED 0x2
+#define AT_FLAG_CARBON 0x4
+#define AT_FLAG_SILICON 0x8
+#define AT_FLAG_MOBS 0x10
+#define AT_FLAG_ANIMALS 0x20
+#define AT_FLAG_MICE 0x40
+#define AT_FLAG_DEAD 0x80
+#define AT_FLAG_CANDIGEST 0x100
+#define AT_FLAG_CANABSORB 0x200
+#define AT_FLAG_HEALTHY 0x400
+
+//Auto-transfer item flags
+#define AT_FLAG_ITEMS 0x1
+#define AT_FLAG_TRASH 0x2
+#define AT_FLAG_EGGS 0x4
+#define AT_FLAG_REMAINS 0x8
+#define AT_FLAG_INDIGESTIBLE 0x10
+#define AT_FLAG_RECYCLABLE 0x20
+#define AT_FLAG_ORES 0x40
+#define AT_FLAG_CLOTHES 0x80
+#define AT_FLAG_FOOD 0x100
+
+//Vorespawn flags
+#define VS_FLAG_ABSORB_YES 0x1
+#define VS_FLAG_ABSORB_PREY 0x2
diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm
index cd1e5a7e23..1f5a958548 100644
--- a/code/__defines/chemistry.dm
+++ b/code/__defines/chemistry.dm
@@ -5,7 +5,7 @@
#define CHEM_TOUCH 1
#define CHEM_INGEST 2
#define CHEM_BLOOD 3
-#define CHEM_VORE 4 //CHOMP vore belly interactions
+#define CHEM_VORE 4 // vore belly interactions
#define MINIMUM_CHEMICAL_VOLUME 0.01
diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
index 49f80fd19a..2aa9f41c5f 100644
--- a/code/__defines/dcs/signals.dm
+++ b/code/__defines/dcs/signals.dm
@@ -813,6 +813,13 @@
#define COMSIG_OBSERVER_APC "observer_apc"
#define COMSIG_OBSERVER_GLOBALMOVED "observer_global_move"
+// Bellies
+///from /obj/belly/HandleBellyReagents() and /obj/belly/update_internal_overlay()
+#define COMSIG_BELLY_UPDATE_VORE_FX "update_vore_fx"
+///from /obj/belly/process()
+#define COMSIG_BELLY_UPDATE_PREY_LOOP "update_prey_loop"
+/// COMSIG used to get messages where they need to go
+#define COMSIG_VISIBLE_MESSAGE "visible_message"
//Unittest data update
#ifdef UNIT_TEST
diff --git a/code/__defines/dcs/signals_ch.dm b/code/__defines/dcs/signals_ch.dm
deleted file mode 100644
index eb8b2cbbfa..0000000000
--- a/code/__defines/dcs/signals_ch.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-// Bellies
-
-///from /obj/belly/HandleBellyReagents() and /obj/belly/update_internal_overlay()
-#define COMSIG_BELLY_UPDATE_VORE_FX "update_vore_fx"
-///from /obj/belly/process()
-#define COMSIG_BELLY_UPDATE_PREY_LOOP "update_prey_loop"
-/// COMSIG used to get messages where they need to go
-#define COMSIG_VISIBLE_MESSAGE "visible_message"
diff --git a/code/__defines/map.dm b/code/__defines/map.dm
index c529f3e192..045119d1c6 100644
--- a/code/__defines/map.dm
+++ b/code/__defines/map.dm
@@ -7,12 +7,12 @@
#define MAP_LEVEL_EMPTY 0x020 // Empty Z-levels that may be used for various things (currently used by bluespace jump)
#define MAP_LEVEL_CONSOLES 0x040 // Z-levels available to various consoles, such as the crew monitor (when that gets coded in). Defaults to station_levels if unset.
#define MAP_LEVEL_XENOARCH_EXEMPT 0x080 // Z-levels exempt from xenoarch digsite generation.
-#define MAP_LEVEL_VORESPAWN 0x100 //CHOMPedit Z-levels players are allowed to late join to via vorish means. Usually non-dangerous locations.
-#define MAP_LEVEL_PERSIST 0x200 // Z-levels where SSpersistence should persist between rounds //CHOMPedit bumped to 0x200 because vorespawn, hopefully this doesn't break things
-#define MAP_LEVEL_MAPPABLE 0x400 // Z-levels where mapping units will work fully //CHOMPedit bumped to 0x400, somethingsomething don't break
-#define MAP_LEVEL_BELOW_BLOCKED 0x800 // Z-levels in multiz with level below not meant to be 'normally' accessible //CHOMPedit bumped to 0x800, please god do not break
+#define MAP_LEVEL_VORESPAWN 0x100 // Z-levels players are allowed to late join to via vorish means. Usually non-dangerous locations.
+#define MAP_LEVEL_PERSIST 0x200 // Z-levels where SSpersistence should persist between rounds
+#define MAP_LEVEL_MAPPABLE 0x400 // Z-levels where mapping units will work fully
+#define MAP_LEVEL_BELOW_BLOCKED 0x800 // Z-levels in multiz with level below not meant to be 'normally' accessible
// Misc map defines.
-#define SUBMAP_MAP_EDGE_PAD 8 // Automatically created submaps are forbidden from being this close to the main map's edge. //VOREStation Edit
+#define SUBMAP_MAP_EDGE_PAD 8 // Automatically created submaps are forbidden from being this close to the main map's edge.
#define CELL_ALIVE(VAL) (VAL == cell_live_value)
diff --git a/code/__defines/math.dm b/code/__defines/math.dm
index 57c9b56ce3..4d141e562d 100644
--- a/code/__defines/math.dm
+++ b/code/__defines/math.dm
@@ -228,3 +228,10 @@
if(num < 0)
return 0
return sqrt(num)
+
+//Proc to check if a flag is active to use in universal math
+/proc/global_flag_check(element, flag)
+ if(element & flag)
+ return 1
+ else
+ return 0
diff --git a/code/__defines/math_ch.dm b/code/__defines/math_ch.dm
index 9ff3059cd6..a9be4c314e 100644
--- a/code/__defines/math_ch.dm
+++ b/code/__defines/math_ch.dm
@@ -1,8 +1 @@
-//Proc to check if a flag is active to use in universal math
-/proc/global_flag_check(element, flag)
- if(element & flag)
- return 1
- else
- return 0
-
#define GAUSSIAN_RANDOM(vars...) ((-2*log(rand()))**0.5 * cos(6.28318530718*rand()))
diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index 3656ac604b..fd5acd5669 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -480,9 +480,9 @@
#define VIS_CH_STOMACH 34
-#define VIS_SOULCATCHER 35 // CHOMPAdd
+#define VIS_SOULCATCHER 35
-#define VIS_COUNT 35 //Must be highest number from above. // CHOMPEdit
+#define VIS_COUNT 35 //Must be highest number from above.
//Some mob icon layering defines
#define BODY_LAYER -100
diff --git a/code/__defines/nif.dm b/code/__defines/nif.dm
new file mode 100644
index 0000000000..439edbab6a
--- /dev/null
+++ b/code/__defines/nif.dm
@@ -0,0 +1,13 @@
+//These two also have NIF FLAG representations. These are the local setting representations.
+#define NIF_SC_CATCHING_ME 0x1
+#define NIF_SC_CATCHING_OTHERS 0x2
+//These are purely local setings flags, without global representation.
+#define NIF_SC_ALLOW_EARS 0x4
+#define NIF_SC_ALLOW_EYES 0x8
+#define NIF_SC_BACKUPS 0x10
+#define NIF_SC_PROJECTING 0x20
+#define SOULGEM_CATCHING_GHOSTS 0x200
+#define SOULGEM_ACTIVE 0x400
+#define SOULGEM_SHOW_VORE_SFX 0x800
+#define SOULGEM_CATCHING_DRAIN 0x1000
+#define SOULGEM_SEE_SR_SOULS 0x2000
diff --git a/code/__defines/mob_ch.dm b/code/__defines/soulcatcher.dm
similarity index 100%
rename from code/__defines/mob_ch.dm
rename to code/__defines/soulcatcher.dm
diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm
index 362e640e91..3e75070348 100644
--- a/code/_helpers/global_lists.dm
+++ b/code/_helpers/global_lists.dm
@@ -379,3 +379,27 @@ var/global/list/blacklisted_artifact_effects = list(
/datum/artifact_effect/gas/phoron,
/datum/artifact_effect/extreme
)
+
+//stuff that only synths can eat
+var/global/list/edible_tech = list(/obj/item/cell,
+ /obj/item/circuitboard,
+ /obj/item/integrated_circuit,
+ /obj/item/broken_device,
+ /obj/item/brokenbug,
+ )
+
+var/global/list/item_digestion_blacklist = list(
+ /obj/item/hand_tele,
+ /obj/item/card/id,
+ /obj/item/gun,
+ /obj/item/pinpointer,
+ /obj/item/clothing/shoes/magboots,
+ /obj/item/areaeditor/blueprints,
+ /obj/item/disk/nuclear,
+ /obj/item/perfect_tele_beacon,
+ /obj/item/organ/internal/brain/slime,
+ /obj/item/mmi/digital/posibrain,
+ /obj/item/mmi/digital/robot,
+ /obj/item/rig/protean)
+
+var/global/list/item_tf_spawnpoints = list() // Global variable tracking which items are item tf spawnpoints
diff --git a/code/_helpers/global_lists_ch.dm b/code/_helpers/global_lists_ch.dm
index eea1fc9f2c..d1b107b2f6 100644
--- a/code/_helpers/global_lists_ch.dm
+++ b/code/_helpers/global_lists_ch.dm
@@ -1,27 +1,3 @@
-var/global/list/item_tf_spawnpoints = list() // Global variable tracking which items are item tf spawnpoints
-
-//stuff that only synths can eat
-var/global/list/edible_tech = list(/obj/item/cell,
- /obj/item/circuitboard,
- /obj/item/integrated_circuit,
- /obj/item/broken_device,
- /obj/item/brokenbug,
- )
-
-var/global/list/item_digestion_blacklist = list(
- /obj/item/hand_tele,
- /obj/item/card/id,
- /obj/item/gun,
- /obj/item/pinpointer,
- /obj/item/clothing/shoes/magboots,
- /obj/item/areaeditor/blueprints,
- /obj/item/disk/nuclear,
- /obj/item/perfect_tele_beacon,
- /obj/item/organ/internal/brain/slime,
- /obj/item/mmi/digital/posibrain,
- /obj/item/mmi/digital/robot,
- /obj/item/rig/protean)
-
// Options for transforming into a different mob in virtual reality.
var/global/list/vr_mob_tf_options = list(
"Borg" = /mob/living/silicon/robot,
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 55c2d230d4..ed7c821f67 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -1621,6 +1621,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage)
. += new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags
. += new /obj/screen/plane_master{plane = PLANE_CH_STOMACH} //Stomachs
. += new /obj/screen/plane_master{plane = PLANE_AUGMENTED} //Augmented reality
+ . += new /obj/screen/plane_master{plane = PLANE_SOULCATCHER} //Soulcatcher
//VOREStation Add End
/proc/CallAsync(datum/source, proctype, list/arguments)
set waitfor = FALSE
diff --git a/code/controllers/configuration/entries/chompstation.dm b/code/controllers/configuration/entries/chompstation.dm
index c0c19a7201..42befba43b 100644
--- a/code/controllers/configuration/entries/chompstation.dm
+++ b/code/controllers/configuration/entries/chompstation.dm
@@ -9,10 +9,6 @@
///datum/config_entry/flag/emojis
// default = FALSE
-/// In future see about making a function to adjust volume serverside in config.txt, easy to do with reenable values. - Jack
-/datum/config_entry/number/vorefootstep_volume
- default = 75
-
/// So, nodebot is a supplement to the TGS discord bot pretty much. For things likes faxes and the manifest it's very helpful because it's able to render html into an image and post it.
/datum/config_entry/flag/nodebot_enabled
default = FALSE
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index 5508d5e168..2f0fc843e9 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -62,6 +62,10 @@
/datum/config_entry/number/footstep_volume
default = 0
+/// In future see about making a function to adjust volume serverside in config.txt, easy to do with reenable values. - Jack
+/datum/config_entry/number/vorefootstep_volume
+ default = 75
+
/datum/config_entry/flag/use_loyalty_implants
/datum/config_entry/flag/show_human_death_message
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index f80059710b..536b0834c6 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -29,8 +29,8 @@
var/cloaked = FALSE //If we're cloaked or not
var/image/cloaked_selfimage //The image we use for our client to let them see where we are
- var/belly_cycles = 0 //CHOMPEdit: Counting current belly process cycles for autotransfer.
- var/autotransferable = TRUE //CHOMPEdit: Toggle for autotransfer mechanics.
+ var/belly_cycles = 0 // Counting current belly process cycles for autotransfer.
+ var/autotransferable = TRUE // Toggle for autotransfer mechanics.
/atom/movable/Initialize(mapload)
. = ..()
@@ -667,3 +667,10 @@
var/direction = get_dir(old_loc, new_loc)
loc = new_loc
Moved(old_loc, direction, TRUE)
+
+// Helper procs called on entering/exiting a belly. Does nothing by default, override on children for special behavior.
+/atom/movable/proc/enter_belly(obj/belly/B)
+ return
+
+/atom/movable/proc/exit_belly(obj/belly/B)
+ return
diff --git a/code/game/atoms_movable_ch.dm b/code/game/atoms_movable_ch.dm
index ed53b07c65..c06ca53000 100644
--- a/code/game/atoms_movable_ch.dm
+++ b/code/game/atoms_movable_ch.dm
@@ -51,12 +51,5 @@
for (var/atom/movable/location as anything in get_nested_locs(src)|src)
LAZYOR(location.recursive_listeners, arrived.recursive_listeners)
-// Helper procs called on entering/exiting a belly. Does nothing by default, override on children for special behavior.
-/atom/movable/proc/enter_belly(obj/belly/B)
- return
-
-/atom/movable/proc/exit_belly(obj/belly/B)
- return
-
/atom/movable/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
return
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 6e4b4027cc..b22e8e8d77 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -227,10 +227,8 @@
SSjob.shift_keys[title] += keylist
//CHOMPadd end
-//CHOMPAdd Start
/datum/job/proc/update_limit(var/comperator)
return
-//CHOMPAdd End
// Check client-specific availability rules.
/datum/job/proc/player_has_enough_pto(client/C)
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 9d144e2a23..d7a9cbf669 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -87,14 +87,12 @@ var/global/datum/controller/occupations/job_master
return 1
return 0
-//CHOMPAdd Start
/datum/controller/occupations/proc/update_limit(var/rank, var/comperator)
var/datum/job/job = GetJob(rank)
if(job && job.total_positions != -1)
job.update_limit(comperator)
return 1
return 0
-//CHOMPAdd End
/datum/controller/occupations/proc/FindOccupationCandidates(datum/job/job, level, flag)
Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]")
@@ -677,13 +675,13 @@ var/global/datum/controller/occupations/job_master
var/datum/spawnpoint/spawnpos
var/fail_deadly = FALSE
var/obj/belly/vore_spawn_gut
- var/absorb_choice = FALSE //CHOMPAdd - Ability to start absorbed with vorespawn
+ var/absorb_choice = FALSE // Ability to start absorbed with vorespawn
var/mob/living/prey_to_nomph
- var/obj/item/item_to_be //CHOMPEdit - Item TF spawning
- var/mob/living/item_carrier //CHOMPEdit - Capture crystal spawning
- var/vorgans = FALSE //CHOMPEdit - capture crystal simplemob spawning
+ var/obj/item/item_to_be // Item TF spawning
+ var/mob/living/item_carrier // Capture crystal spawning
+ var/vorgans = FALSE // capture crystal simplemob spawning
- //CHOMPEdit - Remove fail_deadly addition on offmap_spawn
+ // Remove fail_deadly addition on offmap_spawn
//Spawn them at their preferred one
if(C && C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint))
@@ -694,7 +692,7 @@ var/global/datum/controller/occupations/job_master
if(!isliving(V.mob))
continue
var/mob/living/M = V.mob
- if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_vore_warning)) //CHOMPEdit
+ if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_vore_warning))
continue
if(!M.latejoin_vore)
continue
@@ -713,10 +711,8 @@ var/global/datum/controller/occupations/job_master
for(var/obj/belly/Y in pred.vore_organs)
if(Y.vorespawn_blacklist)
continue
- //CHOMPAdd Start
if(LAZYLEN(Y.vorespawn_whitelist) && !(C.ckey in Y.vorespawn_whitelist))
continue
- //CHOMPAdd End
available_bellies += Y
var/backup = tgui_alert(C, "Do you want a mind backup?", "Confirm", list("Yes", "No"))
if(backup == "Yes")
@@ -724,7 +720,6 @@ var/global/datum/controller/occupations/job_master
vore_spawn_gut = tgui_input_list(C, "Choose a Belly.", "Belly Spawnpoint", available_bellies)
if(!vore_spawn_gut)
return
- //CHOMPAdd Start
if(vore_spawn_gut.vorespawn_absorbed & VS_FLAG_ABSORB_YES)
absorb_choice = TRUE
if(vore_spawn_gut.vorespawn_absorbed & VS_FLAG_ABSORB_PREY)
@@ -732,7 +727,6 @@ var/global/datum/controller/occupations/job_master
absorb_choice = FALSE
else if(tgui_alert(C, "[pred]'s [vore_spawn_gut] will start with you absorbed. Continue?", "Confirm", list("Yes", "No")) != "Yes")
return
- //CHOMPAdd End
to_chat(C, span_boldwarning("[pred] has received your spawn request. Please wait."))
log_admin("[key_name(C)] has requested to vore spawn into [key_name(pred)]")
message_admins("[key_name(C)] has requested to vore spawn into [key_name(pred)]")
@@ -740,21 +734,17 @@ var/global/datum/controller/occupations/job_master
var/confirm
if(pred.no_latejoin_vore_warning)
if(pred.no_latejoin_vore_warning_time > 0)
- //CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn absorbed as your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), pred.no_latejoin_vore_warning_time SECONDS)
else
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn into your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), pred.no_latejoin_vore_warning_time SECONDS)
- //CHOMPEdit End
if(!confirm)
confirm = "Yes"
else
- //CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn absorbed as your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
else
confirm = tgui_alert(pred, "[C.prefs.real_name] is attempting to spawn into your [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
- //CHOMPEdit End
if(confirm != "Yes")
to_chat(C, span_warning("[pred] has declined your spawn request."))
var/message = sanitizeSafe(input(pred,"Do you want to leave them a message?")as text|null)
@@ -777,7 +767,7 @@ var/global/datum/controller/occupations/job_master
log_admin("[key_name(C)] has vore spawned into [key_name(pred)]")
message_admins("[key_name(C)] has vore spawned into [key_name(pred)]")
to_chat(C, span_notice("You have been spawned via vore. You are free to roleplay how you got there as you please, such as teleportation or having had already been there."))
- if(vore_spawn_gut.entrance_logs) //CHOMPEdit
+ if(vore_spawn_gut.entrance_logs)
to_chat(pred, span_notice("Your prey has spawned via vore. You are free to roleplay this how you please, such as teleportation or having had already been there."))
else
to_chat(C, span_warning("No predators were available to accept you."))
@@ -790,7 +780,7 @@ var/global/datum/controller/occupations/job_master
if(!isliving(V.mob))
continue
var/mob/living/M = V.mob
- if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_prey_warning)) //CHOMPEdit
+ if(M.stat == UNCONSCIOUS || M.stat == DEAD || (M.client.is_afk(10 MINUTES) && !M.no_latejoin_prey_warning))
continue
if(!M.latejoin_prey)
continue
@@ -812,32 +802,26 @@ var/global/datum/controller/occupations/job_master
vore_spawn_gut = tgui_input_list(C, "Choose your Belly.", "Belly Spawnpoint", available_bellies)
if(!vore_spawn_gut)
return
- //CHOMPAdd Start
if(alert(C, "Do you want to instantly absorb them?", "Confirm", "Yes", "No") == "Yes")
absorb_choice = TRUE
- //CHOMPAdd End
- to_chat(C, "[prey] has received your spawn request. Please wait.")
+ to_chat(C, span_boldwarning("[prey] has received your spawn request. Please wait."))
log_admin("[key_name(C)] has requested to pred spawn onto [key_name(prey)]")
message_admins("[key_name(C)] has requested to pred spawn onto [key_name(prey)]")
var/confirm
if(prey.no_latejoin_prey_warning)
if(prey.no_latejoin_prey_warning_time > 0)
- //CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore and instantly absorb you with their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), prey.no_latejoin_prey_warning_time SECONDS)
else
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore you into their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"), prey.no_latejoin_prey_warning_time SECONDS)
- //CHOMPEdit End
if(!confirm)
confirm = "Yes"
else
- //CHOMPEdit Start
if(absorb_choice)
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore and instantly absorb you with their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
else
confirm = tgui_alert(prey, "[C.prefs.real_name] is attempting to televore you into their [vore_spawn_gut]. Let them?", "Confirm", list("No", "Yes"))
- //CHOMPEdit End
if(confirm != "Yes")
to_chat(C, span_warning("[prey] has declined your spawn request."))
var/message = sanitizeSafe(input(prey,"Do you want to leave them a message?")as text|null)
@@ -858,7 +842,7 @@ var/global/datum/controller/occupations/job_master
else
to_chat(C, span_warning("No prey were available to accept you."))
return
- //CHOMPEdit - Item TF spawnpoints!
+ // Item TF spawnpoints!
else if(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) == "Item TF spawn")
var/list/items = list()
var/list/item_names = list()
@@ -918,7 +902,7 @@ var/global/datum/controller/occupations/job_master
var/mob/living/carrier = carriers[index]
if(istype(carrier))
- to_chat(C, "[carrier] has received your spawn request. Please wait.")
+ to_chat(C, span_boldwarning("[carrier] has received your spawn request. Please wait."))
log_and_message_admins("[key_name(C)] has requested to item spawn into [key_name(carrier)]'s possession")
var/confirm = tgui_alert(carrier, "[C.prefs.real_name] is attempting to join as the [item_name] in your possession.", "Confirm", list("No", "Yes"))
@@ -958,7 +942,6 @@ var/global/datum/controller/occupations/job_master
else
to_chat(C, span_warning("No items were available to accept you."))
return
- //CHOMPEdit End
else
if(!(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) in using_map.allowed_spawns))
if(fail_deadly)
@@ -971,18 +954,17 @@ var/global/datum/controller/occupations/job_master
spawnpos = spawntypes[C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint)]
//We will return a list key'd by "turf" and "msg"
- . = list("turf","msg", "voreny", "prey", "itemtf", "vorgans", "carrier") //CHOMPEdit - Item TF spawnpoints, spawn as mob
+ . = list("turf","msg", "voreny", "prey", "itemtf", "vorgans", "carrier") // Item TF spawnpoints, spawn as mob
if(vore_spawn_gut)
.["voreny"] = vore_spawn_gut
- .["absorb"] = absorb_choice //CHOMPAdd
+ .["absorb"] = absorb_choice
if(prey_to_nomph)
.["prey"] = prey_to_nomph //We pass this on later to reverse the vorespawn in new_player.dm
- //CHOMPEdit Start - Item TF spawnpoints
+ // Item TF spawnpoints
if(item_to_be)
.["carrier"] = item_carrier
.["vorgans"] = vorgans
.["itemtf"] = item_to_be
- //CHOMPEdit End
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
if(spawnpos.check_job_spawning(rank))
.["turf"] = spawnpos.get_spawn_position()
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm
index 6f8ec101af..7f18d06231 100644
--- a/code/game/machinery/Beacon.dm
+++ b/code/game/machinery/Beacon.dm
@@ -22,7 +22,7 @@
/obj/machinery/bluespace_beacon/Destroy()
if(Beacon)
qdel(Beacon)
- ..()
+ . = ..()
// update the invisibility and icon
/obj/machinery/bluespace_beacon/hide(var/intact)
diff --git a/code/game/machinery/bomb_tester_vr.dm b/code/game/machinery/bomb_tester_vr.dm
index baa6c6633a..3bdf6432dc 100644
--- a/code/game/machinery/bomb_tester_vr.dm
+++ b/code/game/machinery/bomb_tester_vr.dm
@@ -42,7 +42,7 @@
tank1 = null //Base machine Destroy()
tank2 = null //handles deleting contents
test_canister = null
- ..()
+ . = ..()
/obj/machinery/bomb_tester/dismantle()
if(tank1)
diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm
index 60e37ed506..e041a56719 100644
--- a/code/game/machinery/computer/RCON_Console.dm
+++ b/code/game/machinery/computer/RCON_Console.dm
@@ -22,7 +22,7 @@
/obj/machinery/computer/rcon/Destroy()
qdel(rcon)
rcon = null
- ..()
+ . = ..()
// Proc: attack_hand()
// Parameters: 1 (user - Person which clicked this computer)
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 294c729cf8..3bf17b2d32 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -18,7 +18,7 @@ var/global/list/minor_air_alarms = list()
/obj/machinery/computer/atmos_alert/Destroy()
atmosphere_alarm.unregister_alarm(src)
- ..()
+ . = ..()
/obj/machinery/computer/atmos_alert/attack_hand(mob/user)
tgui_interact(user)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index ad469fc7c1..b658638700 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -17,7 +17,7 @@
/obj/machinery/computer/crew/Destroy()
qdel(crew_monitor)
crew_monitor = null
- ..()
+ . = ..()
/obj/machinery/computer/crew/attack_ai(mob/user)
attack_hand(user)
diff --git a/code/game/machinery/computer/shutoff_monitor.dm b/code/game/machinery/computer/shutoff_monitor.dm
index d770f96876..2f08d5a036 100644
--- a/code/game/machinery/computer/shutoff_monitor.dm
+++ b/code/game/machinery/computer/shutoff_monitor.dm
@@ -13,7 +13,7 @@
/obj/machinery/computer/shutoff_monitor/Destroy()
QDEL_NULL(monitor)
- ..()
+ . = ..()
/obj/machinery/computer/shutoff_monitor/attack_hand(var/mob/user as mob)
..()
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 663d1f612f..6a6ad71a9d 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -25,7 +25,7 @@
/obj/machinery/computer/station_alert/Destroy()
alarm_monitor.unregister_alarm(src)
qdel(alarm_monitor)
- ..()
+ . = ..()
/obj/machinery/computer/station_alert/attack_ai(mob/user)
add_fingerprint(user)
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index e5156418b3..fff5cc2e70 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -15,7 +15,7 @@ var/list/doppler_arrays = list()
/obj/machinery/doppler_array/Destroy()
doppler_arrays -= src
- ..()
+ . = ..()
/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took)
if(stat & NOPOWER) return
diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm
index 7883ddfed4..0b926294a5 100644
--- a/code/game/machinery/embedded_controller/embedded_controller_base.dm
+++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm
@@ -90,7 +90,7 @@
/obj/machinery/embedded_controller/radio/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
- ..()
+ . = ..()
/obj/machinery/embedded_controller/radio/update_icon()
if(on && program)
diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm
index c4dbb902ad..8b5bb2d497 100644
--- a/code/game/machinery/magnet.dm
+++ b/code/game/machinery/magnet.dm
@@ -184,7 +184,7 @@
/obj/machinery/magnetic_module/Destroy()
if(radio_controller)
radio_controller.remove_object(src, freq)
- ..()
+ . = ..()
/obj/machinery/magnetic_controller
name = "Magnetic Control Console"
@@ -391,4 +391,4 @@
/obj/machinery/magnetic_controller/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
- ..()
+ . = ..()
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 775b23b6b8..7502d9f01b 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -202,7 +202,7 @@ Transponder Codes:
"}
/obj/machinery/navbeacon/Destroy()
navbeacons.Remove(src)
- ..()
+ . = ..()
//
diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm
index 10b70b6d20..3a95a01b1f 100644
--- a/code/game/machinery/pda_multicaster.dm
+++ b/code/game/machinery/pda_multicaster.dm
@@ -49,7 +49,7 @@
for(var/atom/movable/AM in contents)
qdel(AM)
QDEL_NULL(soundloop)
- ..()
+ . = ..()
/obj/machinery/pda_multicaster/update_icon()
if(on)
diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm
index 3b37c479ba..ebfa67a196 100644
--- a/code/game/machinery/supplybeacon.dm
+++ b/code/game/machinery/supplybeacon.dm
@@ -97,7 +97,7 @@
/obj/machinery/power/supply_beacon/Destroy()
if(use_power)
deactivate()
- ..()
+ . = ..()
/obj/machinery/power/supply_beacon/process()
if(expended)
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index a6fed880a7..04513432e8 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -146,7 +146,7 @@
/obj/machinery/power/singularity_beacon/Destroy()
if(active)
Deactivate()
- ..()
+ . = ..()
//stealth direct power usage
/obj/machinery/power/singularity_beacon/process()
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index 778ffcea13..140b888d0d 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -121,7 +121,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
// In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore.
if(message_delay)
message_delay = 0
- ..()
+ . = ..()
/*
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index 51d95f2f4a..1594b1a65b 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -160,7 +160,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
comm.links -= src
links = list()
QDEL_NULL(soundloop) // CHOMPAdd: Tcomms noises
- ..()
+ . = ..()
// Used in auto linking
/obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T)
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index c9d70a78f8..06566f2e2a 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -48,7 +48,7 @@
var/area/A = control_area
if(A && istype(A))
A.turret_controls -= src
- ..()
+ . = ..()
/obj/machinery/turretid/Initialize(mapload)
if(!control_area)
diff --git a/code/game/objects/effects/decals/Cleanable/reagent_ch.dm b/code/game/objects/effects/decals/Cleanable/vore.dm
similarity index 100%
rename from code/game/objects/effects/decals/Cleanable/reagent_ch.dm
rename to code/game/objects/effects/decals/Cleanable/vore.dm
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 480e24d79b..d219b3724d 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -110,6 +110,9 @@
var/rock_climbing = FALSE //If true, allows climbing cliffs using click drag for single Z, walls if multiZ
var/climbing_delay = 1 //If rock_climbing, lower better.
+ var/digestable = TRUE
+ var/item_tf_spawn_allowed = FALSE
+ var/list/ckeys_allowed_itemspawn = list()
/obj/item/Initialize(mapload)
. = ..()
@@ -134,6 +137,8 @@
M.update_held_icons()
/obj/item/Destroy()
+ if(item_tf_spawn_allowed)
+ item_tf_spawnpoints -= src
if(ismob(loc))
var/mob/m = loc
m.drop_from_inventory(src)
@@ -1112,3 +1117,21 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
/obj/item/proc/get_welder()
return
+
+/obj/item/verb/toggle_digestable()
+ set category = "Object"
+ set name = "Toggle Digestable"
+ set desc = "Toggle item's digestability."
+ digestable = !digestable
+ if(!digestable)
+ to_chat(usr, span_notice("[src] is now protected from digestion."))
+
+/obj/item/proc/item_tf_spawnpoint_set()
+ if(!item_tf_spawn_allowed)
+ item_tf_spawn_allowed = TRUE
+ item_tf_spawnpoints += src
+
+/obj/item/proc/item_tf_spawnpoint_used()
+ if(item_tf_spawn_allowed)
+ item_tf_spawn_allowed = FALSE
+ item_tf_spawnpoints -= src
diff --git a/code/game/objects/items/weapons/capture_crystal.dm b/code/game/objects/items/weapons/capture_crystal.dm
index cafd2563b2..0b0da723fc 100644
--- a/code/game/objects/items/weapons/capture_crystal.dm
+++ b/code/game/objects/items/weapons/capture_crystal.dm
@@ -8,7 +8,7 @@
throwforce = 0
force = 0
actions_types = list(/datum/action/item_action/command)
- w_class = ITEMSIZE_SMALL //CHOMPEdit
+ w_class = ITEMSIZE_SMALL
var/active = FALSE //Is it set up?
var/mob/living/owner //Reference to the owner
@@ -18,6 +18,7 @@
var/last_activate //Automatically set by things that try to move the bound mob or capture things
var/empty_icon = "empty"
var/full_icon = "full"
+ var/spawn_mob_name = "A mob"
var/capture_chance_modifier = 1 //So we can have special subtypes with different capture rates!
/obj/item/capture_crystal/Initialize(mapload)
@@ -36,11 +37,6 @@
if(owner)
UnregisterSignal(owner, COMSIG_PARENT_QDELETING)
owner = null
- if(in_gut) // CHOMPedit start
- UnregisterSignal(in_gut, COMSIG_PARENT_QDELETING)
- UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_VORE_FX)
- UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_PREY_LOOP)
- in_gut = null // CHOMPedit end
return ..()
/obj/item/capture_crystal/examine(user)
@@ -483,7 +479,7 @@
//IF the crystal somehow ends up in a tummy and digesting with a bound mob who doesn't want to be eaten, let's move them to the ground
/obj/item/capture_crystal/digest_act(var/atom/movable/item_storage = null)
- if(bound_mob) // CHOMPEdit
+ if(bound_mob)
if((bound_mob in contents) && !bound_mob.devourable)
bound_mob.forceMove(src.drop_location())
return ..()
@@ -863,3 +859,102 @@
/mob/living
var/capture_crystal = TRUE //If TRUE, the mob is capturable. Otherwise it isn't.
var/capture_caught = FALSE //If TRUE, the mob has already been caught, and so cannot be caught again.
+
+/obj/item/capture_crystal/loadout
+ active = TRUE
+
+/obj/item/capture_crystal/loadout/attack(mob/living/M, mob/living/user)
+ if(!bound_mob && M != user)
+ to_chat(user, span_notice("\The [src] emits an unpleasant tone..."))
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ return
+ . = ..()
+
+/obj/item/capture_crystal/loadout/attack_self(mob/living/user)
+ if(!bound_mob)
+ to_chat(user, span_notice("\The [src] emits an unpleasant tone... It is not ready yet."))
+ playsound(src, 'sound/effects/capture-crystal-problem.ogg', 75, 1, -1)
+ return
+ . = ..()
+
+/obj/item/capture_crystal/loadout/capture_chance()
+ return 0
+
+/obj/item/capture_crystal/cheap
+ name = "cheap capture crystal"
+ desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
+ icon = 'icons/obj/capture_crystal_vr.dmi'
+
+
+//The basic capture command does most of the registration work.
+/obj/item/capture_crystal/cheap/capture(mob/living/M, mob/living/U)
+ if(!M.capture_crystal || M.capture_caught)
+ to_chat(U, span_warning("This creature is not suitable for capture with this crystal."))
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ return
+ knowyoursignals(M, U)
+ if(isanimal(M) || !M.client)
+ to_chat(U, span_warning("This creature is not suitable for capture."))
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ return
+ owner = U
+ if(!bound_mob)
+ bound_mob = M
+ bound_mob.capture_caught = TRUE
+ persist_storable = FALSE
+ desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
+
+
+/obj/item/capture_crystal/cheap/activate(mob/living/user, target)
+ if(!cooldown_check()) //Are we ready to do things yet?
+ to_chat(thrower, span_notice("\The [src] clicks unsatisfyingly... It is not ready yet."))
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ return
+ if(spawn_mob_type && !bound_mob) //We don't already have a mob, but we know what kind of mob we want
+ bound_mob = new spawn_mob_type(src) //Well let's spawn it then!
+ bound_mob.faction = user.faction
+ spawn_mob_type = null
+ capture(bound_mob, user)
+ if(bound_mob) //We have a mob! Let's finish setting up.
+ user.visible_message("\The [src] clicks, and then emits a small chime.", "\The [src] grows warm in your hand, something inside is awake.")
+ active = TRUE
+ if(!owner) //Do we have an owner? It's pretty unlikely that this would ever happen! But it happens, let's claim the crystal.
+ owner = user
+ if(isanimal(bound_mob))
+ var/mob/living/simple_mob/S = bound_mob
+ S.revivedby = user.name
+ determine_action(user, target)
+ return
+ else if(isliving(target)) //So we don't have a mob, let's try to claim one! Is the target a mob?
+ var/mob/living/M = target
+ last_activate = world.time
+ if(M.capture_caught) //Can't capture things that were already caught.
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ to_chat(user, span_notice("\The [src] clicks unsatisfyingly... \The [M] is already under someone else's control."))
+ return
+ else if(M.stat == DEAD) //Is it dead? We can't influence dead things.
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ to_chat(user, span_notice("\The [src] clicks unsatisfyingly... \The [M] is not in a state to be captured."))
+ return
+ else if(M.client) //Is it player controlled?
+ capture_player(M, user) //We have to do things a little differently if so.
+ return
+ else if(!isanimal(M)) //So it's not player controlled, but it's also not a simplemob?
+ to_chat(user, span_warning("This creature is not suitable for capture."))
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ return
+ var/mob/living/simple_mob/S = M
+ if(!S.ai_holder) //We don't really want to capture simplemobs that don't have an AI
+ to_chat(user, span_warning("This creature is not suitable for capture."))
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ else //Shoot, it didn't work and now it's mad!!!
+ S.ai_holder.go_wake()
+ S.ai_holder.give_target(user, urgent = TRUE)
+ user.visible_message("\The [src] bonks into \the [S], angering it!")
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ to_chat(user, span_notice("\The [src] clicks unsatisfyingly."))
+ update_icon()
+ return
+ //The target is not a mob, so let's not do anything.
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ to_chat(user, span_notice("\The [src] clicks unsatisfyingly."))
diff --git a/code/game/objects/items/weapons/storage/egg_vr.dm b/code/game/objects/items/weapons/storage/egg_vr.dm
index fffa725c50..2583a1389e 100644
--- a/code/game/objects/items/weapons/storage/egg_vr.dm
+++ b/code/game/objects/items/weapons/storage/egg_vr.dm
@@ -15,7 +15,7 @@
show_messages = 0
allow_quick_empty = TRUE
use_sound = 'sound/items/drop/flesh.ogg'
- var/egg_name = null //CHOMPAdd
+ var/egg_name = null
/obj/item/storage/vore_egg/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/structures/props/puzzledoor.dm b/code/game/objects/structures/props/puzzledoor.dm
index 9573614cdd..55a19f404f 100644
--- a/code/game/objects/structures/props/puzzledoor.dm
+++ b/code/game/objects/structures/props/puzzledoor.dm
@@ -51,7 +51,7 @@
for(var/obj/structure/prop/lock/L in locks)
L.linked_objects -= src
locks -= L
- ..()
+ . = ..()
/obj/machinery/door/blast/puzzle/attack_hand(mob/user as mob)
if(check_locks())
diff --git a/code/game/objects/trash_eating.dm b/code/game/objects/trash_eating.dm
index b8cec3b841..5836407857 100644
--- a/code/game/objects/trash_eating.dm
+++ b/code/game/objects/trash_eating.dm
@@ -91,10 +91,6 @@
/obj/item/capture_crystal/after_trash_eaten(var/mob/living/user)
if(bound_mob && (bound_mob in contents))
if(isbelly(loc))
- /* CHOMPRemove Start, handled by indirect FX
- var/obj/belly/B = loc
- to_chat(bound_mob, span_notice("Outside of your crystal, you can see; " + span_notice("[B.desc]")))
- */// CHOMPRemove End
to_chat(user, span_notice("You can taste the the power of command."))
// Most trash has no special check, so the rest of these are just after_trash_eaten()
diff --git a/code/modules/asset_cache/assets/belly_assets.dm b/code/modules/asset_cache/assets/belly_assets.dm
new file mode 100644
index 0000000000..8ed4638193
--- /dev/null
+++ b/code/modules/asset_cache/assets/belly_assets.dm
@@ -0,0 +1,273 @@
+/datum/belly_overlays
+ var/belly_icon
+
+/datum/belly_overlays/vbo_belly1
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly1.dmi'
+
+/datum/belly_overlays/vbo_belly2
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly2.dmi'
+
+/datum/belly_overlays/vbo_belly3
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly3.dmi'
+
+/datum/belly_overlays/vbo_belly4
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly4.dmi'
+
+/datum/belly_overlays/vbo_belly5
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly5.dmi'
+
+/datum/belly_overlays/vbo_belly6
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly6.dmi'
+
+/datum/belly_overlays/vbo_belly7
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly7.dmi'
+
+/datum/belly_overlays/vbo_belly8
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly8.dmi'
+
+/datum/belly_overlays/vbo_belly9
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly9.dmi'
+
+/datum/belly_overlays/vbo_belly9_fluidless
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_belly9_fluidless.dmi'
+
+/datum/belly_overlays/vbo_breast
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_breast.dmi'
+
+/datum/belly_overlays/vbo_breast1
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_breast1.dmi'
+
+/datum/belly_overlays/vbo_coils
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_coils.dmi'
+
+/datum/belly_overlays/vbo_coils1
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_coils1.dmi'
+
+/datum/belly_overlays/vbo_darkslit
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_darkslit.dmi'
+
+/datum/belly_overlays/vbo_fleshs
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_fleshs.dmi'
+
+/datum/belly_overlays/vbo_fleshs1
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_fleshs1.dmi'
+
+/datum/belly_overlays/vbo_foot
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_foot.dmi'
+
+/datum/belly_overlays/vbo_gematically_angular
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_gematically_angular.dmi'
+
+/datum/belly_overlays/vbo_intestines1
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines1.dmi'
+
+/datum/belly_overlays/vbo_intestines2
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines2.dmi'
+
+/datum/belly_overlays/vbo_intestines3
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines3.dmi'
+
+/datum/belly_overlays/vbo_intestines4
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines4.dmi'
+
+/datum/belly_overlays/vbo_intestines5
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines5.dmi'
+
+/datum/belly_overlays/vbo_intestines6
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines6.dmi'
+
+/datum/belly_overlays/vbo_intestines7
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines7.dmi'
+
+/datum/belly_overlays/vbo_intestines8
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines8.dmi'
+
+/datum/belly_overlays/vbo_intestines9
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines9.dmi'
+
+/datum/belly_overlays/vbo_intestines9_fluidless
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_intestines9_fluidless.dmi'
+
+/datum/belly_overlays/vbo_maw1
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw1.dmi'
+
+/datum/belly_overlays/vbo_maw2
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw2.dmi'
+
+/datum/belly_overlays/vbo_maw3
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw3.dmi'
+
+/datum/belly_overlays/vbo_maw4
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw4.dmi'
+
+/datum/belly_overlays/vbo_maw5
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw5.dmi'
+
+/datum/belly_overlays/vbo_maw6
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw6.dmi'
+
+/datum/belly_overlays/vbo_maw7
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw7.dmi'
+
+/datum/belly_overlays/vbo_maw8
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw8.dmi'
+
+/datum/belly_overlays/vbo_maw9
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw9.dmi'
+
+/datum/belly_overlays/vbo_maw10
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw10.dmi'
+
+/datum/belly_overlays/vbo_maw11
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw11.dmi'
+
+/datum/belly_overlays/vbo_maw12
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw12.dmi'
+
+/datum/belly_overlays/vbo_maw13
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw13.dmi'
+
+/datum/belly_overlays/vbo_maw14
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw14.dmi'
+
+/datum/belly_overlays/vbo_maw15
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw15.dmi'
+
+/datum/belly_overlays/vbo_maw16
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw16.dmi'
+
+/datum/belly_overlays/vbo_maw17
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw17.dmi'
+
+/datum/belly_overlays/vbo_maw18
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw18.dmi'
+
+/datum/belly_overlays/vbo_maw19
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw19.dmi'
+
+/datum/belly_overlays/vbo_maw20
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw20.dmi'
+
+/datum/belly_overlays/vbo_maw21
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw21.dmi'
+
+/datum/belly_overlays/vbo_maw22
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw22.dmi'
+
+/datum/belly_overlays/vbo_maw23
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw23.dmi'
+
+/datum/belly_overlays/vbo_maw24
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw24.dmi'
+
+/datum/belly_overlays/vbo_maw25
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw25.dmi'
+
+/datum/belly_overlays/vbo_maw26
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_maw26.dmi'
+
+/datum/belly_overlays/vbo_notbelly
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_notbelly.dmi'
+
+/datum/belly_overlays/vbo_paw
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_paw.dmi'
+
+/datum/belly_overlays/vbo_synth1
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_synth1.dmi'
+
+/datum/belly_overlays/vbo_synth2
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_synth2.dmi'
+
+/datum/belly_overlays/vbo_trash
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_trash.dmi'
+
+/datum/belly_overlays/vbo_vines
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_vines.dmi'
+
+/datum/belly_overlays/vbo_wriggly
+ belly_icon = 'icons/mob/vore_fullscreens/VBO_wriggly.dmi'
+
+/datum/belly_overlays/vboanim_belly1
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
+
+/datum/belly_overlays/vboanim_belly2
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly2.dmi'
+
+/datum/belly_overlays/vboanim_belly3
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly3.dmi'
+
+/datum/belly_overlays/vboanim_belly4
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly4.dmi'
+
+/datum/belly_overlays/vboanim_belly5
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly5.dmi'
+
+/datum/belly_overlays/vboanim_belly6
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly6.dmi'
+
+/datum/belly_overlays/vboanim_belly7
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly7.dmi'
+
+/datum/belly_overlays/vboanim_belly8
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly8.dmi'
+
+/datum/belly_overlays/vboanim_belly9
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly9.dmi'
+
+/datum/belly_overlays/vboanim_belly10
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly10.dmi'
+
+/datum/belly_overlays/vboanim_gullet1
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_gullet1.dmi'
+
+/datum/belly_overlays/vboanim_intestine1
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_intestine1.dmi'
+
+/datum/belly_overlays/vboanim_intestine2
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_intestine2.dmi'
+
+/datum/belly_overlays/vboanim_snakebelly1
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_snakebelly1.dmi'
+
+/datum/belly_overlays/vboanim_synthbelly1
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_synthbelly1.dmi'
+
+/datum/belly_overlays/vboanim_taurbelly1
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_taurbelly1.dmi'
+
+/datum/belly_overlays/a_tumby
+ belly_icon = 'icons/mob/vore_fullscreens/a_tumby.dmi'
+
+/datum/belly_overlays/another_tumby
+ belly_icon = 'icons/mob/vore_fullscreens/another_tumby.dmi'
+
+/datum/belly_overlays/base
+ belly_icon = 'icons/mob/vore_fullscreens/base.dmi'
+
+/datum/belly_overlays/brown_internals
+ belly_icon = 'icons/mob/vore_fullscreens/brown_internals.dmi'
+
+/datum/belly_overlays/brown_internals_hole
+ belly_icon = 'icons/mob/vore_fullscreens/brown_internals_hole.dmi'
+
+/datum/belly_overlays/da_tumby
+ belly_icon = 'icons/mob/vore_fullscreens/da_tumby.dmi'
+
+/datum/belly_overlays/dark
+ belly_icon = 'icons/mob/vore_fullscreens/dark.dmi'
+
+/datum/belly_overlays/synth_flesh_mono
+ belly_icon = 'icons/mob/vore_fullscreens/synth_flesh_mono.dmi'
+
+/datum/belly_overlays/synth_flesh_mono_hole
+ belly_icon = 'icons/mob/vore_fullscreens/synth_flesh_mono_hole.dmi'
+
+/datum/belly_overlays/yet_another_tumby
+ belly_icon = 'icons/mob/vore_fullscreens/yet_another_tumby.dmi'
+
+//Compatibility assets due to renames...
+/datum/belly_overlays/anim_belly
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
+
+/datum/belly_overlays/a_anim_belly
+ belly_icon = 'icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
diff --git a/code/modules/asset_cache/assets/spritesheets/vore.dm b/code/modules/asset_cache/assets/spritesheets/vore.dm
index 5b2c643bea..4881e0ede6 100644
--- a/code/modules/asset_cache/assets/spritesheets/vore.dm
+++ b/code/modules/asset_cache/assets/spritesheets/vore.dm
@@ -2,14 +2,14 @@
name = "vore"
/datum/asset/spritesheet/vore/create_spritesheets()
- var/icon/downscaled = icon('modular_chomp/icons/mob/screen_full_vore_ch.dmi') //CHOMPedit: preserving save data
+ var/icon/downscaled = icon('icons/mob/screen_full_vore_list.dmi') // preserving save data
downscaled.Scale(240, 240)
InsertAll("", downscaled)
-/datum/asset/spritesheet/vore_fixed //This should be getting loaded in the TGUI vore panel but the game refuses to do so, for some reason. It only loads the vore spritesheet. //CHOMPedit
- name = "fixedvore" //CHOMPedit
+/datum/asset/spritesheet/vore_fixed //This should be getting loaded in the TGUI vore panel but the game refuses to do so, for some reason. It only loads the vore spritesheet.
+ name = "fixedvore"
-/datum/asset/spritesheet/vore_fixed/create_spritesheets() //CHOMPedi start: preserving save data
+/datum/asset/spritesheet/vore_fixed/create_spritesheets() // preserving save data
var/icon/downscaledVF = icon('icons/mob/screen_full_vore.dmi')
downscaledVF.Scale(240, 240)
- InsertAll("", downscaledVF) //CHOMpedit end
+ InsertAll("", downscaledVF)
diff --git a/modular_chomp/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/loadout_item_tf.dm
similarity index 100%
rename from modular_chomp/code/modules/client/preference_setup/loadout/gear_tweaks.dm
rename to code/modules/client/preference_setup/loadout/loadout_item_tf.dm
diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm
index 3dcc424623..08d51feebd 100644
--- a/code/modules/client/preferences_spawnpoints.dm
+++ b/code/modules/client/preferences_spawnpoints.dm
@@ -18,7 +18,7 @@ var/list/spawntypes = list()
var/list/restrict_job = null
var/list/disallow_job = null
var/announce_channel = "Common"
- var/allow_offmap_spawn = FALSE //CHOMPEdit - add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
+ var/allow_offmap_spawn = FALSE // add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
var/allowed_mob_types = JOB_SILICON|JOB_CARBON
/datum/spawnpoint/proc/check_job_spawning(job)
@@ -32,7 +32,7 @@ var/list/spawntypes = list()
if(!J) // Couldn't find, admin shenanigans? Allow it
return 1
- if(J.offmap_spawn && !allow_offmap_spawn && !(job in restrict_job)) //CHOMPEdit - add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
+ if(J.offmap_spawn && !allow_offmap_spawn && !(job in restrict_job)) // add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint
return 0
if(!(J.mob_type & allowed_mob_types))
@@ -114,3 +114,12 @@ var/global/list/latejoin_tram = list()
/datum/spawnpoint/tram/New()
..()
turfs = latejoin_tram
+
+/datum/spawnpoint/vore
+ display_name = "Vorespawn - Prey"
+ msg = "has arrived on the station"
+ allow_offmap_spawn = TRUE
+
+/datum/spawnpoint/vore/pred
+ display_name = "Vorespawn - Pred"
+ msg = "has arrived on the station"
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index 2066a6d95b..b2f5608878 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -138,6 +138,11 @@
if(istype(M, /mob/living/carbon))
//TODO: replace with standard_feed_mob() call.
+
+ if(!M.consume_liquid_belly)
+ if(liquid_belly_check())
+ to_chat(user, span_infoplain("[user == M ? "You can't" : "\The [M] can't"] consume that, it contains something produced from a belly!"))
+ return FALSE
var/swallow_whole = FALSE
var/obj/belly/belly_target // These are surprise tools that will help us later
diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm
index 5b0e5c0102..0a2a1a8ebc 100644
--- a/code/modules/holodeck/HolodeckControl.dm
+++ b/code/modules/holodeck/HolodeckControl.dm
@@ -190,7 +190,7 @@
//This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Destroy()
emergencyShutdown()
- ..()
+ . = ..()
/obj/machinery/computer/HolodeckControl/ex_act(severity)
emergencyShutdown()
diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm
index 75eabd4b0d..000fa68fe3 100644
--- a/code/modules/hydroponics/trays/tray_soil.dm
+++ b/code/modules/hydroponics/trays/tray_soil.dm
@@ -89,4 +89,4 @@
for(var/obj/effect/plant/plant in get_turf(src))
if(plant.invisibility == INVISIBILITY_MAXIMUM)
plant.invisibility = initial(plant.invisibility)
- ..()
+ . = ..()
diff --git a/code/modules/looking_glass/lg_console.dm b/code/modules/looking_glass/lg_console.dm
index 4d0f44d36e..e3eaca9256 100644
--- a/code/modules/looking_glass/lg_console.dm
+++ b/code/modules/looking_glass/lg_console.dm
@@ -155,7 +155,7 @@
//This could all be done better, but it works for now.
/obj/machinery/computer/looking_glass/Destroy()
unload_program()
- ..()
+ . = ..()
/obj/machinery/computer/looking_glass/ex_act(severity)
unload_program()
diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm
index 157f91f20e..46817e679e 100644
--- a/code/modules/mob/dead/observer/login.dm
+++ b/code/modules/mob/dead/observer/login.dm
@@ -6,7 +6,7 @@
plane_holder.set_vis(VIS_CLOAKED, TRUE)
plane_holder.set_vis(VIS_AI_EYE, TRUE)
plane_holder.set_vis(VIS_AUGMENTED, TRUE) //VOREStation Add - GHOST VISION IS AUGMENTED
- plane_holder.set_vis(VIS_SOULCATCHER, TRUE) //CHOMPAdd Soulcatcher
+ plane_holder.set_vis(VIS_SOULCATCHER, TRUE) // Soulcatcher
plane = PLANE_GHOSTS
if(cleanup_timer)
deltimer(cleanup_timer)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 4b98167c93..cba232ae0b 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -3,6 +3,7 @@
desc = "This shouldn't appear"
density = FALSE
vis_flags = NONE
+ var/mob/living/body_backup = null //add reforming
/mob/observer/dead
name = "ghost"
@@ -584,6 +585,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/list/following_mobs = list()
/mob/observer/dead/Destroy()
+ if(body_backup)
+ body_backup.moveToNullspace() //YEET
+ qdel(body_backup)
+ body_backup = null
visualnet.addVisibility(src, src.client)
visualnet = null
if(ismob(following))
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 37141ddb47..d6ac428b60 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -18,6 +18,7 @@
var/obj/item/organ/internal/brain/brainobj = null //The current brain organ.
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
var/obj/item/radio/headset/mmi_radio/radio = null//Let's give it a radio.
+ var/mob/living/body_backup = null //add reforming
/obj/item/mmi/New()
radio = new(src)//Spawns a radio inside the MMI.
@@ -146,6 +147,8 @@
rig.forced_move(direction, user)
/obj/item/mmi/Destroy()
+ if(body_backup)
+ qdel(body_backup)
if(isrobot(loc))
var/mob/living/silicon/robot/borg = loc
borg.mmi = null
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 6523a9795b..f3571c49f5 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -204,10 +204,8 @@
if(stomach_vision)
compiled_vis += VIS_CH_STOMACH
- //CHOMPAdd Start Soulcatcher
if(soulgem?.flag_check(SOULGEM_SEE_SR_SOULS))
compiled_vis += VIS_SOULCATCHER
- //CHOMPAdd End
if(!compiled_vis.len && !vis_enabled.len)
return //Nothin' doin'.
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 09432b642c..e85aea99e4 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1252,14 +1252,12 @@
var/sound/growlsound = sound(get_sfx("hunger_sounds"))
var/growlmultiplier = 100 - (nutrition / 250 * 100)
playsound(src, growlsound, vol = growlmultiplier, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/preference/toggle/digestion_noises)
- // CHOMPEnable Start
if(nutrition > 500 && noisy_full == TRUE)
var/belch_prob = 5 //Maximum belch prob.
if(nutrition < 4075)
belch_prob = ((nutrition-500)/3575)*5 //Scale belch prob with fullness if not already at max. If editing make sure the multiplier matches the max prob above.
if(prob(belch_prob))
src.emote("belch")
- // CHOMPEnable End
if((CE_DARKSIGHT in chem_effects) && chemical_darksight == 0)
recalculate_vis()
chemical_darksight = 1
@@ -1681,12 +1679,8 @@
else
clear_alert("high")
- //CHOMPEdit - surrounding_belly() used instead of isbelly(loc) to not clear indirect vorefx
- if(!surrounding_belly() && !previewing_belly) //VOREStation Add - Belly fullscreens safety //CHOMPEdit
+ if(!surrounding_belly() && !previewing_belly) //VOREStation Add - Belly fullscreens safety
clear_fullscreen("belly")
- //clear_fullscreen("belly2") //Chomp disable, using our own implementation
- //clear_fullscreen("belly3") //Chomp disable, using our own implementation
- //clear_fullscreen("belly4") //Chomp disable, using our own implementation
if(CONFIG_GET(flag/welder_vision))
var/found_welder
diff --git a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
index 94410f8a07..8b4a21c748 100644
--- a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm
@@ -510,7 +510,7 @@
B.forceMove(src)
B.owner = src
- soulgem.owner = src //CHOMPAdd
+ soulgem.owner = src
//vore_organs.Cut()
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
index 7d9af4d80d..d095d269bf 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
@@ -507,7 +507,7 @@
B.owner = blob
vore_organs.Cut()
- soulgem.owner = blob // CHOMPAdd
+ soulgem.owner = blob
//We can still speak our languages!
blob.languages = languages.Copy()
@@ -619,7 +619,7 @@
B.owner = src
languages = blob.languages.Copy()
- soulgem.owner = src // CHOMPAdd
+ soulgem.owner = src
Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right.
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index 486b97ee17..1d28cbf0ff 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -20,23 +20,23 @@
add_verb(src, /mob/living/proc/smell)
add_verb(src, /mob/living/proc/switch_scaling)
add_verb(src, /mob/living/proc/center_offset)
- add_verb(src, /mob/living/proc/mute_entry) //CHOMPEdit
- add_verb(src, /mob/living/proc/liquidbelly_visuals) //CHOMPEdit
- add_verb(src, /mob/living/proc/fix_vore_effects) //CHOMPedit
+ add_verb(src, /mob/living/proc/mute_entry)
+ add_verb(src, /mob/living/proc/liquidbelly_visuals)
+ add_verb(src, /mob/living/proc/fix_vore_effects)
if(!no_vore)
add_verb(src, /mob/living/proc/vorebelly_printout)
if(!vorePanel)
AddComponent(/datum/component/vore_panel)
- add_verb(src,/mob/living/proc/vore_transfer_reagents) //CHOMPEdit TGPanel //CHOMP If mob doesnt have bellies it cant use this verb for anything
- add_verb(src,/mob/living/proc/vore_check_reagents) //CHOMPEdit TGPanel //CHOMP If mob doesnt have bellies it cant use this verb for anything
- add_verb(src,/mob/living/proc/vore_bellyrub) //CHOMPEdit TGPanel //CHOMP If mob doesnt have bellies it probably won't be needing this anyway
- add_verb(src,/mob/proc/nsay_vore) //CHOMPAdd
- add_verb(src,/mob/proc/nme_vore) //CHOMPAdd
- add_verb(src,/mob/proc/nsay_vore_ch) //CHOMPAdd
- add_verb(src,/mob/proc/nme_vore_ch) //CHOMPAdd
- add_verb(src,/mob/proc/enter_soulcatcher) //CHOMPAdd
+ add_verb(src,/mob/living/proc/vore_transfer_reagents) // If mob doesnt have bellies it cant use this verb for anything
+ add_verb(src,/mob/living/proc/vore_check_reagents) // If mob doesnt have bellies it cant use this verb for anything
+ add_verb(src,/mob/living/proc/vore_bellyrub) // If mob doesnt have bellies it probably won't be needing this anyway
+ add_verb(src,/mob/proc/nsay_vore)
+ add_verb(src,/mob/proc/nme_vore)
+ add_verb(src,/mob/proc/nsay_vore_ch)
+ add_verb(src,/mob/proc/nme_vore_ch)
+ add_verb(src,/mob/proc/enter_soulcatcher)
//VOREStation Add Start
if(!voice_sounds_list.len || !voice_sounds_list)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index b88ab6dd43..0a27aa7b7d 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -615,7 +615,7 @@ var/list/ai_verbs_default = list(
switch(choice)
if("Color")
- input = tgui_color_picker("Choose a color:", "Hologram Color", holo_color)
+ input = tgui_color_picker(src, "Choose a color:", "Hologram Color", holo_color)
if(input)
holo_color = input
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
index 3dcc23d4a5..dc99fffe32 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
@@ -602,7 +602,7 @@
var/actual_brute = T.getBruteLoss() - old_brute
var/actual_burn = T.getFireLoss() - old_burn
var/damage_gain = actual_brute + actual_burn
- hound.nutrition += 2.5 * damage_gain //drain(-25 * damage_gain) //25*total loss as with voreorgan stats.//CHOMPEdit
+ hound.adjust_nutrition(2.5 * damage_gain) //drain(-25 * damage_gain) //25*total loss as with voreorgan stats.
//CHOMPAdd Start
if(water)
water.add_charge(damage_gain)
@@ -669,8 +669,8 @@
//CHOMPAdd Start
if(T.reagents)
volume = T.reagents.total_volume
- var/is_trash = istype(T, /obj/item/trash)
//CHOMPAdd End
+ var/is_trash = istype(T, /obj/item/trash)
var/digested = T.digest_act(item_storage = src)
if(!digested)
items_preserved |= T
@@ -699,15 +699,13 @@
plastic.add_charge(total_material)
if(material == MAT_WOOD && wood)
wood.add_charge(total_material)
- //CHOMPEdit Start
if(is_trash)
- hound.nutrition += digested
+ hound.adjust_nutrition(digested)
else
- hound.nutrition += 5 * digested //drain(-50 * digested)
- //CHOMPEdit End
+ hound.adjust_nutrition(5 * digested) //drain(-50 * digested)
else if(istype(target,/obj/effect/decal/remains))
qdel(target)
- hound.nutrition += 10 //drain(-100) //CHOMPEdit
+ hound.adjust_nutrition(10) //drain(-100)
else
items_preserved |= target
update_patient()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 70378fed14..a15f0b0807 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -8,7 +8,7 @@
icon_state = "robot"
maxHealth = 200
health = 200
- nutrition = 0 //CHOMPEdit
+ nutrition = 0
mob_bump_flag = ROBOT
mob_swap_flags = ~HEAVY
@@ -1467,14 +1467,12 @@
undeploy()
..()
-//CHOMPAdd Start
/mob/living/silicon/robot/use_power()
if(cell && cell.charge < cell.maxcharge)
if(nutrition >= 1 * CYBORG_POWER_USAGE_MULTIPLIER)
- nutrition -= 1 * CYBORG_POWER_USAGE_MULTIPLIER
+ adjust_nutrition(-(1 * CYBORG_POWER_USAGE_MULTIPLIER))
cell.charge += 10 * CYBORG_POWER_USAGE_MULTIPLIER
..()
-//CHOMPAdd End
// Those basic ones require quite detailled checks on the robot's vars to see if they are installed!
/mob/living/silicon/robot/proc/has_basic_upgrade(var/given_type)
@@ -1585,3 +1583,14 @@
if(issilicon(user))
return TRUE
return FALSE
+
+/mob/living/silicon/robot/verb/purge_nutrition()
+ set name = "Purge Nutrition"
+ set category = "Abilities.Vore"
+ set desc = "Allows you to clear out most of your nutrition if needed."
+
+ if (stat != CONSCIOUS || nutrition <= 1000)
+ return
+ nutrition = 1000
+ to_chat(src, span_warning("You have purged most of the nutrition lingering in your systems."))
+ return TRUE
diff --git a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
index e4cbdac6f6..0a1bc88dcc 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
@@ -28,7 +28,6 @@
playsound(src, 'sound/mecha/nominalsyndi.ogg', 75, 0)
-//CHOMPAdd Start
/mob/living/silicon/robot/gravekeeper/proc/scramble_hardware(var/chance)
if(prob(chance)) //Small chance to spawn with a scrambled
emag_items = 1
@@ -39,4 +38,3 @@
if (churn_count == 5)
module.emag += new /obj/item/self_repair_system/advanced(module)
hud_used.update_robot_modules_display()
-//CHOMPAdd End
diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
index 699ba8facb..dd86141e48 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
@@ -335,11 +335,9 @@
return
-//CHOMPAdd Start
/mob/living/silicon/robot/lost/handle_special_unlocks()
if(!emag_items)
scramble_hardware(20)
if (churn_count == 5)
module.emag += new /obj/item/self_repair_system/advanced(module)
hud_used.update_robot_modules_display()
-//CHOMPAdd End
diff --git a/code/modules/mob/living/simple_animal/aliens/synx.dm b/code/modules/mob/living/simple_animal/aliens/synx.dm
index f2a52ea2df..bdbecec405 100644
--- a/code/modules/mob/living/simple_animal/aliens/synx.dm
+++ b/code/modules/mob/living/simple_animal/aliens/synx.dm
@@ -110,6 +110,8 @@
/mob/living/simple_mob/animal/synx/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
//B.human_prey_swallow_time = 6 SECONDS //doesnt work
@@ -142,6 +144,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/asteri/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.desc = "The synx eagerly swallows you, taking you from its gullet into its long, serpentine stomach. The internals around you greedily press into your from all sides, keeping you coated in a slick coat of numbing fluids..."
@@ -559,6 +563,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
@@ -568,6 +574,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/holo/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm
index 73ebdd9dae..cf46cc397a 100644
--- a/code/modules/mob/living/simple_mob/simple_mob.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob.dm
@@ -184,6 +184,8 @@
//vars for vore_icons toggle control
var/vore_icons_cache = null // null by default. Going from ON to OFF should store vore_icons val here, OFF to ON reset as null
+ //no stripping of simplemobs
+ strip_pref = FALSE
/mob/living/simple_mob/Initialize(mapload)
remove_verb(src, /mob/verb/observe)
diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
index fd6d1ec641..ca56a59a7e 100644
--- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
@@ -215,25 +215,17 @@
AddElement(/datum/element/slosh) // Sloshy element
- //CHOMPAdd Start
if(!soulgem)
soulgem = new(src)
- //CHOMPAdd End
-
- /* CHOMPRemove Start, handled with the vore_active var
- if(!IsAdvancedToolUser())
- add_verb(src, /mob/living/simple_mob/proc/animal_nom)
- add_verb(src, /mob/living/proc/shred_limb)
- */// CHOMPRemove End
-
- if(LAZYLEN(vore_organs))
- return
// Since they have bellies, add verbs to toggle settings on them.
add_verb(src, /mob/living/simple_mob/proc/toggle_digestion)
add_verb(src, /mob/living/simple_mob/proc/toggle_fancygurgle)
add_verb(src, /mob/living/proc/vertical_nom)
+ if(LAZYLEN(vore_organs))
+ return
+
//A much more detailed version of the default /living implementation
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm
index fe039d2366..524e0d22f1 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm
@@ -68,7 +68,7 @@
/obj/item/holder,
/obj/machinery/camera,
/obj/belly,
- /obj/soulgem, // CHOMPAdd
+ /obj/soulgem,
/obj/screen,
/atom/movable/emissive_blocker,
/obj/item/material,
@@ -118,6 +118,8 @@
/mob/living/simple_mob/vore/alienanimals/catslug/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm
index 15000f660b..4b73ccac19 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm
@@ -99,6 +99,8 @@ GLOBAL_VAR_INIT(jellyfish_count, 0)
/mob/living/simple_mob/vore/alienanimals/space_jellyfish/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "internal chamber"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm
index 97c4127720..bc5c4c91e1 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm
@@ -90,6 +90,8 @@
/mob/living/simple_mob/vore/alienanimals/skeleton/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm
index 3e2e7d25aa..28488a4590 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/space_mouse.dm
@@ -67,6 +67,8 @@
/mob/living/simple_mob/vore/alienanimals/dustjumper/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm
index 33e5db7c53..9957e48496 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm
@@ -55,6 +55,8 @@
/mob/living/simple_mob/vore/overmap/spacewhale/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm
index f301658bf1..2ce3645dec 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm
@@ -96,6 +96,8 @@
/mob/living/simple_mob/vore/alienanimals/startreader/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "gastric sac"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm
index d5f051f00f..13727c015f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/succlet.dm
@@ -75,6 +75,8 @@
/mob/living/simple_mob/vore/alienanimals/succlet/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stummy"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm
index 1c3ab41ab9..42f1432450 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm
@@ -171,6 +171,8 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
/mob/living/simple_mob/vore/alienanimals/teppi/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm
index 1b9e64e004..093eced1e4 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm
@@ -1,6 +1,8 @@
/mob/living/simple_mob/animal/passive/cat/runtime/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm
index 98fca7c314..97ac2d1b02 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm
@@ -53,6 +53,8 @@
/mob/living/simple_mob/animal/passive/fox/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
@@ -201,6 +203,8 @@
/mob/living/simple_mob/animal/passive/fox/renault/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
index 5732cb7a04..18e10c8881 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
@@ -233,6 +233,8 @@
/mob/living/simple_mob/animal/space/carp/large/huge/vorny/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm
index 3b801ba373..65dbfbdade 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/gaslamp_vr.dm
@@ -90,6 +90,8 @@ TODO: Make them light up and heat the air when exposed to oxygen.
/mob/living/simple_mob/animal/passive/gaslamp/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "internal chamber"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm
index 02426e5241..301cf1cafa 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm
@@ -77,6 +77,8 @@
/mob/living/simple_mob/animal/passive/snake/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm b/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm
index 07ebc0f7bc..20503d25b6 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm
@@ -72,6 +72,8 @@
/mob/living/simple_mob/vore/squirrel/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm b/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm
index 33f48276fb..c32700026b 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/turkeygirl.dm
@@ -46,12 +46,14 @@
/mob/living/simple_mob/vore/turkeygirl/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The hot churning stomach of a turkey girl! The doughy flesh presses inward to form to your figure, thick slime coating everything, and very shortly that includes you as well! There isn't any escaping that constant full body motion, as her body works to ball yours up into a tight little package. Gurgling and glubbing with every shifting movement, while her pulse throbs through the flesh all around you with every beat of her heart. All in all, one thing is for certain! You've become turkey stuffing! Oh no..."
B.mode_flags = DM_FLAG_THICKBELLY | DM_FLAG_NUMBING
- B.belly_fullscreen = "anibelly"
+ B.belly_fullscreen = "anim_belly"
B.digest_brute = 1
B.digest_burn = 6
B.digestchance = 0
diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm
index 8be2d053ee..e3e7d20eb2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/glamour/blaidd.dm
@@ -57,6 +57,8 @@
/mob/living/simple_mob/vore/blaidd/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm
index 11328d49d5..14c5cb4109 100644
--- a/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/glamour/ddraig.dm
@@ -79,6 +79,8 @@
/mob/living/simple_mob/vore/ddraig/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm
index 6a85304ac3..5acd20a470 100644
--- a/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/glamour/fluffball.dm
@@ -44,6 +44,8 @@
/mob/living/simple_mob/vore/fluffball/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "tail"
diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm
index 55749ab469..5826668a65 100644
--- a/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/glamour/unicorn.dm
@@ -38,6 +38,8 @@
/mob/living/simple_mob/vore/horse/unicorn/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
index 301f24765f..b108b1a1d1 100644
--- a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
@@ -80,9 +80,7 @@ var/list/_slime_default_emotes = list(
var/injection_amount = 5 // This determines how much.
var/mood = ":3" // Icon to use to display 'mood', as an overlay.
- can_enter_vent_with = list(/obj/item/clothing/head,
- /obj/soulgem // CHOMPAdd
- )
+ can_enter_vent_with = list(/obj/item/clothing/head, /obj/soulgem)
can_be_drop_prey = FALSE //CHOMP Add
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm
index 6ab6004b85..abe819f730 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm
@@ -45,6 +45,8 @@
/mob/living/simple_mob/vore/bat/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm
index a683522131..5960dacd6e 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm
@@ -506,7 +506,9 @@ I think I covered everything.
/// My thanks to Raeschen for these descriptions
/mob/living/simple_mob/vore/bigdragon/init_vore()
- if(!voremob_loaded || LAZYLEN(vore_organs))
+ if(!voremob_loaded)
+ return
+ if(LAZYLEN(vore_organs))
return
var/obj/belly/B = new /obj/belly/dragon/maw(src)
B.affects_vore_sprites = FALSE
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm
index a89f2bc2f7..32d5955f65 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm
@@ -539,6 +539,8 @@ I think I covered everything.
//Ow my sanity
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
var/obj/belly/B = new /obj/belly/dragon/maw(src)
B.affects_vore_sprites = FALSE
B.emote_lists[DM_HOLD] = list(
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm
index 62c8fe07ed..6ee386652a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm
@@ -129,6 +129,8 @@
/mob/living/simple_mob/vore/aggressive/corrupthound/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "fuel processor"
@@ -153,6 +155,8 @@
/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "fuel processor"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm b/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm
index a44eed03ca..cba90855ac 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/cryptdrake.dm
@@ -71,6 +71,8 @@
/mob/living/simple_mob/vore/cryptdrake/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm
index f6d042a4f3..7feff5c71b 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm
@@ -86,6 +86,8 @@
/mob/living/simple_mob/vore/aggressive/deathclaw/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm
index a678c8f8c9..3c28a8bdc2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm
@@ -52,6 +52,8 @@
/mob/living/simple_mob/vore/demon/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demonAI_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demonAI_ch.dm
index 1dbf1d72f1..1bec84ba14 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demonAI_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demonAI_ch.dm
@@ -68,6 +68,8 @@
/mob/living/simple_mob/vore/demonAI/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm
index af3239051a..ffaafb8473 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm
@@ -65,6 +65,8 @@
/mob/living/simple_mob/vore/demon/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm b/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm
index 9c07faa3e1..95fb1362df 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/devil.dm
@@ -45,6 +45,8 @@
/mob/living/simple_mob/vore/devil/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm b/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm
index 1dcf4a93cb..c356336924 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm
@@ -70,6 +70,8 @@
/mob/living/simple_mob/vore/fennec/init_vore() // CHOMPEdit - Allow for customizing bellies on vorecritters
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
@@ -150,6 +152,8 @@
/mob/living/simple_mob/vore/fennec/huge/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm
index ab68292cdf..17bdf17736 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm
@@ -125,6 +125,8 @@
/mob/living/simple_mob/vore/greatwolf/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm
index 0ef0d2594b..50cfd136d7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm
@@ -119,6 +119,8 @@
/mob/living/simple_mob/vore/greatwolf/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm
index 99a3033c0a..bd7c24495c 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm
@@ -83,6 +83,8 @@
/mob/living/simple_mob/vore/horse/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -142,6 +144,8 @@
/mob/living/simple_mob/vore/horse/kelpie/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm
index cdef0db5bc..ced0de8cec 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm
@@ -82,6 +82,8 @@
/mob/living/simple_mob/vore/lamia/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm
index 7b8c94e7ce..f78027dec2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm
@@ -84,6 +84,8 @@
/mob/living/simple_mob/vore/leopardmander/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -153,6 +155,8 @@
/mob/living/simple_mob/vore/leopardmander/exotic/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm
index 3300df438e..c5738721fc 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm
@@ -86,6 +86,8 @@
/mob/living/simple_mob/vore/leopardmander/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = new /obj/belly(src)
B.affects_vore_sprites = TRUE
@@ -187,6 +189,8 @@
/mob/living/simple_mob/vore/leopardmander/exotic/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
//.=..() //Dont need this, it just spawns the parent's guts
var/obj/belly/B = new /obj/belly(src)
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm
index c4c64dd400..80a252104d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm
@@ -41,6 +41,8 @@
/mob/living/simple_mob/vore/meowl/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm
index 6dba73b644..880851038f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm
@@ -168,6 +168,8 @@
/mob/living/simple_mob/vore/oregrub/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -198,6 +200,8 @@
/mob/living/simple_mob/vore/oregrub/lava/init_vore() // Should inherit everything from parent, and then change our belly fullscreen color.
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.belly_fullscreen_color = "#cf741e" // CHOMPedit - Belly Fullscreen
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm
index a4c475c049..ebc99011d2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm
@@ -151,6 +151,8 @@
/mob/living/simple_mob/vore/pakkun/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
if(isbelly(B)) //ChompEDIT - fix a runtime
@@ -278,6 +280,8 @@
/mob/living/simple_mob/vore/pakkun/snapdragon/snappy/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
if(isbelly(B)) //ChompEDIT - fix a runtime
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
index 08d28ccc1f..ad9492fbd5 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
@@ -72,6 +72,8 @@
/mob/living/simple_mob/vore/aggressive/panther/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm b/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm
index 4a15908f6b..f9bf82723a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/peasant.dm
@@ -57,6 +57,8 @@
/mob/living/simple_mob/vore/peasant/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm b/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm
index 68c4d9fb92..2d7b37e0a0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/plants.dm
@@ -41,6 +41,8 @@
/mob/living/simple_mob/vore/mantrap/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "trap"
@@ -135,6 +137,8 @@
/mob/living/simple_mob/vore/pitcher/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rabbit.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rabbit.dm
index 2aa3003f90..cb642c3c47 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/rabbit.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/rabbit.dm
@@ -97,6 +97,8 @@
/mob/living/simple_mob/vore/rabbit/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm b/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm
index 55c43c31d1..2d9da07787 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm
@@ -85,6 +85,8 @@
/mob/living/simple_mob/vore/raptor/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm
index 0178196718..a17af7cac8 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm
@@ -76,6 +76,8 @@
/mob/living/simple_mob/vore/aggressive/rat/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
index 44e754802b..e4ea740712 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
@@ -97,6 +97,8 @@
/mob/living/simple_mob/vore/scel/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm b/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm
index b857427f9c..bd27289b08 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/scrubble.dm
@@ -43,6 +43,8 @@
/mob/living/simple_mob/vore/scrubble/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm
index 6f68198e17..490f555fa9 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/sheep.dm
@@ -58,6 +58,8 @@
/mob/living/simple_mob/vore/sheep/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm
index d56710ef22..0ecadf5a22 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm
@@ -59,6 +59,8 @@
/mob/living/simple_mob/vore/slug/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.desc = "Somehow you remained still just long enough for the slug to wrap its radula around your body and gradually draw you into its pharynx. The slug moves with agonizing slowness and devours prey at a snail's pace; inch by inch you're crammed down its gullet and squishes and squeezed into the slug's gizzard. Thick walls bear down, covered with shallow, toothy ridges. The slimy moss in here suggests you're not the slug's diet but the gizzard seems intent on churning and scraping over you regardless..."
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm b/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm
index 85f05711b5..febb4aec55 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm
@@ -67,6 +67,8 @@
/mob/living/simple_mob/vore/aggressive/giant_snake/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm
index c862a61c48..2d7082fbed 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm
@@ -97,6 +97,8 @@
/mob/living/simple_mob/vore/woof/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
index be055d3554..a5137614b0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
@@ -178,6 +178,8 @@ var/global/moth_amount = 0 // Chompstation Addition, Rykka waz here. *pawstamp*
/mob/living/simple_mob/vore/solargrub/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm
index f423abe71f..b282e85135 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/sonadile.dm
@@ -46,6 +46,8 @@
/mob/living/simple_mob/vore/sonadile/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm b/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm
index f9fc1e9c31..cbc412f281 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/stalker.dm
@@ -46,6 +46,8 @@
/mob/living/simple_mob/vore/stalker/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm b/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm
index 67fa43187d..17dc8122cd 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/succubi.dm
@@ -58,6 +58,8 @@
/mob/living/simple_mob/vore/succubus/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm
index e1d61f6943..c622aa68e4 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/vampire.dm
@@ -57,6 +57,8 @@
/mob/living/simple_mob/vore/vampire/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
index 888691dcc8..13ad6c05df 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
@@ -1,7 +1,7 @@
/mob/living/simple_mob/vore
mob_class = MOB_CLASS_ANIMAL
mob_bump_flag = 0
- can_be_drop_pred = 1
+ can_be_drop_pred = TRUE
/mob/living/simple_mob
var/nameset
@@ -22,11 +22,11 @@
ooc_notes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes)
ooc_notes_likes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_likes)
ooc_notes_dislikes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_dislikes)
- //CHOMPAdd Start
+ //CHOMPEnable Start
ooc_notes_favs = read_preference(/datum/preference/text/living/ooc_notes_favs)
ooc_notes_maybes = read_preference(/datum/preference/text/living/ooc_notes_maybes)
ooc_notes_style = read_preference(/datum/preference/toggle/living/ooc_notes_style)
- //CHOMPAdd End
+ //CHOMPEnable End
private_notes = client.prefs.read_preference(/datum/preference/text/living/private_notes)
digestable = client.prefs_vr.digestable
devourable = client.prefs_vr.devourable
@@ -36,6 +36,7 @@
can_be_drop_pred = client.prefs_vr.can_be_drop_pred
throw_vore = client.prefs_vr.throw_vore
food_vore = client.prefs_vr.food_vore
+ consume_liquid_belly = client.prefs_vr.consume_liquid_belly
allow_spontaneous_tf = client.prefs_vr.allow_spontaneous_tf
digest_leave_remains = client.prefs_vr.digest_leave_remains
allowmobvore = client.prefs_vr.allowmobvore
@@ -56,7 +57,6 @@
pickup_pref = client.prefs_vr.pickup_pref
allow_mind_transfer = client.prefs_vr.allow_mind_transfer
- //CHOMP Stuff Start
phase_vore = client.prefs_vr.phase_vore
latejoin_vore = client.prefs_vr.latejoin_vore
latejoin_prey = client.prefs_vr.latejoin_prey
@@ -76,7 +76,6 @@
no_latejoin_prey_warning_persists = client.prefs_vr.no_latejoin_prey_warning_persists
belly_rub_target = client.prefs_vr.belly_rub_target
soulcatcher_pref_flags = client.prefs_vr.soulcatcher_pref_flags
- //CHOMP Stuff End
/mob/living/simple_mob/proc/set_name()
set name = "Set Name"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm
index cbfe0eb491..01be5f4874 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore_hostile.dm
@@ -73,6 +73,8 @@
/mob/living/simple_mob/vore/vore_hostile/abyss_lurker/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "interior"
@@ -193,6 +195,8 @@
/mob/living/simple_mob/vore/vore_hostile/leaper/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -311,6 +315,8 @@
/mob/living/simple_mob/vore/vore_hostile/gelatinous_cube/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "interior"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm
index 48c0450199..4b0339899c 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm
@@ -50,6 +50,8 @@
/mob/living/simple_mob/animal/wolf/init_vore() // CHOMPEdit - Allow for customizing bellies on vorecritters
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm
index 6412124b2e..69a2f34def 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolftaur.dm
@@ -71,6 +71,8 @@
/mob/living/simple_mob/vore/wolftaur/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm
index 88d5b7e51c..867afbe5ca 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm
@@ -230,6 +230,8 @@
/mob/living/simple_mob/animal/space/carp/holographic/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/safe = (faction == FACTION_NEUTRAL)
for(var/obj/belly/B as anything in vore_organs)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index aede5c9d0a..cd0b9c1501 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -15,7 +15,7 @@
spellremove(src)
if(!istype(src,/mob/observer))
ghostize()
- QDEL_NULL(soulgem) // CHOMPAdd Soulcatcher
+ QDEL_NULL(soulgem) //Soulcatcher
QDEL_NULL(dna)
QDEL_NULL(plane_holder)
QDEL_NULL(hud_used)
diff --git a/code/modules/mob/mob_helpers_vr.dm b/code/modules/mob/mob_helpers_vr.dm
index e3ee5caf82..8fa6b81dc1 100644
--- a/code/modules/mob/mob_helpers_vr.dm
+++ b/code/modules/mob/mob_helpers_vr.dm
@@ -20,14 +20,12 @@
plane_holder.set_vis(VIS_CH_VANTAG,FALSE)
vis_enabled -= VIS_CH_VANTAG
- //CHOMPAdd Start Soulcatcher
if(soulgem?.flag_check(SOULGEM_SEE_SR_SOULS))
plane_holder.set_vis(VIS_SOULCATCHER, TRUE)
vis_enabled += VIS_SOULCATCHER
else
plane_holder.set_vis(VIS_SOULCATCHER, FALSE)
vis_enabled -= VIS_SOULCATCHER
- //CHOMPAdd End
return
diff --git a/code/modules/mob/mob_planes_vr.dm b/code/modules/mob/mob_planes_vr.dm
index fd3e024080..0cfc934109 100644
--- a/code/modules/mob/mob_planes_vr.dm
+++ b/code/modules/mob/mob_planes_vr.dm
@@ -5,7 +5,7 @@
plane_masters[VIS_CH_BACKUP] = new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status
plane_masters[VIS_CH_VANTAG] = new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags
plane_masters[VIS_CH_STOMACH] = new /obj/screen/plane_master{plane = PLANE_CH_STOMACH} //Stomach
- plane_masters[VIS_SOULCATCHER] = new /obj/screen/plane_master{plane = PLANE_SOULCATCHER} //CHOMPAdd Soulcatcher
+ plane_masters[VIS_SOULCATCHER] = new /obj/screen/plane_master{plane = PLANE_SOULCATCHER} // Soulcatcher
plane_masters[VIS_AUGMENTED] = new /obj/screen/plane_master/augmented(M = my_mob) //Augmented reality
..()
diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm
index fbe6f5862c..af0e2c7ca3 100644
--- a/code/modules/nifsoft/software/13_soulcatcher.dm
+++ b/code/modules/nifsoft/software/13_soulcatcher.dm
@@ -1,13 +1,3 @@
-//CHOMPEdit, all moved to globals! code\__defines\nif_ch.dm
-//These two also have NIF FLAG representations. These are the local setting representations.
-//# define NIF_SC_CATCHING_ME 0x1 //CHOMPRemove
-//# define NIF_SC_CATCHING_OTHERS 0x2 //CHOMPRemove
-//These are purely local setings flags, without global representation.
-//# define NIF_SC_ALLOW_EARS 0x4 //CHOMPRemove
-//# define NIF_SC_ALLOW_EYES 0x8 //CHOMPRemove
-//# define NIF_SC_BACKUPS 0x10 //CHOMPRemove
-//# define NIF_SC_PROJECTING 0x20 //CHOMPRemove
-
///////////
// Soulcatcher - Like a posibrain, sorta!
/datum/nifsoft/soulcatcher
@@ -269,11 +259,11 @@
brainmob.ooc_notes = H.ooc_notes
brainmob.ooc_notes_likes = H.ooc_notes_likes
brainmob.ooc_notes_dislikes = H.ooc_notes_dislikes
- //CHOMPEdit Start
+ //CHOMPEnable Start
brainmob.ooc_notes_favs = H.ooc_notes_favs
brainmob.ooc_notes_maybes = H.ooc_notes_maybes
brainmob.ooc_notes_style = H.ooc_notes_style
- //CHOMPEdit End
+ //CHOMPEnable End
brainmob.timeofhostdeath = H.timeofdeath
SStranscore.m_backup(brainmob.mind,0) //It does ONE, so medical will hear about it.
@@ -318,7 +308,7 @@
/mob/living/carbon/brain/caught_soul/Login()
..()
plane_holder.set_vis(VIS_AUGMENTED, TRUE)
- plane_holder.set_vis(VIS_SOULCATCHER, TRUE) //CHOMPAdd
+ plane_holder.set_vis(VIS_SOULCATCHER, TRUE)
identifying_gender = client.prefs.identifying_gender
/mob/living/carbon/brain/caught_soul/Destroy()
@@ -340,7 +330,7 @@
. = ..()
- if(!parent_mob && !transient &&(life_tick % 150 == 0) && soulcatcher?.setting_flags & NIF_SC_BACKUPS) //CHOMPEdit
+ if(!parent_mob && !transient &&(life_tick % 150 == 0) && soulcatcher?.setting_flags & NIF_SC_BACKUPS)
SStranscore.m_backup(mind,0) //Passed 0 means "Don't touch the nif fields on the mind record"
life_tick++
@@ -355,7 +345,7 @@
if(parent_mob) return
//If they're blinded
- if(soulcatcher) // CHOMPEdit Start, needs it's own handling to allow vore_fx
+ if(soulcatcher) // needs it's own handling to allow vore_fx
if(ext_blind)
eye_blind = 5
client.screen.Remove(global_hud.whitense)
@@ -364,15 +354,14 @@
eye_blind = 0
clear_fullscreens()
client.screen.Add(global_hud.whitense)
- //CHOMPEdit End
//If they're deaf
if(ext_deaf)
ear_deaf = 5
- deaf_loop.start(skip_start_sound = TRUE) // CHOMPStation Add: Ear Ringing/Deafness
+ deaf_loop.start(skip_start_sound = TRUE) // CHOMPEnable: Ear Ringing/Deafness
else
ear_deaf = 0
- deaf_loop.stop() // CHOMPStation Add: Ear Ringing/Deafness
+ deaf_loop.stop() // CHOMPEnable: Ear Ringing/Deafness
/mob/living/carbon/brain/caught_soul/hear_say()
if(ext_deaf || !client)
@@ -441,7 +430,7 @@
plane = PLANE_AUGMENTED
icon = 'icons/obj/machines/ar_elements.dmi'
icon_state = "beacon"
- var/mob/living/parent_human //CHOMPEdit, no human, all living!
+ var/mob/living/parent_human
/mob/observer/eye/ar_soul/New(var/mob/brainmob, var/human)
ASSERT(brainmob && brainmob.client)
@@ -502,7 +491,7 @@
///////////////////
//The catching hook
-/hook/death/proc/nif_soulcatcher(var/mob/living/L) //CHOMPEdit Start
+/hook/death/proc/nif_soulcatcher(var/mob/living/L)
if(!istype(L) || !L.mind) return TRUE //Hooks must return TRUE
if(isbelly(L.loc)) //Died in someone
@@ -534,7 +523,6 @@
if(H.nif && H.nif.flag_check(NIF_O_SCMYSELF,NIF_FLAGS_OTHER)) //They are caught in their own NIF
var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER)
SC.catch_mob(H)
-//CHOMPEdit End
return TRUE
///////////////////
@@ -603,7 +591,7 @@
///////////////////
//Verbs for soulbrains
/mob/living/carbon/brain/caught_soul/verb/ar_project()
- set name = "AR/SR Project" //CHOMPEdit
+ set name = "AR/SR Project"
set desc = "Project your form into Augmented Reality for those around your predator with the appearance of your loaded character."
set category = "Soulcatcher"
@@ -665,10 +653,3 @@
if(message)
var/sane_message = sanitize(message)
soulcatcher.emote_into(sane_message,src,null)
-
-//# undef NIF_SC_CATCHING_ME //CHOMPRemove
-//# undef NIF_SC_CATCHING_OTHERS //CHOMPRemove
-//# undef NIF_SC_ALLOW_EARS //CHOMPRemove
-//# undef NIF_SC_ALLOW_EYES //CHOMPRemove
-//# undef NIF_SC_BACKUPS //CHOMPRemove
-//# undef NIF_SC_PROJECTING //CHOMPRemove
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index ffbc08484a..13c3da8922 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -9,8 +9,8 @@
idle_power_usage = 100
active_power_usage = 1000
- var/list/obj/machinery/am_shielding/linked_shielding
- var/list/obj/machinery/am_shielding/linked_cores
+ var/list/obj/machinery/am_shielding/linked_shielding = list()
+ var/list/obj/machinery/am_shielding/linked_cores = list()
var/obj/item/am_containment/fueljar
var/update_shield_icons = 0
var/stability = 100
@@ -28,17 +28,10 @@
var/stored_power = 0//Power to deploy per tick
-
-/obj/machinery/power/am_control_unit/Initialize(mapload)
- . = ..()
- linked_shielding = list()
- linked_cores = list()
-
-
/obj/machinery/power/am_control_unit/Destroy()//Perhaps damage and run stability checks rather than just qdel on the others
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
qdel(AMS)
- ..()
+ . = ..()
/obj/machinery/power/am_control_unit/process()
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 98f7d27d1a..e40795338a 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -74,8 +74,7 @@
if(processing) shutdown_core()
visible_message(span_red("The [src.name] melts!"))
//Might want to have it leave a mess on the floor but no sprites for now
- ..()
- return
+ . = ..()
/obj/machinery/am_shielding/CanPass(atom/movable/mover, turf/target)
diff --git a/code/modules/power/fusion/core/core_control.dm b/code/modules/power/fusion/core/core_control.dm
index 3641180ccd..dc9b699cbe 100644
--- a/code/modules/power/fusion/core/core_control.dm
+++ b/code/modules/power/fusion/core/core_control.dm
@@ -19,7 +19,7 @@
/obj/machinery/computer/fusion_core_control/Destroy()
QDEL_NULL(monitor)
- ..()
+ . = ..()
/obj/machinery/computer/fusion_core_control/attackby(var/obj/item/thing, var/mob/user)
..()
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_control.dm b/code/modules/power/fusion/fuel_assembly/fuel_control.dm
index 55eb334d25..7ff0542453 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_control.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_control.dm
@@ -17,7 +17,7 @@
/obj/machinery/computer/fusion_fuel_control/Destroy()
QDEL_NULL(monitor)
- ..()
+ . = ..()
/obj/machinery/computer/fusion_fuel_control/attack_ai(var/mob/user)
attack_hand(user)
diff --git a/code/modules/power/fusion/gyrotron/gyrotron_control.dm b/code/modules/power/fusion/gyrotron/gyrotron_control.dm
index f11544efed..f9349a3496 100644
--- a/code/modules/power/fusion/gyrotron/gyrotron_control.dm
+++ b/code/modules/power/fusion/gyrotron/gyrotron_control.dm
@@ -19,7 +19,7 @@
/obj/machinery/computer/gyrotron_control/Destroy()
QDEL_NULL(monitor)
- ..()
+ . = ..()
/obj/machinery/computer/gyrotron_control/attack_ai(var/mob/user)
attack_hand(user)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 0fc411857b..c7ad66d673 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -59,7 +59,7 @@
message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1)
log_game("EMITTER([x],[y],[z]) Destroyed/deleted.")
investigate_log(span_red("deleted") + " at ([x],[y],[z])","singulo")
- ..()
+ . = ..()
/obj/machinery/power/emitter/update_icon()
if (active && powernet && avail(active_power_usage))
diff --git a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm
index 65b843e287..9f4a09dbf2 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm
@@ -37,7 +37,7 @@
for(var/datum/particle_smasher_recipe/D in recipes)
qdel(D)
recipes.Cut()
- ..()
+ . = ..()
/obj/machinery/particle_smasher/examine(mob/user)
. = ..()
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index d4656bf5ab..f503bfab9d 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -26,7 +26,7 @@
/obj/machinery/power/tracker/Destroy()
unset_control() //remove from control computer
- ..()
+ . = ..()
//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST
/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC)
diff --git a/code/modules/reagents/holder/holder.dm b/code/modules/reagents/holder/holder.dm
index 1176767ba1..d370753c81 100644
--- a/code/modules/reagents/holder/holder.dm
+++ b/code/modules/reagents/holder/holder.dm
@@ -280,7 +280,7 @@
return splash_mob(target, amount * multiplier, copy) //Touch effects handled by splash_mob
if(isturf(target))
return trans_to_turf(target, amount, multiplier, copy)
- if(isobj(target) && target.is_open_container() && !isbelly(target.loc)) //CHOMPEdit
+ if(isobj(target) && target.is_open_container() && !isbelly(target.loc))
return trans_to_obj(target, amount, multiplier, copy)
return 0
diff --git a/code/modules/reagents/holder/holder_ch.dm b/code/modules/reagents/holder/vorebelly.dm
similarity index 94%
rename from code/modules/reagents/holder/holder_ch.dm
rename to code/modules/reagents/holder/vorebelly.dm
index ec71b5ee77..78b8b68d7a 100644
--- a/code/modules/reagents/holder/holder_ch.dm
+++ b/code/modules/reagents/holder/vorebelly.dm
@@ -1,5 +1,3 @@
-//CHOMP code for transfer specifically into vore bellies
-
/datum/reagents/proc/vore_trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_VORE, var/multiplier = 1, var/copy = 0, var/obj/belly/target_belly = null) // Transfer after checking into which holder...
if(!target || !istype(target))
return
diff --git a/code/modules/reagents/machinery/distillery.dm b/code/modules/reagents/machinery/distillery.dm
index 6f1a0a5c0d..59c0b11d92 100644
--- a/code/modules/reagents/machinery/distillery.dm
+++ b/code/modules/reagents/machinery/distillery.dm
@@ -99,7 +99,7 @@
qdel(OutputBeaker)
OutputBeaker = null
- ..()
+ . = ..()
/obj/machinery/portable_atmospherics/powered/reagent_distillery/examine(mob/user)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/_reagent_containers.dm b/code/modules/reagents/reagent_containers/_reagent_containers.dm
index 947257b844..1742d91f5c 100644
--- a/code/modules/reagents/reagent_containers/_reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers/_reagent_containers.dm
@@ -111,6 +111,11 @@
balloon_alert(user, "\the [src] is empty.") // CHOMPEdit - Changed to balloon alert
return TRUE
+ if(!target.consume_liquid_belly)
+ if(liquid_belly_check())
+ to_chat(user, span_infoplain("[user == target ? "You can't" : "\The [target] can't"] consume that, it contains something produced from a belly!"))
+ return FALSE
+
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(!H.check_has_mouth())
@@ -160,3 +165,9 @@
// to_chat(user, span_notice("You transfer [trans] units of the solution to [target]."))
balloon_alert(user, "transfered [trans] units to [target]") // CHOMPEdit - Balloon alerts! They're the future, I tell you.
return 1
+
+/obj/item/reagent_containers/proc/liquid_belly_check()
+ for(var/datum/reagent/R in reagents.reagent_list)
+ if(R.from_belly)
+ return TRUE
+ return FALSE
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index aac34e565f..cd623675bd 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -36,6 +36,10 @@
return
if (!istype(M))
return
+ if(!M.consume_liquid_belly)
+ if(liquid_belly_check())
+ to_chat(user, span_infoplain("[user == M ? "You can't" : "\The [M] can't"] take that, it contains something produced from a belly!"))
+ return FALSE
var/mob/living/carbon/human/H = M
if(istype(H))
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 570ef2eac8..5ff3e9c0b3 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -23,6 +23,10 @@
icon_state = "[base_state][rand(1, 4)]" //preset pills only use colour changing or unique icons
/obj/item/reagent_containers/pill/attack(mob/M as mob, mob/user as mob)
+ if(!M.consume_liquid_belly)
+ if(liquid_belly_check())
+ to_chat(user, span_infoplain("[user == M ? "You can't" : "\The [M] can't"] consume that, it contains something produced from a belly!"))
+ return FALSE
if(M == user)
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 93cd6a90d1..80f5dacc6f 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -209,6 +209,10 @@
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected //VOREStation Edit - Moved this outside this if
if(istype(H))
+ if(!H.consume_liquid_belly)
+ if(liquid_belly_check())
+ to_chat(user, span_infoplain("[user == H ? "You can't" : "\The [H] can't"] take that, it contains something produced from a belly!"))
+ return
affected = H.get_organ(user.zone_sel.selecting) //VOREStation Edit - See above comment.
if(!affected)
to_chat(user, span_danger("\The [H] is missing that limb!"))
diff --git a/code/modules/reagents/reagents/_reagents.dm b/code/modules/reagents/reagents/_reagents.dm
index dc427bf157..a133a79835 100644
--- a/code/modules/reagents/reagents/_reagents.dm
+++ b/code/modules/reagents/reagents/_reagents.dm
@@ -44,6 +44,8 @@
var/glass_desc = "It's a glass of... what, exactly?"
var/list/glass_special = null // null equivalent to list()
+ var/from_belly = FALSE
+
/datum/reagent/proc/remove_self(var/amount) // Shortcut
if(holder)
holder.remove_reagent(id, amount)
diff --git a/code/modules/reagents/reagents/dispenser.dm b/code/modules/reagents/reagents/dispenser.dm
index 8cb334a5f4..a2efdf6a6c 100644
--- a/code/modules/reagents/reagents/dispenser.dm
+++ b/code/modules/reagents/reagents/dispenser.dm
@@ -331,6 +331,22 @@
new /obj/effect/decal/cleanable/greenglow(T)
return
+/datum/reagent/radium/concentrated
+ name = REAGENT_CONCENTRATEDRADIUM
+ id = REAGENT_ID_CONCENTRATEDRADIUM
+ description = "Concentrated Radium is a more potent variant of regular radium, able to pierce and irradiate a subject through their skin."
+ taste_mult = 0 //Apparently radium is tasteless
+ reagent_state = SOLID
+ color = "#C7C7C7"
+
+/datum/reagent/radium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2
+ M.apply_effect(10 * removed, IRRADIATE, 0) // Radium may increase your chances to cure a disease
+
+/datum/reagent/radium/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2
+ M.apply_effect(10 * removed, IRRADIATE, 0) // Radium may increase your chances to cure a disease
+
/datum/reagent/acid
name = REAGENT_SACID
id = REAGENT_ID_SACID
diff --git a/code/modules/reagents/reagents/liquid_belly.dm b/code/modules/reagents/reagents/liquid_belly.dm
new file mode 100644
index 0000000000..21c098b25a
--- /dev/null
+++ b/code/modules/reagents/reagents/liquid_belly.dm
@@ -0,0 +1,49 @@
+// Subtypes of other reagents specifically used in liquid bellies, otherwise identical to the parent
+
+/datum/reagent/water/liquid_belly
+ id = REAGENT_ID_WATER_BELLY
+ from_belly = TRUE
+
+/datum/reagent/drink/milk/liquid_belly
+ id = REAGENT_ID_MILK_BELLY
+ from_belly = TRUE
+
+/datum/reagent/drink/milk/cream/liquid_belly
+ id = REAGENT_ID_CREAM_BELLY
+ from_belly = TRUE
+
+/datum/reagent/nutriment/honey/liquid_belly
+ id = REAGENT_ID_HONEY_BELLY
+ from_belly = TRUE
+
+/datum/reagent/nutriment/cherryjelly/liquid_belly
+ id = REAGENT_ID_CHERRYJELLY_BELLY
+ from_belly = TRUE
+
+/datum/reagent/acid/digestive/liquid_belly
+ id = REAGENT_ID_STOMACID_BELLY
+ from_belly = TRUE
+
+/datum/reagent/acid/diet_digestive/liquid_belly
+ id = REAGENT_ID_DIETSTOMACID_BELLY
+ from_belly = TRUE
+
+/datum/reagent/space_cleaner/liquid_belly
+ id = REAGENT_ID_CLEANER_BELLY
+ from_belly = TRUE
+
+/datum/reagent/lube/liquid_belly
+ id = REAGENT_ID_LUBE_BELLY
+ from_belly = TRUE
+
+/datum/reagent/nutriment/biomass/liquid_belly
+ id = REAGENT_ID_BIOMASS_BELLY
+ from_belly = TRUE
+
+/datum/reagent/radium/concentrated/liquid_belly
+ id = REAGENT_ID_CONCENTRATEDRADIUM_BELLY
+ from_belly = TRUE
+
+/datum/reagent/tricordrazine/liquid_belly
+ id = REAGENT_ID_TRICORDRAZINE_BELLY
+ from_belly = TRUE
diff --git a/code/modules/reagents/reagents/medicine_vr.dm b/code/modules/reagents/reagents/medicine_vr.dm
index 17fdc80278..378b21dde0 100644
--- a/code/modules/reagents/reagents/medicine_vr.dm
+++ b/code/modules/reagents/reagents/medicine_vr.dm
@@ -227,7 +227,7 @@
M.vore_selected = null
ourmob.mob_belly_transfer(M)
- M.soulgem.transfer_self(ourmob) //CHOMPAdd Soulcatcher
+ M.soulgem.transfer_self(ourmob) // Soulcatcher
ourmob.Life(1)
if(ishuman(M))
diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm
index b64cabe252..a87cc44931 100644
--- a/code/modules/reagents/reagents/toxins.dm
+++ b/code/modules/reagents/reagents/toxins.dm
@@ -485,7 +485,7 @@
power = 2
meltdose = 30
-/datum/reagent/acid/diet_digestive //CHOMPAdd
+/datum/reagent/acid/diet_digestive
name = REAGENT_DIETSTOMACID
id = REAGENT_ID_DIETSTOMACID
description = "Some form of digestive slurry."
diff --git a/code/modules/reagents/reagents/vore_ch.dm b/code/modules/reagents/reagents/vore_ch.dm
index 2a51de8367..b300be2b67 100644
--- a/code/modules/reagents/reagents/vore_ch.dm
+++ b/code/modules/reagents/reagents/vore_ch.dm
@@ -40,19 +40,3 @@
//absorption reagent production
if(B.show_liquids && B.reagent_mode_flags & DM_FLAG_REAGENTSABSORB && B.reagents.total_volume < B.reagents.maximum_volume)
B.GenerateBellyReagents_absorbed()
-
-/datum/reagent/radium/concentrated
- name = REAGENT_CONCENTRATEDRADIUM
- id = REAGENT_ID_CONCENTRATEDRADIUM
- description = "Concentrated Radium is a more potent variant of regular radium, able to pierce and irradiate a subject through their skin."
- taste_mult = 0 //Apparently radium is tasteless
- reagent_state = SOLID
- color = "#C7C7C7"
-
-/datum/reagent/radium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- if(issmall(M)) removed *= 2
- M.apply_effect(10 * removed, IRRADIATE, 0) // Radium may increase your chances to cure a disease
-
-/datum/reagent/radium/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
- if(issmall(M)) removed *= 2
- M.apply_effect(10 * removed, IRRADIATE, 0) // Radium may increase your chances to cure a disease
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 2baa2b85fe..a9eb9484d1 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -494,4 +494,4 @@
/obj/machinery/disposal/deliveryChute/Destroy()
if(trunk)
trunk.linked = null
- ..()
+ . = ..()
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index 9795653adc..f751908dc5 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -310,7 +310,7 @@ var/obj/machinery/blackbox_recorder/blackbox
BR.messages_admin = messages_admin
if(blackbox != BR)
blackbox = BR
- ..()
+ . = ..()
/obj/machinery/blackbox_recorder/proc/find_feedback_datum(var/variable)
for(var/datum/feedback_variable/FV in feedback)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 7c4790aea4..a083a74420 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -21,7 +21,7 @@
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
- ..()
+ . = ..()
/obj/machinery/r_n_d/server/RefreshParts()
var/tot_rating = 0
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index 106a57af49..84fc3227ec 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -209,7 +209,7 @@
src.cleanup(2)
src.cleanup(4)
src.cleanup(8)
- ..()
+ . = ..()
/obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj)
storedpower -= 400 * Proj.get_structure_damage()
@@ -254,7 +254,7 @@
/obj/machinery/shieldwall/Destroy()
update_nearby_tiles()
- ..()
+ . = ..()
/obj/machinery/shieldwall/attack_hand(mob/user as mob)
return
diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm
index 29b06f4e3a..ca63a33404 100644
--- a/code/modules/ventcrawl/ventcrawl.dm
+++ b/code/modules/ventcrawl/ventcrawl.dm
@@ -11,7 +11,7 @@ var/list/ventcrawl_machinery = list(
/obj/item/holder,
/obj/machinery/camera,
/obj/belly,
- /obj/soulgem, // CHOMPAdd
+ /obj/soulgem,
/obj/screen,
/atom/movable/emissive_blocker,
/obj/item/rig/protean
diff --git a/code/modules/vore/eating/belly_import.dm b/code/modules/vore/eating/belly_import.dm
index 6a7b739b32..e7eb74ee32 100644
--- a/code/modules/vore/eating/belly_import.dm
+++ b/code/modules/vore/eating/belly_import.dm
@@ -91,14 +91,13 @@
if(islist(belly_data["addons"]))
new_belly.mode_flags = 0
- new_belly.slow_digestion = FALSE // Not implemented on virgo -> CHOMPEnable
- new_belly.speedy_mob_processing = FALSE // Not implemented on virgo -> CHOMPEnable
+ new_belly.slow_digestion = FALSE
+ new_belly.speedy_mob_processing = FALSE
STOP_PROCESSING(SSbellies, new_belly)
- STOP_PROCESSING(SSobj, new_belly) // Not implemented on virgo -> CHOMPEnable
+ STOP_PROCESSING(SSobj, new_belly)
START_PROCESSING(SSbellies, new_belly)
for(var/addon in belly_data["addons"])
new_belly.mode_flags += new_belly.mode_flag_list[addon]
- // Not implemented on virgo -> CHOMPEnable Start
switch(addon)
if("Slow Body Digestion")
new_belly.slow_digestion = TRUE
@@ -106,7 +105,6 @@
new_belly.speedy_mob_processing = TRUE
STOP_PROCESSING(SSbellies, new_belly)
START_PROCESSING(SSobj, new_belly)
- //CHOMPEnable End
// Descriptions
if(istext(belly_data["desc"]))
@@ -140,262 +138,262 @@
if(islist(belly_data["digest_messages_prey"]))
var/new_digest_messages_prey = sanitize(jointext(belly_data["digest_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_digest_messages_prey)
- new_belly.set_messages(new_digest_messages_prey,"dmp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_digest_messages_prey,DIGEST_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["digest_messages_owner"]))
var/new_digest_messages_owner = sanitize(jointext(belly_data["digest_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_digest_messages_owner)
- new_belly.set_messages(new_digest_messages_owner,"dmo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_digest_messages_owner,DIGEST_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["absorb_messages_prey"]))
var/new_absorb_messages_prey = sanitize(jointext(belly_data["absorb_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_absorb_messages_prey)
- new_belly.set_messages(new_absorb_messages_prey,"amp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_absorb_messages_prey,ABSORB_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["absorb_messages_owner"]))
var/new_absorb_messages_owner = sanitize(jointext(belly_data["absorb_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_absorb_messages_owner)
- new_belly.set_messages(new_absorb_messages_owner,"amo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_absorb_messages_owner,ABSORB_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["unabsorb_messages_prey"]))
var/new_unabsorb_messages_prey = sanitize(jointext(belly_data["unabsorb_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_unabsorb_messages_prey)
- new_belly.set_messages(new_unabsorb_messages_prey,"uamp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_unabsorb_messages_prey,UNABSORBS_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["unabsorb_messages_owner"]))
var/new_unabsorb_messages_owner = sanitize(jointext(belly_data["unabsorb_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_unabsorb_messages_owner)
- new_belly.set_messages(new_unabsorb_messages_owner,"uamo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_unabsorb_messages_owner,UNABSORBS_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["struggle_messages_outside"]))
var/new_struggle_messages_outside = sanitize(jointext(belly_data["struggle_messages_outside"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_struggle_messages_outside)
- new_belly.set_messages(new_struggle_messages_outside,"smo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_struggle_messages_outside,STRUGGLE_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["struggle_messages_inside"]))
var/new_struggle_messages_inside = sanitize(jointext(belly_data["struggle_messages_inside"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_struggle_messages_inside)
- new_belly.set_messages(new_struggle_messages_inside,"smi", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_struggle_messages_inside,STRUGGLE_INSIDE, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["absorbed_struggle_messages_outside"]))
var/new_absorbed_struggle_messages_outside = sanitize(jointext(belly_data["absorbed_struggle_messages_outside"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_absorbed_struggle_messages_outside)
- new_belly.set_messages(new_absorbed_struggle_messages_outside,"asmo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_absorbed_struggle_messages_outside,ABSORBED_STRUGGLE_OUSIDE, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["absorbed_struggle_messages_inside"]))
var/new_absorbed_struggle_messages_inside = sanitize(jointext(belly_data["absorbed_struggle_messages_inside"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_absorbed_struggle_messages_inside)
- new_belly.set_messages(new_absorbed_struggle_messages_inside,"asmi", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_absorbed_struggle_messages_inside,ABSORBED_STRUGGLE_INSIDE, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_attempt_messages_prey"]))
var/new_escape_attempt_messages_prey = sanitize(jointext(belly_data["escape_attempt_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_attempt_messages_prey)
- new_belly.set_messages(new_escape_attempt_messages_prey,"escap", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_attempt_messages_prey,ESCAPE_ATTEMPT_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_attempt_messages_owner"]))
var/new_escape_attempt_messages_owner = sanitize(jointext(belly_data["escape_attempt_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_attempt_messages_owner)
- new_belly.set_messages(new_escape_attempt_messages_owner,"escao", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_attempt_messages_owner,ESCAPE_ATTEMPT_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_messages_prey"]))
var/new_escape_messages_prey = sanitize(jointext(belly_data["escape_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_messages_prey)
- new_belly.set_messages(new_escape_messages_prey,"escp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_messages_prey,ESCAPE_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_messages_owner"]))
var/new_escape_messages_owner = sanitize(jointext(belly_data["escape_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_messages_owner)
- new_belly.set_messages(new_escape_messages_owner,"esco", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_messages_owner,ESCAPE_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_messages_outside"]))
var/new_escape_messages_outside = sanitize(jointext(belly_data["escape_messages_outside"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_messages_outside)
- new_belly.set_messages(new_escape_messages_outside,"escout", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_messages_outside,ESCAPE_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_item_messages_prey"]))
var/new_escape_item_messages_prey = sanitize(jointext(belly_data["escape_item_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_item_messages_prey)
- new_belly.set_messages(new_escape_item_messages_prey,"escip", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_item_messages_prey,ESCAPE_ITEM_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_item_messages_owner"]))
var/new_escape_item_messages_owner = sanitize(jointext(belly_data["escape_item_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_item_messages_owner)
- new_belly.set_messages(new_escape_item_messages_owner,"escio", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_item_messages_owner,ESCAPE_ITEM_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_item_messages_outside"]))
var/new_escape_item_messages_outside = sanitize(jointext(belly_data["escape_item_messages_outside"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_item_messages_outside)
- new_belly.set_messages(new_escape_item_messages_outside,"esciout", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_item_messages_outside,ESCAPE_ITEM_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_fail_messages_prey"]))
var/new_escape_fail_messages_prey = sanitize(jointext(belly_data["escape_fail_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_fail_messages_prey)
- new_belly.set_messages(new_escape_fail_messages_prey,"escfp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_fail_messages_prey,ESCAPE_FAIL_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_fail_messages_owner"]))
var/new_escape_fail_messages_owner = sanitize(jointext(belly_data["escape_fail_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_fail_messages_owner)
- new_belly.set_messages(new_escape_fail_messages_owner,"escfo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_fail_messages_owner,ESCAPE_FAIL_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_attempt_absorbed_messages_prey"]))
var/new_escape_attempt_absorbed_messages_prey = sanitize(jointext(belly_data["escape_attempt_absorbed_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_attempt_absorbed_messages_prey)
- new_belly.set_messages(new_escape_attempt_absorbed_messages_prey,"aescap", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_attempt_absorbed_messages_prey,ABSORBED_ESCAPE_ATTEMPT_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_attempt_absorbed_messages_owner"]))
var/new_escape_attempt_absorbed_messages_owner = sanitize(jointext(belly_data["escape_attempt_absorbed_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_attempt_absorbed_messages_owner)
- new_belly.set_messages(new_escape_attempt_absorbed_messages_owner,"aescao", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_attempt_absorbed_messages_owner,ABSORBED_ESCAPE_ATTEMPT_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_absorbed_messages_prey"]))
var/new_escape_absorbed_messages_prey = sanitize(jointext(belly_data["escape_absorbed_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_absorbed_messages_prey)
- new_belly.set_messages(new_escape_absorbed_messages_prey,"aescp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_absorbed_messages_prey,ABSORBED_ESCAPE_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_absorbed_messages_owner"]))
var/new_escape_absorbed_messages_owner = sanitize(jointext(belly_data["escape_absorbed_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_absorbed_messages_owner)
- new_belly.set_messages(new_escape_absorbed_messages_owner,"aesco", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_absorbed_messages_owner,ABSORBED_ESCAPE_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_absorbed_messages_outside"]))
var/new_escape_absorbed_messages_outside = sanitize(jointext(belly_data["escape_absorbed_messages_outside"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_absorbed_messages_outside)
- new_belly.set_messages(new_escape_absorbed_messages_outside,"aescout", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_absorbed_messages_outside,ABSORBED_ESCAPE_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_fail_absorbed_messages_prey"]))
var/new_escape_fail_absorbed_messages_prey = sanitize(jointext(belly_data["escape_fail_absorbed_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_fail_absorbed_messages_prey)
- new_belly.set_messages(new_escape_fail_absorbed_messages_prey,"aescfp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_fail_absorbed_messages_prey,FULL_ABSORBED_ESCAPE_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["escape_fail_absorbed_messages_owner"]))
var/new_escape_fail_absorbed_messages_owner = sanitize(jointext(belly_data["escape_fail_absorbed_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_escape_fail_absorbed_messages_owner)
- new_belly.set_messages(new_escape_fail_absorbed_messages_owner,"aescfo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_escape_fail_absorbed_messages_owner,FULL_ABSORBED_ESCAPE_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["primary_transfer_messages_prey"]))
var/new_primary_transfer_messages_prey = sanitize(jointext(belly_data["primary_transfer_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_primary_transfer_messages_prey)
- new_belly.set_messages(new_primary_transfer_messages_prey,"trnspp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_primary_transfer_messages_prey,PRIMARY_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["primary_transfer_messages_owner"]))
var/new_primary_transfer_messages_owner = sanitize(jointext(belly_data["primary_transfer_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_primary_transfer_messages_owner)
- new_belly.set_messages(new_primary_transfer_messages_owner,"trnspo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_primary_transfer_messages_owner,PRIMARY_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["secondary_transfer_messages_prey"]))
var/new_secondary_transfer_messages_prey = sanitize(jointext(belly_data["secondary_transfer_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_secondary_transfer_messages_prey)
- new_belly.set_messages(new_secondary_transfer_messages_prey,"trnssp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_secondary_transfer_messages_prey,SECONDARY_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["secondary_transfer_messages_owner"]))
var/new_secondary_transfer_messages_owner = sanitize(jointext(belly_data["secondary_transfer_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_secondary_transfer_messages_owner)
- new_belly.set_messages(new_secondary_transfer_messages_owner,"trnsso", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_secondary_transfer_messages_owner,SECONDARY_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["primary_autotransfer_messages_prey"]))
var/new_primary_autotransfer_messages_prey = sanitize(jointext(belly_data["primary_autotransfer_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_primary_autotransfer_messages_prey)
- new_belly.set_messages(new_primary_autotransfer_messages_prey,"atrnspp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_primary_autotransfer_messages_prey,PRIMARY_AUTO_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["primary_autotransfer_messages_owner"]))
var/new_primary_autotransfer_messages_owner = sanitize(jointext(belly_data["primary_autotransfer_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_primary_autotransfer_messages_owner)
- new_belly.set_messages(new_primary_autotransfer_messages_owner,"atrnspo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_primary_autotransfer_messages_owner,PRIMARY_AUTO_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["secondary_autotransfer_messages_prey"]))
var/new_secondary_autotransfer_messages_prey = sanitize(jointext(belly_data["secondary_autotransfer_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_secondary_autotransfer_messages_prey)
- new_belly.set_messages(new_secondary_autotransfer_messages_prey,"atrnssp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_secondary_autotransfer_messages_prey,SECONDARY_AUTO_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["secondary_autotransfer_messages_owner"]))
var/new_secondary_autotransfer_messages_owner = sanitize(jointext(belly_data["secondary_autotransfer_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_secondary_autotransfer_messages_owner)
- new_belly.set_messages(new_secondary_autotransfer_messages_owner,"atrnsso", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_secondary_autotransfer_messages_owner,SECONDARY_AUTO_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["digest_chance_messages_prey"]))
var/new_digest_chance_messages_prey = sanitize(jointext(belly_data["digest_chance_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_digest_chance_messages_prey)
- new_belly.set_messages(new_digest_chance_messages_prey,"stmodp", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_digest_chance_messages_prey,DIGEST_CHANCE_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["digest_chance_messages_owner"]))
var/new_digest_chance_messages_owner = sanitize(jointext(belly_data["digest_chance_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_digest_chance_messages_owner)
- new_belly.set_messages(new_digest_chance_messages_owner,"stmodo", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_digest_chance_messages_owner,DIGEST_CHANCE_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["absorb_chance_messages_prey"]))
var/new_absorb_chance_messages_prey = sanitize(jointext(belly_data["absorb_chance_messages_prey"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_absorb_chance_messages_prey)
- new_belly.set_messages(new_absorb_chance_messages_prey,"stmoap", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_absorb_chance_messages_prey,ABSORB_CHANCE_PREY, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["absorb_chance_messages_owner"]))
var/new_absorb_chance_messages_owner = sanitize(jointext(belly_data["absorb_chance_messages_owner"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_absorb_chance_messages_owner)
- new_belly.set_messages(new_absorb_chance_messages_owner,"stmoao", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_absorb_chance_messages_owner,ABSORB_CHANCE_OWNER, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["examine_messages"]))
var/new_examine_messages = sanitize(jointext(belly_data["examine_messages"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_examine_messages)
- new_belly.set_messages(new_examine_messages,"em", limit = MAX_MESSAGE_LEN / 2)
+ new_belly.set_messages(new_examine_messages,EXAMINES, limit = MAX_MESSAGE_LEN / 2)
if(islist(belly_data["examine_messages_absorbed"]))
var/new_examine_messages_absorbed = sanitize(jointext(belly_data["examine_messages_absorbed"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_examine_messages_absorbed)
- new_belly.set_messages(new_examine_messages_absorbed,"ema", limit = MAX_MESSAGE_LEN / 2)
+ new_belly.set_messages(new_examine_messages_absorbed,EXAMINES_ABSORBED, limit = MAX_MESSAGE_LEN / 2)
if(islist(belly_data["emotes_digest"]))
var/new_emotes_digest = sanitize(jointext(belly_data["emotes_digest"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_digest)
- new_belly.set_messages(new_emotes_digest,"im_digest", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_digest,BELLY_MODE_DIGEST, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_hold"]))
var/new_emotes_hold = sanitize(jointext(belly_data["emotes_hold"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_hold)
- new_belly.set_messages(new_emotes_hold,"im_hold", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_hold,BELLY_MODE_HOLD, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_holdabsorbed"]))
var/new_emotes_holdabsorbed = sanitize(jointext(belly_data["emotes_holdabsorbed"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_holdabsorbed)
- new_belly.set_messages(new_emotes_holdabsorbed,"im_holdabsorbed", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_holdabsorbed,BELLY_MODE_HOLD_ABSORB, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_absorb"]))
var/new_emotes_absorb = sanitize(jointext(belly_data["emotes_absorb"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_absorb)
- new_belly.set_messages(new_emotes_absorb,"im_absorb", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_absorb,BELLY_MODE_ABSORB, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_heal"]))
var/new_emotes_heal = sanitize(jointext(belly_data["emotes_heal"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_heal)
- new_belly.set_messages(new_emotes_heal,"im_heal", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_heal,BELLY_MODE_HEAL, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_drain"]))
var/new_emotes_drain = sanitize(jointext(belly_data["emotes_drain"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_drain)
- new_belly.set_messages(new_emotes_drain,"im_drain", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_drain,BELLY_MODE_DRAIN, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_steal"]))
var/new_emotes_steal = sanitize(jointext(belly_data["emotes_steal"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_steal)
- new_belly.set_messages(new_emotes_steal,"im_steal", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_steal,BELLY_MODE_STEAL, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_egg"]))
var/new_emotes_egg = sanitize(jointext(belly_data["emotes_egg"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_egg)
- new_belly.set_messages(new_emotes_egg,"im_egg", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_egg,BELLY_MODE_EGG, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_shrink"]))
var/new_emotes_shrink = sanitize(jointext(belly_data["emotes_shrink"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_shrink)
- new_belly.set_messages(new_emotes_shrink,"im_shrink", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_shrink,BELLY_MODE_SHRINK, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_grow"]))
var/new_emotes_grow = sanitize(jointext(belly_data["emotes_grow"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_grow)
- new_belly.set_messages(new_emotes_grow,"im_grow", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_grow,BELLY_MODE_GROW, limit = MAX_MESSAGE_LEN / 4)
if(islist(belly_data["emotes_unabsorb"]))
var/new_emotes_unabsorb = sanitize(jointext(belly_data["emotes_unabsorb"],"\n\n"),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_emotes_unabsorb)
- new_belly.set_messages(new_emotes_unabsorb,"im_unabsorb", limit = MAX_MESSAGE_LEN / 4)
+ new_belly.set_messages(new_emotes_unabsorb,BELLY_MODE_UNABSORB, limit = MAX_MESSAGE_LEN / 4)
// Options
if(isnum(belly_data["can_taste"]))
@@ -405,14 +403,12 @@
if(new_can_taste == 1)
new_belly.can_taste = TRUE
- // Not implemented on virgo -> CHOMPEnable Start
if(isnum(belly_data["is_feedable"]))
var/new_is_feedable = belly_data["is_feedable"]
if(new_is_feedable == 0)
new_belly.is_feedable = FALSE
if(new_is_feedable == 1)
new_belly.is_feedable = TRUE
- // CHOMPEnable End
if(isnum(belly_data["contaminates"]))
var/new_contaminates = belly_data["contaminates"]
@@ -473,29 +469,28 @@
if(isnum(belly_data["digest_brute"]))
var/new_digest_brute = belly_data["digest_brute"]
- new_belly.digest_brute = CLAMP(new_digest_brute, 0, new_belly.get_unused_digestion_damage()) // CHOMP Edit; clamped to unused damage instead of 6
+ new_belly.digest_brute = CLAMP(new_digest_brute, 0, new_belly.get_unused_digestion_damage())
if(isnum(belly_data["digest_burn"]))
var/new_digest_burn = belly_data["digest_burn"]
- new_belly.digest_burn = CLAMP(new_digest_burn, 0, new_belly.get_unused_digestion_damage()) // CHOMP Edit; clamped to unused damage instead of 6
+ new_belly.digest_burn = CLAMP(new_digest_burn, 0, new_belly.get_unused_digestion_damage())
if(isnum(belly_data["digest_oxy"]))
var/new_digest_oxy = belly_data["digest_oxy"]
- new_belly.digest_oxy = CLAMP(new_digest_oxy, 0, new_belly.get_unused_digestion_damage()) // CHOMP Edit; clamped to unused damage instead of 12
+ new_belly.digest_oxy = CLAMP(new_digest_oxy, 0, new_belly.get_unused_digestion_damage())
if(isnum(belly_data["digest_tox"]))
var/new_digest_tox = belly_data["digest_tox"]
- new_belly.digest_tox = CLAMP(new_digest_tox, 0, new_belly.get_unused_digestion_damage()) // CHOMP Edit; clamped to unused damage instead of 6
+ new_belly.digest_tox = CLAMP(new_digest_tox, 0, new_belly.get_unused_digestion_damage())
if(isnum(belly_data["digest_clone"]))
var/new_digest_clone = belly_data["digest_clone"]
- new_belly.digest_clone = CLAMP(new_digest_clone, 0, new_belly.get_unused_digestion_damage()) // CHOMP Edit; clamped to unused damage instead of 6
+ new_belly.digest_clone = CLAMP(new_digest_clone, 0, new_belly.get_unused_digestion_damage())
if(isnum(belly_data["shrink_grow_size"]))
var/new_shrink_grow_size = belly_data["shrink_grow_size"]
new_belly.shrink_grow_size = CLAMP(new_shrink_grow_size, 0.25, 2)
- // Not implemented on virgo -> CHOMPEnable Start
if(isnum(belly_data["vorespawn_blacklist"]))
var/new_vorespawn_blacklist = belly_data["vorespawn_blacklist"]
if(new_vorespawn_blacklist == 0)
@@ -516,7 +511,6 @@
new_vorespawn_absorbed |= VS_FLAG_ABSORB_YES
new_vorespawn_absorbed |= VS_FLAG_ABSORB_PREY
new_belly.vorespawn_absorbed = new_vorespawn_absorbed
- // CHOMPEnable End
if(istext(belly_data["egg_type"]))
var/new_egg_type = sanitize(belly_data["egg_type"],MAX_MESSAGE_LEN,0,0,0)
@@ -524,7 +518,6 @@
if(new_egg_type in global_vore_egg_types)
new_belly.egg_type = new_egg_type
- // Not implemented on virgo -> CHOMPEnable Start
if(istext(belly_data["egg_name"]))
var/new_egg_name = html_encode(belly_data["egg_name"])
if(new_egg_name)
@@ -566,7 +559,6 @@
new_belly.item_digest_logs = FALSE
if(new_item_digest_logs == 1)
new_belly.item_digest_logs = TRUE
- // CHOMPEnable End
if(istext(belly_data["selective_preference"]))
var/new_selective_preference = belly_data["selective_preference"]
@@ -575,14 +567,12 @@
if(new_selective_preference == "Absorb")
new_belly.selective_preference = DM_ABSORB
- // Not implemented on virgo -> CHOMPEnable Start
if(isnum(belly_data["private_struggle"]))
var/new_private_struggle = belly_data["private_struggle"]
if(new_private_struggle == 0)
new_belly.private_struggle = FALSE
if(new_private_struggle == 1)
new_belly.private_struggle = TRUE
- // CHOMPEnable End
if(istext(belly_data["eating_privacy_local"]))
var/new_eating_privacy_local = html_encode(belly_data["eating_privacy_local"])
@@ -638,7 +628,6 @@
if (!new_belly.fancy_vore && (new_release_sound in classic_release_sounds))
new_belly.release_sound = new_release_sound
- // Not implemented on virgo -> CHOMPEnable Start
if(isnum(belly_data["sound_volume"]))
var/new_sound_volume = belly_data["sound_volume"]
new_belly.sound_volume = sanitize_integer(new_sound_volume, 0, 100, initial(new_belly.sound_volume))
@@ -646,7 +635,6 @@
if(isnum(belly_data["noise_freq"]))
var/new_noise_freq = belly_data["noise_freq"]
new_belly.noise_freq = sanitize_integer(new_noise_freq, MIN_VOICE_FREQ, MAX_VOICE_FREQ, initial(new_belly.noise_freq))
- // CHOMPEnable End
// Visuals
if(isnum(belly_data["affects_vore_sprites"]))
@@ -769,7 +757,6 @@
var/new_belly_fullscreen_color = sanitize_hexcolor(belly_data["belly_fullscreen_color"],new_belly.belly_fullscreen_color)
new_belly.belly_fullscreen_color = new_belly_fullscreen_color
- // CHOMPEdit Start
if(istext(belly_data["belly_fullscreen_color2"]))
var/new_belly_fullscreen_color2 = sanitize_hexcolor(belly_data["belly_fullscreen_color2"],new_belly.belly_fullscreen_color2)
new_belly.belly_fullscreen_color2 = new_belly_fullscreen_color2
@@ -783,9 +770,7 @@
else if(istext(belly_data["belly_fullscreen_color_trinary"])) // Inter server support between virgo and chomp!
var/new_belly_fullscreen_color3 = sanitize_hexcolor(belly_data["belly_fullscreen_color_trinary"],new_belly.belly_fullscreen_color3)
new_belly.belly_fullscreen_color3 = new_belly_fullscreen_color3
- // CHOMPEdit End
- // Not implemented on virgo -> CHOMPEnable Start
if(istext(belly_data["belly_fullscreen_color4"]))
var/new_belly_fullscreen_color4 = sanitize_hexcolor(belly_data["belly_fullscreen_color4"],new_belly.belly_fullscreen_color4)
new_belly.belly_fullscreen_color4 = new_belly_fullscreen_color4
@@ -793,7 +778,6 @@
if(istext(belly_data["belly_fullscreen_alpha"]))
var/new_belly_fullscreen_alpha = sanitize_integer(belly_data["belly_fullscreen_alpha"],0,255,initial(new_belly.belly_fullscreen_alpha))
new_belly.belly_fullscreen_alpha = new_belly_fullscreen_alpha
- // CHOMPEnable End
if(isnum(belly_data["colorization_enabled"]))
var/new_colorization_enabled = belly_data["colorization_enabled"]
@@ -809,12 +793,9 @@
if(new_disable_hud == 1)
new_belly.disable_hud = TRUE
- var/possible_fullscreens = icon_states('modular_chomp/icons/mob/screen_full_vore_ch.dmi') // CHOMPEdit
+ var/possible_fullscreens = icon_states('icons/mob/screen_full_vore_list.dmi')
if(!new_belly.colorization_enabled)
possible_fullscreens = icon_states('icons/mob/screen_full_vore.dmi')
- possible_fullscreens -= "a_synth_flesh_mono"
- possible_fullscreens -= "a_synth_flesh_mono_hole"
- possible_fullscreens -= "a_anim_belly"
if(!(new_belly.belly_fullscreen in possible_fullscreens))
new_belly.belly_fullscreen = ""
@@ -877,7 +858,6 @@
if(new_transferlocation_secondary == new_belly.name)
new_belly.transferlocation_secondary = null
- // Not implemented on virgo -> CHOMPEnable Start
if(islist(belly_data["autotransfer_whitelist"]))
new_belly.autotransfer_whitelist = 0
for(var/at_flag in belly_data["autotransfer_whitelist"])
@@ -897,7 +877,6 @@
new_belly.autotransfer_secondary_blacklist = 0
for(var/at_flag in belly_data["autotransfer_secondary_blacklist"])
new_belly.autotransfer_secondary_blacklist += new_belly.autotransfer_flags_list[at_flag]
- // CHOMPEnable End
if(isnum(belly_data["absorbchance"]))
var/new_absorbchance = belly_data["absorbchance"]
@@ -907,14 +886,12 @@
var/new_digestchance = belly_data["digestchance"]
new_belly.digestchance = sanitize_integer(new_digestchance, 0, 100, initial(new_belly.digestchance))
- // Not implemented on virgo -> CHOMPEnable Start
if(isnum(belly_data["autotransfer_enabled"]))
var/new_autotransfer_enabled = belly_data["autotransfer_enabled"]
if(new_autotransfer_enabled == 0)
new_belly.autotransfer_enabled = FALSE
if(new_autotransfer_enabled == 1)
new_belly.autotransfer_enabled = TRUE
- // CHOMPEnable End
if(isnum(belly_data["autotransferwait"]))
var/new_autotransferwait = belly_data["autotransferwait"]
@@ -936,7 +913,6 @@
if(new_autotransferlocation == new_belly.name)
new_belly.autotransferlocation = null
- // Not implemented on virgo -> CHOMPEnable Start
if(islist(belly_data["autotransferextralocation"]))
var/new_autotransferextralocation = belly_data["autotransferextralocation"]
if(new_autotransferextralocation)
@@ -1171,7 +1147,6 @@
var/new_fullness5_messages = sanitize(jointext(belly_data["fullness5_messages"],"\n\n"),MAX_MESSAGE_LEN,0,0,0)
if(new_fullness5_messages)
new_belly.set_reagent_messages(new_fullness5_messages,"full5")
- // CHOMPEnable End
// After import updates
new_belly.items_preserved.Cut()
diff --git a/code/modules/vore/eating/belly_messages.dm b/code/modules/vore/eating/belly_messages.dm
index f918322b58..f95b41aeb2 100644
--- a/code/modules/vore/eating/belly_messages.dm
+++ b/code/modules/vore/eating/belly_messages.dm
@@ -93,7 +93,6 @@
var/list/secondary_transfer_messages_prey = list(
"Your attempt to escape %pred's %belly has failed and your struggles only results in you sliding into %pred's %dest!")
- //CHOMPAdd Start
var/list/primary_autotransfer_messages_owner = list(
"%prey moves along into your %dest!")
@@ -105,7 +104,6 @@
var/list/secondary_autotransfer_messages_prey = list(
"%pred's %belly moves you along into their %dest!")
- //CHOMPAdd End
var/list/digest_chance_messages_owner = list(
"You feel your %belly beginning to become active!")
@@ -237,7 +235,7 @@ GLOBAL_LIST_INIT(vore_words_snake, list("snake","serpent","reptilian","noodle","
// but can easily make the message vary based on how many people are inside, etc.
// Returns a string which shoul be appended to the Examine output.
/obj/belly/proc/get_examine_msg()
- if(!(contents?.len) || !(examine_messages?.len)) //ChompEDIT - runtimes
+ if(!(LAZYLEN(contents)) || !(LAZYLEN(examine_messages)))
return ""
var/raw_message = pick(examine_messages)
@@ -258,7 +256,7 @@ GLOBAL_LIST_INIT(vore_words_snake, list("snake","serpent","reptilian","noodle","
return(span_red(span_italics("[belly_format_string(raw_message, english_list(vore_contents))]")))
/obj/belly/proc/get_examine_msg_absorbed()
- if(!(contents?.len) || !(examine_messages_absorbed?.len) || !display_absorbed_examine) //ChompEDIT - runtimes
+ if(!(LAZYLEN(contents)) || !(LAZYLEN(examine_messages_absorbed)) || !display_absorbed_examine)
return ""
var/raw_message = pick(examine_messages_absorbed)
@@ -279,115 +277,113 @@ GLOBAL_LIST_INIT(vore_words_snake, list("snake","serpent","reptilian","noodle","
// This is useful in customization boxes and such. The delimiter right now is \n\n so
// in message boxes, this looks nice and is easily delimited.
/obj/belly/proc/get_messages(type, delim = "\n\n")
- ASSERT(type == "smo" || type == "smi" || type == "asmo" || type == "asmi" || type == "escao" || type == "escap" || type == "escp" || type == "esco" || type == "escout" || type == "escip" || type == "escio" || type == "esciout" || type == "escfp" || type == "escfo" || type == "aescao" || type == "aescap" || type == "aescp" || type == "aesco" || type == "aescout" || type == "aescfp" || type == "aescfo" || type == "trnspp" || type == "trnspo" || type == "trnssp" || type == "trnsso" || type == "atrnspp" || type == "atrnspo" || type == "atrnssp" || type == "atrnsso" || type == "stmodp" || type == "stmodo" || type == "stmoap" || type == "stmoao" || type == "dmo" || type == "dmp" || type == "amo" || type == "amp" || type == "uamo" || type == "uamp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb") //CHOMPEdit
+ VB_MESSAGE_SANIRY(type)
var/list/raw_messages
switch(type)
- if("smo")
+ if(STRUGGLE_OUTSIDE)
raw_messages = struggle_messages_outside
- if("smi")
+ if(STRUGGLE_INSIDE)
raw_messages = struggle_messages_inside
- if("asmo")
+ if(ABSORBED_STRUGGLE_OUSIDE)
raw_messages = absorbed_struggle_messages_outside
- if("asmi")
+ if(ABSORBED_STRUGGLE_INSIDE)
raw_messages = absorbed_struggle_messages_inside
- if("escao")
+ if(ESCAPE_ATTEMPT_OWNER)
raw_messages = escape_attempt_messages_owner
- if("escap")
+ if(ESCAPE_ATTEMPT_PREY)
raw_messages = escape_attempt_messages_prey
- if("esco")
+ if(ESCAPE_OWNER)
raw_messages = escape_messages_owner
- if("escp")
+ if(ESCAPE_PREY)
raw_messages = escape_messages_prey
- if("escout")
+ if(ESCAPE_OUTSIDE)
raw_messages = escape_messages_outside
- if("escio")
+ if(ESCAPE_ITEM_OWNER)
raw_messages = escape_item_messages_owner
- if("escip")
+ if(ESCAPE_ITEM_PREY)
raw_messages = escape_item_messages_prey
- if("esciout")
+ if(ESCAPE_ITEM_OUTSIDE)
raw_messages = escape_item_messages_outside
- if("escfo")
+ if(ESCAPE_FAIL_OWNER)
raw_messages = escape_fail_messages_owner
- if("escfp")
+ if(ESCAPE_FAIL_PREY)
raw_messages = escape_fail_messages_prey
- if("aescao")
+ if(ABSORBED_ESCAPE_ATTEMPT_OWNER)
raw_messages = escape_attempt_absorbed_messages_owner
- if("aescap")
+ if(ABSORBED_ESCAPE_ATTEMPT_PREY)
raw_messages = escape_attempt_absorbed_messages_prey
- if("aesco")
+ if(ABSORBED_ESCAPE_OWNER)
raw_messages = escape_absorbed_messages_owner
- if("aescp")
+ if(ABSORBED_ESCAPE_PREY)
raw_messages = escape_absorbed_messages_prey
- if("aescout")
+ if(ABSORBED_ESCAPE_OUTSIDE)
raw_messages = escape_absorbed_messages_outside
- if("aescfo")
+ if(FULL_ABSORBED_ESCAPE_OWNER)
raw_messages = escape_fail_absorbed_messages_owner
- if("aescfp")
+ if(FULL_ABSORBED_ESCAPE_PREY)
raw_messages = escape_fail_absorbed_messages_prey
- if("trnspo")
+ if(PRIMARY_TRANSFER_OWNER)
raw_messages = primary_transfer_messages_owner
- if("trnspp")
+ if(PRIMARY_TRANSFER_PREY)
raw_messages = primary_transfer_messages_prey
- if("trnsso")
+ if(SECONDARY_TRANSFER_OWNER)
raw_messages = secondary_transfer_messages_owner
- if("trnssp")
+ if(SECONDARY_TRANSFER_PREY)
raw_messages = secondary_transfer_messages_prey
- //CHOMPAdd Start
- if("atrnspo")
+ if(PRIMARY_AUTO_TRANSFER_OWNER)
raw_messages = primary_autotransfer_messages_owner
- if("atrnspp")
+ if(PRIMARY_AUTO_TRANSFER_PREY)
raw_messages = primary_autotransfer_messages_prey
- if("atrnsso")
+ if(SECONDARY_AUTO_TRANSFER_OWNER)
raw_messages = secondary_autotransfer_messages_owner
- if("atrnssp")
+ if(SECONDARY_AUTO_TRANSFER_PREY)
raw_messages = secondary_autotransfer_messages_prey
- //CHOMPAdd End
- if("stmodo")
+ if(DIGEST_CHANCE_OWNER)
raw_messages = digest_chance_messages_owner
- if("stmodp")
+ if(DIGEST_CHANCE_PREY)
raw_messages = digest_chance_messages_prey
- if("stmoao")
+ if(ABSORB_CHANCE_OWNER)
raw_messages = absorb_chance_messages_owner
- if("stmoap")
+ if(ABSORB_CHANCE_PREY)
raw_messages = absorb_chance_messages_prey
- if("dmo")
+ if(DIGEST_OWNER)
raw_messages = digest_messages_owner
- if("dmp")
+ if(DIGEST_PREY)
raw_messages = digest_messages_prey
- if("em")
+ if(EXAMINES)
raw_messages = examine_messages
- if("ema")
+ if(EXAMINES_ABSORBED)
raw_messages = examine_messages_absorbed
- if("amo")
+ if(ABSORB_OWNER)
raw_messages = absorb_messages_owner
- if("amp")
+ if(ABSORB_PREY)
raw_messages = absorb_messages_prey
- if("uamo")
+ if(UNABSORBS_OWNER)
raw_messages = unabsorb_messages_owner
- if("uamp")
+ if(UNABSORBS_PREY)
raw_messages = unabsorb_messages_prey
- if("im_digest")
+ if(BELLY_MODE_DIGEST)
raw_messages = emote_lists[DM_DIGEST]
- if("im_hold")
+ if(BELLY_MODE_HOLD)
raw_messages = emote_lists[DM_HOLD]
- if("im_holdabsorbed")
+ if(BELLY_MODE_HOLD_ABSORB)
raw_messages = emote_lists[DM_HOLD_ABSORBED]
- if("im_absorb")
+ if(BELLY_MODE_ABSORB)
raw_messages = emote_lists[DM_ABSORB]
- if("im_heal")
+ if(BELLY_MODE_HEAL)
raw_messages = emote_lists[DM_HEAL]
- if("im_drain")
+ if(BELLY_MODE_DRAIN)
raw_messages = emote_lists[DM_DRAIN]
- if("im_steal")
+ if(BELLY_MODE_STEAL)
raw_messages = emote_lists[DM_SIZE_STEAL]
- if("im_egg")
+ if(BELLY_MODE_EGG)
raw_messages = emote_lists[DM_EGG]
- if("im_shrink")
+ if(BELLY_MODE_SHRINK)
raw_messages = emote_lists[DM_SHRINK]
- if("im_grow")
+ if(BELLY_MODE_GROW)
raw_messages = emote_lists[DM_GROW]
- if("im_unabsorb")
+ if(BELLY_MODE_UNABSORB)
raw_messages = emote_lists[DM_UNABSORB]
var/messages = null
if(raw_messages)
@@ -401,7 +397,7 @@ GLOBAL_LIST_INIT(vore_words_snake, list("snake","serpent","reptilian","noodle","
/obj/belly/proc/set_messages(raw_text, type, delim = "\n\n", limit)
if(!limit)
CRASH("[src] set message called without limit!")
- ASSERT(type == "smo" || type == "smi" || type == "asmo" || type == "asmi" || type == "escao" || type == "escap" || type == "escp" || type == "esco" || type == "escout" || type == "escip" || type == "escio" || type == "esciout" || type == "escfp" || type == "escfo" || type == "aescao" || type == "aescap" || type == "aescp" || type == "aesco" || type == "aescout" || type == "aescfp" || type == "aescfo" || type == "trnspp" || type == "trnspo" || type == "trnssp" || type == "trnsso" || type == "atrnspp" || type == "atrnspo" || type == "atrnssp" || type == "atrnsso" || type == "stmodp" || type == "stmodo" || type == "stmoap" || type == "stmoao" || type == "dmo" || type == "dmp" || type == "amo" || type == "amp" || type == "uamo" || type == "uamp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb") //CHOMPEdit
+ VB_MESSAGE_SANIRY(type)
var/list/raw_list
@@ -434,109 +430,107 @@ GLOBAL_LIST_INIT(vore_words_snake, list("snake","serpent","reptilian","noodle","
ASSERT(raw_list.len <= 10) //Sanity
switch(type)
- if("smo")
+ if(STRUGGLE_OUTSIDE)
struggle_messages_outside = raw_list
- if("smi")
+ if(STRUGGLE_INSIDE)
struggle_messages_inside = raw_list
- if("asmo")
+ if(ABSORBED_STRUGGLE_OUSIDE)
absorbed_struggle_messages_outside = raw_list
- if("asmi")
+ if(ABSORBED_STRUGGLE_INSIDE)
absorbed_struggle_messages_inside = raw_list
- if("escao")
+ if(ESCAPE_ATTEMPT_OWNER)
escape_attempt_messages_owner = raw_list
- if("escap")
+ if(ESCAPE_ATTEMPT_PREY)
escape_attempt_messages_prey = raw_list
- if("esco")
+ if(ESCAPE_OWNER)
escape_messages_owner = raw_list
- if("escp")
+ if(ESCAPE_PREY)
escape_messages_prey = raw_list
- if("escout")
+ if(ESCAPE_OUTSIDE)
escape_messages_outside = raw_list
- if("escio")
+ if(ESCAPE_ITEM_OWNER)
escape_item_messages_owner = raw_list
- if("escip")
+ if(ESCAPE_ITEM_PREY)
escape_item_messages_prey = raw_list
- if("esciout")
+ if(ESCAPE_ITEM_OUTSIDE)
escape_item_messages_outside = raw_list
- if("escfo")
+ if(ESCAPE_FAIL_OWNER)
escape_fail_messages_owner = raw_list
- if("escfp")
+ if(ESCAPE_FAIL_PREY)
escape_fail_messages_prey = raw_list
- if("aescao")
+ if(ABSORBED_ESCAPE_ATTEMPT_OWNER)
escape_attempt_absorbed_messages_owner = raw_list
- if("aescap")
+ if(ABSORBED_ESCAPE_ATTEMPT_PREY)
escape_attempt_absorbed_messages_prey = raw_list
- if("aesco")
+ if(ABSORBED_ESCAPE_OWNER)
escape_absorbed_messages_owner = raw_list
- if("aescp")
+ if(ABSORBED_ESCAPE_PREY)
escape_absorbed_messages_prey = raw_list
- if("aescout")
+ if(ABSORBED_ESCAPE_OUTSIDE)
escape_absorbed_messages_outside = raw_list
- if("aescfo")
+ if(FULL_ABSORBED_ESCAPE_OWNER)
escape_fail_absorbed_messages_owner = raw_list
- if("aescfp")
+ if(FULL_ABSORBED_ESCAPE_PREY)
escape_fail_absorbed_messages_prey = raw_list
- if("trnspo")
+ if(PRIMARY_TRANSFER_OWNER)
primary_transfer_messages_owner = raw_list
- if("trnspp")
+ if(PRIMARY_TRANSFER_PREY)
primary_transfer_messages_prey = raw_list
- if("trnsso")
+ if(SECONDARY_TRANSFER_OWNER)
secondary_transfer_messages_owner = raw_list
- if("trnssp")
+ if(SECONDARY_TRANSFER_PREY)
secondary_transfer_messages_prey = raw_list
- //CHOMPAdd Start
- if("atrnspo")
+ if(PRIMARY_AUTO_TRANSFER_OWNER)
primary_autotransfer_messages_owner = raw_list
- if("atrnspp")
+ if(PRIMARY_AUTO_TRANSFER_PREY)
primary_autotransfer_messages_prey = raw_list
- if("atrnsso")
+ if(SECONDARY_AUTO_TRANSFER_OWNER)
secondary_autotransfer_messages_owner = raw_list
- if("atrnssp")
+ if(SECONDARY_AUTO_TRANSFER_PREY)
secondary_autotransfer_messages_prey = raw_list
- //CHOMPAdd End
- if("stmodo")
+ if(DIGEST_CHANCE_OWNER)
digest_chance_messages_owner = raw_list
- if("stmodp")
+ if(DIGEST_CHANCE_PREY)
digest_chance_messages_prey = raw_list
- if("stmoao")
+ if(ABSORB_CHANCE_OWNER)
absorb_chance_messages_owner = raw_list
- if("stmoap")
+ if(ABSORB_CHANCE_PREY)
absorb_chance_messages_prey = raw_list
- if("dmo")
+ if(DIGEST_OWNER)
digest_messages_owner = raw_list
- if("dmp")
+ if(DIGEST_PREY)
digest_messages_prey = raw_list
- if("amo")
+ if(ABSORB_OWNER)
absorb_messages_owner = raw_list
- if("amp")
+ if(ABSORB_PREY)
absorb_messages_prey = raw_list
- if("uamo")
+ if(UNABSORBS_OWNER)
unabsorb_messages_owner = raw_list
- if("uamp")
+ if(UNABSORBS_PREY)
unabsorb_messages_prey = raw_list
- if("em")
+ if(EXAMINES)
examine_messages = raw_list
- if("ema")
+ if(EXAMINES_ABSORBED)
examine_messages_absorbed = raw_list
- if("im_digest")
+ if(BELLY_MODE_DIGEST)
emote_lists[DM_DIGEST] = raw_list
- if("im_hold")
+ if(BELLY_MODE_HOLD)
emote_lists[DM_HOLD] = raw_list
- if("im_holdabsorbed")
+ if(BELLY_MODE_HOLD_ABSORB)
emote_lists[DM_HOLD_ABSORBED] = raw_list
- if("im_absorb")
+ if(BELLY_MODE_ABSORB)
emote_lists[DM_ABSORB] = raw_list
- if("im_heal")
+ if(BELLY_MODE_HEAL)
emote_lists[DM_HEAL] = raw_list
- if("im_drain")
+ if(BELLY_MODE_DRAIN)
emote_lists[DM_DRAIN] = raw_list
- if("im_steal")
+ if(BELLY_MODE_STEAL)
emote_lists[DM_SIZE_STEAL] = raw_list
- if("im_egg")
+ if(BELLY_MODE_EGG)
emote_lists[DM_EGG] = raw_list
- if("im_shrink")
+ if(BELLY_MODE_SHRINK)
emote_lists[DM_SHRINK] = raw_list
- if("im_grow")
+ if(BELLY_MODE_GROW)
emote_lists[DM_GROW] = raw_list
- if("im_unabsorb")
+ if(BELLY_MODE_UNABSORB)
emote_lists[DM_UNABSORB] = raw_list
diff --git a/code/modules/vore/eating/belly_obj_ch.dm b/code/modules/vore/eating/belly_obj_ch.dm
deleted file mode 100644
index 182d12dd7b..0000000000
--- a/code/modules/vore/eating/belly_obj_ch.dm
+++ /dev/null
@@ -1,623 +0,0 @@
-//CHOMP vore additions.
-
-/obj/belly
- //CHOMP - liquid bellies
- var/reagentbellymode = FALSE // Belly has abilities to make liquids from digested/absorbed/drained prey and/or nutrition
- var/reagent_mode_flags = 0
-
- var/tmp/static/list/reagent_mode_flag_list= list(
- "Produce Liquids" = DM_FLAG_REAGENTSNUTRI,
- "Digestion Liquids" = DM_FLAG_REAGENTSDIGEST,
- "Absorption Liquids" = DM_FLAG_REAGENTSABSORB,
- "Draining Liquids" = DM_FLAG_REAGENTSDRAIN
- )
-
- var/show_liquids = FALSE //Moved from vorepanel_ch to be a belly var
- var/show_fullness_messages = FALSE //Moved from vorepanel_ch to be a belly var
- var/liquid_overlay = TRUE //Belly-specific liquid overlay toggle
- var/max_liquid_level = 100 //Custom max level for liquid overlay
- var/mush_overlay = FALSE //Toggle for nutrition mush overlay
- var/reagent_touches = TRUE //If reagents touch and interact with things in belly
- var/mush_color = "#664330" //Nutrition mush overlay color
- var/mush_alpha = 255 //Mush overlay transparency.
- var/max_mush = 500 //How much nutrition for full mush overlay
- var/min_mush = 0 //Manual setting for lowest mush level
- var/item_mush_val = 0 //How much solid belly contents raise mush level per item
- var/metabolism_overlay = FALSE //Extra mush layer for ingested reagents currently in metabolism.
- var/metabolism_mush_ratio = 15 //Metabolism reagent volume per unit compared to nutrition units.
- var/max_ingested = 500 //How much metabolism content for full overlay.
- var/ingested_color = "#664330" //Normal color holder for ingested layer. Blended from existing reagent colors.
- var/custom_ingested_color = null //Custom color for ingested reagent layer.
- var/custom_ingested_alpha = 255 //Custom alpha for ingested reagent layer if not using normal mush layer.
-
- var/nutri_reagent_gen = FALSE //if belly produces reagent over time using nutrition, needs to be optimized to use subsystem - Jack
- var/is_beneficial = FALSE //Sets a reagent as a beneficial one / healing reagents
- var/list/generated_reagents = list(REAGENT_ID_WATER = 1) //Any number of reagents, the associated value is how many units are generated per process()
- var/reagent_name = REAGENT_ID_WATER //What is shown when reagents are removed, doesn't need to be an actual reagent
- var/reagentid = REAGENT_ID_WATER //Selected reagent's id, for use in puddle system currently
- var/reagentcolor = "#0064C877" //Selected reagent's color, for use in puddle system currently
- var/custom_reagentcolor //Custom reagent color. Blank for normal reagent color
- var/custom_reagentalpha //Custom reagent alpha. Blank for capacity based alpha
- var/gen_cost = 1 //amount of nutrient taken from the host everytime nutrition is used to make reagents
- var/gen_amount = 1 //Does not actually influence amount produced, but is used as a way to tell the system how much total reagent it has to take into account when filling a belly
-
- var/gen_interval = 0 //Interval in seconds for generating fluids, once it reaches the value of gen_time one cycle of reagents generation will occur
- var/gen_time = 5 //Time it takes in seconds to produce one cycle of reagents, technically add 1 second to it for the tick where the fluid is produced
- var/gen_time_display = "1 hour" //The displayed time it takes from a belly to go from 0 to 100
- var/custom_max_volume = 100 //Variable for people to limit amount of liquid they can receive/produce in a belly
- var/digest_nutri_gain = 0 //variable to store temporary nutrition gain from digestion and allow a seperate proc to ease up on the wall of code
- var/reagent_transfer_verb = "injects" //verb for transfer of reagent from a vore belly
-
- var/vorefootsteps_sounds = FALSE //If this belly can make sounds when someone walks around
- var/liquid_fullness1_messages = FALSE
- var/liquid_fullness2_messages = FALSE
- var/liquid_fullness3_messages = FALSE
- var/liquid_fullness4_messages = FALSE
- var/liquid_fullness5_messages = FALSE
- var/vorespawn_blacklist = FALSE
- var/vorespawn_whitelist = list()
- var/vorespawn_absorbed = 0
-
- var/list/fullness1_messages = list(
- "%pred's %belly looks empty"
- )
- var/list/fullness2_messages = list(
- "%pred's %belly looks filled"
- )
- var/list/fullness3_messages = list(
- "%pred's %belly looks like it's full of liquid"
- )
- var/list/fullness4_messages = list(
- "%pred's %belly is quite full!"
- )
- var/list/fullness5_messages = list(
- "%pred's %belly is completely filled to it's limit!"
- )
-
- // Stuff to add in future!
- /*
- var/list/empty_message = list("You feel as though your internal reagent implant is almost empty.")
- var/list/full_message = "You feel as though your internal reagent implant is full."
-
- var/list/emote_descriptor = list("tranfers something") //In format of [x] [emote_descriptor] into [container]
- var/list/self_emote_descriptor = list("transfer") //In format of You [self_emote_descriptor] some [generated_reagent] into [container]
- */
-
- var/tmp/reagent_chosen = REAGENT_WATER // variable for switch to figure out what to set variables when a certain reagent is selected
- var/tmp/static/list/reagent_choices = list( // List of reagents people can chose, maybe one day expand so it covers criterias like dogborgs who can make meds, booze, etc - Jack
- REAGENT_WATER,
- REAGENT_MILK,
- REAGENT_CREAM,
- REAGENT_HONEY,
- REAGENT_CHERRYJELLY,
- REAGENT_STOMACID,
- REAGENT_DIETSTOMACID,
- REAGENT_CLEANER,
- REAGENT_LUBE,
- REAGENT_BIOMASS,
- REAGENT_CONCENTRATEDRADIUM,
- REAGENT_TRICORDRAZINE
- )
-
- var/tail_colouration = FALSE
- //var/marking_to_add = NULL
- //var/marking_color = NULL
- var/special_entrance_sound // Mob specific custom entry sound set by mob's init_vore when applicable
- var/slow_digestion = FALSE // Gradual corpse digestion
- var/slow_brutal = FALSE // Gradual corpse digestion: Stumpy's Special
- var/sound_volume = 100 // Volume knob.
- var/speedy_mob_processing = FALSE // Independent belly processing to utilize SSobj instead of SSbellies 3x speed.
- var/cycle_sloshed = FALSE // Has vorgan entrance made a wet slosh this cycle? Soundspam prevention for multiple items entered.
- var/egg_cycles = 0 // Process egg mode after 10 cycles.
- var/recycling = FALSE // Recycling mode.
- var/entrance_logs = TRUE // Belly-specific entry message toggle.
- var/noise_freq = 42500 // Tasty sound prefs.
- var/item_digest_logs = FALSE // Chat messages for digested items.
- var/storing_nutrition = FALSE // Storing gained nutrition as paste instead of absorbing it.
- var/belchchance = 0 // % Chance of pred belching on prey struggle
-
- var/list/belly_surrounding = list() // A list of living mobs surrounded by this belly, including inside containers, food, on mobs, etc. Exclusing inside other bellies.
-
-
-
-///////////////////// NUTRITION REAGENT PRODUCTION /////////////////
-
-/obj/belly/proc/HandleBellyReagents()
- if(show_liquids && reagentbellymode && reagent_mode_flags & DM_FLAG_REAGENTSNUTRI && reagents.total_volume < custom_max_volume && !isnewplayer(owner)) //Removed if(reagentbellymode == TRUE) since that's less optimized
- if(isrobot(owner))
- var/mob/living/silicon/robot/R = owner
- if(R.cell && R.cell.charge >= gen_cost*10 && gen_interval >= gen_time)
- GenerateBellyReagents()
- gen_interval = 0
- else
- gen_interval++
- else
- if(owner.nutrition >= gen_cost && gen_interval >= gen_time)
- GenerateBellyReagents()
- gen_interval = 0
- else
- gen_interval++
-
-/obj/belly/proc/HandleBellyReagentEffects(var/list/touchable_atoms)
- if(LAZYLEN(contents))
- if(show_liquids && reagent_touches && reagents.total_volume >= 5)
- var/affecting_amt = reagents.total_volume / max(LAZYLEN(touchable_atoms), 1)
- if(affecting_amt > 5)
- affecting_amt = 5
- if(affecting_amt >= 1)
- for(var/mob/living/L in touchable_atoms)
- if(!L.apply_reagents)
- continue
- if((L.digestable && digest_mode == DM_DIGEST))
- if(!L.permit_healbelly && is_beneficial) // Healing reagents turned off in preferences!
- continue
- if(reagents.total_volume)
- reagents.trans_to(L, affecting_amt, 1, FALSE)
- if(L.permit_healbelly && digest_mode == DM_HEAL)
- if(is_beneficial && reagents.total_volume)
- reagents.trans_to(L, affecting_amt, 1, FALSE)
- for(var/obj/item/I in touchable_atoms)
- if(is_type_in_list(I, item_digestion_blacklist))
- continue
- if(reagents.total_volume)
- reagents.trans_to(I, affecting_amt, 1, FALSE)
- SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_VORE_FX, FALSE, reagents.total_volume) // Signals vore_fx() reagents updates.
- for(var/mob/living/L in contents)
- vore_fx(L, FALSE, reagents.total_volume)
- if(owner.previewing_belly == src)
- vore_fx(owner, FALSE, reagents.total_volume)
-
-/obj/belly/proc/GenerateBellyReagents()
- if(isrobot(owner))
- var/mob/living/silicon/robot/R = owner
- if(!R.use_direct_power(gen_cost*10, 200))
- return
- else
- owner.nutrition -= gen_cost
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent])
- if(count_liquid_for_sprite)
- owner.handle_belly_update() //This is run whenever a belly's contents are changed.
- if(LAZYLEN(belly_surrounding))
- SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_VORE_FX, FALSE, reagents.total_volume) // Signals vore_fx() reagents updates.
-
-//////////////////////////// REAGENT_DIGEST ////////////////////////
-
-/obj/belly/proc/GenerateBellyReagents_digesting() //The rate isnt based on selected reagent, due to the fact that the price of the reagent is already paid by nutrient not gained.
- if(reagents.total_volume + (digest_nutri_gain * gen_amount) <= custom_max_volume) //By default a reagent with an amount of 1 should result in pred getting 100 units from a full health prey
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent] * digest_nutri_gain / gen_cost)
- else
- owner_adjust_nutrition(digest_nutri_gain * owner.get_digestion_efficiency_modifier())
- digest_nutri_gain = 0
-
-/obj/belly/proc/GenerateBellyReagents_digested()
- if(reagents.total_volume <= custom_max_volume - 25 * gen_amount)
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent] * 25)
- else
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent] / gen_amount * (custom_max_volume - reagents.total_volume))
- digest_nutri_gain = 0
-
-//////////////////////////// REAGENT_ABSORB ////////////////////////
-
-/obj/belly/proc/GenerateBellyReagents_absorbing()
- if(reagents.total_volume <= custom_max_volume - 1.5 * gen_amount) //Going for 1.5 amount of reagent per cycle, can be adjusted in future if need adjustments
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent] * 1.5)
- else
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent] / gen_amount * (custom_max_volume - reagents.total_volume))
-
-/obj/belly/proc/GenerateBellyReagents_absorbed()
- if(reagents.total_volume <= custom_max_volume - 25 * gen_amount) //Going for 25 amount of reagent for absorbing the prey, can be adjusted in future if need adjustments
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent] * 10)
- else
- for(var/reagent in generated_reagents)
- reagents.add_reagent(reagent, generated_reagents[reagent] / gen_amount * (custom_max_volume - reagents.total_volume))
-
-//////////////////////////// REAGENT_DRAIN ///////////////////////// //Currently not needed, maybe later a specific proc for drain needs to be made - Jack
-
-
-
-//////////////////////////// REAGENT SELECTION /////////////////////
-
-//This is gonna end up a long proc, but its gonna have to make do for now
-
-/obj/belly/proc/ReagentSwitch()
- switch(reagent_chosen)
- if(REAGENT_WATER)
- generated_reagents = list(REAGENT_ID_WATER = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_ID_WATER
- gen_amount = 1
- gen_cost = 1
- reagentid = REAGENT_ID_WATER
- reagentcolor = "#0064C877"
- if(REAGENT_MILK)
- generated_reagents = list(REAGENT_ID_MILK = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_ID_MILK
- gen_amount = 1
- gen_cost = 5
- reagentid = REAGENT_ID_MILK
- reagentcolor = "#DFDFDF"
- if(REAGENT_CREAM)
- generated_reagents = list(REAGENT_ID_CREAM = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_ID_CREAM
- gen_amount = 1
- gen_cost = 5
- reagentid = REAGENT_ID_CREAM
- reagentcolor = "#DFD7AF"
- if(REAGENT_HONEY)
- generated_reagents = list(REAGENT_ID_HONEY = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_ID_HONEY
- gen_amount = 1
- gen_cost = 10
- reagentid = REAGENT_ID_HONEY
- reagentcolor = "#FFFF00"
- if(REAGENT_CHERRYJELLY) //Kinda WIP, allows slime like folks something to stuff others with, should make a generic jelly in future
- generated_reagents = list(REAGENT_ID_CHERRYJELLY = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = "cherry jelly"
- gen_amount = 1
- gen_cost = 10
- reagentid = REAGENT_ID_CHERRYJELLY
- reagentcolor = "#801E28"
- if(REAGENT_STOMACID)
- generated_reagents = list(REAGENT_ID_STOMACID = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = "digestive acid"
- gen_amount = 1
- gen_cost = 1
- reagentid = REAGENT_ID_STOMACID
- reagentcolor = "#664330"
- if(REAGENT_DIETSTOMACID)
- generated_reagents = list(REAGENT_ID_DIETSTOMACID = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = "diluted digestive acid"
- gen_amount = 1
- gen_cost = 1
- reagentid = REAGENT_ID_DIETSTOMACID
- reagentcolor = "#664330"
- if(REAGENT_CLEANER)
- generated_reagents = list(REAGENT_ID_CLEANER = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_CLEANER
- gen_amount = 1
- gen_cost = 10
- reagentid = REAGENT_ID_CLEANER
- reagentcolor = "#A5F0EE"
- if(REAGENT_LUBE)
- generated_reagents = list(REAGENT_ID_LUBE = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_ID_LUBE
- gen_amount = 1
- gen_cost = 10
- reagentid = REAGENT_ID_LUBE
- reagentcolor = "#009CA8"
- if(REAGENT_BIOMASS)
- generated_reagents = list(REAGENT_ID_BIOMASS = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_ID_BIOMASS
- gen_amount = 1
- gen_cost = 10
- reagentid = REAGENT_ID_BIOMASS
- reagentcolor = "#DF9FBF"
- if(REAGENT_CONCENTRATEDRADIUM)
- generated_reagents = list(REAGENT_ID_CONCENTRATEDRADIUM = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = "concentrated radium"
- gen_amount = 1
- gen_cost = 1
- reagentid = REAGENT_ID_CONCENTRATEDRADIUM
- reagentcolor = "#C7C7C7"
- if(REAGENT_TRICORDRAZINE)
- generated_reagents = list(REAGENT_ID_TRICORDRAZINE = 1)
- if(capitalize(reagent_name) in reagent_choices)
- reagent_name = REAGENT_ID_TRICORDRAZINE
- gen_amount = 1
- gen_cost = 10
- reagentid = REAGENT_ID_TRICORDRAZINE
- reagentcolor = "#8040FF"
- is_beneficial = TRUE
-
-
-/////////////////////// FULLNESS MESSAGES //////////////////////
-
-// Get the line that should show up in Examine message if the owner of this belly is examined.
-// Returns a string which shoul be appended to the Examine output.
-// Yes I know it doesnt look great with 5 almost identical procs in a row, I didnt have a better idea at the time - Jack
-/obj/belly/proc/get_reagent_examine_msg1()
- if(fullness1_messages.len)
- var/formatted_message
- var/raw_message = pick(fullness1_messages)
-
- formatted_message = replacetext(raw_message,"%belly",lowertext(name))
- formatted_message = replacetext(formatted_message,"%pred",owner)
-
- return(span_red("[formatted_message]
"))
-
-/obj/belly/proc/get_reagent_examine_msg2()
- if(fullness1_messages.len)
- var/formatted_message
- var/raw_message = pick(fullness2_messages)
-
- formatted_message = replacetext(raw_message,"%belly",lowertext(name))
- formatted_message = replacetext(formatted_message,"%pred",owner)
-
- return(span_red("[formatted_message]
"))
-
-/obj/belly/proc/get_reagent_examine_msg3()
- if(fullness1_messages.len)
- var/formatted_message
- var/raw_message = pick(fullness3_messages)
-
- formatted_message = replacetext(raw_message,"%belly",lowertext(name))
- formatted_message = replacetext(formatted_message,"%pred",owner)
-
- return(span_red("[formatted_message]
"))
-
-/obj/belly/proc/get_reagent_examine_msg4()
- if(fullness1_messages.len)
- var/formatted_message
- var/raw_message = pick(fullness4_messages)
-
- formatted_message = replacetext(raw_message,"%belly",lowertext(name))
- formatted_message = replacetext(formatted_message,"%pred",owner)
-
- return(span_red("[formatted_message]
"))
-
-/obj/belly/proc/get_reagent_examine_msg5()
- if(fullness1_messages.len)
- var/formatted_message
- var/raw_message = pick(fullness5_messages)
-
- formatted_message = replacetext(raw_message,"%belly",lowertext(name))
- formatted_message = replacetext(formatted_message,"%pred",owner)
-
- return(span_red("[formatted_message]
"))
-
-
-// The next function gets the messages set on the belly, in human-readable format.
-// This is useful in customization boxes and such. The delimiter right now is \n\n so
-// in message boxes, this looks nice and is easily delimited.
-/obj/belly/proc/get_reagent_messages(var/type, var/delim = "\n\n")
- ASSERT(type == "full1" || type == "full2" || type == "full3" || type == "full4" || type == "full5")
- var/list/raw_messages
-
- switch(type)
- if("full1")
- raw_messages = fullness1_messages
- if("full2")
- raw_messages = fullness2_messages
- if("full3")
- raw_messages = fullness3_messages
- if("full4")
- raw_messages = fullness4_messages
- if("full5")
- raw_messages = fullness5_messages
-
- var/messages = raw_messages.Join(delim)
- return messages
-
-// The next function sets the messages on the belly, from human-readable var
-// replacement strings and linebreaks as delimiters (two \n\n by default).
-// They also sanitize the messages.
-/obj/belly/proc/set_reagent_messages(var/raw_text, var/type, var/delim = "\n\n")
- ASSERT(type == "full1" || type == "full2" || type == "full3" || type == "full4" || type == "full5")
-
- var/list/raw_list = splittext(html_encode(raw_text),delim)
- if(raw_list.len > 10)
- raw_list.Cut(11)
- log_debug("[owner] tried to set [lowertext(name)] with 11+ messages")
-
- for(var/i = 1, i <= raw_list.len, i++)
- if(length(raw_list[i]) > 160 || length(raw_list[i]) < 10) //160 is fudged value due to htmlencoding increasing the size
- raw_list.Cut(i,i)
- log_debug("[owner] tried to set [lowertext(name)] with >121 or <10 char message")
- else
- raw_list[i] = readd_quotes(raw_list[i])
- //Also fix % sign for var replacement
- raw_list[i] = replacetext(raw_list[i],"%","%")
-
- ASSERT(raw_list.len <= 10) //Sanity
-
- switch(type)
- if("full1")
- fullness1_messages = raw_list
- if("full2")
- fullness2_messages = raw_list
- if("full3")
- fullness3_messages = raw_list
- if("full4")
- fullness4_messages = raw_list
- if("full5")
- fullness5_messages = raw_list
-
- return
-
-/////////////////////////// Process Cycle Lite /////////////////////////// CHOMP PCL
-/obj/belly/proc/quick_cycle() //For manual belly cycling without straining the bellies subsystem.
- HandleBellyReagents() //CHOMP reagent belly stuff.
- // VERY early exit
- if(!contents.len)
- return
-
- var/to_update = FALSE //Did anything update worthy happen?
-
-/////////////////////////// Exit Early //////////////////////////// CHOMP PCL
- var/list/touchable_atoms = contents - items_preserved
- if(!length(touchable_atoms))
- return
-
- var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
- if(!DM)
- log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!")
- return FALSE
- if(DM.handle_atoms(src, touchable_atoms))
- updateVRPanels()
- return
-
- var/list/touchable_mobs = null
-
- var/list/hta_returns = handle_touchable_atoms(touchable_atoms)
- if(islist(hta_returns))
- if(hta_returns["touchable_mobs"])
- touchable_mobs = hta_returns["touchable_mobs"]
- if(hta_returns["to_update"])
- to_update = hta_returns["to_update"]
-
- if(!LAZYLEN(touchable_mobs))
- return
-
-///////////////////// Time to actually process mobs ///////////////////// CHOMP PCL
- for(var/target in touchable_mobs)
- var/mob/living/L = target
- if(!istype(L))
- continue
- var/list/returns = DM.process_mob(src, target)
- if(istype(returns) && returns["to_update"])
- to_update = TRUE
-
- if(to_update)
- updateVRPanels()
-/////////////////////////// CHOMP PCL END ///////////////////////////
-
-/obj/belly/proc/update_internal_overlay()
- if(LAZYLEN(belly_surrounding))
- SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_VORE_FX, TRUE) // Signals vore_fx() to listening atoms. Atoms must handle appropriate isliving() checks.
- for(var/A in belly_surrounding)
- if(isliving(A))
- vore_fx(A,1)
- if(owner.previewing_belly == src)
- if(isbelly(owner.loc))
- owner.previewing_belly = null
- return
- vore_fx(owner,1)
-
-/obj/belly/deserialize(var/list/data)
- ..()
- STOP_PROCESSING(SSbellies, src)
- STOP_PROCESSING(SSobj, src)
- if(speedy_mob_processing)
- START_PROCESSING(SSobj, src)
- else
- START_PROCESSING(SSbellies, src)
-
-/obj/item/debris_pack/digested
- name = "digested material"
- desc = "Some thoroughly digested mass of ... something. Might be useful for recycling."
- icon = 'icons/obj/recycling.dmi'
- icon_state = "matdust"
- color = "#664330"
- w_class = ITEMSIZE_SMALL
-
-/obj/belly/proc/recycle(var/obj/item/O)
- if(!recycling || (!LAZYLEN(O.matter) && !istype(O, /obj/item/ore)))
- return FALSE
- if(istype(O, /obj/item/ore))
- var/obj/item/ore/ore = O
- for(var/obj/item/ore_chunk/C in contents)
- if(istype(C))
- C.stored_ore[ore.material]++
- return TRUE
- var/obj/item/ore_chunk/newchunk = new /obj/item/ore_chunk(src)
- newchunk.stored_ore[ore.material]++
- return TRUE
- else
- var/list/modified_mats = list()
- var/trash = 1
- if(istype(O,/obj/item/trash))
- trash = 5
- if(istype(O,/obj/item/stack))
- var/obj/item/stack/S = O
- trash = S.amount
- for(var/mat in O.matter)
- modified_mats[mat] = O.matter[mat] * trash
- for(var/obj/item/debris_pack/digested/D in contents)
- if(istype(D))
- for(var/mat in modified_mats)
- D.matter[mat] += modified_mats[mat]
- if(O.w_class > D.w_class)
- D.w_class = O.w_class
- //CHOMPAdd Start
- if(O.possessed_voice && O.possessed_voice.len)
- for(var/mob/living/voice/V in O.possessed_voice)
- D.inhabit_item(V, null, V.tf_mob_holder)
- qdel(V)
- O.possessed_voice = list()
- //CHOMPAdd End
- return TRUE
- var/obj/item/debris_pack/digested/D = new /obj/item/debris_pack/digested(src, modified_mats) //CHOMPEdit
- //CHOMPAdd Start
- if(O.possessed_voice && O.possessed_voice.len)
- for(var/mob/living/voice/V in O.possessed_voice)
- D.inhabit_item(V, null, V.tf_mob_holder)
- qdel(V)
- O.possessed_voice = list()
- //CHOMPAdd End
- return TRUE
-
-/obj/belly/proc/owner_adjust_nutrition(var/amount = 0)
- if(storing_nutrition && amount > 0)
- for(var/obj/item/reagent_containers/food/rawnutrition/R in contents)
- if(istype(R))
- R.stored_nutrition += amount
- return
- var/obj/item/reagent_containers/food/rawnutrition/NR = new /obj/item/reagent_containers/food/rawnutrition(src)
- NR.stored_nutrition += amount
- return
- else
- owner.adjust_nutrition(amount)
-
-/obj/item/reagent_containers/food/rawnutrition
- name = "raw nutrition"
- desc = "A nutritious pile of converted mass ready for consumption."
- icon = 'icons/obj/recycling.dmi'
- icon_state = "matdust"
- color = "#664330"
- w_class = ITEMSIZE_SMALL
- var/stored_nutrition = 0
-
-/obj/item/reagent_containers/food/rawnutrition/standard_feed_mob(var/mob/user, var/mob/target)
- if(isliving(target))
- var/mob/living/L = target
- L.nutrition += stored_nutrition
- stored_nutrition = 0
- qdel(src)
- return
- .=..()
-
-// Updates the belly_surrounding list variable. Called in bellymodes_vr.dm
-/obj/belly/proc/update_belly_surrounding()
- if(!contents.len && !LAZYLEN(owner.soulgem?.brainmobs))
- belly_surrounding = list()
- return
- belly_surrounding = get_belly_surrounding(contents)
- if(owner.soulgem?.linked_belly == src)
- belly_surrounding += owner.soulgem.brainmobs
-
-// Recursive proc that returns all living mobs directly and indirectly inside a belly
-// This can also be called more generically to get all living mobs not in bellies within any contents list
-/obj/belly/proc/get_belly_surrounding(var/list/C)
- var/list/surrounding = list()
- for(var/thing in C)
- if(istype(thing,/mob/living))
- var/mob/living/L = thing
- surrounding.Add(L)
- surrounding.Add(get_belly_surrounding(L.contents))
- if(istype(thing,/obj/item))
- var/obj/item/I = thing
- surrounding.Add(get_belly_surrounding(I.contents))
- return surrounding
-
-/obj/belly/proc/effective_emote_hearers()
- . = list(loc)
- for(var/atom/movable/AM as anything in contents)
- //if(AM.atom_flags & ATOM_HEAR)
- . += AM
diff --git a/code/modules/vore/eating/belly_obj_liquids.dm b/code/modules/vore/eating/belly_obj_liquids.dm
new file mode 100644
index 0000000000..764ead5049
--- /dev/null
+++ b/code/modules/vore/eating/belly_obj_liquids.dm
@@ -0,0 +1,391 @@
+///////////////////// NUTRITION REAGENT PRODUCTION /////////////////
+
+/obj/belly/proc/HandleBellyReagents()
+ if(show_liquids && reagentbellymode && reagent_mode_flags & DM_FLAG_REAGENTSNUTRI && reagents.total_volume < custom_max_volume && !isnewplayer(owner)) //Removed if(reagentbellymode == TRUE) since that's less optimized
+ if(isrobot(owner))
+ var/mob/living/silicon/robot/R = owner
+ if(R.cell && R.cell.charge >= gen_cost*10 && gen_interval >= gen_time)
+ GenerateBellyReagents()
+ gen_interval = 0
+ else
+ gen_interval++
+ else
+ if(owner.nutrition >= gen_cost && gen_interval >= gen_time)
+ GenerateBellyReagents()
+ gen_interval = 0
+ else
+ gen_interval++
+
+/obj/belly/proc/HandleBellyReagentEffects(var/list/touchable_atoms)
+ if(LAZYLEN(contents))
+ if(show_liquids && reagent_touches && reagents.total_volume >= 5)
+ var/affecting_amt = reagents.total_volume / max(LAZYLEN(touchable_atoms), 1)
+ if(affecting_amt > 5)
+ affecting_amt = 5
+ if(affecting_amt >= 1)
+ for(var/mob/living/L in touchable_atoms)
+ if(!L.apply_reagents)
+ continue
+ if((L.digestable && digest_mode == DM_DIGEST))
+ if(!L.permit_healbelly && is_beneficial) // Healing reagents turned off in preferences!
+ continue
+ if(reagents.total_volume)
+ reagents.trans_to(L, affecting_amt, 1, FALSE)
+ if(L.permit_healbelly && digest_mode == DM_HEAL)
+ if(is_beneficial && reagents.total_volume)
+ reagents.trans_to(L, affecting_amt, 1, FALSE)
+ for(var/obj/item/I in touchable_atoms)
+ if(is_type_in_list(I, item_digestion_blacklist))
+ continue
+ if(reagents.total_volume)
+ reagents.trans_to(I, affecting_amt, 1, FALSE)
+ SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_VORE_FX, FALSE, reagents.total_volume) // Signals vore_fx() reagents updates.
+ for(var/mob/living/L in contents)
+ vore_fx(L, FALSE, reagents.total_volume)
+ if(owner.previewing_belly == src)
+ vore_fx(owner, FALSE, reagents.total_volume)
+
+/obj/belly/proc/GenerateBellyReagents()
+ if(isrobot(owner))
+ var/mob/living/silicon/robot/R = owner
+ if(!R.use_direct_power(gen_cost*10, 200))
+ return
+ else
+ owner.nutrition -= gen_cost
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent])
+ if(count_liquid_for_sprite)
+ owner.handle_belly_update() //This is run whenever a belly's contents are changed.
+ if(LAZYLEN(belly_surrounding))
+ SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_VORE_FX, FALSE, reagents.total_volume) // Signals vore_fx() reagents updates.
+
+//////////////////////////// REAGENT_DIGEST ////////////////////////
+
+/obj/belly/proc/GenerateBellyReagents_digesting() //The rate isnt based on selected reagent, due to the fact that the price of the reagent is already paid by nutrient not gained.
+ if(reagents.total_volume + (digest_nutri_gain * gen_amount) <= custom_max_volume) //By default a reagent with an amount of 1 should result in pred getting 100 units from a full health prey
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent] * digest_nutri_gain / gen_cost)
+ else
+ owner_adjust_nutrition(digest_nutri_gain * owner.get_digestion_efficiency_modifier())
+ digest_nutri_gain = 0
+
+/obj/belly/proc/GenerateBellyReagents_digested()
+ if(reagents.total_volume <= custom_max_volume - 25 * gen_amount)
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent] * 25)
+ else
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent] / gen_amount * (custom_max_volume - reagents.total_volume))
+ digest_nutri_gain = 0
+
+//////////////////////////// REAGENT_ABSORB ////////////////////////
+
+/obj/belly/proc/GenerateBellyReagents_absorbing()
+ if(reagents.total_volume <= custom_max_volume - 1.5 * gen_amount) //Going for 1.5 amount of reagent per cycle, can be adjusted in future if need adjustments
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent] * 1.5)
+ else
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent] / gen_amount * (custom_max_volume - reagents.total_volume))
+
+/obj/belly/proc/GenerateBellyReagents_absorbed()
+ if(reagents.total_volume <= custom_max_volume - 25 * gen_amount) //Going for 25 amount of reagent for absorbing the prey, can be adjusted in future if need adjustments
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent] * 10)
+ else
+ for(var/reagent in generated_reagents)
+ reagents.add_reagent(reagent, generated_reagents[reagent] / gen_amount * (custom_max_volume - reagents.total_volume))
+
+//////////////////////////// REAGENT_DRAIN ///////////////////////// //Currently not needed, maybe later a specific proc for drain needs to be made - Jack
+
+
+
+//////////////////////////// REAGENT SELECTION /////////////////////
+
+//This is gonna end up a long proc, but its gonna have to make do for now
+
+/obj/belly/proc/ReagentSwitch()
+ var/list/our_reagents = list()
+ for(var/entry in reagent_choices)
+ our_reagents.Add(lowertext(entry))
+ switch(reagent_chosen)
+ if(REAGENT_WATER)
+ generated_reagents = list(REAGENT_ID_WATER_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_WATER)
+ gen_amount = 1
+ gen_cost = 1
+ reagentid = REAGENT_ID_WATER_BELLY
+ reagentcolor = "#0064C877"
+ if(REAGENT_MILK)
+ generated_reagents = list(REAGENT_ID_MILK_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_MILK)
+ gen_amount = 1
+ gen_cost = 5
+ reagentid = REAGENT_ID_MILK_BELLY
+ reagentcolor = "#DFDFDF"
+ if(REAGENT_CREAM)
+ generated_reagents = list(REAGENT_ID_CREAM_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_CREAM)
+ gen_amount = 1
+ gen_cost = 5
+ reagentid = REAGENT_ID_CREAM_BELLY
+ reagentcolor = "#DFD7AF"
+ if(REAGENT_HONEY)
+ generated_reagents = list(REAGENT_ID_HONEY_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_HONEY)
+ gen_amount = 1
+ gen_cost = 10
+ reagentid = REAGENT_ID_HONEY_BELLY
+ reagentcolor = "#FFFF00"
+ if(REAGENT_CHERRYJELLY) //Kinda WIP, allows slime like folks something to stuff others with, should make a generic jelly in future
+ generated_reagents = list(REAGENT_ID_CHERRYJELLY_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_CHERRYJELLY)
+ gen_amount = 1
+ gen_cost = 10
+ reagentid = REAGENT_ID_CHERRYJELLY_BELLY
+ reagentcolor = "#801E28"
+ if(REAGENT_STOMACID)
+ generated_reagents = list(REAGENT_ID_STOMACID_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_STOMACID)
+ gen_amount = 1
+ gen_cost = 1
+ reagentid = REAGENT_ID_STOMACID_BELLY
+ reagentcolor = "#664330"
+ if(REAGENT_DIETSTOMACID)
+ generated_reagents = list(REAGENT_ID_DIETSTOMACID_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_DIETSTOMACID)
+ gen_amount = 1
+ gen_cost = 1
+ reagentid = REAGENT_ID_DIETSTOMACID_BELLY
+ reagentcolor = "#664330"
+ if(REAGENT_CLEANER)
+ generated_reagents = list(REAGENT_ID_CLEANER_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_CLEANER)
+ gen_amount = 1
+ gen_cost = 10
+ reagentid = REAGENT_ID_CLEANER_BELLY
+ reagentcolor = "#A5F0EE"
+ if(REAGENT_LUBE)
+ generated_reagents = list(REAGENT_ID_LUBE_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_LUBE)
+ gen_amount = 1
+ gen_cost = 10
+ reagentid = REAGENT_ID_LUBE_BELLY
+ reagentcolor = "#009CA8"
+ if(REAGENT_BIOMASS)
+ generated_reagents = list(REAGENT_ID_BIOMASS_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_BIOMASS)
+ gen_amount = 1
+ gen_cost = 10
+ reagentid = REAGENT_ID_BIOMASS_BELLY
+ reagentcolor = "#DF9FBF"
+ if(REAGENT_CONCENTRATEDRADIUM)
+ generated_reagents = list(REAGENT_ID_CONCENTRATEDRADIUM_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_CONCENTRATEDRADIUM)
+ gen_amount = 1
+ gen_cost = 1
+ reagentid = REAGENT_ID_CONCENTRATEDRADIUM_BELLY
+ reagentcolor = "#C7C7C7"
+ if(REAGENT_TRICORDRAZINE)
+ generated_reagents = list(REAGENT_ID_TRICORDRAZINE_BELLY = 1)
+ if(reagent_name in our_reagents)
+ reagent_name = lowertext(REAGENT_TRICORDRAZINE)
+ gen_amount = 1
+ gen_cost = 10
+ reagentid = REAGENT_ID_TRICORDRAZINE_BELLY
+ reagentcolor = "#8040FF"
+ is_beneficial = TRUE
+
+
+/////////////////////// FULLNESS MESSAGES //////////////////////
+
+// Get the line that should show up in Examine message if the owner of this belly is examined.
+// Returns a string which shoul be appended to the Examine output.
+// Yes I know it doesnt look great with 5 almost identical procs in a row, I didnt have a better idea at the time - Jack
+/obj/belly/proc/get_reagent_examine_msg1()
+ if(fullness1_messages.len)
+ var/formatted_message
+ var/raw_message = pick(fullness1_messages)
+
+ formatted_message = replacetext(raw_message,"%belly",lowertext(name))
+ formatted_message = replacetext(formatted_message,"%pred",owner)
+
+ return(span_red("[formatted_message]
"))
+
+/obj/belly/proc/get_reagent_examine_msg2()
+ if(fullness1_messages.len)
+ var/formatted_message
+ var/raw_message = pick(fullness2_messages)
+
+ formatted_message = replacetext(raw_message,"%belly",lowertext(name))
+ formatted_message = replacetext(formatted_message,"%pred",owner)
+
+ return(span_red("[formatted_message]
"))
+
+/obj/belly/proc/get_reagent_examine_msg3()
+ if(fullness1_messages.len)
+ var/formatted_message
+ var/raw_message = pick(fullness3_messages)
+
+ formatted_message = replacetext(raw_message,"%belly",lowertext(name))
+ formatted_message = replacetext(formatted_message,"%pred",owner)
+
+ return(span_red("[formatted_message]
"))
+
+/obj/belly/proc/get_reagent_examine_msg4()
+ if(fullness1_messages.len)
+ var/formatted_message
+ var/raw_message = pick(fullness4_messages)
+
+ formatted_message = replacetext(raw_message,"%belly",lowertext(name))
+ formatted_message = replacetext(formatted_message,"%pred",owner)
+
+ return(span_red("[formatted_message]
"))
+
+/obj/belly/proc/get_reagent_examine_msg5()
+ if(fullness1_messages.len)
+ var/formatted_message
+ var/raw_message = pick(fullness5_messages)
+
+ formatted_message = replacetext(raw_message,"%belly",lowertext(name))
+ formatted_message = replacetext(formatted_message,"%pred",owner)
+
+ return(span_red("[formatted_message]
"))
+
+
+// The next function gets the messages set on the belly, in human-readable format.
+// This is useful in customization boxes and such. The delimiter right now is \n\n so
+// in message boxes, this looks nice and is easily delimited.
+/obj/belly/proc/get_reagent_messages(var/type, var/delim = "\n\n")
+ ASSERT(type == "full1" || type == "full2" || type == "full3" || type == "full4" || type == "full5")
+ var/list/raw_messages
+
+ switch(type)
+ if("full1")
+ raw_messages = fullness1_messages
+ if("full2")
+ raw_messages = fullness2_messages
+ if("full3")
+ raw_messages = fullness3_messages
+ if("full4")
+ raw_messages = fullness4_messages
+ if("full5")
+ raw_messages = fullness5_messages
+
+ var/messages = raw_messages.Join(delim)
+ return messages
+
+// The next function sets the messages on the belly, from human-readable var
+// replacement strings and linebreaks as delimiters (two \n\n by default).
+// They also sanitize the messages.
+/obj/belly/proc/set_reagent_messages(var/raw_text, var/type, var/delim = "\n\n")
+ ASSERT(type == "full1" || type == "full2" || type == "full3" || type == "full4" || type == "full5")
+
+ var/list/raw_list = splittext(html_encode(raw_text),delim)
+ if(raw_list.len > 10)
+ raw_list.Cut(11)
+ log_debug("[owner] tried to set [lowertext(name)] with 11+ messages")
+
+ for(var/i = 1, i <= raw_list.len, i++)
+ if(length(raw_list[i]) > 160 || length(raw_list[i]) < 10) //160 is fudged value due to htmlencoding increasing the size
+ raw_list.Cut(i,i)
+ log_debug("[owner] tried to set [lowertext(name)] with >121 or <10 char message")
+ else
+ raw_list[i] = readd_quotes(raw_list[i])
+ //Also fix % sign for var replacement
+ raw_list[i] = replacetext(raw_list[i],"%","%")
+
+ ASSERT(raw_list.len <= 10) //Sanity
+
+ switch(type)
+ if("full1")
+ fullness1_messages = raw_list
+ if("full2")
+ fullness2_messages = raw_list
+ if("full3")
+ fullness3_messages = raw_list
+ if("full4")
+ fullness4_messages = raw_list
+ if("full5")
+ fullness5_messages = raw_list
+
+ return
+
+/////////////////////////// Process Cycle Lite /////////////////////////// CHOMP PCL
+/obj/belly/proc/quick_cycle() //For manual belly cycling without straining the bellies subsystem.
+ HandleBellyReagents() //reagent belly stuff.
+ // VERY early exit
+ if(!contents.len)
+ return
+
+ var/to_update = FALSE //Did anything update worthy happen?
+
+/////////////////////////// Exit Early //////////////////////////// CHOMP PCL
+ var/list/touchable_atoms = contents - items_preserved
+ if(!length(touchable_atoms))
+ return
+
+ var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
+ if(!DM)
+ log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!")
+ return FALSE
+ if(DM.handle_atoms(src, touchable_atoms))
+ updateVRPanels()
+ return
+
+ var/list/touchable_mobs = null
+
+ var/list/hta_returns = handle_touchable_atoms(touchable_atoms)
+ if(islist(hta_returns))
+ if(hta_returns["touchable_mobs"])
+ touchable_mobs = hta_returns["touchable_mobs"]
+ if(hta_returns["to_update"])
+ to_update = hta_returns["to_update"]
+
+ if(!LAZYLEN(touchable_mobs))
+ return
+
+///////////////////// Time to actually process mobs ///////////////////// CHOMP PCL
+ for(var/target in touchable_mobs)
+ var/mob/living/L = target
+ if(!istype(L))
+ continue
+ var/list/returns = DM.process_mob(src, target)
+ if(istype(returns) && returns["to_update"])
+ to_update = TRUE
+
+ if(to_update)
+ updateVRPanels()
+/////////////////////////// CHOMP PCL END ///////////////////////////
+
+/obj/belly/proc/update_internal_overlay()
+ if(LAZYLEN(belly_surrounding))
+ SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_VORE_FX, TRUE) // Signals vore_fx() to listening atoms. Atoms must handle appropriate isliving() checks.
+ for(var/A in belly_surrounding)
+ if(isliving(A))
+ vore_fx(A,1)
+ if(owner.previewing_belly == src)
+ if(isbelly(owner.loc))
+ owner.previewing_belly = null
+ return
+ vore_fx(owner,1)
+
+/obj/belly/deserialize(var/list/data)
+ ..()
+ STOP_PROCESSING(SSbellies, src)
+ STOP_PROCESSING(SSobj, src)
+ if(speedy_mob_processing)
+ START_PROCESSING(SSobj, src)
+ else
+ START_PROCESSING(SSbellies, src)
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index c053d27532..2777886bf5 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -19,7 +19,7 @@
var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human
var/nonhuman_prey_swallow_time = 30 // Time in deciseconds to swallow anything else
var/nutrition_percent = 100 // Nutritional percentage per tick in digestion mode
- var/digest_max = 36 // CHOMPEdit; maximum total damage across all types
+ var/digest_max = 36 // maximum total damage across all types
var/digest_brute = 0.5 // Brute damage per tick in digestion mode
var/digest_burn = 0.5 // Burn damage per tick in digestion mode
var/digest_oxy = 0 // Oxy damage per tick in digestion mode
@@ -53,20 +53,20 @@
var/obj/item/storage/vore_egg/ownegg // Is this belly creating an egg?
var/egg_type = "Egg" // Default egg type and path.
var/egg_path = /obj/item/storage/vore_egg
- var/egg_name = null // CHOMPAdd. Custom egg name
- var/egg_size = 0 // CHOMPAdd. Custom egg size
+ var/egg_name = null // Custom egg name
+ var/egg_size = 0 // Custom egg size
var/list/list/emote_lists = list() // Idle emotes that happen on their own, depending on the bellymode. Contains lists of strings indexed by bellymode
var/emote_time = 60 // How long between stomach emotes at prey (in seconds)
var/emote_active = TRUE // Are we even giving emotes out at all or not?
var/next_emote = 0 // When we're supposed to print our next emote, as a world.time
var/selective_preference = DM_DIGEST // Which type of selective bellymode do we default to?
var/eating_privacy_local = "default" //Overrides eating_privacy_global if not "default". Determines if attempt/success messages are subtle/loud
- var/is_feedable = TRUE // If this belly shows up in belly selections for others. //CHOMPAdd
+ var/is_feedable = TRUE // If this belly shows up in belly selections for others.
var/silicon_belly_overlay_preference = "Sleeper" //Selects between placing belly overlay in sleeper or normal vore mode. Exclusive
var/belly_mob_mult = 1 //Multiplier for how filling mob types are in borg bellies
var/belly_item_mult = 1 //Multiplier for how filling items are in borg borg bellies. Items are also weighted on item size
var/belly_overall_mult = 1 //Multiplier applied ontop of any other specific multipliers
- var/private_struggle = FALSE // If struggles are made public or not //CHOMPAdd
+ var/private_struggle = FALSE // If struggles are made public or not
var/vore_sprite_flags = DM_FLAG_VORESPRITE_BELLY
@@ -88,6 +88,7 @@
var/size_factor_for_sprite = 1
var/belly_sprite_to_affect = "stomach"
var/datum/sprite_accessory/tail/tail_to_change_to = FALSE
+ var/tail_colouration = FALSE
var/tail_extra_overlay = FALSE
var/tail_extra_overlay2 = FALSE
var/undergarment_chosen = "Underwear, bottom"
@@ -98,23 +99,23 @@
var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
var/autotransferwait = 10 // Time between trying to transfer.
var/autotransferlocation // Place to send them
- var/autotransferextralocation = list() // List of extra places this could go //CHOMPAdd
- var/autotransfer_whitelist = 0 // Flags for what can be transferred to the primary location //CHOMPAdd
- var/autotransfer_blacklist = 2 // Flags for what can not be transferred to the primary location, defaults to Absorbed //CHOMPAdd
- var/autotransfer_whitelist_items = 0 // Flags for what can be transferred to the primary location //CHOMPAdd
- var/autotransfer_blacklist_items = 0 // Flags for what can not be transferred to the primary location //CHOMPAdd
- var/autotransferchance_secondary = 0 // % Chance of prey being autotransferred to secondary transfer location //CHOMPAdd
- var/autotransferlocation_secondary // Second place to send them //CHOMPAdd
- var/autotransferextralocation_secondary = list() // List of extra places the secondary transfer could go //CHOMPAdd
- var/autotransfer_secondary_whitelist = 0// Flags for what can be transferred to the secondary location //CHOMPAdd
- var/autotransfer_secondary_blacklist = 2// Flags for what can not be transferred to the secondary location, defaults to Absorbed //CHOMPAdd
- var/autotransfer_secondary_whitelist_items = 0// Flags for what can be transferred to the secondary location //CHOMPAdd
- var/autotransfer_secondary_blacklist_items = 0// Flags for what can not be transferred to the secondary location //CHOMPAdd
+ var/autotransferextralocation = list() // List of extra places this could go
+ var/autotransfer_whitelist = 0 // Flags for what can be transferred to the primary location
+ var/autotransfer_blacklist = 2 // Flags for what can not be transferred to the primary location, defaults to Absorbed
+ var/autotransfer_whitelist_items = 0 // Flags for what can be transferred to the primary location
+ var/autotransfer_blacklist_items = 0 // Flags for what can not be transferred to the primary location
+ var/autotransferchance_secondary = 0 // % Chance of prey being autotransferred to secondary transfer location
+ var/autotransferlocation_secondary // Second place to send them
+ var/autotransferextralocation_secondary = list() // List of extra places the secondary transfer could go
+ var/autotransfer_secondary_whitelist = 0// Flags for what can be transferred to the secondary location
+ var/autotransfer_secondary_blacklist = 2// Flags for what can not be transferred to the secondary location, defaults to Absorbed
+ var/autotransfer_secondary_whitelist_items = 0// Flags for what can be transferred to the secondary location
+ var/autotransfer_secondary_blacklist_items = 0// Flags for what can not be transferred to the secondary location
var/autotransfer_enabled = FALSE // Player toggle
- var/autotransfer_min_amount = 0 // Minimum amount of things to pass at once. //CHOMPAdd
- var/autotransfer_max_amount = 0 // Maximum amount of things to pass at once. //CHOMPAdd
- var/tmp/list/autotransfer_queue = list()// Reserve for above things. //CHOMPAdd
- //Auto-transfer flags for whitelist //CHOMPAdd
+ var/autotransfer_min_amount = 0 // Minimum amount of things to pass at once.
+ var/autotransfer_max_amount = 0 // Maximum amount of things to pass at once.
+ var/tmp/list/autotransfer_queue = list()// Reserve for above things.
+ //Auto-transfer flags for whitelist
var/tmp/static/list/autotransfer_flags_list = list("Creatures" = AT_FLAG_CREATURES, "Absorbed" = AT_FLAG_ABSORBED, "Carbon" = AT_FLAG_CARBON, "Silicon" = AT_FLAG_SILICON, "Mobs" = AT_FLAG_MOBS, "Animals" = AT_FLAG_ANIMALS, "Mice" = AT_FLAG_MICE, "Dead" = AT_FLAG_DEAD, "Digestable Creatures" = AT_FLAG_CANDIGEST, "Absorbable Creatures" = AT_FLAG_CANABSORB, "Full Health" = AT_FLAG_HEALTHY)
var/tmp/static/list/autotransfer_flags_list_items = list("Items" = AT_FLAG_ITEMS, "Trash" = AT_FLAG_TRASH, "Eggs" = AT_FLAG_EGGS, "Remains" = AT_FLAG_REMAINS, "Indigestible Items" = AT_FLAG_INDIGESTIBLE, "Recyclable Items" = AT_FLAG_RECYCLABLE, "Ores" = AT_FLAG_ORES, "Clothes and Bags" = AT_FLAG_CLOTHES, "Food" = AT_FLAG_FOOD)
@@ -122,9 +123,9 @@
//Actual full digest modes
var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_SELECT,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG)
//Digest mode addon flags
- var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY, "Spare Prosthetics" = DM_FLAG_SPARELIMB, "Slow Body Digestion" = DM_FLAG_SLOWBODY, "Muffle Items" = DM_FLAG_MUFFLEITEMS, "TURBO MODE" = DM_FLAG_TURBOMODE) //CHOMPEdit
+ var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY, "Spare Prosthetics" = DM_FLAG_SPARELIMB, "Slow Body Digestion" = DM_FLAG_SLOWBODY, "Muffle Items" = DM_FLAG_MUFFLEITEMS, "TURBO MODE" = DM_FLAG_TURBOMODE)
//Item related modes
- var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST,IM_DIGEST_PARALLEL) //CHOMPEdit
+ var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST,IM_DIGEST_PARALLEL)
//drain modes
var/tmp/static/list/drainmodes = list(DR_NORMAL,DR_SLEEP,DR_FAKE,DR_WEIGHT)
@@ -139,22 +140,125 @@
var/tmp/digested_prey_count = 0 // Amount of prey that have been digested
var/item_digest_mode = IM_DIGEST_FOOD // Current item-related mode from item_digest_modes
- var/contaminates = TRUE // Whether the belly will contaminate stuff // CHOMPedit: reset to true like it always was
+ var/contaminates = TRUE // Whether the belly will contaminate stuff
var/contamination_flavor = "Generic" // Determines descriptions of contaminated items
var/contamination_color = "green" // Color of contamination overlay
// Lets you do a fullscreen overlay. Set to an icon_state string.
var/belly_fullscreen = ""
var/disable_hud = FALSE
- var/colorization_enabled = TRUE //CHOMPedit
+ var/colorization_enabled = TRUE
var/belly_fullscreen_color = "#823232"
- //var/belly_fullscreen_color_secondary = "#428242" //Chomp Disable, using our implementation
- //var/belly_fullscreen_color_trinary = "#f0f0f0" //Chomp Disable, using our implementation
- var/belly_fullscreen_color2 = "#FFFFFF" //ChompEDIT
- var/belly_fullscreen_color3 = "#823232" //ChompEDIT
- var/belly_fullscreen_color4 = "#FFFFFF" //ChompEDIT
- var/belly_fullscreen_alpha = 255 //ChompEDIT
+ var/belly_fullscreen_color2 = "#FFFFFF"
+ var/belly_fullscreen_color3 = "#823232"
+ var/belly_fullscreen_color4 = "#FFFFFF"
+ var/belly_fullscreen_alpha = 255
+ // Liquid belly vars
+ var/reagentbellymode = FALSE // Belly has abilities to make liquids from digested/absorbed/drained prey and/or nutrition
+ var/reagent_mode_flags = 0
+
+ var/tmp/static/list/reagent_mode_flag_list= list(
+ "Produce Liquids" = DM_FLAG_REAGENTSNUTRI,
+ "Digestion Liquids" = DM_FLAG_REAGENTSDIGEST,
+ "Absorption Liquids" = DM_FLAG_REAGENTSABSORB,
+ "Draining Liquids" = DM_FLAG_REAGENTSDRAIN
+ )
+
+ var/show_liquids = FALSE //Moved from vorepanel_ch to be a belly var
+ var/show_fullness_messages = FALSE //Moved from vorepanel_ch to be a belly var
+ var/liquid_overlay = TRUE //Belly-specific liquid overlay toggle
+ var/max_liquid_level = 100 //Custom max level for liquid overlay
+ var/mush_overlay = FALSE //Toggle for nutrition mush overlay
+ var/reagent_touches = TRUE //If reagents touch and interact with things in belly
+ var/mush_color = "#664330" //Nutrition mush overlay color
+ var/mush_alpha = 255 //Mush overlay transparency.
+ var/max_mush = 500 //How much nutrition for full mush overlay
+ var/min_mush = 0 //Manual setting for lowest mush level
+ var/item_mush_val = 0 //How much solid belly contents raise mush level per item
+ var/metabolism_overlay = FALSE //Extra mush layer for ingested reagents currently in metabolism.
+ var/metabolism_mush_ratio = 15 //Metabolism reagent volume per unit compared to nutrition units.
+ var/max_ingested = 500 //How much metabolism content for full overlay.
+ var/ingested_color = "#664330" //Normal color holder for ingested layer. Blended from existing reagent colors.
+ var/custom_ingested_color = null //Custom color for ingested reagent layer.
+ var/custom_ingested_alpha = 255 //Custom alpha for ingested reagent layer if not using normal mush layer.
+
+ var/nutri_reagent_gen = FALSE //if belly produces reagent over time using nutrition, needs to be optimized to use subsystem - Jack
+ var/is_beneficial = FALSE //Sets a reagent as a beneficial one / healing reagents
+ var/list/generated_reagents = list(REAGENT_ID_WATER = 1) //Any number of reagents, the associated value is how many units are generated per process()
+ var/reagent_name = REAGENT_ID_WATER //What is shown when reagents are removed, doesn't need to be an actual reagent
+ var/reagentid = REAGENT_ID_WATER //Selected reagent's id, for use in puddle system currently
+ var/reagentcolor = "#0064C877" //Selected reagent's color, for use in puddle system currently
+ var/custom_reagentcolor //Custom reagent color. Blank for normal reagent color
+ var/custom_reagentalpha //Custom reagent alpha. Blank for capacity based alpha
+ var/gen_cost = 1 //amount of nutrient taken from the host everytime nutrition is used to make reagents
+ var/gen_amount = 1 //Does not actually influence amount produced, but is used as a way to tell the system how much total reagent it has to take into account when filling a belly
+
+ var/gen_interval = 0 //Interval in seconds for generating fluids, once it reaches the value of gen_time one cycle of reagents generation will occur
+ var/gen_time = 5 //Time it takes in seconds to produce one cycle of reagents, technically add 1 second to it for the tick where the fluid is produced
+ var/gen_time_display = "1 hour" //The displayed time it takes from a belly to go from 0 to 100
+ var/custom_max_volume = 100 //Variable for people to limit amount of liquid they can receive/produce in a belly
+ var/digest_nutri_gain = 0 //variable to store temporary nutrition gain from digestion and allow a seperate proc to ease up on the wall of code
+ var/reagent_transfer_verb = "injects" //verb for transfer of reagent from a vore belly
+
+ var/vorefootsteps_sounds = FALSE //If this belly can make sounds when someone walks around
+ var/liquid_fullness1_messages = FALSE
+ var/liquid_fullness2_messages = FALSE
+ var/liquid_fullness3_messages = FALSE
+ var/liquid_fullness4_messages = FALSE
+ var/liquid_fullness5_messages = FALSE
+ var/vorespawn_blacklist = FALSE
+ var/vorespawn_whitelist = list()
+ var/vorespawn_absorbed = 0
+
+ var/list/fullness1_messages = list(
+ "%pred's %belly looks empty"
+ )
+ var/list/fullness2_messages = list(
+ "%pred's %belly looks filled"
+ )
+ var/list/fullness3_messages = list(
+ "%pred's %belly looks like it's full of liquid"
+ )
+ var/list/fullness4_messages = list(
+ "%pred's %belly is quite full!"
+ )
+ var/list/fullness5_messages = list(
+ "%pred's %belly is completely filled to it's limit!"
+ )
+
+ var/tmp/reagent_chosen = REAGENT_WATER // variable for switch to figure out what to set variables when a certain reagent is selected
+ var/tmp/static/list/reagent_choices = list( // List of reagents people can chose, maybe one day expand so it covers criterias like dogborgs who can make meds, booze, etc - Jack
+ REAGENT_WATER,
+ REAGENT_MILK,
+ REAGENT_CREAM,
+ REAGENT_HONEY,
+ REAGENT_CHERRYJELLY,
+ REAGENT_STOMACID,
+ REAGENT_DIETSTOMACID,
+ REAGENT_CLEANER,
+ REAGENT_LUBE,
+ REAGENT_BIOMASS,
+ REAGENT_CONCENTRATEDRADIUM,
+ REAGENT_TRICORDRAZINE
+ )
+
+ // Special var section
+ var/special_entrance_sound // Mob specific custom entry sound set by mob's init_vore when applicable
+ var/slow_digestion = FALSE // Gradual corpse digestion
+ var/slow_brutal = FALSE // Gradual corpse digestion: Stumpy's Special
+ var/sound_volume = 100 // Volume knob.
+ var/speedy_mob_processing = FALSE // Independent belly processing to utilize SSobj instead of SSbellies 3x speed.
+ var/cycle_sloshed = FALSE // Has vorgan entrance made a wet slosh this cycle? Soundspam prevention for multiple items entered.
+ var/egg_cycles = 0 // Process egg mode after 10 cycles.
+ var/recycling = FALSE // Recycling mode.
+ var/entrance_logs = TRUE // Belly-specific entry message toggle.
+ var/noise_freq = 42500 // Tasty sound prefs.
+ var/item_digest_logs = FALSE // Chat messages for digested items.
+ var/storing_nutrition = FALSE // Storing gained nutrition as paste instead of absorbing it.
+ var/belchchance = 0 // % Chance of pred belching on prey struggle
+
+ var/list/belly_surrounding = list() // A list of living mobs surrounded by this belly, including inside containers, food, on mobs, etc. Exclusing inside other bellies.
//For serialization, keep this updated, required for bellies to save correctly.
/obj/belly/vars_to_save()
@@ -187,7 +291,7 @@
"transferchance_secondary",
"transferlocation",
"transferlocation_secondary",
- "belchchance", //CHOMPAdd
+ "belchchance",
"bulge_size",
"display_absorbed_examine",
"shrink_grow_size",
@@ -216,10 +320,10 @@
"primary_transfer_messages_prey",
"secondary_transfer_messages_owner",
"secondary_transfer_messages_prey",
- "primary_autotransfer_messages_owner", //CHOMPAdd
- "primary_autotransfer_messages_prey", //CHOMPAdd
- "secondary_autotransfer_messages_owner", //CHOMPAdd
- "secondary_autotransfer_messages_prey", //CHOMPAdd
+ "primary_autotransfer_messages_owner",
+ "primary_autotransfer_messages_prey",
+ "secondary_autotransfer_messages_owner",
+ "secondary_autotransfer_messages_prey",
"digest_chance_messages_owner",
"digest_chance_messages_prey",
"absorb_chance_messages_owner",
@@ -247,10 +351,8 @@
"wet_loop",
"belly_fullscreen",
"disable_hud",
- "reagent_mode_flags", //CHOMP start of variables from CHOMP
+ "reagent_mode_flags",
"belly_fullscreen_color",
- //"belly_fullscreen_color_secondary", //Chomp Disable, using our implementation
- //"belly_fullscreen_color_trinary", //Chomp Disable, using our implementation
"belly_fullscreen_color2",
"belly_fullscreen_color3",
"belly_fullscreen_color4",
@@ -337,7 +439,7 @@
"private_struggle",
"item_digest_logs",
"show_fullness_messages",
- "digest_max", //CHOMP end of variables from CHOMP
+ "digest_max",
"egg_type",
"save_digest_mode",
"eating_privacy_local",
@@ -372,12 +474,12 @@
owner = loc
owner.vore_organs |= src
if(isliving(loc))
- if(mode_flags & DM_FLAG_TURBOMODE) //CHOMPEdit Start
+ if(mode_flags & DM_FLAG_TURBOMODE)
START_PROCESSING(SSobj, src)
else
START_PROCESSING(SSbellies, src)
- create_reagents(300) //CHOMP So we can have some liquids in bellies
+ create_reagents(300) // So we can have some liquids in bellies
flags |= NOREACT // We dont want bellies to start bubling nonstop due to people mixing when transfering and making different reagents
/obj/belly/Destroy()
@@ -393,16 +495,15 @@
// Called whenever an atom enters this belly
/obj/belly/Entered(atom/movable/thing, atom/OldLoc)
- . = ..() //CHOMPEdit Start
+ . = ..()
if(!owner)
thing.forceMove(get_turf(src))
return
thing.enter_belly(src) // Atom movable proc, does nothing by default. Overridden in children for special behavior.
if(owner && istype(owner.loc,/turf/simulated) && !cycle_sloshed && reagents.total_volume > 0)
- // var/turf/simulated/T = owner.loc // CHOMPEdit
- var/S = pick(GLOB.slosh) //ChompEDIT
+ var/S = pick(GLOB.slosh)
if(S)
- playsound(owner.loc, S, sound_volume * (reagents.total_volume / 100), FALSE, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises) //CHOMPEdit
+ playsound(owner.loc, S, sound_volume * (reagents.total_volume / 100), FALSE, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises)
cycle_sloshed = TRUE
thing.belly_cycles = 0 //reset cycle count
if(istype(thing, /mob/observer)) //Ports CHOMPStation PR#3072
@@ -414,10 +515,9 @@
return //Someone dropping something (or being stripdigested)
if(istype(OldLoc, /mob/observer) || istype(OldLoc, /obj/item/mmi)) // Prevent reforming causing a lot of log spam/sounds
return //Someone getting reformed most likely (And if not, uh... shouldn't happen anyways?)
- //CHOMPEdit end
//Generic entered message
- if(!owner.mute_entry && entrance_logs) //CHOMPEdit
+ if(!owner.mute_entry && entrance_logs)
if(!istype(thing, /mob/observer)) //Don't have ghosts announce they're reentering the belly on death
to_chat(owner,span_vnotice("[thing] slides into your [lowertext(name)]."))
@@ -428,27 +528,27 @@
soundfile = classic_vore_sounds[vore_sound]
else
soundfile = fancy_vore_sounds[vore_sound]
- if(special_entrance_sound) //CHOMPEdit: Custom sound set by mob's init_vore or ingame varedits.
+ if(special_entrance_sound) // Custom sound set by mob's init_vore or ingame varedits.
soundfile = special_entrance_sound
if(soundfile)
- playsound(src, soundfile, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
+ playsound(src, soundfile, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
recent_sound = TRUE
- if(reagents.total_volume >= 5 && !isliving(thing) && (item_digest_mode == IM_DIGEST || item_digest_mode == IM_DIGEST_PARALLEL)) //CHOMPAdd
- reagents.trans_to(thing, reagents.total_volume * 0.1, 1 / max(LAZYLEN(contents), 1), FALSE) //CHOMPAdd
+ if(reagents.total_volume >= 5 && !isliving(thing) && (item_digest_mode == IM_DIGEST || item_digest_mode == IM_DIGEST_PARALLEL))
+ reagents.trans_to(thing, reagents.total_volume * 0.1, 1 / max(LAZYLEN(contents), 1), FALSE)
//Messages if it's a mob
- //CHOMPEdit Start - Include indirect viewers in seeing vorefx
+ // Include indirect viewers in seeing vorefx
var/list/startfx = list()
if(isliving(thing))
var/mob/living/L = thing
startfx.Add(L)
startfx.Add(get_belly_surrounding(L.contents))
- owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
+ owner.handle_belly_update() // This is run whenever a belly's contents are changed.
if(istype(thing,/obj/item))
var/obj/item/I = thing
startfx.Add(get_belly_surrounding(I.contents))
- for(var/mob/living/M in startfx) //CHOMPEdit End of indirect vorefx changes
+ for(var/mob/living/M in startfx) // End of indirect vorefx changes
M.updateVRPanel()
var/raw_desc //Let's use this to avoid needing to write the reformat code twice
if(absorbed_desc && M.absorbed)
@@ -462,74 +562,57 @@
to_chat(M, span_vnotice(span_bold("[belly_format_string(raw_desc, M)]")))
var/taste
- if(can_taste && M.loc == src && (taste = M.get_taste_message(FALSE))) //CHOMPEdit - Prevent indirect tasting
+ if(can_taste && M.loc == src && (taste = M.get_taste_message(FALSE))) // Prevent indirect tasting
to_chat(owner, span_vnotice("[M] tastes of [taste]."))
- vore_fx(M, TRUE) //CHOMPEdit: update belleh
- if(owner.previewing_belly == src) //CHOMPEdit
- vore_fx(owner, TRUE) //CHOMPEdit: update belleh
+ vore_fx(M, TRUE)
+ if(owner.previewing_belly == src)
+ vore_fx(owner, TRUE)
//Stop AI processing in bellies
if(M.ai_holder)
M.ai_holder.go_sleep()
- if(reagents.total_volume >= 5) //CHOMPEdit Start
+ if(reagents.total_volume >= 5)
if(digest_mode == DM_DIGEST && M.digestable)
reagents.trans_to(M, reagents.total_volume * 0.1, 1 / max(LAZYLEN(contents), 1), FALSE)
to_chat(M, span_vwarning(span_bold("You splash into a pool of [reagent_name]!")))
- if(!isliving(thing) && count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things
- owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
- //if(istype(thing, /obj/item/capture_crystal)) //CHOMPEdit start: Capture crystal occupant gets to see belly text too. Moved to modular_chomp capture_crystal.dm.
- //var/obj/item/capture_crystal/CC = thing
- //if(CC.bound_mob && desc)
- //if(CC.bound_mob in CC.contents)
- //var/formatted_desc
- //formatted_desc = replacetext(desc, "%belly", lowertext(name)) //replace with this belly's name
- //formatted_desc = replacetext(formatted_desc, "%pred", owner) //replace with this belly's owner
- //formatted_desc = replacetext(formatted_desc, "%prey", thing) //replace with whatever mob entered into this belly
- //to_chat(CC.bound_mob, span_notice("[formatted_desc]")) //CHOMPedit end
-
- /*/ Intended for simple mobs //CHMOPEdit: Counting belly cycles now.
- if((!owner.client || autotransfer_enabled) && autotransferlocation && autotransferchance > 0)
- addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/belly, check_autotransfer), thing, autotransferlocation), autotransferwait)
- */
+ if(!isliving(thing) && count_items_for_sprite) // If this is enabled also update fullness for non-living things
+ owner.handle_belly_update() // This is run whenever a belly's contents are changed.
// Called whenever an atom leaves this belly
/obj/belly/Exited(atom/movable/thing, atom/OldLoc)
. = ..()
if(QDELETED(owner))
return
- thing.exit_belly(src) // CHOMPEdit - atom movable proc, does nothing by default. Overridden in children for special behavior.
- if(isbelly(thing.loc)) //CHOMPEdit Start
+ thing.exit_belly(src) // atom movable proc, does nothing by default. Overridden in children for special behavior.
+ if(isbelly(thing.loc))
var/obj/belly/NB = thing.loc
if(count_items_for_sprite && !NB.count_items_for_sprite)
owner.handle_belly_update()
- return //CHOMPEdit End
+ return
- //CHOMPEdit Start - Remove vorefx from all those indirectly viewing as well
+ // Remove vorefx from all those indirectly viewing as well
var/list/endfx = list()
if(isliving(thing))
var/mob/living/L = thing
endfx.Add(L)
endfx.Add(get_belly_surrounding(L.contents))
- owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
+ owner.handle_belly_update() // This is run whenever a belly's contents are changed.
if(istype(thing,/obj/item))
var/obj/item/I = thing
endfx.Add(get_belly_surrounding(I.contents))
if(!isbelly(thing.loc))
- for(var/mob/living/L in endfx) //CHOMPEdit End
+ for(var/mob/living/L in endfx)
if(L.surrounding_belly()) continue
L.clear_fullscreen("belly")
- //L.clear_fullscreen("belly2") // CHOMP Disable - using our implementation, not upstream's
- //L.clear_fullscreen("belly3") // CHOMP Disable - using our implementation, not upstream's
- //L.clear_fullscreen("belly4") // CHOMP Disable - using our implementation, not upstream's
if(L.hud_used)
if(!L.hud_used.hud_shown)
L.toggle_hud_vis()
if((L.stat != DEAD) && L.ai_holder)
L.ai_holder.go_wake()
- L.stop_sound_channel(CHANNEL_PREYLOOP) //CHOMPAdd - This was on release_specific_contents proc, why is it not here on belly exit?
- //CHOMPEdit End of indirect vorefx changes
- if(isitem(thing) && !isbelly(thing.loc)) //CHOMPEdit: Digest stage effects. Don't bother adding overlays to stuff that won't make it back out.
- if(count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things
- owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
+ L.stop_sound_channel(CHANNEL_PREYLOOP) // This was on release_specific_contents proc, why is it not here on belly exit?
+ // End of indirect vorefx changes
+ if(isitem(thing) && !isbelly(thing.loc)) // Digest stage effects. Don't bother adding overlays to stuff that won't make it back out.
+ if(count_items_for_sprite) // If this is enabled also update fullness for non-living things
+ owner.handle_belly_update() // This is run whenever a belly's contents are changed.
var/obj/item/I = thing
if(I.gurgled)
I.cut_overlay(gurgled_overlays[I.gurgled_color]) //No double-overlay for worn items.
@@ -541,54 +624,30 @@
temp.filters += filter(type = "alpha", icon = icon(I.icon, I.icon_state))
I.d_stage_overlay = temp
for(var/count in I.d_mult to 1 step 0.25)
- I.add_overlay(I.d_stage_overlay, TRUE) //CHOMPEdit end
+ I.add_overlay(I.d_stage_overlay, TRUE)
-// CHOMPedit: SEND_SIGNAL(COMSIG_BELLY_UPDATE_VORE_FX) is sometimes used when calling vore_fx() to send belly visuals
+// SEND_SIGNAL(COMSIG_BELLY_UPDATE_VORE_FX) is sometimes used when calling vore_fx() to send belly visuals
// to certain non-belly atoms. Not called here as vore_fx() is usually only called if a mob is in the belly.
// Don't forget it if you need to rework vore_fx().
-/obj/belly/proc/vore_fx(mob/living/L, var/update, var/severity = 0) //CHOMPEdit
+/obj/belly/proc/vore_fx(mob/living/L, var/update, var/severity = 0)
if(!istype(L))
return
if(!L.client)
return
- if(L.previewing_belly && L.previewing_belly != src) //CHOMPEdit Start
+ if(L.previewing_belly && L.previewing_belly != src)
return
if(L.previewing_belly == src && L.vore_selected != src)
L.previewing_belly = null
return
if(!L.show_vore_fx)
L.clear_fullscreen("belly")
- L.previewing_belly = null //CHOMPEdit End
+ L.previewing_belly = null
return
if(update)
L.clear_fullscreen("belly")
if(belly_fullscreen)
if(colorization_enabled)
- /* //Chomp Disable - disable upstream's solution, use ours
- var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/colorized)
- F.icon_state = belly_fullscreen
- F.color = belly_fullscreen_color
- if("[belly_fullscreen]_l1" in icon_states('icons/mob/screen_full_colorized_vore_overlays.dmi'))
- var/obj/screen/fullscreen/F2 = L.overlay_fullscreen("belly2", /obj/screen/fullscreen/belly/colorized/overlay)
- F2.icon_state = "[belly_fullscreen]_l1"
- F2.color = belly_fullscreen_color_secondary
- else
- L.clear_fullscreen("belly2")
- if("[belly_fullscreen]_l2" in icon_states('icons/mob/screen_full_colorized_vore_overlays.dmi'))
- var/obj/screen/fullscreen/F3 = L.overlay_fullscreen("belly3", /obj/screen/fullscreen/belly/colorized/overlay)
- F3.icon_state = "[belly_fullscreen]_l2"
- F3.color = belly_fullscreen_color_trinary
- else
- L.clear_fullscreen("belly3")
- if("[belly_fullscreen]_nc" in icon_states('icons/mob/screen_full_colorized_vore_overlays.dmi'))
- var/obj/screen/fullscreen/F4 = L.overlay_fullscreen("belly4", /obj/screen/fullscreen/belly/colorized/overlay)
- F4.icon_state = "[belly_fullscreen]_nc"
- else
- L.clear_fullscreen("belly4")
- */ //Chomp Disable END
-
- // Chomp EDIT Begin
- var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly, severity) //CHOMPEdit Start: preserving save data
+ var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly, severity) // preserving save data
var/datum/belly_overlays/lookup_belly_path = text2path("/datum/belly_overlays/[lowertext(belly_fullscreen)]")
if(!lookup_belly_path)
CRASH("Icon datum was not defined for [belly_fullscreen]")
@@ -622,13 +681,13 @@
extra_mush_color = ingested.get_color()
extra_mush = ingested.total_volume * metabolism_mush_ratio
if(!mush_overlay)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "mush")
I.color = extra_mush_color
I.alpha = custom_ingested_alpha
I.pixel_y = -450 + ((450 / max(max_ingested, 1)) * min(max_ingested, ingested.total_volume))
F.add_overlay(I)
if(show_liquids && L.liquidbelly_visuals && mush_overlay && (owner.nutrition > 0 || max_mush == 0 || min_mush > 0 || (LAZYLEN(contents) * item_mush_val) > 0))
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "mush")
I.color = mush_color
I.alpha = mush_alpha
var/total_mush_content = owner.nutrition + LAZYLEN(contents) * item_mush_val + extra_mush
@@ -638,16 +697,16 @@
var/stored_y = I.pixel_y
F.add_overlay(I)
if(metabolism_overlay && metabolism_mush_ratio > 0 && extra_mush > 0)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "mush")
I.color = extra_mush_color
I.alpha = min(mush_alpha, (extra_mush / max(total_mush_content, 1)) * mush_alpha)
I.pixel_y = stored_y
F.add_overlay(I)
if(show_liquids && L.liquidbelly_visuals && liquid_overlay && reagents.total_volume)
if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "calm")
else
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
if(custom_reagentcolor)
I.color = custom_reagentcolor
else
@@ -661,7 +720,7 @@
F.update_for_view(L.client.view)
else
var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed, severity) //preserving save data
- F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[belly_fullscreen].dmi")
+ F.icon = 'icons/mob/screen_full_vore.dmi'
F.cut_overlays()
F.add_overlay(image(F.icon, belly_fullscreen))
F.add_overlay(image(F.icon, belly_fullscreen+"-2"))
@@ -680,13 +739,13 @@
extra_mush_color = ingested.get_color()
extra_mush = ingested.total_volume * metabolism_mush_ratio
if(!mush_overlay)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "mush")
I.color = extra_mush_color
I.alpha = custom_ingested_alpha
I.pixel_y = -450 + (450 / max(max_ingested, 1) * max(min(max_ingested, ingested.total_volume), 1))
F.add_overlay(I)
if(show_liquids && L.liquidbelly_visuals && mush_overlay && (owner.nutrition > 0 || max_mush == 0 || min_mush > 0 || (LAZYLEN(contents) * item_mush_val) > 0))
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "mush")
I.color = mush_color
I.alpha = mush_alpha
var/total_mush_content = owner.nutrition + LAZYLEN(contents) * item_mush_val + extra_mush
@@ -696,16 +755,16 @@
var/stored_y = I.pixel_y
F.add_overlay(I)
if(metabolism_overlay && metabolism_mush_ratio > 0 && extra_mush > 0)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "mush")
I.color = extra_mush_color
I.alpha = min(mush_alpha, (extra_mush / max(total_mush_content, 1)) * mush_alpha)
I.pixel_y = stored_y
F.add_overlay(I)
if(show_liquids && L.liquidbelly_visuals && liquid_overlay && reagents.total_volume)
if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "calm")
else
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
+ I = image('icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
if(custom_reagentcolor)
I.color = custom_reagentcolor
else
@@ -717,12 +776,8 @@
I.pixel_y = -450 + min((450 / custom_max_volume * reagents.total_volume), 450 / 100 * max_liquid_level)
F.add_overlay(I)
F.update_for_view(L.client.view)
- //CHOMPEdit End
else
L.clear_fullscreen("belly")
- //L.clear_fullscreen("belly2") //Chomp Disable - disable upstream's solution, use ours
- //L.clear_fullscreen("belly3") //Chomp Disable - disable upstream's solution, use ours
- //L.clear_fullscreen("belly4") //Chomp Disable - disable upstream's solution, use ours
if(disable_hud && L != owner)
if(L?.hud_used?.hud_shown)
@@ -730,172 +785,15 @@
L.toggle_hud_vis(TRUE)
/obj/belly/proc/vore_preview(mob/living/L)
- if(!istype(L) || !L.client) //CHOMPEdit Start
+ if(!istype(L) || !L.client)
L.previewing_belly = null
return
L.previewing_belly = src
vore_fx(L)
- //CHOMPEdit End
-
-/* //CHOMPRemove. Using regular vore_fx above.
- if(belly_fullscreen)
- if(colorization_enabled)
- /* //Chomp Disable - disable upstream's solution, use ours
- var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/colorized)
- F.icon_state = belly_fullscreen
- F.color = belly_fullscreen_color
- if("[belly_fullscreen]_l1" in icon_states('icons/mob/screen_full_colorized_vore_overlays.dmi'))
- var/obj/screen/fullscreen/F2 = L.overlay_fullscreen("belly2", /obj/screen/fullscreen/belly/colorized/overlay)
- F2.icon_state = "[belly_fullscreen]_l1"
- F2.color = belly_fullscreen_color_secondary
- if("[belly_fullscreen]_l2" in icon_states('icons/mob/screen_full_colorized_vore_overlays.dmi'))
- var/obj/screen/fullscreen/F3 = L.overlay_fullscreen("belly3", /obj/screen/fullscreen/belly/colorized/overlay)
- F3.icon_state = "[belly_fullscreen]_l2"
- F3.color = belly_fullscreen_color_trinary
- if("[belly_fullscreen]_nc" in icon_states('icons/mob/screen_full_colorized_vore_overlays.dmi'))
- var/obj/screen/fullscreen/F4 = L.overlay_fullscreen("belly4", /obj/screen/fullscreen/belly/colorized/overlay)
- F4.icon_state = "[belly_fullscreen]_nc"
- */ //Chomp Disable END
- //CHOMPedit Start: preserving save data
- var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly, reagents.total_volume)
- F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[belly_fullscreen].dmi")
- F.cut_overlays()
- var/image/I = image(F.icon, belly_fullscreen)
- I.color = belly_fullscreen_color
- I.alpha = belly_fullscreen_alpha
- F.add_overlay(I)
- I = image(F.icon, belly_fullscreen+"-2")
- I.color = belly_fullscreen_color2
- I.alpha = belly_fullscreen_alpha
- F.add_overlay(I)
- I = image(F.icon, belly_fullscreen+"-3")
- I.color = belly_fullscreen_color3
- I.alpha = belly_fullscreen_alpha
- F.add_overlay(I)
- I = image(F.icon, belly_fullscreen+"-4")
- I.color = belly_fullscreen_color4
- I.alpha = belly_fullscreen_alpha
- F.add_overlay(I)
- var/extra_mush = 0
- var/extra_mush_color = mush_color
- if(L.liquidbelly_visuals && ishuman(owner) && metabolism_overlay && metabolism_mush_ratio > 0)
- var/mob/living/carbon/human/H = owner
- var/datum/reagents/metabolism/ingested = H.ingested
- if(ingested && ingested.total_volume > 0)
- if(custom_ingested_color)
- extra_mush_color = custom_ingested_color
- else
- extra_mush_color = ingested.get_color()
- extra_mush = ingested.total_volume * metabolism_mush_ratio
- if(!mush_overlay)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
- I.color = extra_mush_color
- I.alpha = custom_ingested_alpha
- I.pixel_y = -450 + (450 / max(max_ingested, 1) * max(min(max_ingested, ingested.total_volume), 1))
- F.add_overlay(I)
- if(L.liquidbelly_visuals && mush_overlay && (owner.nutrition > 0 || max_mush == 0 || min_mush > 0 || (LAZYLEN(contents) * item_mush_val) > 0))
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
- I.color = mush_color
- I.alpha = mush_alpha
- var/total_mush_content = owner.nutrition + LAZYLEN(contents) * item_mush_val + extra_mush
- I.pixel_y = -450 + (450 / max(max_mush, 1) * max(min(max_mush, total_mush_content), 1))
- if(I.pixel_y < -450 + (450 / 100 * min_mush))
- I.pixel_y = -450 + (450 / 100 * min_mush)
- var/stored_y = I.pixel_y
- F.add_overlay(I)
- if(metabolism_overlay && metabolism_mush_ratio > 0 && extra_mush > 0)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
- I.color = extra_mush_color
- I.alpha = min(mush_alpha, (extra_mush / max(total_mush_content, 1)) * mush_alpha)
- I.pixel_y = stored_y
- F.add_overlay(I)
- if(L.liquidbelly_visuals && liquid_overlay && reagents.total_volume)
- if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
- else
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
- if(custom_reagentcolor)
- I.color = custom_reagentcolor
- else
- I.color = reagentcolor
- if(custom_reagentalpha)
- I.alpha = custom_reagentalpha
- else
- I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha)
- I.pixel_y = -450 + min((450 / custom_max_volume * reagents.total_volume), 450 / 100 * max_liquid_level)
- F.add_overlay(I)
- F.update_for_view(L.client.view)
- else
- var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed, reagents.total_volume) //preserving save data
- F.cut_overlays()
- F.add_overlay(image(F.icon, belly_fullscreen))
- F.add_overlay(image(F.icon, belly_fullscreen+"-2"))
- F.add_overlay(image(F.icon, belly_fullscreen+"-3"))
- F.add_overlay(image(F.icon, belly_fullscreen+"-4"))
- var/image/I
- var/extra_mush = 0
- var/extra_mush_color = mush_color
- if(L.liquidbelly_visuals && ishuman(owner) && metabolism_overlay && metabolism_mush_ratio > 0)
- var/mob/living/carbon/human/H = owner
- var/datum/reagents/metabolism/ingested = H.ingested
- if(ingested && ingested.total_volume > 0)
- if(custom_ingested_color)
- extra_mush_color = custom_ingested_color
- else
- extra_mush_color = ingested.get_color()
- extra_mush = ingested.total_volume * metabolism_mush_ratio
- if(!mush_overlay)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
- I.color = extra_mush_color
- I.alpha = custom_ingested_alpha
- I.pixel_y = -450 + (450 / max(max_ingested, 1) * max(min(max_ingested, ingested.total_volume), 1))
- F.add_overlay(I)
- if(L.liquidbelly_visuals && mush_overlay && (owner.nutrition > 0 || max_mush == 0 || min_mush > 0 || (LAZYLEN(contents) * item_mush_val) > 0))
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
- I.color = mush_color
- I.alpha = mush_alpha
- var/total_mush_content = owner.nutrition + LAZYLEN(contents) * item_mush_val + extra_mush
- I.pixel_y = -450 + (450 / max(max_mush, 1) * max(min(max_mush, total_mush_content), 1))
- if(I.pixel_y < -450 + (450 / 100 * min_mush))
- I.pixel_y = -450 + (450 / 100 * min_mush)
- var/stored_y = I.pixel_y
- F.add_overlay(I)
- if(metabolism_overlay && metabolism_mush_ratio > 0 && extra_mush > 0)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "mush")
- I.color = extra_mush_color
- I.alpha = min(mush_alpha, (extra_mush / max(total_mush_content, 1)) * mush_alpha)
- I.pixel_y = stored_y
- F.add_overlay(I)
- if(L.liquidbelly_visuals && liquid_overlay && reagents.total_volume)
- if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm")
- else
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
- if(custom_reagentcolor)
- I.color = custom_reagentcolor
- else
- I.color = reagentcolor
- if(custom_reagentalpha)
- I.alpha = custom_reagentalpha
- else
- I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha)
- I.pixel_y = -450 + min((450 / custom_max_volume * reagents.total_volume), 450 / 100 * max_liquid_level)
- F.add_overlay(I)
- F.update_for_view(L.client.view)
- //CHOMPEdit End
- else
- L.clear_fullscreen("belly")
- //L.clear_fullscreen("belly2") //Chomp Disable - disable upstream's solution, use ours
- //L.clear_fullscreen("belly3") //Chomp Disable - disable upstream's solution, use ours
- //L.clear_fullscreen("belly4") //Chomp Disable - disable upstream's solution, use ours
-*/
/obj/belly/proc/clear_preview(mob/living/L)
- L.previewing_belly = null //CHOMPAdd
+ L.previewing_belly = null
L.clear_fullscreen("belly")
- //L.clear_fullscreen("belly2") //Chomp Disable - disable upstream's solution, use ours
- //L.clear_fullscreen("belly3") //Chomp Disable - disable upstream's solution, use ours
- //L.clear_fullscreen("belly4") //Chomp Disable - disable upstream's solution, use ours
@@ -944,7 +842,7 @@
else
soundfile = fancy_release_sounds[release_sound]
if(soundfile)
- playsound(src, soundfile, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
+ playsound(src, soundfile, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
return count
@@ -1019,7 +917,7 @@
//privacy_volume = 25
//Print notifications/sound if necessary
- if(istype(M, /mob/observer)) //CHOMPEdit
+ if(istype(M, /mob/observer))
silent = TRUE
if(!silent)
owner.visible_message(span_vnotice(span_green(span_bold("[owner] [release_verb] [M] from their [lowertext(name)]!"))),range = privacy_range)
@@ -1029,7 +927,7 @@
else
soundfile = fancy_release_sounds[release_sound]
if(soundfile)
- playsound(src, soundfile, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
+ playsound(src, soundfile, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
//Should fix your view not following you out of mobs sometimes!
if(ismob(M))
var/mob/ourmob = M
@@ -1063,7 +961,7 @@
if(owner.mind)
owner.mind.vore_prey_eaten++
-//CHOMPEdit Start - new procs for handling digestion damage as a total rather than per-type
+// new procs for handling digestion damage as a total rather than per-type
// Returns the current total digestion damage per tick of a belly.
/obj/belly/proc/get_total_digestion_damage()
return (digest_brute + digest_burn + digest_oxy + digest_tox + digest_clone)
@@ -1079,7 +977,6 @@
digest_tox = 0
digest_clone = 0
return
-// CHOMPEdit End
// Handle the death of a mob via digestion.
// Called from the process_Life() methods of bellies that digest prey.
@@ -1089,7 +986,7 @@
digested_prey_count++
add_attack_logs(owner, M, "Digested in [lowertext(name)]")
- //CHOMPEdit Start - Reverts TF on death. This fixes a bug with posibrains or similar, and also makes reforming easier.
+ // Reverts TF on death. This fixes a bug with posibrains or similar, and also makes reforming easier.
if(M.tf_mob_holder && M.tf_mob_holder.loc == M)
M.tf_mob_holder.ckey = M.ckey
M.tf_mob_holder.enabled = TRUE
@@ -1106,13 +1003,12 @@
if(M.tf_mob_holder)
M.tf_mob_holder = null
- //CHOMPEdit End
// If digested prey is also a pred... anyone inside their bellies gets moved up.
if(is_vore_predator(M))
M.release_vore_contents(include_absorbed = TRUE, silent = TRUE)
- var/obj/item/mmi/hasMMI // CHOMPEdit - Adjust how MMI's are handled
+ var/obj/item/mmi/hasMMI // Adjust how MMI's are handled
//Drop all items into the belly.
if(CONFIG_GET(flag/items_survive_digestion))
@@ -1122,7 +1018,7 @@
var/obj/item/mmi/brainbox = MMI.removed()
if(brainbox)
items_preserved += brainbox
- hasMMI = brainbox // CHOMPEdit - Adjust how MMI's are handled
+ hasMMI = brainbox // Adjust how MMI's are handled
for(var/slot in slots)
var/obj/item/I = M.get_equipped_item(slot = slot)
if(I)
@@ -1140,26 +1036,34 @@
if(ishuman(M))
var/mob/living/carbon/human/Prey = M
Prey.bloodstr.del_reagent(REAGENT_ID_NUMBENZYME)
- Prey.bloodstr.trans_to_holder(Pred.ingested, Prey.bloodstr.total_volume, 0.5, TRUE) // Copy=TRUE because we're deleted anyway //CHOMPEdit Start
+ Prey.bloodstr.trans_to_holder(Pred.ingested, Prey.bloodstr.total_volume, 0.5, TRUE) // Copy=TRUE because we're deleted anyway
Prey.ingested.trans_to_holder(Pred.ingested, Prey.ingested.total_volume, 0.5, TRUE) // Therefore don't bother spending cpu
- Prey.touching.del_reagent(REAGENT_ID_STOMACID) //Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_DIETSTOMACID) //Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_PACID) //Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_SACID) //Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_CLEANER) //Don't need this stuff in our bloodstream.
+ //Don't need this stuff in our bloodstream.
+ Prey.touching.del_reagent(REAGENT_ID_STOMACID)
+ Prey.touching.del_reagent(REAGENT_ID_DIETSTOMACID)
+ Prey.touching.del_reagent(REAGENT_ID_PACID)
+ Prey.touching.del_reagent(REAGENT_ID_SACID)
+ Prey.touching.del_reagent(REAGENT_ID_CLEANER)
+ Prey.touching.del_reagent(REAGENT_ID_CONCENTRATEDRADIUM)
+ Prey.touching.del_reagent(REAGENT_ID_TRICORDRAZINE)
Prey.touching.trans_to_holder(Pred.ingested, Prey.touching.total_volume, 0.5, TRUE) // On updating the prey's reagents
else if(M.reagents)
- M.reagents.del_reagent(REAGENT_ID_STOMACID) //Don't need this stuff in our bloodstream.
- M.reagents.del_reagent(REAGENT_ID_DIETSTOMACID) //Don't need this stuff in our bloodstream.
- M.reagents.del_reagent(REAGENT_ID_CLEANER) //Don't need this stuff in our bloodstream.
- M.reagents.trans_to_holder(Pred.ingested, M.reagents.total_volume, 0.5, TRUE) //CHOMPEdit End
+ //Don't need this stuff in our bloodstream.
+ M.reagents.del_reagent(REAGENT_ID_STOMACID)
+ M.reagents.del_reagent(REAGENT_ID_DIETSTOMACID)
+ M.reagents.del_reagent(REAGENT_ID_PACID)
+ M.reagents.del_reagent(REAGENT_ID_SACID)
+ M.reagents.del_reagent(REAGENT_ID_CLEANER)
+ M.reagents.del_reagent(REAGENT_ID_CONCENTRATEDRADIUM)
+ M.reagents.del_reagent(REAGENT_ID_TRICORDRAZINE)
+ M.reagents.trans_to_holder(Pred.ingested, M.reagents.total_volume, 0.5, TRUE)
owner.handle_belly_update()
//Incase they have the loop going, let's double check to stop it.
M.stop_sound_channel(CHANNEL_PREYLOOP)
// Delete the digested mob
- //CHOMPEdit start - Changed qdel to a forceMove to allow reforming, and... handled robots special.
+ // Changed qdel to a forceMove to allow reforming, and... handled robots special.
if(isrobot(M))
var/mob/living/silicon/robot/R = M
if(R.mmi && R.mind && R.mmi.brainmob)
@@ -1188,8 +1092,7 @@
M.enabled = FALSE
M.forceMove(hasMMI)
else
- //Another CHOMPEdit started here. I left the comment here, though obviously we're doing a lot more now as well.
- var/mob/observer/G = M.ghostize(FALSE) //CHOMPEdit start. Make sure they're out, so we can copy attack logs and such.
+ var/mob/observer/G = M.ghostize(FALSE) // Make sure they're out, so we can copy attack logs and such.
if(G)
G.forceMove(src)
G.body_backup = M
@@ -1198,7 +1101,6 @@
else
qdel(M)
owner.handle_belly_update()
- //CHOMPEdit End
// Handle a mob being absorbed
/obj/belly/proc/absorb_living(mob/living/M)
@@ -1218,11 +1120,13 @@
//Reagent sharing for absorbed with pred - Copy so both pred and prey have these reagents.
Prey.bloodstr.trans_to_holder(Pred.ingested, Prey.bloodstr.total_volume, copy = TRUE)
Prey.ingested.trans_to_holder(Pred.ingested, Prey.ingested.total_volume, copy = TRUE)
- Prey.touching.del_reagent(REAGENT_ID_STOMACID) //CHOMPEdit Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_DIETSTOMACID) //CHOMPEdit Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_PACID) //Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_SACID) //Don't need this stuff in our bloodstream.
- Prey.touching.del_reagent(REAGENT_ID_CLEANER) //CHOMPEdit Don't need this stuff in our bloodstream.
+ Prey.touching.del_reagent(REAGENT_ID_STOMACID)
+ Prey.touching.del_reagent(REAGENT_ID_DIETSTOMACID)
+ Prey.touching.del_reagent(REAGENT_ID_PACID)
+ Prey.touching.del_reagent(REAGENT_ID_SACID)
+ Prey.touching.del_reagent(REAGENT_ID_CLEANER)
+ Prey.touching.del_reagent(REAGENT_ID_CONCENTRATEDRADIUM)
+ Prey.touching.del_reagent(REAGENT_ID_TRICORDRAZINE)
Prey.touching.trans_to_holder(Pred.ingested, Prey.touching.total_volume, copy = TRUE)
// TODO - Find a way to make the absorbed prey share the effects with the pred.
// Currently this is infeasible because reagent containers are designed to have a single my_atom, and we get
@@ -1290,16 +1194,13 @@
//Digest a single item
//Receives a return value from digest_act that's how much nutrition
//the item should be worth
-/obj/belly/proc/digest_item(obj/item/item, touchable_amount) //CHOMPEdit
- var/digested = item.digest_act(src, touchable_amount) //CHOMPEdit
- if(digested == FALSE) //CHOMPEdit
+/obj/belly/proc/digest_item(obj/item/item, touchable_amount)
+ var/digested = item.digest_act(src, touchable_amount)
+ if(digested == FALSE)
items_preserved |= item
else
- owner_adjust_nutrition((nutrition_percent / 100) * 5 * digested) //CHOMPEdit
- // if(isrobot(owner)) //CHOMPEdit: Borgos can now use nutrition too.
- // var/mob/living/silicon/robot/R = owner
- // R.cell.charge += ((nutrition_percent / 100) * 50 * digested)
- digested = TRUE //CHOMPEdit
+ owner_adjust_nutrition((nutrition_percent / 100) * 5 * digested)
+ digested = TRUE
return digested
//Determine where items should fall out of us into.
@@ -1359,33 +1260,29 @@
var/struggle_outer_message = span_valert(belly_format_string(struggle_messages_outside, R))
var/struggle_user_message = span_valert(belly_format_string(struggle_messages_inside, R))
- //CHOMPEdit Start
if(private_struggle)
to_chat(owner, struggle_outer_message)
else
for(var/mob/M in hearers(4, owner))
M.show_message(struggle_outer_message, 2) // hearable
- //CHOMPEdit End
var/sound/struggle_snuggle
var/sound/struggle_rustle = sound(get_sfx("rustle"))
- if((vore_sprite_flags & DM_FLAG_VORESPRITE_BELLY) && (owner.vore_capacity_ex[belly_sprite_to_affect] >= 1) && !private_struggle && resist_triggers_animation && affects_vore_sprites) // CHOMPEdit
+ if((vore_sprite_flags & DM_FLAG_VORESPRITE_BELLY) && (owner.vore_capacity_ex[belly_sprite_to_affect] >= 1) && !private_struggle && resist_triggers_animation && affects_vore_sprites)
owner.vs_animate(belly_sprite_to_affect)
- //CHOMPEdit Start
if(!private_struggle)
if(is_wet)
if(!fancy_vore)
struggle_snuggle = sound(get_sfx("classic_struggle_sounds"))
else
struggle_snuggle = sound(get_sfx("fancy_prey_struggle"))
- playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
+ playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
else
- playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
+ playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
if(prob(belchchance))//Unsure if this should go in escapable or not, leaving it here for now.
owner.emote("belch")
- //CHOMPEdit End
if(escapable) //If the stomach has escapable enabled.
if(prob(escapechance)) //Let's have it check to see if the prey escapes first.
to_chat(R, escape_attempt_prey_message)
@@ -1399,11 +1296,9 @@
release_specific_contents(C)
to_chat(R, escape_item_prey_message)
to_chat(owner, escape_item_owner_message)
- //CHOMPEdit Start
if(!private_struggle)
for(var/mob/M in hearers(4, owner))
M.show_message(escape_item_outside_message, 2)
- //CHOMPEdit End
return
if(escapable && (R.loc == src) && !R.absorbed) //Does the owner still have escapable enabled?
var/escape_owner_message = span_vwarning(belly_format_string(escape_messages_owner, R))
@@ -1413,11 +1308,9 @@
release_specific_contents(R)
to_chat(R, escape_prey_message)
to_chat(owner, escape_owner_message)
- //CHOMPEdit Start
if(!private_struggle)
for(var/mob/M in hearers(4, owner))
M.show_message(escape_outside_message, 2)
- //CHOMPEdit End
return
else if(!(R.loc == src)) //Aren't even in the belly. Quietly fail.
return
@@ -1513,28 +1406,24 @@
var/struggle_outer_message = span_valert(belly_format_string(absorbed_struggle_messages_outside, R, use_absorbed_count = TRUE))
var/struggle_user_message = span_valert(belly_format_string(absorbed_struggle_messages_inside, R, use_absorbed_count = TRUE))
- //CHOMPEdit Start
if(private_struggle)
to_chat(owner, struggle_outer_message)
else
for(var/mob/M in hearers(4, owner))
M.show_message(struggle_outer_message, 2) // hearable
- //CHOMPEdit End
var/sound/struggle_snuggle
var/sound/struggle_rustle = sound(get_sfx("rustle"))
- //CHOMPEdit Start
if(!private_struggle)
if(is_wet)
if(!fancy_vore)
struggle_snuggle = sound(get_sfx("classic_struggle_sounds"))
else
struggle_snuggle = sound(get_sfx("fancy_prey_struggle"))
- playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
+ playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
else
- playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
- //CHOMPEdit End
+ playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
//absorb resists
if(escapable || owner.stat) //If the stomach has escapable enabled or the owner is dead/unconscious
@@ -1553,11 +1442,9 @@
release_specific_contents(R)
to_chat(R, escape_absorbed_prey_message)
to_chat(owner, escape_absorbed_owner_message)
- //CHOMPEdit Start
if(!private_struggle)
for(var/mob/M in hearers(4, owner))
M.show_message(escape_absorbed_outside_message, 2)
- //CHOMPEdit End
return
else if(!(R.loc == src)) //Aren't even in the belly. Quietly fail.
return
@@ -1587,7 +1474,7 @@
/obj/belly/proc/transfer_contents(atom/movable/content, obj/belly/target, silent = 0)
if(!(content in src) || !istype(target))
return
- content.belly_cycles = 0 //CHOMPEdit
+ content.belly_cycles = 0
content.forceMove(target)
if(ismob(content) && !isobserver(content))
var/mob/ourmob = content
@@ -1605,7 +1492,7 @@
M.updateVRPanel()
owner.handle_belly_update()
-//Autotransfer callback CHOMPEdit Start
+//Autotransfer callback
/obj/belly/proc/check_autotransfer(var/atom/movable/prey)
if(!(prey in contents) || !prey.autotransferable) return
var/dest_belly_name
@@ -1643,9 +1530,9 @@
to_chat(owner, autotransfer_owner_message)
transfer_contents(prey, dest_belly)
- return TRUE //CHOMPEdit end
+ return TRUE
-//Autotransfer filter CHOMPEdit Start
+//Autotransfer filter
/obj/belly/proc/autotransfer_filter(var/atom/movable/prey, var/whitelist, var/blacklist)
if(ismob(prey))
if(blacklist & autotransfer_flags_list["Absorbed"])
@@ -1756,7 +1643,7 @@
if(istype(prey, /obj/item/clothing) || istype(prey, /obj/item/storage)) return TRUE
if(whitelist & autotransfer_flags_list_items["Food"])
if(istype(prey, /obj/item/reagent_containers/food)) return TRUE
- return FALSE //CHOMPEdit end
+ return FALSE
// Belly copies and then returns the copy
// Needs to be updated for any var changes
@@ -1803,8 +1690,8 @@
dupe.fancy_vore = fancy_vore
dupe.is_wet = is_wet
dupe.wet_loop = wet_loop
-
- dupe.reagent_mode_flags = reagent_mode_flags //CHOMP start of variables from CHOMP
+ dupe.reagent_mode_flags = reagent_mode_flags
+ dupe.belly_fullscreen_color = belly_fullscreen_color
dupe.belly_fullscreen_color2 = belly_fullscreen_color2
dupe.belly_fullscreen_color3 = belly_fullscreen_color3
dupe.belly_fullscreen_color4 = belly_fullscreen_color4
@@ -1873,13 +1760,9 @@
dupe.item_digest_logs = item_digest_logs
dupe.show_fullness_messages = show_fullness_messages
dupe.belchchance = belchchance
- dupe.digest_max = digest_max //CHOMP end of variables from CHOMP
-
+ dupe.digest_max = digest_max
dupe.belly_fullscreen = belly_fullscreen
dupe.disable_hud = disable_hud
- dupe.belly_fullscreen_color = belly_fullscreen_color
- //dupe.belly_fullscreen_color_secondary = belly_fullscreen_color_secondary //Chomp Disable - Use our solution, not upstream's
- //dupe.belly_fullscreen_color_trinary = belly_fullscreen_color_trinary //Chomp Disable - Use our solution, not upstream's
dupe.colorization_enabled = colorization_enabled
dupe.egg_type = egg_type
dupe.emote_time = emote_time
@@ -2085,38 +1968,31 @@
for(var/I in examine_messages)
dupe.examine_messages += I
-
- // CHOMP reagent belly
//generated_reagents - strings
dupe.generated_reagents.Cut()
for(var/I in generated_reagents)
dupe.generated_reagents += I
- // CHOMP fullness messages stage 1
//fullness1_messages - strings
dupe.fullness1_messages.Cut()
for(var/I in fullness1_messages)
dupe.fullness1_messages += I
- // CHOMP fullness messages stage 2
//fullness2_messages - strings
dupe.fullness2_messages.Cut()
for(var/I in fullness2_messages)
dupe.fullness2_messages += I
- // CHOMP fullness messages stage 3
//fullness3_messages - strings
dupe.fullness3_messages.Cut()
for(var/I in fullness3_messages)
dupe.fullness3_messages += I
- // CHOMP fullness messages stage 4
//fullness4_messages - strings
dupe.fullness4_messages.Cut()
for(var/I in fullness4_messages)
dupe.fullness4_messages += I
- // CHOMP fullness messages stage 5
//generated_reagents - strings
dupe.fullness5_messages.Cut()
for(var/I in fullness5_messages)
@@ -2156,8 +2032,8 @@
fullness_to_add *= M.health / M.getMaxHealth()
if(fullness_to_add > 0)
belly_fullness += fullness_to_add
- if(count_liquid_for_sprite) // CHOMPEnable
- belly_fullness += (reagents.total_volume / 100) * liquid_multiplier // CHOMPEnable
+ if(count_liquid_for_sprite)
+ belly_fullness += (reagents.total_volume / 100) * liquid_multiplier
if(count_items_for_sprite)
for(var/obj/item/I in src)
var/fullness_to_add = 0
@@ -2177,3 +2053,112 @@
belly_fullness += fullness_to_add * item_multiplier
belly_fullness *= size_factor_for_sprite
return belly_fullness
+
+/obj/item/debris_pack/digested
+ name = "digested material"
+ desc = "Some thoroughly digested mass of ... something. Might be useful for recycling."
+ icon = 'icons/obj/recycling.dmi'
+ icon_state = "matdust"
+ color = "#664330"
+ w_class = ITEMSIZE_SMALL
+
+/obj/belly/proc/recycle(var/obj/item/O)
+ if(!recycling || (!LAZYLEN(O.matter) && !istype(O, /obj/item/ore)))
+ return FALSE
+ if(istype(O, /obj/item/ore))
+ var/obj/item/ore/ore = O
+ for(var/obj/item/ore_chunk/C in contents)
+ if(istype(C))
+ C.stored_ore[ore.material]++
+ return TRUE
+ var/obj/item/ore_chunk/newchunk = new /obj/item/ore_chunk(src)
+ newchunk.stored_ore[ore.material]++
+ return TRUE
+ else
+ var/list/modified_mats = list()
+ var/trash = 1
+ if(istype(O,/obj/item/trash))
+ trash = 5
+ if(istype(O,/obj/item/stack))
+ var/obj/item/stack/S = O
+ trash = S.amount
+ for(var/mat in O.matter)
+ modified_mats[mat] = O.matter[mat] * trash
+ for(var/obj/item/debris_pack/digested/D in contents)
+ if(istype(D))
+ for(var/mat in modified_mats)
+ D.matter[mat] += modified_mats[mat]
+ if(O.w_class > D.w_class)
+ D.w_class = O.w_class
+ if(O.possessed_voice && O.possessed_voice.len)
+ for(var/mob/living/voice/V in O.possessed_voice)
+ D.inhabit_item(V, null, V.tf_mob_holder)
+ qdel(V)
+ O.possessed_voice = list()
+ return TRUE
+ var/obj/item/debris_pack/digested/D = new /obj/item/debris_pack/digested(src, modified_mats)
+ if(O.possessed_voice && O.possessed_voice.len)
+ for(var/mob/living/voice/V in O.possessed_voice)
+ D.inhabit_item(V, null, V.tf_mob_holder)
+ qdel(V)
+ O.possessed_voice = list()
+ return TRUE
+
+/obj/belly/proc/owner_adjust_nutrition(var/amount = 0)
+ if(storing_nutrition && amount > 0)
+ for(var/obj/item/reagent_containers/food/rawnutrition/R in contents)
+ if(istype(R))
+ R.stored_nutrition += amount
+ return
+ var/obj/item/reagent_containers/food/rawnutrition/NR = new /obj/item/reagent_containers/food/rawnutrition(src)
+ NR.stored_nutrition += amount
+ return
+ else
+ owner.adjust_nutrition(amount)
+
+/obj/item/reagent_containers/food/rawnutrition
+ name = "raw nutrition"
+ desc = "A nutritious pile of converted mass ready for consumption."
+ icon = 'icons/obj/recycling.dmi'
+ icon_state = "matdust"
+ color = "#664330"
+ w_class = ITEMSIZE_SMALL
+ var/stored_nutrition = 0
+
+/obj/item/reagent_containers/food/rawnutrition/standard_feed_mob(var/mob/user, var/mob/target)
+ if(isliving(target))
+ var/mob/living/L = target
+ L.nutrition += stored_nutrition
+ stored_nutrition = 0
+ qdel(src)
+ return
+ .=..()
+
+// Updates the belly_surrounding list variable. Called in bellymodes_vr.dm
+/obj/belly/proc/update_belly_surrounding()
+ if(!contents.len && !LAZYLEN(owner.soulgem?.brainmobs))
+ belly_surrounding = list()
+ return
+ belly_surrounding = get_belly_surrounding(contents)
+ if(owner.soulgem?.linked_belly == src)
+ belly_surrounding += owner.soulgem.brainmobs
+
+// Recursive proc that returns all living mobs directly and indirectly inside a belly
+// This can also be called more generically to get all living mobs not in bellies within any contents list
+/obj/belly/proc/get_belly_surrounding(var/list/C)
+ var/list/surrounding = list()
+ for(var/thing in C)
+ if(istype(thing,/mob/living))
+ var/mob/living/L = thing
+ surrounding.Add(L)
+ surrounding.Add(get_belly_surrounding(L.contents))
+ if(istype(thing,/obj/item))
+ var/obj/item/I = thing
+ surrounding.Add(get_belly_surrounding(I.contents))
+ return surrounding
+
+/obj/belly/proc/effective_emote_hearers()
+ . = list(loc)
+ for(var/atom/movable/AM as anything in contents)
+ //if(AM.atom_flags & ATOM_HEAR)
+ . += AM
diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm
index 76c2543a7a..d3cab78929 100644
--- a/code/modules/vore/eating/bellymodes_datum_vr.dm
+++ b/code/modules/vore/eating/bellymodes_datum_vr.dm
@@ -29,7 +29,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
//Person just died in guts!
if(L.stat == DEAD)
- if(!L.digestion_in_progress) //CHOMPEdit Start
+ if(!L.digestion_in_progress)
if(L.check_sound_preference(/datum/preference/toggle/digestion_noises))
if(!B.fancy_vore)
SEND_SOUND(L, sound(get_sfx("classic_death_sounds")))
@@ -45,9 +45,9 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.owner.handle_belly_update()
return list("to_update" = TRUE)
if(!L)
- return //CHOMPEdit End
+ return
- //CHOMPEDIT: Parasitic digestion immunity hook, used to be a synx istype check but this is more optimized.
+ //Parasitic digestion immunity hook, used to be a synx istype check but this is more optimized.
if(L.parasitic)
if(isliving(L))
var/paratox = B.digest_brute+B.digest_burn
@@ -55,12 +55,10 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.adjust_nutrition(paratox)
L.adjustBruteLoss(-paratox*2) //Should automaticaly clamp to 0
L.adjustFireLoss(-paratox*2) //Should automaticaly clamp to 0
- if(B.health_impacts_size) //CHOMPEdit - Health probably changed so...
- B.owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
+ if(B.health_impacts_size) //Health probably changed so...
+ B.owner.handle_belly_update() //This is run whenever a belly's contents are changed.
return
- //CHOMPedit end
-
// Deal digestion damage (and feed the pred)
var/old_health = L.health
var/old_brute = L.getBruteLoss()
@@ -73,17 +71,16 @@ GLOBAL_LIST_INIT(digest_modes, list())
L.adjustOxyLoss(B.digest_oxy)
L.adjustToxLoss(B.digest_tox)
L.adjustCloneLoss(B.digest_clone)
- //CHOMPEdit start - Send a message when a prey-thing enters hard crit.
+ // Send a message when a prey-thing enters hard crit.
if(iscarbon(L) && old_health > 0 && L.health <= 0)
to_chat(B.owner, span_notice("You feel [L] go still within your [lowertext(B.name)]."))
- //CHOMPEdit end
var/actual_brute = L.getBruteLoss() - old_brute
var/actual_burn = L.getFireLoss() - old_burn
var/actual_oxy = L.getOxyLoss() - old_oxy
var/actual_tox = L.getToxLoss() - old_tox
var/actual_clone = L.getCloneLoss() - old_clone
var/damage_gain = (actual_brute + actual_burn + actual_oxy/2 + actual_tox + actual_clone*2)*(B.nutrition_percent / 100)
- if(B.slow_digestion) //CHOMPEdit Start
+ if(B.slow_digestion)
damage_gain = damage_gain * 0.5
var/offset = (1 + ((L.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02
var/difference = B.owner.size_multiplier / L.size_multiplier
@@ -92,15 +89,6 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.owner.handle_belly_update()
consider_healthbar(L, old_health, B.owner)
- /*if(isrobot(B.owner)) //CHOMPEdit: Borgos can now use nutrition too
- if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //digestion producing reagents
- var/mob/living/silicon/robot/R = B.owner
- R.cell.charge += 20*damage_gain
- B.digest_nutri_gain += offset * (1.5 * damage_gain / difference)
- B.GenerateBellyReagents_digesting()
- else
- var/mob/living/silicon/robot/R = B.owner
- R.cell.charge += 25*damage_gain */
if(offset && damage_gain > 0) // If any different than default weight, multiply the % of offset.
if(B.show_liquids && B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //digestion producing reagents
B.owner_adjust_nutrition(offset * (3 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //Uncertain if balanced fairly, can adjust by multiplier for the cost of reagent, dont go below 1 or else it will result in more nutrition than normal - Jack
@@ -109,7 +97,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
else
B.owner_adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved.
else
- B.owner_adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //CHOMPEdit End
+ B.owner_adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier())
if(L.stat != oldstat)
return list("to_update" = TRUE)
@@ -125,8 +113,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.steal_nutrition(L)
if(L.nutrition < 100)
B.absorb_living(L)
- if(B.show_liquids && B.reagent_mode_flags & DM_FLAG_REAGENTSABSORB && B.reagents.total_volume < B.reagents.maximum_volume) //CHOMPedit: absorption reagent production
- B.GenerateBellyReagents_absorbed() //CHOMPedit end: A bonus for pred, I know for a fact prey is usually at zero nutrition when absorption finally happens
+ if(B.show_liquids && B.reagent_mode_flags & DM_FLAG_REAGENTSABSORB && B.reagents.total_volume < B.reagents.maximum_volume) //absorption reagent production
+ B.GenerateBellyReagents_absorbed() //A bonus for pred, I know for a fact prey is usually at zero nutrition when absorption finally happens
consider_healthbar(L, old_nutrition, B.owner)
return list("to_update" = TRUE)
else
@@ -192,7 +180,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
/datum/digest_mode/heal/process_mob(obj/belly/B, mob/living/L)
var/oldstat = L.stat
- if(L.stat == DEAD || !L.permit_healbelly) //CHOMPEdit healpref check
+ if(L.stat == DEAD || !L.permit_healbelly) //healpref check
return null // Can't heal the dead with healbelly
var/mob/living/carbon/human/H = L
if(B.owner.nutrition > 90 && H.isSynthetic())
@@ -237,7 +225,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.put_in_egg(H, 1)*/
/datum/digest_mode/egg/handle_atoms(obj/belly/B, list/touchable_atoms)
- if(B.egg_cycles < 10) //CHOMPEdit Start
+ if(B.egg_cycles < 10)
B.egg_cycles ++
return
B.egg_cycles = 0
@@ -318,7 +306,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.ownegg.icon_scale_y = clamp(0.25 * B.ownegg.w_class, 0.25, scale_clamp)
B.ownegg.update_transform()
if(B.ownegg.w_class > 4)
- B.ownegg.slowdown = 4 //CHOMPEdit End
+ B.ownegg.slowdown = 4
B.ownegg = null
return list("to_update" = TRUE)
return
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index 743f413538..f758e60325 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -1,7 +1,7 @@
// Process the predator's effects upon the contents of its belly (i.e digestion/transformation etc)
/obj/belly/process(wait) //Passed by controller
recent_sound = FALSE
- cycle_sloshed = FALSE //CHOMPAdd
+ cycle_sloshed = FALSE
if(loc != owner)
if(istype(owner))
@@ -10,13 +10,15 @@
qdel(src)
return
- HandleBellyReagents() //CHOMP reagent belly stuff, here to jam it into subsystems and avoid too much cpu usage
- update_belly_surrounding() //CHOMPAdd - Updates belly_surrounding list for indirect vore usage
+ HandleBellyReagents() // reagent belly stuff, here to jam it into subsystems and avoid too much cpu usage
+ update_belly_surrounding() // Updates belly_surrounding list for indirect vore usage
// VERY early exit
if(!contents.len)
+ if(owner.previewing_belly == src)
+ HandleBellyReagentEffects()
return
- //CHOMPEdit Start: Autotransfer count moved here.
+ // Autotransfer count moved here.
if(autotransfer_enabled)
var/list/autotransferables = list()
for(var/atom/movable/M in contents)
@@ -32,26 +34,26 @@
for(var/atom/movable/M in autotransferables)
if(check_autotransfer(M))
tally++
- if(autotransfer_max_amount > 0 && tally >= autotransfer_max_amount) break //CHOMPEdit End
+ if(autotransfer_max_amount > 0 && tally >= autotransfer_max_amount) break
var/play_sound //Potential sound to play at the end to avoid code duplication.
var/to_update = FALSE //Did anything update worthy happen?
- SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_PREY_LOOP) // CHOMPedit: signals listening atoms to update prey_loop. May be cancelled by early exit otherwise.
+ SEND_SIGNAL(src, COMSIG_BELLY_UPDATE_PREY_LOOP) // signals listening atoms to update prey_loop. May be cancelled by early exit otherwise.
/////////////////////////// Exit Early ////////////////////////////
- var/list/touchable_atoms = contents - items_preserved //CHOMPEdit Start
- for(var/mob/observer/G in touchable_atoms) //CHOMPEdit: don't bother trying to process ghosts.
+ var/list/touchable_atoms = contents - items_preserved
+ for(var/mob/observer/G in touchable_atoms) // don't bother trying to process ghosts.
touchable_atoms -= G
var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
if(!DM)
log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!")
return FALSE
if(digest_mode == DM_EGG)
- prey_loop() //CHOMPAdd - Apparently on Egg mode the sound loop never played before? Just slapping this here to fix that
+ prey_loop() //Apparently on Egg mode the sound loop never played before? Just slapping this here to fix that
if(DM.handle_atoms(src, contents))
updateVRPanels()
return
- if(!length(touchable_atoms) && !belly_surrounding.len) //CHOMPEdit - Needed to not exit early for indirect vorefx
+ if(!length(touchable_atoms) && !belly_surrounding.len) // Needed to not exit early for indirect vorefx
return
/////////////////////////// Sound Selections ///////////////////////////
@@ -67,7 +69,7 @@
///////////////////// Early Non-Mode Handling /////////////////////
- if(DM.handle_atoms(src, touchable_atoms)) //CHOMPEdit End
+ if(DM.handle_atoms(src, touchable_atoms))
updateVRPanels()
return
@@ -85,8 +87,8 @@
if(!digestion_noise_chance)
digestion_noise_chance = DM.noise_chance
- touchable_atoms -= items_preserved //CHOMPAdd
- HandleBellyReagentEffects(touchable_atoms) //CHOMPAdd
+ touchable_atoms -= items_preserved
+ HandleBellyReagentEffects(touchable_atoms)
/////////////////////////// Make any noise ///////////////////////////
if(digestion_noise_chance && prob(digestion_noise_chance))
@@ -95,7 +97,7 @@
SEND_SOUND(M, prey_digest)
play_sound = pred_digest
- if(!LAZYLEN(belly_surrounding)) //CHOMPEdit - Changed to belly_surrounding from touchable_mobs so indirect vore viewers get this too
+ if(!LAZYLEN(belly_surrounding)) //Changed to belly_surrounding from touchable_mobs so indirect vore viewers get this too
if(to_update)
updateVRPanels()
if(play_sound)
@@ -104,9 +106,9 @@
continue
if(isturf(M.loc) || (M.loc != src)) //to avoid people on the inside getting the outside sounds and their direct sounds + built in sound pref check
if(fancy_vore)
- M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq) //CHOMPEdit
+ M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq)
else
- M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq) //CHOMPEdit
+ M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq)
//these are all external sound triggers now, so it's ok.
return
@@ -131,17 +133,17 @@
continue
if(isturf(M.loc) || (M.loc != src)) //to avoid people on the inside getting the outside sounds and their direct sounds + built in sound pref check
if(fancy_vore)
- M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq) //CHOMPEdit
+ M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq)
else
- M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq) //CHOMPEdit
+ M.playsound_local(get_turf(owner), play_sound, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq)
//these are all external sound triggers now, so it's ok.
if(emote_active)
- //ChompEDIT START runtime, emote_lists can be = ""
+ // emote_lists can be = ""
var/list/EL
if(islist(emote_lists))
EL = emote_lists[digest_mode]
- //ChompEDIT END
+
if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD])) || (digest_mode == DM_SELECT && (LAZYLEN(emote_lists[DM_HOLD])||LAZYLEN(emote_lists[DM_DIGEST])||LAZYLEN(emote_lists[DM_ABSORB])) )) && next_emote <= world.time)
next_emote = world.time + (emote_time SECONDS)
for(var/mob/living/M in contents)
@@ -171,16 +173,13 @@
for(var/A in touchable_atoms)
//Handle eaten mobs
- if(isliving(A)) //CHOMPEdit Start
+ if(isliving(A))
var/mob/living/L = A
touchable_mobs += L
if(L.absorbed && !issilicon(L))
L.Weaken(5)
- // Fullscreen overlays
- //vore_fx(L) //CHOMPEdit - Don't update this every single process tick, damn.
-
//Handle 'human'
if(ishuman(L))
var/mob/living/carbon/human/H = L
@@ -193,18 +192,16 @@
//Thickbelly flag
if((mode_flags & DM_FLAG_THICKBELLY) && !H.muffled)
H.muffled = TRUE
- //CHOMPEdit Start - Fix muffled sometimes being sticky.
+ //Fix muffled sometimes being sticky.
else if(!(mode_flags & DM_FLAG_THICKBELLY) && H.muffled)
H.muffled = FALSE
- //CHOMPEdit End
//Force psay
if((mode_flags & DM_FLAG_FORCEPSAY) && !H.forced_psay && H.absorbed)
H.forced_psay = TRUE
- //CHOMPEdit Start - Fix forcepsay sometimes being sticky.
+ //Fix forcepsay sometimes being sticky.
else if(!(mode_flags & DM_FLAG_FORCEPSAY) && H.forced_psay)
H.forced_psay = FALSE
- //CHOMPEdit End
//Worn items flag
if(mode_flags & DM_FLAG_AFFECTWORN)
@@ -214,7 +211,7 @@
touchable_atoms |= I
//Stripping flag
- if((mode_flags & DM_FLAG_STRIPPING) && H.strip_pref) //CHOMPEdit Stripping pref check
+ if((mode_flags & DM_FLAG_STRIPPING) && H.strip_pref) //Stripping pref check
for(var/slot in slots)
var/obj/item/I = H.get_equipped_item(slot = slot)
if(I && H.unEquip(I, force = FALSE))
@@ -240,7 +237,7 @@
// but we also want the prob(25) chance to run for -every- item we look at, not just once
// More gurgles the better~
digestion_noise_chance = 25
- continue //CHOMPEdit end
+ continue
//get rid of things like blood drops and gibs that end up in there
else if(istype(A, /obj/effect/decal/cleanable))
@@ -249,7 +246,7 @@
return list("to_update" = to_update, "touchable_mobs" = touchable_mobs, "digestion_noise_chance" = digestion_noise_chance)
/obj/belly/proc/prey_loop()
- for(var/mob/living/M in belly_surrounding) //CHOMPEdit - contents changed to belly_surrounding to loop sound for indirect viewers too
+ for(var/mob/living/M in belly_surrounding) //contents changed to belly_surrounding to loop sound for indirect viewers too
//We don't bother executing any other code if the prey doesn't want to hear the noises.
if(!M.check_sound_preference(/datum/preference/toggle/digestion_noises))
M.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case, because byond is whack and you can't trust it
@@ -258,13 +255,13 @@
// We don't want the sounds to overlap, but we do want them to steadily replay.
// We also don't want the sounds to play if the pred hasn't marked this belly as fleshy, or doesn't
// have the right sounds to play.
- if(is_wet && wet_loop && (world.time > M.next_preyloop)) //CHOMPEdit - Removed isbelly(M.loc) as some viewers might be indirectly in the belly
+ if(is_wet && wet_loop && (world.time > M.next_preyloop)) //Removed isbelly(M.loc) as some viewers might be indirectly in the belly
M.stop_sound_channel(CHANNEL_PREYLOOP)
var/sound/preyloop = sound('sound/vore/sunesound/prey/loop.ogg')
- M.playsound_local(get_turf(src), preyloop, 80, 0, channel = CHANNEL_PREYLOOP, frequency = noise_freq) //CHOMPEdit
+ M.playsound_local(get_turf(src), preyloop, 80, 0, channel = CHANNEL_PREYLOOP, frequency = noise_freq)
M.next_preyloop = (world.time + (52 SECONDS))
-/obj/belly/proc/handle_digesting_item(obj/item/I, touchable_amount) //CHOMPEdit
+/obj/belly/proc/handle_digesting_item(obj/item/I, touchable_amount)
var/did_an_item = FALSE
// We always contaminate IDs.
if(contaminates || istype(I, /obj/item/card/id))
@@ -279,15 +276,15 @@
if(istype(R) && R.robotic >= ORGAN_ROBOT)
items_preserved |= I
else
- did_an_item = digest_item(I, touchable_amount) //CHOMPEdit
+ did_an_item = digest_item(I, touchable_amount)
else
items_preserved |= I
if(IM_DIGEST,IM_DIGEST_PARALLEL)
- did_an_item = digest_item(I, touchable_amount) //CHOMPEdit
+ did_an_item = digest_item(I, touchable_amount)
return did_an_item
-/obj/belly/proc/handle_digestion_death(mob/living/M, instant = FALSE) //CHOMPEdit
- if(!instant && slow_digestion) //CHOMPAdd Start: Gradual corpse digestion
+/obj/belly/proc/handle_digestion_death(mob/living/M, instant = FALSE)
+ if(!instant && slow_digestion) // Gradual corpse digestion
if(!M.digestion_in_progress)
M.digestion_in_progress = TRUE
if(M.health > -36 || (ishuman(M) && M.health > -136))
@@ -315,7 +312,7 @@
else
M.digestion_in_progress = FALSE
if(M.digestion_in_progress)
- return //CHOMPAdd End
+ return
var/digest_alert_owner = span_vnotice(belly_format_string(digest_messages_owner, M))
var/digest_alert_prey = span_vnotice(belly_format_string(digest_messages_prey, M))
var/compensation = M.maxHealth / 5 //Dead body bonus.
@@ -329,8 +326,8 @@
if(M.ckey)
GLOB.prey_digested_roundstat++
- owner.churn_count++ //CHOMPAdd
- owner.handle_special_unlocks() //CHOMPAdd
+ owner.churn_count++
+ owner.handle_special_unlocks()
var/personal_nutrition_modifier = M.get_digestion_nutrition_modifier()
var/pred_digestion_efficiency = owner.get_digestion_efficiency_modifier()
@@ -345,20 +342,11 @@
if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains)
handle_remains_leaving(M)
digestion_death(M)
- //if(!ishuman(owner)) CHOMPEdit Start
- // owner.update_icons()
- /*if(isrobot(owner))
- var/mob/living/silicon/robot/R = owner
- if(reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && reagents.total_volume < reagents.maximum_volume) //CHOMPedit: digestion producing reagents
- R.cell.charge += (nutrition_percent / 100) * compensation * 15 * personal_nutrition_modifier
- GenerateBellyReagents_digested()
- else
- R.cell.charge += (nutrition_percent / 100) * compensation * 25 * personal_nutrition_modifier*/
- if(show_liquids && reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && reagents.total_volume < reagents.maximum_volume) //CHOMP digestion producing reagents
+ if(show_liquids && reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && reagents.total_volume < reagents.maximum_volume) // digestion producing reagents
owner_adjust_nutrition((nutrition_percent / 100) * compensation * 3 * personal_nutrition_modifier)
GenerateBellyReagents_digested()
else
- owner_adjust_nutrition((nutrition_percent / 100) * compensation * 4.5 * personal_nutrition_modifier * pred_digestion_efficiency) //CHOMPedit end
+ owner_adjust_nutrition((nutrition_percent / 100) * compensation * 4.5 * personal_nutrition_modifier * pred_digestion_efficiency)
/obj/belly/proc/steal_nutrition(mob/living/L)
if(L.nutrition <= 110)
@@ -378,14 +366,14 @@
if(L.nutrition >= 100)
var/oldnutrition = (L.nutrition * 0.05)
L.nutrition = (L.nutrition * 0.95)
- if(show_liquids && reagent_mode_flags & DM_FLAG_REAGENTSDRAIN && reagents.total_volume < reagents.maximum_volume) //CHOMPedit: draining reagent production //Added to this proc now since it's used for draining
+ if(show_liquids && reagent_mode_flags & DM_FLAG_REAGENTSDRAIN && reagents.total_volume < reagents.maximum_volume) // draining reagent production //Added to this proc now since it's used for draining
owner_adjust_nutrition(oldnutrition * 0.75) //keeping the price static, due to how much nutrition can flunctuate
GenerateBellyReagents_absorbing() //Dont need unique proc so far
else
- owner_adjust_nutrition(oldnutrition) //CHOMPedit end
+ owner_adjust_nutrition(oldnutrition)
/obj/belly/proc/updateVRPanels()
- for(var/mob/living/M in belly_surrounding) //CHOMPEdit - Changed to belly_surrounding from contents so updates happen for indirect viewers too
+ for(var/mob/living/M in belly_surrounding) //Changed to belly_surrounding from contents so updates happen for indirect viewers too
if(M.client)
M.updateVRPanel()
if(owner.client)
diff --git a/code/modules/vore/eating/contaminate_vr.dm b/code/modules/vore/eating/contaminate_vr.dm
index dea259380a..27b0f8e6f2 100644
--- a/code/modules/vore/eating/contaminate_vr.dm
+++ b/code/modules/vore/eating/contaminate_vr.dm
@@ -18,7 +18,7 @@ var/list/gurgled_overlays = list(
/obj/item
var/gurgled = FALSE
- var/oldname //CHOMPEdit
+ var/oldname
var/cleanname
var/cleandesc
var/gurgled_color
@@ -33,7 +33,7 @@ var/list/gurgled_overlays = list(
if(!gurgled)
gurgled = TRUE
gurgled_color = contamination_color
- if(!isbelly(src.loc)) //CHOMPEdit: Moved non-worn overlay stuff to belly_obj_vr.dm Exited proc. No need to add overlays to things that won't make it out.
+ if(!isbelly(src.loc)) //Moved non-worn overlay stuff to belly_obj_vr.dm Exited proc. No need to add overlays to things that won't make it out.
add_overlay(gurgled_overlays[gurgled_color])
var/list/pickfrom = contamination_flavors[contamination_flavor]
var/gurgleflavor = pick(pickfrom)
diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm
index d438be9482..bd0912ed49 100644
--- a/code/modules/vore/eating/digest_act_vr.dm
+++ b/code/modules/vore/eating/digest_act_vr.dm
@@ -3,9 +3,9 @@
//return non-negative integer: Amount of nutrition/charge gained (scaled to nutrition, other end can multiply for charge scale).
// Ye default implementation.
-/obj/item/proc/digest_act(atom/movable/item_storage = null, touchable_amount, splashing = 0) //CHOMPEdit
- if(!digestable) //CHOMPAdd
- return FALSE //CHOMPAdd
+/obj/item/proc/digest_act(atom/movable/item_storage = null, touchable_amount, splashing = 0)
+ if(!digestable)
+ return FALSE
if(istype(item_storage, /obj/item/dogborg/sleeper))
if(istype(src, /obj/item/pda))
var/obj/item/pda/P = src
@@ -13,9 +13,9 @@
P.id = null
for(var/mob/living/voice/V in possessed_voice) // Delete voices.
- V.ghostize(0) //CHOMPAdd - Prevent Reenter Corpse sending observers to the shadow realm
- V.stat = DEAD //CHOMPAdd - Helps with autosleeving
- if(V.mind) V.mind.vore_death = 1 //CHOMPAdd - Digested item TFs get vore_death timer
+ V.ghostize(0) // Prevent Reenter Corpse sending observers to the shadow realm
+ V.stat = DEAD // Helps with autosleeving
+ if(V.mind) V.mind.vore_death = 1 // Digested item TFs get vore_death timer
qdel(V)
for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion
M.forceMove(item_storage)
@@ -35,7 +35,7 @@
if(digest_stage == null)
digest_stage = w_class
- var/obj/belly/B //CHOMPEdit Start
+ var/obj/belly/B
if(isbelly(item_storage))
B = item_storage
if(!touchable_amount)
@@ -79,10 +79,6 @@
var/obj/item/pda/P = src
if(P.id)
P.id = null
- /* CHOMPEdit Start - This is handled lower down now
- for(var/mob/living/voice/V in possessed_voice) // Delete voices.
- qdel(V) //Destroy the voice.
- CHOMPEdit End */
for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion
if(item_storage)
M.forceMove(item_storage)
@@ -111,17 +107,16 @@
soundfile = pick('sound/vore/shortgurgles/gurgle_M1.ogg', 'sound/vore/shortgurgles/gurgle_M2.ogg', 'sound/vore/shortgurgles/gurgle_M3.ogg')
else
soundfile = pick('sound/vore/shortgurgles/gurgle_S1.ogg', 'sound/vore/shortgurgles/gurgle_S2.ogg', 'sound/vore/shortgurgles/gurgle_S3.ogg')
- playsound(src, soundfile, vol = g_sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit
- //CHOMPEdit Start - Allow those turned into items to become the recycled item
- var/recycled = B.recycle(src)
+ playsound(src, soundfile, vol = g_sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, frequency = noise_freq, preference = /datum/preference/toggle/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
+ //Allow those turned into items to become the recycled item
+ var/recycled = B?.recycle(src)
if(!recycled)
for(var/mob/living/voice/V in possessed_voice) // Delete voices.
- V.ghostize(0) //CHOMPAdd - Prevent Reenter Corpse sending observers to the shadow realm
- V.stat = DEAD //CHOMPAdd - Helps with autosleeving
- if(V.mind) V.mind.vore_death = 1 //CHOMPAdd - Digested item TFs get vore_death timer
+ V.ghostize(0) //Prevent Reenter Corpse sending observers to the shadow realm
+ V.stat = DEAD //Helps with autosleeving
+ if(V.mind) V.mind.vore_death = 1 //Digested item TFs get vore_death timer
qdel(V) //Destroy the voice.
if(istype(B) && recycled)
- //CHOMPEdit End
g_damage = w_class / 2
if(B.item_digest_logs)
to_chat(B.owner,span_notice("[src] was digested inside your [lowertext(B.name)]."))
@@ -149,7 +144,7 @@
new goodmeal.trash(src)
if(B.item_digest_logs)
to_chat(B.owner,span_notice("[src] was digested inside your [lowertext(B.name)]."))
- qdel(src)//CHOMPEdit End
+ qdel(src)
if(g_damage > w_class)
return w_class
return g_damage
@@ -191,18 +186,6 @@
update_icon()
return FALSE
-/*obj/item/reagent_containers/food/digest_act(atom/movable/item_storage = null) //CHOMPEdit: Included in main proc above.
- if(isbelly(item_storage))
- var/obj/belly/B = item_storage
- if(ishuman(B.owner) && reagents) //CHOMPEdit Start
- var/mob/living/carbon/human/H = B.owner
- reagents.trans_to_holder(H.ingested, (reagents.total_volume * 0.5), 1, 0)
- else if(isliving(B.owner))
- B.owner.nutrition += 15 * w_class //CHOMPEdit End
- qdel(src)
- return w_class
- . = ..()*/
-
/obj/item/holder/digest_act(atom/movable/item_storage = null)
for(var/mob/living/M in contents)
if(item_storage)
@@ -224,21 +207,21 @@
. = ..()
-/obj/item/debris_pack/digested/digest_act(atom/movable/item_storage = null) //CHOMPAdd
+/obj/item/debris_pack/digested/digest_act(atom/movable/item_storage = null)
if(isbelly(item_storage))
var/obj/belly/B = item_storage
if(istype(B) && B.recycling)
return FALSE
. = ..()
-/obj/item/ore_chunk/digest_act(atom/movable/item_storage = null) //CHOMPAdd
+/obj/item/ore_chunk/digest_act(atom/movable/item_storage = null)
if(isbelly(item_storage))
var/obj/belly/B = item_storage
if(istype(B) && B.recycling)
return FALSE
. = ..()
-/obj/item/reagent_containers/food/rawnutrition/digest_act(atom/movable/item_storage = null) //CHOMPAdd
+/obj/item/reagent_containers/food/rawnutrition/digest_act(atom/movable/item_storage = null)
if(isbelly(item_storage))
var/obj/belly/B = item_storage
if(istype(B) && B.storing_nutrition)
@@ -257,11 +240,11 @@
//Replace this with a VORE setting so all types of posibrains can/can't be digested on a whim
return FALSE
-//CHOMPEdit - moved prot organ digest to their appropriate file
+//moved prot organ digest to their appropriate file
// Gradual damage measurement
/obj/item
var/digest_stage = null
- var/d_mult_old = 1 //CHOMPEdit: digest stage descriptions
- var/d_mult = 1 //CHOMPEdit: digest stage descriptions
- var/d_stage_overlay //CHOMPEdit: digest stage effects
+ var/d_mult_old = 1 //digest stage descriptions
+ var/d_mult = 1 //digest stage descriptions
+ var/d_stage_overlay //digest stage effects
diff --git a/code/modules/vore/eating/exportpanel_vr.dm b/code/modules/vore/eating/exportpanel_vr.dm
index ad5c82b7ac..4d56270f1b 100644
--- a/code/modules/vore/eating/exportpanel_vr.dm
+++ b/code/modules/vore/eating/exportpanel_vr.dm
@@ -154,7 +154,6 @@
for(var/msg in B.secondary_transfer_messages_prey)
belly_data["secondary_transfer_messages_prey"] += msg
- // CHOMPEnable Start
belly_data["primary_autotransfer_messages_owner"] = list()
for(var/msg in B.primary_autotransfer_messages_owner)
belly_data["primary_autotransfer_messages_owner"] += msg
@@ -170,7 +169,6 @@
belly_data["secondary_autotransfer_messages_prey"] = list()
for(var/msg in B.secondary_autotransfer_messages_prey)
belly_data["secondary_autotransfer_messages_prey"] += msg
- // CHOMPEnable End
belly_data["digest_chance_messages_owner"] = list()
for(var/msg in B.digest_chance_messages_owner)
@@ -280,7 +278,7 @@
belly_data["digest_clone"] = B.digest_clone
belly_data["can_taste"] = B.can_taste
- belly_data["is_feedable"] = B.is_feedable // CHOMPEnable
+ belly_data["is_feedable"] = B.is_feedable
belly_data["contaminates"] = B.contaminates
belly_data["contamination_flavor"] = B.contamination_flavor
belly_data["contamination_color"] = B.contamination_color
@@ -291,25 +289,19 @@
belly_data["emote_active"] = B.emote_active
belly_data["emote_time"] = B.emote_time
belly_data["shrink_grow_size"] = B.shrink_grow_size
- // CHOMPEnable Start
belly_data["vorespawn_blacklist"] = B.vorespawn_blacklist
belly_data["vorespawn_whitelist"] = B.vorespawn_whitelist
belly_data["vorespawn_absorbed"] = B.vorespawn_absorbed
- // CHOMPEnable End
belly_data["egg_type"] = B.egg_type
- // CHOMPEnable Start
belly_data["egg_name"] = B.egg_name
belly_data["egg_size"] = B.egg_size
- // CHOMPEnable End
belly_data["selective_preference"] = B.selective_preference
- // CHOMPEnable Start
belly_data["recycling"] = B.recycling
belly_data["storing_nutrition"] = B.storing_nutrition
belly_data["entrance_logs"] = B.entrance_logs
belly_data["item_digest_logs"] = B.item_digest_logs
belly_data["eating_privacy_local"] = B.eating_privacy_local
belly_data["private_struggle"] = B.private_struggle
- // CHOMPEnable End
// Sounds
belly_data["is_wet"] = B.is_wet
@@ -317,10 +309,8 @@
belly_data["fancy_vore"] = B.fancy_vore
belly_data["vore_sound"] = B.vore_sound
belly_data["release_sound"] = B.release_sound
- // CHOMPEnable Start
belly_data["sound_volume"] = B.sound_volume
belly_data["noise_freq"] = B.noise_freq
- // CHOMPEnable End
// Visuals
belly_data["affects_vore_sprites"] = B.affects_vore_sprites
@@ -331,8 +321,8 @@
belly_data["vore_sprite_flags"] = sprite_flags
belly_data["count_absorbed_prey_for_sprite"] = B.count_absorbed_prey_for_sprite
belly_data["absorbed_multiplier"] = B.absorbed_multiplier
- belly_data["count_liquid_for_sprite"] = B.count_liquid_for_sprite // CHOMPEnable
- belly_data["liquid_multiplier"] = B.liquid_multiplier // CHOMPEnable
+ belly_data["count_liquid_for_sprite"] = B.count_liquid_for_sprite
+ belly_data["liquid_multiplier"] = B.liquid_multiplier
belly_data["count_items_for_sprite"] = B.count_items_for_sprite
belly_data["item_multiplier"] = B.item_multiplier
belly_data["health_impacts_size"] = B.health_impacts_size
@@ -348,18 +338,16 @@
//belly_data["tail_extra_overlay2"] = B.tail_extra_overlay2
// Visuals (Belly Fullscreens Preview and Coloring)
- // CHOMPEnable Start
belly_data["belly_fullscreen_color"] = B.belly_fullscreen_color
belly_data["belly_fullscreen_color2"] = B.belly_fullscreen_color2
belly_data["belly_fullscreen_color3"] = B.belly_fullscreen_color3
belly_data["belly_fullscreen_color4"] = B.belly_fullscreen_color4
belly_data["belly_fullscreen_alpha"] = B.belly_fullscreen_alpha
belly_data["colorization_enabled"] = B.colorization_enabled
- // CHOMPEnable End
// Visuals (Vore FX)
belly_data["disable_hud"] = B.disable_hud
- belly_data["belly_fullscreen"] = B.belly_fullscreen // CHOMPEnable
+ belly_data["belly_fullscreen"] = B.belly_fullscreen
// Interactions
belly_data["escapable"] = B.escapable
@@ -368,7 +356,7 @@
belly_data["escapechance_absorbed"] = B.escapechance_absorbed
belly_data["escapetime"] = B.escapetime/10
- belly_data["belchchance"] = B.belchchance // CHOMPEnable
+ belly_data["belchchance"] = B.belchchance
belly_data["transferchance"] = B.transferchance
belly_data["transferlocation"] = B.transferlocation
@@ -380,7 +368,6 @@
belly_data["digestchance"] = B.digestchance
// Interactions (Auto-Transfer)
- // CHOMPEnable Start
belly_data["autotransferchance"] = B.autotransferchance
belly_data["autotransferwait"] = B.autotransferwait/10
belly_data["autotransferlocation"] = B.autotransferlocation
@@ -463,12 +450,10 @@
if(B.reagent_mode_flags & B.reagent_mode_flag_list[flag_name])
reagent_flags.Add(flag_name)
belly_data["reagent_mode_flag_list"] = reagent_flags
- // CHOMPEnable End
data["bellies"] += list(belly_data)
// Liquid Messages
- // CHOMPEnable Start
belly_data["show_fullness_messages"] = B.show_fullness_messages
belly_data["liquid_fullness1_messages"] = B.liquid_fullness1_messages
belly_data["liquid_fullness2_messages"] = B.liquid_fullness2_messages
@@ -495,6 +480,5 @@
belly_data["fullness5_messages"] = list()
for(var/msg in B.fullness5_messages)
belly_data["fullness5_messages"] += msg
- // CHOMPEnable End
return data
diff --git a/code/modules/vore/eating/inbelly_spawn.dm b/code/modules/vore/eating/inbelly_spawn.dm
index 655ad0e483..1971d4ad9c 100644
--- a/code/modules/vore/eating/inbelly_spawn.dm
+++ b/code/modules/vore/eating/inbelly_spawn.dm
@@ -27,7 +27,7 @@ Please do not abuse this ability.
continue
if(ishuman(pred))
var/mob/living/carbon/human/H = pred
- if(!H.latejoin_vore) //CHOMPEdit - Changes pref to the same as vorespawn pred
+ if(!H.latejoin_vore)
continue
eligible_targets += H
continue
@@ -35,7 +35,7 @@ Please do not abuse this ability.
var/mob/living/silicon/S = pred
if(isAI(S))
continue // Sorry, AI buddies. Your vore works too differently.
- if(!S.latejoin_vore) //CHOMPEdit - Changes pref to the same as vorespawn pred
+ if(!S.latejoin_vore)
continue
eligible_targets += S
continue
@@ -43,7 +43,7 @@ Please do not abuse this ability.
var/mob/living/simple_mob/SM = pred
if(!SM.vore_active) // No vore, no bellies, no inbelly spawning
continue
- if(!SM.latejoin_vore) //CHOMPEdit - Changes pref to the same as vorespawn pred
+ if(!SM.latejoin_vore)
continue
eligible_targets += SM
continue
diff --git a/code/modules/vore/eating/leave_remains_vr.dm b/code/modules/vore/eating/leave_remains_vr.dm
index ece022f889..5d39e212cd 100644
--- a/code/modules/vore/eating/leave_remains_vr.dm
+++ b/code/modules/vore/eating/leave_remains_vr.dm
@@ -24,7 +24,6 @@
skull_type = /obj/item/digestion_remains/skull/teshari
/datum/species/vox
skull_type = /obj/item/digestion_remains/skull/vox
-//CHOMPadd start
/datum/species/monkey
skull_type = /obj/item/digestion_remains/skull
/datum/species/monkey/tajaran
@@ -41,7 +40,6 @@
skull_type = /obj/item/digestion_remains/skull/vulpkanin
/datum/species/monkey/sergal
skull_type = /obj/item/digestion_remains/skull/sergal
-//CHOMPadd end.
/obj/belly/proc/handle_remains_leaving(var/mob/living/M)
if(!ishuman(M) && !isrobot(M)) //Are we even humanoid or a borg?
@@ -91,18 +89,18 @@
return // TODO: add synth skulls and remove this.
var/skull_amount = 1
if(H.species.skull_type)
- new H.species.skull_type(src, owner, H) //CHOMPEdit
+ new H.species.skull_type(src, owner, H)
skull_amount--
if(skull_amount && H.species.selects_bodytype)
// We still haven't found correct skull...
if(H.species.base_species == SPECIES_HUMAN)
- new /obj/item/digestion_remains/skull/unknown(src, owner, H) //CHOMPEdit
+ new /obj/item/digestion_remains/skull/unknown(src, owner, H)
else
- new /obj/item/digestion_remains/skull/unknown/anthro(src, owner, H) //CHOMPEdit
+ new /obj/item/digestion_remains/skull/unknown/anthro(src, owner, H)
else if(skull_amount)
// Something entirely different...
- new /obj/item/digestion_remains/skull/unknown(src, owner, H) //CHOMPEdit
+ new /obj/item/digestion_remains/skull/unknown(src, owner, H)
/obj/item/digestion_remains
@@ -126,12 +124,12 @@
drop_sound = 'sound/items/drop/device.ogg' //not organic bones, so they get different sounds
pickup_sound = 'sound/items/pickup/device.ogg'
-/obj/item/digestion_remains/Initialize(mapload, var/mob/living/pred, var/mob/living/prey) //CHOMPEdit
+/obj/item/digestion_remains/Initialize(mapload, var/mob/living/pred, var/mob/living/prey)
. = ..()
if(!mapload)
pred_ckey = pred?.ckey
pred_name = pred?.name
- if(prey && isliving(prey) && prey.size_multiplier != 1) //CHOMPAdd
+ if(prey && isliving(prey) && prey.size_multiplier != 1)
icon_scale_x = prey.size_multiplier
icon_scale_y = prey.size_multiplier
update_transform()
diff --git a/code/modules/vore/eating/living_bellies.dm b/code/modules/vore/eating/living_bellies.dm
index b02c991b5a..e3595c03fa 100644
--- a/code/modules/vore/eating/living_bellies.dm
+++ b/code/modules/vore/eating/living_bellies.dm
@@ -1,12 +1,7 @@
-/mob/proc/update_fullness(var/returning = FALSE)
- if(!returning)
- if(updating_fullness)
- return
- updating_fullness = TRUE
- spawn(2)
- updating_fullness = FALSE
- src.update_fullness(TRUE)
+/mob/proc/update_fullness()
+ if(updating_fullness)
return
+ updating_fullness = TRUE
var/list/new_fullness = list()
vore_fullness = 0
for(var/belly_class in vore_icon_bellies)
diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm
deleted file mode 100644
index cf34ca8f0a..0000000000
--- a/code/modules/vore/eating/living_ch.dm
+++ /dev/null
@@ -1,324 +0,0 @@
-///////////////////// Mob Living /////////////////////
-/mob/living
- // var/list/vore_organs_reagents = list() //Reagent datums in vore bellies in a mob
- // var/vore_footstep_volume = 0 //Variable volume for a mob, updated every 5 steps where a footstep hasnt occurred.
- // var/vore_footstep_chance = 0
- // var/vore_footstep_volume_cooldown = 0 //goes up each time a step isnt heard, and will proc update of list of viable bellies to determine the most filled and loudest one to base audio on.
- var/mute_entry = FALSE //Toggleable vorgan entry logs.
- var/parasitic = FALSE //Digestion immunity and nutrition leeching variable
- var/liquidbelly_visuals = TRUE //Toggle for liquidbelly level visuals.
- var/churn_count = 0 //Counter for digested livings
-
- var/passtable_reset // For crawling
- var/passtable_crawl_checked = FALSE
-
-/mob/living/proc/handle_special_unlocks()
- return
-
-/* This is an ELEMENT now
-/mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
- if(vore_footstep_volume_cooldown++ >= 5) //updating the 'dominating' belly, the one that has most liquid and is loudest.
- choose_vorefootstep()
- vore_footstep_volume_cooldown = 0
-
- if(!vore_footstep_volume || !vore_footstep_chance) //Checking if there is actual sound if we run the proc
- return
-
- if(prob(vore_footstep_chance)) //Peform the check, lets see if we trigger a sound
- handle_vorefootstep(m_intent, T)
-
-
-//Proc to choose the belly that has most liquid in it and is currently dominant for audio
-/mob/living/proc/choose_vorefootstep()
- vore_organs_reagents = list()
- var/highest_vol = 0
-
- for(var/obj/belly/B in vore_organs)
- var/total_volume = B.reagents.total_volume
- vore_organs_reagents += total_volume
-
- if(B.show_liquids && B.vorefootsteps_sounds && highest_vol < total_volume)
- highest_vol = total_volume
-
- if(highest_vol < 20) //For now the volume will be off if less than 20 units of reagent are in vorebellies
- vore_footstep_volume = 0
- vore_footstep_chance = 0
- else //Volume will start at least at 20 so theres more initial sound
- vore_footstep_volume = 20 + highest_vol * 4/5
- vore_footstep_chance = highest_vol/4
-*/
-
-//
-// Returns examine messages for how much reagents are in bellies
-//
-/mob/living/proc/examine_reagent_bellies()
- if(!show_pudge()) //Some clothing or equipment can hide this. Reagent inflation is not very different in this aspect.
- return ""
-
- var/message = ""
- for (var/belly in vore_organs)
- var/obj/belly/B = belly
-
- var/fill_percentage = B.reagents.maximum_volume > 0 ? B.reagents.total_volume / B.reagents.maximum_volume : 0
-
- if(0 <= fill_percentage && fill_percentage <= 0.2 && B.show_fullness_messages)
- message += B.get_reagent_examine_msg1()
- if(0.2 < fill_percentage && fill_percentage <= 0.4 && B.show_fullness_messages)
- message += B.get_reagent_examine_msg2()
- if(0.4 < fill_percentage && fill_percentage <= 0.6 && B.show_fullness_messages)
- message += B.get_reagent_examine_msg3()
- if(0.6 < fill_percentage && fill_percentage <= 0.8 && B.show_fullness_messages)
- message += B.get_reagent_examine_msg4()
- if(0.8 < fill_percentage && fill_percentage <= 1 && B.show_fullness_messages)
- message += B.get_reagent_examine_msg5()
-
- return message
-
-/mob/living/proc/vore_check_reagents()
- set name = "Check Belly Liquid (Vore)"
- set category = "Abilities.Vore"
- set desc = "Check the amount of liquid in your belly."
-
- var/obj/belly/RTB = tgui_input_list(src, "Choose which vore belly to check", "Select Belly", vore_organs)
- if(!RTB)
- return FALSE
-
- to_chat(src, span_vnotice("[RTB] has [RTB.reagents.total_volume] units of liquid."))
-
-/mob/living/proc/vore_transfer_reagents()
- set name = "Transfer Liquid (Vore)"
- set category = "Abilities.Vore"
- set desc = "Transfer liquid from an organ to another or stomach, or into another person or container."
- set popup_menu = FALSE
-
- if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT))
- return FALSE
-
- var/mob/living/user = src
-
- var/mob/living/TG = tgui_input_list(user, "Choose who to transfer from", "Transfer From", mobs_in_view(1,user))
- if(!TG)
- return FALSE
- if(TG.give_reagents == FALSE && user != TG) //User isnt forced to allow giving in prefs if they are the one doing it
- to_chat(user, span_vwarning("This person's prefs dont allow that!"))
- return FALSE
-
- var/obj/belly/RTB = tgui_input_list(user, "Choose which vore belly to transfer from", "Select Belly", vore_organs)
- if(!RTB)
- return FALSE
-
- var/transfer_amount = input("How much to transfer?") in list(5,10,25,50,100)
- if(!transfer_amount)
- return FALSE
-
- switch(input(user,"Choose what to transfer to","Select Target") in list("Vore belly", "Stomach", "Container", "Floor", "Cancel"))
- if("Cancel")
- return FALSE
- if("Vore belly")
- var/mob/living/TR = tgui_input_list(user,"Choose who to transfer to","Select Target", mobs_in_view(1,user))
- if(!TR) return FALSE
-
- if(TR == user) //Proceed, we dont need to have prefs enabled for transfer within user
- var/obj/belly/TB = tgui_input_list(user, "Choose which organ to transfer to", "Select Belly", user.vore_organs)
- if(!TB)
- return FALSE
- if(!Adjacent(TR) || !Adjacent(TG))
- return //No long distance transfer
- if(!TB.reagents?.get_free_space())
- to_chat(user, span_vnotice("[TB] is full!"))
- return FALSE
-
- if(TG == user)
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into their [lowertext(TB.name)]."))
- else
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their [lowertext(TB.name)]."))
- add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
- RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
- if(RTB.count_liquid_for_sprite || TB.count_liquid_for_sprite)
- handle_belly_update()
-
- else if(TR.receive_reagents == FALSE)
- to_chat(user, span_vwarning("This person's prefs dont allow that!"))
- return FALSE
-
- else
- var/obj/belly/TB = tgui_input_list(user, "Choose which organ to transfer to", "Select Belly", TR.vore_organs)
- if(!TB)
- return FALSE
- if(!Adjacent(TR) || !Adjacent(TG))
- return //No long distance transfer
- if(!TB.reagents?.get_free_space())
- to_chat(user, span_vnotice("[TR]'s [lowertext(TB.name)] is full!"))
- return FALSE
-
- if(TG == user)
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [TR]'s [lowertext(TB.name)]."))
- else
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]s [lowertext(RTB.name)] into [TR]'s [lowertext(TB.name)]."))
-
- RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
- add_attack_logs(user,TR,"Transfered reagents from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
- if(RTB.count_liquid_for_sprite)
- handle_belly_update()
- if(TB.count_liquid_for_sprite)
- TR.handle_belly_update()
-
-
- if("Stomach")
- var/mob/living/TR = tgui_input_list(user,"Choose who to transfer to","Select Target", mobs_in_view(1,user))
- if(!TR) return
- if(!Adjacent(TR) || !Adjacent(TG))
- return //No long distance transfer
-
- if(TR == user) //Proceed, we dont need to have prefs enabled for transfer within user
- if(TG == user)
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into their stomach."))
- else
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their stomach."))
- RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
- add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach")
- if(RTB.count_liquid_for_sprite)
- handle_belly_update()
-
- else if(TR.receive_reagents == FALSE)
- to_chat(user, span_vwarning("This person's prefs dont allow that!"))
- return FALSE
-
- else
- if(TG == user)
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [TR]'s stomach."))
- else
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into [TR]'s stomach."))
-
- RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
- add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") //Bonus for staff so they can see if people have abused transfer and done pref breaks
- if(RTB.count_liquid_for_sprite)
- handle_belly_update()
-
- if("Container")
- if(RTB.reagentid == REAGENT_ID_STOMACID)
- return
- var/list/choices = list()
- for(var/obj/item/reagent_containers/rc in view(1,user.loc))
- choices += rc
- var/obj/item/reagent_containers/T = tgui_input_list(user,"Choose what to transfer to","Select Target", choices)
- if(!T)
- return FALSE
- if(!Adjacent(T) || !Adjacent(TG))
- return //No long distance transfer
-
- if(TG == user)
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [T]."))
- else
- user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into [T]."))
-
- RTB.reagents.vore_trans_to_con(T, transfer_amount, 1, 0)
- add_attack_logs(user, T,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to a [T]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
- if(RTB.count_liquid_for_sprite)
- handle_belly_update()
- if("Floor")
- if(RTB.reagentid == REAGENT_ID_WATER)
- return
- var/amount_removed = RTB.reagents.remove_any(transfer_amount)
- if(RTB.count_liquid_for_sprite)
- handle_belly_update()
- var/puddle_amount = round(amount_removed/5)
-
- if(puddle_amount == 0)
- to_chat(user,span_vnotice("[RTB.reagent_name] dripples from the [lowertext(RTB.name)], not enough to form a puddle."))
- return
-
- if(TG == user)
- user.custom_emote_vr(1, span_vnotice("spills [RTB.reagent_name] from their [lowertext(RTB.name)] onto the floor!"))
- else
- user.custom_emote_vr(1, span_vnotice("spills [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] onto the floor!"))
-
- var/obj/effect/decal/cleanable/blood/reagent/puddle = null
- if (RTB.custom_reagentcolor)
- puddle = new /obj/effect/decal/cleanable/blood/reagent(RTB.reagent_name, RTB.custom_reagentcolor, RTB.reagentid, puddle_amount, user.ckey, TG.ckey)
- else
- puddle = new /obj/effect/decal/cleanable/blood/reagent(RTB.reagent_name, RTB.reagentcolor, RTB.reagentid, puddle_amount, user.ckey, TG.ckey)
-
- puddle.loc = TG.loc
-
- var/soundfile
- if(!RTB.fancy_vore)
- soundfile = classic_release_sounds[RTB.release_sound]
- else
- soundfile = fancy_release_sounds[RTB.release_sound]
- if(soundfile)
- playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/preference/toggle/eating_noises)
-
-/mob/living/proc/vore_bellyrub(var/mob/living/T in view(1,src))
- set name = "Give Bellyrubs"
- set category = "Abilities.General"
- set desc = "Provide bellyrubs to either yourself or another mob with a belly."
-
- if(!T)
- T = tgui_input_list(src, "Choose whose belly to rub", "Rub Belly?", mobs_in_view(1,src))
- if(!T)
- return FALSE
- if(!(T in view(1,src)))
- return FALSE
- if(T.vore_selected)
- var/obj/belly/B = T.vore_selected
- if(istype(B))
- if(T == src)
- custom_emote_vr(1, "rubs their [belly_rub_target ? belly_rub_target : lowertext(B.name)].")
- else
- custom_emote_vr(1, "gives some rubs over [T]'s [belly_rub_target ? belly_rub_target : lowertext(B.name)].")
- B.quick_cycle()
- return TRUE
- to_chat(src, span_vwarning("There is no suitable belly for rubs."))
- return FALSE
-
-/mob/living/proc/mute_entry()
- set name = "Mute Vorgan Entrance"
- set category = "Preferences.Vore"
- set desc = "Mute the chatlog messages when something enters a vore belly."
- mute_entry = !mute_entry
- to_chat(src, span_vwarning("Entrance logs [mute_entry ? "disabled" : "enabled"]."))
-
-/mob/living/proc/restrict_trasheater()
- set name = "Restrict Trash Eater"
- set category = "Abilities.Vore"
- set desc = "Toggle Trash Eater restriction level."
- adminbus_trash = !adminbus_trash
- to_chat(src, span_vwarning("Trash Eater restriction level set to [adminbus_trash ? "everything not blacklisted" : "only whitelisted items"]."))
-
-/mob/living/proc/liquidbelly_visuals()
- set name = "Toggle Liquidbelly Visuals"
- set category = "Preferences.Vore"
- set desc = "Toggle liquidbelly fullscreen visual effect."
- liquidbelly_visuals = !liquidbelly_visuals
- to_chat(src, span_vwarning("Liquidbelly overlays [liquidbelly_visuals ? "enabled" : "disabled"]."))
-
-/mob/living/proc/fix_vore_effects()
- set name = "Fix Vore Effects"
- set category = "OOC.Debug"
- set desc = "Fix certain vore effects lingering after you've exited a belly."
-
- if(!isbelly(src.loc))
- if(alert(src, "Only use this verb if you are affected by certain vore effects outside of a belly, such as muffling or a stuck belly fullscreen.", "Clear Vore Effects", "Continue", "Nevermind") != "Continue")
- return
-
- absorbed = FALSE
- muffled = FALSE
- clear_fullscreen("belly")
- clear_fullscreen(ATOM_BELLY_FULLSCREEN)
- stop_sound_channel(CHANNEL_PREYLOOP)
-
-/mob/living/verb/vore_check_nutrition()
- set name = "Check Nutrition"
- set category = "Abilities.Vore"
- set desc = "Check your current nutrition level."
- to_chat(src, span_vnotice("Current nutrition level: [nutrition]."))
-
-// This proc will either return the first belly the mob is in or return null if they're not in one
-/mob/living/proc/surrounding_belly()
- var/atom/curloc = src.loc
- while(curloc && !isbelly(curloc))
- if(istype(curloc, /turf)) break
- if(!curloc.loc || curloc == curloc.loc) break
- curloc = curloc.loc
- if(isbelly(curloc)) return curloc
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 1540ad255b..2148c78b33 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -17,8 +17,6 @@
var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr.
var/drain_finalized = 0 // Determines if the succubus drain will be KO'd/absorbed. Can be toggled on at any time.
var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon.
-// var/voice_freq = 0 // Preference for character voice frequency CHOMPEdit - Moved to modular_chomp/code/modules/mob/mob.dm
-// var/list/voice_sounds_list = list() // The sound list containing our voice sounds! CHOMPEdit - Moved to modular_chomp/code/modules/mob/mob.dm
var/next_preyloop // For Fancy sound internal loop
var/stuffing_feeder = FALSE // Can feed foods to others whole, like trash eater can eat them on their own.
var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans.
@@ -26,7 +24,7 @@
var/vis_height = 32 // Sprite height used for resize features.
var/appendage_color = "#e03997" //Default pink. Used for the 'long_vore' trait.
var/appendage_alt_setting = FALSE // Dictates if 'long_vore' user pulls prey to them or not. 1 = user thrown towards target.
- var/digestion_in_progress = FALSE // CHOMPEdit: Gradual corpse gurgles
+ var/digestion_in_progress = FALSE // Gradual corpse gurgles
var/regen_sounds = list(
'sound/effects/mob_effects/xenochimera/regen_1.ogg',
'sound/effects/mob_effects/xenochimera/regen_2.ogg',
@@ -40,6 +38,17 @@
var/trait_injection_amount = 5 //RSEdit: How much you're injecting with traits.
var/trait_injection_verb = "bites" //RSEdit: Which fluffy manner you're doing the injecting.
+ var/mute_entry = FALSE //Toggleable vorgan entry logs.
+ var/parasitic = FALSE //Digestion immunity and nutrition leeching variable
+ var/liquidbelly_visuals = TRUE //Toggle for liquidbelly level visuals.
+ var/churn_count = 0 //Counter for digested livings
+
+ var/passtable_reset // For crawling
+ var/passtable_crawl_checked = FALSE
+
+/mob/living/proc/handle_special_unlocks()
+ return
+
//
// Hook for generic creation of stuff on new creatures
//
@@ -56,12 +65,10 @@
/mob/proc/init_vore()
//Something else made organs, meanwhile.
if(!isnewplayer(src))
- AddElement(/datum/element/slosh) // CHOMPEdit - Sloshy element
+ AddElement(/datum/element/slosh)
if(LAZYLEN(vore_organs))
- //CHOMPAdd Start
if(!soulgem)
soulgem = new(src)
- //CHOMPAdd End
return TRUE
//We'll load our client's organs if we have one
@@ -86,11 +93,9 @@
var/mob/living/carbon/human/H = src
if(istype(H.species,/datum/species/monkey))
allow_spontaneous_tf = TRUE
- //CHOMPAdd Start
if(!soulgem)
soulgem = new(src)
return TRUE
- //CHOMPAdd End
/mob/living/init_vore()
if(no_vore)
@@ -267,6 +272,7 @@
P.slip_vore = src.slip_vore
P.throw_vore = src.throw_vore
P.food_vore = src.food_vore
+ P.consume_liquid_belly = src.consume_liquid_belly
P.digest_pain = src.digest_pain
P.stumble_vore = src.stumble_vore
P.eating_privacy_global = src.eating_privacy_global
@@ -276,10 +282,9 @@
P.nutrition_messages = src.nutrition_messages
P.weight_message_visible = src.weight_message_visible
P.weight_messages = src.weight_messages
- P.vore_sprite_color = src.vore_sprite_color // CHOMPEdit
+ P.vore_sprite_color = src.vore_sprite_color
P.allow_mind_transfer = src.allow_mind_transfer
- //CHOMP stuff Start
P.phase_vore = src.phase_vore
P.noisy_full = src.noisy_full
P.latejoin_vore = src.latejoin_vore
@@ -298,7 +303,6 @@
P.no_latejoin_prey_warning_persists = src.no_latejoin_prey_warning_persists
P.belly_rub_target = src.belly_rub_target
P.soulcatcher_pref_flags = src.soulcatcher_pref_flags
- //CHOMP Stuff End
var/list/serialized = list()
for(var/obj/belly/B as anything in src.vore_organs)
@@ -306,13 +310,13 @@
P.belly_prefs = serialized
- P.soulcatcher_prefs = src.soulgem.serialize() // CHOMPAdd
+ P.soulcatcher_prefs = src.soulgem.serialize()
return TRUE
//
// Proc for applying vore preferences, given bellies
//
-/mob/proc/copy_from_prefs_vr(var/bellies = TRUE, var/full_vorgans = FALSE) //CHOMPedit: full_vorgans var to bypass 1-belly load optimization.
+/mob/proc/copy_from_prefs_vr(var/bellies = TRUE, var/full_vorgans = FALSE) // full_vorgans var to bypass 1-belly load optimization.
if(!client || !client.prefs_vr)
to_chat(src,span_warning("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
@@ -334,7 +338,6 @@
show_vore_fx = P.show_vore_fx
can_be_drop_prey = P.can_be_drop_prey
can_be_drop_pred = P.can_be_drop_pred
-// allow_inbelly_spawning = P.allow_inbelly_spawning //CHOMP Removal: we have vore spawning at home. Actually if this were to be enabled, it would break anyway. Just leaving this here as a reference to it.
allow_spontaneous_tf = P.allow_spontaneous_tf
step_mechanics_pref = P.step_mechanics_pref
pickup_pref = P.pickup_pref
@@ -343,6 +346,7 @@
throw_vore = P.throw_vore
stumble_vore = P.stumble_vore
food_vore = P.food_vore
+ consume_liquid_belly = P.consume_liquid_belly
digest_pain = P.digest_pain
eating_privacy_global = P.eating_privacy_global
allow_mimicry = P.allow_mimicry
@@ -354,7 +358,6 @@
vore_sprite_color = P.vore_sprite_color
allow_mind_transfer = P.allow_mind_transfer
- //CHOMP stuff
phase_vore = P.phase_vore
noisy_full = P.noisy_full
latejoin_vore = P.latejoin_vore
@@ -378,7 +381,7 @@
if(isliving(src))
var/mob/living/L = src
L.release_vore_contents(silent = TRUE)
- QDEL_LIST(vore_organs) // CHOMPedit
+ QDEL_LIST(vore_organs)
for(var/entry in P.belly_prefs)
list_to_object(entry,src)
if(!vore_organs.len)
@@ -391,7 +394,6 @@
else
vore_selected = vore_organs[1]
- //CHOMPAdd Start
if(soulgem)
src.soulgem.release_mobs()
QDEL_NULL(soulgem)
@@ -399,7 +401,6 @@
soulgem = list_to_object(P.soulcatcher_prefs, src)
else
soulgem = new(src)
- //CHMPAdd End
return TRUE
@@ -525,17 +526,17 @@
if(!istype(tasted))
return
- if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT)) //CHOMPEdit
+ if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT))
return
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- if(tasted == src) //CHOMPEdit Start
+ if(tasted == src)
visible_message(span_vwarning("[src] licks themself!"),span_notice("You lick yourself. You taste rather like [tasted.get_taste_message()]."),span_infoplain(span_bold("Slurp!")))
- balloon_alert_visible("licks themself!", "tastes like [tasted.get_taste_message()]")
+ //balloon_alert_visible("licks themself!", "tastes like [tasted.get_taste_message()]")
else
visible_message(span_vwarning("[src] licks [tasted]!"),span_notice("You lick [tasted]. They taste rather like [tasted.get_taste_message()]."),span_infoplain(span_bold("Slurp!")))
- balloon_alert_visible("licks [tasted]!", "tastes like [tasted.get_taste_message()]")
- //CHOMPEdit End
+ //balloon_alert_visible("licks [tasted]!", "tastes like [tasted.get_taste_message()]")
+
/mob/living/proc/get_taste_message(allow_generic = 1)
@@ -562,7 +563,7 @@
//This is just the above proc but switched about.
-/mob/living/proc/smell(mob/living/smelled in living_mobs(1, TRUE)) //CHOMPEdit
+/mob/living/proc/smell(mob/living/smelled in living_mobs(1, TRUE))
set name = "Smell"
set category = "IC.Game"
set desc = "Smell someone nearby!"
@@ -570,17 +571,17 @@
if(!istype(smelled))
return
- if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT)) //CHOMPEdit
+ if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT))
return
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- if(smelled == src) //CHOMPEdit Start
+ if(smelled == src)
visible_message(span_vwarning("[src] smells themself!"),span_notice("You smell yourself. You smell like [smelled.get_smell_message()]."),span_infoplain(span_bold("Sniff!")))
- balloon_alert_visible("smells themself!", "smells like [smelled.get_smell_message()]")
+ //balloon_alert_visible("smells themself!", "smells like [smelled.get_smell_message()]")
else
visible_message(span_vwarning("[src] smells [smelled]!"),span_notice("You smell [smelled]. They smell like [smelled.get_smell_message()]."),span_infoplain(span_bold("Sniff!")))
- balloon_alert_visible("smells [smelled]!", "smells like [smelled.get_smell_message()]")
- //CHOMPEdit End
+ //balloon_alert_visible("smells [smelled]!", "smells like [smelled.get_smell_message()]")
+
/mob/living/proc/get_smell_message(allow_generic = 1)
if(!vore_smell && !allow_generic)
@@ -628,7 +629,7 @@
LAZYSET(SA.prey_excludes, src, world.time)
log_and_message_admins("used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "JMP" : "null"])", src)
- B.owner.handle_belly_update() //CHOMPEdit - This is run whenever a belly's contents are changed.
+ B.owner.handle_belly_update() //This is run whenever a belly's contents are changed.
//You're in a dogborg!
else if(istype(loc, /obj/item/dogborg/sleeper))
@@ -654,13 +655,13 @@
crystal.unleash()
crystal.bound_mob = null
crystal.bound_mob = capture_crystal = 0
- clear_fullscreen(ATOM_BELLY_FULLSCREEN) // CHOMPedit
+ clear_fullscreen(ATOM_BELLY_FULLSCREEN)
log_and_message_admins("used the OOC escape button to get out of [crystal] owned by [crystal.owner]. [ADMIN_FLW(src)]", src)
//You've been turned into an item!
else if(tf_mob_holder && isvoice(src) && istype(src.loc, /obj/item))
var/obj/item/item_to_destroy = src.loc //If so, let's destroy the item they just TF'd out of.
- //CHOMPEdit Start - If tf_mob_holder is not located in src, then it's a Mind Binder OOC Escape
+ //If tf_mob_holder is not located in src, then it's a Mind Binder OOC Escape
var/mob/living/ourmob = tf_mob_holder
if(ourmob.loc != src)
if(isnull(ourmob.loc))
@@ -675,7 +676,6 @@
qdel(src)
log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into an object.")
return
- //CHOMPEdit End
if(istype(src.loc, /obj/item/clothing)) //Are they in clothes? Delete the item then revert them.
qdel(item_to_destroy)
log_and_message_admins("used the OOC escape button to revert back to their original form from being TFed into an object.", src)
@@ -701,7 +701,7 @@
qdel(G)
log_and_message_admins("used the OOC escape button to revert back from being petrified.", src)
- //CHOMPEdit - In-shoe OOC escape. Checking voices as precaution if something akin to obj TF or possession happens
+ //In-shoe OOC escape. Checking voices as precaution if something akin to obj TF or possession happens
else if(!istype(src, /mob/living/voice) && istype(src.loc, /obj/item/clothing/shoes))
var/obj/item/clothing/shoes/S = src.loc
forceMove(get_turf(src))
@@ -729,14 +729,12 @@
// Eating procs depending on who clicked what
//
-//CHOMPAdd Start
/mob/living/proc/feedable_bellies()
var/list/bellies = list()
for(var/obj/belly/Y in src.vore_organs)
if(Y.is_feedable)
bellies += Y
return bellies
-//CHOMPAdd End
/mob/living/proc/feed_grabbed_to_self(mob/living/user, mob/living/prey)
var/belly = user.vore_selected
@@ -745,17 +743,17 @@
/mob/living/proc/eat_held_mob(mob/living/user, mob/living/prey, mob/living/pred)
var/belly
if(user != pred)
- belly = tgui_input_list(user, "Choose Belly", "Belly Choice", pred.feedable_bellies()) //CHOMPEdit
+ belly = tgui_input_list(user, "Choose Belly", "Belly Choice", pred.feedable_bellies())
else
belly = pred.vore_selected
return perform_the_nom(user, prey, pred, belly)
/mob/living/proc/feed_self_to_grabbed(mob/living/user, mob/living/pred)
- var/belly = tgui_input_list(user, "Choose Belly", "Belly Choice", pred.feedable_bellies()) //CHOMPEdit
+ var/belly = tgui_input_list(user, "Choose Belly", "Belly Choice", pred.feedable_bellies())
return perform_the_nom(user, user, pred, belly)
/mob/living/proc/feed_grabbed_to_other(mob/living/user, mob/living/prey, mob/living/pred)
- var/belly = tgui_input_list(user, "Choose Belly", "Belly Choice", pred.feedable_bellies()) //CHOMPEdit
+ var/belly = tgui_input_list(user, "Choose Belly", "Belly Choice", pred.feedable_bellies())
return perform_the_nom(user, prey, pred, belly)
//
@@ -832,8 +830,8 @@
prey.ai_holder?.react_to_attack(user)
//Timer and progress bar
- if(!user.client && prey.weakened > 0) // CHOMPEdit stop crwaling instantly break swallow attempt for mobvore
- prey.Stun(min(prey.weakened, 2)) // CHOMPEdit stop crwaling instantly break swallow attempt for mobvore
+ if(!user.client && prey.weakened > 0) // stop crwaling instantly break swallow attempt for mobvore
+ prey.Stun(min(prey.weakened, 2)) // stop crwaling instantly break swallow attempt for mobvore
if(!do_after(user, swallow_time, prey, exclusive = TASK_USER_EXCLUSIVE))
return FALSE // Prey escpaed (or user disabled) before timer expired.
@@ -911,7 +909,7 @@
/datum/gas_mixture/belly_air/vox/New()
. = ..()
gas = list(
- GAS_N2 = 100) // Chomp edit
+ GAS_N2 = 100) // CHOMPEdit
/datum/gas_mixture/belly_air/zaddat
volume = 2500
@@ -933,7 +931,6 @@
gas = list(
GAS_N2 = 100)
-//CHOMPEdit Start - for CO2 breathers
/datum/gas_mixture/belly_air/carbon_dioxide_breather
volume = 2500
temperature = 293.150
@@ -943,7 +940,6 @@
. = ..()
gas = list(
GAS_CO2 = 100)
-//CHOMPEdit End
/mob/living/proc/feed_grabbed_to_self_falling_nom(var/mob/living/user, var/mob/living/prey)
if(user.is_incorporeal())
@@ -1004,7 +1000,7 @@
to_chat(src, span_notice("You are not holding anything."))
return
- if(is_type_in_list(I,edible_trash) || adminbus_trash || is_type_in_list(I,edible_tech) && isSynthetic()) // CHOMPEdit adds edible tech for synth
+ if(is_type_in_list(I,edible_trash) || adminbus_trash || is_type_in_list(I,edible_tech) && isSynthetic()) // adds edible tech for synth
if(!I.on_trash_eaten(src)) // shows object's rejection message itself
return
drop_item()
@@ -1012,9 +1008,9 @@
updateVRPanel()
log_admin("VORE: [src] used Eat Trash to swallow [I].")
I.after_trash_eaten(src)
- visible_message(span_vwarning("[src] demonstrates the voracious capabilities of their [lowertext(vore_selected.name)] by making [I] disappear!")) //CHOMPedit
+ visible_message(span_vwarning("[src] demonstrates the voracious capabilities of their [lowertext(vore_selected.name)] by making [I] disappear!"))
return
- to_chat(src, span_notice("This snack is too powerful to go down that easily.")) //CHOMPEdit
+ to_chat(src, span_notice("This snack is too powerful to go down that easily."))
return
/mob/living/proc/toggle_trash_catching() //Ported from chompstation
@@ -1022,7 +1018,7 @@
set category = "Abilities.Vore"
set desc = "Toggle Trash Eater throw vore abilities."
trash_catching = !trash_catching
- to_chat(src, span_vwarning("Trash catching [trash_catching ? "enabled" : "disabled"].")) //CHOMPEdit
+ to_chat(src, span_vwarning("Trash catching [trash_catching ? "enabled" : "disabled"]."))
/mob/living/proc/eat_minerals() //Actual eating abstracted so the user isn't given a prompt due to an argument in this verb.
set name = "Eat Minerals"
@@ -1204,7 +1200,7 @@
save_ooc_panel(usr)
if(href_list["print_ooc_notes_chat"])
print_ooc_notes_chat(usr)
- //CHOMPEdit Start
+ // CHOMPEnable Start
if(href_list["edit_ooc_note_favs"])
if(usr == src)
set_metainfo_favs(usr)
@@ -1213,7 +1209,7 @@
set_metainfo_maybes(usr)
if(href_list["set_metainfo_ooc_style"])
set_metainfo_ooc_style(usr)
- //CHOMPEdit End
+ // CHOMPEnable End
if(href_list["save_private_notes"])
if(usr == src)
save_private_notes(usr)
@@ -1230,7 +1226,6 @@
dat += span_red(span_bold("OOC DISABLED")) + "
"
if(!client?.prefs?.read_preference(/datum/preference/toggle/show_looc))
dat += span_red(span_bold("LOOC DISABLED")) + "
"
- //CHOMPEdit Start
dat += span_bold("Devourable:") + " [devourable ? span_green("Enabled") : span_red("Disabled")]
"
if(devourable)
dat += span_bold("Healbelly permission:") + " [permit_healbelly ? span_green("Allowed") : span_red("Disallowed")]
"
@@ -1260,6 +1255,7 @@
dat += span_bold("Feedable:") + " [feeding ? span_green("Enabled") : span_red("Disabled")]
"
dat += span_bold("Receiving liquids:") + " [receive_reagents ? span_green("Enabled") : span_red("Disabled")]
"
dat += span_bold("Giving liquids:") + " [give_reagents ? span_green("Enabled") : span_red("Disabled")]
"
+ dat += span_bold("Consuming liquids:") + " [consume_liquid_belly ? span_green("Enabled") : span_red("Disabled")]
"
dat += span_bold("Late join spawn point belly:") + " [latejoin_vore ? span_green("Enabled") : span_red("Disabled")]
"
if(latejoin_vore)
dat += span_bold("Late join spawn auto accept:") + " [no_latejoin_vore_warning ? span_green("Enabled") : span_red("Disabled")]
"
@@ -1269,24 +1265,18 @@
dat += span_bold("Global Vore Privacy is:") + " [eating_privacy_global ? span_green("Subtle") : span_red("Loud")]
"
dat += span_bold("Current active belly:") + " [vore_selected ? vore_selected.name : "None"]
"
dat += span_bold("Belly rub target:") + " [belly_rub_target ? belly_rub_target : (vore_selected ? vore_selected.name : "None")]
"
- //CHOMPEdit End
var/datum/browser/popup = new(user, "[name]mvp", "Vore Prefs: [src]", 300, 700, src)
popup.set_content(dat)
popup.open()
// Full screen belly overlays!
/obj/screen/fullscreen/belly
- icon = 'modular_chomp/icons/mob/vore_fullscreens/screen_full_vore_ch.dmi' //CHOMPedit
+ icon = 'icons/mob/vore_fullscreens/screen_full_vore_list.dmi'
-/obj/screen/fullscreen/belly/fixed //CHOMPedit: tweaking to preserve save data
- icon = 'icons/mob/screen_full_vore.dmi' //CHOMPedit: tweaking to preserve save data
+/obj/screen/fullscreen/belly/fixed
+ icon = 'icons/mob/screen_full_vore.dmi'
icon_state = ""
-/* //Chomp DISABLE - use our solution, not upstream's.
-/obj/screen/fullscreen/belly/colorized/overlay
- icon = 'icons/mob/screen_full_colorized_vore_overlays.dmi'
-*/ //Chomp DISABLE End
-
/mob/living/proc/vorebelly_printout() //Spew the vorepanel belly messages into chat window for copypasting.
set name = "X-Print Vorebelly Settings"
set category = "Preferences.Vore"
@@ -1453,7 +1443,7 @@
if(owner.client)
create_mob_button(parent)
add_verb(owner, /mob/proc/insidePanel)
- if(!owner.vorePanel) //CHOMPEdit
+ if(!owner.vorePanel)
owner.vorePanel = new(owner)
/datum/component/vore_panel/UnregisterFromParent()
@@ -1485,7 +1475,7 @@
/datum/component/vore_panel/proc/vore_panel_click(source, location, control, params, user)
var/mob/living/owner = user
if(istype(owner) && owner.vorePanel)
- INVOKE_ASYNC(owner, TYPE_PROC_REF(/mob/living, insidePanel), owner) //CHOMPEdit
+ INVOKE_ASYNC(owner, TYPE_PROC_REF(/mob/living, insidePanel), owner)
/**
* Screen object for vore panel
*/
@@ -1494,3 +1484,287 @@
icon = 'icons/mob/screen/midnight.dmi'
icon_state = "vore"
screen_loc = ui_smallquad
+
+
+
+//
+// Returns examine messages for how much reagents are in bellies
+//
+/mob/living/proc/examine_reagent_bellies()
+ if(!show_pudge()) //Some clothing or equipment can hide this. Reagent inflation is not very different in this aspect.
+ return ""
+
+ var/message = ""
+ for (var/belly in vore_organs)
+ var/obj/belly/B = belly
+
+ var/fill_percentage = B.reagents.maximum_volume > 0 ? B.reagents.total_volume / B.reagents.maximum_volume : 0
+
+ if(0 <= fill_percentage && fill_percentage <= 0.2 && B.show_fullness_messages)
+ message += B.get_reagent_examine_msg1()
+ if(0.2 < fill_percentage && fill_percentage <= 0.4 && B.show_fullness_messages)
+ message += B.get_reagent_examine_msg2()
+ if(0.4 < fill_percentage && fill_percentage <= 0.6 && B.show_fullness_messages)
+ message += B.get_reagent_examine_msg3()
+ if(0.6 < fill_percentage && fill_percentage <= 0.8 && B.show_fullness_messages)
+ message += B.get_reagent_examine_msg4()
+ if(0.8 < fill_percentage && fill_percentage <= 1 && B.show_fullness_messages)
+ message += B.get_reagent_examine_msg5()
+
+ return message
+
+/mob/living/proc/vore_check_reagents()
+ set name = "Check Belly Liquid (Vore)"
+ set category = "Abilities.Vore"
+ set desc = "Check the amount of liquid in your belly."
+
+ var/obj/belly/RTB = tgui_input_list(src, "Choose which vore belly to check", "Select Belly", vore_organs)
+ if(!RTB)
+ return FALSE
+
+ to_chat(src, span_vnotice("[RTB] has [RTB.reagents.total_volume] units of liquid."))
+
+/mob/living/proc/vore_transfer_reagents()
+ set name = "Transfer Liquid (Vore)"
+ set category = "Abilities.Vore"
+ set desc = "Transfer liquid from an organ to another or stomach, or into another person or container."
+ set popup_menu = FALSE
+
+ if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT))
+ return FALSE
+
+ var/mob/living/user = src
+
+ var/mob/living/TG = tgui_input_list(user, "Choose who to transfer from", "Transfer From", mobs_in_view(1,user))
+ if(!TG)
+ return FALSE
+ if(TG.give_reagents == FALSE && user != TG) //User isnt forced to allow giving in prefs if they are the one doing it
+ to_chat(user, span_vwarning("This person's prefs dont allow that!"))
+ return FALSE
+
+ var/obj/belly/RTB = tgui_input_list(user, "Choose which vore belly to transfer from", "Select Belly", vore_organs)
+ if(!RTB)
+ return FALSE
+
+ var/transfer_amount = tgui_input_list(user, "How much to transfer?", "Transfer Amount", list(5,10,25,50,100))
+ if(!transfer_amount)
+ return FALSE
+
+ switch(tgui_input_list(user,"Choose what to transfer to","Select Target", list("Vore belly", "Stomach", "Container", "Floor", "Cancel")))
+ if("Cancel")
+ return FALSE
+ if("Vore belly")
+ var/mob/living/TR = tgui_input_list(user,"Choose who to transfer to","Select Target", mobs_in_view(1,user))
+ if(!TR) return FALSE
+
+ if(TR == user) //Proceed, we dont need to have prefs enabled for transfer within user
+ var/obj/belly/TB = tgui_input_list(user, "Choose which organ to transfer to", "Select Belly", user.vore_organs)
+ if(!TB)
+ return FALSE
+ if(!Adjacent(TR) || !Adjacent(TG))
+ return //No long distance transfer
+ if(!TB.reagents?.get_free_space())
+ to_chat(user, span_vnotice("[TB] is full!"))
+ return FALSE
+
+ if(TG == user)
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into their [lowertext(TB.name)]."))
+ else
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their [lowertext(TB.name)]."))
+ add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
+ RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
+ if(RTB.count_liquid_for_sprite || TB.count_liquid_for_sprite)
+ handle_belly_update()
+
+ else if(TR.receive_reagents == FALSE)
+ to_chat(user, span_vwarning("This person's prefs dont allow that!"))
+ return FALSE
+
+ else
+ var/obj/belly/TB = tgui_input_list(user, "Choose which organ to transfer to", "Select Belly", TR.vore_organs)
+ if(!TB)
+ return FALSE
+ if(!Adjacent(TR) || !Adjacent(TG))
+ return //No long distance transfer
+ if(!TB.reagents?.get_free_space())
+ to_chat(user, span_vnotice("[TR]'s [lowertext(TB.name)] is full!"))
+ return FALSE
+
+ if(TG == user)
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [TR]'s [lowertext(TB.name)]."))
+ else
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]s [lowertext(RTB.name)] into [TR]'s [lowertext(TB.name)]."))
+
+ RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
+ add_attack_logs(user,TR,"Transfered reagents from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
+ if(RTB.count_liquid_for_sprite)
+ handle_belly_update()
+ if(TB.count_liquid_for_sprite)
+ TR.handle_belly_update()
+
+
+ if("Stomach")
+ var/mob/living/TR = tgui_input_list(user,"Choose who to transfer to","Select Target", mobs_in_view(1,user))
+ if(!TR) return
+ if(!Adjacent(TR) || !Adjacent(TG))
+ return //No long distance transfer
+
+ if(TR == user) //Proceed, we dont need to have prefs enabled for transfer within user
+ if(TG == user)
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into their stomach."))
+ else
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their stomach."))
+ RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
+ add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach")
+ if(RTB.count_liquid_for_sprite)
+ handle_belly_update()
+
+ else if(TR.receive_reagents == FALSE)
+ to_chat(user, span_vwarning("This person's prefs dont allow that!"))
+ return FALSE
+
+ else
+ if(TG == user)
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [TR]'s stomach."))
+ else
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into [TR]'s stomach."))
+
+ RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
+ add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") //Bonus for staff so they can see if people have abused transfer and done pref breaks
+ if(RTB.count_liquid_for_sprite)
+ handle_belly_update()
+
+ if("Container")
+ if(RTB.reagentid == REAGENT_ID_STOMACID)
+ return
+ var/list/choices = list()
+ for(var/obj/item/reagent_containers/rc in view(1,user.loc))
+ choices += rc
+ var/obj/item/reagent_containers/arc = user.get_active_hand()
+ if(istype(arc,/obj/item/reagent_containers))
+ choices += arc
+ var/obj/item/reagent_containers/irc = user.get_inactive_hand()
+ if(istype(irc,/obj/item/reagent_containers))
+ choices += irc
+
+ var/obj/item/reagent_containers/T = tgui_input_list(user,"Choose what to transfer to","Select Target", choices)
+ if(!T)
+ return FALSE
+ if(!Adjacent(T) || !Adjacent(TG))
+ return //No long distance transfer
+
+ if(TG == user)
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [lowertext(RTB.name)] into [T]."))
+ else
+ user.custom_emote_vr(1, span_vnotice("[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into [T]."))
+
+ RTB.reagents.vore_trans_to_con(T, transfer_amount, 1, 0)
+ add_attack_logs(user, T,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to a [T]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
+ if(RTB.count_liquid_for_sprite)
+ handle_belly_update()
+ if("Floor")
+ if(RTB.reagentid == REAGENT_ID_WATER)
+ return
+ var/amount_removed = RTB.reagents.remove_any(transfer_amount)
+ if(RTB.count_liquid_for_sprite)
+ handle_belly_update()
+ var/puddle_amount = round(amount_removed/5)
+
+ if(puddle_amount == 0)
+ to_chat(user,span_vnotice("[RTB.reagent_name] dripples from the [lowertext(RTB.name)], not enough to form a puddle."))
+ return
+
+ if(TG == user)
+ user.custom_emote_vr(1, span_vnotice("spills [RTB.reagent_name] from their [lowertext(RTB.name)] onto the floor!"))
+ else
+ user.custom_emote_vr(1, span_vnotice("spills [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] onto the floor!"))
+
+ var/obj/effect/decal/cleanable/blood/reagent/puddle = null
+ if (RTB.custom_reagentcolor)
+ puddle = new /obj/effect/decal/cleanable/blood/reagent(RTB.reagent_name, RTB.custom_reagentcolor, RTB.reagentid, puddle_amount, user.ckey, TG.ckey)
+ else
+ puddle = new /obj/effect/decal/cleanable/blood/reagent(RTB.reagent_name, RTB.reagentcolor, RTB.reagentid, puddle_amount, user.ckey, TG.ckey)
+
+ puddle.loc = TG.loc
+
+ var/soundfile
+ if(!RTB.fancy_vore)
+ soundfile = classic_release_sounds[RTB.release_sound]
+ else
+ soundfile = fancy_release_sounds[RTB.release_sound]
+ if(soundfile)
+ playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/preference/toggle/eating_noises)
+
+/mob/living/proc/vore_bellyrub(var/mob/living/T in view(1,src))
+ set name = "Give Bellyrubs"
+ set category = "Abilities.General"
+ set desc = "Provide bellyrubs to either yourself or another mob with a belly."
+
+ if(!T)
+ T = tgui_input_list(src, "Choose whose belly to rub", "Rub Belly?", mobs_in_view(1,src))
+ if(!T)
+ return FALSE
+ if(!(T in view(1,src)))
+ return FALSE
+ if(T.vore_selected)
+ var/obj/belly/B = T.vore_selected
+ if(istype(B))
+ if(T == src)
+ custom_emote_vr(1, "rubs their [belly_rub_target ? belly_rub_target : lowertext(B.name)].")
+ else
+ custom_emote_vr(1, "gives some rubs over [T]'s [belly_rub_target ? belly_rub_target : lowertext(B.name)].")
+ B.quick_cycle()
+ return TRUE
+ to_chat(src, span_vwarning("There is no suitable belly for rubs."))
+ return FALSE
+
+/mob/living/proc/mute_entry()
+ set name = "Mute Vorgan Entrance"
+ set category = "Preferences.Vore"
+ set desc = "Mute the chatlog messages when something enters a vore belly."
+ mute_entry = !mute_entry
+ to_chat(src, span_vwarning("Entrance logs [mute_entry ? "disabled" : "enabled"]."))
+
+/mob/living/proc/restrict_trasheater()
+ set name = "Restrict Trash Eater"
+ set category = "Abilities.Vore"
+ set desc = "Toggle Trash Eater restriction level."
+ adminbus_trash = !adminbus_trash
+ to_chat(src, span_vwarning("Trash Eater restriction level set to [adminbus_trash ? "everything not blacklisted" : "only whitelisted items"]."))
+
+/mob/living/proc/liquidbelly_visuals()
+ set name = "Toggle Liquidbelly Visuals"
+ set category = "Preferences.Vore"
+ set desc = "Toggle liquidbelly fullscreen visual effect."
+ liquidbelly_visuals = !liquidbelly_visuals
+ to_chat(src, span_vwarning("Liquidbelly overlays [liquidbelly_visuals ? "enabled" : "disabled"]."))
+
+/mob/living/proc/fix_vore_effects()
+ set name = "Fix Vore Effects"
+ set category = "OOC.Debug"
+ set desc = "Fix certain vore effects lingering after you've exited a belly."
+
+ if(!isbelly(src.loc))
+ if(alert(src, "Only use this verb if you are affected by certain vore effects outside of a belly, such as muffling or a stuck belly fullscreen.", "Clear Vore Effects", "Continue", "Nevermind") != "Continue")
+ return
+
+ absorbed = FALSE
+ muffled = FALSE
+ clear_fullscreen("belly")
+ clear_fullscreen(ATOM_BELLY_FULLSCREEN)
+ stop_sound_channel(CHANNEL_PREYLOOP)
+
+/mob/living/verb/vore_check_nutrition()
+ set name = "Check Nutrition"
+ set category = "Abilities.Vore"
+ set desc = "Check your current nutrition level."
+ to_chat(src, span_vnotice("Current nutrition level: [nutrition]."))
+
+// This proc will either return the first belly the mob is in or return null if they're not in one
+/mob/living/proc/surrounding_belly()
+ var/atom/curloc = src.loc
+ while(curloc && !isbelly(curloc))
+ if(istype(curloc, /turf)) break
+ if(!curloc.loc || curloc == curloc.loc) break
+ curloc = curloc.loc
+ if(isbelly(curloc)) return curloc
diff --git a/code/modules/vore/eating/mob_ch.dm b/code/modules/vore/eating/mob_ch.dm
deleted file mode 100644
index 08b15dbbf0..0000000000
--- a/code/modules/vore/eating/mob_ch.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/mob
- var/receive_reagents = FALSE //Pref for people to avoid others transfering reagents into them.
- var/give_reagents = FALSE //Pref for people to avoid others taking reagents from them.
- var/apply_reagents = TRUE //Pref for people to avoid having stomach reagents applied to them
- var/latejoin_vore = FALSE //If enabled, latejoiners can spawn into this, assuming they have a client
- var/latejoin_prey = FALSE //If enabled, latejoiners can spawn ontop of and instantly eat the victim
- var/noisy_full = FALSE //Enables belching when a mob has overeaten
- var/phase_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway
- var/strip_pref = TRUE //Enables the ability for worn items to be stripped
- var/no_latejoin_vore_warning = FALSE //Auto accepts pred spwan notifications (roundbased / saveable)
- var/no_latejoin_prey_warning = FALSE //Auto accepts prey spawn notifications (roundbased / saveable)
- var/no_latejoin_vore_warning_time = 15 //Time until accepting prey
- var/no_latejoin_prey_warning_time = 15 //Time until accepting pred
- var/no_latejoin_vore_warning_persists = FALSE //Do we save it?
- var/no_latejoin_prey_warning_persists = FALSE //Do we save it?
- var/belly_rub_target = null
- var/soulcatcher_pref_flags = 0 //Default disabled
diff --git a/code/modules/vore/eating/mob_vr.dm b/code/modules/vore/eating/mob_vr.dm
index 90a5235ccf..145ac4edae 100644
--- a/code/modules/vore/eating/mob_vr.dm
+++ b/code/modules/vore/eating/mob_vr.dm
@@ -6,7 +6,6 @@
var/resizable = TRUE // Can other people resize you? (Usually ignored for self-resizes)
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/allow_inbelly_spawning = FALSE // Will we even bother with attempts of someone to spawn in in one of our bellies? // CHOMPedit: use our code instead of upstream's recoding of our code
var/obj/belly/vore_selected // Default to no vore capability.
var/list/vore_organs = list() // List of vore containers inside a mob
var/absorbed = FALSE // If a mob is absorbed into another
@@ -19,6 +18,7 @@
var/drop_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway
var/throw_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway
var/food_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway
+ var/consume_liquid_belly = FALSE //starting off because if someone is into that, they'll toggle it first time they get the error. Otherway around would be more pref breaky.
var/digest_pain = TRUE
var/can_be_drop_prey = FALSE
var/can_be_drop_pred = FALSE
@@ -69,4 +69,27 @@
var/vore_icons = 0 // Bitfield for which fields we have vore icons for.
var/vore_eyes = FALSE // For mobs with fullness specific eye overlays.
- var/obj/soulgem/soulgem // CHOMPEnable Soulcatcher. Needs to be up-ported sometime.
+ var/obj/soulgem/soulgem // Soulcatcher. Needs to be up-ported sometime.
+
+ var/receive_reagents = FALSE //Pref for people to avoid others transfering reagents into them.
+ var/give_reagents = FALSE //Pref for people to avoid others taking reagents from them.
+ var/apply_reagents = TRUE //Pref for people to avoid having stomach reagents applied to them
+ var/latejoin_vore = FALSE //If enabled, latejoiners can spawn into this, assuming they have a client
+ var/latejoin_prey = FALSE //If enabled, latejoiners can spawn ontop of and instantly eat the victim
+ var/noisy_full = FALSE //Enables belching when a mob has overeaten
+ var/phase_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway
+ var/strip_pref = TRUE //Enables the ability for worn items to be stripped
+ var/no_latejoin_vore_warning = FALSE //Auto accepts pred spwan notifications (roundbased / saveable)
+ var/no_latejoin_prey_warning = FALSE //Auto accepts prey spawn notifications (roundbased / saveable)
+ var/no_latejoin_vore_warning_time = 15 //Time until accepting prey
+ var/no_latejoin_prey_warning_time = 15 //Time until accepting pred
+ var/no_latejoin_vore_warning_persists = FALSE //Do we save it?
+ var/no_latejoin_prey_warning_persists = FALSE //Do we save it?
+ var/belly_rub_target = null
+ var/soulcatcher_pref_flags = 0 //Default disabled
+
+ var/voice_freq = 42500 // Preference for character voice frequency
+ var/list/voice_sounds_list = list() // The sound list containing our voice sounds!
+ var/enabled = TRUE //Pauses a mob if disabled (Prevents life ticks from happening)
+ var/died_in_vr = FALSE //For virtual reality sleepers
+ var/last_move_time = 0 //For movement smoothing
diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/code/modules/vore/eating/simple_animal_vr.dm
index 78c893761a..be97886288 100644
--- a/code/modules/vore/eating/simple_animal_vr.dm
+++ b/code/modules/vore/eating/simple_animal_vr.dm
@@ -27,7 +27,7 @@
if(istype(src, /mob/living/simple_mob/animal/passive/mouse) && !T.ckey)
// Mice can't eat logged out players!
return
- /*if(client && IsAdvancedToolUser()) //CHOMPedit: Mob QOL, not everything can be grabbed and nobody wants wiseguy gotchas for trying.
+ /*if(client && IsAdvancedToolUser()) Mob QOL, not everything can be grabbed and nobody wants wiseguy gotchas for trying.
to_chat(src, span_warning("Put your hands to good use instead!"))
return
*/
@@ -123,7 +123,7 @@
/mob/living/simple_mob/proc/nutrition_heal()
set name = "Nutrition Heal"
- set category = "Abilities.Mob" //CHOMPEdit
+ set category = "Abilities.Mob"
set desc = "Slowly regenerate health using nutrition."
if(nutrition < 10)
diff --git a/code/modules/vore/eating/slipvore_ch.dm b/code/modules/vore/eating/slipvore_ch.dm
deleted file mode 100644
index 6dd134ea44..0000000000
--- a/code/modules/vore/eating/slipvore_ch.dm
+++ /dev/null
@@ -1,73 +0,0 @@
-/mob/living
- var/is_slipping = FALSE
- var/slip_vore_in_progress = FALSE
-
-/mob/living/proc/can_slip_vore(var/mob/living/target)
- if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
- return FALSE
- if(!(src.can_be_drop_pred && target.devourable && target.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
- return FALSE
- if(!is_vore_predator(src)) //Check their bellies and stuff
- return FALSE
- if(!src.vore_selected) //Gotta have one selected as well.
- return FALSE
- return TRUE
-
-/mob/living/proc/can_be_slip_vored_by(var/mob/living/target)
- if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
- return FALSE
- if(!(target.can_be_drop_pred && src.devourable && src.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
- return FALSE
- if(!is_vore_predator(target)) //Check their bellies and stuff
- return FALSE
- if(!target.vore_selected) //Gotta have one selected as well.
- return FALSE
- return TRUE
-
-/mob/living/Crossed(var/atom/movable/AM)
- if(AM == src || AM.is_incorporeal()) // We're not going to run over ourselves or ghosts
- return
-
- if(istype(AM, /mob/living/bot/mulebot))
- var/mob/living/bot/mulebot/MB = AM
- MB.runOver(src)
-
- if(istype(AM, /obj/vehicle))
- var/obj/vehicle/V = AM
- V.RunOver(src)
-
- var/mob/living/target = AM
- if(istype(target) && !target.incorporeal_move && !src.incorporeal_move) //The slip vore begins
- if(can_slip_vore(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //If we can vore them go for it
- target.slip_vore_in_progress = TRUE //Make them stop slipping
- perform_the_nom(src,target,src,src.vore_selected,1)
- target.slip_vore_in_progress = FALSE
- target.is_slipping = FALSE
- return
- else if(can_be_slip_vored_by(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //Otherwise, if they can vore us, make it happen.
- target.slip_vore_in_progress = TRUE //Make them stop slipping
- perform_the_nom(target,src,target,target.vore_selected,1)
- target.slip_vore_in_progress = FALSE
- target.is_slipping = FALSE
- return
-
- if(src.step_mechanics_pref && istype(target) && src.lying && target.step_mechanics_pref && target.loc && target.buckled != src)
- // src.lying being true means that in theory this code shouldn't run at the same time as the existing code for this in Bump. Probably.
- // And optionally, this could be gated behind another preference, to prevent stunlock being abused.
- if((mob_always_swap || (a_intent == I_HELP || src.restrained()) && (target.a_intent == I_HELP || target.restrained())) && target.canmove && target.handle_micro_bump_helping(src))
- return
- else if(!(target.a_intent == I_HELP || target.restrained()) && target.handle_micro_bump_other(src))
- return
-
-
-/mob/living/carbon/slip(var/slipped_on,stun_duration=8)
- . = ..()
- if(.)
- is_slipping = TRUE
- return .
-
-/mob/living/update_canmove()
- . = ..()
- if(is_slipping && !lying)
- is_slipping = FALSE
- return .
diff --git a/modular_chomp/code/modules/vore/eating/soulcatcher.dm b/code/modules/vore/eating/soulcatcher.dm
similarity index 99%
rename from modular_chomp/code/modules/vore/eating/soulcatcher.dm
rename to code/modules/vore/eating/soulcatcher.dm
index bfc5dbc193..99065c7490 100644
--- a/modular_chomp/code/modules/vore/eating/soulcatcher.dm
+++ b/code/modules/vore/eating/soulcatcher.dm
@@ -163,11 +163,11 @@
brainmob.ooc_notes = L.ooc_notes
brainmob.ooc_notes_likes = L.ooc_notes_likes
brainmob.ooc_notes_dislikes = L.ooc_notes_dislikes
- //CHOMPEdit Start
+ /* Not implemented on virgo
brainmob.ooc_notes_favs = L.ooc_notes_favs
brainmob.ooc_notes_maybes = L.ooc_notes_maybes
brainmob.ooc_notes_style = L.ooc_notes_style
- //CHOMPEdit End
+ */
brainmob.timeofhostdeath = L.timeofdeath
if(ishuman(L))
SStranscore.m_backup(brainmob.mind,0) //It does ONE, so medical will hear about it.
diff --git a/modular_chomp/code/modules/vore/eating/soulcatcher_mob.dm b/code/modules/vore/eating/soulcatcher_mob.dm
similarity index 99%
rename from modular_chomp/code/modules/vore/eating/soulcatcher_mob.dm
rename to code/modules/vore/eating/soulcatcher_mob.dm
index 073e2e9038..30bab93745 100644
--- a/modular_chomp/code/modules/vore/eating/soulcatcher_mob.dm
+++ b/code/modules/vore/eating/soulcatcher_mob.dm
@@ -61,7 +61,7 @@
// Resist override, only returning a message that one is stuck for now
/mob/living/carbon/brain/caught_soul/vore/resist()
set name = "Resist"
- set category = "IC.Game" //CHOMPEdit
+ set category = "IC.Game"
to_chat(src, span_warning("There's no way out! You're stuck inside your predator."))
diff --git a/modular_chomp/code/modules/vore/eating/soulcatcher_observer.dm b/code/modules/vore/eating/soulcatcher_observer.dm
similarity index 100%
rename from modular_chomp/code/modules/vore/eating/soulcatcher_observer.dm
rename to code/modules/vore/eating/soulcatcher_observer.dm
diff --git a/code/modules/vore/eating/stumblevore_vr.dm b/code/modules/vore/eating/stumblevore_vr.dm
index 6f52634fad..67b8670db6 100644
--- a/code/modules/vore/eating/stumblevore_vr.dm
+++ b/code/modules/vore/eating/stumblevore_vr.dm
@@ -38,21 +38,28 @@
if(CanStumbleVore(M))
visible_message(span_vwarning("[M] flops carelessly into [src]!"))
perform_the_nom(src,M,src,src.vore_selected,1)
- else if(M.CanStumbleVore(src))
+ return
+
+ if(M.CanStumbleVore(src))
visible_message(span_vwarning("[M] flops carelessly into [src]!"))
perform_the_nom(M,src,M,M.vore_selected,1)
- else if(istype(S) && S.species.lightweight == 1)
+ return
+
+ if(istype(S) && S.species.lightweight == 1)
visible_message(span_vwarning("[M] carelessly bowls [src] over!"))
M.forceMove(get_turf(src))
M.apply_damage(0.5, BRUTE)
Weaken(4)
stop_flying()
apply_damage(0.5, BRUTE)
- else if(round(weight) > 474)
+ return
+
+ if(round(weight) > 474)
var/throwtarget = get_edge_target_turf(M, reverse_direction(M.dir))
visible_message(span_vwarning("[M] bounces backwards off of [src]'s plush body!"))
M.throw_at(throwtarget, 2, 1)
- else
- visible_message(span_vwarning("[M] trips over [src]!"))
- M.forceMove(get_turf(src))
- M.apply_damage(1, BRUTE)
+ return
+
+ visible_message(span_vwarning("[M] trips over [src]!"))
+ M.forceMove(get_turf(src))
+ M.apply_damage(1, BRUTE)
diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm
index 4ece8c22d1..b191271b49 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore_vr.dm
@@ -61,6 +61,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/slip_vore = TRUE
var/throw_vore = TRUE
var/food_vore = TRUE
+ var/consume_liquid_belly = FALSE //starting off because if someone is into that, they'll toggle it first time they get the error. Otherway around would be more pref breaky.
var/digest_pain = TRUE
@@ -72,7 +73,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/vore_sprite_multiply = list("stomach" = FALSE, "taur belly" = FALSE)
var/allow_mind_transfer = FALSE
- //CHOMP stuff
var/phase_vore = TRUE
var/noisy_full = FALSE
var/receive_reagents = FALSE
@@ -91,7 +91,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/belly_rub_target = null
var/soulcatcher_pref_flags = 0
var/list/soulcatcher_prefs = list()
- //CHOMP stuff end
var/list/belly_prefs = list()
var/vore_taste = "nothing in particular"
@@ -214,6 +213,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
slip_vore = json_from_file["slip_vore"]
food_vore = json_from_file["food_vore"]
throw_vore = json_from_file["throw_vore"]
+ consume_liquid_belly = json_from_file["consume_liquid_belly"]
stumble_vore = json_from_file["stumble_vore"]
digest_pain = json_from_file["digest_pain"]
nutrition_message_visible = json_from_file["nutrition_message_visible"]
@@ -225,7 +225,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
vore_sprite_color = json_from_file["vore_sprite_color"]
allow_mind_transfer = json_from_file["allow_mind_transfer"]
- //CHOMP stuff Start
phase_vore = json_from_file["phase_vore"]
latejoin_vore = json_from_file["latejoin_vore"]
latejoin_prey = json_from_file["latejoin_prey"]
@@ -248,7 +247,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
belly_rub_target = json_from_file["belly_rub_target"]
soulcatcher_pref_flags = json_from_file["soulcatcher_pref_flags"]
soulcatcher_prefs = json_from_file["soulcatcher_prefs"]
- //CHOMP stuff End
//Quick sanitize
if(isnull(digestable))
@@ -295,6 +293,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
stumble_vore = TRUE
if(isnull(food_vore))
food_vore = TRUE
+ if(isnull(consume_liquid_belly))
+ consume_liquid_belly = FALSE
if(isnull(digest_pain))
digest_pain = TRUE
if(isnull(nutrition_message_visible))
@@ -340,7 +340,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
if(isnull(allow_mind_transfer))
allow_mind_transfer = FALSE
- //CHOMP stuff Start
if(isnull(phase_vore))
phase_vore = TRUE
if(isnull(latejoin_vore))
@@ -377,7 +376,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
soulcatcher_pref_flags = 0
if(isnull(soulcatcher_prefs))
soulcatcher_prefs = list()
- //CHOMP stuff End
return TRUE
@@ -399,28 +397,28 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"vore_smell" = vore_smell,
"permit_healbelly" = permit_healbelly,
"noisy" = noisy,
- "noisy_full" = noisy_full, //CHOMPedit
+ "noisy_full" = noisy_full,
"selective_preference" = selective_preference,
"show_vore_fx" = show_vore_fx,
"can_be_drop_prey" = can_be_drop_prey,
"can_be_drop_pred" = can_be_drop_pred,
- "latejoin_vore" = latejoin_vore, //CHOMPedit
- "latejoin_prey" = latejoin_prey, //CHOMPedit
+ "latejoin_vore" = latejoin_vore,
+ "latejoin_prey" = latejoin_prey,
"allow_spontaneous_tf" = allow_spontaneous_tf,
"step_mechanics_pref" = step_mechanics_pref,
"pickup_pref" = pickup_pref,
"belly_prefs" = belly_prefs,
- "receive_reagents" = receive_reagents, //CHOMPedit
- "give_reagents" = give_reagents, //CHOMPedit
- "apply_reagents" = apply_reagents, //CHOMPedit
+ "receive_reagents" = receive_reagents,
+ "give_reagents" = give_reagents,
+ "apply_reagents" = apply_reagents,
"autotransferable" = autotransferable,
"drop_vore" = drop_vore,
"slip_vore" = slip_vore,
"stumble_vore" = stumble_vore,
"throw_vore" = throw_vore,
"allow_mind_transfer" = allow_mind_transfer,
- "phase_vore" = phase_vore, //CHOMPedit
- "food_vore" = food_vore,
+ "phase_vore" = phase_vore,
+ "consume_liquid_belly" = consume_liquid_belly,
"digest_pain" = digest_pain,
"nutrition_message_visible" = nutrition_message_visible,
"nutrition_messages" = nutrition_messages,
@@ -429,17 +427,17 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"eating_privacy_global" = eating_privacy_global,
"vore_sprite_color" = vore_sprite_color,
"allow_mimicry" = allow_mimicry,
- "vore_sprite_multiply" = vore_sprite_multiply, //CHOMPEdit
- "strip_pref" = strip_pref, //CHOMPEdit
- "no_latejoin_vore_warning" = no_latejoin_vore_warning, //CHOMPEdit
- "no_latejoin_prey_warning" = no_latejoin_prey_warning, //CHOMPEdit
- "no_latejoin_vore_warning_time" = no_latejoin_vore_warning_time, //CHOMPEdit
- "no_latejoin_prey_warning_time" = no_latejoin_prey_warning_time, //CHOMPEdit
- "no_latejoin_vore_warning_persists" = no_latejoin_vore_warning_persists, //CHOMPEdit
- "no_latejoin_prey_warning_persists" = no_latejoin_prey_warning_persists, //CHOMPEdit
- "belly_rub_target" = belly_rub_target, //CHOMPEdit
- "soulcatcher_pref_flags" = soulcatcher_pref_flags, //CHOMPAdd
- "soulcatcher_prefs" = soulcatcher_prefs //CHOMPAdd
+ "vore_sprite_multiply" = vore_sprite_multiply,
+ "strip_pref" = strip_pref,
+ "no_latejoin_vore_warning" = no_latejoin_vore_warning,
+ "no_latejoin_prey_warning" = no_latejoin_prey_warning,
+ "no_latejoin_vore_warning_time" = no_latejoin_vore_warning_time,
+ "no_latejoin_prey_warning_time" = no_latejoin_prey_warning_time,
+ "no_latejoin_vore_warning_persists" = no_latejoin_vore_warning_persists,
+ "no_latejoin_prey_warning_persists" = no_latejoin_prey_warning_persists,
+ "belly_rub_target" = belly_rub_target,
+ "soulcatcher_pref_flags" = soulcatcher_pref_flags,
+ "soulcatcher_prefs" = soulcatcher_prefs
)
//List to JSON
diff --git a/code/modules/vore/eating/vorepanel_ch.dm b/code/modules/vore/eating/vorepanel_ch.dm
deleted file mode 100644
index ae5fb5eb04..0000000000
--- a/code/modules/vore/eating/vorepanel_ch.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-//CHOMP - liquid bellies //These variables have been moved to belly_obj_ch.dm, keeping comments here for reference
-/*
-/datum/vore_look
- var/show_liquids = FALSE
- var/show_fullness_messages = FALSE
-*/
diff --git a/code/modules/vore/eating/vorepanel_prefs.dm b/code/modules/vore/eating/vorepanel_prefs.dm
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 5ae0ef1178..5668118185 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -2,24 +2,8 @@
// Vore management panel for players
//
-/* //Chomp REMOVE - Use our solution, not upstream's
-//INSERT COLORIZE-ONLY STOMACHS HERE
-var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
- "a_synth_flesh_mono_hole",
- "a_anim_belly",
- "multi_layer_test_tummy",
- "gematically_angular",
- "entrance_to_a_tumby",
- "passage_to_a_tumby",
- "destination_tumby",
- "destination_tumby_fluidless",
- "post_tumby_passage",
- "post_tumby_passage_fluidless",
- "not_quite_tumby",
- "could_it_be_a_tumby")
-*/ //Chomp REMOVE End
-
-#define VORE_RESIZE_COST 125 //CHOMPAdd
+#define VORE_RESIZE_COST 125
+#define STATION_PREF_NAME "Chomp" // CHOMPEdit
/mob
var/datum/vore_look/vorePanel
@@ -52,8 +36,8 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/mob/host // Note, we do this in case we ever want to allow people to view others vore panels
var/unsaved_changes = FALSE
var/show_pictures = TRUE
- var/icon_overflow = FALSE //CHOMPEdit
- var/max_icon_content = 21 //CHOMPedit: Contents above this disable icon mode. 21 for nice 3 rows to fill the default panel window.
+ var/icon_overflow = FALSE
+ var/max_icon_content = 21 //Contents above this disable icon mode. 21 for nice 3 rows to fill the default panel window.
/datum/vore_look/New(mob/new_host)
if(istype(new_host))
@@ -67,7 +51,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
/datum/vore_look/ui_assets(mob/user)
. = ..()
. += get_asset_datum(/datum/asset/spritesheet/vore)
- . += get_asset_datum(/datum/asset/spritesheet/vore_fixed) //Either this isn't working or my cache is corrupted and won't show them. //CHOMPedit
+ . += get_asset_datum(/datum/asset/spritesheet/vore_fixed) //Either this isn't working or my cache is corrupted and won't show them.
/datum/vore_look/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -95,7 +79,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
key = "[target.type]"
else if(ismob(target))
var/mob/M = target
- if(istype(M,/mob/living/simple_mob)) //CHOMPedit: not generating unique icons for every simplemob(number)
+ if(istype(M,/mob/living/simple_mob)) //not generating unique icons for every simplemob(number)
var/mob/living/simple_mob/S = M
key = "[S.icon_living]"
else
@@ -132,14 +116,14 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
data["unsaved_changes"] = unsaved_changes
data["show_pictures"] = show_pictures
- data["icon_overflow"] = icon_overflow //CHOMPEdit
+ data["icon_overflow"] = icon_overflow
var/atom/hostloc = host.loc
- //CHOMPAdd Start - Allow VorePanel to show pred belly details even while indirectly inside
+ //Allow VorePanel to show pred belly details even while indirectly inside
if(istype(host, /mob/living))
var/mob/living/H = host
hostloc = H.surrounding_belly()
- //CHOMPAdd End of indirect vorefx additions
+ //End of indirect vorefx additions
var/list/inside = list()
if(isbelly(hostloc))
var/obj/belly/inside_belly = hostloc
@@ -161,11 +145,9 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"desc" = inside_desc,
"pred" = pred,
"ref" = "\ref[inside_belly]",
- //CHOMPEdit Start
"liq_lvl" = inside_belly.reagents.total_volume,
"liq_reagent_type" = inside_belly.reagent_chosen,
"liuq_name" = inside_belly.reagent_name,
- //CHOMPEdit End
)
var/list/inside_contents = list()
@@ -180,13 +162,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"ref" = "\ref[O]",
"outside" = FALSE,
)
- if(show_pictures) //CHOMPedit Start: disables icon mode
+ if(show_pictures) //disables icon mode
if(inside_belly.contents.len <= max_icon_content)
icon_overflow = FALSE
info["icon"] = cached_nom_icon(O)
else
icon_overflow = TRUE
- //CHOMPEdit End
if(isliving(O))
var/mob/living/M = O
info["stat"] = M.stat
@@ -237,13 +218,13 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"release_sound" = selected.release_sound,
// "messages" // TODO
"can_taste" = selected.can_taste,
- "is_feedable" = selected.is_feedable, //CHOMPAdd
+ "is_feedable" = selected.is_feedable,
"egg_type" = selected.egg_type,
- "egg_name" = selected.egg_name, //CHOMPAdd
- "egg_size" = selected.egg_size, //CHOMPAdd
- "recycling" = selected.recycling, //CHOMPAdd
- "storing_nutrition" = selected.storing_nutrition, //CHOMPAdd
- "entrance_logs" = selected.entrance_logs, //CHOMPAdd
+ "egg_name" = selected.egg_name,
+ "egg_size" = selected.egg_size,
+ "recycling" = selected.recycling,
+ "storing_nutrition" = selected.storing_nutrition,
+ "entrance_logs" = selected.entrance_logs,
"nutrition_percent" = selected.nutrition_percent,
"digest_brute" = selected.digest_brute,
"digest_burn" = selected.digest_burn,
@@ -286,11 +267,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"undergarment_chosen" = selected.undergarment_chosen,
"undergarment_if_none" = selected.undergarment_if_none || "None",
"undergarment_color" = selected.undergarment_color,
- //CHOMP add: vore sprite options and additional stuff
"belly_fullscreen_color" = selected.belly_fullscreen_color,
- //"belly_fullscreen_color_secondary" = selected.belly_fullscreen_color_secondary, // Chomp REMOVE - use our solution, not upstream's
- //"belly_fullscreen_color_trinary" = selected.belly_fullscreen_color_trinary, // Chomp REMOVE - use our solution, not upstream's
- //CHOMP add: vore sprite options and additional stuff
"belly_fullscreen_color2" = selected.belly_fullscreen_color2,
"belly_fullscreen_color3" = selected.belly_fullscreen_color3,
"belly_fullscreen_color4" = selected.belly_fullscreen_color4,
@@ -320,7 +297,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"item_digest_logs" = selected.item_digest_logs,
"private_struggle" = selected.private_struggle,
//"marking_to_add" = selected.marking_to_add
- //CHOMPEdit end
)
var/list/addons = list()
@@ -337,11 +313,11 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
selected_list["egg_type"] = selected.egg_type
- selected_list["egg_name"] = selected.egg_name //CHOMPAdd
- selected_list["egg_size"] = selected.egg_size //CHOMPAdd
- selected_list["recycling"] = selected.recycling //CHOMPAdd
- selected_list["storing_nutrition"] = selected.storing_nutrition //CHOMPAdd
- selected_list["item_digest_logs"] = selected.item_digest_logs //CHOMPAdd
+ selected_list["egg_name"] = selected.egg_name
+ selected_list["egg_size"] = selected.egg_size
+ selected_list["recycling"] = selected.recycling
+ selected_list["storing_nutrition"] = selected.storing_nutrition
+ selected_list["item_digest_logs"] = selected.item_digest_logs
selected_list["contaminates"] = selected.contaminates
selected_list["contaminate_flavor"] = null
selected_list["contaminate_color"] = null
@@ -369,13 +345,13 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
selected_list["autotransfer"]["autotransferchance"] = selected.autotransferchance
selected_list["autotransfer"]["autotransferwait"] = selected.autotransferwait
selected_list["autotransfer"]["autotransferlocation"] = selected.autotransferlocation
- selected_list["autotransfer"]["autotransferextralocation"] = selected.autotransferextralocation //CHOMPAdd
- selected_list["autotransfer"]["autotransferchance_secondary"] = selected.autotransferchance_secondary //CHOMPAdd
- selected_list["autotransfer"]["autotransferlocation_secondary"] = selected.autotransferlocation_secondary //CHOMPAdd
- selected_list["autotransfer"]["autotransferextralocation_secondary"] = selected.autotransferextralocation_secondary //CHOMPAdd
+ selected_list["autotransfer"]["autotransferextralocation"] = selected.autotransferextralocation
+ selected_list["autotransfer"]["autotransferchance_secondary"] = selected.autotransferchance_secondary
+ selected_list["autotransfer"]["autotransferlocation_secondary"] = selected.autotransferlocation_secondary
+ selected_list["autotransfer"]["autotransferextralocation_secondary"] = selected.autotransferextralocation_secondary
selected_list["autotransfer"]["autotransfer_min_amount"] = selected.autotransfer_min_amount
selected_list["autotransfer"]["autotransfer_max_amount"] = selected.autotransfer_max_amount
- //CHOMPAdd auto-transfer flags
+ //auto-transfer flags
var/list/at_whitelist = list()
for(var/flag_name in selected.autotransfer_flags_list)
if(selected.autotransfer_whitelist & selected.autotransfer_flags_list[flag_name])
@@ -416,29 +392,19 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(selected.autotransfer_secondary_blacklist_items & selected.autotransfer_flags_list_items[flag_name])
at_secondary_blacklist_items.Add(flag_name)
selected_list["autotransfer"]["autotransfer_secondary_blacklist_items"] = at_secondary_blacklist_items
- //CHOMPAdd END
selected_list["disable_hud"] = selected.disable_hud
selected_list["colorization_enabled"] = selected.colorization_enabled
selected_list["belly_fullscreen_color"] = selected.belly_fullscreen_color
- //selected_list["belly_fullscreen_color_secondary"] = selected.belly_fullscreen_color_secondary // Chomp REMOVE - use our solution, not upstream's
- //selected_list["belly_fullscreen_color_trinary"] = selected.belly_fullscreen_color_trinary // Chomp REMOVE - use our solution, not upstream's
- selected_list["belly_fullscreen_color2"] = selected.belly_fullscreen_color2 //CHOMPAdd
- selected_list["belly_fullscreen_color3"] = selected.belly_fullscreen_color3 //CHOMPAdd
- selected_list["belly_fullscreen_color4"] = selected.belly_fullscreen_color4 //CHOMPAdd
- selected_list["belly_fullscreen_alpha"] = selected.belly_fullscreen_alpha //CHOMPAdd
+ selected_list["belly_fullscreen_color2"] = selected.belly_fullscreen_color2
+ selected_list["belly_fullscreen_color3"] = selected.belly_fullscreen_color3
+ selected_list["belly_fullscreen_color4"] = selected.belly_fullscreen_color4
+ selected_list["belly_fullscreen_alpha"] = selected.belly_fullscreen_alpha
if(selected.colorization_enabled)
- selected_list["possible_fullscreens"] = icon_states('modular_chomp/icons/mob/screen_full_vore_ch.dmi') //Makes any icons inside of here selectable. //CHOMPedit
+ selected_list["possible_fullscreens"] = icon_states('icons/mob/screen_full_vore_list.dmi') //Makes any icons inside of here selectable.
else
- selected_list["possible_fullscreens"] = icon_states('icons/mob/screen_full_vore.dmi') //Where all upstream stomachs are stored. I'm not touching the chunks of comments below but they are inaccurate here.
- //INSERT COLORIZE-ONLY STOMACHS HERE.
- //This manually removed color-only stomachs from the above list.
- //For some reason, colorized stomachs have to be added to both colorized_vore(to be selected) and full_vore (to show the preview in tgui)
- //Why? I have no flipping clue. As you can see above, vore_colorized is included in the assets but isn't working. It makes no sense.
- //I can only imagine this is a BYOND/TGUI issue with the cache. If you can figure out how to fix this and make it so you only need to
- //include things in full_colorized_vore, that would be great. For now, this is the only workaround that I could get to work.
- //selected_list["possible_fullscreens"] -= belly_colorable_only_fullscreens // Chomp REMOVE - use our solution, not upstream's
+ selected_list["possible_fullscreens"] = icon_states('icons/mob/screen_full_vore.dmi') //Non colorable
var/list/selected_contents = list()
for(var/O in selected)
@@ -449,13 +415,13 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"ref" = "\ref[O]",
"outside" = TRUE,
)
- if(show_pictures) //CHOMPedit Start: disables icon mode
+ if(show_pictures) //disables icon mode
if(selected.contents.len <= max_icon_content)
icon_overflow = FALSE
info["icon"] = cached_nom_icon(O)
else
icon_overflow = TRUE
- //CHOMPEdit End
+
if(isliving(O))
var/mob/living/M = O
info["stat"] = M.stat
@@ -464,7 +430,8 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
selected_contents.Add(list(info))
selected_list["contents"] = selected_contents
- selected_list["show_liq"] = selected.show_liquids //CHOMPedit start: liquid belly options
+ // liquid belly options
+ selected_list["show_liq"] = selected.show_liquids
selected_list["liq_interacts"] = list()
if(selected.show_liquids)
selected_list["liq_interacts"]["liq_reagent_gen"] = selected.reagentbellymode
@@ -510,7 +477,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
selected_list["liq_messages"]["liq_msg2"] = selected.liquid_fullness2_messages
selected_list["liq_messages"]["liq_msg3"] = selected.liquid_fullness3_messages
selected_list["liq_messages"]["liq_msg4"] = selected.liquid_fullness4_messages
- selected_list["liq_messages"]["liq_msg5"] = selected.liquid_fullness5_messages //CHOMPedit end
+ selected_list["liq_messages"]["liq_msg5"] = selected.liquid_fullness5_messages
data["selected"] = selected_list
data["prefs"] = list(
@@ -525,7 +492,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"show_vore_fx" = host.show_vore_fx,
"can_be_drop_prey" = host.can_be_drop_prey,
"can_be_drop_pred" = host.can_be_drop_pred,
- //CHOMPedit Start
"latejoin_vore" = host.latejoin_vore,
"latejoin_prey" = host.latejoin_prey,
"no_spawnpred_warning" = host.no_latejoin_vore_warning,
@@ -534,27 +500,27 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"no_spawnprey_warning_time" = host.no_latejoin_prey_warning_time,
"no_spawnpred_warning_save" = host.no_latejoin_vore_warning_persists,
"no_spawnprey_warning_save" = host.no_latejoin_prey_warning_persists,
- //CHOMPedit End
"allow_spontaneous_tf" = host.allow_spontaneous_tf,
"step_mechanics_active" = host.step_mechanics_pref,
"pickup_mechanics_active" = host.pickup_pref,
- "strip_mechanics_active" = host.strip_pref, //CHOMPedit
+ "strip_mechanics_active" = host.strip_pref,
"noisy" = host.noisy,
- //CHOMPedit start, liquid belly prefs
+ //liquid belly prefs
"liq_rec" = host.receive_reagents,
"liq_giv" = host.give_reagents,
"liq_apply" = host.apply_reagents,
"autotransferable" = host.autotransferable,
"noisy_full" = host.noisy_full, //Belching while full
"selective_active" = host.selective_preference, //Reveal active selective mode in prefs
- //CHOMPedit end
+
"allow_mind_transfer" = host.allow_mind_transfer,
"drop_vore" = host.drop_vore,
"slip_vore" = host.slip_vore,
"stumble_vore" = host.stumble_vore,
"throw_vore" = host.throw_vore,
- "phase_vore" = host.phase_vore, //CHOMPedit
+ "phase_vore" = host.phase_vore,
"food_vore" = host.food_vore,
+ "consume_liquid_belly" = host.consume_liquid_belly,
"digest_pain" = host.digest_pain,
"nutrition_message_visible" = host.nutrition_message_visible,
"nutrition_messages" = host.nutrition_messages,
@@ -562,7 +528,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"weight_messages" = host.weight_messages,
"eating_privacy_global" = host.eating_privacy_global,
"allow_mimicry" = host.allow_mimicry,
- //CHOMPEdit start, vore sprites
+ // start, vore sprites
"belly_rub_target" = host.belly_rub_target,
"vore_sprite_color" = host.vore_sprite_color,
"vore_sprite_multiply" = host.vore_sprite_multiply,
@@ -571,9 +537,8 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"soulcatcher_allow_transfer" = host.soulcatcher_pref_flags & SOULCATCHER_ALLOW_TRANSFER,
"soulcatcher_allow_takeover" = host.soulcatcher_pref_flags & SOULCATCHER_ALLOW_TAKEOVER,
"soulcatcher_allow_deletion" = (global_flag_check(host.soulcatcher_pref_flags, SOULCATCHER_ALLOW_DELETION) + global_flag_check(host.soulcatcher_pref_flags, SOULCATCHER_ALLOW_DELETION_INSTANT))
- //CHOMPEdit end
)
- //CHOMPAdd Start, Soulcatcher
+ // Soulcatcher
var/list/stored_souls = list()
data["soulcatcher"] = null
if(host.soulgem)
@@ -609,7 +574,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"maximum_size" = host.has_large_resize_bounds() ? RESIZE_MAXIMUM_DORMS : RESIZE_MAXIMUM,
"resize_cost" = VORE_RESIZE_COST
)
- //CHOMPAdd End, Soulcatcher
return data
@@ -701,9 +665,9 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(choice != "Yes, save.")
return TRUE
if(!host.save_vore_prefs())
- tgui_alert_async(ui.user, "ERROR: Chomp-specific preferences failed to save!","Error") // CHOMPEdit
+ tgui_alert_async(ui.user, "ERROR: " + STATION_PREF_NAME + "-specific preferences failed to save!","Error")
else
- to_chat(ui.user, span_notice("Chomp-specific preferences saved!")) // CHOMPEdit
+ to_chat(ui.user, span_notice(STATION_PREF_NAME + "-specific preferences saved!"))
unsaved_changes = FALSE
return TRUE
if("reloadprefs")
@@ -711,9 +675,9 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(alert != "Reload")
return FALSE
if(!host.apply_vore_prefs())
- tgui_alert_async(ui.user, "ERROR: Chomp-specific preferences failed to apply!","Error") // CHOMPEdit
+ tgui_alert_async(ui.user, "ERROR: " + STATION_PREF_NAME + "-specific preferences failed to apply!","Error")
else
- to_chat(ui.user,span_notice("Chomp-specific preferences applied from active slot!")) // CHOMPEdit
+ to_chat(ui.user,span_notice(STATION_PREF_NAME + "-specific preferences applied from active slot!"))
unsaved_changes = FALSE
return TRUE
if("loadprefsfromslot")
@@ -721,12 +685,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(alert != "Load")
return FALSE
if(!host.load_vore_prefs_from_slot())
- tgui_alert_async(ui.user, "ERROR: Vore-specific preferences failed to apply!","Error") //CHOMPEdit
+ tgui_alert_async(ui.user, "ERROR: Vore-specific preferences failed to apply!","Error")
else
- to_chat(ui.user,span_notice("Vore-specific preferences applied from active slot!")) //CHOMPEdit
+ to_chat(ui.user,span_notice("Vore-specific preferences applied from active slot!"))
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit - "Belly HTML Export Earlyport"
+ //"Belly HTML Export Earlyport"
if("exportpanel")
if(!ui.user)
return FALSE
@@ -742,7 +706,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
exportPanel.open_export_panel(ui.user)
return TRUE
- //CHOMPEdit End
if("setflavor")
var/new_flavor = html_encode(tgui_input_text(ui.user,"What your character tastes like (400ch limit). This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream':","Character Flavor",host.vore_taste))
if(!new_flavor)
@@ -779,7 +742,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.client.prefs_vr.can_be_drop_prey = host.can_be_drop_prey
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit Start
if("toggle_latejoin_vore")
host.latejoin_vore = !host.latejoin_vore
if(host.client.prefs_vr)
@@ -792,7 +754,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.client.prefs_vr.latejoin_prey = host.latejoin_prey
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit End
if("toggle_allow_spontaneous_tf")
host.allow_spontaneous_tf = !host.allow_spontaneous_tf
if(host.client.prefs_vr)
@@ -865,14 +826,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.client.prefs_vr.pickup_pref = host.pickup_pref
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit Start
if("toggle_strippref")
host.strip_pref = !host.strip_pref
if(host.client.prefs_vr)
host.client.prefs_vr.strip_pref = host.strip_pref
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit End
if("toggle_allow_mind_transfer")
host.allow_mind_transfer = !host.allow_mind_transfer
if(host.client.prefs_vr)
@@ -889,14 +848,11 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.show_vore_fx = !host.show_vore_fx
if(host.client.prefs_vr)
host.client.prefs_vr.show_vore_fx = host.show_vore_fx
- if (isbelly(host.loc)) //CHOMPEdit
+ if (isbelly(host.loc))
var/obj/belly/B = host.loc
B.vore_fx(host, TRUE)
else
host.clear_fullscreen("belly")
- //host.clear_fullscreen("belly2") //Chomp REMOVE - use our solution, not upstream's
- //host.clear_fullscreen("belly3") //Chomp REMOVE - use our solution, not upstream's
- //host.clear_fullscreen("belly4") //Chomp REMOVE - use our solution, not upstream's
if(!host.hud_used.hud_shown)
host.toggle_hud_vis()
unsaved_changes = TRUE
@@ -905,7 +861,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.noisy = !host.noisy
unsaved_changes = TRUE
return TRUE
- //CHOMPedit start: liquid belly code
+ // liquid belly code
if("liq_set_attribute")
return liq_set_attr(ui.user, params)
if("liq_set_messages")
@@ -939,53 +895,46 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.noisy_full = !host.noisy_full
unsaved_changes = TRUE
return TRUE
- //CHOMPedit end
if("toggle_drop_vore")
host.drop_vore = !host.drop_vore
- //CHOMPEdit Start
if(host.client.prefs_vr)
host.client.prefs_vr.drop_vore = host.drop_vore
- //CHOMPEdit End
unsaved_changes = TRUE
return TRUE
if("toggle_slip_vore")
host.slip_vore = !host.slip_vore
- //CHOMPEdit Start
if(host.client.prefs_vr)
host.client.prefs_vr.slip_vore = host.slip_vore
- //CHOMPEdit End
unsaved_changes = TRUE
return TRUE
if("toggle_stumble_vore")
host.stumble_vore = !host.stumble_vore
- //CHOMPEdit Start
if(host.client.prefs_vr)
host.client.prefs_vr.stumble_vore = host.stumble_vore
- //CHOMPEdit End
unsaved_changes = TRUE
return TRUE
if("toggle_throw_vore")
host.throw_vore = !host.throw_vore
- //CHOMPEdit Start
if(host.client.prefs_vr)
host.client.prefs_vr.throw_vore = host.throw_vore
- //CHOMPEdit End
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit Start
if("toggle_phase_vore")
host.phase_vore = !host.phase_vore
if(host.client.prefs_vr)
host.client.prefs_vr.phase_vore = host.phase_vore
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit End
if("toggle_food_vore")
host.food_vore = !host.food_vore
- //CHOMPEdit Start
if(host.client.prefs_vr)
host.client.prefs_vr.food_vore = host.food_vore
- //CHOMPEdit End
+ unsaved_changes = TRUE
+ return TRUE
+ if("toggle_consume_liquid_belly")
+ host.consume_liquid_belly = !host.consume_liquid_belly
+ if(host.client.prefs_vr)
+ host.client.prefs_vr.consume_liquid_belly = host.consume_liquid_belly
unsaved_changes = TRUE
return TRUE
if("toggle_digest_pain")
@@ -1022,7 +971,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.update_icons_body()
unsaved_changes = TRUE
return TRUE
- //CHOMPAdd start - vore sprites color
+ //vore sprites color
if("set_belly_rub")
host.belly_rub_target = tgui_input_list(ui.user, "Which belly would you prefer to be rubbed?","Select Target", host.vore_organs)
if(!(host.belly_rub_target))
@@ -1241,7 +1190,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
unsaved_changes = TRUE
host.soulgem.set_custom_message(message, "delete")
return TRUE
- //CHOMPAdd end
/datum/vore_look/proc/pick_from_inside(mob/user, params)
var/atom/movable/target = locate(params["pick"])
@@ -1251,14 +1199,14 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return TRUE // Aren't here anymore, need to update menu
var/intent = "Examine"
- //CHOMPEdit Start - Only allow indirect belly viewers to examine
+ // Only allow indirect belly viewers to examine
if(user in OB)
if(isliving(target))
intent = tgui_alert(user, "What do you want to do to them?","Query",list("Examine","Help Out","Devour"))
else if(istype(target, /obj/item))
intent = tgui_alert(user, "What do you want to do to that?","Query",list("Examine","Use Hand"))
- //CHOMPEdit End of indirect vorefx changes
+ //End of indirect vorefx changes
switch(intent)
if("Examine") //Examine a mob inside another mob
@@ -1357,7 +1305,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
for(var/atom/movable/target in host.vore_selected)
to_chat(target,span_vwarning("You're squished from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!"))
- //CHOMPAdd - Send the transfer message to indirect targets as well. Slightly different message because why not.
+ // Send the transfer message to indirect targets as well. Slightly different message because why not.
to_chat(host.vore_selected.get_belly_surrounding(target.contents),span_warning("You're squished along with [target] from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!"))
host.vore_selected.transfer_contents(target, choice, 1)
return TRUE
@@ -1370,10 +1318,10 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(ishuman(target))
available_options += "Transform"
available_options += "Health Check"
- //CHOMPEdit Begin - Add Reforming
+ // Add Reforming
if(isobserver(target) || istype(target,/obj/item/mmi))
available_options += "Reform"
- //CHOMPEdit End
+
if(isliving(target))
var/mob/living/datarget = target
if(datarget.client)
@@ -1417,7 +1365,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(!choice || !(target in host.vore_selected))
return TRUE
to_chat(target,span_vwarning("You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!"))
- //CHOMPAdd - Send the transfer message to indirect targets as well. Slightly different message because why not.
+ // Send the transfer message to indirect targets as well. Slightly different message because why not.
to_chat(host.vore_selected.get_belly_surrounding(target.contents),span_warning("You're squished along with [target] from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!"))
host.vore_selected.transfer_contents(target, choice)
@@ -1478,7 +1426,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
V.tgui_interact(user)
return TRUE
- //CHOMPEdit Begin - Add Reforming
+ // Add Reforming
if("Reform")
if(host.stat)
to_chat(user,span_warning("You can't do that in your state!"))
@@ -1633,7 +1581,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/mob/living/ourtarget = target
to_chat(user, span_notice("Current health reading for \The [ourtarget]: [ourtarget.health] / [ourtarget.maxHealth] "))
return TRUE
- //CHOMPEdit End
if("Process")
var/mob/living/ourtarget = target
var/list/process_options = list()
@@ -1789,7 +1736,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
host.vore_selected.mode_flags ^= host.vore_selected.mode_flag_list[toggle_addon]
host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on
- host.vore_selected.slow_digestion = FALSE //CHOMPAdd Start
+ host.vore_selected.slow_digestion = FALSE
if(host.vore_selected.mode_flags & DM_FLAG_SLOWBODY)
host.vore_selected.slow_digestion = TRUE
if(toggle_addon == "TURBO MODE")
@@ -1798,11 +1745,11 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(host.vore_selected.mode_flags & DM_FLAG_TURBOMODE)
host.vore_selected.speedy_mob_processing = TRUE
START_PROCESSING(SSobj, host.vore_selected)
- to_chat(user, "TURBO MODE activated! Belly processing speed tripled! This also affects timed settings, such as autotransfer and liquid generation.")
+ to_chat(user, span_warning("TURBO MODE activated! Belly processing speed tripled! This also affects timed settings, such as autotransfer and liquid generation."))
else
host.vore_selected.speedy_mob_processing = FALSE
START_PROCESSING(SSbellies, host.vore_selected)
- to_chat(user, "TURBO MODE deactivated. Belly processing returned to normal speed.")//CHOMPAdd End
+ to_chat(user, span_warning("TURBO MODE deactivated. Belly processing returned to normal speed."))
. = TRUE
if("b_item_mode")
var/list/menu_list = host.vore_selected.item_digest_modes.Copy()
@@ -1814,7 +1761,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.vore_selected.item_digest_mode = new_mode
host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on belly-mode change
. = TRUE
- if("b_contaminates") // CHOMPedit: Reverting upstream's change because why reset save files due to a different server's drama?
+ if("b_contaminates") // Reverting upstream's change because why reset save files due to a different server's drama?
host.vore_selected.contaminates = !host.vore_selected.contaminates
. = TRUE
if("b_contamination_flavor")
@@ -1839,7 +1786,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
host.vore_selected.egg_type = new_egg_type
. = TRUE
- if("b_egg_name") //CHOMPAdd Start
+ if("b_egg_name")
var/new_egg_name = html_encode(tgui_input_text(user,"Custom Egg Name (Leave empty for default egg name)","New Egg Name"))
if(length(new_egg_name) > BELLIES_NAME_MAX)
tgui_alert_async(user, "Entered name too long (max [BELLIES_NAME_MAX]).","Error")
@@ -1864,7 +1811,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
. = TRUE
if("b_storing_nutrition")
host.vore_selected.storing_nutrition = !host.vore_selected.storing_nutrition
- . = TRUE//CHOMPAdd End
+ . = TRUE
if("b_desc")
var/new_desc = html_encode(tgui_input_text(user,"Belly Description, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc, multiline = TRUE, prevent_enter = TRUE))
@@ -1891,209 +1838,209 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
user.text_warnings = FALSE
var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. '%count' will be replaced with the number of anything in your belly. '%countprey' will be replaced with the number of living prey in your belly."
switch(params["msgtype"])
- if("dmp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages("dmp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(DIGEST_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages(DIGEST_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"dmp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,DIGEST_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("dmo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",host.vore_selected.get_messages("dmo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(DIGEST_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",host.vore_selected.get_messages(DIGEST_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"dmo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,DIGEST_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("amp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorb Message (to prey)",host.vore_selected.get_messages("amp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORB_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorb Message (to prey)",host.vore_selected.get_messages(ABSORB_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"amp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORB_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("amo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorb Message (to you)",host.vore_selected.get_messages("amo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORB_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorb Message (to you)",host.vore_selected.get_messages(ABSORB_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"amo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORB_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("uamp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their unnabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Unabsorb Message (to prey)",host.vore_selected.get_messages("uamp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(UNABSORBS_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their unnabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Unabsorb Message (to prey)",host.vore_selected.get_messages(UNABSORBS_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"uamp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,UNABSORBS_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("uamo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's unabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Unabsorb Message (to you)",host.vore_selected.get_messages("uamo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(UNABSORBS_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's unabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Unabsorb Message (to you)",host.vore_selected.get_messages(UNABSORBS_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"uamo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,UNABSORBS_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("smo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages("smo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(STRUGGLE_OUTSIDE)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages(STRUGGLE_OUTSIDE), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"smo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,STRUGGLE_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
- if("smi")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",host.vore_selected.get_messages("smi"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(STRUGGLE_INSIDE)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",host.vore_selected.get_messages(STRUGGLE_INSIDE), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"smi", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,STRUGGLE_INSIDE, limit = MAX_MESSAGE_LEN / 4)
- if("asmo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when absorbed prey struggles. Write them in 3rd person ('X's Y bulges'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorbed Struggle Message (outside)",host.vore_selected.get_messages("asmo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORBED_STRUGGLE_OUSIDE)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when absorbed prey struggles. Write them in 3rd person ('X's Y bulges'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorbed Struggle Message (outside)",host.vore_selected.get_messages(ABSORBED_STRUGGLE_OUSIDE), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"asmo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORBED_STRUGGLE_OUSIDE, limit = MAX_MESSAGE_LEN / 4)
- if("asmi")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorbed Struggle Message (inside)",host.vore_selected.get_messages("asmi"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORBED_STRUGGLE_INSIDE)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Absorbed Struggle Message (inside)",host.vore_selected.get_messages(ABSORBED_STRUGGLE_INSIDE), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"asmi", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORBED_STRUGGLE_INSIDE, limit = MAX_MESSAGE_LEN / 4)
- if("escap")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Escape Attempt Message (to prey)",host.vore_selected.get_messages("escap"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_ATTEMPT_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Escape Attempt Message (to prey)",host.vore_selected.get_messages(ESCAPE_ATTEMPT_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escap", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_ATTEMPT_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("escao")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Attempt Message (to you)",host.vore_selected.get_messages("escao"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_ATTEMPT_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Attempt Message (to you)",host.vore_selected.get_messages(ESCAPE_ATTEMPT_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escao", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_ATTEMPT_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("escp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they escape from within you. Write them in 2nd person ('you climb out of Y)."+help,"Escape Message (to prey)",host.vore_selected.get_messages("escp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they escape from within you. Write them in 2nd person ('you climb out of Y)."+help,"Escape Message (to prey)",host.vore_selected.get_messages(ESCAPE_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("esco")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Message (to you)",host.vore_selected.get_messages("esco"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Escape Message (to you)",host.vore_selected.get_messages(ESCAPE_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"esco", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("escout")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey escapes from within you. Write them in 3rd person ('X climbs out of Z's Y')."+help,"Escape Message (outside)",host.vore_selected.get_messages("escout"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_OUTSIDE)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey escapes from within you. Write them in 3rd person ('X climbs out of Z's Y')."+help,"Escape Message (outside)",host.vore_selected.get_messages(ESCAPE_OUTSIDE), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escout", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
- if("escip")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they manage to eject an item from within you. Write them in 2nd person ('you manage to O'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to prey)",host.vore_selected.get_messages("escip"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_ITEM_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they manage to eject an item from within you. Write them in 2nd person ('you manage to O'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to prey)",host.vore_selected.get_messages(ESCAPE_ITEM_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escip", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_ITEM_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("escio")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey manages to eject an item from within you. Write them in 2nd person ('O slips from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to you)",host.vore_selected.get_messages("escio"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_ITEM_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey manages to eject an item from within you. Write them in 2nd person ('O slips from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (to you)",host.vore_selected.get_messages(ESCAPE_ITEM_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escio", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_ITEM_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("esciout")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey manages to eject an item from within you. Write them in 3rd person ('O from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (outside)",host.vore_selected.get_messages("esciout"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_ITEM_OUTSIDE)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when prey manages to eject an item from within you. Write them in 3rd person ('O from Y'). Use %item to refer to the ejected item in this type."+help,"Escape Item Message (outside)",host.vore_selected.get_messages(ESCAPE_ITEM_OUTSIDE), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"esciout", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_ITEM_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
- if("escfp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Escape Fail Message (to prey)",host.vore_selected.get_messages("escfp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_FAIL_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Escape Fail Message (to prey)",host.vore_selected.get_messages(ESCAPE_FAIL_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escfp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_FAIL_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("escfo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Escape Fail Message (to you)",host.vore_selected.get_messages("escfo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ESCAPE_FAIL_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Escape Fail Message (to you)",host.vore_selected.get_messages(ESCAPE_FAIL_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"escfo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ESCAPE_FAIL_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("aescap")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Absorbed Escape Attempt Message (to prey)",host.vore_selected.get_messages("aescap"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORBED_ESCAPE_ATTEMPT_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they try to escape from within you. Write them in 2nd person ('you start to X')."+help,"Absorbed Escape Attempt Message (to prey)",host.vore_selected.get_messages(ABSORBED_ESCAPE_ATTEMPT_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"aescap", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORBED_ESCAPE_ATTEMPT_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("aescao")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Attempt Message (to you)",host.vore_selected.get_messages("aescao"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORBED_ESCAPE_ATTEMPT_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey tries to escape from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Attempt Message (to you)",host.vore_selected.get_messages(ABSORBED_ESCAPE_ATTEMPT_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"aescao", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORBED_ESCAPE_ATTEMPT_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("aescp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they escape from within you. Write them in 2nd person ('you escape from Y')."+help,"Absorbed Escape Message (to prey)",host.vore_selected.get_messages("aescp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORBED_ESCAPE_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they escape from within you. Write them in 2nd person ('you escape from Y')."+help,"Absorbed Escape Message (to prey)",host.vore_selected.get_messages(ABSORBED_ESCAPE_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"aescp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORBED_ESCAPE_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("aesco")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Message (to you)",host.vore_selected.get_messages("aesco"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORBED_ESCAPE_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey escapes from within you. Write them in 2nd person ('X ... from your Y')."+help,"Absorbed Escape Message (to you)",host.vore_selected.get_messages(ABSORBED_ESCAPE_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"aesco", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORBED_ESCAPE_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("aescout")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when absorbed prey escapes from within you. Write them in 3rd person ('X escapes from Z's Y')."+help,"Absorbed Escape Message (outside)",host.vore_selected.get_messages("aescout"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORBED_ESCAPE_OUTSIDE)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to those around you when absorbed prey escapes from within you. Write them in 3rd person ('X escapes from Z's Y')."+help,"Absorbed Escape Message (outside)",host.vore_selected.get_messages(ABSORBED_ESCAPE_OUTSIDE), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"aescout", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,ABSORBED_ESCAPE_OUTSIDE, limit = MAX_MESSAGE_LEN / 4)
- if("aescfp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Absorbed Escape Fail Message (to prey)",host.vore_selected.get_messages("aescfp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(FULL_ABSORBED_ESCAPE_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they fail to escape from within you. Write them in 2nd person ('you failed to Y')."+help,"Absorbed Escape Fail Message (to prey)",host.vore_selected.get_messages(FULL_ABSORBED_ESCAPE_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"aescfp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,FULL_ABSORBED_ESCAPE_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("aescfo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Absorbed Escape Fail Message (to you)",host.vore_selected.get_messages("aescfo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(FULL_ABSORBED_ESCAPE_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when absorbed prey fails to escape from within you. Write them in 2nd person ('X failed ... your Y')."+help,"Absorbed Escape Fail Message (to you)",host.vore_selected.get_messages(FULL_ABSORBED_ESCAPE_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"aescfo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,FULL_ABSORBED_ESCAPE_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("trnspp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle and are transferred into your primary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to prey)",host.vore_selected.get_messages("trnspp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0) //CHOMPEdit
+ if(PRIMARY_TRANSFER_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle and are transferred into your primary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to prey)",host.vore_selected.get_messages(PRIMARY_TRANSFER_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"trnspp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,PRIMARY_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("trnspo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey struggle and are transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to you)",host.vore_selected.get_messages("trnspo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0) //CHOMPEdit
+ if(PRIMARY_TRANSFER_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey struggle and are transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Primary Transfer Message (to you)",host.vore_selected.get_messages(PRIMARY_TRANSFER_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"trnspo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,PRIMARY_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("trnssp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle and are transferred into your secondary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to prey)",host.vore_selected.get_messages("trnssp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0) //CHOMPEdit
+ if(SECONDARY_TRANSFER_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle and are transferred into your secondary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to prey)",host.vore_selected.get_messages(SECONDARY_TRANSFER_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"trnssp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,SECONDARY_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("trnsso")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey struggle and are transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to you)",host.vore_selected.get_messages("trnsso"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0) //CHOMPEdit
+ if(SECONDARY_TRANSFER_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey struggle and are transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Secondary Transfer Message (to you)",host.vore_selected.get_messages(SECONDARY_TRANSFER_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"trnsso", limit = MAX_MESSAGE_LEN / 4)
- //CHOMPAdd Start
- if("atrnspp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your primary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Primary Auto-Transfer Message (to prey)",host.vore_selected.get_messages("atrnspp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
- if(new_message)
- host.vore_selected.set_messages(new_message,"atrnspp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,SECONDARY_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("atrnspo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Primary Auto-Transfer Message (to you)",host.vore_selected.get_messages("atrnspo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(PRIMARY_AUTO_TRANSFER_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your primary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Primary Auto-Transfer Message (to prey)",host.vore_selected.get_messages(PRIMARY_AUTO_TRANSFER_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"atrnspo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,PRIMARY_AUTO_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("atrnssp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your secondary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Secondary Auto-Transfer Message (to prey)",host.vore_selected.get_messages("atrnssp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(PRIMARY_AUTO_TRANSFER_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Primary Auto-Transfer Message (to you)",host.vore_selected.get_messages(PRIMARY_AUTO_TRANSFER_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"atrnssp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,PRIMARY_AUTO_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("atrnsso")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Secondary Auto-Transfer Message (to you)",host.vore_selected.get_messages("atrnsso"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(SECONDARY_AUTO_TRANSFER_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they are automatically transferred into your secondary destination. Write them in 2nd person ('you slide into Y'). Use %dest to refer to the target location in this type."+help,"Secondary Auto-Transfer Message (to prey)",host.vore_selected.get_messages(SECONDARY_AUTO_TRANSFER_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"atrnsso", limit = MAX_MESSAGE_LEN / 4)
- //CHOMPAdd End
- if("stmodp")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages("stmodp"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
- if(new_message)
- host.vore_selected.set_messages(new_message,"stmodp", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,SECONDARY_AUTO_TRANSFER_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("stmodo")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages("stmodo"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(SECONDARY_AUTO_TRANSFER_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey is automatically transferred into your primary destination. Write them in 2nd person ('X slid into your Y'). Use %dest to refer to the target location in this type."+help,"Secondary Auto-Transfer Message (to you)",host.vore_selected.get_messages(SECONDARY_AUTO_TRANSFER_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"stmodo", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,SECONDARY_AUTO_TRANSFER_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("stmoap")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages("stmoap"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(DIGEST_CHANCE_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages(DIGEST_CHANCE_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"stmoap", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,DIGEST_CHANCE_PREY, limit = MAX_MESSAGE_LEN / 4)
- if("stmoao")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages("stmoao"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(DIGEST_CHANCE_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction digest chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages(DIGEST_CHANCE_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"stmoao", limit = MAX_MESSAGE_LEN / 4)
- if("em")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages("em"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
- if(new_message)
- host.vore_selected.set_messages(new_message,"em", limit = MAX_MESSAGE_LEN / 2)
+ host.vore_selected.set_messages(new_message,DIGEST_CHANCE_OWNER, limit = MAX_MESSAGE_LEN / 4)
- if("ema")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages("ema"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(ABSORB_CHANCE_PREY)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they trigger the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to prey)",host.vore_selected.get_messages(ABSORB_CHANCE_PREY), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"ema", limit = MAX_MESSAGE_LEN / 2)
+ host.vore_selected.set_messages(new_message,ABSORB_CHANCE_PREY, limit = MAX_MESSAGE_LEN / 4)
+
+ if(ABSORB_CHANCE_OWNER)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey triggers the interaction absorb chance. Write them in 2nd person ('you feel X')."+help,"Stomach Mode Digest Message (to you)",host.vore_selected.get_messages(ABSORB_CHANCE_OWNER), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(new_message)
+ host.vore_selected.set_messages(new_message,ABSORB_CHANCE_OWNER, limit = MAX_MESSAGE_LEN / 4)
+ if(EXAMINES)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages(EXAMINES), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(new_message)
+ host.vore_selected.set_messages(new_message,EXAMINES, limit = MAX_MESSAGE_LEN / 2)
+
+ if(EXAMINES_ABSORBED)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages(EXAMINES_ABSORBED), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(new_message)
+ host.vore_selected.set_messages(new_message,EXAMINES_ABSORBED, limit = MAX_MESSAGE_LEN / 2)
if("en")
var/list/indices = list(1,2,3,4,5,6,7,8,9,10)
@@ -2121,60 +2068,60 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(new_message)
host.weight_messages[index] = new_message
- if("im_digest")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Digest mode. Write them in 2nd person ('%pred's %belly squishes down on you.')."+help,"Idle Message (Digest)",host.vore_selected.get_messages("im_digest"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_DIGEST)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Digest mode. Write them in 2nd person ('%pred's %belly squishes down on you.')."+help,"Idle Message (Digest)",host.vore_selected.get_messages(BELLY_MODE_DIGEST), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_digest", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_DIGEST, limit = MAX_MESSAGE_LEN / 4)
- if("im_hold")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Hold mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Hold)",host.vore_selected.get_messages("im_hold"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_HOLD)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Hold mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Hold)",host.vore_selected.get_messages(BELLY_MODE_HOLD), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_hold", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_HOLD, limit = MAX_MESSAGE_LEN / 4)
- if("im_holdabsorbed")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are absorbed. Write them in 2nd person ('%pred's %belly squishes down on you.') %count will not work for this type, and %countprey will only count absorbed victims."+help,"Idle Message (Hold Absorbed)",host.vore_selected.get_messages("im_holdabsorbed"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_HOLD_ABSORB)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are absorbed. Write them in 2nd person ('%pred's %belly squishes down on you.') %count will not work for this type, and %countprey will only count absorbed victims."+help,"Idle Message (Hold Absorbed)",host.vore_selected.get_messages(BELLY_MODE_HOLD_ABSORB), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_holdabsorbed", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_HOLD_ABSORB, limit = MAX_MESSAGE_LEN / 4)
- if("im_absorb")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Absorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Absorb)",host.vore_selected.get_messages("im_absorb"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_ABSORB)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Absorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Absorb)",host.vore_selected.get_messages(BELLY_MODE_ABSORB), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_absorb", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_ABSORB, limit = MAX_MESSAGE_LEN / 4)
- if("im_heal")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Heal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Heal)",host.vore_selected.get_messages("im_heal"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_HEAL)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Heal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Heal)",host.vore_selected.get_messages(BELLY_MODE_HEAL), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_heal", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_HEAL, limit = MAX_MESSAGE_LEN / 4)
- if("im_drain")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Drain mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Drain)",host.vore_selected.get_messages("im_drain"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_DRAIN)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Drain mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Drain)",host.vore_selected.get_messages(BELLY_MODE_DRAIN), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_drain", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_DRAIN, limit = MAX_MESSAGE_LEN / 4)
- if("im_steal")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Size Steal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Size Steal)",host.vore_selected.get_messages("im_steal"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_STEAL)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Size Steal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Size Steal)",host.vore_selected.get_messages(BELLY_MODE_STEAL), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_steal", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_STEAL, limit = MAX_MESSAGE_LEN / 4)
- if("im_egg")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Encase In Egg mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Encase In Egg)",host.vore_selected.get_messages("im_egg"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_EGG)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Encase In Egg mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Encase In Egg)",host.vore_selected.get_messages(BELLY_MODE_EGG), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_egg", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_EGG, limit = MAX_MESSAGE_LEN / 4)
- if("im_shrink")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Shrink mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Shrink)",host.vore_selected.get_messages("im_shrink"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_SHRINK)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Shrink mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Shrink)",host.vore_selected.get_messages(BELLY_MODE_SHRINK), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_shrink", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_SHRINK, limit = MAX_MESSAGE_LEN / 4)
- if("im_grow")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Grow mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Grow)",host.vore_selected.get_messages("im_grow"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_GROW)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Grow mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Grow)",host.vore_selected.get_messages(BELLY_MODE_GROW), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_grow", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_GROW, limit = MAX_MESSAGE_LEN / 4)
- if("im_unabsorb")
- var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Unabsorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Unabsorb)",host.vore_selected.get_messages("im_unabsorb"), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
+ if(BELLY_MODE_UNABSORB)
+ var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every [host.vore_selected.emote_time] seconds when you are on Unabsorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Unabsorb)",host.vore_selected.get_messages(BELLY_MODE_UNABSORB), MAX_MESSAGE_LEN * 1.5, TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN * 1.5,0,0,0)
if(new_message)
- host.vore_selected.set_messages(new_message,"im_unabsorb", limit = MAX_MESSAGE_LEN / 4)
+ host.vore_selected.set_messages(new_message,BELLY_MODE_UNABSORB, limit = MAX_MESSAGE_LEN / 4)
if("reset")
var/confirm = tgui_alert(user,"This will delete any custom messages. Are you sure?","Confirmation",list("Cancel","DELETE"))
@@ -2210,10 +2157,10 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.vore_selected.primary_transfer_messages_prey = initial(host.vore_selected.primary_transfer_messages_prey)
host.vore_selected.secondary_transfer_messages_owner = initial(host.vore_selected.secondary_transfer_messages_owner)
host.vore_selected.secondary_transfer_messages_prey = initial(host.vore_selected.secondary_transfer_messages_prey)
- host.vore_selected.primary_autotransfer_messages_owner = initial(host.vore_selected.primary_autotransfer_messages_owner) //CHOMPAdd
- host.vore_selected.primary_autotransfer_messages_prey = initial(host.vore_selected.primary_autotransfer_messages_prey) //CHOMPAdd
- host.vore_selected.secondary_autotransfer_messages_owner = initial(host.vore_selected.secondary_autotransfer_messages_owner) //CHOMPAdd
- host.vore_selected.secondary_autotransfer_messages_prey = initial(host.vore_selected.secondary_autotransfer_messages_prey) //CHOMPAdd
+ host.vore_selected.primary_autotransfer_messages_owner = initial(host.vore_selected.primary_autotransfer_messages_owner)
+ host.vore_selected.primary_autotransfer_messages_prey = initial(host.vore_selected.primary_autotransfer_messages_prey)
+ host.vore_selected.secondary_autotransfer_messages_owner = initial(host.vore_selected.secondary_autotransfer_messages_owner)
+ host.vore_selected.secondary_autotransfer_messages_prey = initial(host.vore_selected.secondary_autotransfer_messages_prey)
host.vore_selected.digest_chance_messages_owner = initial(host.vore_selected.digest_chance_messages_owner)
host.vore_selected.digest_chance_messages_prey = initial(host.vore_selected.digest_chance_messages_prey)
host.vore_selected.absorb_chance_messages_owner = initial(host.vore_selected.absorb_chance_messages_owner)
@@ -2310,9 +2257,9 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
releasetest = classic_release_sounds[host.vore_selected.release_sound]
if(releasetest)
- releasetest = sound(releasetest) //CHOMPAdd
- releasetest.volume = host.vore_selected.sound_volume //CHOMPAdd
- releasetest.frequency = host.vore_selected.noise_freq //CHOMPAdd
+ releasetest = sound(releasetest)
+ releasetest.volume = host.vore_selected.sound_volume
+ releasetest.frequency = host.vore_selected.noise_freq
SEND_SOUND(user, releasetest)
. = TRUE
if("b_sound")
@@ -2334,12 +2281,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
else
voretest = classic_vore_sounds[host.vore_selected.vore_sound]
if(voretest)
- voretest = sound(voretest) //CHOMPAdd
- voretest.volume = host.vore_selected.sound_volume //CHOMPAdd
- voretest.frequency = host.vore_selected.noise_freq //CHOMPAdd
+ voretest = sound(voretest)
+ voretest.volume = host.vore_selected.sound_volume
+ voretest.frequency = host.vore_selected.noise_freq
SEND_SOUND(user, voretest)
. = TRUE
- if("b_sound_volume") //CHOMPAdd Start
+ if("b_sound_volume")
var/sound_volume_input = tgui_input_number(user, "Set belly sound volume percentage.", "Sound Volume", null, 100, 0)
if(!isnull(sound_volume_input)) //These have to be 'null' because both cancel and 0 are valid, separate options
host.vore_selected.sound_volume = sanitize_integer(sound_volume_input, 0, 100, initial(host.vore_selected.sound_volume))
@@ -2360,11 +2307,11 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
else if(choice < MIN_VOICE_FREQ)
choice = MIN_VOICE_FREQ
host.vore_selected.noise_freq = choice
- . = TRUE //CHOMPAdd End
+ . = TRUE
if("b_tastes")
host.vore_selected.can_taste = !host.vore_selected.can_taste
. = TRUE
- if("b_feedable") //CHOMPAdd Start
+ if("b_feedable")
host.vore_selected.is_feedable = !host.vore_selected.is_feedable
. = TRUE
if("b_entrance_logs")
@@ -2372,7 +2319,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
. = TRUE
if("b_item_digest_logs")
host.vore_selected.item_digest_logs = !host.vore_selected.item_digest_logs
- . = TRUE //CHOMPAdd End
+ . = TRUE
if("b_bulge_size")
var/new_bulge = tgui_input_number(user, "Choose the required size prey must be to show up on examine, ranging from 25% to 200% Set this to 0 for no text on examine.", "Set Belly Examine Size.", max_value = 200, min_value = 0)
if(new_bulge == null)
@@ -2406,14 +2353,14 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/new_new_nutrition = CLAMP(new_nutrition, 0.01, 100)
host.vore_selected.nutrition_percent = new_new_nutrition
. = TRUE
- // CHOMPEdit Start - modified these to be flexible rather than maxing at 6/6/12/6/6
+ // modified these to be flexible rather than maxing at 6/6/12/6/6
if("b_burn_dmg")
var/new_damage = tgui_input_number(user, "Choose the amount of burn damage prey will take per tick. Max of [host.vore_selected.digest_max] across all damage types. [host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_burn] remaining.", "Set Belly Burn Damage.", host.vore_selected.digest_burn, host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_burn, 0, round_value=FALSE)
if(new_damage == null)
return FALSE
new_damage = CLAMP(new_damage, 0, host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_burn) // sanity check following tgui input
host.vore_selected.digest_burn = new_damage
- host.vore_selected.items_preserved.Cut() //CHOMPAdd
+ host.vore_selected.items_preserved.Cut()
. = TRUE
if("b_brute_dmg")
var/new_damage = tgui_input_number(user, "Choose the amount of brute damage prey will take per tick. Max of [host.vore_selected.digest_max] across all damage types. [host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_brute] remaining.", "Set Belly Brute Damage.", host.vore_selected.digest_brute, host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_brute, 0, round_value=FALSE)
@@ -2421,7 +2368,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
new_damage = CLAMP(new_damage, 0, host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_brute)
host.vore_selected.digest_brute = new_damage
- host.vore_selected.items_preserved.Cut() //CHOMPAdd
+ host.vore_selected.items_preserved.Cut()
. = TRUE
if("b_oxy_dmg")
var/new_damage = tgui_input_number(user, "Choose the amount of oxygen damage prey will take per tick. Max of [host.vore_selected.digest_max] across all damage types. [host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_oxy] remaining.", "Set Belly Oxygen Damage.", host.vore_selected.digest_oxy, host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_oxy, 0, round_value=FALSE)
@@ -2444,7 +2391,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
new_damage = CLAMP(new_damage, 0, host.vore_selected.get_unused_digestion_damage() + host.vore_selected.digest_clone)
host.vore_selected.digest_clone = new_damage
. = TRUE
- // CHOMPEdit End
if("b_drainmode")
var/list/menu_list = host.vore_selected.drainmodes.Copy()
var/new_drainmode = tgui_input_list(user, "Choose Mode (currently [host.vore_selected.digest_mode])", "Mode Choice", menu_list)
@@ -2540,7 +2486,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(!isnull(digest_chance_input))
host.vore_selected.digestchance = sanitize_integer(digest_chance_input, 0, 100, initial(host.vore_selected.digestchance))
. = TRUE
- if("b_autotransferchance") //CHOMPedit Start
+ if("b_autotransferchance")
var/autotransferchance_input = tgui_input_number(user, "Set belly auto-transfer chance (as %). You must also set the location for this to have any effect.", "Auto-Transfer Chance", host.vore_selected.autotransferchance, 100)
if(!isnull(autotransferchance_input))
host.vore_selected.autotransferchance = sanitize_integer(autotransferchance_input, 0, 100, initial(host.vore_selected.autotransferchance))
@@ -2660,7 +2606,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
. = TRUE
if("b_autotransfer_enabled")
host.vore_selected.autotransfer_enabled = !host.vore_selected.autotransfer_enabled
- . = TRUE //CHOMPedit End
+ . = TRUE
if("b_fullscreen")
host.vore_selected.belly_fullscreen = params["val"]
host.vore_selected.update_internal_overlay()
@@ -2708,18 +2654,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.vore_selected.belly_fullscreen_alpha = newalpha
host.vore_selected.update_internal_overlay()
. = TRUE
- /* //Chomp REMOVE - use our solution, not upstream's
- if("b_fullscreen_color_secondary")
- var/newcolor = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color_secondary)
- if(newcolor)
- host.vore_selected.belly_fullscreen_color_secondary = newcolor
- . = TRUE
- if("b_fullscreen_color_trinary")
- var/newcolor = tgui_color_picker(user, "Choose a color.", "", host.vore_selected.belly_fullscreen_color_trinary)
- if(newcolor)
- host.vore_selected.belly_fullscreen_color_trinary = newcolor
- . = TRUE
- */ //Chomp REMOVE - use our solution, not upstream's
if("b_save_digest_mode")
host.vore_selected.save_digest_mode = !host.vore_selected.save_digest_mode
. = TRUE
@@ -2752,28 +2686,26 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
tgui_alert_async(user,failure_msg,"Error!")
return FALSE
- //CHOMPAdd Start, Soulcatcher
if(host.soulgem?.linked_belly == host.vore_selected)
host.soulgem.linked_belly = null
- //CHOMPAdd End, Soulcatcher
qdel(host.vore_selected)
host.vore_selected = host.vore_organs[1]
. = TRUE
- if("b_private_struggle") //CHOMP Addition
+ if("b_private_struggle")
host.vore_selected.private_struggle = !host.vore_selected.private_struggle
. = TRUE
- if("b_vorespawn_blacklist") //CHOMP Addition
+ if("b_vorespawn_blacklist")
host.vore_selected.vorespawn_blacklist = !host.vore_selected.vorespawn_blacklist
. = TRUE
- if("b_vorespawn_whitelist") //CHOMP Addition
+ if("b_vorespawn_whitelist")
var/new_vorespawn_whitelist = sanitize(tgui_input_text(user,"Input ckeys allowed to vorespawn on separate lines. Cancel will clear the list.","Allowed Players",jointext(host.vore_selected.vorespawn_whitelist,"\n"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0)
if(new_vorespawn_whitelist)
host.vore_selected.vorespawn_whitelist = splittext(lowertext(new_vorespawn_whitelist),"\n")
else
host.vore_selected.vorespawn_whitelist = list()
. = TRUE
- if("b_vorespawn_absorbed") //CHOMP Addition
+ if("b_vorespawn_absorbed")
var/current_number = global_flag_check(host.vore_selected.vorespawn_absorbed, VS_FLAG_ABSORB_YES) + global_flag_check(host.vore_selected.vorespawn_absorbed, VS_FLAG_ABSORB_PREY)
switch(current_number)
if(0)
@@ -2785,7 +2717,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.vore_selected.vorespawn_absorbed &= ~(VS_FLAG_ABSORB_PREY)
unsaved_changes = TRUE
return TRUE
- //CHOMPEdit Start
if("b_belly_sprite_to_affect")
var/belly_choice = tgui_input_list(user, "Which belly sprite do you want your [lowertext(host.vore_selected.name)] to affect?","Select Region", host.vore_icon_bellies)
if(!belly_choice) //They cancelled, no changes
@@ -2838,11 +2769,11 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
return FALSE
host.vore_selected.vore_sprite_flags ^= host.vore_selected.vore_sprite_flag_list[toggle_vs_flag]
. = TRUE
- if("b_count_liquid_for_sprites") //CHOMP Addition
+ if("b_count_liquid_for_sprites")
host.vore_selected.count_liquid_for_sprite = !host.vore_selected.count_liquid_for_sprite
host.handle_belly_update()
. = TRUE
- if("b_liquid_multiplier") //CHOMP Addition
+ if("b_liquid_multiplier")
var/liquid_multiplier_input = tgui_input_number(user, "Set the impact amount of liquid reagents will have on your vore sprite. 1 means a belly with 100 reagents of fluid will count as 1 normal sized prey-thing's worth, 0.5 means liquid counts half as much, 2 means liquid counts double. (Range from 0.1 - 10)", "Liquid Multiplier", host.vore_selected.liquid_multiplier, 10, 0.1, round_value=FALSE)
if(!isnull(liquid_multiplier_input))
host.vore_selected.liquid_multiplier = CLAMP(liquid_multiplier_input, 0.1, 10)
@@ -2896,10 +2827,10 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(.)
unsaved_changes = TRUE
-//CHOMPedit start: liquid belly procs
+// liquid belly procs
/datum/vore_look/proc/liq_set_attr(mob/user, params)
if(!host.vore_selected)
- tgui_alert("No belly selected to modify.")
+ tgui_alert(user, "No belly selected to modify.")
return FALSE
var/attr = params["liq_attribute"]
@@ -2933,7 +2864,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/new_name = html_encode(tgui_input_text(user,"New name for liquid shown when transfering and dumping on floor (The actual liquid's name is still the same):","New Name",host.vore_selected.reagent_name))
if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN)
- tgui_alert("Entered name length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error")
+ tgui_alert(user, "Entered name length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error")
return FALSE
host.vore_selected.reagent_name = new_name
@@ -2942,7 +2873,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
var/new_verb = html_encode(tgui_input_text(user,"New verb when liquid is transfered from this belly:","New Verb", host.vore_selected.reagent_transfer_verb))
if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN)
- tgui_alert("Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error")
+ tgui_alert(user, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error")
return FALSE
host.vore_selected.reagent_transfer_verb = new_verb
@@ -3114,7 +3045,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.vore_selected.update_internal_overlay()
. = TRUE
if("b_liq_purge")
- var/alert = tgui_alert("Are you sure you want to delete the liquids in your [lowertext(host.vore_selected.name)]?","Confirmation",list("Delete","Cancel"))
+ var/alert = tgui_alert(user, "Are you sure you want to delete the liquids in your [lowertext(host.vore_selected.name)]?","Confirmation",list("Delete","Cancel"))
if(alert != "Delete")
return FALSE
else
@@ -3195,6 +3126,6 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
. = TRUE
if(.)
unsaved_changes = TRUE
-//CHOMPedit end
-#undef VORE_RESIZE_COST //CHOMPAdd
+#undef VORE_RESIZE_COST
+#undef STATION_PREF_NAME
diff --git a/code/modules/vore/mob_tf.dm b/code/modules/vore/mob_tf.dm
index 0889331f14..ae4e1e1890 100644
--- a/code/modules/vore/mob_tf.dm
+++ b/code/modules/vore/mob_tf.dm
@@ -37,7 +37,7 @@
N.identifying_gender = M.gender
mob_belly_transfer(M)
- M.soulgem.transfer_self(src) //CHOMPAdd Soulcatcher
+ M.soulgem.transfer_self(src) // Soulcatcher
nutrition = M.nutrition
src.ckey = M.ckey
@@ -66,9 +66,9 @@
if(!tf_mob_holder)
return
var/mob/living/ourmob = tf_mob_holder
- //CHOMPAdd Start - OOC Escape functionality for Mind Binder and Body Snatcher
if(soulgem) //Should always be the case, but...Safety. Done here first
soulgem.transfer_self(ourmob)
+ //CHOMPAdd Start - OOC Escape functionality for Mind Binder and Body Snatcher
if(ourmob.loc != src)
if(isnull(ourmob.loc))
to_chat(src,span_notice("You have no body."))
@@ -144,7 +144,7 @@
/mob/living/proc/handle_tf_holder()
if(!tf_mob_holder)
return
- if(tf_mob_holder.loc != src) return //CHOMPAdd - Prevent bodyswapped creatures having their life linked
+ if(tf_mob_holder.loc != src) return // Prevent bodyswapped creatures having their life linked
if(stat != tf_mob_holder.stat)
if(stat == DEAD)
tf_mob_holder.death(FALSE, null)
@@ -163,7 +163,6 @@
new_mob.feeding = feeding
new_mob.can_be_drop_prey = can_be_drop_prey
new_mob.can_be_drop_pred = can_be_drop_pred
- // new_mob.allow_inbelly_spawning = allow_inbelly_spawning //CHOMP Removal: we have vore spawning at home. Actually if this were to be enabled, it would break anyway. Just leaving this here as a reference to it.
new_mob.digest_leave_remains = digest_leave_remains
new_mob.allowmobvore = allowmobvore
new_mob.permit_healbelly = permit_healbelly
@@ -176,6 +175,7 @@
new_mob.slip_vore = slip_vore
new_mob.throw_vore = throw_vore
new_mob.food_vore = food_vore
+ new_mob.consume_liquid_belly = consume_liquid_belly
new_mob.resizable = resizable
new_mob.show_vore_fx = show_vore_fx
new_mob.step_mechanics_pref = step_mechanics_pref
@@ -189,7 +189,6 @@
new_mob.text_warnings = text_warnings
new_mob.allow_mind_transfer = allow_mind_transfer
- //CHOMP stuff Start
new_mob.phase_vore = phase_vore
new_mob.latejoin_vore = latejoin_vore
new_mob.latejoin_prey = latejoin_prey
@@ -209,4 +208,3 @@
new_mob.no_latejoin_prey_warning_persists = no_latejoin_prey_warning_persists
new_mob.belly_rub_target = belly_rub_target
new_mob.soulcatcher_pref_flags = soulcatcher_pref_flags
- //CHOMP stuff End
diff --git a/code/modules/xenoarcheaology/artifacts/replicator_vr.dm b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm
index 10562f3959..0b45933290 100644
--- a/code/modules/xenoarcheaology/artifacts/replicator_vr.dm
+++ b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm
@@ -128,7 +128,7 @@
M.vore_organs -= B
new_mob.vore_organs += B
- M.soulgem.transfer_self(new_mob) //CHOMPAdd Soulcatcher
+ M.soulgem.transfer_self(new_mob) // Soulcatcher
new_mob.ckey = M.ckey
if(M.ai_holder && new_mob.ai_holder)
@@ -182,7 +182,7 @@
M.vore_organs -= B
new_mob.vore_organs += B
- M.soulgem.transfer_self(new_mob) //CHOMPAdd Soulcatcher
+ M.soulgem.transfer_self(new_mob) // Soulcatcher
new_mob.ckey = M.ckey
if(M.ai_holder && new_mob.ai_holder)
diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm
index 6d0a9509b8..c79470b41a 100644
--- a/code/modules/xenoarcheaology/tools/suspension_generator.dm
+++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm
@@ -189,7 +189,7 @@
/obj/machinery/suspension_gen/Destroy()
deactivate()
- ..()
+ . = ..()
/obj/machinery/suspension_gen/verb/rotate_counterclockwise()
set src in view(1)
diff --git a/code/modules/xenobio2/machinery/injector_computer.dm b/code/modules/xenobio2/machinery/injector_computer.dm
index aa9a237991..aeaa16c302 100644
--- a/code/modules/xenobio2/machinery/injector_computer.dm
+++ b/code/modules/xenobio2/machinery/injector_computer.dm
@@ -21,7 +21,7 @@
/obj/machinery/computer/xenobio2/Destroy()
injector.computer = null
- ..()
+ . = ..()
/obj/machinery/computer/xenobio2/attack_hand(mob/user)
if(..())
diff --git a/icons/mob/screen_full_vore.dmi b/icons/mob/screen_full_vore.dmi
index 376a39399b..82d69137f4 100644
Binary files a/icons/mob/screen_full_vore.dmi and b/icons/mob/screen_full_vore.dmi differ
diff --git a/icons/mob/screen_full_vore_list.dmi b/icons/mob/screen_full_vore_list.dmi
new file mode 100644
index 0000000000..ce1e5b999b
Binary files /dev/null and b/icons/mob/screen_full_vore_list.dmi differ
diff --git a/icons/mob/screen_full_vore_list_credits.txt b/icons/mob/screen_full_vore_list_credits.txt
new file mode 100644
index 0000000000..31337e7d52
--- /dev/null
+++ b/icons/mob/screen_full_vore_list_credits.txt
@@ -0,0 +1,70 @@
+Yeah hey if you're reading this, this is just a little .txt file keeping a record of which artist created which belly sprite (if any credit is due).
+
+Scottred:
+VBO_belly1
+VBO_belly2
+VBO_belly3
+VBO_belly4
+VBO_belly6
+VBO_belly7
+VBO_intestines6
+VBO_intestines7
+VBO_intestines8
+
+VerySoft:
+VBO_belly8
+
+TheMirth:
+VBO_belly5
+VBO_maw1
+
+Tsumibeer:
+VBO_intestines1
+VBO_intestines2
+VBO_intestines3
+VBO_intestines4
+VBO_intestines5
+
+Ewebun:
+VBO_maw2
+VBO_maw3
+VBO_maw4
+VBO_maw5
+VBO_maw6
+VBO_maw7
+VBO_maw8
+VBO_maw9
+VBO_maw10
+VBO_maw11
+
+FishyBoner:
+VBO_maw12
+VBO_trash
+
+original art by kernelDecoy (used with permission) with edits by kcin2001:
+https://twitter.com/kernelDecoy/status/1447387990762954757
+VBO_foot
+https://www.furaffinity.net/view/51185745/
+VBO_paw
+
+
+Drawn by homogenousrule, commissioner; Kashargul:
+VBO_belly9
+VBO_gematically_angular
+VBO_maw13
+VBO_maw14
+VBO_intestines9
+VBO_notbelly
+VBO_wriggly
+
+Hunter Dovetail:
+VBO_maw15
+VBO_maw16
+VBOanim_belly2
+VBOanim_gullet1
+VBOanim_gullet2
+VBOanim_intestine1
+VBOanim_belly3
+VBO_anim_intestine2
+
+
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly1.dmi b/icons/mob/vore_fullscreens/VBO_belly1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly1.dmi
rename to icons/mob/vore_fullscreens/VBO_belly1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly2.dmi b/icons/mob/vore_fullscreens/VBO_belly2.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly2.dmi
rename to icons/mob/vore_fullscreens/VBO_belly2.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly3.dmi b/icons/mob/vore_fullscreens/VBO_belly3.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly3.dmi
rename to icons/mob/vore_fullscreens/VBO_belly3.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly4.dmi b/icons/mob/vore_fullscreens/VBO_belly4.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly4.dmi
rename to icons/mob/vore_fullscreens/VBO_belly4.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly5.dmi b/icons/mob/vore_fullscreens/VBO_belly5.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly5.dmi
rename to icons/mob/vore_fullscreens/VBO_belly5.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly6.dmi b/icons/mob/vore_fullscreens/VBO_belly6.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly6.dmi
rename to icons/mob/vore_fullscreens/VBO_belly6.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly7.dmi b/icons/mob/vore_fullscreens/VBO_belly7.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly7.dmi
rename to icons/mob/vore_fullscreens/VBO_belly7.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly8.dmi b/icons/mob/vore_fullscreens/VBO_belly8.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly8.dmi
rename to icons/mob/vore_fullscreens/VBO_belly8.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_belly9.dmi b/icons/mob/vore_fullscreens/VBO_belly9.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_belly9.dmi
rename to icons/mob/vore_fullscreens/VBO_belly9.dmi
diff --git a/icons/mob/vore_fullscreens/VBO_belly9_fluidless.dmi b/icons/mob/vore_fullscreens/VBO_belly9_fluidless.dmi
new file mode 100644
index 0000000000..03e79d97ca
Binary files /dev/null and b/icons/mob/vore_fullscreens/VBO_belly9_fluidless.dmi differ
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_breast.dmi b/icons/mob/vore_fullscreens/VBO_breast.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_breast.dmi
rename to icons/mob/vore_fullscreens/VBO_breast.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_breast1.dmi b/icons/mob/vore_fullscreens/VBO_breast1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_breast1.dmi
rename to icons/mob/vore_fullscreens/VBO_breast1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_coils.dmi b/icons/mob/vore_fullscreens/VBO_coils.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_coils.dmi
rename to icons/mob/vore_fullscreens/VBO_coils.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_coils1.dmi b/icons/mob/vore_fullscreens/VBO_coils1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_coils1.dmi
rename to icons/mob/vore_fullscreens/VBO_coils1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_darkslit.dmi b/icons/mob/vore_fullscreens/VBO_darkslit.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_darkslit.dmi
rename to icons/mob/vore_fullscreens/VBO_darkslit.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_fleshs.dmi b/icons/mob/vore_fullscreens/VBO_fleshs.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_fleshs.dmi
rename to icons/mob/vore_fullscreens/VBO_fleshs.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_fleshs1.dmi b/icons/mob/vore_fullscreens/VBO_fleshs1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_fleshs1.dmi
rename to icons/mob/vore_fullscreens/VBO_fleshs1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_foot.dmi b/icons/mob/vore_fullscreens/VBO_foot.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_foot.dmi
rename to icons/mob/vore_fullscreens/VBO_foot.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_gematically_angular.dmi b/icons/mob/vore_fullscreens/VBO_gematically_angular.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_gematically_angular.dmi
rename to icons/mob/vore_fullscreens/VBO_gematically_angular.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines1.dmi b/icons/mob/vore_fullscreens/VBO_intestines1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines1.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines2.dmi b/icons/mob/vore_fullscreens/VBO_intestines2.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines2.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines2.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines3.dmi b/icons/mob/vore_fullscreens/VBO_intestines3.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines3.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines3.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines4.dmi b/icons/mob/vore_fullscreens/VBO_intestines4.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines4.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines4.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines5.dmi b/icons/mob/vore_fullscreens/VBO_intestines5.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines5.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines5.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines6.dmi b/icons/mob/vore_fullscreens/VBO_intestines6.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines6.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines6.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines7.dmi b/icons/mob/vore_fullscreens/VBO_intestines7.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines7.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines7.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines8.dmi b/icons/mob/vore_fullscreens/VBO_intestines8.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines8.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines8.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_intestines9.dmi b/icons/mob/vore_fullscreens/VBO_intestines9.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_intestines9.dmi
rename to icons/mob/vore_fullscreens/VBO_intestines9.dmi
diff --git a/icons/mob/vore_fullscreens/VBO_intestines9_fluidless.dmi b/icons/mob/vore_fullscreens/VBO_intestines9_fluidless.dmi
new file mode 100644
index 0000000000..6ef00953ab
Binary files /dev/null and b/icons/mob/vore_fullscreens/VBO_intestines9_fluidless.dmi differ
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw1.dmi b/icons/mob/vore_fullscreens/VBO_maw1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw1.dmi
rename to icons/mob/vore_fullscreens/VBO_maw1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw10.dmi b/icons/mob/vore_fullscreens/VBO_maw10.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw10.dmi
rename to icons/mob/vore_fullscreens/VBO_maw10.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw11.dmi b/icons/mob/vore_fullscreens/VBO_maw11.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw11.dmi
rename to icons/mob/vore_fullscreens/VBO_maw11.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw12.dmi b/icons/mob/vore_fullscreens/VBO_maw12.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw12.dmi
rename to icons/mob/vore_fullscreens/VBO_maw12.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw13.dmi b/icons/mob/vore_fullscreens/VBO_maw13.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw13.dmi
rename to icons/mob/vore_fullscreens/VBO_maw13.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw14.dmi b/icons/mob/vore_fullscreens/VBO_maw14.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw14.dmi
rename to icons/mob/vore_fullscreens/VBO_maw14.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw15.dmi b/icons/mob/vore_fullscreens/VBO_maw15.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw15.dmi
rename to icons/mob/vore_fullscreens/VBO_maw15.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw16.dmi b/icons/mob/vore_fullscreens/VBO_maw16.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw16.dmi
rename to icons/mob/vore_fullscreens/VBO_maw16.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw17.dmi b/icons/mob/vore_fullscreens/VBO_maw17.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw17.dmi
rename to icons/mob/vore_fullscreens/VBO_maw17.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw18.dmi b/icons/mob/vore_fullscreens/VBO_maw18.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw18.dmi
rename to icons/mob/vore_fullscreens/VBO_maw18.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw19.dmi b/icons/mob/vore_fullscreens/VBO_maw19.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw19.dmi
rename to icons/mob/vore_fullscreens/VBO_maw19.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw2.dmi b/icons/mob/vore_fullscreens/VBO_maw2.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw2.dmi
rename to icons/mob/vore_fullscreens/VBO_maw2.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw20.dmi b/icons/mob/vore_fullscreens/VBO_maw20.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw20.dmi
rename to icons/mob/vore_fullscreens/VBO_maw20.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw21.dmi b/icons/mob/vore_fullscreens/VBO_maw21.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw21.dmi
rename to icons/mob/vore_fullscreens/VBO_maw21.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw22.dmi b/icons/mob/vore_fullscreens/VBO_maw22.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw22.dmi
rename to icons/mob/vore_fullscreens/VBO_maw22.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw23.dmi b/icons/mob/vore_fullscreens/VBO_maw23.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw23.dmi
rename to icons/mob/vore_fullscreens/VBO_maw23.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw24.dmi b/icons/mob/vore_fullscreens/VBO_maw24.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw24.dmi
rename to icons/mob/vore_fullscreens/VBO_maw24.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw25.dmi b/icons/mob/vore_fullscreens/VBO_maw25.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw25.dmi
rename to icons/mob/vore_fullscreens/VBO_maw25.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw26.dmi b/icons/mob/vore_fullscreens/VBO_maw26.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw26.dmi
rename to icons/mob/vore_fullscreens/VBO_maw26.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw3.dmi b/icons/mob/vore_fullscreens/VBO_maw3.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw3.dmi
rename to icons/mob/vore_fullscreens/VBO_maw3.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw4.dmi b/icons/mob/vore_fullscreens/VBO_maw4.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw4.dmi
rename to icons/mob/vore_fullscreens/VBO_maw4.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw5.dmi b/icons/mob/vore_fullscreens/VBO_maw5.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw5.dmi
rename to icons/mob/vore_fullscreens/VBO_maw5.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw6.dmi b/icons/mob/vore_fullscreens/VBO_maw6.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw6.dmi
rename to icons/mob/vore_fullscreens/VBO_maw6.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw7.dmi b/icons/mob/vore_fullscreens/VBO_maw7.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw7.dmi
rename to icons/mob/vore_fullscreens/VBO_maw7.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw8.dmi b/icons/mob/vore_fullscreens/VBO_maw8.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw8.dmi
rename to icons/mob/vore_fullscreens/VBO_maw8.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_maw9.dmi b/icons/mob/vore_fullscreens/VBO_maw9.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_maw9.dmi
rename to icons/mob/vore_fullscreens/VBO_maw9.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_notbelly.dmi b/icons/mob/vore_fullscreens/VBO_notbelly.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_notbelly.dmi
rename to icons/mob/vore_fullscreens/VBO_notbelly.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_paw.dmi b/icons/mob/vore_fullscreens/VBO_paw.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_paw.dmi
rename to icons/mob/vore_fullscreens/VBO_paw.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_synth1.dmi b/icons/mob/vore_fullscreens/VBO_synth1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_synth1.dmi
rename to icons/mob/vore_fullscreens/VBO_synth1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_synth2.dmi b/icons/mob/vore_fullscreens/VBO_synth2.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_synth2.dmi
rename to icons/mob/vore_fullscreens/VBO_synth2.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_trash.dmi b/icons/mob/vore_fullscreens/VBO_trash.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_trash.dmi
rename to icons/mob/vore_fullscreens/VBO_trash.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_vines.dmi b/icons/mob/vore_fullscreens/VBO_vines.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_vines.dmi
rename to icons/mob/vore_fullscreens/VBO_vines.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBO_wriggly.dmi b/icons/mob/vore_fullscreens/VBO_wriggly.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBO_wriggly.dmi
rename to icons/mob/vore_fullscreens/VBO_wriggly.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly1.dmi b/icons/mob/vore_fullscreens/VBOanim_belly1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly1.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly10.dmi b/icons/mob/vore_fullscreens/VBOanim_belly10.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly10.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly10.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly2.dmi b/icons/mob/vore_fullscreens/VBOanim_belly2.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly2.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly2.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly3.dmi b/icons/mob/vore_fullscreens/VBOanim_belly3.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly3.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly3.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly4.dmi b/icons/mob/vore_fullscreens/VBOanim_belly4.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly4.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly4.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly5.dmi b/icons/mob/vore_fullscreens/VBOanim_belly5.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly5.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly5.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly6.dmi b/icons/mob/vore_fullscreens/VBOanim_belly6.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly6.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly6.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly7.dmi b/icons/mob/vore_fullscreens/VBOanim_belly7.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly7.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly7.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly8.dmi b/icons/mob/vore_fullscreens/VBOanim_belly8.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly8.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly8.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly9.dmi b/icons/mob/vore_fullscreens/VBOanim_belly9.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly9.dmi
rename to icons/mob/vore_fullscreens/VBOanim_belly9.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_gullet1.dmi b/icons/mob/vore_fullscreens/VBOanim_gullet1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_gullet1.dmi
rename to icons/mob/vore_fullscreens/VBOanim_gullet1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_intestine1.dmi b/icons/mob/vore_fullscreens/VBOanim_intestine1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_intestine1.dmi
rename to icons/mob/vore_fullscreens/VBOanim_intestine1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_intestine2.dmi b/icons/mob/vore_fullscreens/VBOanim_intestine2.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_intestine2.dmi
rename to icons/mob/vore_fullscreens/VBOanim_intestine2.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_snakebelly1.dmi b/icons/mob/vore_fullscreens/VBOanim_snakebelly1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_snakebelly1.dmi
rename to icons/mob/vore_fullscreens/VBOanim_snakebelly1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_synthbelly1.dmi b/icons/mob/vore_fullscreens/VBOanim_synthbelly1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_synthbelly1.dmi
rename to icons/mob/vore_fullscreens/VBOanim_synthbelly1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/VBOanim_taurbelly1.dmi b/icons/mob/vore_fullscreens/VBOanim_taurbelly1.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/VBOanim_taurbelly1.dmi
rename to icons/mob/vore_fullscreens/VBOanim_taurbelly1.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/a_tumby.dmi b/icons/mob/vore_fullscreens/a_tumby.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/a_tumby.dmi
rename to icons/mob/vore_fullscreens/a_tumby.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/another_tumby.dmi b/icons/mob/vore_fullscreens/another_tumby.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/another_tumby.dmi
rename to icons/mob/vore_fullscreens/another_tumby.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/base.dmi b/icons/mob/vore_fullscreens/base.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/base.dmi
rename to icons/mob/vore_fullscreens/base.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/brown_internals.dmi b/icons/mob/vore_fullscreens/brown_internals.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/brown_internals.dmi
rename to icons/mob/vore_fullscreens/brown_internals.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/brown_internals_hole.dmi b/icons/mob/vore_fullscreens/brown_internals_hole.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/brown_internals_hole.dmi
rename to icons/mob/vore_fullscreens/brown_internals_hole.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi b/icons/mob/vore_fullscreens/bubbles.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi
rename to icons/mob/vore_fullscreens/bubbles.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/da_tumby.dmi b/icons/mob/vore_fullscreens/da_tumby.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/da_tumby.dmi
rename to icons/mob/vore_fullscreens/da_tumby.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/dark.dmi b/icons/mob/vore_fullscreens/dark.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/dark.dmi
rename to icons/mob/vore_fullscreens/dark.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/screen_full_vore_ch.dmi b/icons/mob/vore_fullscreens/screen_full_vore_list.dmi
similarity index 60%
rename from modular_chomp/icons/mob/vore_fullscreens/screen_full_vore_ch.dmi
rename to icons/mob/vore_fullscreens/screen_full_vore_list.dmi
index 39ed3f5c36..ad50cba235 100644
Binary files a/modular_chomp/icons/mob/vore_fullscreens/screen_full_vore_ch.dmi and b/icons/mob/vore_fullscreens/screen_full_vore_list.dmi differ
diff --git a/modular_chomp/icons/mob/vore_fullscreens/synth_flesh_mono.dmi b/icons/mob/vore_fullscreens/synth_flesh_mono.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/synth_flesh_mono.dmi
rename to icons/mob/vore_fullscreens/synth_flesh_mono.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/synth_flesh_mono_hole.dmi b/icons/mob/vore_fullscreens/synth_flesh_mono_hole.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/synth_flesh_mono_hole.dmi
rename to icons/mob/vore_fullscreens/synth_flesh_mono_hole.dmi
diff --git a/modular_chomp/icons/mob/vore_fullscreens/yet_another_tumby.dmi b/icons/mob/vore_fullscreens/yet_another_tumby.dmi
similarity index 100%
rename from modular_chomp/icons/mob/vore_fullscreens/yet_another_tumby.dmi
rename to icons/mob/vore_fullscreens/yet_another_tumby.dmi
diff --git a/maps/groundbase/groundbase_defines.dm b/maps/groundbase/groundbase_defines.dm
index f449a7c039..1c0a3e12c2 100644
--- a/maps/groundbase/groundbase_defines.dm
+++ b/maps/groundbase/groundbase_defines.dm
@@ -360,7 +360,7 @@
// We have a bunch of stuff common to the station z levels
/datum/map_z_level/groundbase
- flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_VORESPAWN
holomap_legend_x = 220
holomap_legend_y = 160
diff --git a/maps/stellar_delight/stellar_delight_defines.dm b/maps/stellar_delight/stellar_delight_defines.dm
index 74bdb24105..50d7d1f3ee 100644
--- a/maps/stellar_delight/stellar_delight_defines.dm
+++ b/maps/stellar_delight/stellar_delight_defines.dm
@@ -277,7 +277,7 @@
// We have a bunch of stuff common to the station z levels
/datum/map_z_level/stellar_delight
- flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_VORESPAWN
holomap_legend_x = 220
holomap_legend_y = 160
diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm
index 4da15f8631..ced4c7d51d 100644
--- a/maps/tether/tether_defines.dm
+++ b/maps/tether/tether_defines.dm
@@ -367,14 +367,14 @@
// We have a bunch of stuff common to the station z levels
/datum/map_z_level/tether/station
- flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_VORESPAWN
holomap_legend_x = 220
holomap_legend_y = 160
/datum/map_z_level/tether/station/surface_low
z = Z_LEVEL_SURFACE_LOW
name = "Surface 1"
- flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_SEALED|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_SEALED|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_VORESPAWN
base_turf = /turf/simulated/floor/outdoors/rocks/virgo3b
holomap_offset_x = TETHER_HOLOMAP_MARGIN_X
holomap_offset_y = TETHER_HOLOMAP_MARGIN_Y
@@ -382,7 +382,7 @@
/datum/map_z_level/tether/station/surface_mid
z = Z_LEVEL_SURFACE_MID
name = "Surface 2"
- flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_SEALED|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_SEALED|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_VORESPAWN
base_turf = /turf/simulated/open
holomap_offset_x = TETHER_HOLOMAP_MARGIN_X
holomap_offset_y = TETHER_HOLOMAP_MARGIN_Y + TETHER_MAP_SIZE
@@ -390,7 +390,7 @@
/datum/map_z_level/tether/station/surface_high
z = Z_LEVEL_SURFACE_HIGH
name = "Surface 3"
- flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_SEALED|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_SEALED|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_VORESPAWN
base_turf = /turf/simulated/open
holomap_offset_x = TETHER_HOLOMAP_MARGIN_X + TETHER_HOLOMAP_CENTER_GUTTER + TETHER_MAP_SIZE
holomap_offset_y = TETHER_HOLOMAP_MARGIN_Y
@@ -398,7 +398,7 @@
/datum/map_z_level/tether/transit
z = Z_LEVEL_TRANSIT
name = "Transit"
- flags = MAP_LEVEL_STATION|MAP_LEVEL_SEALED|MAP_LEVEL_PLAYER|MAP_LEVEL_CONTACT|MAP_LEVEL_XENOARCH_EXEMPT
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_SEALED|MAP_LEVEL_PLAYER|MAP_LEVEL_CONTACT|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_VORESPAWN
base_turf = /turf/space/v3b_midpoint // Special type that spawns fall triggers
/datum/map_z_level/tether/station/space_low
@@ -406,7 +406,7 @@
name = "Asteroid 1"
base_turf = /turf/space
transit_chance = 33
- flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_BELOW_BLOCKED
+ flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST|MAP_LEVEL_BELOW_BLOCKED|MAP_LEVEL_VORESPAWN
holomap_offset_x = TETHER_HOLOMAP_MARGIN_X + TETHER_HOLOMAP_CENTER_GUTTER + TETHER_MAP_SIZE
holomap_offset_y = TETHER_HOLOMAP_MARGIN_Y + TETHER_MAP_SIZE
diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm
index 8f43dd0853..4fb4f1c452 100644
--- a/maps/~map_system/maps.dm
+++ b/maps/~map_system/maps.dm
@@ -37,7 +37,7 @@ var/list/all_maps = list()
var/static/list/secret_levels = list() // Z-levels that (non-admin) ghosts can't get to
var/static/list/hidden_levels = list() // Z-levels who's contents are hidden, but not forbidden (gateways)
var/static/list/empty_levels = list() // Empty Z-levels that may be used for various things
- var/static/list/vorespawn_levels = list() //Z-levels where players are allowed to vore latejoin to. //CHOMPedit: the number of missing chompedits is giving me an aneurysm
+ var/static/list/vorespawn_levels = list() //Z-levels where players are allowed to vore latejoin to.
var/static/list/mappable_levels = list()// List of levels where mapping or other similar devices might work fully
var/static/list/below_blocked_levels = list()// List of levels where mapping or other similar devices might work fully
// End Static Lists
@@ -331,7 +331,7 @@ var/list/all_maps = list()
if(flags & MAP_LEVEL_PLAYER) map.player_levels += z
if(flags & MAP_LEVEL_SEALED) map.sealed_levels += z
if(flags & MAP_LEVEL_XENOARCH_EXEMPT) map.xenoarch_exempt_levels += z
- if(flags & MAP_LEVEL_VORESPAWN) map.vorespawn_levels += z //CHOMPedit: I stg stop forgetting CHOMPedit comments
+ if(flags & MAP_LEVEL_VORESPAWN) map.vorespawn_levels += z
if(flags & MAP_LEVEL_PERSIST) map.persist_levels += z
if(flags & MAP_LEVEL_EMPTY)
if(!map.empty_levels) map.empty_levels = list()
diff --git a/modular_chomp/code/game/objects/items.dm b/modular_chomp/code/game/objects/items.dm
index b74b365172..7d2fc1f60b 100644
--- a/modular_chomp/code/game/objects/items.dm
+++ b/modular_chomp/code/game/objects/items.dm
@@ -1,19 +1,6 @@
/obj/item
- var/item_tf_spawn_allowed = FALSE
- var/list/ckeys_allowed_itemspawn = list()
var/user_vars_to_edit //fun times :3 - pretty much just grabbed from tg immabehonest - list(variable_name = variable_value) eg list("name" = "Wizardly Wizard", "real_name" = "Wizardly Wizard")
var/user_vars_remembered //not needed for manual editing, just stores the original vars from the above list to make sure they go back to normal later
- var/digestable = TRUE
-
-/obj/item/proc/item_tf_spawnpoint_set()
- if(!item_tf_spawn_allowed)
- item_tf_spawn_allowed = TRUE
- item_tf_spawnpoints += src
-
-/obj/item/proc/item_tf_spawnpoint_used()
- if(item_tf_spawn_allowed)
- item_tf_spawn_allowed = FALSE
- item_tf_spawnpoints -= src
/obj/item/Destroy(force, ...)
if(item_tf_spawn_allowed)
@@ -49,11 +36,3 @@
if(user.vars[variable] == user_vars_to_edit[variable])
user.vars[variable] = user_vars_remembered[variable]
user_vars_remembered = initial(user_vars_remembered)
-
-/obj/item/verb/toggle_digestable()
- set category = "Object"
- set name = "Toggle Digestable"
- set desc = "Toggle item's digestability."
- digestable = !digestable
- if(!digestable)
- to_chat(usr, span_notice("[src] is now protected from digestion."))
diff --git a/modular_chomp/code/game/objects/items/weapons/capture_crystal.dm b/modular_chomp/code/game/objects/items/weapons/capture_crystal.dm
deleted file mode 100644
index 13a34f3d62..0000000000
--- a/modular_chomp/code/game/objects/items/weapons/capture_crystal.dm
+++ /dev/null
@@ -1,231 +0,0 @@
-/obj/item/capture_crystal
- var/spawn_mob_name = "A mob"
- var/obj/belly/in_gut = null
-
-/* No longer need the vorefx additions as these will be handled for all indirect viewers now, including those in capture crystals
-// Signals detect important procs from the host belly. Necessary to update visuals and sound loop for the player inside.
-/obj/item/capture_crystal/enter_belly(obj/belly/B)
- if(isbelly(B)) // Sanity
- in_gut = B
- RegisterSignal(in_gut, COMSIG_PARENT_QDELETING, PROC_REF(gut_was_deleted), TRUE)
- RegisterSignal(in_gut, COMSIG_BELLY_UPDATE_VORE_FX, PROC_REF(capture_crystal_vfx), TRUE)
- RegisterSignal(in_gut, COMSIG_BELLY_UPDATE_PREY_LOOP, PROC_REF(capture_crystal_prey_loop), TRUE)
-
- var/juice = in_gut.reagents.total_volume
- if(!juice)
- juice = 0
- capture_crystal_vfx(null, TRUE, juice)
- capture_crystal_prey_loop()
- for(var/mob/living/contained in src.contents) // For reasons I don't understand, using bound_mob here sets bound_mob to null.
- var/formatted_desc
- formatted_desc = replacetext(in_gut.desc, "%belly", lowertext(in_gut.name)) //replace with this belly's name
- formatted_desc = replacetext(formatted_desc, "%pred", in_gut.owner) //replace with this belly's owner
- formatted_desc = replacetext(formatted_desc, "%prey", contained) //replace with whatever mob entered into this belly
- to_chat(contained, span_boldnotice("[formatted_desc]"))
-
-/obj/item/capture_crystal/exit_belly()
- for(var/mob/living/contained in src.contents)
- contained.clear_fullscreen(ATOM_BELLY_FULLSCREEN) // Clear fullscreens.
- contained.stop_sound_channel(CHANNEL_PREYLOOP) // Clear sound loop.
- contained.next_preyloop = world.time
-
- if(isbelly(in_gut)) // Sanity
- UnregisterSignal(in_gut, COMSIG_PARENT_QDELETING)
- UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_VORE_FX)
- UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_PREY_LOOP)
- in_gut = null
-
-// Inelegant copy-pasta since I can't steal the proc from bellies.
-/obj/item/capture_crystal/proc/capture_crystal_vfx(var/update, var/severity = 0)
- if(isbelly(in_gut))
- for(var/mob/living/contained in src.contents) // I guess this works if multi-catch crystals ever become a thing.
- if(!contained.client)
- return
- if(!contained.show_vore_fx)
- contained.clear_fullscreen(ATOM_BELLY_FULLSCREEN)
- return
- if(update)
- contained.clear_fullscreen(ATOM_BELLY_FULLSCREEN)
- if(in_gut.belly_fullscreen)
- if(in_gut.colorization_enabled)
- var/obj/screen/fullscreen/F = contained.overlay_fullscreen(ATOM_BELLY_FULLSCREEN, /obj/screen/fullscreen/belly, severity) //CHOMPEdit Start: preserving save data
- F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[in_gut.belly_fullscreen].dmi")
- F.cut_overlays()
- var/image/I = image(F.icon, in_gut.belly_fullscreen) //Would be cool if I could just include color and alpha in the image define so we don't have to copy paste
- I.color = in_gut.belly_fullscreen_color
- I.alpha = in_gut.belly_fullscreen_alpha
- F.add_overlay(I)
- I = image(F.icon, in_gut.belly_fullscreen+"-2")
- I.color = in_gut.belly_fullscreen_color2
- I.alpha = in_gut.belly_fullscreen_alpha
- F.add_overlay(I)
- I = image(F.icon, in_gut.belly_fullscreen+"-3")
- I.color = in_gut.belly_fullscreen_color3
- I.alpha = in_gut.belly_fullscreen_alpha
- F.add_overlay(I)
- I = image(F.icon, in_gut.belly_fullscreen+"-4")
- I.color = in_gut.belly_fullscreen_color4
- I.alpha = in_gut.belly_fullscreen_alpha
- F.add_overlay(I)
- if(contained.liquidbelly_visuals && in_gut.reagents.total_volume)
- if(in_gut.digest_mode == DM_HOLD && in_gut.item_digest_mode == IM_HOLD)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm")
- else
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
- I.color = in_gut.reagentcolor
- I.alpha = max(150, min(in_gut.custom_max_volume, 255)) - (255 - in_gut.belly_fullscreen_alpha)
- I.pixel_y = -450 + (450 / in_gut.custom_max_volume * in_gut.reagents.total_volume)
- F.add_overlay(I)
- F.update_for_view(contained.client.view)
- else
- var/obj/screen/fullscreen/F = contained.overlay_fullscreen(ATOM_BELLY_FULLSCREEN, /obj/screen/fullscreen/belly/fixed, severity) //preserving save data
- F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[in_gut.belly_fullscreen].dmi")
- F.cut_overlays()
- F.add_overlay(image(F.icon, in_gut.belly_fullscreen))
- F.add_overlay(image(F.icon, in_gut.belly_fullscreen+"-2"))
- F.add_overlay(image(F.icon, in_gut.belly_fullscreen+"-3"))
- F.add_overlay(image(F.icon, in_gut.belly_fullscreen+"-4"))
- if(contained.liquidbelly_visuals && in_gut.reagents.total_volume)
- var/image/I
- if(in_gut.digest_mode == DM_HOLD && in_gut.item_digest_mode == IM_HOLD)
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm")
- else
- I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles")
- I.color = in_gut.reagentcolor
- I.alpha = max(150, min(in_gut.custom_max_volume, 255)) - (255 - in_gut.belly_fullscreen_alpha)
- I.pixel_y = -450 + (450 / in_gut.custom_max_volume * in_gut.reagents.total_volume)
- F.add_overlay(I)
- F.update_for_view(contained.client.view)
- else
- contained.clear_fullscreen(ATOM_BELLY_FULLSCREEN)
-
- /* // Disabled (and untested) for now, left to make it easier if we want to enable this later.
- if(in_gut.disable_hud)
- if(contained?.hud_used?.hud_shown)
- to_chat(contained, span_notice("((Your pred has disabled huds in their belly. Turn off vore FX and hit F12 to get it back; or relax, and enjoy the serenity.))"))
- contained.toggle_hud_vis(TRUE) */
-
-// Inelegant copy-pasta since I can't steal the proc from bellies.
-/obj/item/capture_crystal/proc/capture_crystal_prey_loop()
- if(isbelly(in_gut))
- for(var/mob/living/contained in src.contents) // Skip empty crystals.
- //We don't bother executing any other code if the prey doesn't want to hear the noises.
- if(!contained.is_preference_enabled(/datum/client_preference/digestion_noises))
- contained.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case, because byond is whack and you can't trust it
- continue
-
- // We don't want the sounds to overlap, but we do want them to steadily replay.
- // We also don't want the sounds to play if the pred hasn't marked this belly as fleshy, or doesn't
- // have the right sounds to play.
- if(in_gut.is_wet && in_gut.wet_loop && (world.time > contained.next_preyloop))
- contained.stop_sound_channel(CHANNEL_PREYLOOP)
- var/sound/preyloop = sound('sound/vore/sunesound/prey/loop.ogg')
- contained.playsound_local(get_turf(src), preyloop, 80, 0, channel = CHANNEL_PREYLOOP)
- contained.next_preyloop = (world.time + (52 SECONDS))
-
-//Cleanup signals if we're in a gut and it gets deleted.
-/obj/item/capture_crystal/proc/gut_was_deleted()
- UnregisterSignal(in_gut, COMSIG_PARENT_QDELETING)
- UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_VORE_FX)
- UnregisterSignal(in_gut, COMSIG_BELLY_UPDATE_PREY_LOOP)
- in_gut = null
-*/
-
-/obj/item/capture_crystal/loadout
- active = TRUE
-
-/obj/item/capture_crystal/loadout/attack(mob/living/M, mob/living/user)
- if(!bound_mob && M != user)
- to_chat(user, span_notice("\The [src] emits an unpleasant tone..."))
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- return
- . = ..()
-
-/obj/item/capture_crystal/loadout/attack_self(mob/living/user)
- if(!bound_mob)
- to_chat(user, span_notice("\The [src] emits an unpleasant tone... It is not ready yet."))
- playsound(src, 'sound/effects/capture-crystal-problem.ogg', 75, 1, -1)
- return
- . = ..()
-
-/obj/item/capture_crystal/loadout/capture_chance()
- return 0
-
-/obj/item/capture_crystal/cheap
- name = "cheap capture crystal"
- desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
- icon = 'icons/obj/capture_crystal_vr.dmi'
-
-
-//The basic capture command does most of the registration work.
-/obj/item/capture_crystal/cheap/capture(mob/living/M, mob/living/U)
- if(!M.capture_crystal || M.capture_caught)
- to_chat(U, span_warning("This creature is not suitable for capture with this crystal."))
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- return
- knowyoursignals(M, U)
- if(isanimal(M) || !M.client)
- to_chat(U, span_warning("This creature is not suitable for capture."))
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- return
- owner = U
- if(!bound_mob)
- bound_mob = M
- bound_mob.capture_caught = TRUE
- persist_storable = FALSE
- desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
-
-
-/obj/item/capture_crystal/cheap/activate(mob/living/user, target)
- if(!cooldown_check()) //Are we ready to do things yet?
- to_chat(thrower, span_notice("\The [src] clicks unsatisfyingly... It is not ready yet."))
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- return
- if(spawn_mob_type && !bound_mob) //We don't already have a mob, but we know what kind of mob we want
- bound_mob = new spawn_mob_type(src) //Well let's spawn it then!
- bound_mob.faction = user.faction
- spawn_mob_type = null
- capture(bound_mob, user)
- if(bound_mob) //We have a mob! Let's finish setting up.
- user.visible_message("\The [src] clicks, and then emits a small chime.", "\The [src] grows warm in your hand, something inside is awake.")
- active = TRUE
- if(!owner) //Do we have an owner? It's pretty unlikely that this would ever happen! But it happens, let's claim the crystal.
- owner = user
- if(isanimal(bound_mob))
- var/mob/living/simple_mob/S = bound_mob
- S.revivedby = user.name
- determine_action(user, target)
- return
- else if(isliving(target)) //So we don't have a mob, let's try to claim one! Is the target a mob?
- var/mob/living/M = target
- last_activate = world.time
- if(M.capture_caught) //Can't capture things that were already caught.
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- to_chat(user, span_notice("\The [src] clicks unsatisfyingly... \The [M] is already under someone else's control."))
- return
- else if(M.stat == DEAD) //Is it dead? We can't influence dead things.
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- to_chat(user, span_notice("\The [src] clicks unsatisfyingly... \The [M] is not in a state to be captured."))
- return
- else if(M.client) //Is it player controlled?
- capture_player(M, user) //We have to do things a little differently if so.
- return
- else if(!isanimal(M)) //So it's not player controlled, but it's also not a simplemob?
- to_chat(user, span_warning("This creature is not suitable for capture."))
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- return
- var/mob/living/simple_mob/S = M
- if(!S.ai_holder) //We don't really want to capture simplemobs that don't have an AI
- to_chat(user, span_warning("This creature is not suitable for capture."))
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- else //Shoot, it didn't work and now it's mad!!!
- S.ai_holder.go_wake()
- S.ai_holder.give_target(user, urgent = TRUE)
- user.visible_message("\The [src] bonks into \the [S], angering it!")
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- to_chat(user, span_notice("\The [src] clicks unsatisfyingly."))
- update_icon()
- return
- //The target is not a mob, so let's not do anything.
- playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
- to_chat(user, span_notice("\The [src] clicks unsatisfyingly."))
diff --git a/modular_chomp/code/game/objects/structures/watercloset_ch.dm b/modular_chomp/code/game/objects/structures/watercloset_ch.dm
index e627e0bbd3..96ad2732c8 100644
--- a/modular_chomp/code/game/objects/structures/watercloset_ch.dm
+++ b/modular_chomp/code/game/objects/structures/watercloset_ch.dm
@@ -209,6 +209,8 @@
/mob/living/simple_mob/vore/aggressive/corrupthound/muffinmonster/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "waste hopper"
diff --git a/modular_chomp/code/modules/asset_cache/belly_assets.dm b/modular_chomp/code/modules/asset_cache/belly_assets.dm
deleted file mode 100644
index c04d939b6c..0000000000
--- a/modular_chomp/code/modules/asset_cache/belly_assets.dm
+++ /dev/null
@@ -1,267 +0,0 @@
-/datum/belly_overlays
- var/belly_icon
-
-/datum/belly_overlays/vbo_belly1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly1.dmi'
-
-/datum/belly_overlays/vbo_belly2
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly2.dmi'
-
-/datum/belly_overlays/vbo_belly3
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly3.dmi'
-
-/datum/belly_overlays/vbo_belly4
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly4.dmi'
-
-/datum/belly_overlays/vbo_belly5
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly5.dmi'
-
-/datum/belly_overlays/vbo_belly6
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly6.dmi'
-
-/datum/belly_overlays/vbo_belly7
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly7.dmi'
-
-/datum/belly_overlays/vbo_belly8
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly8.dmi'
-
-/datum/belly_overlays/vbo_belly9
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_belly9.dmi'
-
-/datum/belly_overlays/vbo_breast
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_breast.dmi'
-
-/datum/belly_overlays/vbo_breast1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_breast1.dmi'
-
-/datum/belly_overlays/vbo_coils
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_coils.dmi'
-
-/datum/belly_overlays/vbo_coils1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_coils1.dmi'
-
-/datum/belly_overlays/vbo_darkslit
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_darkslit.dmi'
-
-/datum/belly_overlays/vbo_fleshs
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_fleshs.dmi'
-
-/datum/belly_overlays/vbo_fleshs1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_fleshs1.dmi'
-
-/datum/belly_overlays/vbo_foot
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_foot.dmi'
-
-/datum/belly_overlays/vbo_gematically_angular
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_gematically_angular.dmi'
-
-/datum/belly_overlays/vbo_intestines1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines1.dmi'
-
-/datum/belly_overlays/vbo_intestines2
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines2.dmi'
-
-/datum/belly_overlays/vbo_intestines3
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines3.dmi'
-
-/datum/belly_overlays/vbo_intestines4
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines4.dmi'
-
-/datum/belly_overlays/vbo_intestines5
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines5.dmi'
-
-/datum/belly_overlays/vbo_intestines6
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines6.dmi'
-
-/datum/belly_overlays/vbo_intestines7
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines7.dmi'
-
-/datum/belly_overlays/vbo_intestines8
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines8.dmi'
-
-/datum/belly_overlays/vbo_intestines9
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_intestines9.dmi'
-
-/datum/belly_overlays/vbo_maw1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw1.dmi'
-
-/datum/belly_overlays/vbo_maw2
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw2.dmi'
-
-/datum/belly_overlays/vbo_maw3
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw3.dmi'
-
-/datum/belly_overlays/vbo_maw4
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw4.dmi'
-
-/datum/belly_overlays/vbo_maw5
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw5.dmi'
-
-/datum/belly_overlays/vbo_maw6
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw6.dmi'
-
-/datum/belly_overlays/vbo_maw7
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw7.dmi'
-
-/datum/belly_overlays/vbo_maw8
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw8.dmi'
-
-/datum/belly_overlays/vbo_maw9
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw9.dmi'
-
-/datum/belly_overlays/vbo_maw10
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw10.dmi'
-
-/datum/belly_overlays/vbo_maw11
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw11.dmi'
-
-/datum/belly_overlays/vbo_maw12
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw12.dmi'
-
-/datum/belly_overlays/vbo_maw13
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw13.dmi'
-
-/datum/belly_overlays/vbo_maw14
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw14.dmi'
-
-/datum/belly_overlays/vbo_maw15
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw15.dmi'
-
-/datum/belly_overlays/vbo_maw16
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw16.dmi'
-
-/datum/belly_overlays/vbo_maw17
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw17.dmi'
-
-/datum/belly_overlays/vbo_maw18
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw18.dmi'
-
-/datum/belly_overlays/vbo_maw19
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw19.dmi'
-
-/datum/belly_overlays/vbo_maw20
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw20.dmi'
-
-/datum/belly_overlays/vbo_maw21
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw21.dmi'
-
-/datum/belly_overlays/vbo_maw22
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw22.dmi'
-
-/datum/belly_overlays/vbo_maw23
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw23.dmi'
-
-/datum/belly_overlays/vbo_maw24
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw24.dmi'
-
-/datum/belly_overlays/vbo_maw25
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw25.dmi'
-
-/datum/belly_overlays/vbo_maw26
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_maw26.dmi'
-
-/datum/belly_overlays/vbo_notbelly
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_notbelly.dmi'
-
-/datum/belly_overlays/vbo_paw
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_paw.dmi'
-
-/datum/belly_overlays/vbo_synth1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_synth1.dmi'
-
-/datum/belly_overlays/vbo_synth2
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_synth2.dmi'
-
-/datum/belly_overlays/vbo_trash
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_trash.dmi'
-
-/datum/belly_overlays/vbo_vines
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_vines.dmi'
-
-/datum/belly_overlays/vbo_wriggly
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBO_wriggly.dmi'
-
-/datum/belly_overlays/vboanim_belly1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
-
-/datum/belly_overlays/vboanim_belly2
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly2.dmi'
-
-/datum/belly_overlays/vboanim_belly3
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly3.dmi'
-
-/datum/belly_overlays/vboanim_belly4
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly4.dmi'
-
-/datum/belly_overlays/vboanim_belly5
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly5.dmi'
-
-/datum/belly_overlays/vboanim_belly6
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly6.dmi'
-
-/datum/belly_overlays/vboanim_belly7
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly7.dmi'
-
-/datum/belly_overlays/vboanim_belly8
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly8.dmi'
-
-/datum/belly_overlays/vboanim_belly9
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly9.dmi'
-
-/datum/belly_overlays/vboanim_belly10
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly10.dmi'
-
-/datum/belly_overlays/vboanim_gullet1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_gullet1.dmi'
-
-/datum/belly_overlays/vboanim_intestine1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_intestine1.dmi'
-
-/datum/belly_overlays/vboanim_intestine2
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_intestine2.dmi'
-
-/datum/belly_overlays/vboanim_snakebelly1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_snakebelly1.dmi'
-
-/datum/belly_overlays/vboanim_synthbelly1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_synthbelly1.dmi'
-
-/datum/belly_overlays/vboanim_taurbelly1
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_taurbelly1.dmi'
-
-/datum/belly_overlays/a_tumby
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/a_tumby.dmi'
-
-/datum/belly_overlays/another_tumby
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/another_tumby.dmi'
-
-/datum/belly_overlays/base
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/base.dmi'
-
-/datum/belly_overlays/brown_internals
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/brown_internals.dmi'
-
-/datum/belly_overlays/brown_internals_hole
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/brown_internals_hole.dmi'
-
-/datum/belly_overlays/da_tumby
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/da_tumby.dmi'
-
-/datum/belly_overlays/dark
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/dark.dmi'
-
-/datum/belly_overlays/synth_flesh_mono
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/synth_flesh_mono.dmi'
-
-/datum/belly_overlays/synth_flesh_mono_hole
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/synth_flesh_mono_hole.dmi'
-
-/datum/belly_overlays/yet_another_tumby
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/yet_another_tumby.dmi'
-
-//Compatibility assets due to renames...
-/datum/belly_overlays/anim_belly
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
-
-/datum/belly_overlays/a_anim_belly
- belly_icon = 'modular_chomp/icons/mob/vore_fullscreens/VBOanim_belly1.dmi'
diff --git a/modular_chomp/code/modules/client/preferences_spawnpoints.dm b/modular_chomp/code/modules/client/preferences_spawnpoints.dm
index 7cf459e49b..8cb5298447 100644
--- a/modular_chomp/code/modules/client/preferences_spawnpoints.dm
+++ b/modular_chomp/code/modules/client/preferences_spawnpoints.dm
@@ -7,15 +7,6 @@
..()
turfs = GLOB.latejoin_gatewaystation
-/datum/spawnpoint/vore
- display_name = "Vorespawn - Prey"
- msg = "has arrived on the station"
- allow_offmap_spawn = TRUE
-
-/datum/spawnpoint/vore/pred
- display_name = "Vorespawn - Pred"
- msg = "has arrived on the station"
-
/datum/spawnpoint/vore/itemtf
display_name = "Item TF spawn"
msg = "has arrived on the station"
@@ -49,4 +40,4 @@
/datum/spawnpoint/tyrspawn/New()
..()
- turfs = GLOB.latejoin_tyrvillage
\ No newline at end of file
+ turfs = GLOB.latejoin_tyrvillage
diff --git a/modular_chomp/code/modules/mob/dead/observer/observer.dm b/modular_chomp/code/modules/mob/dead/observer/observer.dm
index 6856f5f7ac..ff4bb39db7 100644
--- a/modular_chomp/code/modules/mob/dead/observer/observer.dm
+++ b/modular_chomp/code/modules/mob/dead/observer/observer.dm
@@ -1,14 +1,6 @@
/mob/observer
- var/mob/living/body_backup = null //add reforming
low_priority = TRUE
-/mob/observer/Destroy()
- if(body_backup)
- body_backup.moveToNullspace() //YEET
- qdel(body_backup)
- body_backup = null
- return ..()
-
// Persistence vars not included as we probably don't want losing limbs in the game mean losing limbs in real life. Definitely can't backfire.
/mob/observer/dead/verb/fake_enter_vr()
set name = "Join virtual reality"
diff --git a/modular_chomp/code/modules/mob/living/carbon/brain/MMI.dm b/modular_chomp/code/modules/mob/living/carbon/brain/MMI.dm
deleted file mode 100644
index 2ba4e99523..0000000000
--- a/modular_chomp/code/modules/mob/living/carbon/brain/MMI.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/obj/item/mmi
- var/mob/living/body_backup = null //add reforming
-
-/obj/item/mmi/Destroy()
- if(body_backup)
- qdel(body_backup)
- ..()
diff --git a/modular_chomp/code/modules/mob/living/simple_animal/aliens/synx.dm b/modular_chomp/code/modules/mob/living/simple_animal/aliens/synx.dm
index f4de90d443..5ce4d7c83d 100644
--- a/modular_chomp/code/modules/mob/living/simple_animal/aliens/synx.dm
+++ b/modular_chomp/code/modules/mob/living/simple_animal/aliens/synx.dm
@@ -157,6 +157,8 @@
/mob/living/simple_mob/animal/synx/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
//B.human_prey_swallow_time = 6 SECONDS //doesnt work
@@ -189,6 +191,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/asteri/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.desc = "The synx eagerly swallows you, taking you from its gullet into its long, serpentine stomach. The internals around you greedily press into your from all sides, keeping you coated in a slick coat of numbing fluids..."
@@ -748,6 +752,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
@@ -757,6 +763,8 @@
/mob/living/simple_mob/animal/synx/ai/pet/holo/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.vore_verb = "swallow"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm
index 0266637711..8aa9bcc4dd 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/ants.dm
@@ -43,9 +43,11 @@
unacidable = TRUE
/mob/living/simple_mob/animal/tyr/mineral_ants/init_vore()
- if(!voremob_loaded) //CHOMPAdd
- return //CHOMPAdd
- .=..() //CHOMPEdit
+ if(!voremob_loaded)
+ return
+ if(LAZYLEN(vore_organs))
+ return
+ .=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.mode_flags = DM_FLAG_THICKBELLY | DM_FLAG_NUMBING
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/oddities.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/oddities.dm
index b5b87c8785..e3b6c7de06 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/oddities.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/oddities.dm
@@ -63,6 +63,8 @@
/mob/living/simple_mob/animal/tyr/groundpitcher/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.desc = "You leaned a little too close to the pitcher plant, stumbling over the lip and splashing into a puddle of liquid filling the bottom of the cramped pitcher. You squirm madly, righting yourself and scrabbling at the walls in vain as the slick surface offers no purchase. The dim light grows dark as the pitcher's cap lowers, silently sealing the exit. With a sinking feeling you realize you won't be able to push the exit open even if you could somehow climb that high, leaving you helplessly trapped in the slick, tingling fluid."
@@ -207,4 +209,4 @@
melee_damage_lower = 16
melee_damage_upper = 16
- ranged_cooldown = 30
\ No newline at end of file
+ ranged_cooldown = 30
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/tyr_base.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/tyr_base.dm
index 9a66ac8c08..3f4d7604f7 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/tyr_base.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/animal/tyr/tyr_base.dm
@@ -29,9 +29,11 @@
unacidable = TRUE
/mob/living/simple_mob/animal/tyr/init_vore()
- if(!voremob_loaded) //CHOMPAdd
- return //CHOMPAdd
- .=..() //CHOMPEdit
+ if(!voremob_loaded)
+ return
+ if(LAZYLEN(vore_organs))
+ return
+ .=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.mode_flags = DM_FLAG_THICKBELLY | DM_FLAG_NUMBING
@@ -39,4 +41,4 @@
B.digest_burn = 1
B.digestchance = 0
B.absorbchance = 0
- B.escapechance = 25
\ No newline at end of file
+ B.escapechance = 25
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm
index bd4c773f0b..34bbe4e515 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/gateway/alchemistbee.dm
@@ -65,6 +65,8 @@
/mob/living/simple_mob/vr/alchemistbee/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm
index 143c9c6df4..47159c2ab6 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultboss.dm
@@ -159,6 +159,8 @@
/mob/living/simple_mob/humanoid/cultist/magus/rift/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm
index 0aa4e28e55..bb28b1ae76 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/cultist_ch.dm
@@ -129,6 +129,8 @@
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -169,6 +171,8 @@
/mob/living/simple_mob/humanoid/cultist/noodle/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -210,6 +214,8 @@
/mob/living/simple_mob/humanoid/cultist/tesh/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -250,6 +256,8 @@
/mob/living/simple_mob/humanoid/cultist/castertesh/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/noms.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/noms.dm
index 93313b74fd..673ac908ab 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/noms.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/noms.dm
@@ -22,6 +22,8 @@
/mob/living/simple_mob/humanoid/eclipse/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -59,6 +61,8 @@
/mob/living/simple_mob/humanoid/eclipse/head/scientist/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -99,6 +103,8 @@
/mob/living/simple_mob/humanoid/eclipse/head/security/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -140,6 +146,8 @@
/mob/living/simple_mob/humanoid/eclipse/head/captain/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm
index d238dac7da..bad4ae1608 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/starhunters/food.dm
@@ -21,6 +21,8 @@
/mob/living/simple_mob/humanoid/starhunter/hunter/druid/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -59,6 +61,8 @@
/mob/living/simple_mob/humanoid/starhunter/hunter/champion/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -98,6 +102,8 @@
/mob/living/simple_mob/humanoid/starhunter/hunter/avatar/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm
index 3015906761..e040a55232 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm
@@ -90,6 +90,8 @@
/mob/living/simple_mob/metroid/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.digest_brute = 1
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm
index 81010894fe..b9a5d8cf94 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/metroid/metTypes.dm
@@ -64,6 +64,8 @@ GLOBAL_VAR_INIT(queen_amount, 0) //We only gonna want 1 queen in the world.
/mob/living/simple_mob/metroid/mine/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.digest_burn = 0.5
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/carp.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/carp.dm
index 2db645d1da..47bf7263c4 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/carp.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/carp.dm
@@ -1,6 +1,8 @@
/mob/living/simple_mob/animal/space/carp/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm
index 6f26a4a4bd..ac7077f699 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm
@@ -141,6 +141,8 @@
/mob/living/simple_mob/vore/retaliate/corrupthound/janihound/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.vore_sound = "Tauric Swallow" // CHOMPedit - Fancy Vore Sounds
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm
index 0186153222..4015e9f99b 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/gateway/candy.dm
@@ -60,6 +60,8 @@
/mob/living/simple_mob/vore/candy/bluecabold/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -86,6 +88,8 @@
/mob/living/simple_mob/vore/candy/redcabold/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -112,6 +116,8 @@
/mob/living/simple_mob/vore/candy/yellowcabold/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -138,6 +144,8 @@
/mob/living/simple_mob/vore/candy/orangecabold/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -164,6 +172,8 @@
/mob/living/simple_mob/vore/candy/purplecabold/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -190,6 +200,8 @@
/mob/living/simple_mob/vore/candy/marshmellowserpent/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -692,6 +704,8 @@
/mob/living/simple_mob/vore/candy/worm/redcabold/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
@@ -718,6 +732,8 @@
/mob/living/simple_mob/vore/candy/peppermint/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm
index 8e015081b6..d3513abada 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm
@@ -13,6 +13,8 @@
/mob/living/simple_mob/vore/jelly/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
index 1b4446614e..6dcacf7586 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
@@ -109,6 +109,8 @@
/mob/living/simple_mob/vore/aggressive/panther/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.vore_sound = "Tauric Swallow"
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/plants/pitcher.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/plants/pitcher.dm
index d36bc791fb..d2e92cef85 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/plants/pitcher.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/plants/pitcher.dm
@@ -79,6 +79,8 @@ GLOBAL_LIST_INIT(pitcher_plant_lure_messages, list(
/mob/living/simple_mob/vore/pitcher_plant/init_vore()
if(!voremob_loaded)
return
+ if(LAZYLEN(vore_organs))
+ return
.=..()
var/obj/belly/B = vore_selected
B.desc = "You leaned a little too close to the pitcher plant, stumbling over the lip and splashing into a puddle of liquid filling the bottom of the cramped pitcher. You squirm madly, righting yourself and scrabbling at the walls in vain as the slick surface offers no purchase. The dim light grows dark as the pitcher's cap lowers, silently sealing the exit. With a sinking feeling you realize you won't be able to push the exit open even if you could somehow climb that high, leaving you helplessly trapped in the slick, tingling fluid. ((You can't escape this mob without help but you may use OOC Escape if you wish.))"
diff --git a/modular_chomp/code/modules/mob/mob.dm b/modular_chomp/code/modules/mob/mob.dm
deleted file mode 100644
index 9e7566bf09..0000000000
--- a/modular_chomp/code/modules/mob/mob.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/mob
- var/voice_freq = 42500 // Preference for character voice frequency
- var/list/voice_sounds_list = list() // The sound list containing our voice sounds!
- var/enabled = TRUE //Pauses a mob if disabled (Prevents life ticks from happening)
- var/died_in_vr = FALSE //For virtual reality sleepers
- var/last_move_time = 0 //For movement smoothing
-
-/mob/is_incorporeal()
- if(incorporeal_move)
- return 1
- ..()
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/FeatureColorInput.tsx b/tgui/packages/tgui/interfaces/VorePanel/FeatureColorInput.tsx
similarity index 100%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/FeatureColorInput.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/FeatureColorInput.tsx
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/LiquidColorInput.tsx b/tgui/packages/tgui/interfaces/VorePanel/LiquidColorInput.tsx
similarity index 100%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/LiquidColorInput.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/LiquidColorInput.tsx
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreAbilities.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreAbilities.tsx
similarity index 100%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreAbilities.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/VoreAbilities.tsx
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreBellySelectionAndCustomization.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreBellySelectionAndCustomization.tsx
index 2f0ebb58ee..f5767dd796 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreBellySelectionAndCustomization.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreBellySelectionAndCustomization.tsx
@@ -1,25 +1,34 @@
import { useBackend } from 'tgui/backend';
-import { Stack } from 'tgui-core/components';
import { Box, Divider, Icon, Section, Tabs } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { Stack } from 'tgui-core/components';
+import { BooleanLike } from 'tgui-core/react';
import { digestModeToColor } from './constants';
-import type { bellyData, hostMob, selectedData } from './types';
+import { bellyData, hostMob, selectedData } from './types';
import { VoreSelectedBelly } from './VoreSelectedBelly';
export const VoreBellySelectionAndCustomization = (props: {
our_bellies: bellyData[];
- selected: selectedData;
- host_mobtype: hostMob;
+ selected: selectedData | null;
show_pictures: BooleanLike;
+ host_mobtype: hostMob;
+ icon_overflow: BooleanLike;
+ vore_words: Record;
}) => {
const { act } = useBackend();
- const { our_bellies, selected, show_pictures, host_mobtype } = props;
+ const {
+ our_bellies,
+ selected,
+ show_pictures,
+ host_mobtype,
+ icon_overflow,
+ vore_words,
+ } = props;
return (
-
+
act('newbelly')}>
@@ -60,9 +69,11 @@ export const VoreBellySelectionAndCustomization = (props: {
{selected && (
)}
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreContentsPanel.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreContentsPanel.tsx
index c34a96cb55..298e7dede2 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreContentsPanel.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreContentsPanel.tsx
@@ -1,22 +1,30 @@
import { useBackend } from 'tgui/backend';
import { Button, Image, LabeledList, Stack } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { BooleanLike } from 'tgui-core/react';
import { stats } from './constants';
-import type { contentData } from './types';
+import { contentData } from './types';
export const VoreContentsPanel = (props: {
contents: contentData[];
belly?: string;
outside?: BooleanLike;
show_pictures: BooleanLike;
+ icon_overflow: BooleanLike;
}) => {
const { act } = useBackend();
- const { contents, belly, outside = false, show_pictures } = props;
+
+ const {
+ contents,
+ belly,
+ outside = false,
+ show_pictures,
+ icon_overflow,
+ } = props;
return (
<>
- {(outside && (
+ {outside ? (
- )) ||
- null}
- {(show_pictures && (
+ ) : (
+ ''
+ )}
+ {(show_pictures && !icon_overflow && (
{contents.map((thing) => (
@@ -64,8 +73,8 @@ export const VoreContentsPanel = (props: {
)) || (
- {contents.map((thing) => (
-
+ {contents.map((thing, i) => (
+
{tabs[tabIndex] || 'Error'}
>
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode.tsx
index 40989cfee9..071caca279 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode.tsx
@@ -1,6 +1,6 @@
import { useBackend } from 'tgui/backend';
import { Button, LabeledList } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { BooleanLike } from 'tgui-core/react';
export const VoreSelectedBellyDescriptionsBellymode = (props: {
message_mode: BooleanLike;
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape.tsx
index b5ba928305..fe4b7c88aa 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape.tsx
@@ -1,6 +1,6 @@
import { useBackend } from 'tgui/backend';
import { Button, LabeledList } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { BooleanLike } from 'tgui-core/react';
import type { interactData } from '../types';
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle.tsx
index 333038ae3f..1d9fe4dd3f 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle.tsx
@@ -1,6 +1,6 @@
import { useBackend } from 'tgui/backend';
import { Button, LabeledList } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { BooleanLike } from 'tgui-core/react';
export const VoreSelectedBellyDescriptionsIdle = (props: {
message_mode: BooleanLike;
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance.tsx
index 7c4cccd4ab..4a7ec86874 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance.tsx
@@ -1,6 +1,6 @@
import { useBackend } from 'tgui/backend';
import { Button, LabeledList } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { BooleanLike } from 'tgui-core/react';
import type { interactData } from '../types';
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer.tsx
index 66d139c1e1..e3d5960a90 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer.tsx
@@ -1,16 +1,17 @@
import { useBackend } from 'tgui/backend';
import { Button, LabeledList } from 'tgui-core/components';
-import type { BooleanLike } from 'tgui-core/react';
+import { BooleanLike } from 'tgui-core/react';
-import type { interactData } from '../types';
+import type { autotransferData, interactData } from '../types';
export const VoreSelectedBellyDescriptionsTransfer = (props: {
message_mode: BooleanLike;
interacts: interactData;
+ autotransfer: autotransferData;
}) => {
const { act } = useBackend();
- const { message_mode, interacts } = props;
+ const { message_mode, interacts, autotransfer } = props;
return (
@@ -62,6 +63,54 @@ export const VoreSelectedBellyDescriptionsTransfer = (props: {
>
)}
+ {(message_mode || !!autotransfer.autotransferlocation) && (
+ <>
+
+
+ >
+ )}
+ {(message_mode || !!autotransfer.autotransferlocation_secondary) && (
+ <>
+
+
+ >
+ )}
);
};
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx
index 0f6c9a6c4e..ec97a580bf 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx
@@ -9,7 +9,7 @@ import {
} from 'tgui-core/components';
import { SYNTAX_COLOR, SYNTAX_REGEX } from '../constants';
-import type { Data, selectedData } from '../types';
+import type { selectedData } from '../types';
import { VoreSelectedBellyDescriptionsBellymode } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode';
import { VoreSelectedBellyDescriptionsEscape } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape';
import { VoreSelectedBellyDescriptionsIdle } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle';
@@ -53,11 +53,12 @@ const DescriptionSyntaxHighlighting = (props: { desc: string }) => {
export const VoreSelectedBellyDescriptions = (props: {
belly: selectedData;
+ vore_words: Record;
}) => {
- const { act, data } = useBackend();
+ const { act } = useBackend();
const [showFormatHelp, setShowFormatHelp] = useState(false);
- const { belly } = props;
+ const { belly, vore_words } = props;
const {
verb,
release_verb,
@@ -67,6 +68,8 @@ export const VoreSelectedBellyDescriptions = (props: {
message_mode,
escapable,
interacts,
+ autotransfer_enabled,
+ autotransfer,
emote_active,
} = belly;
@@ -117,7 +120,7 @@ export const VoreSelectedBellyDescriptions = (props: {
Only used in transfer messages - belly prey is going to.
- {Object.entries(data.vore_words).map(([word, options]) => (
+ {Object.entries(vore_words).map(([word, options]) => (
Replaces self with one of these options: {options.join(', ')}
@@ -126,6 +129,33 @@ export const VoreSelectedBellyDescriptions = (props: {
)}
+
+ Description:{' '}
+
+
+
+
+ Description (Absorbed):{' '}
+
+
+
+
-
- Description:{' '}
-
-
-
-
- Description (Absorbed):{' '}
-
-
-
-
);
};
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx
index a329250c80..fa3703f2d2 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx
@@ -1,11 +1,15 @@
import { useBackend } from 'tgui/backend';
import { Button, LabeledList, Section } from 'tgui-core/components';
-export const VoreSelectedBellyInteractions = (props) => {
+import type { selectedData } from '../types';
+
+export const VoreSelectedBellyInteractions = (props: {
+ belly: selectedData;
+}) => {
const { act } = useBackend();
const { belly } = props;
- const { escapable, interacts } = belly;
+ const { escapable, interacts, autotransfer_enabled, autotransfer } = belly;
return (
{
{interacts.digestchance + '%'}
+
+
+
+
) : (
'These options only display while interactions are turned on.'
)}
+
+ act('set_attribute', { attribute: 'b_autotransfer_enabled' })
+ }
+ icon={autotransfer_enabled ? 'toggle-on' : 'toggle-off'}
+ selected={autotransfer_enabled}
+ >
+ {autotransfer_enabled
+ ? 'Auto-Transfer Enabled'
+ : 'Auto-Transfer Disabled'}
+
+ }
+ >
+ {autotransfer_enabled ? (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {(autotransfer.autotransferextralocation &&
+ autotransfer.autotransferextralocation.join(', ')) ||
+ ''}
+
+
+ {(autotransfer.autotransfer_whitelist.length &&
+ autotransfer.autotransfer_whitelist.join(', ')) ||
+ 'Everything'}
+
+
+ {(autotransfer.autotransfer_whitelist_items.length &&
+ autotransfer.autotransfer_whitelist_items.join(', ')) ||
+ 'Everything'}
+
+
+ {(autotransfer.autotransfer_blacklist.length &&
+ autotransfer.autotransfer_blacklist.join(', ')) ||
+ 'Nothing'}
+
+
+ {(autotransfer.autotransfer_blacklist_items.length &&
+ autotransfer.autotransfer_blacklist_items.join(', ')) ||
+ 'Nothing'}
+
+
+
+
+
+
+
+
+
+ {(autotransfer.autotransferextralocation_secondary &&
+ autotransfer.autotransferextralocation_secondary.join(', ')) ||
+ ''}
+
+
+ {(autotransfer.autotransfer_secondary_whitelist.length &&
+ autotransfer.autotransfer_secondary_whitelist.join(', ')) ||
+ 'Everything'}
+
+
+ {(autotransfer.autotransfer_secondary_whitelist_items.length &&
+ autotransfer.autotransfer_secondary_whitelist_items.join(
+ ', ',
+ )) ||
+ 'Everything'}
+
+
+ {(autotransfer.autotransfer_secondary_blacklist.length &&
+ autotransfer.autotransfer_secondary_blacklist.join(', ')) ||
+ 'Nothing'}
+
+
+ {(autotransfer.autotransfer_secondary_blacklist_items.length &&
+ autotransfer.autotransfer_secondary_blacklist_items.join(
+ ', ',
+ )) ||
+ 'Nothing'}
+
+
+ ) : (
+ 'These options only display while Auto-Transfer is enabled.'
+ )}
+
);
};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidMessages.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidMessages.tsx
similarity index 98%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidMessages.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidMessages.tsx
index ecf0259a18..fdefb79667 100644
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidMessages.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidMessages.tsx
@@ -1,7 +1,7 @@
import { useBackend } from 'tgui/backend';
import { Button, LabeledList, Section } from 'tgui-core/components';
-import { selectedData } from '../types';
+import type { selectedData } from '../types';
export const VoreSelectedBellyLiquidMessages = (props: {
belly: selectedData;
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx
similarity index 95%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx
index 222fea26e5..3adb1771ca 100644
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions.tsx
@@ -3,7 +3,7 @@ import { Button, LabeledList, Section } from 'tgui-core/components';
import { reagentToColor } from '../constants';
import { LiquidColorInput } from '../LiquidColorInput';
-import { selectedData } from '../types';
+import type { selectedData } from '../types';
export const VoreSelectedBellyLiquidOptions = (props: {
belly: selectedData;
@@ -13,6 +13,10 @@ export const VoreSelectedBellyLiquidOptions = (props: {
const { belly } = props;
const { show_liq, liq_interacts } = belly;
+ const generationTime = (liq_interacts.liq_reagent_nutri_rate + 1) * 10;
+ const generationMinutes = generationTime % 60;
+ const generationHours = Math.floor(generationTime / 60);
+
return (
- {((liq_interacts.liq_reagent_nutri_rate + 1) * 10) / 60 +
- ' Hours'}
+ {(generationHours < 10
+ ? '0' + generationHours
+ : generationHours) +
+ ':' +
+ (generationMinutes < 10
+ ? '0' + generationMinutes
+ : generationMinutes) +
+ ' hh:mm'}
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx
index f23ab65cda..11c7589cbc 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx
@@ -2,6 +2,7 @@ import { useBackend } from 'tgui/backend';
import { Button, LabeledList, Stack } from 'tgui-core/components';
import { capitalize } from 'tgui-core/string';
+import { vorespawnAbsorbedColor, vorespawnAbsorbedText } from '../constants';
import type { hostMob, selectedData } from '../types';
import { VoreSelectedMobTypeBellyButtons } from './VoreSelectedMobTypeBellyButtons';
@@ -14,6 +15,7 @@ export const VoreSelectedBellyOptions = (props: {
const { belly, host_mobtype } = props;
const {
can_taste,
+ is_feedable,
nutrition_percent,
digest_brute,
digest_burn,
@@ -29,9 +31,19 @@ export const VoreSelectedBellyOptions = (props: {
contaminate_flavor,
contaminate_color,
egg_type,
+ egg_name,
+ egg_size,
+ recycling,
+ storing_nutrition,
+ entrance_logs,
+ item_digest_logs,
selective_preference,
save_digest_mode,
eating_privacy_local,
+ vorespawn_blacklist,
+ vorespawn_whitelist,
+ vorespawn_absorbed,
+ private_struggle,
drainmode,
} = belly;
@@ -48,10 +60,19 @@ export const VoreSelectedBellyOptions = (props: {
{can_taste ? 'Yes' : 'No'}
+
+
+
- {(contaminates && (
+ {contaminates ? (
<>
>
- )) ||
- null}
+ ) : (
+ ''
+ )}
+
+
+
+
+
+
+ {vorespawn_blacklist ? (
+ ''
+ ) : (
+ <>
+
+
+
+
+
+
+ >
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx
index 94d9c77998..13a92cef05 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx
@@ -2,6 +2,7 @@ import { useBackend } from 'tgui/backend';
import { Box, Button, LabeledList, Section, Stack } from 'tgui-core/components';
import { classes } from 'tgui-core/react';
+import { FeatureColorInput } from '../FeatureColorInput';
import type { selectedData } from '../types';
export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
@@ -10,16 +11,19 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
const { belly } = props;
const {
belly_fullscreen,
+ belly_fullscreen_color,
+ belly_fullscreen_color2,
+ belly_fullscreen_color3,
+ belly_fullscreen_color4,
+ colorization_enabled,
possible_fullscreens,
disable_hud,
- belly_fullscreen_color,
- belly_fullscreen_color_secondary,
- belly_fullscreen_color_trinary,
- colorization_enabled,
vore_sprite_flags,
affects_voresprite,
absorbed_voresprite,
absorbed_multiplier,
+ liquid_voresprite,
+ liquid_multiplier,
item_voresprite,
item_multiplier,
health_voresprite,
@@ -29,6 +33,7 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
belly_sprite_to_affect,
undergarment_chosen,
undergarment_if_none,
+ undergarment_color,
tail_option_shown,
tail_to_change_to,
} = belly;
@@ -86,6 +91,28 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
{absorbed_multiplier}
+
+
+
+
+
+
+
>
) : (
''
@@ -214,69 +247,36 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
@@ -328,7 +328,7 @@ export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
-
+
Belly styles:
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
similarity index 94%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
index 22b8b03006..1b1b89d0e4 100644
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
@@ -114,12 +114,18 @@ export const VoreUserPreferencesMechanical = (props: {
tooltipPosition="left"
/>
-
+
+
+
+
);
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx
similarity index 100%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher.tsx
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx
similarity index 100%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpawn.tsx
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx
similarity index 100%
rename from tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx
rename to tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous.tsx
diff --git a/tgui/packages/tgui/interfaces/VorePanel/constants.ts b/tgui/packages/tgui/interfaces/VorePanel/constants.ts
index ead6ad753c..34c1c16a87 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/constants.ts
+++ b/tgui/packages/tgui/interfaces/VorePanel/constants.ts
@@ -1,7 +1,14 @@
export const stats: (string | undefined)[] = [undefined, 'average', 'bad'];
+export const vorespawnAbsorbedText: string[] = ['No', 'Yes', 'Prey Choice'];
+export const vorespawnAbsorbedColor: (string | undefined)[] = [
+ undefined,
+ 'green',
+ 'orange',
+];
export const digestModeToColor = {
- Hold: null,
+ Default: undefined,
+ Hold: undefined,
Digest: 'red',
Absorb: 'purple',
Unabsorb: 'purple',
@@ -14,6 +21,21 @@ export const digestModeToColor = {
'Encase In Egg': 'blue',
};
+export const reagentToColor = {
+ Water: undefined,
+ Milk: undefined,
+ Cream: undefined,
+ Honey: 'teal',
+ 'Cherry Jelly': 'teal',
+ 'Digestive acid': 'red',
+ 'Diluted digestive acid': 'red',
+ 'Space cleaner': undefined,
+ 'Space Lube': undefined,
+ Biomass: 'teal',
+ 'Concentrated Radium': 'orange',
+ Tricordrazine: 'green',
+};
+
export const digestModeToPreyMode = {
Hold: 'being held.',
Digest: 'being digested.',
diff --git a/tgui/packages/tgui/interfaces/VorePanel/index.tsx b/tgui/packages/tgui/interfaces/VorePanel/index.tsx
index e48115a4d6..5af0709d16 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/index.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/index.tsx
@@ -3,9 +3,10 @@ import { useBackend } from 'tgui/backend';
import { Window } from 'tgui/layouts';
import { Button, Icon, NoticeBox, Stack, Tabs } from 'tgui-core/components';
-import type { Data } from './types';
+import { Data } from './types';
import { VoreBellySelectionAndCustomization } from './VoreBellySelectionAndCustomization';
import { VoreInsidePanel } from './VoreInsidePanel';
+import { VoreSoulcatcher } from './VoreSoulcatcher';
import { VoreUserPreferences } from './VoreUserPreferences';
/**
@@ -14,11 +15,156 @@ import { VoreUserPreferences } from './VoreUserPreferences';
* - The Belly Selection Panel, where you can select what belly people will go into and customize the active one.
* - User Preferences, where you can adjust all of your vore preferences on the fly.
*/
-export const VorePanel = (props) => {
+
+/**
+ * CHOMPedits specified here. Read ALL of this if conflicts happen, I can't find a way to add comments line by line.
+ *
+ * Under VoreSelectedBelly the following strings have been added to const{}:
+ * show_liq, liq_interacts, liq_reagent_gen, liq_reagent_type, liq_reagent_name,
+ * liq_reagent_transfer_verb, liq_reagent_nutri_rate, liq_reagent_capacity, liq_sloshing, liq_reagent_addons,
+ * show_liq_fullness, liq_messages, liq_msg_toggle1, liq_msg_toggle2, liq_msg_toggle3, liq_msg_toggle4,
+ * liq_msg_toggle5, liq_msg1, liq_msg2, liq_msg3, liq_msg4, liq_msg5, sound_volume, egg_name, recycling, storing_nutrition, entrance_logs, item_digest_logs, noise_freq,
+ * custom_reagentcolor, custom_reagentalpha, liquid_overlay, max_liquid_level, mush_overlay, reagent_touches, mush_color, mush_alpha, max_mush, min_mush, item_mush_val,
+ * metabolism_overlay, metabolism_mush_ratio, max_ingested, custom_ingested_color, custom_ingested_alpha
+ *
+ * To the tabs section of VoreSelectedBelly return
+ * setTabIndex(5)}>
+ * Liquid Options
+ *
+ * setTabIndex(6)}>
+ * Liquid Messages
+ *
+ *
+ * All of the content for tabIndex === 5 and tabIndex === 6
+ *
+ * Under VoreUserPreferences the following strings have been added to const{}:
+ * liq_rec, liq_giv,
+ *
+ * To VoreUserPreferences return
+ *
+ * act("toggle_liq_rec")}
+ * icon={liq_rec ? "toggle-on" : "toggle-off"}
+ * selected={liq_rec}
+ * fluid
+ * tooltipPosition="top"
+ * tooltip={"This button is for allowing or preventing others from giving you liquids from their vore organs."
+ * + (liq_rec ? " Click here to prevent receiving liquids." : " Click here to allow receiving liquids.")}
+ * >
+ * {liq_rec ? "Receiving Liquids Allowed" : "Do Not Allow Receiving Liquids"}
+ *
+ *
+ *
+ * act("toggle_liq_giv")}
+ * icon={liq_giv ? "toggle-on" : "toggle-off"}
+ * selected={liq_giv}
+ * fluid
+ * tooltipPosition="top"
+ * tooltip={"This button is for allowing or preventing others from taking liquids from your vore organs."
+ * + (liq_giv ? " Click here to prevent taking liquids." : " Click here to allow taking liquids.")}
+ * >
+ * {liq_giv ? "Taking Liquids Allowed" : "Do Not Allow Taking Liquids"}
+ *
+ *
+ *
+ * NEW EDITS 2/25/21: COLORED BELLY OVERLAYS
+ * LINE 5:
+ *import { Box, Button, ByondUi, Stack, Collapsible, Icon, LabeledList, NoticeBox, Section, Tabs } from "../components";
+ *
+ * LINE 172 -
+ *
+ * LINE 301 - belly_fullscreen_color,
+ * mapRef,
+ *
+ * LINE 604 -
+ *
+ *
+ * act("set_attribute", { attribute: "b_fullscreen_color", val: null })}>
+ * Select Color
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * act("set_attribute", { attribute: "b_disable_hud" })}
+ * icon={disable_hud ? "toggle-on" : "toggle-off"}
+ * selected={disable_hud}
+ * >
+ * {disable_hud ? "Yes" : "No"}
+ *
+ *
+ *
+ *
+ *
+ * Belly styles:
+ * act("set_attribute", { attribute: "b_fullscreen", val: null })}>
+ * Disabled
+ *
+ * {Object.keys(possible_fullscreens).map(key => (
+ * act("set_attribute", { attribute: "b_fullscreen", val: key })}>
+ *
+ *
+ * ))}
+ *
+ *
+ *
+ * LINE 900 - const [tabIndex, setTabIndex] = useLocalState('tabIndex', 0);
+ *
+ * return tabIndex===4 ? null : (
+ *
+ * New preference added, noisy_full
+ * noisy_full enables belching when nutrition exceeds 500, very similar to the noisy preference.
+ *
+ * That's everything so far.
+ *
+ */
+
+export const VorePanel = () => {
const { act, data } = useBackend();
- const { inside, our_bellies, selected, prefs, show_pictures, host_mobtype } =
- data;
+ const {
+ inside,
+ our_bellies,
+ selected,
+ soulcatcher,
+ abilities,
+ prefs,
+ show_pictures,
+ icon_overflow,
+ host_mobtype,
+ unsaved_changes,
+ vore_words,
+ } = data;
const [tabIndex, setTabIndex] = useState(0);
@@ -28,19 +174,34 @@ export const VorePanel = (props) => {
+ );
+ tabs[1] = (
+
+ );
+ tabs[2] = (
+
);
- tabs[1] = ;
-
return (
-
+
- {(data.unsaved_changes && (
+ {(unsaved_changes && (
Warning: Unsaved Changes!
@@ -66,7 +227,11 @@ export const VorePanel = (props) => {
''}
500 ? '30%' : '20%'}>
-
+
@@ -80,6 +245,13 @@ export const VorePanel = (props) => {
setTabIndex(1)}
+ >
+ Soulcatcher
+
+
+ setTabIndex(2)}
>
Preferences
diff --git a/tgui/packages/tgui/interfaces/VorePanel/types.ts b/tgui/packages/tgui/interfaces/VorePanel/types.ts
index ea36a398da..b7fb2ddb7c 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/types.ts
+++ b/tgui/packages/tgui/interfaces/VorePanel/types.ts
@@ -3,21 +3,25 @@ import { BooleanLike } from 'tgui-core/react';
export type Data = {
unsaved_changes: BooleanLike;
show_pictures: BooleanLike;
+ icon_overflow: BooleanLike;
inside: insideData;
host_mobtype: hostMob;
our_bellies: bellyData[];
- selected: selectedData;
+ selected: selectedData | null;
prefs: prefData;
- abilities: {
- nutrition: number;
- current_size: number;
- minimum_size: number;
- maximum_size: number;
- resize_cost: number;
- };
+ soulcatcher: soulcatcherData | null;
+ abilities: abilities;
vore_words: Record;
};
+export type abilities = {
+ nutrition: number;
+ current_size: number;
+ minimum_size: number;
+ maximum_size: number;
+ resize_cost: number;
+};
+
export type hostMob = {
is_cyborg: BooleanLike;
is_vore_simple_mob: BooleanLike;
@@ -30,6 +34,9 @@ export type insideData = {
desc?: string;
pred?: string;
ref?: string;
+ liq_lvl?: number;
+ liq_reagent_type?: string;
+ liuq_name?: string;
contents?: contentData[];
};
@@ -65,7 +72,13 @@ export type selectedData = {
sound: string;
release_sound: string;
can_taste: BooleanLike;
+ is_feedable: BooleanLike;
egg_type: string;
+ egg_name: string;
+ egg_size: number;
+ recycling: BooleanLike;
+ storing_nutrition: BooleanLike;
+ entrance_logs: BooleanLike;
nutrition_percent: number;
digest_brute: number;
digest_burn: number;
@@ -89,9 +102,53 @@ export type selectedData = {
belly_overall_mult: number;
drainmode: string;
belly_fullscreen_color: string;
- belly_fullscreen_color_secondary: string;
- belly_fullscreen_color_trinary: string;
+ belly_fullscreen_color2: string;
+ belly_fullscreen_color3: string;
+ belly_fullscreen_color4: string;
+ belly_fullscreen_alpha: number;
colorization_enabled: BooleanLike;
+ custom_reagentcolor: string;
+ custom_reagentalpha: number;
+ liquid_overlay: BooleanLike;
+ max_liquid_level: number;
+ reagent_touches: BooleanLike;
+ mush_overlay: BooleanLike;
+ mush_color: string;
+ mush_alpha: number;
+ max_mush: number;
+ min_mush: number;
+ item_mush_val: number;
+ metabolism_overlay: BooleanLike;
+ metabolism_mush_ratio: number;
+ max_ingested: number;
+ custom_ingested_color: string;
+ custom_ingested_alpha: number;
+ vorespawn_blacklist: BooleanLike;
+ vorespawn_whitelist: string[];
+ vorespawn_absorbed: number;
+ sound_volume: number;
+ affects_voresprite: BooleanLike;
+ absorbed_voresprite: BooleanLike;
+ absorbed_multiplier: number;
+ liquid_voresprite: BooleanLike;
+ liquid_multiplier: number;
+ item_voresprite: BooleanLike;
+ item_multiplier: number;
+ health_voresprite: number;
+ resist_animation: BooleanLike;
+ voresprite_size_factor: number;
+ belly_sprite_to_affect: string;
+ undergarment_chosen: string;
+ undergarment_if_none: string;
+ undergarment_color: string;
+ belly_sprite_option_shown: BooleanLike;
+ tail_option_shown: BooleanLike;
+ tail_to_change_to: BooleanLike | string;
+ tail_colouration: BooleanLike;
+ tail_extra_overlay: BooleanLike;
+ tail_extra_overlay2: BooleanLike;
+ noise_freq: number;
+ item_digest_logs: BooleanLike;
private_struggle: BooleanLike;
addons: string[];
vore_sprite_flags: string[];
@@ -105,25 +162,10 @@ export type selectedData = {
disable_hud: BooleanLike;
possible_fullscreens: string[];
contents: contentData[];
- affects_voresprite: BooleanLike;
- absorbed_voresprite: BooleanLike;
- absorbed_multiplier: number;
- liquid_voresprite: BooleanLike;
- liquid_multiplier: number;
- item_voresprite: BooleanLike;
- item_multiplier: number;
- health_voresprite: BooleanLike;
- resist_animation: BooleanLike;
- voresprite_size_factor: number;
- belly_sprite_to_affect: string;
- belly_sprite_option_shown: BooleanLike;
- tail_option_shown: BooleanLike;
- tail_to_change_to: BooleanLike | string;
- tail_colouration: BooleanLike;
- tail_extra_overlay: BooleanLike;
- tail_extra_overlay2: BooleanLike;
- undergarment_chosen: undefined; // NOT IMPLEMENTED!!!
- undergarment_if_none: undefined; // NOT IMPLEMENTED!!!
+ show_liq: BooleanLike;
+ liq_interacts: liqInteractData;
+ show_liq_fullness: BooleanLike;
+ liq_messages: liqMessageData;
};
export type interactData = {
@@ -136,12 +178,67 @@ export type interactData = {
transferlocation_secondary: string;
absorbchance: number;
digestchance: number;
+ belchchance: number;
};
-type autotransferData = {
+export type autotransferData = {
autotransferchance: number;
autotransferwait: number;
autotransferlocation: string;
+ autotransferextralocation: string[];
+ autotransferchance_secondary: number;
+ autotransferlocation_secondary: string;
+ autotransferextralocation_secondary: string[];
+ autotransfer_min_amount: number;
+ autotransfer_max_amount: number;
+ autotransfer_whitelist: string[];
+ autotransfer_blacklist: string[];
+ autotransfer_whitelist_items: string[];
+ autotransfer_blacklist_items: string[];
+ autotransfer_secondary_whitelist: string[];
+ autotransfer_secondary_blacklist: string[];
+ autotransfer_secondary_whitelist_items: string[];
+ autotransfer_secondary_blacklist_items: string[];
+};
+
+type liqInteractData = {
+ liq_reagent_gen: BooleanLike;
+ liq_reagent_type: string;
+ liq_reagent_name: string;
+ liq_reagent_transfer_verb: string;
+ liq_reagent_nutri_rate: number;
+ liq_reagent_capacity: number;
+ liq_sloshing: BooleanLike;
+ liq_reagent_addons: string[];
+ custom_reagentcolor: string;
+ custom_reagentalpha: number | string;
+ liquid_overlay: BooleanLike;
+ max_liquid_level: number;
+ reagent_touches: BooleanLike;
+ mush_overlay: BooleanLike;
+ mush_color: string;
+ mush_alpha: number;
+ max_mush: number;
+ min_mush: number;
+ item_mush_val: number;
+ metabolism_overlay: BooleanLike;
+ metabolism_mush_ratio: number;
+ max_ingested: number;
+ custom_ingested_color: string;
+ custom_ingested_alpha: number;
+};
+
+type liqMessageData = {
+ liq_msg_toggle1: BooleanLike;
+ liq_msg_toggle2: BooleanLike;
+ liq_msg_toggle3: BooleanLike;
+ liq_msg_toggle4: BooleanLike;
+ liq_msg_toggle5: BooleanLike;
+ liq_msg1: BooleanLike;
+ liq_msg2: BooleanLike;
+ liq_msg3: BooleanLike;
+ liq_msg4: BooleanLike;
+ liq_msg5: BooleanLike;
};
export type prefData = {
@@ -156,16 +253,32 @@ export type prefData = {
show_vore_fx: BooleanLike;
can_be_drop_prey: BooleanLike;
can_be_drop_pred: BooleanLike;
+ latejoin_vore: BooleanLike;
+ latejoin_prey: BooleanLike;
+ no_spawnpred_warning: BooleanLike;
+ no_spawnprey_warning: BooleanLike;
+ no_spawnpred_warning_time: number;
+ no_spawnprey_warning_time: number;
+ no_spawnpred_warning_save: BooleanLike;
+ no_spawnprey_warning_save: BooleanLike;
allow_spontaneous_tf: BooleanLike;
- allow_inbelly_spawning: BooleanLike;
step_mechanics_active: BooleanLike;
pickup_mechanics_active: BooleanLike;
+ strip_mechanics_active: BooleanLike;
noisy: BooleanLike;
+ liq_rec: BooleanLike;
+ liq_giv: BooleanLike;
+ liq_apply: BooleanLike;
+ consume_liquid_belly: BooleanLike;
+ autotransferable: BooleanLike;
+ noisy_full: BooleanLike;
+ selective_active: string;
allow_mind_transfer: BooleanLike;
drop_vore: BooleanLike;
slip_vore: BooleanLike;
stumble_vore: BooleanLike;
throw_vore: BooleanLike;
+ phase_vore: BooleanLike;
food_vore: BooleanLike;
digest_pain: BooleanLike;
nutrition_message_visible: BooleanLike;
@@ -174,8 +287,38 @@ export type prefData = {
weight_messages: string[];
eating_privacy_global: BooleanLike;
allow_mimicry: BooleanLike;
+ belly_rub_target: string | null;
vore_sprite_color: { stomach: string; 'taur belly': string };
vore_sprite_multiply: { stomach: BooleanLike; 'taur belly': BooleanLike };
+ soulcatcher_allow_capture: BooleanLike;
+ soulcatcher_allow_transfer: BooleanLike;
+ soulcatcher_allow_deletion: BooleanLike;
+ soulcatcher_allow_takeover: BooleanLike;
+};
+
+export type soulcatcherData = {
+ active: BooleanLike;
+ name: string;
+ caught_souls: DropdownEntry[];
+ selected_sfx: string;
+ selected_soul: string;
+ interior_design: string;
+ catch_self: BooleanLike;
+ taken_over: BooleanLike;
+ catch_prey: BooleanLike;
+ catch_drain: BooleanLike;
+ catch_ghost: BooleanLike;
+ ext_hearing: BooleanLike;
+ ext_vision: BooleanLike;
+ mind_backups: BooleanLike;
+ sr_projecting: BooleanLike;
+ show_vore_sfx: BooleanLike;
+ see_sr_projecting: BooleanLike;
+};
+
+export type DropdownEntry = {
+ displayText: string;
+ value: string;
};
export type localPrefs = {
@@ -191,10 +334,13 @@ export type localPrefs = {
toggle_slip_vore: preferenceData;
toggle_stumble_vore: preferenceData;
toggle_throw_vore: preferenceData;
+ toggle_phase_vore: preferenceData;
toggle_food_vore: preferenceData;
toggle_digest_pain: preferenceData;
- inbelly_spawning: preferenceData;
+ spawnbelly: preferenceData;
+ spawnprey: preferenceData;
noisy: preferenceData;
+ noisy_full: preferenceData;
resize: preferenceData;
steppref: preferenceData;
vore_fx: preferenceData;
@@ -204,8 +350,20 @@ export type localPrefs = {
mind_transfer: preferenceData;
examine_nutrition: preferenceData;
examine_weight: preferenceData;
+ strippref: preferenceData;
eating_privacy_global: preferenceData;
allow_mimicry: preferenceData;
+ autotransferable: preferenceData;
+ liquid_receive: preferenceData;
+ liquid_give: preferenceData;
+ liquid_apply: preferenceData;
+ toggle_consume_liquid_belly: preferenceData;
+ no_spawnpred_warning: preferenceData;
+ no_spawnprey_warning: preferenceData;
+ soulcatcher: preferenceData;
+ soulcatcher_transfer: preferenceData;
+ soulcatcher_takeover: preferenceData;
+ soulcatcher_delete: preferenceData;
};
export type preferenceData = {
diff --git a/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyString.tsx b/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyString.tsx
index 81f94c66ef..045e8c1924 100644
--- a/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyString.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyString.tsx
@@ -1,6 +1,10 @@
import { ItemModeSpan, ModeSpan } from './constants';
-import type { Belly } from './types';
-import { GetAddons } from './VorePanelExportBellyStringHelpers';
+import { Belly } from './types';
+import {
+ GetAddons,
+ GetAutotransferFlags,
+ GetLiquidAddons,
+} from './VorePanelExportBellyStringHelpers';
// prettier-ignore
export const generateBellyString = (belly: Belly, index: number) => {
@@ -26,6 +30,7 @@ export const generateBellyString = (belly: Belly, index: number) => {
digest_clone,
can_taste,
+ is_feedable,
contaminates,
contamination_flavor,
contamination_color,
@@ -36,8 +41,16 @@ export const generateBellyString = (belly: Belly, index: number) => {
emote_active,
emote_time,
shrink_grow_size,
+ vorespawn_blacklist,
+ vorespawn_whitelist,
+ vorespawn_absorbed,
egg_type,
+ egg_name,
selective_preference,
+ recycling,
+ storing_nutrition,
+ entrance_logs,
+ item_digest_logs,
// Messages
struggle_messages_outside,
@@ -65,6 +78,10 @@ export const generateBellyString = (belly: Belly, index: number) => {
primary_transfer_messages_prey,
secondary_transfer_messages_owner,
secondary_transfer_messages_prey,
+ primary_autotransfer_messages_owner,
+ primary_autotransfer_messages_prey,
+ secondary_autotransfer_messages_owner,
+ secondary_autotransfer_messages_prey,
digest_chance_messages_owner,
digest_chance_messages_prey,
absorb_chance_messages_owner,
@@ -97,6 +114,24 @@ export const generateBellyString = (belly: Belly, index: number) => {
fancy_vore,
vore_sound,
release_sound,
+ sound_volume,
+ noise_freq,
+
+ // Visuals
+ affects_vore_sprites,
+ count_absorbed_prey_for_sprite,
+ resist_triggers_animation,
+ size_factor_for_sprite,
+ belly_sprite_to_affect,
+
+ // Visuals (Belly Fullscreens Preview and Coloring)
+ belly_fullscreen,
+ belly_fullscreen_color,
+ belly_fullscreen_color2,
+ belly_fullscreen_color3,
+ belly_fullscreen_color4,
+ belly_fullscreen_alpha,
+ colorization_enabled,
// Visuals (Vore FX)
disable_hud,
@@ -116,6 +151,68 @@ export const generateBellyString = (belly: Belly, index: number) => {
absorbchance,
digestchance,
+
+ belchchance,
+
+ // Interactions (Auto-Transfer)
+ autotransferwait,
+ autotransferchance,
+ autotransferlocation,
+ autotransferextralocation,
+ autotransferchance_secondary,
+ autotransferlocation_secondary,
+ autotransferextralocation_secondary,
+ autotransfer_enabled,
+ autotransfer_min_amount,
+ autotransfer_max_amount,
+ autotransfer_whitelist,
+ autotransfer_blacklist,
+ autotransfer_secondary_whitelist,
+ autotransfer_secondary_blacklist,
+ autotransfer_whitelist_items,
+ autotransfer_blacklist_items,
+ autotransfer_secondary_whitelist_items,
+ autotransfer_secondary_blacklist_items,
+
+ // Liquid Options
+ show_liquids,
+ reagentbellymode,
+ reagent_chosen,
+ reagent_name,
+ reagent_transfer_verb,
+ gen_time_display,
+ custom_max_volume,
+ vorefootsteps_sounds,
+ reagent_mode_flag_list,
+ liquid_overlay,
+ max_liquid_level,
+ reagent_touches,
+ mush_overlay,
+ mush_color,
+ mush_alpha,
+ max_mush,
+ min_mush,
+ item_mush_val,
+ custom_reagentcolor,
+ custom_reagentalpha,
+ metabolism_overlay,
+ metabolism_mush_ratio,
+ max_ingested,
+ custom_ingested_color,
+ custom_ingested_alpha,
+
+ // Liquid Messages
+ liquid_fullness1_messages,
+ liquid_fullness2_messages,
+ liquid_fullness3_messages,
+ liquid_fullness4_messages,
+ liquid_fullness5_messages,
+
+ fullness1_messages,
+ fullness2_messages,
+ fullness3_messages,
+ fullness4_messages,
+ fullness5_messages,
} = belly;
let result = '';
@@ -324,6 +421,30 @@ export const generateBellyString = (belly: Belly, index: number) => {
});
result += '';
+ result += '';
+ primary_autotransfer_messages_owner?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '';
+ primary_autotransfer_messages_prey?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '';
+ secondary_autotransfer_messages_owner?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '';
+ secondary_autotransfer_messages_prey?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
result += '';
digest_chance_messages_owner?.forEach((msg) => {
result += msg + '
';
@@ -510,6 +631,7 @@ export const generateBellyString = (belly: Belly, index: number) => {
result += '
';
result += '
';
result += '- Can Taste: ' + (can_taste ? 'Yes' : 'No') + '
';
+ result += '- Feedable: ' + (is_feedable ? 'Yes' : 'No') + '
';
result += '- Contaminates: ' + (contaminates ? 'Yes' : 'No') + '
';
result += '- Contamination Flavor: ' + contamination_flavor + '
';
result += '- Contamination Color: ' + contamination_color + '
';
@@ -520,6 +642,9 @@ export const generateBellyString = (belly: Belly, index: number) => {
result += '- Idle Emotes: ' + (emote_active ? 'Active' : 'Inactive') + '
';
result += '- Idle Emote Delay: ' + emote_time + ' seconds
';
result += '- Shrink/Grow Size: ' + shrink_grow_size * 100 + '%
';
+ result += '- Vore Spawn Blacklist: ' + (vorespawn_blacklist ? 'Yes' : 'No') + '
';
+ result += '- Vore Spawn Whitelist: ' + (vorespawn_whitelist.length ? vorespawn_whitelist.join(', ') : 'Anyone!') + '
';
+ result += '- Vore Spawn Absorbed: ' + (vorespawn_absorbed === 0 ? 'No' : vorespawn_absorbed === 1 ? 'Yes' : 'Prey Choice') + '
';
result += '- Egg Type: ' + egg_type + '
';
result += '- Selective Mode Preference: ' + selective_preference + '
';
result += '
';
@@ -556,6 +681,18 @@ export const generateBellyString = (belly: Belly, index: number) => {
result += '
';
+ result += '
Vore Sprites';
+ result += '
';
+ result += '- Affect Vore Sprites: ' + (affects_vore_sprites ? 'Yes' : 'No') + '
';
+ result += '- Count Absorbed prey for vore sprites: ' + (count_absorbed_prey_for_sprite ? 'Yes' : 'No') + '
';
+ result += '- Animation when prey resist: ' + (resist_triggers_animation ? 'Yes' : 'No') + '
';
+ result += '- Vore Sprite Size Factor: ' + size_factor_for_sprite + '
';
+ result += '- Belly Sprite to affect: ' + belly_sprite_to_affect + '
';
+ result += '
';
+ result += '
Belly Fullscreens Preview and Coloring';
+ result += '
';
+ result += '- Color: ' + belly_fullscreen_color + '';
+ result += '
';
result += '
Vore FX';
result += '
';
result += '- Disable Prey HUD: ' + (disable_hud ? 'Yes' : 'No') + '
';
@@ -586,10 +723,126 @@ export const generateBellyString = (belly: Belly, index: number) => {
result += '- Secondary Transfer Location: ' + transferlocation_secondary + '
';
result += '- Absorb Chance: ' + absorbchance + '%
';
result += '- Digest Chance: ' + digestchance + '%
';
+ result += '- Belch Chance: ' + belchchance + '%
';
+ result += '
';
+ result += '
';
+ result += '
Auto-Transfer Options (' +
+ (autotransfer_enabled ? 'Enabled' : 'Disabled') +
+ ')';
+ result += '
';
+ result += '- Auto-Transfer Time: ' + autotransferwait / 10 + 's
';
+ result += '- Auto-Transfer Chance: ' + autotransferchance + '%
';
+ result += '- Auto-Transfer Location: ' + autotransferlocation + '
';
+ result += '- Auto-Transfer Chance: ' + autotransferchance_secondary + '%
';
+ result += '- Auto-Transfer Location: ' + autotransferlocation_secondary + '
';
+ result += '- Auto-Transfer Min Amount: ' + autotransfer_min_amount + '
';
+ result += '- Auto-Transfer Max Amount: ' + autotransfer_max_amount + '
';
+ result += '- Auto-Transfer Primary Chance: ' + autotransferchance + '%
';
+ result += '- Auto-Transfer Primary Location: ' + autotransferlocation + '
';
+ result += '- Auto-Transfer Primary Location Extras: ' + autotransferextralocation.join(', ') + '
';
+ result += '- Auto-Transfer Primary Whitelist (Mobs): ' + GetAutotransferFlags(autotransfer_whitelist, true) + '
';
+ result += '- Auto-Transfer Primary Whitelist (Items): ' + GetAutotransferFlags(autotransfer_whitelist_items, true) + '
';
+ result += '- Auto-Transfer Primary Blacklist (Mobs): ' + GetAutotransferFlags(autotransfer_blacklist, false) + '
';
+ result += '- Auto-Transfer Primary Blacklist (Items): ' + GetAutotransferFlags(autotransfer_blacklist_items, false) + '
';
+ result += '- Auto-Transfer Secondary Chance: ' + autotransferchance_secondary + '%
';
+ result += '- Auto-Transfer Secondary Location: ' + autotransferlocation_secondary + '
';
+ result += '- Auto-Transfer Secondary Location Extras: ' + autotransferextralocation_secondary.join(', ') + '
';
+ result += '- Auto-Transfer Secondary Whitelist (Mobs): ' + GetAutotransferFlags(autotransfer_secondary_whitelist, true) + '
';
+ result += '- Auto-Transfer Secondary Whitelist (Items): ' + GetAutotransferFlags(autotransfer_secondary_whitelist_items, true) + '
';
+ result += '- Auto-Transfer Secondary Blacklist (Mobs): ' + GetAutotransferFlags(autotransfer_secondary_blacklist, false) + '
';
+ result += '- Auto-Transfer Secondary Blacklist (Items): ' + GetAutotransferFlags(autotransfer_secondary_blacklist_items, false) + '
';
result += '
';
result += '
';
// END INTERACTIONS
+ // LIQUID OPTIONS
+
+ result += '';
+ result += '';
+
+ result += '
';
+ result += '
';
+ result += '
';
+ result += '- Generate Liquids: ' + (reagentbellymode ? 'On' : 'Off') + '
';
+ result += '- Liquid Type: ' + reagent_chosen + '
';
+ result += '- Liquid Name: ' + reagent_name + '
';
+ result += '- Transfer Verb: ' + reagent_transfer_verb + '
';
+ result += '- Generation Time: ' + gen_time_display + '
';
+ result += '- Liquid Capacity: ' + custom_max_volume + '
';
+ result += '- Slosh Sounds: ' + (vorefootsteps_sounds ? 'On' : 'Off') + '
';
+ result += '- Liquid Addons: ' + GetLiquidAddons(reagent_mode_flag_list) + '
';
+ result += '
';
+ result += '
';
+
+ // END LIQUID OPTIONS
+ // LIQUID MESSAGES
+
+ result += '';
+ result += '';
+
+ result += '
';
+ result += '
';
+
+ result += '
'; // Start Div liquidMessagesTabpanel
+ result += '
';
+
+ result += '
';
+ result += '
';
+
+ result += '
';
+ fullness1_messages?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '
';
+ fullness2_messages?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '
';
+ fullness3_messages?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '
';
+ fullness4_messages?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '
';
+ fullness5_messages?.forEach((msg) => {
+ result += msg + '
';
+ });
+ result += '
';
+
+ result += '
';
+ result += '
';
+ result += '
'; // End Div liquidMessagesTabpanel
+
+ result += '
';
+
+ // END LIQUID MESSAGES
result += '';
diff --git a/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyStringHelpers.tsx b/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyStringHelpers.tsx
index 54b40cf510..7b2278fef0 100644
--- a/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyStringHelpers.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportBellyStringHelpers.tsx
@@ -1,4 +1,6 @@
-import { AddonIcon } from './constants';
+import { BooleanLike } from 'tgui-core/react';
+
+import { AddonIcon, AutotransferFlagIcon, ReagentAddonIcon } from './constants';
export const GetAddons = (addons: string[]) => {
let result: string[] = [];
@@ -19,3 +21,50 @@ export const GetAddons = (addons: string[]) => {
return result;
};
+
+export const GetLiquidAddons = (addons: string[]) => {
+ let result: string[] = [];
+
+ addons?.forEach((addon) => {
+ result.push(
+ '' +
+ addon +
+ '',
+ );
+ });
+
+ if (result.length === 0) {
+ result.push('No Addons Set');
+ }
+
+ return result;
+};
+
+export const GetAutotransferFlags = (
+ addons: string[],
+ whitelist: BooleanLike,
+) => {
+ let result: string[] = [];
+
+ addons?.forEach((addon) => {
+ result.push(
+ '' +
+ addon +
+ '',
+ );
+ });
+
+ if (result.length === 0) {
+ if (whitelist) {
+ result.push('Everything');
+ } else {
+ result.push('Nothing');
+ }
+ }
+
+ return result;
+};
diff --git a/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportDownload.tsx b/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportDownload.tsx
index b4e8228148..6361c4048c 100644
--- a/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportDownload.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanelExport/VorePanelExportDownload.tsx
@@ -1,11 +1,11 @@
import { useBackend } from 'tgui/backend';
-import type { Data } from './types';
+import { Data } from './types';
import { generateBellyString } from './VorePanelExportBellyString';
import { getCurrentTimestamp } from './VorePanelExportTimestamp';
export const downloadPrefs = (extension: string) => {
- const { act, data } = useBackend();
+ const { data } = useBackend();
const { db_version, db_repo, mob_name, bellies } = data;
diff --git a/tgui/packages/tgui/interfaces/VorePanelExport/constants.ts b/tgui/packages/tgui/interfaces/VorePanelExport/constants.ts
index 5b07412443..cf3f9ce924 100644
--- a/tgui/packages/tgui/interfaces/VorePanelExport/constants.ts
+++ b/tgui/packages/tgui/interfaces/VorePanelExport/constants.ts
@@ -17,6 +17,8 @@ export const ItemModeSpan = {
'Digest (Food Only)':
'Item: Digest (Food Only)',
Digest: 'Item: Digest',
+ 'Digest (Dispersed Damage)':
+ 'Item: Digest (Dispersed Damage)',
};
export const AddonIcon = {
@@ -28,3 +30,33 @@ export const AddonIcon = {
'Jams Sensors': 'bi-wifi-off',
'Complete Absorb': '',
};
+
+export const ReagentAddonIcon = {
+ 'Produce Liquids': '',
+ 'Digestion Liquids': '',
+ 'Absorption Liquids': '',
+ 'Draining Liquids': '',
+};
+
+export const AutotransferFlagIcon = {
+ Creatures: '',
+ Absorbed: '',
+ Carbon: '',
+ Silicon: '',
+ Mobs: '',
+ Animals: '',
+ Mice: '',
+ Dead: '',
+ 'Digestable Creatures': '',
+ 'Absorbable Creatures': '',
+ 'Full Health': '',
+ Items: '',
+ Trash: '',
+ Eggs: '',
+ Remains: '',
+ 'Indigestible Items': '',
+ 'Recyclable Items': '',
+ Ores: '',
+ 'Clothes and Bags': '',
+ Food: '',
+};
diff --git a/tgui/packages/tgui/interfaces/VorePanelExport/index.tsx b/tgui/packages/tgui/interfaces/VorePanelExport/index.tsx
index f9b6336b05..a2bb9b119b 100644
--- a/tgui/packages/tgui/interfaces/VorePanelExport/index.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanelExport/index.tsx
@@ -2,7 +2,7 @@ import { useBackend } from 'tgui/backend';
import { Window } from 'tgui/layouts';
import { Button, Section } from 'tgui-core/components';
-import type { Data } from './types';
+import { Data } from './types';
import { downloadPrefs } from './VorePanelExportDownload';
export const VorePanelExport = () => {
diff --git a/tgui/packages/tgui/interfaces/VorePanelExport/types.ts b/tgui/packages/tgui/interfaces/VorePanelExport/types.ts
index a05c4964d4..cc6da7fff6 100644
--- a/tgui/packages/tgui/interfaces/VorePanelExport/types.ts
+++ b/tgui/packages/tgui/interfaces/VorePanelExport/types.ts
@@ -29,6 +29,7 @@ export type Belly = {
digest_clone: number;
can_taste: BooleanLike;
+ is_feedable: BooleanLike;
contaminates: BooleanLike;
contamination_flavor: string;
contamination_color: string;
@@ -39,8 +40,16 @@ export type Belly = {
emote_active: BooleanLike;
emote_time: number;
shrink_grow_size: number;
+ vorespawn_blacklist: BooleanLike;
+ vorespawn_whitelist: string[];
+ vorespawn_absorbed: number;
egg_type: string;
+ egg_name: string;
selective_preference: string;
+ recycling: BooleanLike;
+ storing_nutrition: BooleanLike;
+ entrance_logs: BooleanLike;
+ item_digest_logs: BooleanLike;
// Messages
struggle_messages_outside: string[];
@@ -68,6 +77,10 @@ export type Belly = {
primary_transfer_messages_prey: string[];
secondary_transfer_messages_owner: string[];
secondary_transfer_messages_prey: string[];
+ primary_autotransfer_messages_owner: string[];
+ primary_autotransfer_messages_prey: string[];
+ secondary_autotransfer_messages_owner: string[];
+ secondary_autotransfer_messages_prey: string[];
digest_chance_messages_owner: string[];
digest_chance_messages_prey: string[];
absorb_chance_messages_owner: string[];
@@ -100,6 +113,30 @@ export type Belly = {
fancy_vore: BooleanLike;
vore_sound: string;
release_sound: string;
+ sound_volume: number;
+ noise_freq: number;
+
+ // Visuals
+ affects_vore_sprites: BooleanLike;
+ count_absorbed_prey_for_sprite: BooleanLike;
+ absorbed_multiplier: number;
+ count_liquid_for_sprite: BooleanLike;
+ liquid_multiplier: number;
+ count_items_for_sprite: BooleanLike;
+ item_multiplier: number;
+ health_impacts_size: BooleanLike;
+ resist_triggers_animation: BooleanLike;
+ size_factor_for_sprite: number;
+ belly_sprite_to_affect: string;
+
+ // Visuals (Belly Fullscreens Preview and Coloring)
+ belly_fullscreen: string;
+ belly_fullscreen_color: string;
+ belly_fullscreen_color2: string;
+ belly_fullscreen_color3: string;
+ belly_fullscreen_color4: string;
+ belly_fullscreen_alpha: number;
+ colorization_enabled: BooleanLike;
// Visuals (Vore FX)
disable_hud: BooleanLike;
@@ -119,4 +156,65 @@ export type Belly = {
absorbchance: number;
digestchance: number;
+ belchchance: number;
+
+ // Interactions (Auto-Transfer)
+ autotransferwait: number;
+ autotransferchance: number;
+ autotransferlocation: string;
+ autotransferextralocation: string[];
+ autotransfer_enabled: BooleanLike;
+ autotransferchance_secondary: number;
+ autotransferlocation_secondary: string;
+ autotransferextralocation_secondary: string[];
+ autotransfer_min_amount: number;
+ autotransfer_max_amount: number;
+ autotransfer_whitelist: string[];
+ autotransfer_blacklist: string[];
+ autotransfer_secondary_whitelist: string[];
+ autotransfer_secondary_blacklist: string[];
+ autotransfer_whitelist_items: string[];
+ autotransfer_blacklist_items: string[];
+ autotransfer_secondary_whitelist_items: string[];
+ autotransfer_secondary_blacklist_items: string[];
+
+ // Liquid Options
+ show_liquids: BooleanLike;
+ reagentbellymode: BooleanLike;
+ reagent_chosen: string;
+ reagent_name: string;
+ reagent_transfer_verb: string;
+ gen_time_display: string;
+ custom_max_volume: number;
+ vorefootsteps_sounds: BooleanLike;
+ reagent_mode_flag_list: string[];
+ liquid_overlay: BooleanLike;
+ max_liquid_level: number;
+ reagent_touches: BooleanLike;
+ mush_overlay: BooleanLike;
+ mush_color: string;
+ mush_alpha: number;
+ max_mush: number;
+ min_mush: number;
+ item_mush_val: number;
+ custom_reagentcolor: string;
+ custom_reagentalpha: number;
+ metabolism_overlay: BooleanLike;
+ metabolism_mush_ratio: number;
+ max_ingested: number;
+ custom_ingested_color: string;
+ custom_ingested_alpha: number;
+
+ // Liquid Messages
+ liquid_fullness1_messages: BooleanLike;
+ liquid_fullness2_messages: BooleanLike;
+ liquid_fullness3_messages: BooleanLike;
+ liquid_fullness4_messages: BooleanLike;
+ liquid_fullness5_messages: BooleanLike;
+
+ fullness1_messages: string[];
+ fullness2_messages: string[];
+ fullness3_messages: string[];
+ fullness4_messages: string[];
+ fullness5_messages: string[];
};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreBellySelectionAndCustomization.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreBellySelectionAndCustomization.tsx
deleted file mode 100644
index f5767dd796..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreBellySelectionAndCustomization.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Box, Divider, Icon, Section, Tabs } from 'tgui-core/components';
-import { Stack } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { digestModeToColor } from './constants';
-import { bellyData, hostMob, selectedData } from './types';
-import { VoreSelectedBelly } from './VoreSelectedBelly';
-
-export const VoreBellySelectionAndCustomization = (props: {
- our_bellies: bellyData[];
- selected: selectedData | null;
- show_pictures: BooleanLike;
- host_mobtype: hostMob;
- icon_overflow: BooleanLike;
- vore_words: Record;
-}) => {
- const { act } = useBackend();
-
- const {
- our_bellies,
- selected,
- show_pictures,
- host_mobtype,
- icon_overflow,
- vore_words,
- } = props;
-
- return (
-
-
-
-
- act('newbelly')}>
- New
-
-
- act('exportpanel')}>
- Export
-
-
- act('importpanel')}>
- Import
-
-
-
- {our_bellies.map((belly) => (
- act('bellypick', { bellypick: belly.ref })}
- >
-
- {belly.name} ({belly.contents})
-
-
- ))}
-
-
-
-
- {selected && (
-
- )}
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreContentsPanel.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreContentsPanel.tsx
deleted file mode 100644
index 298e7dede2..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreContentsPanel.tsx
+++ /dev/null
@@ -1,101 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, Image, LabeledList, Stack } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { stats } from './constants';
-import { contentData } from './types';
-
-export const VoreContentsPanel = (props: {
- contents: contentData[];
- belly?: string;
- outside?: BooleanLike;
- show_pictures: BooleanLike;
- icon_overflow: BooleanLike;
-}) => {
- const { act } = useBackend();
-
- const {
- contents,
- belly,
- outside = false,
- show_pictures,
- icon_overflow,
- } = props;
-
- return (
- <>
- {outside ? (
- act('pick_from_outside', { pickall: true })}
- >
- All
-
- ) : (
- ''
- )}
- {(show_pictures && !icon_overflow && (
-
- {contents.map((thing) => (
-
-
- act(
- thing.outside ? 'pick_from_outside' : 'pick_from_inside',
- {
- pick: thing.ref,
- belly: belly,
- },
- )
- }
- >
-
-
- {thing.name}
-
- ))}
-
- )) || (
-
- {contents.map((thing, i) => (
-
-
- act(
- thing.outside ? 'pick_from_outside' : 'pick_from_inside',
- {
- pick: thing.ref,
- belly: belly,
- },
- )
- }
- >
- Interact
-
-
- ))}
-
- )}
- >
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreInsidePanel.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreInsidePanel.tsx
deleted file mode 100644
index 59873151a1..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreInsidePanel.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { Box, Collapsible, Section } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { digestModeToPreyMode, reagentToColor } from './constants';
-import { digestModeToColor } from './constants';
-import { insideData } from './types';
-import { VoreContentsPanel } from './VoreContentsPanel';
-
-export const VoreInsidePanel = (props: {
- inside: insideData;
- show_pictures: BooleanLike;
- icon_overflow: BooleanLike;
-}) => {
- const { inside, show_pictures, icon_overflow } = props;
-
- const {
- absorbed,
- belly_name,
- belly_mode,
- desc,
- pred,
- contents,
- ref,
- liq_lvl,
- liq_reagent_type,
- liuq_name,
- } = inside;
-
- if (!belly_name) {
- return You aren't inside anyone.;
- }
-
- return (
-
-
- You are currently {absorbed ? 'absorbed into' : 'inside'}
-
-
-
- {pred}'s
-
-
-
- {belly_name}
-
- {liq_lvl! > 0 ? (
- <>
- ,
-
- bathing in a pool of
-
-
-
- {liuq_name}
-
- >
- ) : (
- ''
- )}
-
-
- and you are
-
-
-
- {digestModeToPreyMode[belly_mode!]}
-
-
- {desc}
- {(contents!.length && (
-
-
-
- )) ||
- 'There is nothing else around you.'}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBelly.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBelly.tsx
deleted file mode 100644
index 1a0ff42256..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBelly.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { useState } from 'react';
-import { Tabs } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { hostMob, selectedData } from './types';
-import { VoreContentsPanel } from './VoreContentsPanel';
-import { VoreSelectedBellyControls } from './VoreSelectedBellyTabs/VoreSelectedBellyControls';
-import { VoreSelectedBellyDescriptions } from './VoreSelectedBellyTabs/VoreSelectedBellyDescriptions';
-import { VoreSelectedBellyInteractions } from './VoreSelectedBellyTabs/VoreSelectedBellyInteractions';
-import { VoreSelectedBellyLiquidMessages } from './VoreSelectedBellyTabs/VoreSelectedBellyLiquidMessages';
-import { VoreSelectedBellyLiquidOptions } from './VoreSelectedBellyTabs/VoreSelectedBellyLiquidOptions';
-import { VoreSelectedBellyOptions } from './VoreSelectedBellyTabs/VoreSelectedBellyOptions';
-import { VoreSelectedBellySounds } from './VoreSelectedBellyTabs/VoreSelectedBellySounds';
-import { VoreSelectedBellyVisuals } from './VoreSelectedBellyTabs/VoreSelectedBellyVisuals';
-/**
- * Subtemplate of VoreBellySelectionAndCustomization
- */
-export const VoreSelectedBelly = (props: {
- belly: selectedData;
- show_pictures: BooleanLike;
- host_mobtype: hostMob;
- icon_overflow: BooleanLike;
- vore_words: Record;
-}) => {
- const { belly, show_pictures, host_mobtype, icon_overflow, vore_words } =
- props;
- const { contents } = belly;
-
- const [tabIndex, setTabIndex] = useState(0);
-
- const tabs: React.JSX.Element[] = [];
-
- tabs[0] = ;
- tabs[1] = (
-
- );
- tabs[2] = (
-
- );
- tabs[3] = ;
- tabs[4] = ;
- tabs[5] = ;
- tabs[6] = (
-
- );
- tabs[7] = ;
- tabs[8] = ;
-
- return (
- <>
-
- setTabIndex(0)}>
- Controls
-
- setTabIndex(1)}>
- Descriptions
-
- setTabIndex(2)}>
- Options
-
- setTabIndex(3)}>
- Sounds
-
- setTabIndex(4)}>
- Visuals
-
- setTabIndex(5)}>
- Interactions
-
- setTabIndex(6)}>
- Contents ({contents.length})
-
- setTabIndex(7)}>
- Liquid Options
-
- setTabIndex(8)}>
- Liquid Messages
-
-
- {tabs[tabIndex] || 'Error'}
- >
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode.tsx
deleted file mode 100644
index 071caca279..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-export const VoreSelectedBellyDescriptionsBellymode = (props: {
- message_mode: BooleanLike;
- mode: string;
-}) => {
- const { act } = useBackend();
-
- const { message_mode, mode } = props;
-
- return (
-
- {(message_mode || mode === 'Digest' || mode === 'Selective') && (
- <>
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'dmp' })
- }
- >
- Digest Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'dmo' })
- }
- >
- Digest Message (to you)
-
- >
- )}
- {(message_mode || mode === 'Absorb' || mode === 'Selective') && (
- <>
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'amp' })
- }
- >
- Absorb Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'amo' })
- }
- >
- Absorb Message (to you)
-
- >
- )}
- {(message_mode || mode === 'Unabsorb') && (
- <>
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'uamp' })
- }
- >
- Unabsorb Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'uamo' })
- }
- >
- Unabsorb Message (to you)
-
- >
- )}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape.tsx
deleted file mode 100644
index d44d9a4c0b..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape.tsx
+++ /dev/null
@@ -1,167 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { interactData } from '../types';
-
-export const VoreSelectedBellyDescriptionsEscape = (props: {
- message_mode: BooleanLike;
- interacts: interactData;
-}) => {
- const { act } = useBackend();
-
- const { message_mode, interacts } = props;
-
- return (
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'escap' })
- }
- >
- Escape Attempt Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'escao' })
- }
- >
- Escape Attempt Message (to you)
-
- {(message_mode || interacts.escapechance > 0) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'escp',
- })
- }
- >
- Escape Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'esco',
- })
- }
- >
- Escape Message (to you)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'escout',
- })
- }
- >
- Escape Message (outside)
-
- >
- )}
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'escip' })
- }
- >
- Escape Item Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'escio' })
- }
- >
- Escape Item Message (to you)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'esciout',
- })
- }
- >
- Escape Item Message (outside)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'escfp' })
- }
- >
- Escape Fail Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'escfo' })
- }
- >
- Escape Fail Message (to you)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'aescap' })
- }
- >
- Absorbed Escape Attempt Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'aescao' })
- }
- >
- Absorbed Escape Attempt Message (to you)
-
- {(message_mode || interacts.escapechance_absorbed > 0) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'aescp',
- })
- }
- >
- Absorbed Escape Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'aesco',
- })
- }
- >
- Absorbed Escape Message (to you)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'aescout',
- })
- }
- >
- Absorbed Escape Message (outside)
-
- >
- )}
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'aescfp' })
- }
- >
- Absorbed Escape Fail Message (to prey)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'aescfo' })
- }
- >
- Absorbed Escape Fail Message (to you)
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle.tsx
deleted file mode 100644
index 1d9fe4dd3f..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-export const VoreSelectedBellyDescriptionsIdle = (props: {
- message_mode: BooleanLike;
- mode: string;
-}) => {
- const { act } = useBackend();
-
- const { message_mode, mode } = props;
-
- return (
-
- {(message_mode || mode === 'Hold' || mode === 'Selective') && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'im_hold',
- })
- }
- >
- Idle Messages (Hold)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'im_holdabsorbed',
- })
- }
- >
- Idle Messages (Hold Absorbed)
-
- >
- )}
- {(message_mode || mode === 'Digest' || mode === 'Selective') && (
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'im_digest',
- })
- }
- >
- Idle Messages (Digest)
-
- )}
- {(message_mode || mode === 'Absorb' || mode === 'Selective') && (
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'im_absorb',
- })
- }
- >
- Idle Messages (Absorb)
-
- )}
- {(message_mode || mode === 'Unabsorb') && (
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'im_unabsorb',
- })
- }
- >
- Idle Messages (Unabsorb)
-
- )}
- {(message_mode || mode === 'Drain' || mode === 'Selective') && (
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'im_drain' })
- }
- >
- Idle Messages (Drain)
-
- )}
- {(message_mode || mode === 'Heal') && (
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'im_heal' })
- }
- >
- Idle Messages (Heal)
-
- )}
- {(message_mode || mode === 'Size Steal') && (
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'im_steal' })
- }
- >
- Idle Messages (Size Steal)
-
- )}
- {(message_mode || mode === 'Shrink') && (
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'im_shrink',
- })
- }
- >
- Idle Messages (Shrink)
-
- )}
- {(message_mode || mode === 'Grow') && (
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'im_grow' })
- }
- >
- Idle Messages (Grow)
-
- )}
- {(message_mode || mode === 'Encase In Egg') && (
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'im_egg' })
- }
- >
- Idle Messages (Encase In Egg)
-
- )}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance.tsx
deleted file mode 100644
index d151c6d8fd..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { interactData } from '../types';
-
-export const VoreSelectedBellyDescriptionsInteractionChance = (props: {
- message_mode: BooleanLike;
- interacts: interactData;
-}) => {
- const { act } = useBackend();
-
- const { message_mode, interacts } = props;
-
- return (
-
- {(message_mode || interacts.digestchance > 0) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'stmodp',
- })
- }
- >
- Interaction Chance Digest Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'stmodo',
- })
- }
- >
- Interaction Chance Digest Message (to you)
-
- >
- )}
- {(message_mode || interacts.absorbchance > 0) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'stmoap',
- })
- }
- >
- Interaction Chance Absorb Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'stmoao',
- })
- }
- >
- Interaction Chance Absorb Message (to you)
-
- >
- )}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsStruggle.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsStruggle.tsx
deleted file mode 100644
index c7b55fe42e..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsStruggle.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList } from 'tgui-core/components';
-
-export const VoreSelectedBellyDescriptionsStruggle = (props) => {
- const { act } = useBackend();
-
- return (
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'smo' })
- }
- >
- Struggle Message (outside)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'smi' })
- }
- >
- Struggle Message (inside)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'asmo' })
- }
- >
- Absorbed Struggle Message (outside)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'asmi' })
- }
- >
- Absorbed Struggle Message (inside)
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer.tsx
deleted file mode 100644
index 448e88b12d..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer.tsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { autotransferData, interactData } from '../types';
-
-export const VoreSelectedBellyDescriptionsTransfer = (props: {
- message_mode: BooleanLike;
- interacts: interactData;
- autotransfer: autotransferData;
-}) => {
- const { act } = useBackend();
-
- const { message_mode, interacts, autotransfer } = props;
-
- return (
-
- {(message_mode || !!interacts.transferlocation) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'trnspp',
- })
- }
- >
- Primary Transfer Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'trnspo',
- })
- }
- >
- Primary Transfer Message (to you)
-
- >
- )}
- {(message_mode || !!interacts.transferlocation_secondary) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'trnssp',
- })
- }
- >
- Secondary Transfer Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'trnsso',
- })
- }
- >
- Secondary Transfer Message (to you)
-
- >
- )}
- {(message_mode || !!autotransfer.autotransferlocation) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'atrnspp',
- })
- }
- >
- Primary Auto-Transfer Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'atrnspo',
- })
- }
- >
- Primary Auto-Transfer Message (to you)
-
- >
- )}
- {(message_mode || !!autotransfer.autotransferlocation_secondary) && (
- <>
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'atrnssp',
- })
- }
- >
- Secondary Auto-Transfer Message (to prey)
-
-
- act('set_attribute', {
- attribute: 'b_msgs',
- msgtype: 'atrnsso',
- })
- }
- >
- Secondary Auto-Transfer Message (to you)
-
- >
- )}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyControls.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyControls.tsx
deleted file mode 100644
index b4c2ae014f..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyControls.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList } from 'tgui-core/components';
-
-import { digestModeToColor } from '../constants';
-import { selectedData } from '../types';
-
-export const VoreSelectedBellyControls = (props: { belly: selectedData }) => {
- const { act } = useBackend();
-
- const { belly } = props;
- const { belly_name, mode, item_mode, addons } = belly;
-
- return (
-
-
- act('move_belly', { dir: -1 })}
- />
- act('move_belly', { dir: 1 })}
- />
- >
- }
- >
- act('set_attribute', { attribute: 'b_name' })}>
- {belly_name}
-
-
-
- act('set_attribute', { attribute: 'b_mode' })}
- >
- {mode}
-
-
-
- {(addons.length && addons.join(', ')) || 'None'}
- act('set_attribute', { attribute: 'b_addons' })}
- ml={1}
- icon="plus"
- />
-
-
- act('set_attribute', { attribute: 'b_item_mode' })}
- >
- {item_mode}
-
-
-
- act('set_attribute', { attribute: 'b_del' })}
- >
- Delete Belly
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx
deleted file mode 100644
index 03b084750f..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyDescriptions.tsx
+++ /dev/null
@@ -1,270 +0,0 @@
-import { ReactNode, useEffect, useState } from 'react';
-import { useBackend } from 'tgui/backend';
-import {
- Box,
- Button,
- Dimmer,
- LabeledList,
- Section,
-} from 'tgui-core/components';
-
-import { SYNTAX_COLOR, SYNTAX_REGEX } from '../constants';
-import { selectedData } from '../types';
-import { VoreSelectedBellyDescriptionsBellymode } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsBellymode';
-import { VoreSelectedBellyDescriptionsEscape } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsEscape';
-import { VoreSelectedBellyDescriptionsIdle } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsIdle';
-import { VoreSelectedBellyDescriptionsInteractionChance } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsInteractionChance';
-import { VoreSelectedBellyDescriptionsStruggle } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsStruggle';
-import { VoreSelectedBellyDescriptionsTransfer } from '../VoreSelectedBellyDescriptionTexts/VoreSelectedBellyDescriptionsTransfer';
-
-const DescriptionSyntaxHighlighting = (props: { desc: string }) => {
- const { desc } = props;
- const [htmlDesc, setHtmlDesc] = useState([]);
-
- useEffect(() => {
- if (!desc || desc.length === 0) {
- setHtmlDesc([]);
- return;
- }
-
- let elements: ReactNode[] = [];
-
- const regexCopy = new RegExp(SYNTAX_REGEX);
-
- let lastIndex = 0;
- let result;
- while ((result = regexCopy.exec(desc)) !== null) {
- elements.push(<>{desc.substring(lastIndex, result.index)}>);
- elements.push(
-
- {result[0]}
- ,
- );
- lastIndex = result.index + result[0].length;
- }
-
- elements.push(<>{desc.substring(lastIndex)}>);
-
- setHtmlDesc(elements);
- }, [desc]);
-
- return {htmlDesc};
-};
-
-export const VoreSelectedBellyDescriptions = (props: {
- belly: selectedData;
- vore_words: Record;
-}) => {
- const { act } = useBackend();
- const [showFormatHelp, setShowFormatHelp] = useState(false);
-
- const { belly, vore_words } = props;
- const {
- verb,
- release_verb,
- desc,
- absorbed_desc,
- mode,
- message_mode,
- escapable,
- interacts,
- autotransfer_enabled,
- autotransfer,
- emote_active,
- } = belly;
-
- return (
-
- {showFormatHelp && (
-
- setShowFormatHelp(false)}
- />
- }
- scrollable
- backgroundColor="black"
- >
-
- Belly Name
- Pred Name
- Prey Name
-
- Number of prey alive, absorbed, and ghosts.
-
-
- Number of prey absorbed.
-
-
- Number of prey alive or absorbed, depending on whether prey is
- absorbed.
-
-
- Number of prey ghosts.
-
-
- Number of prey and items, minus ghosts.
-
-
- Number of prey digested in this belly.
-
-
- Only used in resist messages - item the prey is using to escape.
-
-
- Only used in transfer messages - belly prey is going to.
-
- {Object.entries(vore_words).map(([word, options]) => (
-
- Replaces self with one of these options: {options.join(', ')}
-
- ))}
-
-
-
- )}
-
- Description:{' '}
- act('set_attribute', { attribute: 'b_desc' })}
- >
- Edit
-
- setShowFormatHelp(!showFormatHelp)}
- selected={showFormatHelp}
- />
-
-
-
- Description (Absorbed):{' '}
- act('set_attribute', { attribute: 'b_absorbed_desc' })}
- >
- Edit
-
-
-
-
-
-
- act('set_attribute', { attribute: 'b_verb' })}>
- {verb}
-
-
-
-
- act('set_attribute', { attribute: 'b_release_verb' })
- }
- >
- {release_verb}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_message_mode',
- })
- }
- icon={message_mode ? 'toggle-on' : 'toggle-off'}
- selected={message_mode}
- >
- {message_mode ? 'True' : 'False'}
-
-
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'em' })
- }
- >
- Examine Message (when full)
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'ema' })
- }
- >
- Examine Message (with absorbed victims)
-
-
- {message_mode || escapable ? (
- <>
-
-
- >
- ) : (
- ''
- )}
- {message_mode ||
- (escapable &&
- (!!interacts.transferlocation ||
- !!interacts.transferlocation_secondary)) ||
- (autotransfer_enabled &&
- (!!autotransfer.autotransferlocation ||
- !!autotransfer.autotransferlocation_secondary)) ? (
-
- ) : (
- ''
- )}
- {message_mode ||
- (escapable &&
- (interacts.digestchance > 0 || interacts.absorbchance > 0)) ? (
-
- ) : (
- ''
- )}
- {(message_mode ||
- mode === 'Digest' ||
- mode === 'Selective' ||
- mode === 'Absorb' ||
- mode === 'Unabsorb') && (
-
- )}
- {emote_active ? (
-
- ) : (
- ''
- )}
-
-
- act('set_attribute', { attribute: 'b_msgs', msgtype: 'reset' })
- }
- >
- Reset Messages
-
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx
deleted file mode 100644
index 3452db5d59..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyInteractions.tsx
+++ /dev/null
@@ -1,381 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList, Section } from 'tgui-core/components';
-
-import { selectedData } from '../types';
-
-export const VoreSelectedBellyInteractions = (props: {
- belly: selectedData;
-}) => {
- const { act } = useBackend();
-
- const { belly } = props;
- const { escapable, interacts, autotransfer_enabled, autotransfer } = belly;
-
- return (
- act('set_attribute', { attribute: 'b_escapable' })}
- icon={escapable ? 'toggle-on' : 'toggle-off'}
- selected={escapable}
- >
- {escapable ? 'Interactions On' : 'Interactions Off'}
-
- }
- >
- {escapable ? (
-
-
-
- act('set_attribute', { attribute: 'b_escapechance' })
- }
- >
- {interacts.escapechance + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_escapechance_absorbed' })
- }
- >
- {interacts.escapechance_absorbed + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_escapetime' })
- }
- >
- {interacts.escapetime / 10 + 's'}
-
-
-
-
-
- act('set_attribute', { attribute: 'b_transferchance' })
- }
- >
- {interacts.transferchance + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_transferlocation' })
- }
- >
- {interacts.transferlocation
- ? interacts.transferlocation
- : 'Disabled'}
-
-
-
-
-
- act('set_attribute', {
- attribute: 'b_transferchance_secondary',
- })
- }
- >
- {interacts.transferchance_secondary + '%'}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_transferlocation_secondary',
- })
- }
- >
- {interacts.transferlocation_secondary
- ? interacts.transferlocation_secondary
- : 'Disabled'}
-
-
-
-
-
- act('set_attribute', { attribute: 'b_absorbchance' })
- }
- >
- {interacts.absorbchance + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_digestchance' })
- }
- >
- {interacts.digestchance + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_belchchance' })
- }
- >
- {interacts.belchchance + '%'}
-
-
-
-
- ) : (
- 'These options only display while interactions are turned on.'
- )}
-
- act('set_attribute', { attribute: 'b_autotransfer_enabled' })
- }
- icon={autotransfer_enabled ? 'toggle-on' : 'toggle-off'}
- selected={autotransfer_enabled}
- >
- {autotransfer_enabled
- ? 'Auto-Transfer Enabled'
- : 'Auto-Transfer Disabled'}
-
- }
- >
- {autotransfer_enabled ? (
-
-
-
- act('set_attribute', { attribute: 'b_autotransferwait' })
- }
- >
- {autotransfer.autotransferwait / 10 + 's'}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_autotransfer_min_amount',
- })
- }
- >
- {autotransfer.autotransfer_min_amount}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_autotransfer_max_amount',
- })
- }
- >
- {autotransfer.autotransfer_max_amount}
-
-
-
-
-
- act('set_attribute', { attribute: 'b_autotransferchance' })
- }
- >
- {autotransfer.autotransferchance + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_autotransferlocation' })
- }
- >
- {autotransfer.autotransferlocation
- ? autotransfer.autotransferlocation
- : 'Disabled'}
-
-
-
- {(autotransfer.autotransferextralocation &&
- autotransfer.autotransferextralocation.join(', ')) ||
- ''}
-
- act('set_attribute', {
- attribute: 'b_autotransferextralocation',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_whitelist.length &&
- autotransfer.autotransfer_whitelist.join(', ')) ||
- 'Everything'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_whitelist',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_whitelist_items.length &&
- autotransfer.autotransfer_whitelist_items.join(', ')) ||
- 'Everything'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_whitelist_items',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_blacklist.length &&
- autotransfer.autotransfer_blacklist.join(', ')) ||
- 'Nothing'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_blacklist',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_blacklist_items.length &&
- autotransfer.autotransfer_blacklist_items.join(', ')) ||
- 'Nothing'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_blacklist_items',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
-
-
- act('set_attribute', {
- attribute: 'b_autotransferchance_secondary',
- })
- }
- >
- {autotransfer.autotransferchance_secondary + '%'}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_autotransferlocation_secondary',
- })
- }
- >
- {autotransfer.autotransferlocation_secondary
- ? autotransfer.autotransferlocation_secondary
- : 'Disabled'}
-
-
-
- {(autotransfer.autotransferextralocation_secondary &&
- autotransfer.autotransferextralocation_secondary.join(', ')) ||
- ''}
-
- act('set_attribute', {
- attribute: 'b_autotransferextralocation_secondary',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_secondary_whitelist.length &&
- autotransfer.autotransfer_secondary_whitelist.join(', ')) ||
- 'Everything'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_secondary_whitelist',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_secondary_whitelist_items.length &&
- autotransfer.autotransfer_secondary_whitelist_items.join(
- ', ',
- )) ||
- 'Everything'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_secondary_whitelist_items',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_secondary_blacklist.length &&
- autotransfer.autotransfer_secondary_blacklist.join(', ')) ||
- 'Nothing'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_secondary_blacklist',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- {(autotransfer.autotransfer_secondary_blacklist_items.length &&
- autotransfer.autotransfer_secondary_blacklist_items.join(
- ', ',
- )) ||
- 'Nothing'}
-
- act('set_attribute', {
- attribute: 'b_autotransfer_secondary_blacklist_items',
- })
- }
- ml={1}
- icon="plus"
- />
-
-
- ) : (
- 'These options only display while Auto-Transfer is enabled.'
- )}
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx
deleted file mode 100644
index bd781e0eed..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyOptions.tsx
+++ /dev/null
@@ -1,371 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList, Stack } from 'tgui-core/components';
-import { capitalize } from 'tgui-core/string';
-
-import { vorespawnAbsorbedColor, vorespawnAbsorbedText } from '../constants';
-import { hostMob, selectedData } from '../types';
-import { VoreSelectedMobTypeBellyButtons } from './VoreSelectedMobTypeBellyButtons';
-
-export const VoreSelectedBellyOptions = (props: {
- belly: selectedData;
- host_mobtype: hostMob;
-}) => {
- const { act } = useBackend();
-
- const { belly, host_mobtype } = props;
- const {
- can_taste,
- is_feedable,
- nutrition_percent,
- digest_brute,
- digest_burn,
- digest_oxy,
- digest_tox,
- digest_clone,
- bulge_size,
- display_absorbed_examine,
- shrink_grow_size,
- emote_time,
- emote_active,
- contaminates,
- contaminate_flavor,
- contaminate_color,
- egg_type,
- egg_name,
- egg_size,
- recycling,
- storing_nutrition,
- entrance_logs,
- item_digest_logs,
- selective_preference,
- save_digest_mode,
- eating_privacy_local,
- vorespawn_blacklist,
- vorespawn_whitelist,
- vorespawn_absorbed,
- private_struggle,
- drainmode,
- } = belly;
-
- return (
-
-
-
-
- act('set_attribute', { attribute: 'b_tastes' })}
- icon={can_taste ? 'toggle-on' : 'toggle-off'}
- selected={can_taste}
- >
- {can_taste ? 'Yes' : 'No'}
-
-
-
- act('set_attribute', { attribute: 'b_feedable' })}
- icon={is_feedable ? 'toggle-on' : 'toggle-off'}
- selected={is_feedable}
- >
- {is_feedable ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', { attribute: 'b_contaminates' })
- }
- icon={contaminates ? 'toggle-on' : 'toggle-off'}
- selected={contaminates}
- >
- {contaminates ? 'Yes' : 'No'}
-
-
- {contaminates ? (
- <>
-
-
- act('set_attribute', {
- attribute: 'b_contamination_flavor',
- })
- }
- icon="pen"
- >
- {contaminate_flavor}
-
-
-
-
- act('set_attribute', { attribute: 'b_contamination_color' })
- }
- icon="pen"
- >
- {!!contaminate_color && capitalize(contaminate_color)}
-
-
- >
- ) : (
- ''
- )}
-
-
- act('set_attribute', { attribute: 'b_nutritionpercent' })
- }
- >
- {nutrition_percent + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_bulge_size' })
- }
- >
- {bulge_size * 100 + '%'}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_display_absorbed_examine',
- })
- }
- icon={display_absorbed_examine ? 'toggle-on' : 'toggle-off'}
- selected={display_absorbed_examine}
- >
- {display_absorbed_examine ? 'True' : 'False'}
-
-
-
-
- act('set_attribute', { attribute: 'b_eating_privacy' })
- }
- >
- {capitalize(eating_privacy_local)}
-
-
-
-
- act('set_attribute', { attribute: 'b_private_struggle' })
- }
- icon={private_struggle ? 'toggle-on' : 'toggle-off'}
- selected={private_struggle}
- >
- {private_struggle ? 'Private' : 'Loud'}
-
-
-
-
-
- act('set_attribute', { attribute: 'b_save_digest_mode' })
- }
- icon={save_digest_mode ? 'toggle-on' : 'toggle-off'}
- selected={save_digest_mode}
- >
- {save_digest_mode ? 'True' : 'False'}
-
-
-
-
-
-
-
-
-
- act('set_attribute', { attribute: 'b_emoteactive' })
- }
- icon={emote_active ? 'toggle-on' : 'toggle-off'}
- selected={emote_active}
- >
- {emote_active ? 'Active' : 'Inactive'}
-
-
-
- act('set_attribute', { attribute: 'b_emotetime' })}
- >
- {emote_time + ' seconds'}
-
-
-
- act('set_attribute', { attribute: 'b_brute_dmg' })}
- >
- {digest_brute}
-
-
-
- act('set_attribute', { attribute: 'b_burn_dmg' })}
- >
- {digest_burn}
-
-
-
- act('set_attribute', { attribute: 'b_oxy_dmg' })}
- >
- {digest_oxy}
-
-
-
- act('set_attribute', { attribute: 'b_tox_dmg' })}
- >
- {digest_tox}
-
-
-
- act('set_attribute', { attribute: 'b_clone_dmg' })}
- >
- {digest_clone}
-
-
-
- act('set_attribute', { attribute: 'b_drainmode' })}
- >
- {drainmode}
-
-
-
-
- act('set_attribute', { attribute: 'b_grow_shrink' })
- }
- >
- {shrink_grow_size * 100 + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_vorespawn_blacklist' })
- }
- icon={vorespawn_blacklist ? 'toggle-on' : 'toggle-off'}
- selected={vorespawn_blacklist}
- >
- {vorespawn_blacklist ? 'Yes' : 'No'}
-
-
- {vorespawn_blacklist ? (
- ''
- ) : (
- <>
-
-
- act('set_attribute', { attribute: 'b_vorespawn_whitelist' })
- }
- icon="pen"
- >
- {vorespawn_whitelist.length
- ? vorespawn_whitelist.join(', ')
- : 'Anyone!'}
-
-
-
-
- act('set_attribute', { attribute: 'b_vorespawn_absorbed' })
- }
- >
- {vorespawnAbsorbedText[vorespawn_absorbed]}
-
-
- >
- )}
-
- act('set_attribute', { attribute: 'b_egg_type' })}
- icon="pen"
- >
- {capitalize(egg_type)}
-
-
-
- act('set_attribute', { attribute: 'b_egg_name' })}
- icon="pen"
- >
- {egg_name ? egg_name : 'Default'}
-
-
-
- act('set_attribute', { attribute: 'b_egg_size' })}
- >
- {egg_size ? egg_size * 100 + '%' : 'Automatic'}
-
-
-
- act('set_attribute', { attribute: 'b_recycling' })}
- icon={recycling ? 'toggle-on' : 'toggle-off'}
- selected={recycling}
- >
- {recycling ? 'Enabled' : 'Disabled'}
-
-
-
-
- act('set_attribute', { attribute: 'b_storing_nutrition' })
- }
- icon={storing_nutrition ? 'toggle-on' : 'toggle-off'}
- selected={storing_nutrition}
- >
- {storing_nutrition ? 'Storing' : 'Absorbing'}
-
-
-
-
- act('set_attribute', { attribute: 'b_entrance_logs' })
- }
- icon={entrance_logs ? 'toggle-on' : 'toggle-off'}
- selected={entrance_logs}
- >
- {entrance_logs ? 'Enabled' : 'Disabled'}
-
-
-
-
- act('set_attribute', { attribute: 'b_item_digest_logs' })
- }
- icon={item_digest_logs ? 'toggle-on' : 'toggle-off'}
- selected={item_digest_logs}
- >
- {item_digest_logs ? 'Enabled' : 'Disabled'}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_selective_mode_pref_toggle',
- })
- }
- >
- {capitalize(selective_preference)}
-
-
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellySounds.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellySounds.tsx
deleted file mode 100644
index 4820672f80..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellySounds.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList, Stack } from 'tgui-core/components';
-
-import { selectedData } from '../types';
-
-export const VoreSelectedBellySounds = (props: { belly: selectedData }) => {
- const { act } = useBackend();
-
- const { belly } = props;
- const {
- is_wet,
- wet_loop,
- fancy,
- sound,
- release_sound,
- sound_volume,
- noise_freq,
- } = belly;
-
- return (
-
-
-
-
- act('set_attribute', { attribute: 'b_wetness' })}
- icon={is_wet ? 'toggle-on' : 'toggle-off'}
- selected={is_wet}
- >
- {is_wet ? 'Yes' : 'No'}
-
-
-
- act('set_attribute', { attribute: 'b_wetloop' })}
- icon={wet_loop ? 'toggle-on' : 'toggle-off'}
- selected={wet_loop}
- >
- {wet_loop ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', { attribute: 'b_fancy_sound' })
- }
- icon={fancy ? 'toggle-on' : 'toggle-off'}
- selected={fancy}
- >
- {fancy ? 'Yes' : 'No'}
-
-
-
- act('set_attribute', { attribute: 'b_sound' })}
- >
- {sound}
-
- act('set_attribute', { attribute: 'b_soundtest' })}
- icon="volume-up"
- />
-
-
- act('set_attribute', { attribute: 'b_release' })}
- >
- {release_sound}
-
-
- act('set_attribute', { attribute: 'b_releasesoundtest' })
- }
- icon="volume-up"
- />
-
-
-
- act('set_attribute', { attribute: 'b_sound_volume' })
- }
- >
- {sound_volume + '%'}
-
-
-
-
- act('set_attribute', { attribute: 'b_noise_freq' })
- }
- >
- {noise_freq}
-
-
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx
deleted file mode 100644
index 9639caf891..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedBellyVisuals.tsx
+++ /dev/null
@@ -1,366 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Box, Button, LabeledList, Section, Stack } from 'tgui-core/components';
-import { classes } from 'tgui-core/react';
-
-import { FeatureColorInput } from '../FeatureColorInput';
-import { selectedData } from '../types';
-
-export const VoreSelectedBellyVisuals = (props: { belly: selectedData }) => {
- const { act } = useBackend();
-
- const { belly } = props;
- const {
- belly_fullscreen,
- belly_fullscreen_color,
- belly_fullscreen_color2,
- belly_fullscreen_color3,
- belly_fullscreen_color4,
- colorization_enabled,
- possible_fullscreens,
- disable_hud,
- vore_sprite_flags,
- affects_voresprite,
- absorbed_voresprite,
- absorbed_multiplier,
- liquid_voresprite,
- liquid_multiplier,
- item_voresprite,
- item_multiplier,
- health_voresprite,
- resist_animation,
- voresprite_size_factor,
- belly_sprite_option_shown,
- belly_sprite_to_affect,
- undergarment_chosen,
- undergarment_if_none,
- undergarment_color,
- tail_option_shown,
- tail_to_change_to,
- } = belly;
-
- return (
- <>
-
-
-
-
-
- act('set_attribute', { attribute: 'b_affects_vore_sprites' })
- }
- icon={affects_voresprite ? 'toggle-on' : 'toggle-off'}
- selected={affects_voresprite}
- >
- {affects_voresprite ? 'Yes' : 'No'}
-
-
- {affects_voresprite ? (
- <>
-
- {(vore_sprite_flags.length && vore_sprite_flags.join(', ')) ||
- 'None'}
-
- act('set_attribute', { attribute: 'b_vore_sprite_flags' })
- }
- ml={1}
- icon="plus"
- />
-
-
-
- act('set_attribute', {
- attribute: 'b_count_absorbed_prey_for_sprites',
- })
- }
- icon={absorbed_voresprite ? 'toggle-on' : 'toggle-off'}
- selected={absorbed_voresprite}
- >
- {absorbed_voresprite ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_absorbed_multiplier',
- })
- }
- >
- {absorbed_multiplier}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_count_liquid_for_sprites',
- })
- }
- icon={liquid_voresprite ? 'toggle-on' : 'toggle-off'}
- selected={liquid_voresprite}
- >
- {liquid_voresprite ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', { attribute: 'b_liquid_multiplier' })
- }
- >
- {liquid_multiplier}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_count_items_for_sprites',
- })
- }
- icon={item_voresprite ? 'toggle-on' : 'toggle-off'}
- selected={item_voresprite}
- >
- {item_voresprite ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', { attribute: 'b_item_multiplier' })
- }
- >
- {item_multiplier}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_health_impacts_size',
- })
- }
- icon={health_voresprite ? 'toggle-on' : 'toggle-off'}
- selected={health_voresprite}
- >
- {health_voresprite ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', { attribute: 'b_resist_animation' })
- }
- icon={resist_animation ? 'toggle-on' : 'toggle-off'}
- selected={resist_animation}
- >
- {resist_animation ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_size_factor_sprites',
- })
- }
- >
- {voresprite_size_factor}
-
-
- {belly_sprite_option_shown ? (
-
-
- act('set_attribute', {
- attribute: 'b_belly_sprite_to_affect',
- })
- }
- >
- {belly_sprite_to_affect}
-
-
- ) : (
-
- You do not have any bellysprites.
-
- )}
- {tail_option_shown &&
- vore_sprite_flags.includes('Undergarment addition') ? (
- <>
-
-
- act('set_attribute', {
- attribute: 'b_undergarment_choice',
- })
- }
- >
- {undergarment_chosen}
-
-
-
-
- act('set_attribute', {
- attribute: 'b_undergarment_if_none',
- })
- }
- >
- {undergarment_if_none}
-
-
-
- >
- ) : (
- ''
- )}
- {tail_option_shown &&
- vore_sprite_flags.includes('Tail adjustment') ? (
-
-
- act('set_attribute', {
- attribute: 'b_tail_to_change_to',
- })
- }
- >
- {tail_to_change_to}
-
-
- ) : (
- ''
- )}
- >
- ) : (
- ''
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- act('set_attribute', { attribute: 'b_colorization_enabled' })
- }
- icon={colorization_enabled ? 'toggle-on' : 'toggle-off'}
- selected={colorization_enabled}
- >
- {colorization_enabled ? 'Yes' : 'No'}
-
-
-
-
- act('set_attribute', { attribute: 'b_preview_belly' })
- }
- >
- Preview
-
-
-
-
- act('set_attribute', { attribute: 'b_clear_preview' })
- }
- >
- Clear
-
-
-
-
-
-
-
-
-
-
- act('set_attribute', { attribute: 'b_disable_hud' })
- }
- icon={disable_hud ? 'toggle-on' : 'toggle-off'}
- selected={disable_hud}
- >
- {disable_hud ? 'Yes' : 'No'}
-
-
-
-
-
- Belly styles:
-
- act('set_attribute', { attribute: 'b_fullscreen', val: null })
- }
- >
- Disabled
-
- {Object.keys(possible_fullscreens).map((key, index) => (
-
-
- act('set_attribute', { attribute: 'b_fullscreen', val: key })
- }
- >
-
-
-
- ))}
-
-
- >
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedMobTypeBellyButtons.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedMobTypeBellyButtons.tsx
deleted file mode 100644
index a32394ed99..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreSelectedBellyTabs/VoreSelectedMobTypeBellyButtons.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, LabeledList, Section } from 'tgui-core/components';
-import { capitalize } from 'tgui-core/string';
-
-import { hostMob, selectedData } from '../types';
-
-export const VoreSelectedMobTypeBellyButtons = (props: {
- belly: selectedData;
- host_mobtype: hostMob;
-}) => {
- const { act } = useBackend();
- const { belly, host_mobtype } = props;
- const {
- silicon_belly_overlay_preference,
- belly_sprite_option_shown,
- belly_sprite_to_affect,
- } = belly;
-
- const { is_cyborg, is_vore_simple_mob } = host_mobtype;
-
- if (is_cyborg) {
- if (belly_sprite_option_shown && belly_sprite_to_affect === 'sleeper') {
- return (
-
-
-
-
- act('set_attribute', { attribute: 'b_silicon_belly' })
- }
- >
- {capitalize(silicon_belly_overlay_preference)}
-
-
-
-
- );
- } else {
- return (
-
-
- Your module does either not support vore sprites or you've
- selected a belly sprite other than the sleeper within the Visuals
- section.
-
-
- );
- }
- } else if (is_vore_simple_mob) {
- return (
- // For now, we're only returning empty. TODO: Simple mob belly controls
-
-
-
- );
- } else {
- return (
- // Returning Empty element
-
-
-
- );
- }
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferenceItem.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferenceItem.tsx
deleted file mode 100644
index 2726f84f83..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferenceItem.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button } from 'tgui-core/components';
-
-import { preferenceData } from './types';
-
-export const VoreUserPreferenceItem = (props: {
- spec: preferenceData;
- [rest: string]: any;
-}) => {
- const { act } = useBackend();
-
- const { spec, ...rest } = props;
- const { action, test, tooltip, content, fluid = true, back_color } = spec;
-
- return (
- act(action)}
- icon={test ? 'toggle-on' : 'toggle-off'}
- selected={test}
- fluid={fluid}
- backgroundColor={
- back_color ? (test ? back_color.enabled : back_color.disabled) : ''
- }
- tooltip={tooltip.main + ' ' + (test ? tooltip.disable : tooltip.enable)}
- {...rest}
- >
- {test ? content.enabled : content.disabled}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferences.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferences.tsx
deleted file mode 100644
index a424c3626e..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferences.tsx
+++ /dev/null
@@ -1,759 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Button, Divider, Section, Stack } from 'tgui-core/components';
-import { BooleanLike } from 'tgui-core/react';
-
-import { digestModeToColor } from './constants';
-import { localPrefs, prefData, selectedData } from './types';
-import { VoreUserPreferencesAesthetic } from './VoreUserPreferencesTabs/VoreUserPreferencesAesthetic';
-import { VoreUserPreferencesDevouring } from './VoreUserPreferencesTabs/VoreUserPreferencesDevouring';
-import { VoreUserPreferencesMechanical } from './VoreUserPreferencesTabs/VoreUserPreferencesMechanical';
-import { VoreUserPreferencesSoulcatcher } from './VoreUserPreferencesTabs/VoreUserPreferencesSoulcatcher';
-import { VoreUserPreferencesSpawn } from './VoreUserPreferencesTabs/VoreUserPreferencesSpawn';
-import { VoreUserPreferencesSpontaneous } from './VoreUserPreferencesTabs/VoreUserPreferencesSpontaneous';
-
-export const VoreUserPreferences = (props: {
- prefs: prefData;
- selected: selectedData | null;
- show_pictures: BooleanLike;
- icon_overflow: BooleanLike;
-}) => {
- const { act } = useBackend();
-
- const { prefs, selected, show_pictures, icon_overflow } = props;
- const {
- digestable,
- absorbable,
- devourable,
- allowmobvore,
- feeding,
- permit_healbelly,
- can_be_drop_prey,
- can_be_drop_pred,
- drop_vore,
- slip_vore,
- stumble_vore,
- throw_vore,
- phase_vore,
- food_vore,
- digest_pain,
- latejoin_vore,
- latejoin_prey,
- noisy,
- noisy_full,
- resizable,
- step_mechanics_active,
- show_vore_fx,
- digest_leave_remains,
- pickup_mechanics_active,
- allow_spontaneous_tf,
- allow_mind_transfer,
- eating_privacy_global,
- allow_mimicry,
- strip_mechanics_active,
- autotransferable,
- liq_rec,
- liq_giv,
- liq_apply,
- no_spawnpred_warning,
- no_spawnprey_warning,
- no_spawnpred_warning_time,
- no_spawnprey_warning_time,
- no_spawnpred_warning_save,
- no_spawnprey_warning_save,
- nutrition_message_visible,
- weight_message_visible,
- selective_active,
- belly_rub_target,
- soulcatcher_allow_capture,
- soulcatcher_allow_transfer,
- soulcatcher_allow_deletion,
- soulcatcher_allow_takeover,
- } = prefs;
-
- const preferences: localPrefs = {
- digestion: {
- action: 'toggle_digest',
- test: digestable,
- tooltip: {
- main: "This button is for those who don't like being digested. It can make you undigestable.",
- enable: 'Click here to allow digestion.',
- disable: 'Click here to prevent digestion.',
- },
- content: {
- enabled: 'Digestion Allowed',
- disabled: 'No Digestion',
- },
- },
- absorbable: {
- action: 'toggle_absorbable',
- test: absorbable,
- tooltip: {
- main: "This button allows preds to know whether you prefer or don't prefer to be absorbed.",
- enable: 'Click here to allow being absorbed.',
- disable: 'Click here to disallow being absorbed.',
- },
- content: {
- enabled: 'Absorption Allowed',
- disabled: 'No Absorption',
- },
- },
- devour: {
- action: 'toggle_devour',
- test: devourable,
- fluid: false,
- tooltip: {
- main: 'This button is to toggle your ability to be devoured by others.',
- enable: 'Click here to allow being devoured.',
- disable: 'Click here to prevent being devoured.',
- },
- content: {
- enabled: 'Devouring Allowed',
- disabled: 'No Devouring',
- },
- },
- mobvore: {
- action: 'toggle_mobvore',
- test: allowmobvore,
- tooltip: {
- main: "This button is for those who don't like being eaten by mobs.",
- enable: 'Click here to allow being eaten by mobs.',
- disable: 'Click here to prevent being eaten by mobs.',
- },
- content: {
- enabled: 'Mobs eating you allowed',
- disabled: 'No Mobs eating you',
- },
- },
- feed: {
- action: 'toggle_feed',
- test: feeding,
- tooltip: {
- main: 'This button is to toggle your ability to be fed to or by others vorishly.',
- enable: 'Click here to allow being fed to/by other people.',
- disable: 'Click here to prevent being fed to/by other people.',
- },
- content: {
- enabled: 'Feeding Allowed',
- disabled: 'No Feeding',
- },
- },
- healbelly: {
- action: 'toggle_healbelly',
- test: permit_healbelly,
- tooltip: {
- main: "This button is for those who don't like healbelly used on them as a mechanic.",
- enable: 'Click here to allow being heal-bellied.',
- disable: 'Click here to prevent being heal-bellied.',
- },
- content: {
- enabled: 'Heal-bellies Allowed',
- disabled: 'No Heal-bellies',
- },
- },
- dropnom_prey: {
- action: 'toggle_dropnom_prey',
- test: can_be_drop_prey,
- fluid: false,
- tooltip: {
- main:
- 'This toggle is for spontaneous, environment related vore' +
- ' as prey, including drop-noms, teleporters, etc.',
- enable: 'Click here to allow being spontaneous prey.',
- disable: 'Click here to prevent being spontaneous prey.',
- },
- content: {
- enabled: 'Spontaneous Prey Enabled',
- disabled: 'Spontaneous Prey Disabled',
- },
- },
- dropnom_pred: {
- action: 'toggle_dropnom_pred',
- test: can_be_drop_pred,
- fluid: false,
- tooltip: {
- main:
- 'This toggle is for spontaneous, environment related vore' +
- ' as a predator, including drop-noms, teleporters, etc.',
- enable: 'Click here to allow being spontaneous pred.',
- disable: 'Click here to prevent being spontaneous pred.',
- },
- content: {
- enabled: 'Spontaneous Pred Enabled',
- disabled: 'Spontaneous Pred Disabled',
- },
- },
- toggle_drop_vore: {
- action: 'toggle_drop_vore',
- test: drop_vore,
- tooltip: {
- main:
- 'Allows for dropnom spontaneous vore to occur. ' +
- 'Note, you still need spontaneous vore pred and/or prey enabled.',
- enable: 'Click here to allow for dropnoms.',
- disable: 'Click here to disable dropnoms.',
- },
- content: {
- enabled: 'Drop Noms Enabled',
- disabled: 'Drop Noms Disabled',
- },
- },
- toggle_slip_vore: {
- action: 'toggle_slip_vore',
- test: slip_vore,
- tooltip: {
- main:
- 'Allows for slip related spontaneous vore to occur. ' +
- 'Note, you still need spontaneous vore pred and/or prey enabled.',
- enable: 'Click here to allow for slip vore.',
- disable: 'Click here to disable slip vore.',
- },
- content: {
- enabled: 'Slip Vore Enabled',
- disabled: 'Slip Vore Disabled',
- },
- },
- toggle_stumble_vore: {
- action: 'toggle_stumble_vore',
- test: stumble_vore,
- tooltip: {
- main:
- 'Allows for stumble related spontaneous vore to occur. ' +
- ' Note, you still need spontaneous vore pred and/or prey enabled.',
- enable: 'Click here to allow for stumble vore.',
- disable: 'Click here to disable stumble vore.',
- },
- content: {
- enabled: 'Stumble Vore Enabled',
- disabled: 'Stumble Vore Disabled',
- },
- },
- toggle_throw_vore: {
- action: 'toggle_throw_vore',
- test: throw_vore,
- tooltip: {
- main:
- 'Allows for throw related spontaneous vore to occur. ' +
- ' Note, you still need spontaneous vore pred and/or prey enabled.',
- enable: 'Click here to allow for throw vore.',
- disable: 'Click here to disable throw vore.',
- },
- content: {
- enabled: 'Throw Vore Enabled',
- disabled: 'Throw Vore Disabled',
- },
- },
- toggle_phase_vore: {
- action: 'toggle_phase_vore',
- test: phase_vore,
- tooltip: {
- main:
- 'Allows for phasing related spontaneous vore to occur. ' +
- ' Note, you still need spontaneous vore pred and/or prey enabled.',
- enable: 'Click here to allow for phase vore.',
- disable: 'Click here to disable phase vore.',
- },
- content: {
- enabled: 'Phase Vore Enabled',
- disabled: 'Phase Vore Disabled',
- },
- },
- toggle_food_vore: {
- action: 'toggle_food_vore',
- test: food_vore,
- tooltip: {
- main:
- 'Allows for food related spontaneous vore to occur. ' +
- ' Note, you still need spontaneous vore pred and/or prey enabled.',
- enable: 'Click here to allow for food vore.',
- disable: 'Click here to disable food vore.',
- },
- content: {
- enabled: 'Food Vore Enabled',
- disabled: 'Food Vore Disabled',
- },
- },
- toggle_digest_pain: {
- action: 'toggle_digest_pain',
- test: digest_pain,
- tooltip: {
- main:
- 'Allows for pain messages to show when being digested. ' +
- ' Can be toggled off to disable pain messages.',
- enable: 'Click here to allow for digestion pain.',
- disable: 'Click here to disable digestion pain.',
- },
- content: {
- enabled: 'Digestion Pain Enabled',
- disabled: 'Digestion Pain Disabled',
- },
- },
- spawnbelly: {
- action: 'toggle_latejoin_vore',
- test: latejoin_vore,
- fluid: false,
- tooltip: {
- main: 'Toggle late join vore spawnpoint.',
- enable: 'Click here to turn on vorish spawnpoint.',
- disable: 'Click here to turn off vorish spawnpoint.',
- },
- content: {
- enabled: 'Vore Spawn Pred Enabled',
- disabled: 'Vore Spawn Pred Disabled',
- },
- },
- spawnprey: {
- action: 'toggle_latejoin_prey',
- test: latejoin_prey,
- fluid: false,
- tooltip: {
- main: 'Toggle late join preds spawning on you.',
- enable: 'Click here to turn on preds spawning around you.',
- disable: 'Click here to turn off preds spawning around you.',
- },
- content: {
- enabled: 'Vore Spawn Prey Enabled',
- disabled: 'Vore Spawn Prey Disabled',
- },
- },
- noisy: {
- action: 'toggle_noisy',
- test: noisy,
- tooltip: {
- main: 'Toggle audible hunger noises.',
- enable: 'Click here to turn on hunger noises.',
- disable: 'Click here to turn off hunger noises.',
- },
- content: {
- enabled: 'Hunger Noises Enabled',
- disabled: 'Hunger Noises Disabled',
- },
- },
- noisy_full: {
- action: 'toggle_noisy_full',
- test: noisy_full,
- tooltip: {
- main: 'Toggle belching while full.',
- enable: 'Click here to turn on belching while full.',
- disable: 'Click here to turn off belching while full.',
- },
- content: {
- enabled: 'Belching Enabled',
- disabled: 'Belching Disabled',
- },
- },
- resize: {
- action: 'toggle_resize',
- test: resizable,
- tooltip: {
- main: 'This button is to toggle your ability to be resized by others.',
- enable: 'Click here to allow being resized.',
- disable: 'Click here to prevent being resized.',
- },
- content: {
- enabled: 'Resizing Allowed',
- disabled: 'No Resizing',
- },
- },
- steppref: {
- action: 'toggle_steppref',
- test: step_mechanics_active,
- tooltip: {
- main: '',
- enable:
- 'You will not participate in step mechanics.' +
- ' Click to enable step mechanics.',
- disable:
- 'This setting controls whether or not you participate in size-based step mechanics.' +
- ' Includes both stepping on others, as well as getting stepped on. Click to disable step mechanics.',
- },
- content: {
- enabled: 'Step Mechanics Enabled',
- disabled: 'Step Mechanics Disabled',
- },
- },
- vore_fx: {
- action: 'toggle_fx',
- test: show_vore_fx,
- tooltip: {
- main: '',
- enable:
- 'Regardless of Predator Setting, you will not see their FX settings.' +
- ' Click this to enable showing FX.',
- disable:
- 'This setting controls whether or not a pred is allowed to mess with your HUD and fullscreen overlays.' +
- ' Click to disable all FX.',
- },
- content: {
- enabled: 'Show Vore FX',
- disabled: 'Do Not Show Vore FX',
- },
- },
- remains: {
- action: 'toggle_leaveremains',
- test: digest_leave_remains,
- tooltip: {
- main: '',
- enable:
- 'Regardless of Predator Setting, you will not leave remains behind.' +
- ' Click this to allow leaving remains.',
- disable:
- 'Your Predator must have this setting enabled in their belly modes to allow remains to show up,' +
- ' if they do not, they will not leave your remains behind, even with this on. Click to disable remains.',
- },
- content: {
- enabled: 'Allow Leaving Remains',
- disabled: 'Do Not Allow Leaving Remains',
- },
- },
- pickuppref: {
- action: 'toggle_pickuppref',
- test: pickup_mechanics_active,
- tooltip: {
- main: '',
- enable:
- 'You will not participate in pick-up mechanics.' +
- ' Click this to allow picking up/being picked up.',
- disable:
- 'Allows macros to pick you up into their hands, and you to pick up micros.' +
- ' Click to disable pick-up mechanics.',
- },
- content: {
- enabled: 'Pick-up Mechanics Enabled',
- disabled: 'Pick-up Mechanics Disabled',
- },
- },
- spontaneous_tf: {
- action: 'toggle_allow_spontaneous_tf',
- test: allow_spontaneous_tf,
- tooltip: {
- main:
- 'This toggle is for spontaneous or environment related transformation' +
- ' as a victim, such as via chemicals.',
- enable: 'Click here to allow being spontaneously transformed.',
- disable: 'Click here to disable being spontaneously transformed.',
- },
- content: {
- enabled: 'Spontaneous TF Enabled',
- disabled: 'Spontaneous TF Disabled',
- },
- },
- mind_transfer: {
- action: 'toggle_allow_mind_transfer',
- test: allow_mind_transfer,
- tooltip: {
- main:
- 'This toggle is for mind transfer interactions' +
- ' as a victim, such as mind-binder or dominate pred/prey.',
- enable: 'Click here to allow your mind being taken or swapped.',
- disable: 'Click here to disallow having your mind taken or swapped.',
- },
- content: {
- enabled: 'Mind Transfer Enabled',
- disabled: 'Mind Transfer Disabled',
- },
- },
- examine_nutrition: {
- action: 'toggle_nutrition_ex',
- test: nutrition_message_visible,
- tooltip: {
- main: '',
- enable: 'Click here to enable nutrition messages.',
- disable: 'Click here to disable nutrition messages.',
- },
- content: {
- enabled: 'Examine Nutrition Messages Active',
- disabled: 'Examine Nutrition Messages Inactive',
- },
- },
- examine_weight: {
- action: 'toggle_weight_ex',
- test: weight_message_visible,
- tooltip: {
- main: '',
- enable: 'Click here to enable weight messages.',
- disable: 'Click here to disable weight messages.',
- },
- content: {
- enabled: 'Examine Weight Messages Active',
- disabled: 'Examine Weight Messages Inactive',
- },
- },
- strippref: {
- action: 'toggle_strippref',
- test: strip_mechanics_active,
- tooltip: {
- main: '',
- enable:
- 'Regardless of Predator Setting, you will not be stripped inside their bellies.' +
- ' Click this to allow stripping.',
- disable:
- 'Your Predator must have this setting enabled in their belly modes to allow stripping your gear,' +
- ' if they do not, they will not strip your gear, even with this on. Click to disable stripping.',
- },
- content: {
- enabled: 'Allow Worn Item Stripping',
- disabled: 'Do Not Allow Worn Item Stripping',
- },
- },
- eating_privacy_global: {
- action: 'toggle_global_privacy',
- test: eating_privacy_global,
- tooltip: {
- main:
- 'Sets default belly behaviour for vorebellies for announcing' +
- ' ingesting or expelling prey' +
- ' Overwritten by belly-specific preferences if set.',
- enable: ' Click here to turn your messages subtle',
- disable: ' Click here to turn your messages loud',
- },
- content: {
- enabled: 'Global Vore Privacy: Subtle',
- disabled: 'Global Vore Privacy: Loud',
- },
- },
- allow_mimicry: {
- action: 'toggle_mimicry',
- test: allow_mimicry,
- tooltip: {
- main: 'Allows some creatures to mimick your apperance.',
- enable: ' Click here to allow mimicry.',
- disable: ' Click here to forbid mimicry.',
- },
- content: {
- enabled: 'Allow Mimicry: Yes',
- disabled: 'Allow Mimicry: No',
- },
- },
- autotransferable: {
- action: 'toggle_autotransferable',
- test: autotransferable,
- tooltip: {
- main: 'This button is for allowing or preventing belly auto-transfer mechanics from moving you.',
- enable: 'Click here to allow autotransfer.',
- disable: 'Click here to prevent autotransfer.',
- },
- content: {
- enabled: 'Auto-Transfer Allowed',
- disabled: 'Do Not Allow Auto-Transfer',
- },
- },
- liquid_receive: {
- action: 'toggle_liq_rec',
- test: liq_rec,
- tooltip: {
- main: 'This button is for allowing or preventing others from giving you liquids from their vore organs.',
- enable: 'Click here to allow receiving liquids.',
- disable: 'Click here to prevent receiving liquids.',
- },
- content: {
- enabled: 'Receiving Liquids Allowed',
- disabled: 'Do Not Allow Receiving Liquids',
- },
- },
- liquid_give: {
- action: 'toggle_liq_giv',
- test: liq_giv,
- tooltip: {
- main: 'This button is for allowing or preventing others from taking liquids from your vore organs.',
- enable: 'Click here to allow taking liquids.',
- disable: 'Click here to prevent taking liquids.',
- },
- content: {
- enabled: 'Taking Liquids Allowed',
- disabled: 'Do Not Allow Taking Liquids',
- },
- },
- liquid_apply: {
- action: 'toggle_liq_apply',
- test: liq_apply,
- tooltip: {
- main: 'This button is for allowing or preventing vorgans from applying liquids to you.',
- enable: 'Click here to allow the application of liquids.',
- disable: 'Click here to prevent the application of liquids.',
- },
- content: {
- enabled: 'Applying Liquids Allowed',
- disabled: 'Do Not Allow Applying Liquids',
- },
- },
- no_spawnpred_warning: {
- action: 'toggle_no_latejoin_vore_warning',
- test: no_spawnpred_warning,
- tooltip: {
- main:
- 'This button is to disable the vore spawnpoint confirmations ' +
- (no_spawnpred_warning_save
- ? '(round persistent).'
- : '(no round persistence).'),
- enable:
- 'Click here to auto accept spawnpoint confirmations after ' +
- String(no_spawnpred_warning_time) +
- ' seconds.',
- disable:
- 'Click here to no longer auto accept spawnpoint confirmations after ' +
- String(no_spawnpred_warning_time) +
- ' seconds.',
- },
- back_color: {
- enabled: no_spawnpred_warning_save ? 'green' : '#8B8000',
- disabled: '',
- },
- content: {
- enabled: 'Vore Spawn Pred Auto Accept Enabled',
- disabled: 'Vore Spawn Pred Auto Accept Disabled',
- },
- },
- no_spawnprey_warning: {
- action: 'toggle_no_latejoin_prey_warning',
- test: no_spawnprey_warning,
- tooltip: {
- main:
- 'This button is to disable the pred spawning on you confirmations ' +
- (no_spawnprey_warning_save
- ? '(round persistent).'
- : '(no round persistence).'),
- enable:
- 'Click here to auto accept pred spawn confirmations after ' +
- String(no_spawnprey_warning_time) +
- ' seconds.',
- disable:
- 'Click here to no longer auto accept pred spawn confirmations after ' +
- String(no_spawnprey_warning_time) +
- ' seconds.',
- },
- back_color: {
- enabled: no_spawnprey_warning_save ? 'green' : '#8B8000',
- disabled: '',
- },
- content: {
- enabled: 'Vore Spawn Prey Auto Accept Enabled',
- disabled: 'Vore Spawn Prey Auto Accept Disabled',
- },
- },
- soulcatcher: {
- action: 'toggle_soulcatcher_allow_capture',
- test: soulcatcher_allow_capture,
- tooltip: {
- main: 'This button is for allowing or preventing vorgans from soulcatching you.',
- enable: 'Click here to allow soul capturing.',
- disable: 'Click here to prevent soul capturing.',
- },
- content: {
- enabled: 'Soul Capturing Allowed',
- disabled: 'Do Not Allow Soul Capturing',
- },
- },
- soulcatcher_takeover: {
- action: 'toggle_soulcatcher_allow_takeover',
- test: soulcatcher_allow_takeover,
- tooltip: {
- main: 'This button is for allowing or preventing to give body control to captured souls.',
- enable:
- 'Click here to allow body takeovers. (Both parties need it enabled to function)',
- disable: 'Click here to prevent body takeovers.',
- },
- content: {
- enabled: 'Body Takeover Allowed',
- disabled: 'Do Not Allow Body Takeover',
- },
- },
- soulcatcher_transfer: {
- action: 'toggle_soulcatcher_allow_transfer',
- test: soulcatcher_allow_transfer,
- tooltip: {
- main: 'This button is for allowing or preventing soulcatchers from transferring your soul.',
- enable: 'Click here to allow soul transferring to sleevemates or mmis.',
- disable:
- 'Click here to prevent soul transferring to sleevemates or mmis.',
- },
- content: {
- enabled: 'Soul Transfer Allowed',
- disabled: 'Do Not Allow Soul Transfer',
- },
- },
- soulcatcher_delete: {
- action: 'toggle_soulcatcher_allow_deletion',
- test: soulcatcher_allow_deletion,
- tooltip: {
- main: 'This button is for allowing or preventing soulcatchers from deleting your soul WARNING! Deletion will round remove you.',
- enable: 'Click here to allow the deletion of your soul.',
- disable:
- (soulcatcher_allow_deletion === 1 &&
- 'Click here to allow the deletion of your soul without additional request.') ||
- (soulcatcher_allow_deletion === 2 &&
- 'Click here to prevent the deletion of your soul.') ||
- '',
- },
- back_color: {
- enabled:
- (soulcatcher_allow_deletion === 1 && 'orange') ||
- (soulcatcher_allow_deletion === 2 && 'red') ||
- '',
- disabled: '',
- },
- content: {
- enabled:
- (soulcatcher_allow_deletion === 1 &&
- 'WARNING, Soul Deletion Possible') ||
- (soulcatcher_allow_deletion === 2 &&
- 'DANGER! Instant Soul Deletion Allowed') ||
- '',
- disabled: 'Do Not Allow Soul Deletion',
- },
- },
- };
-
- return (
-
-
-
-
-
-
-
-
-
-
-
- act('saveprefs')}>
- Save Prefs
-
-
-
- act('reloadprefs')}>
- Reload Prefs
-
-
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/constants.ts b/tgui/packages/tgui/interfaces/chompstation/VorePanel/constants.ts
deleted file mode 100644
index 34c1c16a87..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/constants.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-export const stats: (string | undefined)[] = [undefined, 'average', 'bad'];
-export const vorespawnAbsorbedText: string[] = ['No', 'Yes', 'Prey Choice'];
-export const vorespawnAbsorbedColor: (string | undefined)[] = [
- undefined,
- 'green',
- 'orange',
-];
-
-export const digestModeToColor = {
- Default: undefined,
- Hold: undefined,
- Digest: 'red',
- Absorb: 'purple',
- Unabsorb: 'purple',
- Drain: 'orange',
- Selective: 'orange',
- Shrink: 'teal',
- Grow: 'teal',
- 'Size Steal': 'teal',
- Heal: 'green',
- 'Encase In Egg': 'blue',
-};
-
-export const reagentToColor = {
- Water: undefined,
- Milk: undefined,
- Cream: undefined,
- Honey: 'teal',
- 'Cherry Jelly': 'teal',
- 'Digestive acid': 'red',
- 'Diluted digestive acid': 'red',
- 'Space cleaner': undefined,
- 'Space Lube': undefined,
- Biomass: 'teal',
- 'Concentrated Radium': 'orange',
- Tricordrazine: 'green',
-};
-
-export const digestModeToPreyMode = {
- Hold: 'being held.',
- Digest: 'being digested.',
- Absorb: 'being absorbed.',
- Unabsorb: 'being unabsorbed.',
- Drain: 'being drained.',
- Selective: 'being processed.',
- Shrink: 'being shrunken.',
- Grow: 'being grown.',
- 'Size Steal': 'having your size stolen.',
- Heal: 'being healed.',
- 'Encase In Egg': 'being encased in an egg.',
-};
-
-export const SYNTAX_REGEX =
- /%belly|%pred|%prey|%countpreytotal|%countpreyabsorbed|%countprey|%countghosts|%count|%digestedprey|%ghost|%item|%dest|%goo|%happybelly|%fat|%grip|%cozy|%angry|%acid|%snack|%hot|%snake/g;
-export const SYNTAX_COLOR = {
- '%belly': 'average',
- '%pred': 'bad',
- '%prey': 'good',
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/index.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/index.tsx
deleted file mode 100644
index 5af0709d16..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/index.tsx
+++ /dev/null
@@ -1,266 +0,0 @@
-import { useState } from 'react';
-import { useBackend } from 'tgui/backend';
-import { Window } from 'tgui/layouts';
-import { Button, Icon, NoticeBox, Stack, Tabs } from 'tgui-core/components';
-
-import { Data } from './types';
-import { VoreBellySelectionAndCustomization } from './VoreBellySelectionAndCustomization';
-import { VoreInsidePanel } from './VoreInsidePanel';
-import { VoreSoulcatcher } from './VoreSoulcatcher';
-import { VoreUserPreferences } from './VoreUserPreferences';
-
-/**
- * There are three main sections to this UI.
- * - The Inside Panel, where all relevant data for interacting with a belly you're in is located.
- * - The Belly Selection Panel, where you can select what belly people will go into and customize the active one.
- * - User Preferences, where you can adjust all of your vore preferences on the fly.
- */
-
-/**
- * CHOMPedits specified here. Read ALL of this if conflicts happen, I can't find a way to add comments line by line.
- *
- * Under VoreSelectedBelly the following strings have been added to const{}:
- * show_liq, liq_interacts, liq_reagent_gen, liq_reagent_type, liq_reagent_name,
- * liq_reagent_transfer_verb, liq_reagent_nutri_rate, liq_reagent_capacity, liq_sloshing, liq_reagent_addons,
- * show_liq_fullness, liq_messages, liq_msg_toggle1, liq_msg_toggle2, liq_msg_toggle3, liq_msg_toggle4,
- * liq_msg_toggle5, liq_msg1, liq_msg2, liq_msg3, liq_msg4, liq_msg5, sound_volume, egg_name, recycling, storing_nutrition, entrance_logs, item_digest_logs, noise_freq,
- * custom_reagentcolor, custom_reagentalpha, liquid_overlay, max_liquid_level, mush_overlay, reagent_touches, mush_color, mush_alpha, max_mush, min_mush, item_mush_val,
- * metabolism_overlay, metabolism_mush_ratio, max_ingested, custom_ingested_color, custom_ingested_alpha
- *
- * To the tabs section of VoreSelectedBelly return
- * setTabIndex(5)}>
- * Liquid Options
- *
- * setTabIndex(6)}>
- * Liquid Messages
- *
- *
- * All of the content for tabIndex === 5 and tabIndex === 6
- *
- * Under VoreUserPreferences the following strings have been added to const{}:
- * liq_rec, liq_giv,
- *
- * To VoreUserPreferences return
- *
- * act("toggle_liq_rec")}
- * icon={liq_rec ? "toggle-on" : "toggle-off"}
- * selected={liq_rec}
- * fluid
- * tooltipPosition="top"
- * tooltip={"This button is for allowing or preventing others from giving you liquids from their vore organs."
- * + (liq_rec ? " Click here to prevent receiving liquids." : " Click here to allow receiving liquids.")}
- * >
- * {liq_rec ? "Receiving Liquids Allowed" : "Do Not Allow Receiving Liquids"}
- *
- *
- *
- * act("toggle_liq_giv")}
- * icon={liq_giv ? "toggle-on" : "toggle-off"}
- * selected={liq_giv}
- * fluid
- * tooltipPosition="top"
- * tooltip={"This button is for allowing or preventing others from taking liquids from your vore organs."
- * + (liq_giv ? " Click here to prevent taking liquids." : " Click here to allow taking liquids.")}
- * >
- * {liq_giv ? "Taking Liquids Allowed" : "Do Not Allow Taking Liquids"}
- *
- *
- *
- * NEW EDITS 2/25/21: COLORED BELLY OVERLAYS
- * LINE 5:
- *import { Box, Button, ByondUi, Stack, Collapsible, Icon, LabeledList, NoticeBox, Section, Tabs } from "../components";
- *
- * LINE 172 -
- *
- * LINE 301 - belly_fullscreen_color,
- * mapRef,
- *
- * LINE 604 -
- *
- *
- * act("set_attribute", { attribute: "b_fullscreen_color", val: null })}>
- * Select Color
- *
- *
- *
- *
- *
- *
- *
- *
- * act("set_attribute", { attribute: "b_disable_hud" })}
- * icon={disable_hud ? "toggle-on" : "toggle-off"}
- * selected={disable_hud}
- * >
- * {disable_hud ? "Yes" : "No"}
- *
- *
- *
- *
- *
- * Belly styles:
- * act("set_attribute", { attribute: "b_fullscreen", val: null })}>
- * Disabled
- *
- * {Object.keys(possible_fullscreens).map(key => (
- * act("set_attribute", { attribute: "b_fullscreen", val: key })}>
- *
- *
- * ))}
- *
- *
- *
- * LINE 900 - const [tabIndex, setTabIndex] = useLocalState('tabIndex', 0);
- *
- * return tabIndex===4 ? null : (
- *
- * New preference added, noisy_full
- * noisy_full enables belching when nutrition exceeds 500, very similar to the noisy preference.
- *
- * That's everything so far.
- *
- */
-
-export const VorePanel = () => {
- const { act, data } = useBackend();
-
- const {
- inside,
- our_bellies,
- selected,
- soulcatcher,
- abilities,
- prefs,
- show_pictures,
- icon_overflow,
- host_mobtype,
- unsaved_changes,
- vore_words,
- } = data;
-
- const [tabIndex, setTabIndex] = useState(0);
-
- const tabs: React.JSX.Element[] = [];
-
- tabs[0] = (
-
- );
- tabs[1] = (
-
- );
- tabs[2] = (
-
- );
-
- return (
-
-
-
-
- {(unsaved_changes && (
-
-
- Warning: Unsaved Changes!
-
- act('saveprefs')}>
- Save Prefs
-
-
-
- {
- act('saveprefs');
- act('exportpanel');
- }}
- >
- Save Prefs & Export Selected Belly
-
-
-
-
- )) ||
- ''}
-
- 500 ? '30%' : '20%'}>
-
-
-
-
- setTabIndex(0)}
- >
- Bellies
-
-
- setTabIndex(1)}
- >
- Soulcatcher
-
-
- setTabIndex(2)}
- >
- Preferences
-
-
-
-
- {tabs[tabIndex] || 'Error'}
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/types.ts b/tgui/packages/tgui/interfaces/chompstation/VorePanel/types.ts
deleted file mode 100644
index a1ebe0591e..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/types.ts
+++ /dev/null
@@ -1,374 +0,0 @@
-import { BooleanLike } from 'tgui-core/react';
-
-export type Data = {
- unsaved_changes: BooleanLike;
- show_pictures: BooleanLike;
- icon_overflow: BooleanLike;
- inside: insideData;
- host_mobtype: hostMob;
- our_bellies: bellyData[];
- selected: selectedData | null;
- prefs: prefData;
- soulcatcher: soulcatcherData | null;
- abilities: abilities;
- vore_words: Record;
-};
-
-export type abilities = {
- nutrition: number;
- current_size: number;
- minimum_size: number;
- maximum_size: number;
- resize_cost: number;
-};
-
-export type hostMob = {
- is_cyborg: BooleanLike;
- is_vore_simple_mob: BooleanLike;
-};
-
-export type insideData = {
- absorbed: BooleanLike;
- belly_name?: string;
- belly_mode?: string;
- desc?: string;
- pred?: string;
- ref?: string;
- liq_lvl?: number;
- liq_reagent_type?: string;
- liuq_name?: string;
- contents?: contentData[];
-};
-
-export type contentData = {
- name: string;
- absorbed: BooleanLike;
- stat: number;
- ref: string;
- outside: BooleanLike;
- icon: string;
-};
-
-export type bellyData = {
- selected: BooleanLike;
- name: string;
- ref: string;
- digest_mode: string;
- contents: number;
-};
-
-export type selectedData = {
- belly_name: string;
- message_mode: BooleanLike;
- is_wet: BooleanLike;
- wet_loop: BooleanLike;
- mode: string;
- item_mode: string;
- verb: string;
- release_verb: string;
- desc: string;
- absorbed_desc: string;
- fancy: BooleanLike;
- sound: string;
- release_sound: string;
- can_taste: BooleanLike;
- is_feedable: BooleanLike;
- egg_type: string;
- egg_name: string;
- egg_size: number;
- recycling: BooleanLike;
- storing_nutrition: BooleanLike;
- entrance_logs: BooleanLike;
- nutrition_percent: number;
- digest_brute: number;
- digest_burn: number;
- digest_oxy: number;
- digest_tox: number;
- digest_clone: number;
- bulge_size: number;
- save_digest_mode: BooleanLike;
- display_absorbed_examine: BooleanLike;
- shrink_grow_size: number;
- emote_time: number;
- emote_active: BooleanLike;
- selective_preference: string;
- nutrition_ex: BooleanLike;
- weight_ex: BooleanLike;
- belly_fullscreen: string;
- eating_privacy_local: string;
- silicon_belly_overlay_preference: string;
- belly_mob_mult: number;
- belly_item_mult: number;
- belly_overall_mult: number;
- drainmode: string;
- belly_fullscreen_color: string;
- belly_fullscreen_color2: string;
- belly_fullscreen_color3: string;
- belly_fullscreen_color4: string;
- belly_fullscreen_alpha: number;
- colorization_enabled: BooleanLike;
- custom_reagentcolor: string;
- custom_reagentalpha: number;
- liquid_overlay: BooleanLike;
- max_liquid_level: number;
- reagent_touches: BooleanLike;
- mush_overlay: BooleanLike;
- mush_color: string;
- mush_alpha: number;
- max_mush: number;
- min_mush: number;
- item_mush_val: number;
- metabolism_overlay: BooleanLike;
- metabolism_mush_ratio: number;
- max_ingested: number;
- custom_ingested_color: string;
- custom_ingested_alpha: number;
- vorespawn_blacklist: BooleanLike;
- vorespawn_whitelist: string[];
- vorespawn_absorbed: number;
- sound_volume: number;
- affects_voresprite: BooleanLike;
- absorbed_voresprite: BooleanLike;
- absorbed_multiplier: number;
- liquid_voresprite: BooleanLike;
- liquid_multiplier: number;
- item_voresprite: BooleanLike;
- item_multiplier: number;
- health_voresprite: number;
- resist_animation: BooleanLike;
- voresprite_size_factor: number;
- belly_sprite_to_affect: string;
- undergarment_chosen: string;
- undergarment_if_none: string;
- undergarment_color: string;
- belly_sprite_option_shown: BooleanLike;
- tail_option_shown: BooleanLike;
- tail_to_change_to: BooleanLike | string;
- tail_colouration: BooleanLike;
- tail_extra_overlay: BooleanLike;
- tail_extra_overlay2: BooleanLike;
- noise_freq: number;
- item_digest_logs: BooleanLike;
- private_struggle: BooleanLike;
- addons: string[];
- vore_sprite_flags: string[];
- contaminates: BooleanLike;
- contaminate_flavor: string | null;
- contaminate_color: string | null;
- escapable: BooleanLike;
- interacts: interactData;
- autotransfer_enabled: BooleanLike;
- autotransfer: autotransferData;
- disable_hud: BooleanLike;
- possible_fullscreens: string[];
- contents: contentData[];
- show_liq: BooleanLike;
- liq_interacts: liqInteractData;
- show_liq_fullness: BooleanLike;
- liq_messages: liqMessageData;
-};
-
-export type interactData = {
- escapechance: number;
- escapechance_absorbed: number;
- escapetime: number;
- transferchance: number;
- transferlocation: string;
- transferchance_secondary: number;
- transferlocation_secondary: string;
- absorbchance: number;
- digestchance: number;
- belchchance: number;
-};
-
-export type autotransferData = {
- autotransferchance: number;
- autotransferwait: number;
- autotransferlocation: string;
- autotransferextralocation: string[];
- autotransferchance_secondary: number;
- autotransferlocation_secondary: string;
- autotransferextralocation_secondary: string[];
- autotransfer_min_amount: number;
- autotransfer_max_amount: number;
- autotransfer_whitelist: string[];
- autotransfer_blacklist: string[];
- autotransfer_whitelist_items: string[];
- autotransfer_blacklist_items: string[];
- autotransfer_secondary_whitelist: string[];
- autotransfer_secondary_blacklist: string[];
- autotransfer_secondary_whitelist_items: string[];
- autotransfer_secondary_blacklist_items: string[];
-};
-
-type liqInteractData = {
- liq_reagent_gen: BooleanLike;
- liq_reagent_type: string;
- liq_reagent_name: string;
- liq_reagent_transfer_verb: string;
- liq_reagent_nutri_rate: number;
- liq_reagent_capacity: number;
- liq_sloshing: BooleanLike;
- liq_reagent_addons: string[];
- custom_reagentcolor: string;
- custom_reagentalpha: number | string;
- liquid_overlay: BooleanLike;
- max_liquid_level: number;
- reagent_touches: BooleanLike;
- mush_overlay: BooleanLike;
- mush_color: string;
- mush_alpha: number;
- max_mush: number;
- min_mush: number;
- item_mush_val: number;
- metabolism_overlay: BooleanLike;
- metabolism_mush_ratio: number;
- max_ingested: number;
- custom_ingested_color: string;
- custom_ingested_alpha: number;
-};
-
-type liqMessageData = {
- liq_msg_toggle1: BooleanLike;
- liq_msg_toggle2: BooleanLike;
- liq_msg_toggle3: BooleanLike;
- liq_msg_toggle4: BooleanLike;
- liq_msg_toggle5: BooleanLike;
- liq_msg1: BooleanLike;
- liq_msg2: BooleanLike;
- liq_msg3: BooleanLike;
- liq_msg4: BooleanLike;
- liq_msg5: BooleanLike;
-};
-
-export type prefData = {
- digestable: BooleanLike;
- devourable: BooleanLike;
- resizable: BooleanLike;
- feeding: BooleanLike;
- absorbable: BooleanLike;
- digest_leave_remains: BooleanLike;
- allowmobvore: BooleanLike;
- permit_healbelly: BooleanLike;
- show_vore_fx: BooleanLike;
- can_be_drop_prey: BooleanLike;
- can_be_drop_pred: BooleanLike;
- latejoin_vore: BooleanLike;
- latejoin_prey: BooleanLike;
- no_spawnpred_warning: BooleanLike;
- no_spawnprey_warning: BooleanLike;
- no_spawnpred_warning_time: number;
- no_spawnprey_warning_time: number;
- no_spawnpred_warning_save: BooleanLike;
- no_spawnprey_warning_save: BooleanLike;
- allow_spontaneous_tf: BooleanLike;
- step_mechanics_active: BooleanLike;
- pickup_mechanics_active: BooleanLike;
- strip_mechanics_active: BooleanLike;
- noisy: BooleanLike;
- liq_rec: BooleanLike;
- liq_giv: BooleanLike;
- liq_apply: BooleanLike;
- autotransferable: BooleanLike;
- noisy_full: BooleanLike;
- selective_active: string;
- allow_mind_transfer: BooleanLike;
- drop_vore: BooleanLike;
- slip_vore: BooleanLike;
- stumble_vore: BooleanLike;
- throw_vore: BooleanLike;
- phase_vore: BooleanLike;
- food_vore: BooleanLike;
- digest_pain: BooleanLike;
- nutrition_message_visible: BooleanLike;
- nutrition_messages: string[];
- weight_message_visible: BooleanLike;
- weight_messages: string[];
- eating_privacy_global: BooleanLike;
- allow_mimicry: BooleanLike;
- belly_rub_target: string | null;
- vore_sprite_color: { stomach: string; 'taur belly': string };
- vore_sprite_multiply: { stomach: BooleanLike; 'taur belly': BooleanLike };
- soulcatcher_allow_capture: BooleanLike;
- soulcatcher_allow_transfer: BooleanLike;
- soulcatcher_allow_deletion: BooleanLike;
- soulcatcher_allow_takeover: BooleanLike;
-};
-
-export type soulcatcherData = {
- active: BooleanLike;
- name: string;
- caught_souls: DropdownEntry[];
- selected_sfx: string;
- selected_soul: string;
- interior_design: string;
- catch_self: BooleanLike;
- taken_over: BooleanLike;
- catch_prey: BooleanLike;
- catch_drain: BooleanLike;
- catch_ghost: BooleanLike;
- ext_hearing: BooleanLike;
- ext_vision: BooleanLike;
- mind_backups: BooleanLike;
- sr_projecting: BooleanLike;
- show_vore_sfx: BooleanLike;
- see_sr_projecting: BooleanLike;
-};
-
-export type DropdownEntry = {
- displayText: string;
- value: string;
-};
-
-export type localPrefs = {
- digestion: preferenceData;
- absorbable: preferenceData;
- devour: preferenceData;
- mobvore: preferenceData;
- feed: preferenceData;
- healbelly: preferenceData;
- dropnom_prey: preferenceData;
- dropnom_pred: preferenceData;
- toggle_drop_vore: preferenceData;
- toggle_slip_vore: preferenceData;
- toggle_stumble_vore: preferenceData;
- toggle_throw_vore: preferenceData;
- toggle_phase_vore: preferenceData;
- toggle_food_vore: preferenceData;
- toggle_digest_pain: preferenceData;
- spawnbelly: preferenceData;
- spawnprey: preferenceData;
- noisy: preferenceData;
- noisy_full: preferenceData;
- resize: preferenceData;
- steppref: preferenceData;
- vore_fx: preferenceData;
- remains: preferenceData;
- pickuppref: preferenceData;
- spontaneous_tf: preferenceData;
- mind_transfer: preferenceData;
- examine_nutrition: preferenceData;
- examine_weight: preferenceData;
- strippref: preferenceData;
- eating_privacy_global: preferenceData;
- allow_mimicry: preferenceData;
- autotransferable: preferenceData;
- liquid_receive: preferenceData;
- liquid_give: preferenceData;
- liquid_apply: preferenceData;
- no_spawnpred_warning: preferenceData;
- no_spawnprey_warning: preferenceData;
- soulcatcher: preferenceData;
- soulcatcher_transfer: preferenceData;
- soulcatcher_takeover: preferenceData;
- soulcatcher_delete: preferenceData;
-};
-
-export type preferenceData = {
- action: string;
- test: BooleanLike;
- tooltip: { main: string; enable: string; disable: string };
- content: { enabled: string; disabled: string };
- fluid?: boolean;
- back_color?: { enabled: string; disabled: string };
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportBellyString.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportBellyString.tsx
deleted file mode 100644
index 34b6f9f34f..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportBellyString.tsx
+++ /dev/null
@@ -1,844 +0,0 @@
-import { ItemModeSpan, ModeSpan } from './constants';
-import { Belly } from './types';
-import {
- GetAddons,
- GetAutotransferFlags,
- GetLiquidAddons,
-} from './VorePanelExportBellyStringHelpers';
-
-// prettier-ignore
-export const generateBellyString = (belly: Belly, index: number) => {
- const {
- // General Information
- name,
- desc,
- message_mode,
- absorbed_desc,
- vore_verb,
- release_verb,
-
- // Controls
- mode,
- addons,
- item_mode,
-
- // Options
- digest_brute,
- digest_burn,
- digest_oxy,
-
- can_taste,
- is_feedable,
- contaminates,
- contamination_flavor,
- contamination_color,
- nutrition_percent,
- bulge_size,
- display_absorbed_examine,
- save_digest_mode,
- emote_active,
- emote_time,
- shrink_grow_size,
- vorespawn_blacklist,
- vorespawn_whitelist,
- vorespawn_absorbed,
- egg_type,
- egg_name,
- selective_preference,
- recycling,
- storing_nutrition,
- entrance_logs,
- item_digest_logs,
-
- // Messages
- struggle_messages_outside,
- struggle_messages_inside,
- absorbed_struggle_messages_outside,
- absorbed_struggle_messages_inside,
- escape_attempt_messages_owner,
- escape_attempt_messages_prey,
- escape_messages_owner,
- escape_messages_prey,
- escape_messages_outside,
- escape_item_messages_owner,
- escape_item_messages_prey,
- escape_item_messages_outside,
- escape_fail_messages_owner,
- escape_fail_messages_prey,
- escape_attempt_absorbed_messages_owner,
- escape_attempt_absorbed_messages_prey,
- escape_absorbed_messages_owner,
- escape_absorbed_messages_prey,
- escape_absorbed_messages_outside,
- escape_fail_absorbed_messages_owner,
- escape_fail_absorbed_messages_prey,
- primary_transfer_messages_owner,
- primary_transfer_messages_prey,
- secondary_transfer_messages_owner,
- secondary_transfer_messages_prey,
- primary_autotransfer_messages_owner,
- primary_autotransfer_messages_prey,
- secondary_autotransfer_messages_owner,
- secondary_autotransfer_messages_prey,
- digest_chance_messages_owner,
- digest_chance_messages_prey,
- absorb_chance_messages_owner,
- absorb_chance_messages_prey,
- digest_messages_owner,
- digest_messages_prey,
- absorb_messages_owner,
- absorb_messages_prey,
- unabsorb_messages_owner,
- unabsorb_messages_prey,
- examine_messages,
- examine_messages_absorbed,
-
- // emote_list,
- emotes_digest,
- emotes_hold,
- emotes_holdabsorbed,
- emotes_absorb,
- emotes_heal,
- emotes_drain,
- emotes_steal,
- emotes_egg,
- emotes_shrink,
- emotes_grow,
- emotes_unabsorb,
-
- // Sounds
- is_wet,
- wet_loop,
- fancy_vore,
- vore_sound,
- release_sound,
- sound_volume,
- noise_freq,
-
- // Visuals
- affects_vore_sprites,
- count_absorbed_prey_for_sprite,
- resist_triggers_animation,
- size_factor_for_sprite,
- belly_sprite_to_affect,
-
- // Visuals (Belly Fullscreens Preview and Coloring)
- belly_fullscreen,
- belly_fullscreen_color,
- belly_fullscreen_color2,
- belly_fullscreen_color3,
- belly_fullscreen_color4,
- belly_fullscreen_alpha,
- colorization_enabled,
-
- // Visuals (Vore FX)
- disable_hud,
-
- // Interactions
- escapable,
-
- escapechance,
- escapechance_absorbed,
- escapetime,
-
- transferchance,
- transferlocation,
-
- transferchance_secondary,
- transferlocation_secondary,
-
- absorbchance,
- digestchance,
-
- belchchance,
-
- // Interactions (Auto-Transfer)
- autotransferwait,
- autotransferchance,
- autotransferlocation,
- autotransferextralocation,
- autotransferchance_secondary,
- autotransferlocation_secondary,
- autotransferextralocation_secondary,
- autotransfer_enabled,
- autotransfer_min_amount,
- autotransfer_max_amount,
- autotransfer_whitelist,
- autotransfer_blacklist,
- autotransfer_secondary_whitelist,
- autotransfer_secondary_blacklist,
- autotransfer_whitelist_items,
- autotransfer_blacklist_items,
- autotransfer_secondary_whitelist_items,
- autotransfer_secondary_blacklist_items,
-
- // Liquid Options
- show_liquids,
- reagentbellymode,
- reagent_chosen,
- reagent_name,
- reagent_transfer_verb,
- gen_time_display,
- custom_max_volume,
- vorefootsteps_sounds,
- reagent_mode_flag_list,
- liquid_overlay,
- max_liquid_level,
- reagent_touches,
- mush_overlay,
- mush_color,
- mush_alpha,
- max_mush,
- min_mush,
- item_mush_val,
- custom_reagentcolor,
- custom_reagentalpha,
- metabolism_overlay,
- metabolism_mush_ratio,
- max_ingested,
- custom_ingested_color,
- custom_ingested_alpha,
-
- // Liquid Messages
- liquid_fullness1_messages,
- liquid_fullness2_messages,
- liquid_fullness3_messages,
- liquid_fullness4_messages,
- liquid_fullness5_messages,
-
- fullness1_messages,
- fullness2_messages,
- fullness3_messages,
- fullness4_messages,
- fullness5_messages,
- } = belly;
-
- let result = '';
- result += '';
-
- result += '
';
- result += '
';
- result += 'Addons:
' + GetAddons(addons) + '
';
-
- result += '
== Descriptions ==';
- result += 'Vore Verb:
' + vore_verb + '
';
- result += 'Release Verb:
' + release_verb + '
';
- result += 'Description:
"' + desc + '"
';
- result += 'Absorbed Description:
"' + absorbed_desc + '"
';
-
- result += '
';
-
- result += '
== Messages ==';
- result +='Show All Interactive Messages: ' + (message_mode ? '
Yes' : 'No') + '
';
- result += ''; // Start Div messagesTabpanel
- result += '
';
-
- result += '
';
- result += '
';
-
- result += '
';
- escape_attempt_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_attempt_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_messages_outside?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_item_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_item_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_item_messages_outside?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_fail_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_fail_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_attempt_absorbed_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_attempt_absorbed_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_absorbed_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_absorbed_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_absorbed_messages_outside?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_fail_absorbed_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- escape_fail_absorbed_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- primary_transfer_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- primary_transfer_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- secondary_transfer_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- secondary_transfer_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- primary_autotransfer_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- primary_autotransfer_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- secondary_autotransfer_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- secondary_autotransfer_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- digest_chance_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- digest_chance_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- absorb_chance_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- absorb_chance_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- struggle_messages_outside?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- struggle_messages_inside?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- absorbed_struggle_messages_outside?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- absorbed_struggle_messages_inside?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- digest_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- digest_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- absorb_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- absorb_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- unabsorb_messages_owner?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- unabsorb_messages_prey?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- examine_messages?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- examine_messages_absorbed?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- result += '
';
- result += '
'; // End Div messagesTabpanel
-
- result += '= Idle Messages =
';
-
- result += 'Idle Messages (Hold):
';
- emotes_hold?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Hold Absorbed):
';
- emotes_holdabsorbed?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Digest):
';
- emotes_digest?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Absorb):
';
- emotes_absorb?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Unabsorb):
';
- emotes_unabsorb?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Drain):
';
- emotes_drain?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Heal):
';
- emotes_heal?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Size Steal):
';
- emotes_steal?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Shrink):
';
- emotes_shrink?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Grow):
';
- emotes_grow?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += 'Idle Messages (Encase In Egg):
';
- emotes_egg?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
-
- result += '
';
-
- result += '';
-
- // OPTIONS
-
- result += '
';
- result += '';
-
- result += '
';
- result += '
';
- result += '
';
- result += '- Can Taste: ' + (can_taste ? 'Yes' : 'No') + '
';
- result += '- Feedable: ' + (is_feedable ? 'Yes' : 'No') + '
';
- result += '- Contaminates: ' + (contaminates ? 'Yes' : 'No') + '
';
- result += '- Contamination Flavor: ' + contamination_flavor + '
';
- result += '- Contamination Color: ' + contamination_color + '
';
- result += '- Nutritional Gain: ' + nutrition_percent + '%
';
- result += '- Required Examine Size: ' + bulge_size * 100 + '%
';
- result += '- Display Absorbed Examines: ' + (display_absorbed_examine ? 'True' : 'False') + '
';
- result += '- Save Digest Mode: ' + (save_digest_mode ? 'True' : 'False') + '
';
- result += '- Idle Emotes: ' + (emote_active ? 'Active' : 'Inactive') + '
';
- result += '- Idle Emote Delay: ' + emote_time + ' seconds
';
- result += '- Shrink/Grow Size: ' + shrink_grow_size * 100 + '%
';
- result += '- Vore Spawn Blacklist: ' + (vorespawn_blacklist ? 'Yes' : 'No') + '
';
- result += '- Vore Spawn Whitelist: ' + (vorespawn_whitelist.length ? vorespawn_whitelist.join(', ') : 'Anyone!') + '
';
- result += '- Vore Spawn Absorbed: ' + (vorespawn_absorbed === 0 ? 'No' : vorespawn_absorbed === 1 ? 'Yes' : 'Prey Choice') + '
';
- result += '- Egg Type: ' + egg_type + '
';
- result += '- Selective Mode Preference: ' + selective_preference + '
';
- result += '
';
- result += '
';
-
- // END OPTIONS
- // SOUNDS
-
- result += '
';
- result += '';
-
- result += '
';
- result += '
';
- result += '
';
- result += '- Fleshy Belly: ' + (is_wet ? 'Yes' : 'No') + '
';
- result += '- Internal Loop: ' + (wet_loop ? 'Yes' : 'No') + '
';
- result += '- Use Fancy Sounds: ' + (fancy_vore ? 'Yes' : 'No') + '
';
- result += '- Vore Sound: ' + vore_sound + '
';
- result += '- Release Sound: ' + release_sound + '
';
- result += '
';
- result += '
';
-
- // END SOUNDS
- // VISUALS
-
- result += '
';
- result += '';
-
- result += '
';
- result += '
Vore Sprites';
- result += '
';
- result += '- Affect Vore Sprites: ' + (affects_vore_sprites ? 'Yes' : 'No') + '
';
- result += '- Count Absorbed prey for vore sprites: ' + (count_absorbed_prey_for_sprite ? 'Yes' : 'No') + '
';
- result += '- Animation when prey resist: ' + (resist_triggers_animation ? 'Yes' : 'No') + '
';
- result += '- Vore Sprite Size Factor: ' + size_factor_for_sprite + '
';
- result += '- Belly Sprite to affect: ' + belly_sprite_to_affect + '
';
- result += '
';
- result += '
Belly Fullscreens Preview and Coloring';
- result += '
';
- result += '- Color: ' + belly_fullscreen_color + '';
- result += '
';
- result += '
Vore FX';
- result += '
';
- result += '- Disable Prey HUD: ' + (disable_hud ? 'Yes' : 'No') + '
';
- result += '
';
- result += '
';
-
- // END VISUALS
- // INTERACTIONS
-
- result += '';
- result += '';
-
- result += '
';
- result += '
';
- result += '
Belly Interactions (' +
- (escapable ? 'Enabled' : 'Disabled') +
- ')';
- result += '
';
- result += '- Escape Chance: ' + escapechance + '%
';
- result += '- Escape Chance: ' + escapechance_absorbed + '%
';
- result += '- Escape Time: ' + escapetime / 10 + 's
';
- result += '- Transfer Chance: ' + transferchance + '%
';
- result += '- Transfer Location: ' + transferlocation + '
';
- result += '- Secondary Transfer Chance: ' + transferchance_secondary + '%
';
- result += '- Secondary Transfer Location: ' + transferlocation_secondary + '
';
- result += '- Absorb Chance: ' + absorbchance + '%
';
- result += '- Digest Chance: ' + digestchance + '%
';
- result += '- Belch Chance: ' + belchchance + '%
';
- result += '
';
- result += '
';
- result += '
Auto-Transfer Options (' +
- (autotransfer_enabled ? 'Enabled' : 'Disabled') +
- ')';
- result += '
';
- result += '- Auto-Transfer Time: ' + autotransferwait / 10 + 's
';
- result += '- Auto-Transfer Chance: ' + autotransferchance + '%
';
- result += '- Auto-Transfer Location: ' + autotransferlocation + '
';
- result += '- Auto-Transfer Chance: ' + autotransferchance_secondary + '%
';
- result += '- Auto-Transfer Location: ' + autotransferlocation_secondary + '
';
- result += '- Auto-Transfer Min Amount: ' + autotransfer_min_amount + '
';
- result += '- Auto-Transfer Max Amount: ' + autotransfer_max_amount + '
';
- result += '- Auto-Transfer Primary Chance: ' + autotransferchance + '%
';
- result += '- Auto-Transfer Primary Location: ' + autotransferlocation + '
';
- result += '- Auto-Transfer Primary Location Extras: ' + autotransferextralocation.join(', ') + '
';
- result += '- Auto-Transfer Primary Whitelist (Mobs): ' + GetAutotransferFlags(autotransfer_whitelist, true) + '
';
- result += '- Auto-Transfer Primary Whitelist (Items): ' + GetAutotransferFlags(autotransfer_whitelist_items, true) + '
';
- result += '- Auto-Transfer Primary Blacklist (Mobs): ' + GetAutotransferFlags(autotransfer_blacklist, false) + '
';
- result += '- Auto-Transfer Primary Blacklist (Items): ' + GetAutotransferFlags(autotransfer_blacklist_items, false) + '
';
- result += '- Auto-Transfer Secondary Chance: ' + autotransferchance_secondary + '%
';
- result += '- Auto-Transfer Secondary Location: ' + autotransferlocation_secondary + '
';
- result += '- Auto-Transfer Secondary Location Extras: ' + autotransferextralocation_secondary.join(', ') + '
';
- result += '- Auto-Transfer Secondary Whitelist (Mobs): ' + GetAutotransferFlags(autotransfer_secondary_whitelist, true) + '
';
- result += '- Auto-Transfer Secondary Whitelist (Items): ' + GetAutotransferFlags(autotransfer_secondary_whitelist_items, true) + '
';
- result += '- Auto-Transfer Secondary Blacklist (Mobs): ' + GetAutotransferFlags(autotransfer_secondary_blacklist, false) + '
';
- result += '- Auto-Transfer Secondary Blacklist (Items): ' + GetAutotransferFlags(autotransfer_secondary_blacklist_items, false) + '
';
- result += '
';
- result += '
';
-
- // END INTERACTIONS
- // LIQUID OPTIONS
-
- result += '';
- result += '';
-
- result += '
';
- result += '
';
- result += '
';
- result += '- Generate Liquids: ' + (reagentbellymode ? 'On' : 'Off') + '
';
- result += '- Liquid Type: ' + reagent_chosen + '
';
- result += '- Liquid Name: ' + reagent_name + '
';
- result += '- Transfer Verb: ' + reagent_transfer_verb + '
';
- result += '- Generation Time: ' + gen_time_display + '
';
- result += '- Liquid Capacity: ' + custom_max_volume + '
';
- result += '- Slosh Sounds: ' + (vorefootsteps_sounds ? 'On' : 'Off') + '
';
- result += '- Liquid Addons: ' + GetLiquidAddons(reagent_mode_flag_list) + '
';
- result += '
';
- result += '
';
-
- // END LIQUID OPTIONS
- // LIQUID MESSAGES
-
- result += '';
- result += '';
-
- result += '
';
- result += '
';
-
- result += '
'; // Start Div liquidMessagesTabpanel
- result += '
';
-
- result += '
';
- result += '
';
-
- result += '
';
- fullness1_messages?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- fullness2_messages?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- fullness3_messages?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- fullness4_messages?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- fullness5_messages?.forEach((msg) => {
- result += msg + '
';
- });
- result += '
';
-
- result += '
';
- result += '
';
- result += '
'; // End Div liquidMessagesTabpanel
-
- result += '
';
-
- // END LIQUID MESSAGES
-
- result += ' ';
-
- return result;
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportBellyStringHelpers.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportBellyStringHelpers.tsx
deleted file mode 100644
index 7b2278fef0..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportBellyStringHelpers.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import { BooleanLike } from 'tgui-core/react';
-
-import { AddonIcon, AutotransferFlagIcon, ReagentAddonIcon } from './constants';
-
-export const GetAddons = (addons: string[]) => {
- let result: string[] = [];
-
- addons?.forEach((addon) => {
- result.push(
- '' +
- addon +
- '',
- );
- });
-
- if (result.length === 0) {
- result.push('No Addons Set');
- }
-
- return result;
-};
-
-export const GetLiquidAddons = (addons: string[]) => {
- let result: string[] = [];
-
- addons?.forEach((addon) => {
- result.push(
- '' +
- addon +
- '',
- );
- });
-
- if (result.length === 0) {
- result.push('No Addons Set');
- }
-
- return result;
-};
-
-export const GetAutotransferFlags = (
- addons: string[],
- whitelist: BooleanLike,
-) => {
- let result: string[] = [];
-
- addons?.forEach((addon) => {
- result.push(
- '' +
- addon +
- '',
- );
- });
-
- if (result.length === 0) {
- if (whitelist) {
- result.push('Everything');
- } else {
- result.push('Nothing');
- }
- }
-
- return result;
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportDownload.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportDownload.tsx
deleted file mode 100644
index 6361c4048c..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportDownload.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import { useBackend } from 'tgui/backend';
-
-import { Data } from './types';
-import { generateBellyString } from './VorePanelExportBellyString';
-import { getCurrentTimestamp } from './VorePanelExportTimestamp';
-
-export const downloadPrefs = (extension: string) => {
- const { data } = useBackend();
-
- const { db_version, db_repo, mob_name, bellies } = data;
-
- if (!bellies) {
- return;
- }
-
- let datesegment = getCurrentTimestamp();
-
- let filename = mob_name + datesegment + extension;
- let blob;
-
- if (extension === '.html') {
- let style = '';
-
- blob = new Blob(
- [
- '' +
- '' +
- '' +
- '' +
- bellies.length +
- ' Exported Bellies (DB_VER: ' +
- db_repo +
- '-' +
- db_version +
- ')' +
- '' +
- '' +
- style +
- 'Bellies of ' +
- mob_name +
- '
Generated on: ' +
- datesegment +
- '
',
- ],
- {
- type: 'text/html',
- },
- );
- bellies.forEach((belly, i) => {
- blob = new Blob([blob, generateBellyString(belly, i)], {
- type: 'text/html',
- });
- });
- blob = new Blob(
- [
- blob,
- '
',
- '',
- '
',
- ],
- { type: 'text/html' },
- );
- }
-
- if (extension === '.vrdb') {
- blob = new Blob([JSON.stringify(bellies)], { type: 'application/json' });
- }
-
- Byond.saveBlob(blob, filename, extension);
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportTimestamp.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportTimestamp.tsx
deleted file mode 100644
index 84ec6c5269..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/VorePanelExportTimestamp.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-export const getCurrentTimestamp = (): string => {
- let now = new Date();
- let hours = String(now.getHours());
- if (hours.length < 2) {
- hours = '0' + hours;
- }
- let minutes = String(now.getMinutes());
- if (minutes.length < 2) {
- minutes = '0' + minutes;
- }
- let dayofmonth = String(now.getDate());
- if (dayofmonth.length < 2) {
- dayofmonth = '0' + dayofmonth;
- }
- let month = String(now.getMonth() + 1); // 0-11
- if (month.length < 2) {
- month = '0' + month;
- }
- let year = String(now.getFullYear());
-
- return (
- ' ' +
- year +
- '-' +
- month +
- '-' +
- dayofmonth +
- ' (' +
- hours +
- ' ' +
- minutes +
- ')'
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/constants.ts b/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/constants.ts
deleted file mode 100644
index cf3f9ce924..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/constants.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-export const ModeSpan = {
- Hold: 'Hold',
- Digest: 'Digest',
- Absorb: 'Absorb',
- Drain: 'Drain',
- Selective: 'Selective',
- Unabsorb: 'Unabsorb',
- Heal: 'Heal',
- Shrink: 'Shrink',
- Grow: 'Grow',
- 'Size Steal': 'Size Steal',
- 'Encase In Egg': 'Encase In Egg',
-};
-
-export const ItemModeSpan = {
- Hold: 'Item: Hold',
- 'Digest (Food Only)':
- 'Item: Digest (Food Only)',
- Digest: 'Item: Digest',
- 'Digest (Dispersed Damage)':
- 'Item: Digest (Dispersed Damage)',
-};
-
-export const AddonIcon = {
- Numbing: '',
- Stripping: '',
- 'Leave Remains': '',
- Muffles: 'bi-volume-mute',
- 'Affect Worn Items': '',
- 'Jams Sensors': 'bi-wifi-off',
- 'Complete Absorb': '',
-};
-
-export const ReagentAddonIcon = {
- 'Produce Liquids': '',
- 'Digestion Liquids': '',
- 'Absorption Liquids': '',
- 'Draining Liquids': '',
-};
-
-export const AutotransferFlagIcon = {
- Creatures: '',
- Absorbed: '',
- Carbon: '',
- Silicon: '',
- Mobs: '',
- Animals: '',
- Mice: '',
- Dead: '',
- 'Digestable Creatures': '',
- 'Absorbable Creatures': '',
- 'Full Health': '',
- Items: '',
- Trash: '',
- Eggs: '',
- Remains: '',
- 'Indigestible Items': '',
- 'Recyclable Items': '',
- Ores: '',
- 'Clothes and Bags': '',
- Food: '',
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/index.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/index.tsx
deleted file mode 100644
index a2bb9b119b..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/index.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useBackend } from 'tgui/backend';
-import { Window } from 'tgui/layouts';
-import { Button, Section } from 'tgui-core/components';
-
-import { Data } from './types';
-import { downloadPrefs } from './VorePanelExportDownload';
-
-export const VorePanelExport = () => {
- return (
-
-
-
-
-
- );
-};
-
-const VorePanelExportContent = (props) => {
- const { act, data } = useBackend();
-
- const { bellies } = data;
-
- return (
-
-
- downloadPrefs('.html')}>
- Export (HTML)
-
- downloadPrefs('.vrdb')}>
- Export (VRDB)
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/types.ts b/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/types.ts
deleted file mode 100644
index 9b3827b83d..0000000000
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanelExport/types.ts
+++ /dev/null
@@ -1,218 +0,0 @@
-import { BooleanLike } from 'tgui-core/react';
-
-export type Data = {
- db_version: string;
- db_repo: string;
- mob_name: string;
- bellies?: Belly[];
-};
-
-export type Belly = {
- // General Information
- name: string;
- desc: string;
- message_mode: BooleanLike;
- absorbed_desc: string;
- vore_verb: string;
- release_verb: string;
-
- // Controls
- mode: string;
- addons: string[];
- item_mode: string;
-
- // Options
- digest_brute: number;
- digest_burn: number;
- digest_oxy: number;
-
- can_taste: BooleanLike;
- is_feedable: BooleanLike;
- contaminates: BooleanLike;
- contamination_flavor: string;
- contamination_color: string;
- nutrition_percent: number;
- bulge_size: number;
- display_absorbed_examine: BooleanLike;
- save_digest_mode: BooleanLike;
- emote_active: BooleanLike;
- emote_time: number;
- shrink_grow_size: number;
- vorespawn_blacklist: BooleanLike;
- vorespawn_whitelist: string[];
- vorespawn_absorbed: number;
- egg_type: string;
- egg_name: string;
- selective_preference: string;
- recycling: BooleanLike;
- storing_nutrition: BooleanLike;
- entrance_logs: BooleanLike;
- item_digest_logs: BooleanLike;
-
- // Messages
- struggle_messages_outside: string[];
- struggle_messages_inside: string[];
- absorbed_struggle_messages_outside: string[];
- absorbed_struggle_messages_inside: string[];
- escape_attempt_messages_owner: string[];
- escape_attempt_messages_prey: string[];
- escape_messages_owner: string[];
- escape_messages_prey: string[];
- escape_messages_outside: string[];
- escape_item_messages_owner: string[];
- escape_item_messages_prey: string[];
- escape_item_messages_outside: string[];
- escape_fail_messages_owner: string[];
- escape_fail_messages_prey: string[];
- escape_attempt_absorbed_messages_owner: string[];
- escape_attempt_absorbed_messages_prey: string[];
- escape_absorbed_messages_owner: string[];
- escape_absorbed_messages_prey: string[];
- escape_absorbed_messages_outside: string[];
- escape_fail_absorbed_messages_owner: string[];
- escape_fail_absorbed_messages_prey: string[];
- primary_transfer_messages_owner: string[];
- primary_transfer_messages_prey: string[];
- secondary_transfer_messages_owner: string[];
- secondary_transfer_messages_prey: string[];
- primary_autotransfer_messages_owner: string[];
- primary_autotransfer_messages_prey: string[];
- secondary_autotransfer_messages_owner: string[];
- secondary_autotransfer_messages_prey: string[];
- digest_chance_messages_owner: string[];
- digest_chance_messages_prey: string[];
- absorb_chance_messages_owner: string[];
- absorb_chance_messages_prey: string[];
- digest_messages_owner: string[];
- digest_messages_prey: string[];
- absorb_messages_owner: string[];
- absorb_messages_prey: string[];
- unabsorb_messages_owner: string[];
- unabsorb_messages_prey: string[];
- examine_messages: string[];
- examine_messages_absorbed: string[];
-
- // emote_list: string[];
- emotes_digest: string[];
- emotes_hold: string[];
- emotes_holdabsorbed: string[];
- emotes_absorb: string[];
- emotes_heal: string[];
- emotes_drain: string[];
- emotes_steal: string[];
- emotes_egg: string[];
- emotes_shrink: string[];
- emotes_grow: string[];
- emotes_unabsorb: string[];
-
- // Sounds
- is_wet: BooleanLike;
- wet_loop: BooleanLike;
- fancy_vore: BooleanLike;
- vore_sound: string;
- release_sound: string;
- sound_volume: number;
- noise_freq: number;
-
- // Visuals
- affects_vore_sprites: BooleanLike;
- count_absorbed_prey_for_sprite: BooleanLike;
- absorbed_multiplier: number;
- count_liquid_for_sprite: BooleanLike;
- liquid_multiplier: number;
- count_items_for_sprite: BooleanLike;
- item_multiplier: number;
- health_impacts_size: BooleanLike;
- resist_triggers_animation: BooleanLike;
- size_factor_for_sprite: number;
- belly_sprite_to_affect: string;
-
- // Visuals (Belly Fullscreens Preview and Coloring)
- belly_fullscreen: string;
- belly_fullscreen_color: string;
- belly_fullscreen_color2: string;
- belly_fullscreen_color3: string;
- belly_fullscreen_color4: string;
- belly_fullscreen_alpha: number;
- colorization_enabled: BooleanLike;
-
- // Visuals (Vore FX)
- disable_hud: BooleanLike;
-
- // Interactions
- escapable: BooleanLike;
-
- escapechance: number;
- escapechance_absorbed: number;
- escapetime: number;
-
- transferchance: number;
- transferlocation: string;
-
- transferchance_secondary: number;
- transferlocation_secondary: string;
-
- absorbchance: number;
- digestchance: number;
- belchchance: number;
-
- // Interactions (Auto-Transfer)
- autotransferwait: number;
- autotransferchance: number;
- autotransferlocation: string;
- autotransferextralocation: string[];
- autotransfer_enabled: BooleanLike;
- autotransferchance_secondary: number;
- autotransferlocation_secondary: string;
- autotransferextralocation_secondary: string[];
- autotransfer_min_amount: number;
- autotransfer_max_amount: number;
- autotransfer_whitelist: string[];
- autotransfer_blacklist: string[];
- autotransfer_secondary_whitelist: string[];
- autotransfer_secondary_blacklist: string[];
- autotransfer_whitelist_items: string[];
- autotransfer_blacklist_items: string[];
- autotransfer_secondary_whitelist_items: string[];
- autotransfer_secondary_blacklist_items: string[];
-
- // Liquid Options
- show_liquids: BooleanLike;
- reagentbellymode: BooleanLike;
- reagent_chosen: string;
- reagent_name: string;
- reagent_transfer_verb: string;
- gen_time_display: string;
- custom_max_volume: number;
- vorefootsteps_sounds: BooleanLike;
- reagent_mode_flag_list: string[];
- liquid_overlay: BooleanLike;
- max_liquid_level: number;
- reagent_touches: BooleanLike;
- mush_overlay: BooleanLike;
- mush_color: string;
- mush_alpha: number;
- max_mush: number;
- min_mush: number;
- item_mush_val: number;
- custom_reagentcolor: string;
- custom_reagentalpha: number;
- metabolism_overlay: BooleanLike;
- metabolism_mush_ratio: number;
- max_ingested: number;
- custom_ingested_color: string;
- custom_ingested_alpha: number;
-
- // Liquid Messages
- liquid_fullness1_messages: BooleanLike;
- liquid_fullness2_messages: BooleanLike;
- liquid_fullness3_messages: BooleanLike;
- liquid_fullness4_messages: BooleanLike;
- liquid_fullness5_messages: BooleanLike;
-
- fullness1_messages: string[];
- fullness2_messages: string[];
- fullness3_messages: string[];
- fullness4_messages: string[];
- fullness5_messages: string[];
-};
diff --git a/vorestation.dme b/vorestation.dme
index 4a4874f99e..86af304ccb 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -47,7 +47,7 @@
#include "code\__defines\atmos.dm"
#include "code\__defines\atoms_movable.dm"
#include "code\__defines\atoms_movable_ch.dm"
-#include "code\__defines\belly_modes_ch.dm"
+#include "code\__defines\belly_messages.dm"
#include "code\__defines\belly_modes_vr.dm"
#include "code\__defines\blueprints.dm"
#include "code\__defines\borg_overlays.dm"
@@ -105,10 +105,9 @@
#include "code\__defines\mecha.dm"
#include "code\__defines\misc.dm"
#include "code\__defines\misc_ch.dm"
-#include "code\__defines\mob_ch.dm"
#include "code\__defines\mobs.dm"
#include "code\__defines\mobs_yw.dm"
-#include "code\__defines\nif_ch.dm"
+#include "code\__defines\nif.dm"
#include "code\__defines\nifsoft.dm"
#include "code\__defines\objects.dm"
#include "code\__defines\observer.dm"
@@ -146,6 +145,7 @@
#include "code\__defines\simple_mob.dm"
#include "code\__defines\size.dm"
#include "code\__defines\slosh.dm"
+#include "code\__defines\soulcatcher.dm"
#include "code\__defines\sound.dm"
#include "code\__defines\span.dm"
#include "code\__defines\species_languages.dm"
@@ -187,7 +187,6 @@
#include "code\__defines\dcs\flags.dm"
#include "code\__defines\dcs\helpers.dm"
#include "code\__defines\dcs\signals.dm"
-#include "code\__defines\dcs\signals_ch.dm"
#include "code\__defines\dcs\signals\signals_client.dm"
#include "code\__defines\dcs\signals\signals_subsystem.dm"
#include "code\__defines\dcs\signals\signals_turf.dm"
@@ -1365,9 +1364,9 @@
#include "code\game\objects\effects\decals\Cleanable\fuel.dm"
#include "code\game\objects\effects\decals\Cleanable\humans.dm"
#include "code\game\objects\effects\decals\Cleanable\misc.dm"
-#include "code\game\objects\effects\decals\Cleanable\reagent_ch.dm"
#include "code\game\objects\effects\decals\Cleanable\robots.dm"
#include "code\game\objects\effects\decals\Cleanable\tracks.dm"
+#include "code\game\objects\effects\decals\Cleanable\vore.dm"
#include "code\game\objects\effects\decals\posters\bs12.dm"
#include "code\game\objects\effects\decals\posters\polarisposters.dm"
#include "code\game\objects\effects\decals\posters\polarisposters_vr.dm"
@@ -2128,6 +2127,7 @@
#include "code\modules\asset_cache\asset_cache_client.dm"
#include "code\modules\asset_cache\asset_cache_item.dm"
#include "code\modules\asset_cache\asset_list.dm"
+#include "code\modules\asset_cache\assets\belly_assets.dm"
#include "code\modules\asset_cache\assets\browser.dm"
#include "code\modules\asset_cache\assets\circuits.dm"
#include "code\modules\asset_cache\assets\cloning.dm"
@@ -2264,6 +2264,7 @@
#include "code\modules\client\preference_setup\loadout\loadout_head.dm"
#include "code\modules\client\preference_setup\loadout\loadout_head_ch.dm"
#include "code\modules\client\preference_setup\loadout\loadout_head_yw.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_item_tf.dm"
#include "code\modules\client\preference_setup\loadout\loadout_mask.dm"
#include "code\modules\client\preference_setup\loadout\loadout_shoes.dm"
#include "code\modules\client\preference_setup\loadout\loadout_smoking.dm"
@@ -4230,7 +4231,7 @@
#include "code\modules\reagents\Chemistry-Metabolism.dm"
#include "code\modules\reagents\holder\distilling.dm"
#include "code\modules\reagents\holder\holder.dm"
-#include "code\modules\reagents\holder\holder_ch.dm"
+#include "code\modules\reagents\holder\vorebelly.dm"
#include "code\modules\reagents\hoses\connector.dm"
#include "code\modules\reagents\hoses\hose.dm"
#include "code\modules\reagents\hoses\hose_connector.dm"
@@ -4291,6 +4292,7 @@
#include "code\modules\reagents\reagents\drugs.dm"
#include "code\modules\reagents\reagents\food_drinks.dm"
#include "code\modules\reagents\reagents\food_drinks_vr.dm"
+#include "code\modules\reagents\reagents\liquid_belly.dm"
#include "code\modules\reagents\reagents\medicine.dm"
#include "code\modules\reagents\reagents\medicine_ch.dm"
#include "code\modules\reagents\reagents\medicine_vr.dm"
@@ -4607,7 +4609,7 @@
#include "code\modules\vore\eating\belly_dat_vr.dm"
#include "code\modules\vore\eating\belly_import.dm"
#include "code\modules\vore\eating\belly_messages.dm"
-#include "code\modules\vore\eating\belly_obj_ch.dm"
+#include "code\modules\vore\eating\belly_obj_liquids.dm"
#include "code\modules\vore\eating\belly_obj_vr.dm"
#include "code\modules\vore\eating\bellymodes_datum_vr.dm"
#include "code\modules\vore\eating\bellymodes_vr.dm"
@@ -4617,19 +4619,18 @@
#include "code\modules\vore\eating\inbelly_spawn.dm"
#include "code\modules\vore\eating\leave_remains_vr.dm"
#include "code\modules\vore\eating\living_bellies.dm"
-#include "code\modules\vore\eating\living_ch.dm"
#include "code\modules\vore\eating\living_vr.dm"
-#include "code\modules\vore\eating\mob_ch.dm"
#include "code\modules\vore\eating\mob_vr.dm"
#include "code\modules\vore\eating\silicon_vr.dm"
#include "code\modules\vore\eating\simple_animal_vr.dm"
#include "code\modules\vore\eating\slipvore_vr.dm"
+#include "code\modules\vore\eating\soulcatcher.dm"
+#include "code\modules\vore\eating\soulcatcher_mob.dm"
+#include "code\modules\vore\eating\soulcatcher_observer.dm"
#include "code\modules\vore\eating\stumblevore_vr.dm"
#include "code\modules\vore\eating\transforming_vr.dm"
#include "code\modules\vore\eating\vertical_nom_vr.dm"
#include "code\modules\vore\eating\vore_vr.dm"
-#include "code\modules\vore\eating\vorehooks_vr.dm"
-#include "code\modules\vore\eating\vorepanel_ch.dm"
#include "code\modules\vore\eating\vorepanel_vr.dm"
#include "code\modules\vore\fluffstuff\custom_boxes_ch.dm"
#include "code\modules\vore\fluffstuff\custom_boxes_vr.dm"
@@ -4847,7 +4848,6 @@
#include "modular_chomp\code\game\objects\items\devices\radio\encryptionkey.dm"
#include "modular_chomp\code\game\objects\items\devices\radio\headset.dm"
#include "modular_chomp\code\game\objects\items\devices\radio\radio.dm"
-#include "modular_chomp\code\game\objects\items\weapons\capture_crystal.dm"
#include "modular_chomp\code\game\objects\items\weapons\RCD.dm"
#include "modular_chomp\code\game\objects\items\weapons\circutboards\computer\research.dm"
#include "modular_chomp\code\game\objects\items\weapons\melee\shock_maul.dm"
@@ -4872,7 +4872,6 @@
#include "modular_chomp\code\modules\admin\verbs\randomverbs.dm"
#include "modular_chomp\code\modules\admin\verbs\tgui_verbs.dm"
#include "modular_chomp\code\modules\artifice\deadringer.dm"
-#include "modular_chomp\code\modules\asset_cache\belly_assets.dm"
#include "modular_chomp\code\modules\awaymissions\tank.dm"
#include "modular_chomp\code\modules\balloon_alert\balloon_alert.dm"
#include "modular_chomp\code\modules\casino\casino_book.dm"
@@ -4881,7 +4880,6 @@
#include "modular_chomp\code\modules\casino\casino_map_atoms.dm"
#include "modular_chomp\code\modules\client\preferences.dm"
#include "modular_chomp\code\modules\client\preferences_spawnpoints.dm"
-#include "modular_chomp\code\modules\client\preference_setup\loadout\gear_tweaks.dm"
#include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_accessories.dm"
#include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_general.dm"
#include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_gloves_ch.dm"
@@ -4960,7 +4958,6 @@
#include "modular_chomp\code\modules\mining\shelter_atoms_ch.dm"
#include "modular_chomp\code\modules\mining\shelters_ch.dm"
#include "modular_chomp\code\modules\mining\tools.dm"
-#include "modular_chomp\code\modules\mob\mob.dm"
#include "modular_chomp\code\modules\mob\dead\observer\observer.dm"
#include "modular_chomp\code\modules\mob\language\language.dm"
#include "modular_chomp\code\modules\mob\living\emote.dm"
@@ -4968,7 +4965,6 @@
#include "modular_chomp\code\modules\mob\living\living_defines.dm"
#include "modular_chomp\code\modules\mob\living\ooc_notes.dm"
#include "modular_chomp\code\modules\mob\living\carbon\carbon.dm"
-#include "modular_chomp\code\modules\mob\living\carbon\brain\MMI.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\emote.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\human.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\human_defines.dm"
@@ -5143,9 +5139,6 @@
#include "modular_chomp\code\modules\tickets\tickets.dm"
#include "modular_chomp\code\modules\tickets\tickets_player_ui.dm"
#include "modular_chomp\code\modules\tickets\tickets_ui.dm"
-#include "modular_chomp\code\modules\vore\eating\soulcatcher.dm"
-#include "modular_chomp\code\modules\vore\eating\soulcatcher_mob.dm"
-#include "modular_chomp\code\modules\vore\eating\soulcatcher_observer.dm"
#include "modular_chomp\code\modules\vore\resizing\resize.dm"
#include "modular_chomp\code\modules\weapons\melee.dm"
#include "modular_chomp\code\modules\weapons\staves.dm"