mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-31 20:53:34 +00:00
- Wands will no longer display a missing sprite if you try to fire one while it is drained. (Only change that wasn't ported from /tg/) - When using a staff of change on somebody, you can now turn them into a goat or space bats, and when turning them into a cyborg, there is a chance of that cyborg being a syndicate cyborg. - Ports over page-based UI for the Wizard's spellbook from /tg/. - Ports over the Wand Belt, Staff of Chaos, and Staff of Door Creation from /tg/. The Wand Belt contains several useful wands, however all of them have limited charges. The Staff of Chaos will cause a different projectile spell effect each time it is cast, and can currently imitate any of the wands. The Staff of Door creation will create wooden doors over any solid turf they contact, doing so removes said turf. - Mind swap will no longer remove spells from the wizard due to RNG. - The charge spell will no longer damage the charge of weapons that normally recharge by themselves. - Adds Staff of Door Creation to the Summon Magic list, removes the staff of change from the normal Summon Magic list and makes it part of the special list - If Summon Magic rolls to create an item on the special list, it will create that item once, and will no longer create anything else from the special list. (List consists of the Staff of Change, Staff of Animation, Wand Belt, Staff of Chaos, and Contract).
83 lines
3.3 KiB
Plaintext
83 lines
3.3 KiB
Plaintext
/obj/effect/proc_holder/spell/wizard/targeted/mind_transfer
|
|
name = "Mind Transfer"
|
|
desc = "This spell allows the user to switch bodies with a target."
|
|
|
|
school = "transmutation"
|
|
charge_max = 600
|
|
clothes_req = 0
|
|
invocation = "GIN'YU CAPAN"
|
|
invocation_type = "whisper"
|
|
range = 1
|
|
cooldown_min = 200 //100 deciseconds reduction per rank
|
|
var/list/protected_roles = list("Wizard","Changeling","Cultist") //which roles are immune to the spell
|
|
var/paralysis_amount_caster = 20 //how much the caster is paralysed for after the spell
|
|
var/paralysis_amount_victim = 20 //how much the victim is paralysed for after the spell
|
|
icon_power_button = "spell_mind"
|
|
|
|
/*
|
|
Urist: I don't feel like figuring out how you store object spells so I'm leaving this for you to do.
|
|
Make sure spells that are removed from spell_list are actually removed and deleted when mind transfering.
|
|
Also, you never added distance checking after target is selected. I've went ahead and did that.
|
|
*/
|
|
/obj/effect/proc_holder/spell/wizard/targeted/mind_transfer/cast(list/targets,mob/user = usr)
|
|
if(!targets.len)
|
|
user << "No mind found."
|
|
return
|
|
|
|
if(targets.len > 1)
|
|
user << "Too many minds! You're not a hive damnit!"//Whaa...aat?
|
|
return
|
|
|
|
var/mob/living/target = targets[1]
|
|
|
|
if(!(target in oview(range)))//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it.
|
|
user << "They are too far away!"
|
|
return
|
|
|
|
if(target.stat == DEAD)
|
|
user << "You don't particularly want to be dead."
|
|
return
|
|
|
|
if(!target.key || !target.mind)
|
|
user << "They appear to be catatonic. Not even magic can affect their vacant mind."
|
|
return
|
|
|
|
if(target.mind.special_role in protected_roles)
|
|
user << "Their mind is resisting your spell."
|
|
return
|
|
|
|
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.
|
|
caster.verbs -= 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)
|
|
victim.verbs -= V
|
|
|
|
var/mob/dead/observer/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)
|
|
victim.spell_list = caster.spell_list//Now they are inside the victim's body.
|
|
|
|
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.
|
|
caster.verbs += V
|
|
|
|
ghost.mind.transfer_to(caster)
|
|
caster.key = ghost.key //have to transfer the key since the mind was not active
|
|
caster.spell_list = ghost.spell_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)
|
|
caster.verbs += 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)
|