diff --git a/code/game/objects/items/devices/body_snatcher_vr.dm b/code/game/objects/items/devices/body_snatcher_vr.dm index c5d0456f5b..28332079f8 100644 --- a/code/game/objects/items/devices/body_snatcher_vr.dm +++ b/code/game/objects/items/devices/body_snatcher_vr.dm @@ -31,7 +31,12 @@ var/choice = tgui_alert(usr,"This will swap your mind with the target's mind. This will result in them controlling your body, and you controlling their body. Continue?","Confirmation",list("Continue","Cancel")) if(choice == "Continue" && usr.get_active_hand() == src && usr.Adjacent(M)) - + //CHOMPAdd Start - Admin logging for Body Snatcher usage + if(M.ckey && !M.client) + log_and_message_admins("attempted to body swap with [key_name(M)] while they were SSD!") + else + log_and_message_admins("attempted to body swap with [key_name(M)].") + //CHOMPAdd End usr.visible_message("[usr] pushes the device up their forehead and [M]'s head, the device beginning to let out a series of light beeps!","You begin swap minds with [M]!") if(do_after(usr,35 SECONDS,M)) if(usr.mind && M.mind && M.stat != DEAD && usr.stat != DEAD) diff --git a/modular_chomp/code/game/objects/items/devices/mind_binder.dm b/modular_chomp/code/game/objects/items/devices/mind_binder.dm index 9f12f7b0ea..ae76ef8d26 100644 --- a/modular_chomp/code/game/objects/items/devices/mind_binder.dm +++ b/modular_chomp/code/game/objects/items/devices/mind_binder.dm @@ -11,6 +11,47 @@ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2, TECH_ILLEGAL = 1) possessed_voice = list() var/self_bind = FALSE + var/list/whitelisted = list( + /mob/living/carbon, + /mob/living/silicon, + /mob/living/simple_mob/animal/sif, + /mob/living/simple_mob/animal/passive, + /mob/living/simple_mob/slime, + /mob/living/bot, + /mob/living/simple_mob/vore/horse, + /mob/living/simple_mob/vore/wolf, + /mob/living/simple_mob/animal/giant_spider, + /mob/living/simple_mob/vore/pakkun, + /mob/living/simple_mob/vore/otie, + /mob/living/simple_mob/vore/scel, + /mob/living/simple_mob/vore/aggressive/corrupthound, + /mob/living/simple_mob/vore/rabbit, + /mob/living/simple_mob/vore/redpanda, + /mob/living/simple_mob/vore/fennec, + /mob/living/simple_mob/vore/fennix, + /mob/living/simple_mob/vore/bee, + /mob/living/simple_mob/animal/space/bear, + /mob/living/simple_mob/vore/aggressive/dino, + /mob/living/simple_mob/vore/aggressive/lizardman, + /mob/living/simple_mob/vore/aggressive/frog, + /mob/living/simple_mob/vore/aggressive/rat, + /mob/living/simple_mob/vore/jelly, + /mob/living/simple_mob/animal/hyena, + /mob/living/simple_mob/vore/solargrub, + /mob/living/simple_mob/vore/sect_queen, + /mob/living/simple_mob/vore/sect_drone, + /mob/living/simple_mob/vore/xeno_defanged, + /mob/living/simple_mob/vore/aggressive/panther, + /mob/living/simple_mob/vore/aggressive/giant_snake, + /mob/living/simple_mob/vore/aggressive/deathclaw, + /mob/living/simple_mob/vore/weretiger, + /mob/living/simple_mob/vore/bigdragon/friendly/maintpred, + /mob/living/simple_mob/vore/alienanimals/catslug, + /mob/living/simple_mob/vore/alienanimals/teppi, + /mob/living/simple_mob/vore/squirrel/big, + /mob/living/simple_mob/vore/raptor, + /mob/living/simple_mob/vore/bat, + ) // Limit to safe types /obj/item/device/mindbinder/New() ..() @@ -43,6 +84,9 @@ A = H.held_mob if(istype(A, /mob/living)) var/mob/living/M = A + if(!is_type_in_list(A, whitelisted)) + to_chat(usr,"The target's mind is too complex to be affected!") + return if(usr == M) toggle_self_bind() return @@ -53,13 +97,6 @@ return if(istype(A, /obj/item)) var/obj/item/I = A - if(istype(I, /obj/item/weapon/holder/micro)) - var/obj/item/weapon/holder/micro/H = I - if(possessed_voice.len == 1 || self_bind) - bind_mob(H.held_mob) - else - store_mob(H.held_mob) - return if(possessed_voice.len == 1 || self_bind) bind_item(I) else @@ -83,6 +120,7 @@ choice = tgui_alert(usr,"No really. You cannot OOC Escape this. Are you sure?","Confirmation",list("Yes I'm sure","Cancel")) if(choice == "Yes I'm sure" && usr.get_active_hand() == src && usr.Adjacent(target)) usr.visible_message("[usr] presses [src] against [target]. The device beginning to let out a series of beeps!","You begin to bind yourself into [target]!") + log_and_message_admins("attempted to bind themselves to \an [target] with a Mind Binder.") if(do_after(usr,30 SECONDS,target)) if(!target.ckey) usr.mind.transfer_to(target) @@ -92,7 +130,11 @@ return usr.visible_message("[usr] presses [src] against [target]. The device beginning to let out a series of beeps!","You begin to bind someone's mind into [target]!") - if(do_after(usr,5 SECONDS,target)) + log_and_message_admins("attempted to bind [key_name(src.possessed_voice[1])] to \an [target] with a Mind Binder.") + var/doTime = 30 SECONDS + if(ishuman(target) || issilicon(target) || isanimal(target)) + doTime = 5 SECONDS + if(do_after(usr,doTime,target)) if(possessed_voice.len == 1 && !target.ckey) var/mob/living/voice/V = possessed_voice[1] V.mind.transfer_to(target) @@ -112,11 +154,16 @@ to_chat(usr,"The device beeps a warning that the target is already sentient!") return + if(is_type_in_list(item, item_vore_blacklist)) + to_chat(usr,"The item resists your transfer attempt!") + return + if(self_bind) var/choice = tgui_alert(usr,"This will bind YOUR mind to the target! You will not be able to go back without help. Continue?","Confirmation",list("Continue","Cancel")) if(choice == "Cancel") return choice = tgui_alert(usr,"No really. You cannot OOC Escape this. Are you sure?","Confirmation",list("Yes I'm sure","Cancel")) if(choice == "Yes I'm sure" && usr.get_active_hand() == src && usr.Adjacent(item)) + log_and_message_admins("attempted to bind themselves to \an [item] with a Mind Binder.") usr.visible_message("[usr] presses [src] against [item]. The device beginning to let out a series of beeps!","You begin to bind yourself into [item]!") if(do_after(usr,30 SECONDS,item)) item.inhabit_item(usr, null, null) @@ -125,6 +172,7 @@ to_chat(usr,"Your mind as been bound to [item].") return + log_and_message_admins("attempted to bind [key_name(src.possessed_voice[1])] to \an [item] with a Mind Binder.") usr.visible_message("[usr] presses [src] against [item]. The device beginning to let out a series of beeps!","You begin to bind someone's mind into [item]!") if(do_after(usr,5 SECONDS,item)) if(possessed_voice.len == 1) @@ -148,6 +196,10 @@ var/choice = tgui_alert(usr,"This will download the target's mind into the device. Once their mind is loaded you can then bind it into an item. This will result in the target being stuck until you put them back in their original body. Please make sure OOC prefs align! Continue?","Confirmation",list("Continue","Cancel")) if(choice == "Continue" && usr.get_active_hand() == src && usr.Adjacent(target)) + if(target.ckey && !target.client) + log_and_message_admins("attempted to take [key_name(target)]'s mind with a Mind Binder while they were SSD!") + else + log_and_message_admins("attempted to take [key_name(target)]'s mind with a Mind Binder.") usr.visible_message("[usr] presses [src] against [target]'s head. The device beginning to let out a series of beeps!","You begin to download [target]'s mind!") if(do_after(usr,30 SECONDS,target)) if(possessed_voice.len == 0 && target.mind) @@ -167,6 +219,7 @@ var/mob/living/voice/target = item.possessed_voice[1] + log_and_message_admins("attempted to take [key_name(target)]'s mind out of \an [item] with a Mind Binder.") usr.visible_message("[usr] presses [src] against [item]. The device beginning to let out a series of beeps!","You begin to download someone's mind from [item]!") if(do_after(usr,5 SECONDS,item)) if(possessed_voice.len == 0 && item.possessed_voice.Find(target))