diff --git a/code/game/objects/items/devices/body_snatcher_vr.dm b/code/game/objects/items/devices/body_snatcher_vr.dm
index 7bd5190bd1..62ea3ead47 100644
--- a/code/game/objects/items/devices/body_snatcher_vr.dm
+++ b/code/game/objects/items/devices/body_snatcher_vr.dm
@@ -29,6 +29,14 @@
to_chat(usr,"The target's mind is too complex to be affected!")
return
+ /* CHOMPRemove Start, we have a vore pref for that
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.resleeve_lock && usr.ckey != H.resleeve_lock)
+ to_chat(src, span_danger("[H] cannot be impersonated!"))
+ return
+ *///CHOMPRemove End
+
if(M.stat == DEAD) //Are they dead?
to_chat(usr,"A warning pops up on the device, informing you that [M] is dead, and, as such, the mind transfer can not be done.")
return
diff --git a/code/modules/mob/living/carbon/human/species/lleill/hanner.dm b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm
index 1a684a477b..f63369d232 100644
--- a/code/modules/mob/living/carbon/human/species/lleill/hanner.dm
+++ b/code/modules/mob/living/carbon/human/species/lleill/hanner.dm
@@ -8,7 +8,6 @@
transmutation and energy sharing abilities not unlike they lleill, but considerably more limited. Unlike \
other shapeshifter species, such as proteans or prometheans, Hanner have a typical humanoid set of organs and can not regenerate."
- flags = NO_SCAN
color_mult = 1
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm
index d48b330db1..11e549bbad 100644
--- a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm
+++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm
@@ -130,7 +130,7 @@
for(var/mob/living/carbon/human/M in mob_list)
if(M.z != user.z || get_dist(user,M) > 10)
continue
- if(istype(M) && M.resleeve_lock && M.ckey != M.resleeve_lock)
+ if(!M.allow_mimicry)
continue
targets |= M
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm
index 1f363eed75..55ddda81b3 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/dominated_brain.dm
@@ -237,11 +237,6 @@
if(pred.prey_controlled)
to_chat(prey, "\The [pred] is already dominated, and cannot be controlled at this time.")
return
- if(ishuman(pred))
- var/mob/living/carbon/human/h = pred
- if(h.resleeve_lock && ckey != h.resleeve_lock)
- to_chat(src, "\The [h] cannot be impersonated!")
- return
if(tgui_alert(prey, "You are attempting to take over [pred], are you sure? Ensure that their preferences align with this kind of play.", "Take Over Predator",list("No","Yes")) != "Yes")
return
to_chat(prey, "You attempt to exert your control over \the [pred]...")
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm
index 3c6ea63441..056ebcc563 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm
@@ -99,7 +99,7 @@
/mob/living/simple_mob/vore/morph/proc/assume(atom/movable/target)
var/mob/living/carbon/human/humantarget = target
- if(istype(humantarget) && humantarget.resleeve_lock && ckey != humantarget.resleeve_lock)
+ if(istype(humantarget) && !humantarget.allow_mimicry)
to_chat(src, "[target] cannot be impersonated!")
return
if(morphed)
@@ -272,12 +272,9 @@
var/mob/living/L = tgui_input_list(src, "Select a mob to take over:", "Take Over Prey", possible_mobs)
if(!L)
return
- // Adding a ishuman check here, since silicon mobs don't have a resleeve_lock from what I can tell.
- if(ishuman(L))
- var/mob/living/carbon/human/M = L
- if(M.resleeve_lock && ckey != M.resleeve_lock)
- to_chat(src, "\The [M] cannot be impersonated!")
- return
+ if(!L.allow_mimicry)
+ to_chat(src, "\The [L] cannot be impersonated!")
+ return
if(tgui_alert(src, "You selected [L] to attempt to take over. Are you sure?", "Take Over Prey",list("No","Yes")) == "Yes")
log_admin("[key_name_admin(src)] offered [L] to swap bodies as a morph.")
if(tgui_alert(L, "\The [src] has elected to attempt to take over your body and control you. Is this something you will allow to happen?", "Allow Morph To Take Over",list("No","Yes")) == "Yes")
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 f6c6ef5fef..c1b9696b42 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
@@ -41,6 +41,7 @@
noisy = client.prefs_vr.noisy
selective_preference = client.prefs_vr.selective_preference
eating_privacy_global = client.prefs_vr.eating_privacy_global
+ allow_mimicry = client.prefs_vr.allow_mimicry
drop_vore = client.prefs_vr.drop_vore
stumble_vore = client.prefs_vr.stumble_vore
diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm
index 841e54069a..123f981d24 100644
--- a/code/modules/resleeving/infocore_records.dm
+++ b/code/modules/resleeving/infocore_records.dm
@@ -128,10 +128,15 @@
//Person OOCly doesn't want people impersonating them
locked = ckeylock
+ //CHOMPEdit Start, keep the lock
//Prevent people from printing restricted and whitelisted species
var/datum/species/S = GLOB.all_species["[M.dna.species]"]
if(S)
toocomplex = (S.spawn_flags & SPECIES_IS_WHITELISTED) || (S.spawn_flags & SPECIES_IS_RESTRICTED)
+ // Force ckey locking if species is whitelisted
+ //if((S.spawn_flags & SPECIES_IS_WHITELISTED) || (S.spawn_flags & SPECIES_IS_RESTRICTED))
+ //locked = TRUE
+ //CHOMPEdit End
//General stuff about them
synthetic = M.isSynthetic()
diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm
index 9bc03c19b6..0ffaa908ca 100644
--- a/code/modules/resleeving/machines.dm
+++ b/code/modules/resleeving/machines.dm
@@ -33,7 +33,14 @@
var/datum/dna2/record/R = current_project.mydna
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
if(current_project.locked)
- H.resleeve_lock = current_project.ckey
+ H.resleeve_lock = current_project.ckey //CHOMPAdd, keep the lock
+ /*CHOMPRemove Start
+ if(current_project.ckey)
+ H.resleeve_lock = current_project.ckey
+ else
+ // Ensure even body scans without an attached ckey respect locking
+ H.resleeve_lock = "@badckey"
+ *///CHOMPRemove End
//Fix the external organs
for(var/part in current_project.limb_data)
@@ -191,6 +198,7 @@
occupant = null
if(locked)
locked = 0
+ update_icon()
return
return
@@ -200,6 +208,12 @@
return 100 * ((occupant.health + abs(CONFIG_GET(number/health_threshold_dead))) / (occupant.maxHealth + abs(CONFIG_GET(number/health_threshold_dead)))) // CHOMPEdit
return 0
+/obj/machinery/clonepod/transhuman/examine(mob/user, infix, suffix)
+ . = ..()
+ if(occupant)
+ var/completion = get_completion()
+ . += "Progress: [round(completion)]% [chat_progress_bar(round(completion), TRUE)]"
+
//Synthetic version
/obj/machinery/transhuman/synthprinter
name = "SynthFab 3000"
@@ -293,7 +307,14 @@
var/datum/dna2/record/R = current_project.mydna
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
if(current_project.locked)
- H.resleeve_lock = current_project.ckey
+ H.resleeve_lock = current_project.ckey //CHOMPAdd, keep the lock
+ /*CHOMPRemove Start
+ if(current_project.ckey)
+ H.resleeve_lock = current_project.ckey
+ else
+ // Ensure even body scans without an attached ckey respect locking
+ H.resleeve_lock = "@badckey"
+ *///CHOMPRemove End
//Fix the external organs
for(var/part in current_project.limb_data)
diff --git a/code/modules/vore/chat_healthbars.dm b/code/modules/vore/chat_healthbars.dm
index 272366d9d8..5fe3d85492 100644
--- a/code/modules/vore/chat_healthbars.dm
+++ b/code/modules/vore/chat_healthbars.dm
@@ -1,5 +1,64 @@
//Health bars in the game window would be pretty challenging and I don't know how to do that, so I thought this would be a good alternative
+// Generates the progress bar text
+/proc/chat_progress_bar(percentage, add_color = FALSE)
+ switch(percentage)
+ if(100)
+ . = "|▓▓▓▓▓▓▓▓▓▓|"
+ if(95 to 99)
+ . = "|▓▓▓▓▓▓▓▓▓▒|"
+ if(90 to 94)
+ . = "|▓▓▓▓▓▓▓▓▓░|"
+ if(85 to 89)
+ . = "|▓▓▓▓▓▓▓▓▒░|"
+ if(80 to 84)
+ . = "|▓▓▓▓▓▓▓▓░░|"
+ if(75 to 79)
+ . = "|▓▓▓▓▓▓▓▒░░|"
+ if(70 to 74)
+ . = "|▓▓▓▓▓▓▓░░░|"
+ if(65 to 69)
+ . = "|▓▓▓▓▓▓▒░░░|"
+ if(60 to 64)
+ . = "|▓▓▓▓▓▓░░░░|"
+ if(55 to 59)
+ . = "|▓▓▓▓▓▒░░░░|"
+ if(50 to 54)
+ . = "|▓▓▓▓▓░░░░░|"
+ if(45 to 49)
+ . = "|▓▓▓▓▒░░░░░|"
+ if(40 to 44)
+ . = "|▓▓▓▓░░░░░░|"
+ if(35 to 39)
+ . = "|▓▓▓▒░░░░░░|"
+ if(30 to 34)
+ . = "|▓▓▓░░░░░░░|"
+ if(25 to 29)
+ . = "|▓▓▒░░░░░░░|"
+ if(20 to 24)
+ . = "|▓▓░░░░░░░░|"
+ if(15 to 19)
+ . = "|▓▒░░░░░░░░|"
+ if(10 to 14)
+ . = "|▓░░░░░░░░░|"
+ if(5 to 9)
+ . = "|▒░░░░░░░░░|"
+ if(0)
+ . = "|░░░░░░░░░░|"
+ else
+ . = "!░░░░░░░░░░!"
+
+ if(add_color)
+ switch(percentage)
+ if(75 to 100)
+ . = span_green(.)
+ if(50 to 75)
+ . = span_yellow(.)
+ if(25 to 50)
+ . = span_orange(.)
+ else
+ . = span_red(.)
+
/mob/living/proc/chat_healthbar(var/mob/living/reciever, onExamine = FALSE, override = FALSE)
if(!reciever) //No one to send it to, don't bother
return
@@ -28,52 +87,7 @@
ourpercent = round(ourpercent)
- switch(ourpercent) //I thought about trying to do this in a more automated way but my brain isn't very large so enjoy my stupid switch statement
- if(100)
- ourbar = "|▓▓▓▓▓▓▓▓▓▓|"
- if(95 to 99)
- ourbar = "|▓▓▓▓▓▓▓▓▓▒|"
- if(90 to 94)
- ourbar = "|▓▓▓▓▓▓▓▓▓░|"
- if(85 to 89)
- ourbar = "|▓▓▓▓▓▓▓▓▒░|"
- if(80 to 84)
- ourbar = "|▓▓▓▓▓▓▓▓░░|"
- if(75 to 79)
- ourbar = "|▓▓▓▓▓▓▓▒░░|"
- if(70 to 74)
- ourbar = "|▓▓▓▓▓▓▓░░░|"
- if(65 to 69)
- ourbar = "|▓▓▓▓▓▓▒░░░|"
- if(60 to 64)
- ourbar = "|▓▓▓▓▓▓░░░░|"
- if(55 to 59)
- ourbar = "|▓▓▓▓▓▒░░░░|"
- if(50 to 54)
- ourbar = "|▓▓▓▓▓░░░░░|"
- if(45 to 49)
- ourbar = "|▓▓▓▓▒░░░░░|"
- if(40 to 44)
- ourbar = "|▓▓▓▓░░░░░░|"
- if(35 to 39)
- ourbar = "|▓▓▓▒░░░░░░|"
- if(30 to 34)
- ourbar = "|▓▓▓░░░░░░░|"
- if(25 to 29)
- ourbar = "|▓▓▒░░░░░░░|"
- if(20 to 24)
- ourbar = "|▓▓░░░░░░░░|"
- if(15 to 19)
- ourbar = "|▓▒░░░░░░░░|"
- if(10 to 14)
- ourbar = "|▓░░░░░░░░░|"
- if(5 to 9)
- ourbar = "|▒░░░░░░░░░|"
- if(0)
- ourbar = "|░░░░░░░░░░|"
- else
- ourbar = "!░░░░░░░░░░!"
-
+ ourbar = chat_progress_bar(ourpercent, FALSE)
ourbar = "[ourbar] [which_var] - [src.name]"
if(stat == UNCONSCIOUS)
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index a91023b8e3..f7aed38ce8 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -270,6 +270,7 @@
P.digest_pain = src.digest_pain
P.stumble_vore = src.stumble_vore
P.eating_privacy_global = src.eating_privacy_global
+ P.allow_mimicry = src.allow_mimicry
P.nutrition_message_visible = src.nutrition_message_visible
P.nutrition_messages = src.nutrition_messages
@@ -344,6 +345,7 @@
food_vore = P.food_vore
digest_pain = P.digest_pain
eating_privacy_global = P.eating_privacy_global
+ allow_mimicry = P.allow_mimicry
nutrition_message_visible = P.nutrition_message_visible
nutrition_messages = P.nutrition_messages
@@ -1355,6 +1357,7 @@
dispvoreprefs += "Can be resized: [resizable ? "Allowed" : "Disallowed"]
"
dispvoreprefs += "Spontaneous transformation: [allow_spontaneous_tf ? "Enabled" : "Disabled"]
"
dispvoreprefs += "Mind transfer: [allow_mind_transfer ? "Allowed" : "Disallowed"]
"
+ dispvoreprefs += "Allow Mimicry: [allow_mimicry ? "Yes" : "No"]
"
dispvoreprefs += "Feedable: [feeding ? "Enabled" : "Disabled"]
"
dispvoreprefs += "Receiving liquids: [receive_reagents ? "Enabled" : "Disabled"]
"
dispvoreprefs += "Giving liquids: [give_reagents ? "Enabled" : "Disabled"]
"
diff --git a/code/modules/vore/eating/mob_vr.dm b/code/modules/vore/eating/mob_vr.dm
index 73ef84637b..3895f38759 100644
--- a/code/modules/vore/eating/mob_vr.dm
+++ b/code/modules/vore/eating/mob_vr.dm
@@ -27,6 +27,7 @@
var/selective_preference = DM_DEFAULT // Preference for selective bellymode
var/text_warnings = TRUE // Allows us to dismiss the text limit warning messages after viewing it once per round
var/eating_privacy_global = FALSE // Makes eating attempt/success messages only reach for subtle range if true, overwritten by belly-specific var
+ var/allow_mimicry = TRUE // Allows mimicking their character
var/allow_mind_transfer = FALSE //Allows ones mind to be taken over or swapped
var/nutrition_message_visible = TRUE
var/list/nutrition_messages = list(
diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm
index 1834e9d28d..7546f5bab8 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore_vr.dm
@@ -53,6 +53,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/permit_healbelly = TRUE
var/noisy = FALSE
var/eating_privacy_global = FALSE //Makes eating attempt/success messages only reach for subtle range if true, overwritten by belly-specific var
+ var/allow_mimicry = TRUE
// These are 'modifier' prefs, do nothing on their own but pair with drop_prey/drop_pred settings.
var/drop_vore = TRUE
@@ -220,6 +221,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
weight_message_visible = json_from_file["weight_message_visible"]
weight_messages = json_from_file["weight_messages"]
eating_privacy_global = json_from_file["eating_privacy_global"]
+ allow_mimicry = json_from_file["allow_mimicry"]
vore_sprite_color = json_from_file["vore_sprite_color"]
allow_mind_transfer = json_from_file["allow_mind_transfer"]
@@ -301,6 +303,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
weight_message_visible = TRUE
if(isnull(eating_privacy_global))
eating_privacy_global = FALSE
+ if(isnull(allow_mimicry))
+ allow_mimicry = TRUE
if(isnull(nutrition_messages))
nutrition_messages = list(
"They are starving! You can hear their stomach snarling from across the room!",
@@ -424,6 +428,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"weight_messages" = weight_messages,
"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
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 2508958bb8..1959aeb620 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -549,6 +549,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"weight_message_visible" = host.weight_message_visible,
"weight_messages" = host.weight_messages,
"eating_privacy_global" = host.eating_privacy_global,
+ "allow_mimicry" = host.allow_mimicry,
//CHOMPEdit start, vore sprites
"belly_rub_target" = host.belly_rub_target,
"vore_sprite_color" = host.vore_sprite_color,
@@ -1946,6 +1947,12 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
host.eating_privacy_global = host.eating_privacy_global
unsaved_changes = TRUE
return TRUE
+ if("toggle_mimicry")
+ host.allow_mimicry = !host.allow_mimicry
+ if(host.client.prefs_vr)
+ host.client.prefs_vr.allow_mimicry = host.allow_mimicry
+ unsaved_changes = TRUE
+ return TRUE
if("toggle_devour")
host.devourable = !host.devourable
if(host.client.prefs_vr)
diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm
index 2104bde8d7..8dc571d027 100644
--- a/code/modules/vore/mouseray.dm
+++ b/code/modules/vore/mouseray.dm
@@ -286,6 +286,7 @@
new_mob.nutrition_message_visible = nutrition_message_visible
new_mob.allow_spontaneous_tf = allow_spontaneous_tf
new_mob.eating_privacy_global = eating_privacy_global
+ new_mob.allow_mimicry = allow_mimicry
new_mob.text_warnings = text_warnings
new_mob.allow_mind_transfer = allow_mind_transfer
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx
index e6a44e74b0..0f10b6e0e3 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx
@@ -41,6 +41,7 @@ export const VoreUserPreferences = (props: {
nutrition_message_visible,
weight_message_visible,
eating_privacy_global,
+ allow_mimicry,
} = prefs;
const preferences = {
@@ -425,6 +426,19 @@ export const VoreUserPreferences = (props: {
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',
+ },
+ },
};
return (
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx
index 8433d9dab9..51957ada93 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx
@@ -118,6 +118,9 @@ export const VoreUserPreferencesMechanical = (props: {
+
+
+
);
diff --git a/tgui/packages/tgui/interfaces/VorePanel/types.ts b/tgui/packages/tgui/interfaces/VorePanel/types.ts
index 508d0fb6f0..0ae4e710e5 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/types.ts
+++ b/tgui/packages/tgui/interfaces/VorePanel/types.ts
@@ -172,6 +172,7 @@ export type prefData = {
weight_message_visible: BooleanLike;
weight_messages: string[];
eating_privacy_global: BooleanLike;
+ allow_mimicry: BooleanLike;
vore_sprite_color: { stomach: string; 'taur belly': string };
vore_sprite_multiply: { stomach: BooleanLike; 'taur belly': BooleanLike };
};
@@ -203,6 +204,7 @@ export type localPrefs = {
examine_nutrition: preferenceData;
examine_weight: preferenceData;
eating_privacy_global: preferenceData;
+ allow_mimicry: preferenceData;
};
export type preferenceData = {
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferences.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferences.tsx
index a9e4e57443..980140c2a8 100644
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferences.tsx
+++ b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferences.tsx
@@ -48,6 +48,7 @@ export const VoreUserPreferences = (props: {
allow_spontaneous_tf,
allow_mind_transfer,
eating_privacy_global,
+ allow_mimicry,
strip_mechanics_active,
autotransferable,
liq_rec,
@@ -510,6 +511,19 @@ export const VoreUserPreferences = (props: {
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,
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
index 6aefde15ac..49d8f52e49 100644
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
+++ b/tgui/packages/tgui/interfaces/chompstation/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical.tsx
@@ -106,8 +106,14 @@ export const VoreUserPreferencesMechanical = (props: {
+
+
+
diff --git a/tgui/packages/tgui/interfaces/chompstation/VorePanel/types.ts b/tgui/packages/tgui/interfaces/chompstation/VorePanel/types.ts
index c6a31bca97..6623456592 100644
--- a/tgui/packages/tgui/interfaces/chompstation/VorePanel/types.ts
+++ b/tgui/packages/tgui/interfaces/chompstation/VorePanel/types.ts
@@ -283,6 +283,7 @@ export type prefData = {
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 };
@@ -348,6 +349,7 @@ export type localPrefs = {
examine_weight: preferenceData;
strippref: preferenceData;
eating_privacy_global: preferenceData;
+ allow_mimicry: preferenceData;
autotransferable: preferenceData;
liquid_receive: preferenceData;
liquid_give: preferenceData;