mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
Co-authored-by: ShadowLarkens <shadowlarkens@gmail.com> Co-authored-by: Kashargul <KashL@t-online.de>
82 lines
3.4 KiB
Plaintext
82 lines
3.4 KiB
Plaintext
/spell/targeted/mind_transfer
|
|
name = "Mind Transfer"
|
|
desc = "This spell allows the user to switch bodies with a target."
|
|
|
|
school = "transmutation"
|
|
charge_max = 600
|
|
spell_flags = 0
|
|
invocation = "GIN'YU CAPAN"
|
|
invocation_type = SpI_WHISPER
|
|
max_targets = 1
|
|
range = 1
|
|
cooldown_min = 200 //100 deciseconds reduction per rank
|
|
compatible_mobs = list(/mob/living/carbon/human) //which types of mobs are affected by the spell. NOTE: change at your own risk
|
|
|
|
// TODO: Update to new antagonist system.
|
|
var/list/protected_roles = list(JOB_WIZARD,JOB_CHANGELING,JOB_CULTIST) //which roles are immune to the spell
|
|
var/msg_wait = 500 //how long in deciseconds it waits before telling that body doesn't feel right or mind swap robbed of a spell
|
|
amt_paralysis = 20 //how much the victim is paralysed for after the spell
|
|
|
|
hud_state = "wiz_mindswap"
|
|
|
|
/spell/targeted/mind_transfer/cast(list/targets, mob/user)
|
|
..()
|
|
|
|
for(var/mob/living/target in targets)
|
|
if(target.stat == DEAD)
|
|
to_chat(user, "You didn't study necromancy back at the Space Wizard Federation academy.")
|
|
continue
|
|
|
|
if(!target.key || !target.mind)
|
|
to_chat(user, "They appear to be catatonic. Not even magic can affect their vacant mind.")
|
|
continue
|
|
|
|
if(target.mind.special_role in protected_roles)
|
|
to_chat(user, "Their mind is resisting your spell.")
|
|
continue
|
|
|
|
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
|
|
var/mob/caster = user//The wizard/whomever doing the body transferring.
|
|
|
|
//MIND TRANSFER BEGIN
|
|
if(caster.mind.special_verbs.len)//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.mind.special_verbs.len)//Now remove all of the victim's verbs.
|
|
for(var/V in victim.mind.special_verbs)
|
|
remove_verb(victim, V)
|
|
|
|
var/mob/observer/dead/ghost = victim.ghostize(0)
|
|
ghost.spell_list += victim.spell_list//If they have spells, transfer them. Now we basically have a backup mob.
|
|
|
|
caster.mind.transfer_to(victim)
|
|
for(var/spell/S in victim.spell_list) //get rid of spells the new way
|
|
victim.remove_spell(S) //This will make it so that players will not get the HUD and all that spell bugginess that caused copies of spells and stuff of that nature.
|
|
|
|
for(var/spell/S in caster.spell_list)
|
|
victim.add_spell(S) //Now they are inside the victim's body - this also generates the HUD
|
|
caster.remove_spell(S) //remove the spells from the caster
|
|
|
|
if(victim.mind.special_verbs.len)//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)
|
|
caster.key = ghost.key //have to transfer the key since the mind was not active
|
|
for(var/spell/S in ghost.spell_list)
|
|
caster.add_spell(S)
|
|
ghost.spell_list = list()
|
|
|
|
if(caster.mind.special_verbs.len)//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
|
|
|
|
//Target is handled in ..(), so we handle the caster here
|
|
caster.Paralyse(amt_paralysis)
|
|
|
|
//After a certain amount of time the victim gets a message about being in a different body.
|
|
spawn(msg_wait)
|
|
to_chat(caster, span_danger("You feel woozy and lightheaded. Your body doesn't seem like your own."))
|