From 3479f84437cfb7e5cc9bf744372f31abae2b7d60 Mon Sep 17 00:00:00 2001 From: Luc <89928798+lewcc@users.noreply.github.com> Date: Wed, 12 Jun 2024 14:40:03 -0700 Subject: [PATCH] Makes mind swapping instant (#25781) * shhhhh * YEAG * you can now cast it on yourself, and it'll be whispered * nah the sound is enough * Update code/datums/spells/mind_transfer.dm Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- code/datums/spells/mind_transfer.dm | 61 ++++++++++++++++------------- 1 file changed, 33 insertions(+), 28 deletions(-) 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) +