diff --git a/code/game/objects/items/devices/body_snatcher_vr.dm b/code/game/objects/items/devices/body_snatcher_vr.dm
index c5d0456f5ba..8239ec65c37 100644
--- a/code/game/objects/items/devices/body_snatcher_vr.dm
+++ b/code/game/objects/items/devices/body_snatcher_vr.dm
@@ -25,6 +25,10 @@
to_chat(usr,"A warning pops up on the device, informing you that [M] appears braindead.")
return
+ if(!M.allow_mind_transfer)
+ to_chat(usr,"The target's mind is too complex to be affected!")
+ return
+
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/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index 38142fc4667..5e17e9cc99a 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -4873,6 +4873,7 @@
/mob/living/simple_mob/slime
composition_reagent = "slimejelly"
+ allow_mind_transfer = TRUE
/mob/living/simple_mob
var/kitchen_tag = "animal" //Used for cooking with animals
diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm
index 307f2de2047..e8540dba548 100644
--- a/code/modules/mob/living/bot/bot.dm
+++ b/code/modules/mob/living/bot/bot.dm
@@ -41,6 +41,8 @@
var/frustration = 0
var/max_frustration = 0
+ allow_mind_transfer = TRUE
+
/mob/living/bot/New()
..()
//update_icons() //VOREstation edit: moved to Init
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 bcc4d8558a5..4bcfc145a16 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
@@ -60,6 +60,8 @@
var/picked_color = FALSE
+ allow_mind_transfer = TRUE
+
can_enter_vent_with = list(
/obj/item/weapon/implant,
/obj/item/device/radio/borg,
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
index d2631cb1ec1..49a22fb990c 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
@@ -117,6 +117,8 @@
/obj/item/stack/material/chitin = 1\
)
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/animal/giant_spider/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm
index 6450259f9c1..ea32372b329 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm
@@ -2,4 +2,5 @@
// They can also be displaced by all mobs.
/mob/living/simple_mob/animal/passive
ai_holder_type = /datum/ai_holder/simple_mob/passive
- mob_bump_flag = 0
\ No newline at end of file
+ mob_bump_flag = 0
+ allow_mind_transfer = TRUE
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
index be88baab273..6ef4f5b0093 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
@@ -3,6 +3,7 @@
minbodytemp = 175
cold_resist = 0.75
heat_resist = -0.5
+ allow_mind_transfer = TRUE
tame_items = list(
/obj/item/weapon/reagent_containers/food/snacks/crabmeat = 20,
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm
index 9330af19840..4356f778f2f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm
@@ -27,6 +27,8 @@
say_list_type = /datum/say_list/bear
+ allow_mind_transfer = TRUE
+
/datum/say_list/bear
speak = list("RAWR!","Rawr!","GRR!","Growl!")
emote_see = list("stares ferociously", "stomps")
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 9b62bc7da49..4611e3fe609 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/squirrel.dm
@@ -52,6 +52,8 @@
var/do_seasons = TRUE
var/picked_color = FALSE
+ allow_mind_transfer = TRUE
+
/////////////////////////////////////// Vore stuff///////////////////////////////////////////
swallowTime = 4 SECONDS
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 6d6328dfeff..9d67740a5c6 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/bat.dm
@@ -24,6 +24,8 @@
faction = "vampire"
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/bat
vore_active = 1
@@ -55,4 +57,3 @@
B.escapechance = 15
B.selective_preference = DM_DRAIN
B.escape_stun = 5
-
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bee.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bee.dm
index 010dbafed19..9424d0b7949 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/bee.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/bee.dm
@@ -44,6 +44,8 @@
var/poison_chance = 10 // Chance for injection to occur.
var/poison_per_bite = 1 // Amount added per injection.
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/bee/Process_Spacemove(var/check_drift = 0)
return 1 //No drifting in space for space bee!
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 d3ad0c3c875..eb9a6199fdf 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
@@ -73,6 +73,8 @@
loot_list = list(/obj/item/borg/upgrade/basic/syndicate = 6, /obj/item/borg/upgrade/basic/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6)
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi
name = "corrupt corrupt hound"
desc = "Bad boy machine broke as well. Seems an attempt was made to achieve a less threatening look, and this one is definitely having some conflicting feelings about it."
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 8ad2e26f1dc..e2f32e3790d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm
@@ -59,6 +59,8 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee/deathclaw
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/aggressive/deathclaw
vore_active = 1
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm
index c1f0068abff..c9c42899814 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm
@@ -39,6 +39,8 @@
max_n2 = 0
minbodytemp = 0
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/aggressive/dino
vore_active = 1
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 f5e93af8220..6058a4320dd 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
@@ -194,6 +194,10 @@
to_chat(prey, "You cannot do that in your current state.")
return
+ if(!pred.allow_mind_transfer)
+ to_chat(prey, "[pred] is unable to be dominated.")
+ return
+
if(!pred.ckey)
to_chat(prey, "\The [pred] isn't able to be dominated.")
return
@@ -316,7 +320,7 @@
var/list/possible_mobs = list()
for(var/obj/belly/B in src.vore_organs)
for(var/mob/living/L in B)
- if(isliving(L) && L.ckey)
+ if(isliving(L) && L.ckey && L.allow_mind_transfer)
possible_mobs |= L
else
continue
@@ -327,6 +331,9 @@
if(!input)
return
var/mob/living/M = input
+ if(!M.allow_mind_transfer) //check if the dominated mob pref is enabled
+ to_chat(src, "[M] is unable to be dominated.")
+ return
if(tgui_alert(src, "You selected [M] to attempt to dominate. Are you sure?", "Dominate Prey",list("No","Yes")) != "Yes")
return
log_admin("[key_name_admin(src)] offered to use dominate prey on [M] ([M.ckey]).")
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 297bb7a7d31..7766b7fdc88 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/fennec.dm
@@ -52,6 +52,8 @@
say_list_type = /datum/say_list/fennec
ai_holder_type = /datum/ai_holder/simple_mob/passive
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/fennec
vore_active = 1
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/fennix.dm b/code/modules/mob/living/simple_mob/subtypes/vore/fennix.dm
index 7d16df1049a..d6924a090d7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/fennix.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/fennix.dm
@@ -27,6 +27,8 @@
say_list_type = /datum/say_list/fennix
ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative
+ allow_mind_transfer = TRUE
+
/datum/say_list/fennix
speak = list("SQUEL!","SQEL?","Skree.")
emote_hear = list("Screeeeecheeeeessss!","Chirrup.")
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm
index dfa3bfe5419..f7c40f8b0ce 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm
@@ -44,6 +44,8 @@
special_attack_max_range = 5
special_attack_cooldown = 100
+ allow_mind_transfer = TRUE
+
// Pepe is love, not hate.
/mob/living/simple_mob/vore/aggressive/frog/New()
if(rand(1,1000000) == 1)
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 afe0c96324e..2bcf95cf814 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm
@@ -35,6 +35,8 @@
say_list_type = /datum/say_list/horse
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/horse/big
name = "horse"
icon_state = "horse"
@@ -194,4 +196,4 @@
holder.set_dir(moving_to)
holder.IMove(get_step(holder,moving_to))
wander_delay = base_wander_delay
- ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE)
\ No newline at end of file
+ ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE)
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm b/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm
index 00e360e9d81..4a4ab6c1181 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm
@@ -27,6 +27,8 @@
max_n2 = 0
minbodytemp = 0
+ allow_mind_transfer = TRUE
+
// Activate Noms!
vore_active = 1
vore_pounce_chance = 0
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm
index 4ae558a9fd6..aca3e82b3a8 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm
@@ -47,6 +47,8 @@
var/tamed = 0
var/tame_chance = 50 //It's a fiddy-fiddy default you may get a buddy pal or you may get mauled and ate. Win-win!
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/otie
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 2ec34f4c3db..78e01d66432 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm
@@ -58,6 +58,8 @@
maxHealth = 100
health = 100
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/pakkun/Life()
. = ..()
if(client)
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 2a3bf5cf25f..5cdcac41690 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm
@@ -42,6 +42,8 @@
say_list_type = /datum/say_list/panther
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/aggressive/panther
vore_active = 1
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 e02075c4cbc..baf40f32dd9 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/rabbit.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/rabbit.dm
@@ -43,6 +43,8 @@
vore_default_mode = DM_HOLD
vore_icons = SA_ICON_LIVING
+ allow_mind_transfer = TRUE
+
var/body_color //brown, black and white, leave blank for random
var/grumpiness = 0 // This determines how grumpy we are. Pet us to increase it, leave us alone to decrease.
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 95769934ee6..5ad3ffd2b8c 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/raptor.dm
@@ -48,6 +48,8 @@
"raptorwhite"
)
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/raptor
vore_bump_chance = 25
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 c7e3e71fca8..ea72824e422 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm
@@ -70,6 +70,8 @@
say_list_type = /datum/say_list/rat
ai_holder_type = /datum/ai_holder/simple_mob/melee/rat
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/aggressive/rat/init_vore()
..()
var/obj/belly/B = vore_selected
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/redpanda.dm b/code/modules/mob/living/simple_mob/subtypes/vore/redpanda.dm
index 1ab50769eaa..dc989894055 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/redpanda.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/redpanda.dm
@@ -28,6 +28,8 @@
say_list_type = /datum/say_list/redpanda
ai_holder_type = /datum/ai_holder/simple_mob/passive
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/redpanda
vore_active = 1
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 8a1cb239392..316ae35d285 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/scel.dm
@@ -56,6 +56,8 @@
"scel_green"
)
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/scel/New()
..()
if(random_skin)
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm
index 36fb413b100..4c8c0b6e47f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm
@@ -84,6 +84,8 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee
say_list_type = /datum/say_list/sect_drone
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/sect_drone/Login()
. = ..()
verbs |= /mob/living/simple_mob/vore/sect_drone/proc/set_abdomen_color
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm
index bec6074f058..6aed85c9561 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm
@@ -85,6 +85,8 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee
say_list_type = /datum/say_list/sect_queen
+ allow_mind_transfer = TRUE
+
/mob/living/simple_mob/vore/sect_queen/Login()
. = ..()
verbs |= /mob/living/simple_mob/vore/sect_queen/proc/set_abdomen_color
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 4b381ec462d..aeba46b1ec4 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm
@@ -54,6 +54,8 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/aggressive/giant_snake
vore_active = 1
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 8fe16269765..8cf651e69a6 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm
@@ -51,6 +51,7 @@ List of things solar grubs should be able to do:
var/shock_chance = 10 // Beware
var/tracked = FALSE
+ allow_mind_transfer = TRUE
glow_override = TRUE
/datum/say_list/solargrub
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 229e0430eb2..ed1467d2699 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
@@ -46,6 +46,7 @@
show_vore_fx = client.prefs_vr.show_vore_fx
step_mechanics_pref = client.prefs_vr.step_mechanics_pref
pickup_pref = client.prefs_vr.pickup_pref
+ allow_mind_transfer = client.prefs_vr.allow_mind_transfer
/mob/living/simple_mob/proc/set_name()
set name = "Set Name"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm b/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm
index a98e5592e71..53e68d59a4d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm
@@ -31,6 +31,8 @@
has_hands = 1
+ allow_mind_transfer = TRUE
+
// Nomnomn
/mob/living/simple_mob/vore/weretiger
vore_active = 1
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 890ab933c4d..a9d20b8cf9f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm
@@ -33,6 +33,8 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
catalogue_data = list(/datum/category_item/catalogue/fauna/wolf)
+ allow_mind_transfer = TRUE
+
// Activate Noms!
/mob/living/simple_mob/vore/wolf
vore_active = 1
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/xeno_vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/xeno_vore.dm
index b09c5c3ff8a..9d673bd73b3 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/xeno_vore.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/xeno_vore.dm
@@ -28,7 +28,7 @@
maxHealth = 150
health = 150
see_in_dark = 10
-
+
//Something something, phoron mutation.
min_oxy = 0
max_oxy = 0
@@ -64,5 +64,7 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee
say_list_type = /datum/say_list/xeno_defanged
+ allow_mind_transfer = TRUE
+
/datum/say_list/xeno_defanged
- say_got_target = list("hisses angrily!")
\ No newline at end of file
+ say_got_target = list("hisses angrily!")
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 447bf1b260e..6fcc6f68d86 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -264,6 +264,7 @@
P.nutrition_messages = src.nutrition_messages
P.weight_message_visible = src.weight_message_visible
P.weight_messages = src.weight_messages
+ P.allow_mind_transfer = src.allow_mind_transfer
P.vore_sprite_color = istype(src, /mob/living/carbon/human) ? src:vore_sprite_color : null
@@ -316,6 +317,7 @@
nutrition_messages = P.nutrition_messages
weight_message_visible = P.weight_message_visible
weight_messages = P.weight_messages
+ allow_mind_transfer = P.allow_mind_transfer
if (istype(src, /mob/living/carbon/human))
@@ -1135,6 +1137,7 @@
dispvoreprefs += "Food Vore: [food_vore ? "Enabled" : "Disabled"]
"
dispvoreprefs += "Inbelly Spawning: [allow_inbelly_spawning ? "Allowed" : "Disallowed"]
"
dispvoreprefs += "Spontaneous transformation: [allow_spontaneous_tf ? "Enabled" : "Disabled"]
"
+ dispvoreprefs += "Mind transfer: [allow_mind_transfer ? "Allowed" : "Disallowed"]
"
dispvoreprefs += "Can be stepped on/over: [step_mechanics_pref ? "Allowed" : "Disallowed"]
"
dispvoreprefs += "Can be picked up: [pickup_pref ? "Allowed" : "Disallowed"]
"
dispvoreprefs += "Global Vore Privacy is: [eating_privacy_global ? "Subtle" : "Loud"]
"
diff --git a/code/modules/vore/eating/mob_vr.dm b/code/modules/vore/eating/mob_vr.dm
index 7567b3beb36..a49de81205e 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_mind_transfer = FALSE //Allows ones mind to be taken over or swapped
var/nutrition_message_visible = TRUE
var/list/nutrition_messages = list(
"They are starving! You can hear their stomach snarling from across the room!",
diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm
index d7fe76ed5a2..3a255108761 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore_vr.dm
@@ -70,6 +70,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/pickup_pref = TRUE
var/vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000")
+ var/allow_mind_transfer = FALSE
var/list/belly_prefs = list()
var/vore_taste = "nothing in particular"
@@ -196,6 +197,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
weight_messages = json_from_file["weight_messages"]
eating_privacy_global = json_from_file["eating_privacy_global"]
vore_sprite_color = json_from_file["vore_sprite_color"]
+ allow_mind_transfer = json_from_file["allow_mind_transfer"]
//Quick sanitize
if(isnull(digestable))
@@ -284,6 +286,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
weight_messages.Add("")
if(isnull(vore_sprite_color))
vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000")
+ if(isnull(allow_mind_transfer))
+ allow_mind_transfer = FALSE
return TRUE
/datum/vore_preferences/proc/save_vore()
@@ -317,6 +321,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"slip_vore" = slip_vore,
"stumble_vore" = stumble_vore,
"throw_vore" = throw_vore,
+ "allow_mind_transfer" = allow_mind_transfer,
"food_vore" = food_vore,
"digest_pain" = digest_pain,
"nutrition_message_visible" = nutrition_message_visible,
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index bed7a391fd8..214bfe926a7 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -335,6 +335,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
"step_mechanics_active" = host.step_mechanics_pref,
"pickup_mechanics_active" = host.pickup_pref,
"noisy" = host.noisy,
+ "allow_mind_transfer" = host.allow_mind_transfer,
"drop_vore" = host.drop_vore,
"slip_vore" = host.slip_vore,
"stumble_vore" = host.stumble_vore,
@@ -569,6 +570,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
+ if("toggle_allow_mind_transfer")
+ host.allow_mind_transfer = !host.allow_mind_transfer
+ if(host.client.prefs_vr)
+ host.client.prefs_vr.allow_mind_transfer = host.allow_mind_transfer
+ unsaved_changes = TRUE
+ return TRUE
if("toggle_healbelly")
host.permit_healbelly = !host.permit_healbelly
if(host.client.prefs_vr)
diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm
index 3e3ead048e2..997f79d67a8 100644
--- a/code/modules/vore/mouseray.dm
+++ b/code/modules/vore/mouseray.dm
@@ -250,6 +250,7 @@
new_mob.allow_spontaneous_tf = allow_spontaneous_tf
new_mob.eating_privacy_global = eating_privacy_global
new_mob.text_warnings = text_warnings
+ new_mob.allow_mind_transfer = allow_mind_transfer
/////SUBTYPES/////
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx.tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx.tsx
index 0913c9fb294..a58473ff2f5 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx.tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferences.tsx.tsx
@@ -28,6 +28,7 @@ export const VoreUserPreferences = (props: {
can_be_drop_pred,
allow_inbelly_spawning,
allow_spontaneous_tf,
+ allow_mind_transfer,
step_mechanics_active,
pickup_mechanics_active,
noisy,
@@ -367,6 +368,21 @@ export const VoreUserPreferences = (props: {
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,
diff --git a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx
index 21d32e32fdb..8433d9dab9a 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx
+++ b/tgui/packages/tgui/interfaces/VorePanel/VoreUserPreferencesTabs/VoreUserPreferencesMechanical .tsx
@@ -112,7 +112,10 @@ export const VoreUserPreferencesMechanical = (props: {
Selective Mode Preference
-
+
+
+
+
diff --git a/tgui/packages/tgui/interfaces/VorePanel/types.ts b/tgui/packages/tgui/interfaces/VorePanel/types.ts
index 9d62b52dcb8..508d0fb6f00 100644
--- a/tgui/packages/tgui/interfaces/VorePanel/types.ts
+++ b/tgui/packages/tgui/interfaces/VorePanel/types.ts
@@ -160,6 +160,7 @@ export type prefData = {
step_mechanics_active: BooleanLike;
pickup_mechanics_active: BooleanLike;
noisy: BooleanLike;
+ allow_mind_transfer: BooleanLike;
drop_vore: BooleanLike;
slip_vore: BooleanLike;
stumble_vore: BooleanLike;
@@ -198,6 +199,7 @@ export type localPrefs = {
remains: preferenceData;
pickuppref: preferenceData;
spontaneous_tf: preferenceData;
+ mind_transfer: preferenceData;
examine_nutrition: preferenceData;
examine_weight: preferenceData;
eating_privacy_global: preferenceData;