mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 03:33:21 +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>")
|
to_chat(usr,"<span class='danger'>The target's mind is too complex to be affected!</span>")
|
||||||
return
|
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?
|
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>")
|
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
|
return
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
transmutation and energy sharing abilities not unlike they lleill, but considerably more limited. Unlike \
|
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."
|
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
|
color_mult = 1
|
||||||
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS
|
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
|
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)
|
for(var/mob/living/carbon/human/M in mob_list)
|
||||||
if(M.z != user.z || get_dist(user,M) > 10)
|
if(M.z != user.z || get_dist(user,M) > 10)
|
||||||
continue
|
continue
|
||||||
if(istype(M) && M.resleeve_lock && M.ckey != M.resleeve_lock)
|
if(!M.allow_mimicry)
|
||||||
continue
|
continue
|
||||||
targets |= M
|
targets |= M
|
||||||
|
|
||||||
|
|||||||
@@ -237,11 +237,6 @@
|
|||||||
if(pred.prey_controlled)
|
if(pred.prey_controlled)
|
||||||
to_chat(prey, "<span class='warning'>\The [pred] is already dominated, and cannot be controlled at this time.</span>")
|
to_chat(prey, "<span class='warning'>\The [pred] is already dominated, and cannot be controlled at this time.</span>")
|
||||||
return
|
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")
|
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
|
return
|
||||||
to_chat(prey, "<span class='notice'>You attempt to exert your control over \the [pred]...</span>")
|
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)
|
/mob/living/simple_mob/vore/morph/proc/assume(atom/movable/target)
|
||||||
var/mob/living/carbon/human/humantarget = 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>")
|
to_chat(src, "<span class='warning'>[target] cannot be impersonated!</span>")
|
||||||
return
|
return
|
||||||
if(morphed)
|
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)
|
var/mob/living/L = tgui_input_list(src, "Select a mob to take over:", "Take Over Prey", possible_mobs)
|
||||||
if(!L)
|
if(!L)
|
||||||
return
|
return
|
||||||
// Adding a ishuman check here, since silicon mobs don't have a resleeve_lock from what I can tell.
|
if(!L.allow_mimicry)
|
||||||
if(ishuman(L))
|
to_chat(src, "<span class='warning'>\The [L] cannot be impersonated!</span>")
|
||||||
var/mob/living/carbon/human/M = L
|
return
|
||||||
if(M.resleeve_lock && ckey != M.resleeve_lock)
|
|
||||||
to_chat(src, "<span class='warning'>\The [M] 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")
|
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.")
|
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")
|
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
|
noisy = client.prefs_vr.noisy
|
||||||
selective_preference = client.prefs_vr.selective_preference
|
selective_preference = client.prefs_vr.selective_preference
|
||||||
eating_privacy_global = client.prefs_vr.eating_privacy_global
|
eating_privacy_global = client.prefs_vr.eating_privacy_global
|
||||||
|
allow_mimicry = client.prefs_vr.allow_mimicry
|
||||||
|
|
||||||
drop_vore = client.prefs_vr.drop_vore
|
drop_vore = client.prefs_vr.drop_vore
|
||||||
stumble_vore = client.prefs_vr.stumble_vore
|
stumble_vore = client.prefs_vr.stumble_vore
|
||||||
|
|||||||
@@ -128,10 +128,15 @@
|
|||||||
//Person OOCly doesn't want people impersonating them
|
//Person OOCly doesn't want people impersonating them
|
||||||
locked = ckeylock
|
locked = ckeylock
|
||||||
|
|
||||||
|
//CHOMPEdit Start, keep the lock
|
||||||
//Prevent people from printing restricted and whitelisted species
|
//Prevent people from printing restricted and whitelisted species
|
||||||
var/datum/species/S = GLOB.all_species["[M.dna.species]"]
|
var/datum/species/S = GLOB.all_species["[M.dna.species]"]
|
||||||
if(S)
|
if(S)
|
||||||
toocomplex = (S.spawn_flags & SPECIES_IS_WHITELISTED) || (S.spawn_flags & SPECIES_IS_RESTRICTED)
|
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
|
//General stuff about them
|
||||||
synthetic = M.isSynthetic()
|
synthetic = M.isSynthetic()
|
||||||
|
|||||||
@@ -33,7 +33,14 @@
|
|||||||
var/datum/dna2/record/R = current_project.mydna
|
var/datum/dna2/record/R = current_project.mydna
|
||||||
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
|
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
|
||||||
if(current_project.locked)
|
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
|
//Fix the external organs
|
||||||
for(var/part in current_project.limb_data)
|
for(var/part in current_project.limb_data)
|
||||||
@@ -191,6 +198,7 @@
|
|||||||
occupant = null
|
occupant = null
|
||||||
if(locked)
|
if(locked)
|
||||||
locked = 0
|
locked = 0
|
||||||
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
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 100 * ((occupant.health + abs(CONFIG_GET(number/health_threshold_dead))) / (occupant.maxHealth + abs(CONFIG_GET(number/health_threshold_dead)))) // CHOMPEdit
|
||||||
return 0
|
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
|
//Synthetic version
|
||||||
/obj/machinery/transhuman/synthprinter
|
/obj/machinery/transhuman/synthprinter
|
||||||
name = "SynthFab 3000"
|
name = "SynthFab 3000"
|
||||||
@@ -293,7 +307,14 @@
|
|||||||
var/datum/dna2/record/R = current_project.mydna
|
var/datum/dna2/record/R = current_project.mydna
|
||||||
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
|
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
|
||||||
if(current_project.locked)
|
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
|
//Fix the external organs
|
||||||
for(var/part in current_project.limb_data)
|
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
|
//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)
|
/mob/living/proc/chat_healthbar(var/mob/living/reciever, onExamine = FALSE, override = FALSE)
|
||||||
if(!reciever) //No one to send it to, don't bother
|
if(!reciever) //No one to send it to, don't bother
|
||||||
return
|
return
|
||||||
@@ -28,52 +87,7 @@
|
|||||||
|
|
||||||
ourpercent = round(ourpercent)
|
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
|
ourbar = chat_progress_bar(ourpercent, FALSE)
|
||||||
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 = "[ourbar] [which_var] - [src.name]"
|
ourbar = "[ourbar] [which_var] - [src.name]"
|
||||||
|
|
||||||
if(stat == UNCONSCIOUS)
|
if(stat == UNCONSCIOUS)
|
||||||
|
|||||||
@@ -270,6 +270,7 @@
|
|||||||
P.digest_pain = src.digest_pain
|
P.digest_pain = src.digest_pain
|
||||||
P.stumble_vore = src.stumble_vore
|
P.stumble_vore = src.stumble_vore
|
||||||
P.eating_privacy_global = src.eating_privacy_global
|
P.eating_privacy_global = src.eating_privacy_global
|
||||||
|
P.allow_mimicry = src.allow_mimicry
|
||||||
|
|
||||||
P.nutrition_message_visible = src.nutrition_message_visible
|
P.nutrition_message_visible = src.nutrition_message_visible
|
||||||
P.nutrition_messages = src.nutrition_messages
|
P.nutrition_messages = src.nutrition_messages
|
||||||
@@ -344,6 +345,7 @@
|
|||||||
food_vore = P.food_vore
|
food_vore = P.food_vore
|
||||||
digest_pain = P.digest_pain
|
digest_pain = P.digest_pain
|
||||||
eating_privacy_global = P.eating_privacy_global
|
eating_privacy_global = P.eating_privacy_global
|
||||||
|
allow_mimicry = P.allow_mimicry
|
||||||
|
|
||||||
nutrition_message_visible = P.nutrition_message_visible
|
nutrition_message_visible = P.nutrition_message_visible
|
||||||
nutrition_messages = P.nutrition_messages
|
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>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>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>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>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>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>"
|
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/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/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/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/allow_mind_transfer = FALSE //Allows ones mind to be taken over or swapped
|
||||||
var/nutrition_message_visible = TRUE
|
var/nutrition_message_visible = TRUE
|
||||||
var/list/nutrition_messages = list(
|
var/list/nutrition_messages = list(
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
|||||||
var/permit_healbelly = TRUE
|
var/permit_healbelly = TRUE
|
||||||
var/noisy = FALSE
|
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/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.
|
// These are 'modifier' prefs, do nothing on their own but pair with drop_prey/drop_pred settings.
|
||||||
var/drop_vore = TRUE
|
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_message_visible = json_from_file["weight_message_visible"]
|
||||||
weight_messages = json_from_file["weight_messages"]
|
weight_messages = json_from_file["weight_messages"]
|
||||||
eating_privacy_global = json_from_file["eating_privacy_global"]
|
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"]
|
vore_sprite_color = json_from_file["vore_sprite_color"]
|
||||||
allow_mind_transfer = json_from_file["allow_mind_transfer"]
|
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
|
weight_message_visible = TRUE
|
||||||
if(isnull(eating_privacy_global))
|
if(isnull(eating_privacy_global))
|
||||||
eating_privacy_global = FALSE
|
eating_privacy_global = FALSE
|
||||||
|
if(isnull(allow_mimicry))
|
||||||
|
allow_mimicry = TRUE
|
||||||
if(isnull(nutrition_messages))
|
if(isnull(nutrition_messages))
|
||||||
nutrition_messages = list(
|
nutrition_messages = list(
|
||||||
"They are starving! You can hear their stomach snarling from across the room!",
|
"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,
|
"weight_messages" = weight_messages,
|
||||||
"eating_privacy_global" = eating_privacy_global,
|
"eating_privacy_global" = eating_privacy_global,
|
||||||
"vore_sprite_color" = vore_sprite_color,
|
"vore_sprite_color" = vore_sprite_color,
|
||||||
|
"allow_mimicry" = allow_mimicry,
|
||||||
"vore_sprite_multiply" = vore_sprite_multiply, //CHOMPEdit
|
"vore_sprite_multiply" = vore_sprite_multiply, //CHOMPEdit
|
||||||
"strip_pref" = strip_pref, //CHOMPEdit
|
"strip_pref" = strip_pref, //CHOMPEdit
|
||||||
"no_latejoin_vore_warning" = no_latejoin_vore_warning, //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_message_visible" = host.weight_message_visible,
|
||||||
"weight_messages" = host.weight_messages,
|
"weight_messages" = host.weight_messages,
|
||||||
"eating_privacy_global" = host.eating_privacy_global,
|
"eating_privacy_global" = host.eating_privacy_global,
|
||||||
|
"allow_mimicry" = host.allow_mimicry,
|
||||||
//CHOMPEdit start, vore sprites
|
//CHOMPEdit start, vore sprites
|
||||||
"belly_rub_target" = host.belly_rub_target,
|
"belly_rub_target" = host.belly_rub_target,
|
||||||
"vore_sprite_color" = host.vore_sprite_color,
|
"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
|
host.eating_privacy_global = host.eating_privacy_global
|
||||||
unsaved_changes = TRUE
|
unsaved_changes = TRUE
|
||||||
return 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")
|
if("toggle_devour")
|
||||||
host.devourable = !host.devourable
|
host.devourable = !host.devourable
|
||||||
if(host.client.prefs_vr)
|
if(host.client.prefs_vr)
|
||||||
|
|||||||
@@ -286,6 +286,7 @@
|
|||||||
new_mob.nutrition_message_visible = nutrition_message_visible
|
new_mob.nutrition_message_visible = nutrition_message_visible
|
||||||
new_mob.allow_spontaneous_tf = allow_spontaneous_tf
|
new_mob.allow_spontaneous_tf = allow_spontaneous_tf
|
||||||
new_mob.eating_privacy_global = eating_privacy_global
|
new_mob.eating_privacy_global = eating_privacy_global
|
||||||
|
new_mob.allow_mimicry = allow_mimicry
|
||||||
new_mob.text_warnings = text_warnings
|
new_mob.text_warnings = text_warnings
|
||||||
new_mob.allow_mind_transfer = allow_mind_transfer
|
new_mob.allow_mind_transfer = allow_mind_transfer
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ export const VoreUserPreferences = (props: {
|
|||||||
nutrition_message_visible,
|
nutrition_message_visible,
|
||||||
weight_message_visible,
|
weight_message_visible,
|
||||||
eating_privacy_global,
|
eating_privacy_global,
|
||||||
|
allow_mimicry,
|
||||||
} = prefs;
|
} = prefs;
|
||||||
|
|
||||||
const preferences = {
|
const preferences = {
|
||||||
@@ -425,6 +426,19 @@ export const VoreUserPreferences = (props: {
|
|||||||
disabled: 'Global Vore Privacy: Loud',
|
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 (
|
return (
|
||||||
|
|||||||
@@ -118,6 +118,9 @@ export const VoreUserPreferencesMechanical = (props: {
|
|||||||
<Flex.Item basis="32%" grow={1}>
|
<Flex.Item basis="32%" grow={1}>
|
||||||
<VoreUserPreferenceItem spec={preferences.eating_privacy_global} />
|
<VoreUserPreferenceItem spec={preferences.eating_privacy_global} />
|
||||||
</Flex.Item>
|
</Flex.Item>
|
||||||
|
<Flex.Item basis="32%" grow={1}>
|
||||||
|
<VoreUserPreferenceItem spec={preferences.allow_mimicry} />
|
||||||
|
</Flex.Item>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Section>
|
</Section>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ export type prefData = {
|
|||||||
weight_message_visible: BooleanLike;
|
weight_message_visible: BooleanLike;
|
||||||
weight_messages: string[];
|
weight_messages: string[];
|
||||||
eating_privacy_global: BooleanLike;
|
eating_privacy_global: BooleanLike;
|
||||||
|
allow_mimicry: BooleanLike;
|
||||||
vore_sprite_color: { stomach: string; 'taur belly': string };
|
vore_sprite_color: { stomach: string; 'taur belly': string };
|
||||||
vore_sprite_multiply: { stomach: BooleanLike; 'taur belly': BooleanLike };
|
vore_sprite_multiply: { stomach: BooleanLike; 'taur belly': BooleanLike };
|
||||||
};
|
};
|
||||||
@@ -203,6 +204,7 @@ export type localPrefs = {
|
|||||||
examine_nutrition: preferenceData;
|
examine_nutrition: preferenceData;
|
||||||
examine_weight: preferenceData;
|
examine_weight: preferenceData;
|
||||||
eating_privacy_global: preferenceData;
|
eating_privacy_global: preferenceData;
|
||||||
|
allow_mimicry: preferenceData;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type preferenceData = {
|
export type preferenceData = {
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ export const VoreUserPreferences = (props: {
|
|||||||
allow_spontaneous_tf,
|
allow_spontaneous_tf,
|
||||||
allow_mind_transfer,
|
allow_mind_transfer,
|
||||||
eating_privacy_global,
|
eating_privacy_global,
|
||||||
|
allow_mimicry,
|
||||||
strip_mechanics_active,
|
strip_mechanics_active,
|
||||||
autotransferable,
|
autotransferable,
|
||||||
liq_rec,
|
liq_rec,
|
||||||
@@ -510,6 +511,19 @@ export const VoreUserPreferences = (props: {
|
|||||||
disabled: 'Global Vore Privacy: Loud',
|
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: {
|
autotransferable: {
|
||||||
action: 'toggle_autotransferable',
|
action: 'toggle_autotransferable',
|
||||||
test: autotransferable,
|
test: autotransferable,
|
||||||
|
|||||||
@@ -106,8 +106,14 @@ export const VoreUserPreferencesMechanical = (props: {
|
|||||||
<Flex.Item basis="33%">
|
<Flex.Item basis="33%">
|
||||||
<VoreUserPreferenceItem
|
<VoreUserPreferenceItem
|
||||||
spec={preferences.mind_transfer}
|
spec={preferences.mind_transfer}
|
||||||
tooltipPosition="top"
|
tooltipPosition="left"
|
||||||
/>
|
/>
|
||||||
|
<Flex.Item basis="33%">
|
||||||
|
<VoreUserPreferenceItem
|
||||||
|
spec={preferences.allow_mimicry}
|
||||||
|
tooltipPosition="right"
|
||||||
|
/>
|
||||||
|
</Flex.Item>
|
||||||
</Flex.Item>
|
</Flex.Item>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Section>
|
</Section>
|
||||||
|
|||||||
@@ -283,6 +283,7 @@ export type prefData = {
|
|||||||
weight_message_visible: BooleanLike;
|
weight_message_visible: BooleanLike;
|
||||||
weight_messages: string[];
|
weight_messages: string[];
|
||||||
eating_privacy_global: BooleanLike;
|
eating_privacy_global: BooleanLike;
|
||||||
|
allow_mimicry: BooleanLike;
|
||||||
belly_rub_target: string | null;
|
belly_rub_target: string | null;
|
||||||
vore_sprite_color: { stomach: string; 'taur belly': string };
|
vore_sprite_color: { stomach: string; 'taur belly': string };
|
||||||
vore_sprite_multiply: { stomach: BooleanLike; 'taur belly': BooleanLike };
|
vore_sprite_multiply: { stomach: BooleanLike; 'taur belly': BooleanLike };
|
||||||
@@ -348,6 +349,7 @@ export type localPrefs = {
|
|||||||
examine_weight: preferenceData;
|
examine_weight: preferenceData;
|
||||||
strippref: preferenceData;
|
strippref: preferenceData;
|
||||||
eating_privacy_global: preferenceData;
|
eating_privacy_global: preferenceData;
|
||||||
|
allow_mimicry: preferenceData;
|
||||||
autotransferable: preferenceData;
|
autotransferable: preferenceData;
|
||||||
liquid_receive: preferenceData;
|
liquid_receive: preferenceData;
|
||||||
liquid_give: preferenceData;
|
liquid_give: preferenceData;
|
||||||
|
|||||||
Reference in New Issue
Block a user