]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Ethereal Jaunt Spell for Wizard & Jaunt ECS (#33201)
authorkeronshb <54602815+keronshb@users.noreply.github.com>
Wed, 13 Nov 2024 23:36:37 +0000 (18:36 -0500)
committerGitHub <noreply@github.com>
Wed, 13 Nov 2024 23:36:37 +0000 (00:36 +0100)
* Act

* Adds Jaunt ECS and related prototypes

* Adds jaunt sounds

* Adds enter and exit sound support to polymorphs

* Updates jaunt description

* Adds jaunt action sprite and changes jaunt polymorph to use it

* Adds Jaunt and upgrade to the wizard grimoire

* Makes base mob jaunt parent off of incorporeal and basemob, adds blue ghost sprite for ethereal jaunt

* Update Resources/Locale/en-US/store/spellbook-catalog.ftl

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Content.Shared/Polymorph/PolymorphPrototype.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* Update Content.Shared/Polymorph/PolymorphPrototype.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
* removes meta changes

* removes other meta changes

* adds context menu and a description to basemobjaunt

* comments for jaunt component and adds on component shutdown method

* Update Content.Shared/Jaunt/JauntComponent.cs

* Update Content.Shared/Jaunt/JauntComponent.cs

* Update Content.Shared/Jaunt/JauntComponent.cs

* Update Resources/Prototypes/Catalog/spellbook_catalog.yml

---------

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
14 files changed:
Content.Server/Polymorph/Systems/PolymorphSystem.cs
Content.Shared/Jaunt/JauntComponent.cs [new file with mode: 0644]
Content.Shared/Jaunt/JauntSystem.cs [new file with mode: 0644]
Content.Shared/Polymorph/PolymorphPrototype.cs
Resources/Audio/Magic/attributions.yml
Resources/Audio/Magic/ethereal_enter.ogg [new file with mode: 0644]
Resources/Audio/Magic/ethereal_exit.ogg [new file with mode: 0644]
Resources/Locale/en-US/store/spellbook-catalog.ftl
Resources/Prototypes/Actions/polymorph.yml
Resources/Prototypes/Catalog/spellbook_catalog.yml
Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml [new file with mode: 0644]
Resources/Prototypes/Polymorphs/polymorph.yml
Resources/Textures/Objects/Magic/magicactions.rsi/jaunt.png [new file with mode: 0644]
Resources/Textures/Objects/Magic/magicactions.rsi/meta.json

index daff200982dcc8b0fef008df89b1e4f3b657e27a..c9a71c53584f3fc70814dd4a471012bc10a75a16 100644 (file)
@@ -199,6 +199,9 @@ public sealed partial class PolymorphSystem : EntitySystem
 
         var targetTransformComp = Transform(uid);
 
+        if (configuration.PolymorphSound != null)
+            _audio.PlayPvs(configuration.PolymorphSound, targetTransformComp.Coordinates);
+
         var child = Spawn(configuration.Entity, _transform.GetMapCoordinates(uid, targetTransformComp), rotation: _transform.GetWorldRotation(uid));
 
         MakeSentientCommand.MakeSentient(child, EntityManager);
@@ -288,6 +291,9 @@ public sealed partial class PolymorphSystem : EntitySystem
         var uidXform = Transform(uid);
         var parentXform = Transform(parent);
 
+        if (component.Configuration.ExitPolymorphSound != null)
+            _audio.PlayPvs(component.Configuration.ExitPolymorphSound, uidXform.Coordinates);
+
         _transform.SetParent(parent, parentXform, uidXform.ParentUid);
         _transform.SetCoordinates(parent, parentXform, uidXform.Coordinates, uidXform.LocalRotation);
 
diff --git a/Content.Shared/Jaunt/JauntComponent.cs b/Content.Shared/Jaunt/JauntComponent.cs
new file mode 100644 (file)
index 0000000..6d37ab4
--- /dev/null
@@ -0,0 +1,26 @@
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Jaunt;
+
+/// <summary>
+///     Used to control various aspects of a Jaunt.
+///     Can be used in place of giving a jaunt-action directly.
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class JauntComponent : Component
+{
+    /// <summary>
+    ///     Which Jaunt Action the component should grant.
+    /// </summary>
+    [DataField]
+    public EntProtoId JauntAction = "ActionPolymorphJaunt";
+
+    /// <summary>
+    ///     The jaunt action itself.
+    /// </summary>
+    public EntityUid? Action;
+
+    // TODO: Enter & Exit Times and Whitelist when Actions are reworked and can support it
+    // TODO: Cooldown pausing when Actions can support it
+}
diff --git a/Content.Shared/Jaunt/JauntSystem.cs b/Content.Shared/Jaunt/JauntSystem.cs
new file mode 100644 (file)
index 0000000..d9263d0
--- /dev/null
@@ -0,0 +1,26 @@
+using Content.Shared.Actions;
+
+namespace Content.Shared.Jaunt;
+public sealed class JauntSystem : EntitySystem
+{
+    [Dependency] private readonly SharedActionsSystem _actions = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+        SubscribeLocalEvent<JauntComponent, MapInitEvent>(OnInit);
+        SubscribeLocalEvent<JauntComponent, ComponentShutdown>(OnShutdown);
+    }
+
+    private void OnInit(Entity<JauntComponent> ent, ref MapInitEvent args)
+    {
+        _actions.AddAction(ent.Owner, ref ent.Comp.Action, ent.Comp.JauntAction);
+    }
+
+    private void OnShutdown(Entity<JauntComponent> ent, ref ComponentShutdown args)
+    {
+        _actions.RemoveAction(ent.Owner, ent.Comp.Action);
+    }
+
+}
+
index 6d010711d2e7d5e21cf7605b5a56890293bcff28..c05766940840a7c487a6e7b3b693b80a6ac3f974 100644 (file)
@@ -1,3 +1,4 @@
+using Robust.Shared.Audio;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array;
 
@@ -115,6 +116,18 @@ public sealed partial record PolymorphConfiguration
     [DataField(serverOnly: true)]
     [ViewVariables(VVAccess.ReadWrite)]
     public TimeSpan Cooldown = TimeSpan.Zero;
+
+    /// <summary>
+    ///     If not null, this sound will be played when being polymorphed into something.
+    /// </summary>
+    [DataField]
+    public SoundSpecifier? PolymorphSound;
+
+    /// <summary>
+    ///     If not null, this sound will be played when being reverted from a polymorph.
+    /// </summary>
+    [DataField]
+    public SoundSpecifier? ExitPolymorphSound;
 }
 
 public enum PolymorphInventoryChange : byte
index cedda322862f0828e325b4289fe19fc725a343d2..bfbe4d6ec24d5c0fd1f56f69a6eba2f2ae8f4835 100644 (file)
@@ -17,6 +17,8 @@
   - forcewall.ogg
   - knock.ogg
   - blink.ogg
-  copyright: '"ForceWall.ogg", "Knock.ogg", and "blink.ogg" by Citadel Station 13'
+  - ethereal_enter.ogg
+  - ethereal_exit.ogg
+  copyright: '"forcewall.ogg", "knock.ogg", "blink.ogg", "ethereal_enter.ogg", and "ethereal_exit.ogg" by Citadel Station 13'
   license: CC-BY-SA-3.0
   source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5
diff --git a/Resources/Audio/Magic/ethereal_enter.ogg b/Resources/Audio/Magic/ethereal_enter.ogg
new file mode 100644 (file)
index 0000000..a0c7222
Binary files /dev/null and b/Resources/Audio/Magic/ethereal_enter.ogg differ
diff --git a/Resources/Audio/Magic/ethereal_exit.ogg b/Resources/Audio/Magic/ethereal_exit.ogg
new file mode 100644 (file)
index 0000000..bd60ca8
Binary files /dev/null and b/Resources/Audio/Magic/ethereal_exit.ogg differ
index 457f02916f91e290c7efe7038a789b860c253071..1d970f6e3ac9c4842a84bcda787216e9a94b5aed 100644 (file)
@@ -17,6 +17,9 @@ spellbook-polymorph-rod-desc = Change into an Immovable Rod with limited movemen
 spellbook-charge-name = Charge
 spellbook-charge-desc = Adds a charge back to your wand!
 
+spellbook-ethereal-jaunt-name = Ethereal Jaunt
+spellbook-ethereal-jaunt-description = Slip into the ethereal plane to slip away from your enemies!
+
 # Equipment
 
 spellbook-wand-polymorph-door-name = Wand of Entrance
@@ -33,3 +36,6 @@ spellbook-event-summon-ghosts-description = Who ya gonna call?
 # Upgrades
 spellbook-upgrade-fireball-name = Upgrade Fireball
 spellbook-upgrade-fireball-description = Upgrades Fireball to a maximum of level 3!
+
+spellbook-upgrade-jaunt-name = Upgrade Ethereal Jaunt
+spellbook-upgrade-jaunt-description = Upgrades Jaunt to a maximum of level 3!
index 81feba4eacccb904bd2447712172ac6a9d75b837..291400ab388421ae8d04ca1cd2750f311102e515 100644 (file)
     icon:
       sprite: Objects/Fun/immovable_rod.rsi
       state: icon
+
+- type: entity
+  id: ActionPolymorphJaunt
+  name: Ethereal Jaunt
+  description: Melt into the Ethereal Plane for a quick getaway!
+  components:
+  - type: Magic
+  - type: InstantAction
+    useDelay: 30
+    event: !type:PolymorphActionEvent
+      protoId: Jaunt
+    itemIconStyle: NoItem
+    icon:
+      sprite: Objects/Magic/magicactions.rsi
+      state: jaunt
+    # TODO: Effect ECS (from cardboard box)
+  - type: ActionUpgrade
+    effectedLevels:
+      2: ActionPolymorphJauntII
+      3: ActionPolymorphJauntIII
+
+- type: entity
+  id: ActionPolymorphJauntII
+  parent: ActionPolymorphJaunt
+  name: Ethereal Jaunt II
+  description: Melt into the Ethereal Plane for an even quicker getaway!
+  components:
+  - type: InstantAction
+    useDelay: 25
+    event: !type:PolymorphActionEvent
+      protoId: Jaunt
+    itemIconStyle: NoItem
+    icon:
+      sprite: Objects/Magic/magicactions.rsi
+      state: jaunt
+
+- type: entity
+  id: ActionPolymorphJauntIII
+  parent: ActionPolymorphJaunt
+  name: Ethereal Jaunt III
+  description: Are you even tangible anymore?
+  components:
+  - type: InstantAction
+    useDelay: 20
+    event: !type:PolymorphActionEvent
+      protoId: Jaunt
+    itemIconStyle: NoItem
+    icon:
+      sprite: Objects/Magic/magicactions.rsi
+      state: jaunt
index 38b95c3273c50777d52d3a907bda70047fd86e77..805c157f1e315dc68aca0aee30fa388e425f5d9c 100644 (file)
   - !type:ListingLimitedStockCondition
     stock: 1
 
+- type: listing
+  id: SpellbookJaunt
+  name: spellbook-ethereal-jaunt-name
+  description: spellbook-ethereal-jaunt-description
+  productAction: ActionPolymorphJaunt
+  productUpgradeId: SpellbookJauntUpgrade
+  cost:
+    WizCoin: 2
+  categories:
+  - SpellbookUtility
+  conditions:
+  - !type:ListingLimitedStockCondition
+    stock: 1
+
 # Equipment
 - type: listing
   id: SpellbookWandDoor
   # manual for now
   - !type:ListingLimitedStockCondition
     stock: 2
+
+- type: listing
+  id: SpellbookJauntUpgrade
+  productUpgradeId: SpellbookJauntUpgrade
+  name: spellbook-upgrade-jaunt-name
+  description: spellbook-upgrade-jaunt-description
+  icon:
+    sprite: Objects/Magic/magicactions.rsi
+    state: jaunt
+  cost:
+    WizCoin: 2
+  categories:
+  - SpellbookUtility
+  conditions:
+  - !type:BuyBeforeCondition
+    whitelist:
+    - SpellbookJaunt
+  - !type:ListingLimitedStockCondition
+    stock: 2
diff --git a/Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml b/Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml
new file mode 100644 (file)
index 0000000..3002264
--- /dev/null
@@ -0,0 +1,40 @@
+- type: entity
+  name: jaunt
+  parent: [Incorporeal, BaseMob]
+  id: BaseMobJaunt
+  description: Faint traces of a humanoid figure linger here
+  suffix: Ethereal
+  components:
+  - type: ContentEye
+    maxZoom: 1.44,1.44
+  - type: Eye
+    drawFov: false
+  - type: Input
+    context: "ghost"
+  - type: InputMover
+  - type: MovementSpeedModifier
+    baseSprintSpeed: 12
+    baseWalkSpeed: 8
+  - type: Visibility
+    layer: 2
+  - type: Spectral
+
+# Should be slow, for balance
+- type: entity
+  name: jaunt
+  parent: BaseMobJaunt
+  id: EtherealJaunt
+  suffix: Wizard
+  components:
+  - type: Sprite
+    sprite: Mobs/Ghosts/ghost_human.rsi
+    color: "#60f7eb"
+    layers:
+    - state: animated
+      shader: unshaded
+    noRot: true
+    overrideContainerOcclusion: true
+    drawdepth: Ghosts
+  - type: MovementSpeedModifier
+    baseSprintSpeed: 6
+    baseWalkSpeed: 4
index 96739a50d3caff0fc452cce3231ad1e982b4017b..fe28287cb09e75cf0f77d39fba8d5c77d03cbeb7 100644 (file)
     forced: true
     revertOnCrit: false
     revertOnDeath: false
+
+# Temporary Jaunt
+# Don't make permanent jaunts until action system can be reworked to allow do afters and cooldown pausing
+- type: polymorph
+  id: Jaunt
+  configuration:
+    entity: EtherealJaunt
+    transferName: true
+    inventory: None
+    forced: true
+    revertOnDeath: true
+    revertOnCrit: true
+    allowRepeatedMorphs: false
+    polymorphSound: /Audio/Magic/ethereal_enter.ogg
+    exitPolymorphSound: /Audio/Magic/ethereal_exit.ogg
+    duration: 3
diff --git a/Resources/Textures/Objects/Magic/magicactions.rsi/jaunt.png b/Resources/Textures/Objects/Magic/magicactions.rsi/jaunt.png
new file mode 100644 (file)
index 0000000..f66002b
Binary files /dev/null and b/Resources/Textures/Objects/Magic/magicactions.rsi/jaunt.png differ
index 9bf76bbe774addcf53b28f999492b9ad94ad9279..a8da3d8bc3a63cedb2319ed259d895bb4504cfbf 100644 (file)
     {
       "name": "magicmissile"
     },
+    {
+      "name": "jaunt"
+    },
     {
       "name": "gib"
     }
   ]
-}
\ No newline at end of file
+}