From d576f5cbbb3969d1399a25b9692c16b63bbf2a46 Mon Sep 17 00:00:00 2001
From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Date: Thu, 28 Mar 2024 02:32:56 -0400
Subject: [PATCH] dynamic alert sprites (#25452)
* dynamic alert sprite
* fix fat cooldowns
---
.../Alerts/UpdateAlertSpriteEvent.cs | 21 +++++++
Content.Client/Revenant/RevenantSystem.cs | 15 +++++
.../Systems/Alerts/AlertsUIController.cs | 16 +++++
.../Systems/Alerts/Controls/AlertControl.cs | 58 ++++++++++++++----
.../Revenant/EntitySystems/RevenantSystem.cs | 3 +-
Content.Shared/Alert/AlertPrototype.cs | 14 +++--
.../Revenant/Components/RevenantComponent.cs | 4 +-
Content.Shared/Revenant/SharedRevenant.cs | 8 +++
Resources/Prototypes/Alerts/alerts.yml | 8 +++
Resources/Prototypes/Alerts/revenant.yml | 51 +++++----------
.../Alerts/essence_counter.rsi/0.png | Bin 0 -> 155 bytes
.../Alerts/essence_counter.rsi/1.png | Bin 0 -> 150 bytes
.../Alerts/essence_counter.rsi/2.png | Bin 0 -> 164 bytes
.../Alerts/essence_counter.rsi/3.png | Bin 0 -> 156 bytes
.../Alerts/essence_counter.rsi/4.png | Bin 0 -> 156 bytes
.../Alerts/essence_counter.rsi/5.png | Bin 0 -> 168 bytes
.../Alerts/essence_counter.rsi/6.png | Bin 0 -> 167 bytes
.../Alerts/essence_counter.rsi/7.png | Bin 0 -> 154 bytes
.../Alerts/essence_counter.rsi/8.png | Bin 0 -> 156 bytes
.../Alerts/essence_counter.rsi/9.png | Bin 0 -> 164 bytes
.../Alerts/essence_counter.rsi/essence0.png | Bin 319 -> 255 bytes
.../Alerts/essence_counter.rsi/essence1.png | Bin 298 -> 0 bytes
.../Alerts/essence_counter.rsi/essence10.png | Bin 308 -> 0 bytes
.../Alerts/essence_counter.rsi/essence11.png | Bin 304 -> 0 bytes
.../Alerts/essence_counter.rsi/essence12.png | Bin 311 -> 0 bytes
.../Alerts/essence_counter.rsi/essence13.png | Bin 311 -> 0 bytes
.../Alerts/essence_counter.rsi/essence14.png | Bin 321 -> 0 bytes
.../Alerts/essence_counter.rsi/essence15.png | Bin 307 -> 0 bytes
.../Alerts/essence_counter.rsi/essence16.png | Bin 313 -> 0 bytes
.../Alerts/essence_counter.rsi/essence2.png | Bin 297 -> 0 bytes
.../Alerts/essence_counter.rsi/essence3.png | Bin 299 -> 0 bytes
.../Alerts/essence_counter.rsi/essence4.png | Bin 321 -> 0 bytes
.../Alerts/essence_counter.rsi/essence5.png | Bin 302 -> 0 bytes
.../Alerts/essence_counter.rsi/essence6.png | Bin 297 -> 0 bytes
.../Alerts/essence_counter.rsi/essence7.png | Bin 317 -> 0 bytes
.../Alerts/essence_counter.rsi/essence8.png | Bin 295 -> 0 bytes
.../Alerts/essence_counter.rsi/essence9.png | Bin 292 -> 0 bytes
.../Alerts/essence_counter.rsi/meta.json | 38 +++---------
38 files changed, 153 insertions(+), 83 deletions(-)
create mode 100644 Content.Client/Alerts/UpdateAlertSpriteEvent.cs
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/0.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/1.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/2.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/3.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/4.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/5.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/6.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/7.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/8.png
create mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/9.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence1.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence10.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence11.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence12.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence13.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence14.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence15.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence16.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence2.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence3.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence4.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence5.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence6.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence7.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence8.png
delete mode 100644 Resources/Textures/Interface/Alerts/essence_counter.rsi/essence9.png
diff --git a/Content.Client/Alerts/UpdateAlertSpriteEvent.cs b/Content.Client/Alerts/UpdateAlertSpriteEvent.cs
new file mode 100644
index 000000000000..4f182c458ccf
--- /dev/null
+++ b/Content.Client/Alerts/UpdateAlertSpriteEvent.cs
@@ -0,0 +1,21 @@
+using Content.Shared.Alert;
+using Robust.Client.GameObjects;
+
+namespace Content.Client.Alerts;
+
+///
+/// Event raised on an entity with alerts in order to allow it to update visuals for the alert sprite entity.
+///
+[ByRefEvent]
+public record struct UpdateAlertSpriteEvent
+{
+ public Entity SpriteViewEnt;
+
+ public AlertPrototype Alert;
+
+ public UpdateAlertSpriteEvent(Entity spriteViewEnt, AlertPrototype alert)
+ {
+ SpriteViewEnt = spriteViewEnt;
+ Alert = alert;
+ }
+}
diff --git a/Content.Client/Revenant/RevenantSystem.cs b/Content.Client/Revenant/RevenantSystem.cs
index 6e7d0d2a1bd4..49d29d8a5f4c 100644
--- a/Content.Client/Revenant/RevenantSystem.cs
+++ b/Content.Client/Revenant/RevenantSystem.cs
@@ -1,3 +1,5 @@
+using Content.Client.Alerts;
+using Content.Shared.Alert;
using Content.Shared.Revenant;
using Content.Shared.Revenant.Components;
using Robust.Client.GameObjects;
@@ -13,6 +15,7 @@ public override void Initialize()
base.Initialize();
SubscribeLocalEvent(OnAppearanceChange);
+ SubscribeLocalEvent(OnUpdateAlert);
}
private void OnAppearanceChange(EntityUid uid, RevenantComponent component, ref AppearanceChangeEvent args)
@@ -36,4 +39,16 @@ private void OnAppearanceChange(EntityUid uid, RevenantComponent component, ref
args.Sprite.LayerSetState(0, component.State);
}
}
+
+ private void OnUpdateAlert(Entity ent, ref UpdateAlertSpriteEvent args)
+ {
+ if (args.Alert.AlertType != AlertType.Essence)
+ return;
+
+ var sprite = args.SpriteViewEnt.Comp;
+ var essence = Math.Clamp(ent.Comp.Essence.Int(), 0, 999);
+ sprite.LayerSetState(RevenantVisualLayers.Digit1, $"{(essence / 100) % 10}");
+ sprite.LayerSetState(RevenantVisualLayers.Digit2, $"{(essence / 10) % 10}");
+ sprite.LayerSetState(RevenantVisualLayers.Digit3, $"{essence % 10}");
+ }
}
diff --git a/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs b/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs
index 826bbf199bae..3b85972a9b24 100644
--- a/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs
+++ b/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs
@@ -3,6 +3,8 @@
using Content.Client.UserInterface.Systems.Alerts.Widgets;
using Content.Client.UserInterface.Systems.Gameplay;
using Content.Shared.Alert;
+using Robust.Client.GameObjects;
+using Robust.Client.Player;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controllers;
@@ -10,6 +12,8 @@ namespace Content.Client.UserInterface.Systems.Alerts;
public sealed class AlertsUIController : UIController, IOnStateEntered, IOnSystemChanged
{
+ [Dependency] private readonly IPlayerManager _player = default!;
+
[UISystemDependency] private readonly ClientAlertsSystem? _alertsSystem = default;
private AlertsUI? UI => UIManager.GetActiveUIWidgetOrNull();
@@ -84,4 +88,16 @@ public void SyncAlerts()
SystemOnSyncAlerts(_alertsSystem, alerts);
}
}
+
+ public void UpdateAlertSpriteEntity(EntityUid spriteViewEnt, AlertPrototype alert)
+ {
+ if (_player.LocalEntity is not { } player)
+ return;
+
+ if (!EntityManager.TryGetComponent(spriteViewEnt, out var sprite))
+ return;
+
+ var ev = new UpdateAlertSpriteEvent((spriteViewEnt, sprite), alert);
+ EntityManager.EventBus.RaiseLocalEvent(player, ref ev);
+ }
}
diff --git a/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs b/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs
index 4445bb0cd082..9423f7288df5 100644
--- a/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs
+++ b/Content.Client/UserInterface/Systems/Alerts/Controls/AlertControl.cs
@@ -2,6 +2,8 @@
using Content.Client.Actions.UI;
using Content.Client.Cooldown;
using Content.Shared.Alert;
+using Robust.Client.GameObjects;
+using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Timing;
@@ -33,9 +35,12 @@ public sealed class AlertControl : BaseButton
private short? _severity;
private readonly IGameTiming _gameTiming;
- private readonly AnimatedTextureRect _icon;
+ private readonly IEntityManager _entityManager;
+ private readonly SpriteView _icon;
private readonly CooldownGraphic _cooldownGraphic;
+ private EntityUid _spriteViewEntity;
+
///
/// Creates an alert control reflecting the indicated alert + state
///
@@ -44,19 +49,30 @@ public sealed class AlertControl : BaseButton
public AlertControl(AlertPrototype alert, short? severity)
{
_gameTiming = IoCManager.Resolve();
+ _entityManager = IoCManager.Resolve();
TooltipSupplier = SupplyTooltip;
Alert = alert;
_severity = severity;
- var specifier = alert.GetIcon(_severity);
- _icon = new AnimatedTextureRect
+
+ _spriteViewEntity = _entityManager.Spawn(Alert.AlertViewEntity);
+ if (_entityManager.TryGetComponent(_spriteViewEntity, out var sprite))
{
- DisplayRect = {TextureScale = new Vector2(2, 2)}
- };
+ var icon = Alert.GetIcon(_severity);
+ if (sprite.LayerMapTryGet(AlertVisualLayers.Base, out var layer))
+ sprite.LayerSetSprite(layer, icon);
+ }
- _icon.SetFromSpriteSpecifier(specifier);
+ _icon = new SpriteView
+ {
+ Scale = new Vector2(2, 2)
+ };
+ _icon.SetEntity(_spriteViewEntity);
Children.Add(_icon);
- _cooldownGraphic = new CooldownGraphic();
+ _cooldownGraphic = new CooldownGraphic
+ {
+ MaxSize = new Vector2(64, 64)
+ };
Children.Add(_cooldownGraphic);
}
@@ -72,16 +88,22 @@ private Control SupplyTooltip(Control? sender)
///
public void SetSeverity(short? severity)
{
- if (_severity != severity)
- {
- _severity = severity;
- _icon.SetFromSpriteSpecifier(Alert.GetIcon(_severity));
- }
+ if (_severity == severity)
+ return;
+ _severity = severity;
+
+ if (!_entityManager.TryGetComponent(_spriteViewEntity, out var sprite))
+ return;
+ var icon = Alert.GetIcon(_severity);
+ if (sprite.LayerMapTryGet(AlertVisualLayers.Base, out var layer))
+ sprite.LayerSetSprite(layer, icon);
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
+ UserInterfaceManager.GetUIController().UpdateAlertSpriteEntity(_spriteViewEntity, Alert);
+
if (!Cooldown.HasValue)
{
_cooldownGraphic.Visible = false;
@@ -91,5 +113,17 @@ protected override void FrameUpdate(FrameEventArgs args)
_cooldownGraphic.FromTime(Cooldown.Value.Start, Cooldown.Value.End);
}
+
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+
+ _entityManager.DeleteEntity(_spriteViewEntity);
+ }
+ }
+
+ public enum AlertVisualLayers : byte
+ {
+ Base
}
}
diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.cs
index b26cc4a320fb..86be70c41fea 100644
--- a/Content.Server/Revenant/EntitySystems/RevenantSystem.cs
+++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.cs
@@ -133,6 +133,7 @@ public bool ChangeEssenceAmount(EntityUid uid, FixedPoint2 amount, RevenantCompo
return false;
component.Essence += amount;
+ Dirty(uid, component);
if (regenCap)
FixedPoint2.Min(component.Essence, component.EssenceRegenCap);
@@ -140,7 +141,7 @@ public bool ChangeEssenceAmount(EntityUid uid, FixedPoint2 amount, RevenantCompo
if (TryComp(uid, out var store))
_store.UpdateUserInterface(uid, uid, store);
- _alerts.ShowAlert(uid, AlertType.Essence, (short) Math.Clamp(Math.Round(component.Essence.Float() / 10f), 0, 16));
+ _alerts.ShowAlert(uid, AlertType.Essence);
if (component.Essence <= 0)
{
diff --git a/Content.Shared/Alert/AlertPrototype.cs b/Content.Shared/Alert/AlertPrototype.cs
index ac43cb45f3b5..248cc00ba401 100644
--- a/Content.Shared/Alert/AlertPrototype.cs
+++ b/Content.Shared/Alert/AlertPrototype.cs
@@ -25,6 +25,12 @@ public sealed partial class AlertPrototype : IPrototype
[DataField("icons", required: true)]
public List Icons = new();
+ ///
+ /// An entity used for displaying the in the UI control.
+ ///
+ [DataField]
+ public EntProtoId AlertViewEntity = "AlertSpriteView";
+
///
/// Name to show in tooltip window. Accepts formatting.
///
@@ -83,13 +89,9 @@ public sealed partial class AlertPrototype : IPrototype
/// the icon path to the texture for the provided severity level
public SpriteSpecifier GetIcon(short? severity = null)
{
- if (!SupportsSeverity && severity != null)
- {
- throw new InvalidOperationException($"This alert ({AlertKey}) does not support severity");
- }
-
var minIcons = SupportsSeverity
- ? MaxSeverity - MinSeverity : 1;
+ ? MaxSeverity - MinSeverity
+ : 1;
if (Icons.Count < minIcons)
throw new InvalidOperationException($"Insufficient number of icons given for alert {AlertType}");
diff --git a/Content.Shared/Revenant/Components/RevenantComponent.cs b/Content.Shared/Revenant/Components/RevenantComponent.cs
index b3d47e22f973..947c1a4b3fc6 100644
--- a/Content.Shared/Revenant/Components/RevenantComponent.cs
+++ b/Content.Shared/Revenant/Components/RevenantComponent.cs
@@ -9,13 +9,15 @@
namespace Content.Shared.Revenant.Components;
[RegisterComponent, NetworkedComponent]
+[AutoGenerateComponentState]
public sealed partial class RevenantComponent : Component
{
///
/// The total amount of Essence the revenant has. Functions
/// as health and is regenerated.
///
- [ViewVariables(VVAccess.ReadWrite)]
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ [AutoNetworkedField]
public FixedPoint2 Essence = 75;
[DataField("stolenEssenceCurrencyPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))]
diff --git a/Content.Shared/Revenant/SharedRevenant.cs b/Content.Shared/Revenant/SharedRevenant.cs
index c44e4408aaf3..485ad26dd2c9 100644
--- a/Content.Shared/Revenant/SharedRevenant.cs
+++ b/Content.Shared/Revenant/SharedRevenant.cs
@@ -70,3 +70,11 @@ public enum RevenantVisuals : byte
Stunned,
Harvesting,
}
+
+[NetSerializable, Serializable]
+public enum RevenantVisualLayers : byte
+{
+ Digit1,
+ Digit2,
+ Digit3
+}
diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml
index 2d1c9062e61d..e9a7f9c95848 100644
--- a/Resources/Prototypes/Alerts/alerts.yml
+++ b/Resources/Prototypes/Alerts/alerts.yml
@@ -25,6 +25,14 @@
- alertType: Magboots
- alertType: Pacified
+- type: entity
+ id: AlertSpriteView
+ categories: [ hideSpawnMenu ]
+ components:
+ - type: Sprite
+ layers:
+ - map: [ "enum.AlertVisualLayers.Base" ]
+
- type: alert
id: LowOxygen
category: Breathing
diff --git a/Resources/Prototypes/Alerts/revenant.yml b/Resources/Prototypes/Alerts/revenant.yml
index d859cd60f156..7f3f98949e00 100644
--- a/Resources/Prototypes/Alerts/revenant.yml
+++ b/Resources/Prototypes/Alerts/revenant.yml
@@ -4,45 +4,26 @@
icons:
- sprite: /Textures/Interface/Alerts/essence_counter.rsi
state: essence0
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence1
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence2
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence3
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence4
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence5
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence6
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence7
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence8
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence9
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence10
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence11
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence12
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence13
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence14
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence15
- - sprite: /Textures/Interface/Alerts/essence_counter.rsi
- state: essence16
+ alertViewEntity: AlertEssenceSpriteView
name: alerts-revenant-essence-name
description: alerts-revenant-essence-desc
- minSeverity: 0
- maxSeverity: 16
- type: alert
id: Corporeal
icons: [ /Textures/Mobs/Ghosts/revenant.rsi/icon.png ]
name: alerts-revenant-corporeal-name
- description: alerts-revenant-corporeal-desc
\ No newline at end of file
+ description: alerts-revenant-corporeal-desc
+
+- type: entity
+ id: AlertEssenceSpriteView
+ categories: [ hideSpawnMenu ]
+ components:
+ - type: Sprite
+ sprite: /Textures/Interface/Alerts/essence_counter.rsi
+ layers:
+ - map: [ "enum.AlertVisualLayers.Base" ]
+ - map: [ "enum.RevenantVisualLayers.Digit1" ]
+ - map: [ "enum.RevenantVisualLayers.Digit2" ]
+ offset: 0.125, 0
+ - map: [ "enum.RevenantVisualLayers.Digit3" ]
+ offset: 0.25, 0
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/0.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/0.png
new file mode 100644
index 0000000000000000000000000000000000000000..760a92bfe12905d0bc4509ff9cd19b3021163512
GIT binary patch
literal 155
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}p`I>|ArY-_
zuQ+lw81T4Ul>hiIyzlmLCXp2v4StLMzs4}>51+I~N8@^+HU>{uKbLh*2~7a{$TN8W
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/2.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9807aa8161b8806f2ff4b123be9313fa743c1287
GIT binary patch
literal 164
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}ah@)YArY-_
zFFA5G81T4Uw14z>z0JCopw$XDZXDec>#g`wML-Y;?1QT}ygkkA`S@_
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/3.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1776e8efdf319b56555ddfbdcca124bf169cc70
GIT binary patch
literal 156
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}VV*9IArY-_
zFFA5G81T4Ul>hiITyFc(RSFrqe&$~f^04Ccn52@qQHtNw$acl5&v&PP>uySRuD`~X
z@O$r}+ia7z{Q0x3F|XhHLSiM;>GA`DKAa`T^c$F8MTm*ctKISfXaj?%tDnm{r-UW|
DDrPyt
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/4.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1b8c7013ef70babf386586ca963c9ce79680765
GIT binary patch
literal 156
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}VV*9IArY-_
zFB|e5P~c&4wEqA9^Tj0|8(y9WOj+)zpc1yJ1E}gi;?FxCK|3eR{Cv|d{PTnCzfqh8
z$_sc4&elsl2w_rj{VZ+ESh;zx9s8UOJOzCZ@3R$4@ygkExHbXxGI+ZBxvXqop`gR3yJOLZJCn5@F0-j@toU|M`bCJ;hPzhG>+f$k{7qehv*egOgSec5uyk*QU>(pl
N22WQ%mvv4FO#rzxIBfs`
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/6.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/6.png
new file mode 100644
index 0000000000000000000000000000000000000000..1222a73b5e96afd7bf2b51ac48acba13c13e1cfc
GIT binary patch
literal 167
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}iJmTwArY-_
zFB|e5P~dUC_teaQ$C3KLh}pwii?OC8qynD`0fZ7m&H@WxWn)
O8H1;*pUXO@geCyOJ2}w+
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/7.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/7.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6bef33ed5b8ff016f63df81a74ea10523f62063
GIT binary patch
literal 154
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}A)YRdArY-_
zFB|eTD2T9JjD7rf{T?$hmW>7z{SWTpbKc~S0|2$y>@2s7=
zo>t5BYj{0^K7C4T$WMJ;dw`2Y;Dc1aPwjVanatY+#E+d<3jvzX;OXk;vd$@?2>>mA
BHVFU#
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/8.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/8.png
new file mode 100644
index 0000000000000000000000000000000000000000..c72dbb5433dce2a4ea26a135c9715c4ac5434e74
GIT binary patch
literal 156
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}VV*9IArY-_
zuQ+lw81T4Ul>hiIyzlm=vE-$6CO!X@P+FefdOApbZS3u6{1-oD!M<
DF~K+W
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/9.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/9.png
new file mode 100644
index 0000000000000000000000000000000000000000..970eeb9740e5abc5e92be635af162c3da366fb7c
GIT binary patch
literal 164
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}ah@)YArY-_
zFFSG_P~dU7IRDb`_{v?P%3@x^=AX;DCK$RI7#kaJKAaTe5o9GG`1#)acdiEw15$Gt
z)_vlNXDYcbP0l+XkK{+u{n
literal 0
HcmV?d00001
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence0.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence0.png
index 361fa844e1614ec52db3e4a1f0062ba726358cab..3523928f3cd11fe2cdc777c699097797e696ebc1 100644
GIT binary patch
delta 87
zcmdnb^q+BpA>+=8Mor#Irx>@a5oF&ZBT>M9VU2NA-Q*z3_#%N>gTe~DWM4fN$nkK
delta 152
zcmV;J0B8UI0lxx}F#-9JGJ=0XG35XM|L~N}$jHcu%*SZ}BO^r)!AOK_`1mmRFpMmZ
zu8wLBpf?~Y4TOC9gww~wG}|a@k`V&-T1E_Nyu3K&DQ=R{8j$4xViO=mO)_G#ASo7+
zPx#s9@z)Y1w|6Uxo
zijeY+v1&gz?yG@9X53uxyuZp4MQ*RlWSuR0_;jpI#qW=1HojpAK5c6fz@P#w#E7R?
zkdjn`S^xkv?`J*%mG@{cKiL{qoq-}ChNK|`xJ$;)NRj~Nj?Dc+7QX_mPZT4{ZbUyx
zL`41ncg~rF4BkMPuhY|=iO6W&0{se%4N^vDAndf?b^k18Z8NQ8jCyxK<^5#byppZW
w|E*-Hg;WCAjPFJ%I<`PFPpktd1d_0y#N3J07*qoM6N<$f(8nIg8%>k
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence10.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence10.png
deleted file mode 100644
index 62557685d960278e7a3f3f7d193810b3b8227678..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 308
zcmV-40n7f0P)Px#?ny*JR9J=WmOT!_FbsvC5o@l|fejYMo`#8$b1*V-nvN{6F>s9@z$_Gn{={+I
zDniOP#f@seH13muLS`tmdEB0Pjv|-GX|m2*dik)gO~tRbCb++n61>{hBtSwGU?E1l
zcm*j*HK+vuK=Zuk6Hqya2I0=uuxJky0Wl;sAt1YCY>y-fklaynKcCsJKPx#>PbXFR9J=WRxu93FbuR2YrfHe4Hm|}hKZ4PFf#F)j4ZG*@QpqoOp#2J#&Mh~
zLdtEeRo^+eo(#~@7?>)a_g7bgof6X=h8Yst3A&92A)lfKSO>j}!^u(veF)it1M&&50gF&4Vat
z;+zxh0Enm(@^b>7-1qca=riRLYKtmh=@`TjJpF2
z#w^y=E7{ukzm=?%sHy;JN^L4egGiDC+8}D4gdJZyfMj*-XyteS0000Px#@kvBMR9J=WRxu93Fbq5+)_kJ_8!U`{4HF~pU}WMo8ChUs;2V8_Sttr>6UTL{
z2q`zkvSMFi`(&V^Fev3bZqGbNlFQ>1&9jy+ANH*&`Ss?L{*@Hq)paHU5<~(P=dIF_Le%&Urh5(dDZs-obz9hp7-|3j002ov
JPDHLkV1mhjdUyZ;
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence13.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence13.png
deleted file mode 100644
index d853af038e32b3de7df83d52e0e023a249975208..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 311
zcmV-70m%M|P)Px#@kvBMR9J=WRk>+{v*4auwpN_Su`0d^X;~Oc#yX#B@B!~noh#@bw
zASI~=Y61Yzz8?7qRL-GASlJq^s)0fv21z0WWS5N9ND=|b9VPc0WAPSfeWDmqb|ac3
zVP@3~Ktv`YKR3`9?{hLU#`)*=R!m-j@jz-!G~hd>?Px#`$$D@pip&HNV}<-uz4}@UAKs0Szhv4=m)>
z5ez9BgJ=Q(P`)115m*!jO7tr`2BT^q6R=>A2m#$Ctr{6bKyydU{Unl)Al4_c5lwDH
zjUvn(wF3~5i%3m`p*ayD)NMOu-iyXxkgBj14Gl1}NPx#?MXyIR9J=WR=X9#Fbq8LXtM@A6(!S9Q8EW571Ow+fsTSTGJt4sp24wYMaeUT
zuktU_*}B{l&`=qa+dOX1JV%ntPx#^GQTOR9J=WmZ1*9Fcd{^33h&Z0*^wX_9-YN-+@H&DN~gga0tZo{63(ll9Hu;
z?RzCf^dw8Owd=ddySpn;DU1qD9=B(cqsZlP^43{XFCTV$QSs|d2j^GR2CsP*37{Ya
zNQek*a!DjlixbIIO<)SRe6
zR6K|j02pJ$|9zztOVG!JPx#<4Ht8R9J=WmOTyvAryoMW6L$Ru+zqJPh(~2IV`O_4W*5C7G7fy@T}IXKQO?<
zpb1~H1$p5yz+@JnQ5h2|ZkKy0vB=@F^R6>zlQ-*LwfOPmg7q0|a2p1d00tGHAx1pC
zf}Ex)BntolcRkk=&{+$Iu(MP6st1~Y7_v+V@RW@8NR|MWjx7DA6u*MhoM=H*J&2x~
zh)DAP-x#A3@^%8#ej-B0T7EN#raK*X={t#-XPfFt#^@I-bk=(7ER?7KrN=1$@g!qz
v*QDb|0k6j%GGxhA9E0fbMUGWePr}9>MaynpeLAFW00000NkvXXu0mjfrcZi=
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence3.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence3.png
deleted file mode 100644
index 7d22c2a9b6fd6abece4f214ea51257ada2d50535..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 299
zcmV+`0o4A9P)Px#(FbqW<)HT=Wz(yCwo`#8$b1*V-nv5*4F>s9@z)VF!H2HBH
zln!}Pht#V5lUTndYE;I=g2&yNOBA_0PQf}I`uMOPRmHD27maUFg4Z;u1R$UQ4JqQ`
z733t9AQnJG0(xu7QM|Jy{Iv&~fE2QtkO;eEYL8?IK<{Cvy|*IL$TME*|aU4~8~Wo%Q8WQcJ)P;YH8j!X#(Q1%#P{Ug~@
x59AaQ3Gj<8753kibj8_-K2PFWMRg}^ya8MLYh*4q0I&c6002ovPDHLkV1nTIdgTBB
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence4.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence4.png
deleted file mode 100644
index 98f6fc0764a46fe530dad69e6106a0ca8b4f1873..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 321
zcmV-H0lxl;P)Px#`$?00~0G
zvn5Cg8iQy70MI_W`259gPhGmS&?7MggCMV#EY4$VZEEwSplPx#=t)FDR9J=WmN5>(FbqY15Noc{fejYMo`#8$b1*V-nv5*4F>s9@zznD;h&Dfo
zgTjy}bx5q*zlrs0pivnU3hviODN*EfJIvNuvX^(;URC^jal!b4C3p;jN&tfj&=4b@
zUO`UM6p{r1fV*Go3FxeaL%6e3_-PL`0WoAXA;4WSwnwrAFn46`=TrO&QhlNsQFSBw
zNFpN1|9@kQO32p<`1wSHuC@H95wS1z<1u5KY9wRys|`A9XXEOT40!d0ve$G1aw#&B
zjrSiq0gXFO3h;|f754W^y5eX=?Px#<4Ht8R9J=WmN5>(FbqY15Noc{fejYMo`#8$b1*V-nv5*4F>s9@zzhf!S~ZUC
zpfKb~9U`mtZ~OIYpivo@D(=@uDlz1AJIu~mayRd`y=nOQ5|Z@=*WfV>CIK9*01G+d
z*-xNpDnTp&0K)xRPeA8A0@BWw@KX;o0Xe8l2=FPH>k*XzE*-h_iz)sIq&d-osCp26
zH6bGL|KB-h5;A!MaX%tr&sP33h`1+>>p5$iX(i+6R~vNR&(_T=8SwIj(Q7sVT8gb?
vV^3%Xi3E&?rOqW&@f}2;EAwokdJ;CCIOS_%*kMnp00000NkvXXu0mjfc%gRF
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence7.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence7.png
deleted file mode 100644
index febaf3d09c9d93c84aaf9e063739c2028df398cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 317
zcmV-D0mA-?P)Px#_en%SR9J;$U>F4h3>fiAW*heYr-mg{&llsghlP;lRC9ZZET4VyAYOSULI&LW
z{Fx#L5CQ}pKnWnm@dTrQ979O~Bs+kCfq~)RwQ~dK05x7-hJy_FQ#L7prfFc*0mJ~Z
z5+MTv;Zl;=G(wgG2$hb6Nmj61b6V-IfhUM2fXrB1JHs9j$s88OdOXyB>*D?aG41cr$*s33XlN+4L)^F=lYI$
P00000NkvXXu0mjfqMUZm
diff --git a/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence8.png b/Resources/Textures/Interface/Alerts/essence_counter.rsi/essence8.png
deleted file mode 100644
index 4a2ba8d13ecebd70341adfc67e06c232a65a3952..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 295
zcmV+?0oeYDP)Px#;Ymb6R9J=WmOT!_FbsuX5Noc{fejYMo`#8$b1*V-nv5*4F>s9@z)VH`QDZw!
z6^49L2P>-mQd_SEDur>e!}I=1If~p~m&H0;?&Z_5H5I=8F4awdDtxr@VDsDuh
zBt)eC|2yYQLS|oJn2(6q*vfwzk>uumELq!3D;Y3u%anF^K;!-5xp^g98Px#-bqA3R9J=WmN5>(FbqW<#M*1HGcj@+CPvP|$i!(fc7ct7YxDqS3JRjlck+Y6
zkSBFWqT0W)^=pw%V_fR+xIJr)B$xYXG0z&keAw-&cSPWo)BHG6ZW%rV@~S#tSH=%19PEed!ihXPgxf
qC!0$g@6~k0U_|f7xTa|Cgq;^t>uX|n0zv%%0000