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:
@@ -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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
24
Content.Shared/Magic/Events/VoidApplauseSpellEvent.cs
Normal file
24
Content.Shared/Magic/Events/VoidApplauseSpellEvent.cs
Normal 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";
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
BIN
Resources/Audio/Effects/Emotes/clap-single.ogg
Normal file
BIN
Resources/Audio/Effects/Emotes/clap-single.ogg
Normal file
Binary file not shown.
BIN
Resources/Audio/Magic/Eldritch/voidblink.ogg
Normal file
BIN
Resources/Audio/Magic/Eldritch/voidblink.ogg
Normal file
Binary file not shown.
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
25
Resources/Prototypes/Entities/Effects/eldritch.yml
Normal file
25
Resources/Prototypes/Entities/Effects/eldritch.yml
Normal 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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 |
Reference in New Issue
Block a user