diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm
index b980233a9cb..613a2e3238b 100644
--- a/code/datums/spells/mind_transfer.dm
+++ b/code/datums/spells/mind_transfer.dm
@@ -6,7 +6,7 @@
base_cooldown = 600
clothes_req = FALSE
invocation = "GIN'YU CAPAN"
- invocation_type = "whisper"
+ invocation_type = "none" // shh
selection_activated_message = "You prepare to transfer your mind. Click on a target to cast the spell."
selection_deactivated_message = "You decide that your current form is good enough."
cooldown_min = 200 //100 deciseconds reduction per rank
@@ -14,12 +14,15 @@
var/paralysis_amount_caster = 40 SECONDS //how much the caster is paralysed for after the spell
var/paralysis_amount_victim = 40 SECONDS //how much the victim is paralysed for after the spell
action_icon_state = "mindswap"
+ sound = 'sound/magic/mindswap.ogg'
/datum/spell/mind_transfer/create_new_targeting()
var/datum/spell_targeting/click/T = new()
T.allowed_type = /mob/living
- T.range = 1
+ T.range = 3
T.click_radius = 0
+ // you can use it on yourself as a fake-out
+ T.include_user = TRUE
return T
/datum/spell/mind_transfer/valid_target(mob/living/target, mob/user)
@@ -38,44 +41,46 @@ Also, you never added distance checking after target is selected. I've went ahea
to_chat(user, "You're killing yourself! You can't concentrate enough to do this!")
return
- if(target.mind.special_role in protected_roles)
- to_chat(user, "Their mind is resisting your spell.")
+ if(target.mind.special_role in protected_roles && target != user)
+ to_chat(user, "Their mind is resisting your spell.")
return
if(issilicon(target))
- to_chat(user, "You feel this enslaved being is just as dead as its cold, hard exoskeleton.")
+ to_chat(user, "You feel this enslaved being is just as dead as its cold, hard exoskeleton.")
return
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
var/mob/living/caster = user//The wizard/whomever doing the body transferring.
- //MIND TRANSFER BEGIN
- if(length(caster.mind.special_verbs))//If the caster had any special verbs, remove them from the mob verb list.
- for(var/V in caster.mind.special_verbs)//Since the caster is using an object spell system, this is mostly moot.
- remove_verb(caster, V) //But a safety nontheless.
+ if(victim != caster)
+ //MIND TRANSFER BEGIN
+ if(length(caster.mind.special_verbs))//If the caster had any special verbs, remove them from the mob verb list.
+ for(var/V in caster.mind.special_verbs)//Since the caster is using an object spell system, this is mostly moot.
+ remove_verb(caster, V) //But a safety nontheless.
- if(length(victim.mind.special_verbs))//Now remove all of the victim's verbs.
- for(var/V in victim.mind.special_verbs)
- remove_verb(victim, V)
+ if(length(victim.mind.special_verbs))//Now remove all of the victim's verbs.
+ for(var/V in victim.mind.special_verbs)
+ remove_verb(victim, V)
- var/mob/dead/observer/ghost = victim.ghostize(0)
- caster.mind.transfer_to(victim)
+ var/mob/dead/observer/ghost = victim.ghostize(0)
+ caster.mind.transfer_to(victim)
- if(length(victim.mind.special_verbs))//To add all the special verbs for the original caster.
- for(var/V in caster.mind.special_verbs)//Not too important but could come into play.
- add_verb(caster, V)
+ if(length(victim.mind.special_verbs))//To add all the special verbs for the original caster.
+ for(var/V in caster.mind.special_verbs)//Not too important but could come into play.
+ add_verb(caster, V)
- ghost.mind.transfer_to(caster)
- if(ghost.key)
- GLOB.non_respawnable_keys -= ghost.ckey
- caster.key = ghost.key //have to transfer the key since the mind was not active
- qdel(ghost)
+ ghost.mind.transfer_to(caster)
+ if(ghost.key)
+ GLOB.non_respawnable_keys -= ghost.ckey
+ caster.key = ghost.key //have to transfer the key since the mind was not active
+ qdel(ghost)
- if(length(caster.mind.special_verbs))//If they had any special verbs, we add them here.
- for(var/V in caster.mind.special_verbs)
- add_verb(caster, V)
+ if(length(caster.mind.special_verbs))//If they had any special verbs, we add them here.
+ for(var/V in caster.mind.special_verbs)
+ add_verb(caster, V)
//MIND TRANSFER END
- //Here we paralyze both mobs and knock them out for a time.
- caster.Paralyse(paralysis_amount_caster)
- victim.Paralyse(paralysis_amount_victim)
+ for(var/mob/new_or_formal_wizard in list(victim, caster))
+ for(var/mob/living/L in range(3, new_or_formal_wizard))
+ L.SetSilence(15 SECONDS)
+