mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
[MIRROR] Allow printing whitelisted bodies, but resleeve lock them by force (#9011)
Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> Co-authored-by: Kashargul <KashL@t-online.de>
This commit is contained in:
@@ -29,6 +29,14 @@
|
||||
to_chat(usr,"<span class='danger'>The target's mind is too complex to be affected!</span>")
|
||||
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,"<span class='warning'>A warning pops up on the device, informing you that [M] is dead, and, as such, the mind transfer can not be done.</span>")
|
||||
return
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -237,11 +237,6 @@
|
||||
if(pred.prey_controlled)
|
||||
to_chat(prey, "<span class='warning'>\The [pred] is already dominated, and cannot be controlled at this time.</span>")
|
||||
return
|
||||
if(ishuman(pred))
|
||||
var/mob/living/carbon/human/h = pred
|
||||
if(h.resleeve_lock && ckey != h.resleeve_lock)
|
||||
to_chat(src, "<span class='warning'>\The [h] cannot be impersonated!</span>")
|
||||
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, "<span class='notice'>You attempt to exert your control over \the [pred]...</span>")
|
||||
|
||||
@@ -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, "<span class='warning'>[target] cannot be impersonated!</span>")
|
||||
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, "<span class='warning'>\The [M] cannot be impersonated!</span>")
|
||||
return
|
||||
if(!L.allow_mimicry)
|
||||
to_chat(src, "<span class='warning'>\The [L] cannot be impersonated!</span>")
|
||||
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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 += "<b>Can be resized:</b> [resizable ? "<font color='green'>Allowed</font>" : "<font color='red'>Disallowed</font>"]<br>"
|
||||
dispvoreprefs += "<b>Spontaneous transformation:</b> [allow_spontaneous_tf ? "<font color='green'>Enabled</font>" : "<font color='red'>Disabled</font>"]<br>"
|
||||
dispvoreprefs += "<b>Mind transfer:</b> [allow_mind_transfer ? "<font color='green'>Allowed</font>" : "<font color='red'>Disallowed</font>"]<br>"
|
||||
dispvoreprefs += "<b>Allow Mimicry:</b> [allow_mimicry ? "<font color='green'>Yes</font>" : "<font color='red'>No</font>"]<br>"
|
||||
dispvoreprefs += "<b>Feedable:</b> [feeding ? "<font color='green'>Enabled</font>" : "<font color='red'>Disabled</font>"]<br>"
|
||||
dispvoreprefs += "<b>Receiving liquids:</b> [receive_reagents ? "<font color='green'>Enabled</font>" : "<font color='red'>Disabled</font>"]<br>"
|
||||
dispvoreprefs += "<b>Giving liquids:</b> [give_reagents ? "<font color='green'>Enabled</font>" : "<font color='red'>Disabled</font>"]<br>"
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -118,6 +118,9 @@ export const VoreUserPreferencesMechanical = (props: {
|
||||
<Flex.Item basis="32%" grow={1}>
|
||||
<VoreUserPreferenceItem spec={preferences.eating_privacy_global} />
|
||||
</Flex.Item>
|
||||
<Flex.Item basis="32%" grow={1}>
|
||||
<VoreUserPreferenceItem spec={preferences.allow_mimicry} />
|
||||
</Flex.Item>
|
||||
</Flex>
|
||||
</Section>
|
||||
);
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -106,8 +106,14 @@ export const VoreUserPreferencesMechanical = (props: {
|
||||
<Flex.Item basis="33%">
|
||||
<VoreUserPreferenceItem
|
||||
spec={preferences.mind_transfer}
|
||||
tooltipPosition="top"
|
||||
tooltipPosition="left"
|
||||
/>
|
||||
<Flex.Item basis="33%">
|
||||
<VoreUserPreferenceItem
|
||||
spec={preferences.allow_mimicry}
|
||||
tooltipPosition="right"
|
||||
/>
|
||||
</Flex.Item>
|
||||
</Flex.Item>
|
||||
</Flex>
|
||||
</Section>
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user