Wizard Mind Swap Spell (#33416)

* working mind swap spell

* Removing unncessary spacing

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Changing mind swap speech

Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>

* All requested changes in review

* Stores owned by mind instead of body

* Requested changes, traitor uplink fixed

* Revert "Requested changes, traitor uplink fixed"

This reverts commit 2ceac6733d6a28890f60d2ccef3dafa160a702fd.

* Revert "Stores owned by mind instead of body"

This reverts commit dfb72ab70ed66db50312617f2dce02d0a4e4dfce.

* Separate target and performer stun duration

---------

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>
This commit is contained in:
ActiveMammmoth
2024-12-16 07:12:45 -05:00
committed by GitHub
parent 612f8bedab
commit cd23805750
6 changed files with 86 additions and 0 deletions

View File

@@ -22,6 +22,7 @@ using Content.Shared.Physics;
using Content.Shared.Popups;
using Content.Shared.Speech.Muting;
using Content.Shared.Storage;
using Content.Shared.Stunnable;
using Content.Shared.Tag;
using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Systems;
@@ -62,6 +63,7 @@ public abstract class SharedMagicSystem : EntitySystem
[Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly SharedStunSystem _stun = default!;
public override void Initialize()
{
@@ -77,6 +79,7 @@ public abstract class SharedMagicSystem : EntitySystem
SubscribeLocalEvent<KnockSpellEvent>(OnKnockSpell);
SubscribeLocalEvent<ChargeSpellEvent>(OnChargeSpell);
SubscribeLocalEvent<RandomGlobalSpawnSpellEvent>(OnRandomGlobalSpawnSpell);
SubscribeLocalEvent<MindSwapSpellEvent>(OnMindSwapSpell);
// Spell wishlist
// A wishlish of spells that I'd like to implement or planning on implementing in a future PR
@@ -542,6 +545,37 @@ public abstract class SharedMagicSystem : EntitySystem
_audio.PlayGlobal(ev.Sound, ev.Performer);
}
#endregion
#region Mindswap Spells
private void OnMindSwapSpell(MindSwapSpellEvent ev)
{
if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer))
return;
ev.Handled = true;
Speak(ev);
// Need performer mind, but target mind is unnecessary, such as taking over a NPC
// Need to get target mind before putting performer mind into their body if they have one
// Thus, assign bool before first transfer, then check afterwards
if (!_mind.TryGetMind(ev.Performer, out var perMind, out var perMindComp))
return;
var tarHasMind = _mind.TryGetMind(ev.Target, out var tarMind, out var tarMindComp);
_mind.TransferTo(perMind, ev.Target);
if (tarHasMind)
{
_mind.TransferTo(tarMind, ev.Performer);
}
_stun.TryParalyze(ev.Target, ev.TargetStunDuration, true);
_stun.TryParalyze(ev.Performer, ev.PerformerStunDuration, true);
}
#endregion
// End Spells
#endregion