22using Content . Shared . Body . Components ;
33using Content . Shared . Body . Systems ;
44using Content . Shared . Coordinates . Helpers ;
5+ using Content . Shared . Damage ;
6+ using Content . Shared . Damage . Systems ;
57using Content . Shared . Doors . Components ;
68using Content . Shared . Doors . Systems ;
79using Content . Shared . Hands . Components ;
810using Content . Shared . Hands . EntitySystems ;
911using Content . Shared . Interaction ;
1012using Content . Shared . Inventory ;
13+ using Content . Shared . Jittering ;
1114using Content . Shared . Lock ;
1215using Content . Shared . Magic . Components ;
1316using Content . Shared . Magic . Events ;
1417using Content . Shared . Maps ;
1518using Content . Shared . Mind ;
19+ using Content . Shared . Mobs ;
20+ using Content . Shared . Mobs . Components ;
21+ using Content . Shared . Mobs . Systems ;
1622using Content . Shared . Physics ;
1723using Content . Shared . Popups ;
1824using Content . Shared . Speech . Muting ;
@@ -52,16 +58,19 @@ public abstract class SharedMagicSystem : EntitySystem
5258 [ Dependency ] private readonly INetManager _net = default ! ;
5359 [ Dependency ] private readonly SharedBodySystem _body = default ! ;
5460 [ Dependency ] private readonly EntityLookupSystem _lookup = default ! ;
61+ [ Dependency ] private readonly DamageableSystem _damageableSystem = default ! ;
5562 [ Dependency ] private readonly SharedDoorSystem _door = default ! ;
5663 [ Dependency ] private readonly InventorySystem _inventory = default ! ;
5764 [ Dependency ] private readonly SharedPopupSystem _popup = default ! ;
5865 [ Dependency ] private readonly SharedInteractionSystem _interaction = default ! ;
66+ [ Dependency ] private readonly SharedJitteringSystem _jittering = default ! ;
5967 [ Dependency ] private readonly LockSystem _lock = default ! ;
6068 [ Dependency ] private readonly SharedHandsSystem _hands = default ! ;
6169 [ Dependency ] private readonly TagSystem _tag = default ! ;
6270 [ Dependency ] private readonly SharedAudioSystem _audio = default ! ;
6371 [ Dependency ] private readonly SharedMindSystem _mind = default ! ;
6472 [ Dependency ] private readonly SharedStunSystem _stun = default ! ;
73+ [ Dependency ] private readonly MobStateSystem _mobStateSystem = default ! ;
6574
6675 private static readonly ProtoId < TagPrototype > InvalidForGlobalSpawnSpellTag = "InvalidForGlobalSpawnSpell" ;
6776
@@ -76,6 +85,7 @@ public override void Initialize()
7685 SubscribeLocalEvent < ProjectileSpellEvent > ( OnProjectileSpell ) ;
7786 SubscribeLocalEvent < ChangeComponentsSpellEvent > ( OnChangeComponentsSpell ) ;
7887 SubscribeLocalEvent < SmiteSpellEvent > ( OnSmiteSpell ) ;
88+ SubscribeLocalEvent < CellularSmiteSpellEvent > ( OnCellularSmiteSpell ) ;
7989 SubscribeLocalEvent < KnockSpellEvent > ( OnKnockSpell ) ;
8090 SubscribeLocalEvent < ChargeSpellEvent > ( OnChargeSpell ) ;
8191 SubscribeLocalEvent < RandomGlobalSpawnSpellEvent > ( OnRandomGlobalSpawnSpell ) ;
@@ -391,6 +401,31 @@ private void OnSmiteSpell(SmiteSpellEvent ev)
391401 _body . GibBody ( ev . Target , true , body ) ;
392402 }
393403
404+ private void OnCellularSmiteSpell ( CellularSmiteSpellEvent ev )
405+ {
406+ //Stacking genetic damage on people who are already downed or dead is cringe
407+ if ( TryComp < DamageableComponent > ( ev . Target , out var damageable ) &&
408+ HasComp < MobStateComponent > ( ev . Target ) ) {
409+ if ( _mobStateSystem . IsCritical ( ev . Target ) )
410+ return ;
411+ if ( _mobStateSystem . IsDead ( ev . Target ) )
412+ return ;
413+ }
414+ if ( ev . Handled || ! PassesSpellPrerequisites ( ev . Action , ev . Performer ) )
415+ return ;
416+
417+ ev . Handled = true ;
418+
419+ // Given that this was intended to blow gibs everywhere, not suitable for this version of the spell (gets people stuck in walls)
420+ // var direction = _transform.GetMapCoordinates(ev.Target, Transform(ev.Target)).Position - _transform.GetMapCoordinates(ev.Performer, Transform(ev.Performer)).Position;
421+ // var impulseVector = direction * 5000;
422+
423+ //_physics.ApplyLinearImpulse(ev.Target, impulseVector);
424+
425+ _jittering . DoJitter ( ev . Target , TimeSpan . FromSeconds ( 1f ) , false , 80f , 8f , true ) ;
426+ _damageableSystem . TryChangeDamage ( ev . Target , ev . smiteDamage , true ) ;
427+ }
428+
394429 // End Touch Spells
395430 #endregion
396431 #region Knock Spells
0 commit comments