Void's Applause (#34591)

* Adds single clap emote

* Adds missing single clap loc

* Adds void blink effects, sound, and sprite

* Adds VoidApplauseEvent and implements it into the Magic System and Grimoire

* Removes commented Spawn code in Shared Magic System. Adds comments to replace pointlight with a negative light in the future.

* Makes spells Mono

* Changes to swap positions.

* Makes Void Applause target body only

* Update Content.Shared/Magic/Events/VoidApplauseSpellEvent.cs

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

* Update Content.Client/Magic/MagicSystem.cs

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

* Update Resources/Audio/Effects/Emotes/attributions.yml

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

* Update Resources/Prototypes/SoundCollections/emotes.yml

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

* Update Content.Shared/Magic/Events/VoidApplauseSpellEvent.cs

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

* Removes duplicate effect spawning from server

* Puts Void Applause effect on server, lets lizards hear clap

* Adds single clap to diona

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
This commit is contained in:
keronshb
2025-01-30 19:10:35 -05:00
committed by GitHub
parent abcd68273b
commit 6565ba52b2
18 changed files with 189 additions and 4 deletions

View File

@@ -1,5 +1,8 @@
using Content.Shared.Magic; using Content.Shared.Magic;
using Content.Shared.Magic.Events;
namespace Content.Client.Magic; namespace Content.Client.Magic;
public sealed class MagicSystem : SharedMagicSystem; public sealed class MagicSystem : SharedMagicSystem
{
}

View File

@@ -19,4 +19,17 @@ public sealed class MagicSystem : SharedMagicSystem
{ {
_chat.TrySendInGameICMessage(args.Performer, Loc.GetString(args.Speech), InGameICChatType.Speak, false); _chat.TrySendInGameICMessage(args.Performer, Loc.GetString(args.Speech), InGameICChatType.Speak, false);
} }
public override void OnVoidApplause(VoidApplauseSpellEvent ev)
{
base.OnVoidApplause(ev);
_chat.TryEmoteWithChat(ev.Performer, ev.Emote);
var perfXForm = Transform(ev.Performer);
var targetXForm = Transform(ev.Target);
Spawn(ev.Effect, perfXForm.Coordinates);
Spawn(ev.Effect, targetXForm.Coordinates);
}
} }

View File

@@ -0,0 +1,24 @@
using Content.Shared.Actions;
using Content.Shared.Chat.Prototypes;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Magic.Events;
public sealed partial class VoidApplauseSpellEvent : EntityTargetActionEvent, ISpeakSpell
{
[DataField]
public string? Speech { get; private set; }
/// <summary>
/// Emote to use.
/// </summary>
[DataField]
public ProtoId<EmotePrototype> Emote = "ClapSingle";
/// <summary>
/// Visual effect entity that is spawned at both the user's and the target's location.
/// </summary>
[DataField]
public EntProtoId Effect = "EffectVoidBlink";
}

View File

@@ -80,6 +80,7 @@ public abstract class SharedMagicSystem : EntitySystem
SubscribeLocalEvent<ChargeSpellEvent>(OnChargeSpell); SubscribeLocalEvent<ChargeSpellEvent>(OnChargeSpell);
SubscribeLocalEvent<RandomGlobalSpawnSpellEvent>(OnRandomGlobalSpawnSpell); SubscribeLocalEvent<RandomGlobalSpawnSpellEvent>(OnRandomGlobalSpawnSpell);
SubscribeLocalEvent<MindSwapSpellEvent>(OnMindSwapSpell); SubscribeLocalEvent<MindSwapSpellEvent>(OnMindSwapSpell);
SubscribeLocalEvent<VoidApplauseSpellEvent>(OnVoidApplause);
// Spell wishlist // Spell wishlist
// A wishlish of spells that I'd like to implement or planning on implementing in a future PR // A wishlish of spells that I'd like to implement or planning on implementing in a future PR
@@ -402,8 +403,7 @@ public abstract class SharedMagicSystem : EntitySystem
return; return;
var transform = Transform(args.Performer); var transform = Transform(args.Performer);
if (transform.MapID != _transform.GetMapId(args.Target) || !_interaction.InRangeUnobstructed(args.Performer, args.Target, range: 1000F, collisionMask: CollisionGroup.Opaque, popup: true))
if (transform.MapID != args.Target.GetMapId(EntityManager) || !_interaction.InRangeUnobstructed(args.Performer, args.Target, range: 1000F, collisionMask: CollisionGroup.Opaque, popup: true))
return; return;
_transform.SetCoordinates(args.Performer, args.Target); _transform.SetCoordinates(args.Performer, args.Target);
@@ -411,6 +411,17 @@ public abstract class SharedMagicSystem : EntitySystem
Speak(args); Speak(args);
args.Handled = true; args.Handled = true;
} }
public virtual void OnVoidApplause(VoidApplauseSpellEvent ev)
{
if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer))
return;
ev.Handled = true;
Speak(ev);
_transform.SwapPositions(ev.Performer, ev.Target);
}
// End Teleport Spells // End Teleport Spells
#endregion #endregion
#region Spell Helpers #region Spell Helpers

View File

@@ -6,6 +6,11 @@
license: "CC-BY-SA-3.0" license: "CC-BY-SA-3.0"
copyright: "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432" copyright: "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432"
source: "https://github.com/tgstation/tgstation" source: "https://github.com/tgstation/tgstation"
- files:
- clap-single.ogg
license: "CC-BY-SA-3.0"
copyright: "Taken from Citadel Station at https://github.com/Citadel-Station-13/Citadel-Station-13/commit/e145bdafe83e2cf38d148c39f073da5e7b0cb456"
source: "https://github.com/Citadel-Station-13/Citadel-Station-13"
- files: - files:
- snap1.ogg - snap1.ogg
- snap2.ogg - snap2.ogg

Binary file not shown.

Binary file not shown.

View File

@@ -22,3 +22,9 @@
copyright: '"forcewall.ogg", "knock.ogg", "blink.ogg", "ethereal_enter.ogg", and "ethereal_exit.ogg" by Citadel Station 13' copyright: '"forcewall.ogg", "knock.ogg", "blink.ogg", "ethereal_enter.ogg", and "ethereal_exit.ogg" by Citadel Station 13'
license: CC-BY-SA-3.0 license: CC-BY-SA-3.0
source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5 source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5
- files:
- voidblink.ogg
copyright: '"voidblink.ogg" by Citadel Station 13'
license: CC-BY-SA-3.0
source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/e145bdafe83e2cf38d148c39f073da5e7b0cb456

View File

@@ -11,6 +11,7 @@ chat-emote-name-squeak = Squeak
chat-emote-name-thump = Thump Tail chat-emote-name-thump = Thump Tail
chat-emote-name-click = Click chat-emote-name-click = Click
chat-emote-name-clap = Clap chat-emote-name-clap = Clap
chat-emote-name-clap-single = Single Clap
chat-emote-name-snap = Snap chat-emote-name-snap = Snap
chat-emote-name-salute = Salute chat-emote-name-salute = Salute
chat-emote-name-gasp = Gasp chat-emote-name-gasp = Gasp
@@ -45,6 +46,7 @@ chat-emote-msg-squeak = squeaks.
chat-emote-msg-thump = thumps {POSS-ADJ($entity)} tail. chat-emote-msg-thump = thumps {POSS-ADJ($entity)} tail.
chat-emote-msg-click = clicks. chat-emote-msg-click = clicks.
chat-emote-msg-clap = claps! chat-emote-msg-clap = claps!
chat-emote-msg-clap-single = claps their hands together.
chat-emote-msg-snap = snaps {POSS-ADJ($entity)} fingers. chat-emote-msg-snap = snaps {POSS-ADJ($entity)} fingers.
chat-emote-msg-salute = salutes. chat-emote-msg-salute = salutes.
chat-emote-msg-gasp = gasps. chat-emote-msg-gasp = gasps.

View File

@@ -5,6 +5,9 @@ spellbook-fireball-desc = Get most crew exploding with rage when they see this f
spellbook-blink-name = Blink spellbook-blink-name = Blink
spellbook-blink-desc = Don't blink or you'll miss yourself teleporting away. spellbook-blink-desc = Don't blink or you'll miss yourself teleporting away.
spellbook-voidapplause-name = Void Applause
spellbook-voidapplause-desc = Swap places with the target, doesn't it make you want to do the boogie?
spellbook-force-wall-name = Force Wall spellbook-force-wall-name = Force Wall
spellbook-force-wall-desc = Make three walls of pure force that you can pass through, but other's can't. spellbook-force-wall-desc = Make three walls of pure force that you can pass through, but other's can't.

View File

@@ -64,6 +64,20 @@
- !type:ListingLimitedStockCondition - !type:ListingLimitedStockCondition
stock: 1 stock: 1
# Taking an Eldritch spell, good proof of concept and a way to celebrate everything magic.
- type: listing
id: SpellbookVoidApplause
name: spellbook-voidapplause-name
description: spellbook-voidapplause-desc
productAction: ActionVoidApplause
cost:
WizCoin: 1
categories:
- SpellbookUtility
conditions:
- !type:ListingLimitedStockCondition
stock: 1
- type: listing - type: listing
id: SpellbookCharge id: SpellbookCharge
name: spellbook-charge-name name: spellbook-charge-name

View File

@@ -0,0 +1,25 @@
- type: entity
id: EffectVoidBlink
name: void blink
categories: [ HideSpawnMenu ]
save: false
components:
# TODO: PointLight is temp until I can make a shader & overlay for negative light or until this can support it
- type: PointLight
radius: 3
energy: 1
softness: 10
color: "#301934"
- type: Transform
noRot: true
- type: Sprite
sprite: Objects/Magic/Eldritch/eldritch_actions.rsi
drawdepth: Effects
noRot: true
layers:
- state: "voidblink"
- type: TimedDespawn
lifetime: 1
- type: Tag
tags:
- HideContextMenu

View File

@@ -16,3 +16,28 @@
sprite: Objects/Magic/magicactions.rsi sprite: Objects/Magic/magicactions.rsi
state: blink state: blink
event: !type:TeleportSpellEvent event: !type:TeleportSpellEvent
# TODO: Second level upgrade sometime that allows swapping with all objects
- type: entity
id: ActionVoidApplause
name: Void Applause
description: Clap your hands and swap places with the target.
components:
- type: EntityTargetAction
useDelay: 15
range: 16
sound: !type:SoundPathSpecifier
path: /Audio/Magic/Eldritch/voidblink.ogg
itemIconStyle: BigAction
whitelist:
components:
- Body
canTargetSelf: false
interactOnMiss: false
checkCanAccess: false
repeat: false
icon:
sprite: Objects/Magic/Eldritch/eldritch_actions.rsi
state: voidblink
event: !type:VoidApplauseSpellEvent
effect: EffectVoidBlink

View File

@@ -30,6 +30,11 @@
- /Audio/Effects/Emotes/clap3.ogg - /Audio/Effects/Emotes/clap3.ogg
- /Audio/Effects/Emotes/clap4.ogg - /Audio/Effects/Emotes/clap4.ogg
- type: soundCollection
id: ClapSingle
files:
- /Audio/Effects/Emotes/clap-single.ogg
- type: soundCollection - type: soundCollection
id: Snaps id: Snaps
files: files:

View File

@@ -438,6 +438,8 @@
sounds: sounds:
Clap: Clap:
collection: Claps collection: Claps
ClapSingle:
collection: ClapSingle
Snap: Snap:
collection: Snaps collection: Snaps
params: params:
@@ -450,6 +452,9 @@
sounds: sounds:
Clap: Clap:
path: /Audio/Voice/Diona/diona_clap.ogg path: /Audio/Voice/Diona/diona_clap.ogg
# TODO: Replace this with a similar wood themed single clap
ClapSingle:
collection: ClapSingle
Snap: Snap:
path: /Audio/Voice/Diona/diona_snap.ogg path: /Audio/Voice/Diona/diona_snap.ogg
params: params:
@@ -468,6 +473,8 @@
variation: 0.125 variation: 0.125
Clap: Clap:
collection: Claps collection: Claps
ClapSingle:
collection: ClapSingle
Snap: Snap:
collection: Snaps collection: Snaps
params: params:

View File

@@ -214,11 +214,26 @@
- BorgChassis - BorgChassis
chatMessages: ["chat-emote-msg-clap"] chatMessages: ["chat-emote-msg-clap"]
chatTriggers: chatTriggers:
- clap
- claps - claps
- clapping - clapping
- clapped - clapped
- type: emote
id: ClapSingle
name: chat-emote-name-clap-single
category: Hands
icon: Interface/Emotes/clap.png #TODO: Needs a sprite that distinguishes it better from clap
whitelist:
components:
- Hands
blacklist:
components:
- BorgChassis
chatMessages: [ "chat-emote-msg-clap-single" ]
chatTriggers:
- clap
- claps their hands together
- type: emote - type: emote
id: Snap id: Snap
name: chat-emote-name-snap name: chat-emote-name-snap

View File

@@ -0,0 +1,27 @@
{
"version": 1,
"license": "CC-BY-NC-SA-3.0",
"copyright": "Taken from and modified by kiwedespars on Citadel Station at commit https://github.com/Citadel-Station-13/Citadel-Station-13/commit/e145bdafe83e2cf38d148c39f073da5e7b0cb456",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "voidblink",
"delays": [
[
0.1,
0.3,
0.1,
0.3,
0.1,
0.3,
0.1,
0.3,
0.3
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB