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