diff --git a/Content.Client/_EstacaoPirata/Cards/Card/CardSystem.cs b/Content.Client/_EstacaoPirata/Cards/Card/CardSystem.cs
new file mode 100644
index 0000000000..09de5e5594
--- /dev/null
+++ b/Content.Client/_EstacaoPirata/Cards/Card/CardSystem.cs
@@ -0,0 +1,74 @@
+using System.Linq;
+using Content.Shared._EstacaoPirata.Cards.Card;
+using Robust.Client.GameObjects;
+using Robust.Shared.Utility;
+
+namespace Content.Client._EstacaoPirata.Cards.Card;
+
+///
+/// This handles...
+///
+public sealed class CardSystem : EntitySystem
+{
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnComponentStartupEvent);
+ SubscribeNetworkEvent(OnFlip);
+ }
+
+ private void OnComponentStartupEvent(EntityUid uid, CardComponent comp, ComponentStartup args)
+ {
+ if (!TryComp(uid, out SpriteComponent? spriteComponent))
+ return;
+
+ for (var i = 0; i < spriteComponent.AllLayers.Count(); i++)
+ {
+ //Log.Debug($"Layer {i}");
+ if (!spriteComponent.TryGetLayer(i, out var layer) || layer.State.Name == null)
+ continue;
+
+ var rsi = layer.RSI ?? spriteComponent.BaseRSI;
+ if (rsi == null)
+ continue;
+
+ //Log.Debug("FOI");
+ comp.FrontSprite.Add(new SpriteSpecifier.Rsi(rsi.Path, layer.State.Name));
+ }
+
+ comp.BackSprite ??= comp.FrontSprite;
+ DirtyEntity(uid);
+ UpdateSprite(uid, comp);
+ }
+
+ private void OnFlip(CardFlipUpdatedEvent args)
+ {
+ if (!TryComp(GetEntity(args.Card), out CardComponent? comp))
+ return;
+ UpdateSprite(GetEntity(args.Card), comp);
+ }
+
+ private void UpdateSprite(EntityUid uid, CardComponent comp)
+ {
+ var newSprite = comp.Flipped ? comp.BackSprite : comp.FrontSprite;
+
+ if (!TryComp(uid, out SpriteComponent? spriteComponent))
+ return;
+ var layerCount = newSprite.Count();
+
+ //inserts Missing Layers
+ if (spriteComponent.AllLayers.Count() < layerCount)
+ for (var i = spriteComponent.AllLayers.Count(); i < layerCount; i++)
+ spriteComponent.AddBlankLayer(i);
+ //Removes extra layers
+ else if (spriteComponent.AllLayers.Count() > layerCount)
+ for (var i = spriteComponent.AllLayers.Count() - 1; i >= layerCount; i--)
+ spriteComponent.RemoveLayer(i);
+
+ for (var i = 0; i < newSprite.Count(); i++)
+ {
+ var layer = newSprite[i];
+ spriteComponent.LayerSetSprite(i, layer);
+ }
+ }
+}
diff --git a/Content.Client/_EstacaoPirata/Cards/CardSpriteSystem.cs b/Content.Client/_EstacaoPirata/Cards/CardSpriteSystem.cs
new file mode 100644
index 0000000000..581e517b04
--- /dev/null
+++ b/Content.Client/_EstacaoPirata/Cards/CardSpriteSystem.cs
@@ -0,0 +1,76 @@
+using System.Linq;
+using Content.Shared._EstacaoPirata.Cards.Stack;
+using Robust.Client.GameObjects;
+
+namespace Content.Client._EstacaoPirata.Cards;
+
+///
+/// This handles...
+///
+public sealed class CardSpriteSystem : EntitySystem
+{
+ ///
+ public override void Initialize() { }
+
+ public bool TryAdjustLayerQuantity(Entity uid, int? cardLimit = null)
+ {
+ var sprite = uid.Comp1;
+ var stack = uid.Comp2;
+ var cardCount = cardLimit == null ? stack.Cards.Count : Math.Min(stack.Cards.Count, cardLimit.Value);
+
+ var layerCount = 0;
+ //Gets the quantity of layers
+ var relevantCards = stack.Cards.TakeLast(cardCount).ToList();
+ foreach (var card in relevantCards)
+ {
+ if (!TryComp(card, out SpriteComponent? cardSprite))
+ return false;
+
+ layerCount += cardSprite.AllLayers.Count();
+ }
+ layerCount = int.Max(1, layerCount); // Frontier: you need one layer.
+ //inserts Missing Layers
+ if (sprite.AllLayers.Count() < layerCount)
+ for (var i = sprite.AllLayers.Count(); i < layerCount; i++)
+ sprite.AddBlankLayer(i);
+
+ //Removes extra layers
+ else if (sprite.AllLayers.Count() > layerCount)
+ for (var i = sprite.AllLayers.Count() - 1; i >= layerCount; i--)
+ sprite.RemoveLayer(i);
+
+ return true;
+ }
+
+ public bool TryHandleLayerConfiguration(Entity uid, int cardCount, Func, int, int, bool> layerFunc)
+ {
+ var sprite = uid.Comp1;
+ var stack = uid.Comp2;
+
+ // int = index of what card it is from
+ List<(int, ISpriteLayer)> layers = [];
+
+ var i = 0;
+ var cards = stack.Cards.TakeLast(cardCount).ToList();
+ foreach (var card in cards)
+ {
+ if (!TryComp(card, out SpriteComponent? cardSprite))
+ return false;
+ layers.AddRange(cardSprite.AllLayers.Select(layer => (i, layer)));
+ i++;
+ }
+
+ var j = 0;
+ foreach (var obj in layers)
+ {
+ var (cardIndex, layer) = obj;
+ sprite.LayerSetVisible(j, true);
+ sprite.LayerSetTexture(j, layer.Texture);
+ sprite.LayerSetState(j, layer.RsiState.Name);
+ layerFunc.Invoke((uid, sprite), cardIndex, j);
+ j++;
+ }
+
+ return true;
+ }
+}
diff --git a/Content.Client/_EstacaoPirata/Cards/Deck/CardDeckSystem.cs b/Content.Client/_EstacaoPirata/Cards/Deck/CardDeckSystem.cs
new file mode 100644
index 0000000000..9b99b1ac06
--- /dev/null
+++ b/Content.Client/_EstacaoPirata/Cards/Deck/CardDeckSystem.cs
@@ -0,0 +1,151 @@
+using System.Linq;
+using System.Numerics;
+using Content.Shared._EstacaoPirata.Cards.Deck;
+using Content.Shared._EstacaoPirata.Cards.Stack;
+using Robust.Client.GameObjects;
+
+namespace Content.Client._EstacaoPirata.Cards.Deck;
+
+///
+/// This handles...
+///
+public sealed class CardDeckSystem : EntitySystem
+{
+ private readonly Dictionary, int> _notInitialized = [];
+ [Dependency] private readonly CardSpriteSystem _cardSpriteSystem = default!;
+
+
+ ///
+ public override void Initialize()
+ {
+ UpdatesOutsidePrediction = false;
+ SubscribeLocalEvent(OnComponentStartupEvent);
+ SubscribeNetworkEvent(OnStackStart);
+ SubscribeNetworkEvent(OnStackUpdate);
+ SubscribeNetworkEvent(OnReorder);
+ SubscribeNetworkEvent(OnStackFlip);
+ SubscribeLocalEvent(OnAppearanceChanged);
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ // Lazy way to make sure the sprite starts correctly
+ foreach (var kv in _notInitialized)
+ {
+ var ent = kv.Key;
+
+ if (kv.Value >= 5)
+ {
+ _notInitialized.Remove(ent);
+ continue;
+ }
+
+ _notInitialized[ent] = kv.Value + 1;
+
+ if (!TryComp(ent.Owner, out CardStackComponent? stack) || stack.Cards.Count <= 0)
+ continue;
+
+
+ // If the card was STILL not initialized, we skip it
+ if (!TryGetCardLayer(stack.Cards.Last(), out var _))
+ continue;
+
+ // If cards were correctly initialized, we update the sprite
+ UpdateSprite(ent.Owner, ent.Comp);
+ _notInitialized.Remove(ent);
+ }
+
+ }
+
+
+ private bool TryGetCardLayer(EntityUid card, out SpriteComponent.Layer? layer)
+ {
+ layer = null;
+ if (!TryComp(card, out SpriteComponent? cardSprite)
+ || !cardSprite.TryGetLayer(0, out var l))
+ return false;
+
+ layer = l;
+ return true;
+ }
+
+ private void UpdateSprite(EntityUid uid, CardDeckComponent comp)
+ {
+ if (!TryComp(uid, out SpriteComponent? sprite)
+ || !TryComp(uid, out CardStackComponent? cardStack))
+ return;
+
+ // Prevents error appearing at spawnMenu
+ if (cardStack.Cards.Count <= 0 || !TryGetCardLayer(cardStack.Cards.Last(), out var cardlayer) ||
+ cardlayer == null)
+ {
+ _notInitialized[(uid, comp)] = 0;
+ return;
+ }
+
+ _cardSpriteSystem.TryAdjustLayerQuantity((uid, sprite, cardStack), comp.CardLimit);
+
+ _cardSpriteSystem.TryHandleLayerConfiguration(
+ (uid, sprite, cardStack),
+ comp.CardLimit,
+ (_, cardIndex, layerIndex) =>
+ {
+ sprite.LayerSetRotation(layerIndex, Angle.FromDegrees(90));
+ sprite.LayerSetOffset(layerIndex, new Vector2(0, (comp.YOffset * cardIndex)));
+ sprite.LayerSetScale(layerIndex, new Vector2(comp.Scale, comp.Scale));
+ return true;
+ }
+ );
+ }
+
+ private void OnStackUpdate(CardStackQuantityChangeEvent args)
+ {
+ if (!TryComp(GetEntity(args.Stack), out CardDeckComponent? comp))
+ return;
+ UpdateSprite(GetEntity(args.Stack), comp);
+ }
+
+ private void OnStackFlip(CardStackFlippedEvent args)
+ {
+ if (!TryComp(GetEntity(args.CardStack), out CardDeckComponent? comp))
+ return;
+ UpdateSprite(GetEntity(args.CardStack), comp);
+ }
+
+ private void OnReorder(CardStackReorderedEvent args)
+ {
+ if (!TryComp(GetEntity(args.Stack), out CardDeckComponent? comp))
+ return;
+ UpdateSprite(GetEntity(args.Stack), comp);
+ }
+
+ private void OnAppearanceChanged(EntityUid uid, CardDeckComponent comp, AppearanceChangeEvent args)
+ {
+ UpdateSprite(uid, comp);
+ }
+ private void OnComponentStartupEvent(EntityUid uid, CardDeckComponent comp, ComponentStartup args)
+ {
+ if (!TryComp(uid, out CardStackComponent? stack))
+ {
+ _notInitialized[(uid, comp)] = 0;
+ return;
+ }
+
+ if (stack.Cards.Count <= 0)
+ _notInitialized[(uid, comp)] = 0;
+ UpdateSprite(uid, comp);
+ }
+
+
+ private void OnStackStart(CardStackInitiatedEvent args)
+ {
+ var entity = GetEntity(args.CardStack);
+ if (!TryComp(entity, out CardDeckComponent? comp))
+ return;
+
+ UpdateSprite(entity, comp);
+ }
+
+}
diff --git a/Content.Client/_EstacaoPirata/Cards/Hand/CardHandSystem.cs b/Content.Client/_EstacaoPirata/Cards/Hand/CardHandSystem.cs
new file mode 100644
index 0000000000..d35264b87f
--- /dev/null
+++ b/Content.Client/_EstacaoPirata/Cards/Hand/CardHandSystem.cs
@@ -0,0 +1,167 @@
+using System.Linq;
+using System.Numerics;
+using Content.Shared._EstacaoPirata.Cards.Hand;
+using Content.Shared._EstacaoPirata.Cards.Stack;
+using Robust.Client.GameObjects;
+
+namespace Content.Client._EstacaoPirata.Cards.Hand;
+
+///
+/// This handles...
+///
+public sealed class CardHandSystem : EntitySystem
+{
+ private readonly Dictionary, int> _notInit = [];
+ [Dependency] private readonly CardSpriteSystem _cardSpriteSystem = default!;
+
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnComponentStartupEvent);
+ SubscribeNetworkEvent(OnStackStart);
+ SubscribeNetworkEvent(OnStackUpdate);
+ SubscribeNetworkEvent(OnStackReorder);
+ SubscribeNetworkEvent(OnStackFlip);
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+ foreach (var (ent, value) in _notInit)
+ {
+ if (value >= 5)
+ {
+ _notInit.Remove(ent);
+ continue;
+ }
+ _notInit[ent] = value + 1;
+ if (!TryComp(ent.Owner, out CardStackComponent? stack) || stack.Cards.Count <= 0)
+ continue;
+
+ // If cards were correctly initialized, we update the sprite
+ UpdateSprite(ent.Owner, ent.Comp);
+ _notInit.Remove(ent);
+ }
+ }
+
+ private bool TryGetCardLayer(EntityUid card, out SpriteComponent.Layer? layer)
+ {
+ layer = null;
+ if (!TryComp(card, out SpriteComponent? cardSprite)
+ || !cardSprite.TryGetLayer(0, out var l))
+ return false;
+
+ layer = l;
+ return true;
+ }
+
+ private void UpdateSprite(EntityUid uid, CardHandComponent comp)
+ {
+ if (!TryComp(uid, out SpriteComponent? sprite)
+ || !TryComp(uid, out CardStackComponent? cardStack))
+ return;
+
+ // Prevents error appearing at spawnMenu
+ if (cardStack.Cards.Count <= 0 || !TryGetCardLayer(cardStack.Cards.Last(), out var cardlayer) ||
+ cardlayer == null)
+ {
+ _notInit[(uid, comp)] = 0;
+ return;
+ }
+
+ _cardSpriteSystem.TryAdjustLayerQuantity((uid, sprite, cardStack), comp.CardLimit);
+
+ var cardCount = Math.Min(cardStack.Cards.Count, comp.CardLimit);
+
+ // Frontier: zero/one card case
+ if (cardCount <= 0)
+ {
+ // Placeholder - we need to have a valid sprite.
+ sprite.LayerSetVisible(0, true);
+ sprite.LayerSetState(0, "singlecard_down_black");
+ sprite.LayerSetOffset(0, new Vector2(0f, 0f));
+ sprite.LayerSetScale(0, new Vector2(1f, 1f));
+ }
+ else if (cardCount == 1)
+ {
+ _cardSpriteSystem.TryHandleLayerConfiguration(
+ (uid, sprite, cardStack),
+ cardCount,
+ (sprt, cardIndex, layerIndex) =>
+ {
+ sprt.Comp.LayerSetRotation(layerIndex, Angle.FromDegrees(0));
+ sprt.Comp.LayerSetOffset(layerIndex, new Vector2(0, 0.10f));
+ sprt.Comp.LayerSetScale(layerIndex, new Vector2(comp.Scale, comp.Scale));
+ return true;
+ }
+ );
+ }
+ else
+ {
+ var intervalAngle = comp.Angle / (cardCount - 1);
+ var intervalSize = comp.XOffset / (cardCount - 1);
+
+ _cardSpriteSystem.TryHandleLayerConfiguration(
+ (uid, sprite, cardStack),
+ cardCount,
+ (sprt, cardIndex, layerIndex) =>
+ {
+ var angle = (-(comp.Angle / 2)) + cardIndex * intervalAngle;
+ var x = (-(comp.XOffset / 2)) + cardIndex * intervalSize;
+ var y = -(x * x) + 0.10f;
+
+ sprt.Comp.LayerSetRotation(layerIndex, Angle.FromDegrees(-angle));
+ sprt.Comp.LayerSetOffset(layerIndex, new Vector2(x, y));
+ sprt.Comp.LayerSetScale(layerIndex, new Vector2(comp.Scale, comp.Scale));
+ return true;
+ }
+ );
+ }
+ }
+
+
+ private void OnStackUpdate(CardStackQuantityChangeEvent args)
+ {
+ if (!TryComp(GetEntity(args.Stack), out CardHandComponent? comp))
+ return;
+ UpdateSprite(GetEntity(args.Stack), comp);
+ }
+
+ private void OnStackStart(CardStackInitiatedEvent args)
+ {
+ var entity = GetEntity(args.CardStack);
+ if (!TryComp(entity, out CardHandComponent? comp))
+ return;
+
+ UpdateSprite(entity, comp);
+ }
+ private void OnComponentStartupEvent(EntityUid uid, CardHandComponent comp, ComponentStartup args)
+ {
+ if (!TryComp(uid, out CardStackComponent? stack))
+ {
+ _notInit[(uid, comp)] = 0;
+ return;
+ }
+ if (stack.Cards.Count <= 0)
+ _notInit[(uid, comp)] = 0;
+ UpdateSprite(uid, comp);
+ }
+
+ // Frontier
+ private void OnStackReorder(CardStackReorderedEvent args)
+ {
+ if (!TryComp(GetEntity(args.Stack), out CardHandComponent? comp))
+ return;
+ UpdateSprite(GetEntity(args.Stack), comp);
+ }
+
+ private void OnStackFlip(CardStackFlippedEvent args)
+ {
+ var entity = GetEntity(args.CardStack);
+ if (!TryComp(entity, out CardHandComponent? comp))
+ return;
+
+ UpdateSprite(entity, comp);
+ }
+}
diff --git a/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenu.xaml b/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenu.xaml
new file mode 100644
index 0000000000..2f507e1e70
--- /dev/null
+++ b/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenu.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenu.xaml.cs b/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenu.xaml.cs
new file mode 100644
index 0000000000..7635e31b8e
--- /dev/null
+++ b/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenu.xaml.cs
@@ -0,0 +1,87 @@
+using Content.Client.UserInterface.Controls;
+using Content.Shared.Popups;
+using Robust.Client.AutoGenerated;
+using Robust.Client.GameObjects;
+using Robust.Client.Player;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+using System.Numerics;
+using Content.Shared._EstacaoPirata.Cards.Card;
+using Content.Shared._EstacaoPirata.Cards.Stack;
+
+namespace Content.Client._EstacaoPirata.Cards.Hand.UI;
+
+[GenerateTypedNameReferences]
+public sealed partial class CardHandMenu : RadialMenu
+{
+ [Dependency] private readonly EntityManager _entManager = default!;
+ [Dependency] private readonly IPlayerManager _playerManager = default!;
+
+ public event Action? CardHandDrawMessageAction;
+
+ public CardHandMenu(EntityUid owner, CardHandMenuBoundUserInterface bui)
+ {
+ IoCManager.InjectDependencies(this);
+ RobustXamlLoader.Load(this);
+
+ // Find the main radial container
+ var main = FindControl("Main");
+
+ if (!_entManager.TryGetComponent(owner, out var stack))
+ return;
+
+ foreach (var card in stack.Cards)
+ {
+ if (_playerManager.LocalSession == null
+ || !_entManager.TryGetComponent(card, out var cardComp))
+ return;
+
+ string cardName;
+ if (cardComp.Flipped && _entManager.TryGetComponent(card, out var metadata))
+ cardName = metadata.EntityName;
+ else
+ cardName = Loc.GetString(cardComp.Name);
+
+ var button = new CardMenuButton()
+ {
+ StyleClasses = { "RadialMenuButton" },
+ SetSize = new Vector2(64f, 64f),
+ ToolTip = cardName,
+ };
+
+ if (_entManager.TryGetComponent(card, out var sprite))
+ {
+ if (sprite.Icon == null)
+ continue;
+
+ var tex = new TextureRect()
+ {
+ VerticalAlignment = VAlignment.Center,
+ HorizontalAlignment = HAlignment.Center,
+ Texture = sprite.Icon?.Default,
+ TextureScale = new Vector2(2f, 2f),
+ };
+
+ button.AddChild(tex);
+ }
+
+ main.AddChild(button);
+
+ button.OnButtonUp += _ =>
+ {
+ CardHandDrawMessageAction?.Invoke(_entManager.GetNetEntity(card));
+ Close();
+ };
+ }
+
+ CardHandDrawMessageAction += bui.SendCardHandDrawMessage;
+ }
+}
+
+public sealed class CardMenuButton : RadialMenuButton //Swaped from RadialMenuTextureButton to RadialMenuButton that has the same functionaly
+{
+ public CardMenuButton()
+ {
+
+ }
+}
diff --git a/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenuBoundUserInterface.cs b/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenuBoundUserInterface.cs
new file mode 100644
index 0000000000..5c8e3022e1
--- /dev/null
+++ b/Content.Client/_EstacaoPirata/Cards/Hand/UI/CardHandMenuBoundUserInterface.cs
@@ -0,0 +1,42 @@
+using Content.Shared._EstacaoPirata.Cards.Hand;
+using JetBrains.Annotations;
+using Robust.Client.Graphics;
+using Robust.Client.Input;
+
+namespace Content.Client._EstacaoPirata.Cards.Hand.UI;
+
+[UsedImplicitly]
+public sealed class CardHandMenuBoundUserInterface : BoundUserInterface
+{
+ [Dependency] private readonly IClyde _displayManager = default!;
+ [Dependency] private readonly IInputManager _inputManager = default!;
+
+ private CardHandMenu? _menu;
+
+ public CardHandMenuBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
+ {
+ IoCManager.InjectDependencies(this);
+ }
+
+ protected override void Open()
+ {
+ base.Open();
+
+ _menu = new(Owner, this);
+ _menu.OnClose += Close;
+
+ // Open the menu, centered on the mouse
+ var vpSize = _displayManager.ScreenSize;
+ _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize);
+ }
+
+ public void SendCardHandDrawMessage(NetEntity e) => SendMessage(new CardHandDrawMessage(e));
+
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ if (!disposing) return;
+
+ _menu?.Dispose();
+ }
+}
diff --git a/Content.Server/_EstacoPirata/OpenTriggeredStorageFill/OpenTriggeredStorageFillComponent.cs b/Content.Server/_EstacoPirata/OpenTriggeredStorageFill/OpenTriggeredStorageFillComponent.cs
new file mode 100644
index 0000000000..25f5c3f5cd
--- /dev/null
+++ b/Content.Server/_EstacoPirata/OpenTriggeredStorageFill/OpenTriggeredStorageFillComponent.cs
@@ -0,0 +1,13 @@
+using Content.Shared.Storage;
+
+namespace Content.Server._EstacaoPirata.OpenTriggeredStorageFill;
+
+///
+/// This is used for storing an item prototype to be inserted into a container when the trigger is activated. This is deleted from the entity after the item is inserted.
+///
+[RegisterComponent]
+public sealed partial class OpenTriggeredStorageFillComponent : Component
+{
+ [DataField]
+ public List Contents = new();
+}
diff --git a/Content.Server/_EstacoPirata/OpenTriggeredStorageFill/OpenTriggeredStorageFillSystem.cs b/Content.Server/_EstacoPirata/OpenTriggeredStorageFill/OpenTriggeredStorageFillSystem.cs
new file mode 100644
index 0000000000..b00ad7692c
--- /dev/null
+++ b/Content.Server/_EstacoPirata/OpenTriggeredStorageFill/OpenTriggeredStorageFillSystem.cs
@@ -0,0 +1,66 @@
+using Content.Server.Popups;
+using Content.Server.Spawners.Components;
+using Content.Shared.Examine;
+using Content.Shared.Interaction;
+using Content.Shared.Item;
+using Content.Shared.Prototypes;
+using Content.Shared.Storage;
+using Content.Shared.Storage.EntitySystems;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Server._EstacaoPirata.OpenTriggeredStorageFill;
+
+///
+/// This handles...
+///
+public sealed class OpenTriggeredStorageFillSystem : EntitySystem
+{
+
+ [Dependency] private readonly SharedStorageSystem _storage = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnOpenEvent);
+ SubscribeLocalEvent(OnExamineEvent);
+ }
+
+ private void OnExamineEvent(EntityUid uid, OpenTriggeredStorageFillComponent component, ExaminedEvent args)
+ {
+ args.PushText(Loc.GetString("container-sealed"));
+ }
+
+ //Yes, that's a copy of StorageSystem StorageFill method
+ private void OnOpenEvent(EntityUid uid, OpenTriggeredStorageFillComponent comp, ActivateInWorldEvent args)
+ {
+ Log.Debug($"Processing storage fill trigger for entity {ToPrettyString(uid)}");
+
+ var coordinates = Transform(uid).Coordinates;
+
+ var spawnItems = EntitySpawnCollection.GetSpawns(comp.Contents);
+ foreach (var item in spawnItems)
+ {
+ DebugTools.Assert(!_prototype.Index(item)
+ .HasComponent(typeof(RandomSpawnerComponent)));
+ var ent = Spawn(item, coordinates);
+
+ if (!TryComp(ent, out var itemComp))
+ {
+ Log.Error($"Tried to fill {ToPrettyString(uid)} with non-item {item}.");
+ Del(ent);
+ continue;
+ }
+ if (!_storage.Insert(uid, ent, out var remainingEnt, out var reason, playSound: false))
+ {
+ Log.Error($"Failed to fill {ToPrettyString(uid)} with {ToPrettyString(ent)}. Reason: {reason}");
+ // Clean up the spawned entity if insertion fails
+ Del(ent);
+ }
+ }
+ _popup.PopupEntity(Loc.GetString("container-unsealed"), args.Target);
+ RemComp(uid, comp);
+ }
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Card/CardComponent.cs b/Content.Shared/_EstacoPirata/Cards/Card/CardComponent.cs
new file mode 100644
index 0000000000..6ccf7f5b21
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Card/CardComponent.cs
@@ -0,0 +1,44 @@
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._EstacaoPirata.Cards.Card;
+
+///
+/// This is used for...
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class CardComponent : Component
+{
+ ///
+ /// The back of the card
+ ///
+ [DataField(readOnly: true)]
+ public List BackSprite = [];
+
+ ///
+ /// The front of the card
+ ///
+ [DataField(readOnly: true)]
+ public List FrontSprite = [];
+
+ ///
+ /// If it is currently flipped. This is used to update sprite and name.
+ ///
+ [DataField(readOnly: true), AutoNetworkedField]
+ public bool Flipped = false;
+
+
+ ///
+ /// The name of the card.
+ ///
+ [DataField(readOnly: true), AutoNetworkedField]
+ public string Name = "";
+
+}
+
+[Serializable, NetSerializable]
+public sealed class CardFlipUpdatedEvent(NetEntity card) : EntityEventArgs
+{
+ public NetEntity Card = card;
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Card/CardSystem.cs b/Content.Shared/_EstacoPirata/Cards/Card/CardSystem.cs
new file mode 100644
index 0000000000..68766eda2a
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Card/CardSystem.cs
@@ -0,0 +1,223 @@
+using Content.Shared._EstacaoPirata.Cards.Deck;
+using Content.Shared._EstacaoPirata.Cards.Hand;
+using Content.Shared._EstacaoPirata.Cards.Stack;
+using Content.Shared.Examine;
+using Content.Shared.Hands.Components;
+using Content.Shared.Hands.EntitySystems;
+using Content.Shared.Interaction;
+using Content.Shared.Interaction.Events;
+using Content.Shared.Verbs;
+using Robust.Shared.Containers;
+using Robust.Shared.Network;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._EstacaoPirata.Cards.Card;
+
+///
+/// This handles...
+///
+public sealed class CardSystem : EntitySystem
+{
+ [Dependency] private readonly INetManager _net = default!;
+ [Dependency] private readonly CardStackSystem _cardStack = default!;
+ [Dependency] private readonly CardDeckSystem _cardDeck = default!;
+ [Dependency] private readonly CardHandSystem _cardHand = default!;
+ [Dependency] private readonly SharedContainerSystem _container = default!;
+ [Dependency] private readonly SharedHandsSystem _hands = default!;
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent>(AddTurnOnVerb);
+ SubscribeLocalEvent>(OnActivationVerb);
+ SubscribeLocalEvent(OnExamined);
+ SubscribeLocalEvent(OnUse);
+ SubscribeLocalEvent(OnActivate);
+ }
+ private void OnExamined(EntityUid uid, CardComponent component, ExaminedEvent args)
+ {
+ if (args.IsInDetailsRange && !component.Flipped)
+ {
+ args.PushMarkup(Loc.GetString("card-examined", ("target", Loc.GetString(component.Name))));
+ }
+ }
+
+ private void AddTurnOnVerb(EntityUid uid, CardComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract || args.Hands == null)
+ return;
+
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => FlipCard(uid, component),
+ Text = Loc.GetString("cards-verb-flip"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/flip.svg.192dpi.png")),
+ Priority = 1
+ });
+
+ if (args.Using == null || args.Using == args.Target)
+ return;
+
+ if (TryComp(args.Using, out var usingStack))
+ {
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => JoinCards(args.User, args.Target, component, (EntityUid)args.Using, usingStack),
+ Text = Loc.GetString("card-verb-join"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")),
+ Priority = 2
+ });
+ }
+ else if (TryComp(args.Using, out var usingCard))
+ {
+ var pickup = _hands.IsHolding(args.User, args.Target);
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => _cardHand.TrySetupHandOfCards(args.User, args.Target, component, args.Using.Value, usingCard, pickup),
+ Text = Loc.GetString("card-verb-join"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")),
+ Priority = 2
+ });
+ }
+ }
+
+ private void OnUse(EntityUid uid, CardComponent comp, UseInHandEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ FlipCard(uid, comp);
+ args.Handled = true;
+ }
+
+ ///
+ /// Server-Side only method to flip card. This starts CardFlipUpdatedEvent event
+ ///
+ ///
+ ///
+ private void FlipCard(EntityUid uid, CardComponent component)
+ {
+ if (_net.IsClient)
+ return;
+ component.Flipped = !component.Flipped;
+ Dirty(uid, component);
+ RaiseNetworkEvent(new CardFlipUpdatedEvent(GetNetEntity(uid)));
+ }
+
+ private void JoinCards(EntityUid user, EntityUid first, CardComponent firstComp, EntityUid second, CardStackComponent secondStack)
+ {
+ if (_net.IsClient)
+ return;
+ bool pickup = _hands.IsHolding(user, first);
+ EntityUid cardStack;
+ bool? flip = null;
+ if (HasComp(second))
+ {
+ cardStack = SpawnInSameParent(_cardDeck.CardDeckBaseName, first);
+ }
+ else if (HasComp(second))
+ {
+ cardStack = SpawnInSameParent(_cardHand.CardHandBaseName, first);
+ if(TryComp(cardStack, out var stackHand))
+ stackHand.Flipped = firstComp.Flipped;
+ flip = firstComp.Flipped;
+ }
+ else
+ return;
+
+ if (!TryComp(cardStack, out CardStackComponent? stack))
+ return;
+ if (!_cardStack.TryInsertCard(cardStack, first, stack))
+ return;
+ _cardStack.TransferNLastCardFromStacks(user, secondStack.Cards.Count, second, secondStack, cardStack, stack);
+ if (flip != null)
+ _cardStack.FlipAllCards(cardStack, stack, flip); //???
+ if(pickup)
+ _hands.TryPickupAnyHand(user, cardStack);
+ }
+
+ // Frontier: tries to spawn an entity with the same parent as another given entity.
+ // Useful when spawning decks/hands in a backpack, for example.
+ private EntityUid SpawnInSameParent(EntProtoId prototype, EntityUid uid)
+ {
+ if (_container.IsEntityOrParentInContainer(uid) &&
+ _container.TryGetOuterContainer(uid, Transform(uid), out var container))
+ {
+ return SpawnInContainerOrDrop(prototype, container.Owner, container.ID);
+ }
+ return Spawn(prototype, Transform(uid).Coordinates);
+ }
+
+ // Frontier: hacky misuse of the activation verb, but allows us a separate way to draw cards without needing additional buttons and event fiddling
+ private void OnActivationVerb(EntityUid uid, CardComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract || args.Hands == null)
+ return;
+
+ if (args.Using == args.Target)
+ return;
+
+ if (HasComp(uid))
+ return;
+
+ if (args.Using == null)
+ {
+ args.Verbs.Add(new ActivationVerb()
+ {
+ Act = () => _hands.TryPickupAnyHand(args.User, args.Target),
+ Text = Loc.GetString("cards-verb-draw"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")),
+ Priority = 16
+ });
+ }
+ else if (TryComp(args.Using, out var cardStack))
+ {
+ args.Verbs.Add(new ActivationVerb()
+ {
+ Act = () => _cardStack.InsertCardOnStack(args.User, args.Using.Value, cardStack, args.Target),
+ Text = Loc.GetString("cards-verb-draw"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")),
+ Priority = 16
+ });
+ }
+ else if (TryComp(args.Using, out var card))
+ {
+ args.Verbs.Add(new ActivationVerb()
+ {
+ Act = () => _cardHand.TrySetupHandOfCards(args.User, args.Using.Value, card, args.Target, component, true),
+ Text = Loc.GetString("cards-verb-draw"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")),
+ Priority = 16
+ });
+ }
+ }
+ // End Frontier
+
+ private void OnActivate(EntityUid uid, CardComponent component, ActivateInWorldEvent args)
+ {
+ if (!args.Complex || args.Handled)
+ return;
+
+ if (!TryComp(args.User, out var hands))
+ return;
+
+ // Card stacks are handled differently
+ if (HasComp(args.Target))
+ return;
+
+ var activeItem = _hands.GetActiveItem((args.User, hands));
+
+ if (activeItem == null)
+ {
+ _hands.TryPickupAnyHand(args.User, args.Target);
+ }
+ else if (TryComp(activeItem, out var cardStack))
+ {
+ _cardStack.InsertCardOnStack(args.User, activeItem.Value, cardStack, args.Target);
+ }
+ else if (TryComp(activeItem, out var card))
+ {
+ _cardHand.TrySetupHandOfCards(args.User, activeItem.Value, card, args.Target, component, true);
+ }
+ }
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Deck/CardDeckComponent.cs b/Content.Shared/_EstacoPirata/Cards/Deck/CardDeckComponent.cs
new file mode 100644
index 0000000000..f695eab8d9
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Deck/CardDeckComponent.cs
@@ -0,0 +1,28 @@
+using Robust.Shared.Audio;
+
+namespace Content.Shared._EstacaoPirata.Cards.Deck;
+
+///
+/// This is used for...
+///
+[RegisterComponent]
+public sealed partial class CardDeckComponent : Component
+{
+ [DataField]
+ public SoundSpecifier ShuffleSound = new SoundCollectionSpecifier("cardFan");
+
+ [DataField]
+ public SoundSpecifier PickUpSound = new SoundCollectionSpecifier("cardSlide");
+
+ [DataField]
+ public SoundSpecifier PlaceDownSound = new SoundCollectionSpecifier("cardShove");
+
+ [DataField]
+ public float YOffset = 0.02f;
+
+ [DataField]
+ public float Scale = 1;
+
+ [DataField]
+ public int CardLimit = 5;
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Deck/CardDeckSystem.cs b/Content.Shared/_EstacoPirata/Cards/Deck/CardDeckSystem.cs
new file mode 100644
index 0000000000..dc5096c810
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Deck/CardDeckSystem.cs
@@ -0,0 +1,123 @@
+using Content.Shared._EstacaoPirata.Cards.Card;
+using Content.Shared._EstacaoPirata.Cards.Stack;
+using Content.Shared.Audio;
+using Content.Shared.Hands.EntitySystems;
+using Content.Shared.Interaction;
+using Content.Shared.Item;
+using Content.Shared.Popups;
+using Content.Shared.Verbs;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Containers;
+using Robust.Shared.Network;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Random;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._EstacaoPirata.Cards.Deck;
+
+///
+/// This handles card decks
+///
+public sealed class CardDeckSystem : EntitySystem
+{
+ [Dependency] private readonly SharedHandsSystem _hands = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+ [Dependency] private readonly CardStackSystem _cardStackSystem = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly INetManager _net = default!;
+ [Dependency] private readonly SharedContainerSystem _container = default!;
+ public readonly EntProtoId CardDeckBaseName = "CardDeckBase";
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent>(AddTurnOnVerb);
+ }
+
+ private void AddTurnOnVerb(EntityUid uid, CardDeckComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract || args.Hands == null)
+ return;
+
+ if (!TryComp(uid, out CardStackComponent? comp))
+ return;
+
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => TryShuffle(uid, component, comp),
+ Text = Loc.GetString("cards-verb-shuffle"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/die.svg.192dpi.png")),
+ Priority = 4
+ });
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => TrySplit(args.Target, component, comp, args.User),
+ Text = Loc.GetString("cards-verb-split"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/dot.svg.192dpi.png")),
+ Priority = 3
+ });
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => TryOrganize(uid, component, comp, true),
+ Text = Loc.GetString("cards-verb-organize-down"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/flip.svg.192dpi.png")),
+ Priority = 2
+ });
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => TryOrganize(uid, component, comp, false),
+ Text = Loc.GetString("cards-verb-organize-up"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/flip.svg.192dpi.png")),
+ Priority = 1
+ });
+ }
+
+ private void TrySplit(EntityUid uid, CardDeckComponent deck, CardStackComponent stack, EntityUid user)
+ {
+ if (stack.Cards.Count <= 1)
+ return;
+
+ _audio.PlayPredicted(deck.PickUpSound, Transform(uid).Coordinates, user);
+
+ if (!_net.IsServer)
+ return;
+
+ var cardDeck = SpawnInSameParent(CardDeckBaseName, uid);
+
+ EnsureComp(cardDeck, out var deckStack);
+
+ _cardStackSystem.TransferNLastCardFromStacks(user, stack.Cards.Count / 2, uid, stack, cardDeck, deckStack);
+ _hands.PickupOrDrop(user, cardDeck);
+ }
+
+ private void TryShuffle(EntityUid deck, CardDeckComponent comp, CardStackComponent? stack)
+ {
+ _cardStackSystem.ShuffleCards(deck, stack);
+ if (_net.IsClient)
+ return;
+
+ _audio.PlayPvs(comp.ShuffleSound, deck, AudioHelpers.WithVariation(0.05f, _random));
+ _popup.PopupEntity(Loc.GetString("card-verb-shuffle-success", ("target", MetaData(deck).EntityName)), deck);
+ }
+
+ private void TryOrganize(EntityUid deck, CardDeckComponent comp, CardStackComponent? stack, bool isFlipped)
+ {
+ if (_net.IsClient)
+ return;
+ _cardStackSystem.FlipAllCards(deck, stack, isFlipped: isFlipped);
+
+ _audio.PlayPvs(comp.ShuffleSound, deck, AudioHelpers.WithVariation(0.05f, _random));
+ _popup.PopupEntity(Loc.GetString("card-verb-organize-success", ("target", MetaData(deck).EntityName), ("facedown", isFlipped)), deck);
+ }
+
+ private EntityUid SpawnInSameParent(string prototype, EntityUid uid)
+ {
+ if (_container.IsEntityOrParentInContainer(uid) &&
+ _container.TryGetOuterContainer(uid, Transform(uid), out var container))
+ {
+ return SpawnInContainerOrDrop(prototype, container.Owner, container.ID);
+ }
+ return Spawn(prototype, Transform(uid).Coordinates);
+ }
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Hand/CardHandComponent.cs b/Content.Shared/_EstacoPirata/Cards/Hand/CardHandComponent.cs
new file mode 100644
index 0000000000..39e0c4ac45
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Hand/CardHandComponent.cs
@@ -0,0 +1,38 @@
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._EstacaoPirata.Cards.Hand;
+
+///
+/// This is used for...
+///
+[RegisterComponent]
+public sealed partial class CardHandComponent : Component
+{
+ [DataField]
+ public float Angle = 120f;
+
+ [DataField]
+ public float XOffset = 0.5f;
+
+ [DataField]
+ public float Scale = 1;
+
+ [DataField]
+ public int CardLimit = 10;
+
+ [DataField]
+ public bool Flipped = false;
+}
+
+
+[Serializable, NetSerializable]
+public enum CardUiKey : byte
+{
+ Key
+}
+
+[Serializable, NetSerializable]
+public sealed class CardHandDrawMessage(NetEntity card) : BoundUserInterfaceMessage
+{
+ public NetEntity Card = card;
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Hand/CardHandSystem.cs b/Content.Shared/_EstacoPirata/Cards/Hand/CardHandSystem.cs
new file mode 100644
index 0000000000..b4bce82466
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Hand/CardHandSystem.cs
@@ -0,0 +1,235 @@
+using Content.Shared._EstacaoPirata.Cards.Card;
+using Content.Shared._EstacaoPirata.Cards.Stack;
+using Content.Shared.Hands.EntitySystems;
+using Content.Shared.Interaction;
+using Content.Shared.Popups;
+using Content.Shared.Storage.EntitySystems;
+using Content.Shared.Verbs;
+using Robust.Shared.Containers;
+using Robust.Shared.Network;
+using Robust.Shared.Player;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._EstacaoPirata.Cards.Hand;
+
+///
+/// This handles...
+///
+
+public sealed class CardHandSystem : EntitySystem
+{
+ [ValidatePrototypeId]
+ public readonly EntProtoId CardHandBaseName = "CardHandBase";
+ [ValidatePrototypeId]
+ public readonly EntProtoId CardDeckBaseName = "CardDeckBase";
+
+ [Dependency] private readonly CardStackSystem _cardStack = default!;
+ [Dependency] private readonly SharedHandsSystem _hands = default!;
+ [Dependency] private readonly INetManager _net = default!;
+ [Dependency] private readonly SharedUserInterfaceSystem _ui = default!;
+ [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
+ [Dependency] private readonly SharedContainerSystem _container = default!;
+ [Dependency] private readonly SharedStorageSystem _storage = default!; // Frontier
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnInteractUsing);
+ SubscribeLocalEvent(OnCardDraw);
+ SubscribeLocalEvent(OnStackQuantityChange);
+ SubscribeLocalEvent>(OnAlternativeVerb);
+ }
+
+ private void OnStackQuantityChange(EntityUid uid, CardHandComponent comp, CardStackQuantityChangeEvent args)
+ {
+ if (_net.IsClient)
+ return;
+
+ if (!TryComp(uid, out CardStackComponent? stack))
+ return;
+
+ if (stack.Cards.Count < 0)
+ {
+ Log.Warning($"Invalid negative card count {stack.Cards.Count} detected in stack {ToPrettyString(uid)}");
+ return;
+ }
+
+ var text = args.Type switch
+ {
+ StackQuantityChangeType.Added => "cards-stackquantitychange-added",
+ StackQuantityChangeType.Removed => "cards-stackquantitychange-removed",
+ StackQuantityChangeType.Joined => "cards-stackquantitychange-joined",
+ StackQuantityChangeType.Split => "cards-stackquantitychange-split",
+ _ => "cards-stackquantitychange-unknown"
+ };
+
+ _popupSystem.PopupEntity(Loc.GetString(text, ("quantity", stack.Cards.Count)), uid);
+
+ _cardStack.FlipAllCards(uid, stack, comp.Flipped);
+ }
+
+ private void OnCardDraw(EntityUid uid, CardHandComponent comp, CardHandDrawMessage args)
+ {
+ if (!TryComp(uid, out CardStackComponent? stack))
+ return;
+ var pickup = _hands.IsHolding(args.Actor, uid);
+ EntityUid? leftover = null;
+ var cardEnt = GetEntity(args.Card);
+
+ if (stack.Cards.Count == 2 && pickup)
+ {
+ leftover = stack.Cards[0] != cardEnt ? stack.Cards[0] : stack.Cards[1];
+ }
+ if (!_cardStack.TryRemoveCard(uid, cardEnt, stack))
+ return;
+
+ if (_net.IsServer)
+ _storage.PlayPickupAnimation(cardEnt, Transform(cardEnt).Coordinates, Transform(args.Actor).Coordinates, 0);
+
+ _hands.TryPickupAnyHand(args.Actor, cardEnt);
+ if (pickup && leftover != null)
+ {
+ _hands.TryPickupAnyHand(args.Actor, leftover.Value);
+ }
+ }
+
+ private void OpenHandMenu(EntityUid user, EntityUid hand)
+ {
+ if (!TryComp(user, out var actor))
+ return;
+
+ _ui.OpenUi(hand, CardUiKey.Key, actor.PlayerSession);
+
+ }
+
+ private void OnAlternativeVerb(EntityUid uid, CardHandComponent comp, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract || args.Hands == null)
+ return;
+
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => OpenHandMenu(args.User, uid),
+ Text = Loc.GetString("cards-verb-pickcard"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/die.svg.192dpi.png")),
+ Priority = 4
+ });
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => _cardStack.ShuffleCards(uid),
+ Text = Loc.GetString("cards-verb-shuffle"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/die.svg.192dpi.png")),
+ Priority = 3
+ });
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => FlipCards(uid, comp),
+ Text = Loc.GetString("cards-verb-flip"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/flip.svg.192dpi.png")),
+ Priority = 2
+ });
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Act = () => ConvertToDeck(args.User, uid),
+ Text = Loc.GetString("cards-verb-convert-to-deck"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/rotate_cw.svg.192dpi.png")),
+ Priority = 1
+ });
+ }
+
+ private void OnInteractUsing(EntityUid uid, CardComponent comp, InteractUsingEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ if (HasComp(args.Used) ||
+ !TryComp(args.Used, out CardComponent? usedComp))
+ return;
+
+ if (!HasComp(args.Target) &&
+ TryComp(args.Target, out CardComponent? targetCardComp))
+ {
+ TrySetupHandOfCards(args.User, args.Used, usedComp, args.Target, targetCardComp, true);
+ args.Handled = true;
+ }
+ }
+
+ private void ConvertToDeck(EntityUid user, EntityUid hand)
+ {
+ if (_net.IsClient)
+ return;
+
+ var cardDeck = SpawnInSameParent(CardDeckBaseName, hand);
+ bool isHoldingCards = _hands.IsHolding(user, hand);
+
+ EnsureComp(cardDeck, out var deckStack);
+ if (!TryComp(hand, out CardStackComponent? handStack))
+ return;
+ _cardStack.TryJoinStacks(cardDeck, hand, deckStack, handStack, null);
+
+ if (isHoldingCards)
+ _hands.TryPickupAnyHand(user, cardDeck);
+ }
+ public void TrySetupHandOfCards(EntityUid user, EntityUid card, CardComponent comp, EntityUid target, CardComponent targetComp, bool pickup)
+ {
+ if (card == target || _net.IsClient)
+ return;
+ var cardHand = SpawnInSameParent(CardHandBaseName, card);
+ if (TryComp(cardHand, out var handComp))
+ handComp.Flipped = targetComp.Flipped;
+ if (!TryComp(cardHand, out CardStackComponent? stack))
+ return;
+ if (!_cardStack.TryInsertCard(cardHand, card, stack) || !_cardStack.TryInsertCard(cardHand, target, stack))
+ return;
+ if (_net.IsServer)
+ _storage.PlayPickupAnimation(card, Transform(card).Coordinates, Transform(cardHand).Coordinates, 0);
+ if (pickup && !_hands.TryPickupAnyHand(user, cardHand))
+ return;
+ _cardStack.FlipAllCards(cardHand, stack, targetComp.Flipped);
+ }
+
+ public void TrySetupHandFromStack(EntityUid user, EntityUid card, CardComponent comp, EntityUid target, CardStackComponent targetComp, bool pickup)
+ {
+ if (_net.IsClient)
+ return;
+ var cardHand = SpawnInSameParent(CardHandBaseName, card);
+ if (TryComp(cardHand, out var handComp))
+ handComp.Flipped = comp.Flipped;
+ if (!TryComp(cardHand, out CardStackComponent? stack))
+ return;
+ if (!_cardStack.TryInsertCard(cardHand, card, stack))
+ return;
+ _cardStack.TransferNLastCardFromStacks(user, 1, target, targetComp, cardHand, stack);
+ if (pickup && !_hands.TryPickupAnyHand(user, cardHand))
+ return;
+ _cardStack.FlipAllCards(cardHand, stack, comp.Flipped);
+ }
+
+ private void FlipCards(EntityUid hand, CardHandComponent comp)
+ {
+ comp.Flipped = !comp.Flipped;
+ _cardStack.FlipAllCards(hand, null, comp.Flipped);
+ }
+
+ // Frontier: tries to spawn an entity with the same parent as another given entity.
+ // Useful when spawning decks/hands in a backpack, for example.
+ private EntityUid SpawnInSameParent(EntProtoId prototype, EntityUid uid)
+ {
+ if (prototype == default)
+ throw new ArgumentException("Cannot spawn with null prototype", nameof(prototype));
+
+ if (_container.IsEntityOrParentInContainer(uid) &&
+ _container.TryGetOuterContainer(uid, Transform(uid), out var container))
+ {
+ var entity = SpawnInContainerOrDrop(prototype, container.Owner, container.ID);
+ if (!Exists(entity))
+ Log.Error($"Failed to spawn {prototype} in container {container.ID}");
+ return entity;
+ }
+ var worldEntity = Spawn(prototype, Transform(uid).Coordinates);
+ if (!Exists(worldEntity))
+ Log.Error($"Failed to spawn {prototype} at coordinates {Transform(uid).Coordinates}");
+ return worldEntity;
+ }
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Stack/CardStackComponent.cs b/Content.Shared/_EstacoPirata/Cards/Stack/CardStackComponent.cs
new file mode 100644
index 0000000000..9192c60b67
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Stack/CardStackComponent.cs
@@ -0,0 +1,80 @@
+using Robust.Shared.Audio;
+using Robust.Shared.Containers;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._EstacaoPirata.Cards.Stack;
+
+///
+/// This is used for holding the prototype ids of the cards in the stack or hand.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+
+public sealed partial class CardStackComponent : Component
+{
+ [DataField]
+ public List InitialContent = [];
+
+ [DataField]
+ public SoundSpecifier ShuffleSound = new SoundCollectionSpecifier("cardFan");
+
+ [DataField]
+ public SoundSpecifier PickUpSound = new SoundCollectionSpecifier("cardSlide");
+
+ [DataField]
+ public SoundSpecifier PlaceDownSound = new SoundCollectionSpecifier("cardShove");
+
+
+ ///
+ /// The containers that contain the items held in the stack
+ ///
+ [ViewVariables]
+ public Container ItemContainer = default!;
+
+ ///
+ /// The list EntityUIds of Cards
+ ///
+ [DataField, AutoNetworkedField]
+ public List Cards = [];
+}
+
+[Serializable, NetSerializable]
+public sealed class CardStackInitiatedEvent(NetEntity cardStack) : EntityEventArgs
+{
+ public NetEntity CardStack = cardStack;
+}
+
+///
+/// This gets Updated when new cards are added or removed from the stack
+///
+[Serializable, NetSerializable]
+public sealed class CardStackQuantityChangeEvent(NetEntity stack, NetEntity? card, StackQuantityChangeType type) : EntityEventArgs
+{
+ public NetEntity Stack = stack;
+ public NetEntity? Card = card;
+ public StackQuantityChangeType Type = type;
+}
+
+[Serializable, NetSerializable]
+public enum StackQuantityChangeType : sbyte
+{
+ Added,
+ Removed,
+ Joined,
+ Split
+}
+
+
+
+[Serializable, NetSerializable]
+public sealed class CardStackReorderedEvent(NetEntity stack) : EntityEventArgs
+{
+ public NetEntity Stack = stack;
+}
+
+[Serializable, NetSerializable]
+public sealed class CardStackFlippedEvent(NetEntity cardStack) : EntityEventArgs
+{
+ public NetEntity CardStack = cardStack;
+}
diff --git a/Content.Shared/_EstacoPirata/Cards/Stack/CardStackSystem.cs b/Content.Shared/_EstacoPirata/Cards/Stack/CardStackSystem.cs
new file mode 100644
index 0000000000..734357ea06
--- /dev/null
+++ b/Content.Shared/_EstacoPirata/Cards/Stack/CardStackSystem.cs
@@ -0,0 +1,481 @@
+using System.Linq;
+using Content.Shared._EstacaoPirata.Cards.Card;
+using Content.Shared._EstacaoPirata.Cards.Deck;
+using Content.Shared._EstacaoPirata.Cards.Hand;
+using Content.Shared.Examine;
+using Content.Shared.Hands.Components;
+using Content.Shared.Hands.EntitySystems;
+using Content.Shared.Interaction;
+using Content.Shared.Storage.EntitySystems;
+using Content.Shared.Verbs;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Containers;
+using Robust.Shared.Network;
+using Robust.Shared.Random;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._EstacaoPirata.Cards.Stack;
+
+///
+/// This handles stack of cards.
+/// It is used to shuffle, flip, insert, remove, and join stacks of cards.
+/// It also handles the events related to the stack of cards.
+///
+public sealed class CardStackSystem : EntitySystem
+{
+ public const string ContainerId = "cardstack-container";
+ public const int MaxCardsInStack = 212; // Frontier: four 53-card decks.
+
+ [Dependency] private readonly SharedContainerSystem _container = default!;
+ [Dependency] private readonly EntityManager _entityManager = default!;
+ [Dependency] private readonly INetManager _net = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly SharedStorageSystem _storage = default!;
+ [Dependency] private readonly CardHandSystem _cardHandSystem = default!; // Frontier
+ [Dependency] private readonly SharedHandsSystem _hands = default!;
+
+ ///
+ public override void Initialize()
+ {
+ // Pretty much a rip-off of the BinSystem
+ SubscribeLocalEvent(OnStartup);
+ SubscribeLocalEvent(OnMapInit);
+ SubscribeLocalEvent(OnEntRemoved);
+ SubscribeLocalEvent>(OnAlternativeVerb);
+ SubscribeLocalEvent>(OnActivationVerb);
+ SubscribeLocalEvent(OnActivate);
+ SubscribeLocalEvent(OnExamine);
+ SubscribeLocalEvent(OnInteractUsing);
+ }
+
+ public bool TryRemoveCard(EntityUid uid, EntityUid card, CardStackComponent? comp = null)
+ {
+ if (!Resolve(uid, ref comp))
+ return false;
+
+ if (!TryComp(card, out CardComponent? _))
+ return false;
+
+ _container.Remove(card, comp.ItemContainer);
+ comp.Cards.Remove(card);
+
+ // If there is a final card left over, remove that card from the container and delete the stack alltogether
+ if (comp.Cards.Count == 1)
+ {
+
+ _container.Remove(comp.Cards.First(), comp.ItemContainer);
+ comp.Cards.Clear();
+ }
+
+ Dirty(uid, comp);
+
+ RaiseLocalEvent(uid, new CardStackQuantityChangeEvent(GetNetEntity(uid), GetNetEntity(card), StackQuantityChangeType.Removed));
+ RaiseNetworkEvent(new CardStackQuantityChangeEvent(GetNetEntity(uid), GetNetEntity(card), StackQuantityChangeType.Removed));
+ // Prevents prediction ruining things
+ if (_net.IsServer && comp.Cards.Count <= 0)
+ {
+ _entityManager.DeleteEntity(uid);
+ }
+ return true;
+ }
+
+ public bool TryInsertCard(EntityUid uid, EntityUid card, CardStackComponent? comp = null)
+ {
+ if (!Resolve(uid, ref comp))
+ return false;
+
+ if (!TryComp(card, out CardComponent? _))
+ return false;
+
+ if (comp.Cards.Count >= MaxCardsInStack)
+ return false;
+
+ _container.Insert(card, comp.ItemContainer);
+ comp.Cards.Add(card);
+
+ Dirty(uid, comp);
+ RaiseLocalEvent(uid, new CardStackQuantityChangeEvent(GetNetEntity(uid), GetNetEntity(card), StackQuantityChangeType.Added));
+ RaiseNetworkEvent(new CardStackQuantityChangeEvent(GetNetEntity(uid), GetNetEntity(card), StackQuantityChangeType.Added));
+ return true;
+ }
+
+ public bool ShuffleCards(EntityUid uid, CardStackComponent? comp = null)
+ {
+ if (!Resolve(uid, ref comp))
+ return false;
+
+ _random.Shuffle(comp.Cards);
+
+ Dirty(uid, comp);
+ RaiseLocalEvent(uid, new CardStackReorderedEvent(GetNetEntity(uid)));
+ RaiseNetworkEvent(new CardStackReorderedEvent(GetNetEntity(uid)));
+ return true;
+ }
+
+ ///
+ /// Server-Side only method to flip all cards within a stack. This starts CardFlipUpdatedEvent and CardStackFlippedEvent event
+ ///
+ ///
+ ///
+ /// If null, all cards will just invert direction, if it contains a value, then all cards will receive that value
+ ///
+ public bool FlipAllCards(EntityUid uid, CardStackComponent? comp = null, bool? isFlipped = null)
+ {
+ if (_net.IsClient)
+ return false;
+ if (!Resolve(uid, ref comp))
+ return false;
+ foreach (var card in comp.Cards)
+ {
+ if (!TryComp(card, out CardComponent? cardComponent))
+ continue;
+
+ cardComponent.Flipped = isFlipped ?? !cardComponent.Flipped;
+
+ Dirty(card, cardComponent);
+ RaiseNetworkEvent(new CardFlipUpdatedEvent(GetNetEntity(card)));
+ }
+
+ RaiseNetworkEvent(new CardStackFlippedEvent(GetNetEntity(uid)));
+ return true;
+ }
+
+ public bool TryJoinStacks(EntityUid firstStack, EntityUid secondStack, CardStackComponent? firstComp = null, CardStackComponent? secondComp = null, EntityUid? soundUser = null)
+ {
+ if (firstStack == secondStack)
+ return false;
+ if (!Resolve(firstStack, ref firstComp) || !Resolve(secondStack, ref secondComp))
+ return false;
+
+ bool changed = false;
+ var cardList = secondComp.Cards.ToList();
+ EntityUid? firstCard = secondComp.Cards.Count > 0 ? cardList[0] : null; // Cache the first card transferred for animations (better to have something moving than nothing, and we destroy the other stack)
+
+ foreach (var card in cardList)
+ {
+ if (firstComp.Cards.Count >= MaxCardsInStack)
+ break;
+ _container.Remove(card, secondComp.ItemContainer);
+ secondComp.Cards.Remove(card);
+ firstComp.Cards.Add(card);
+ _container.Insert(card, firstComp.ItemContainer);
+ changed = true;
+ }
+ if (changed)
+ {
+ if (soundUser != null)
+ {
+ _audio.PlayPredicted(firstComp.PlaceDownSound, Transform(firstStack).Coordinates, soundUser.Value);
+ if (_net.IsServer)
+ _storage.PlayPickupAnimation(firstCard!.Value, Transform(secondStack).Coordinates, Transform(firstStack).Coordinates, 0);
+ }
+
+ if (_net.IsClient)
+ return changed;
+
+ Dirty(firstStack, firstComp);
+ if (secondComp.Cards.Count <= 0)
+ {
+ _entityManager.DeleteEntity(secondStack);
+ }
+ else
+ {
+ Dirty(secondStack, secondComp);
+ RaiseLocalEvent(secondStack, new CardStackQuantityChangeEvent(GetNetEntity(secondStack), null, StackQuantityChangeType.Split));
+ RaiseNetworkEvent(new CardStackQuantityChangeEvent(GetNetEntity(secondStack), null, StackQuantityChangeType.Split));
+ }
+ RaiseLocalEvent(firstStack, new CardStackQuantityChangeEvent(GetNetEntity(firstStack), null, StackQuantityChangeType.Joined));
+ RaiseNetworkEvent(new CardStackQuantityChangeEvent(GetNetEntity(firstStack), null, StackQuantityChangeType.Joined));
+ }
+
+ return changed;
+ }
+
+ #region EventHandling
+
+ private void OnStartup(EntityUid uid, CardStackComponent component, ComponentStartup args)
+ {
+ component.ItemContainer = _container.EnsureContainer(uid, ContainerId);
+ }
+
+ private void OnMapInit(EntityUid uid, CardStackComponent comp, MapInitEvent args)
+ {
+ if (_net.IsClient)
+ return;
+
+ var coordinates = Transform(uid).Coordinates;
+ var spawnedEntities = new List();
+ foreach (var id in comp.InitialContent)
+ {
+ var ent = Spawn(id, coordinates);
+ spawnedEntities.Add(ent);
+ if (TryInsertCard(uid, ent, comp))
+ continue;
+ Log.Error($"Entity {ToPrettyString(ent)} was unable to be initialized into stack {ToPrettyString(uid)}");
+ foreach (var spawned in spawnedEntities)
+ _entityManager.DeleteEntity(spawned);
+ return;
+ }
+ RaiseNetworkEvent(new CardStackInitiatedEvent(GetNetEntity(uid)));
+ }
+
+ // It seems the cards don't get removed if this event is not subscribed... strange right? thanks again bin system
+ private void OnEntRemoved(EntityUid uid, CardStackComponent component, EntRemovedFromContainerMessage args)
+ {
+ component.Cards.Remove(args.Entity);
+ }
+
+ private void OnExamine(EntityUid uid, CardStackComponent component, ExaminedEvent args)
+ {
+ args.PushText(Loc.GetString("card-stack-examine", ("count", component.Cards.Count)));
+ }
+
+ private void OnAlternativeVerb(EntityUid uid, CardStackComponent component, GetVerbsEvent args)
+ {
+ if (args.Using == args.Target)
+ return;
+ if (!TryComp(args.Target, out CardStackComponent? targetStack))
+ return;
+
+ if (TryComp(args.Using, out CardStackComponent? usingStack))
+ {
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Text = Loc.GetString("card-verb-join"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")),
+ Priority = 8,
+ Act = () => JoinStacks(args.User, args.Target, targetStack, (EntityUid)args.Using, usingStack)
+ });
+ }
+ else if (TryComp(args.Using, out CardComponent? usingCard)) // Frontier: single card interaction
+ {
+ args.Verbs.Add(new AlternativeVerb()
+ {
+ Text = Loc.GetString("card-verb-join"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")),
+ Priority = 8,
+ Act = () => InsertCardOnStack(args.User, args.Target, targetStack, (EntityUid)args.Using)
+ });
+ } // End Frontier: single card interaction
+ }
+
+ // Frontier: hacky misuse of the activation verb, but allows us a separate way to draw cards without needing additional buttons and event fiddling
+ private void OnActivationVerb(EntityUid uid, CardStackComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract || args.Hands == null)
+ return;
+
+ if (args.Using == args.Target)
+ return;
+
+ if (args.Using == null)
+ {
+ args.Verbs.Add(new ActivationVerb()
+ {
+ Act = () => OnInteractHand(args.Target, component, args.User),
+ Text = Loc.GetString("cards-verb-draw"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")),
+ Priority = 16
+ });
+ }
+ else if (TryComp(args.Using, out var cardStack))
+ {
+ args.Verbs.Add(new ActivationVerb()
+ {
+ Act = () => TransferNLastCardFromStacks(args.User, 1, args.Target, component, args.Using.Value, cardStack),
+ Text = Loc.GetString("cards-verb-draw"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")),
+ Priority = 16
+ });
+ }
+ else if (TryComp(args.Using, out var card))
+ {
+ args.Verbs.Add(new ActivationVerb()
+ {
+ Act = () => _cardHandSystem.TrySetupHandFromStack(args.User, args.Using.Value, card, args.Target, component, true),
+ Text = Loc.GetString("cards-verb-draw"),
+ Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")),
+ Priority = 16
+ });
+ }
+ }
+ // End Frontier
+
+ private void JoinStacks(EntityUid user, EntityUid first, CardStackComponent firstComp, EntityUid second, CardStackComponent secondComp)
+ {
+ TryJoinStacks(first, second, firstComp, secondComp, user);
+ }
+
+ public void InsertCardOnStack(EntityUid user, EntityUid stack, CardStackComponent stackComponent, EntityUid card)
+ {
+ if (!TryInsertCard(stack, card))
+ return;
+
+ _audio.PlayPredicted(stackComponent.PlaceDownSound, Transform(stack).Coordinates, user);
+ if (_net.IsClient)
+ return;
+ _storage.PlayPickupAnimation(card, Transform(user).Coordinates, Transform(stack).Coordinates, 0);
+ }
+
+ ///
+ /// This takes the last card from the first stack and inserts it into the second stack
+ ///
+ public void TransferNLastCardFromStacks(EntityUid user, int n, EntityUid first, CardStackComponent firstComp, EntityUid second, CardStackComponent secondComp)
+ {
+ if (firstComp.Cards.Count <= 0)
+ return;
+
+ var cards = firstComp.Cards.TakeLast(n).ToList(); // Frontier: make a copy we don't munge during iteration
+
+ var firstCard = cards.First(); // Cache first card for animation - enumerable changes in foreach
+
+ bool changed = false;
+ foreach (var card in cards)
+ {
+ if (secondComp.Cards.Count >= MaxCardsInStack)
+ break;
+ _container.Remove(card, firstComp.ItemContainer);
+ firstComp.Cards.Remove(card);
+ secondComp.Cards.Add(card);
+ _container.Insert(card, secondComp.ItemContainer);
+ changed = true;
+ }
+
+ if (changed)
+ {
+ _audio.PlayPredicted(firstComp.PlaceDownSound, Transform(second).Coordinates, user);
+ if (_net.IsClient)
+ return;
+
+ _storage.PlayPickupAnimation(firstCard, Transform(first).Coordinates, Transform(second).Coordinates, 0);
+
+ Dirty(second, secondComp);
+ if (firstComp.Cards.Count == 1)
+ {
+ var card = firstComp.Cards.First();
+ _container.Remove(card, firstComp.ItemContainer);
+ if (_hands.IsHolding(user, first))
+ {
+ _hands.TryDrop(user, first);
+ _hands.TryPickupAnyHand(user, card);
+ }
+ firstComp.Cards.Clear();
+ }
+ if (firstComp.Cards.Count <= 0)
+ {
+ _entityManager.DeleteEntity(first);
+ }
+ else
+ {
+ Dirty(first, firstComp);
+ RaiseLocalEvent(first, new CardStackQuantityChangeEvent(GetNetEntity(first), null, StackQuantityChangeType.Removed));
+ RaiseNetworkEvent(new CardStackQuantityChangeEvent(GetNetEntity(first), null, StackQuantityChangeType.Removed));
+ }
+ RaiseLocalEvent(second, new CardStackQuantityChangeEvent(GetNetEntity(second), null, StackQuantityChangeType.Added));
+ RaiseNetworkEvent(new CardStackQuantityChangeEvent(GetNetEntity(second), null, StackQuantityChangeType.Added));
+ }
+ }
+
+ private void OnInteractUsing(InteractUsingEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ if (args.Target == args.Used)
+ return;
+
+ // This checks if the user is using an item with Stack component
+ if (TryComp(args.Used, out CardStackComponent? usedStack))
+ {
+ // If the target is a card, then it will insert the card into the stack
+ if (TryComp(args.Target, out CardComponent? _))
+ {
+ InsertCardOnStack(args.User, args.Used, usedStack, args.Target);
+ args.Handled = true;
+ return;
+ }
+
+ // If instead, the target is a stack, then it will join the two stacks
+ if (!TryComp(args.Target, out CardStackComponent? targetStack))
+ return;
+
+ TransferNLastCardFromStacks(args.User, 1, args.Target, targetStack, args.Used, usedStack);
+ args.Handled = true;
+ }
+
+ // This handles the reverse case, where the user is using a card and inserting it to a stack
+ else if (TryComp(args.Target, out CardStackComponent? stack))
+ {
+ //InsertCardOnStack(args.User, args.Target, stack, args.Used); // Frontier: old version
+ if (TryComp(args.Used, out CardComponent? card))
+ {
+ _cardHandSystem.TrySetupHandFromStack(args.User, args.Used, card, args.Target, stack, true);
+ args.Handled = true;
+ }
+ }
+ }
+
+ private void OnInteractHand(EntityUid uid, CardStackComponent component, EntityUid user)
+ {
+ var pickup = _hands.IsHolding(user, uid);
+ if (component.Cards.Count <= 0)
+ return;
+
+ if (!component.Cards.TryGetValue(component.Cards.Count - 1, out var card))
+ return;
+ if (!component.Cards.TryGetValue(component.Cards.Count - 2, out var under))
+ return;
+
+ if (!TryRemoveCard(uid, card, component))
+ return;
+
+ _hands.TryPickupAnyHand(user, card);
+ if (!Exists(uid) && pickup)
+ _hands.TryPickupAnyHand(user, under);
+
+ if (TryComp(uid, out var deck))
+ _audio.PlayPredicted(deck.PickUpSound, Transform(card).Coordinates, user);
+ else
+ _audio.PlayPredicted(component.PickUpSound, Transform(card).Coordinates, user);
+ }
+
+ private void OnActivate(EntityUid uid, CardStackComponent component, ActivateInWorldEvent args)
+ {
+ if (!args.Complex || args.Handled)
+ return;
+
+ if (!TryComp(args.User, out var hands))
+ {
+ args.Handled = true;
+ return;
+ }
+
+ var activeItem = _hands.GetActiveItem((args.User, hands));
+
+ if (activeItem == null)
+ {
+ // Runs if active item is nothing
+ // behavior is to draw one card from this target onto active hand as a standalone card
+ OnInteractHand(args.Target, component, args.User);
+ }
+ else if (activeItem == args.Target)
+ {
+ // Added from a Frontier PR. Don't want to draw a card from a stack onto itself.
+ args.Handled = true;
+ return;
+ }
+ else if (TryComp(activeItem, out var cardStack))
+ {
+ // If the active item contains a card stack, behavior is to draw from Target and place onto activeHand.
+ TransferNLastCardFromStacks(args.User, 1, args.Target, component, activeItem.Value, cardStack);
+ }
+ else if (TryComp(activeItem, out var card))
+ {
+ _cardHandSystem.TrySetupHandFromStack(args.User, activeItem.Value, card, args.Target, component, true);
+ }
+ args.Handled = true;
+ }
+
+ #endregion
+}
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/attributions.yml b/Resources/Audio/_EstacaoPirata/Effects/Cards/attributions.yml
new file mode 100644
index 0000000000..879bb3bc04
--- /dev/null
+++ b/Resources/Audio/_EstacaoPirata/Effects/Cards/attributions.yml
@@ -0,0 +1,6 @@
+- files: [ "cardFan1.ogg", "cardFan2.ogg", "cardOpenPackage1.ogg", "cardOpenPackage2.ogg", "cardPlace1.ogg", "cardPlace2.ogg", "cardPlace3.ogg", "cardPlace4.ogg", "cardShove1.ogg", "cardShove2.ogg", "cardShove3.ogg", "cardShove4.ogg", "cardShuffle.ogg", "cardSlide1.ogg", "cardSlide2.ogg", "cardSlide3.ogg", "cardSlide4.ogg", "cardSlide5.ogg", "cardSlide6.ogg", "cardSlide7.ogg", "cardSlide8.ogg", "cardTakeOutPackage1.ogg", "cardTakeOutPackage2.ogg"]
+ license: "CC0-1.0"
+ copyright: "Kenney.nl"
+ source: "https://opengameart.org/content/54-casino-sound-effects-cards-dice-chips"
+
+
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardFan1.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardFan1.ogg
new file mode 100644
index 0000000000..6d059e204b
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardFan1.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardFan2.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardFan2.ogg
new file mode 100644
index 0000000000..b744067444
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardFan2.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage1.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage1.ogg
new file mode 100644
index 0000000000..9d04ade0be
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage1.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage2.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage2.ogg
new file mode 100644
index 0000000000..32afa72eb7
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage2.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace1.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace1.ogg
new file mode 100644
index 0000000000..61d8b7170f
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace1.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace2.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace2.ogg
new file mode 100644
index 0000000000..827baa8dfd
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace2.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace3.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace3.ogg
new file mode 100644
index 0000000000..7f1b11ce4c
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace3.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace4.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace4.ogg
new file mode 100644
index 0000000000..088455b47d
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardPlace4.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove1.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove1.ogg
new file mode 100644
index 0000000000..89fb73a9a5
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove1.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove2.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove2.ogg
new file mode 100644
index 0000000000..5b625d3012
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove2.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove3.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove3.ogg
new file mode 100644
index 0000000000..282d1a870e
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove3.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove4.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove4.ogg
new file mode 100644
index 0000000000..cc10d9248d
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShove4.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShuffle.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShuffle.ogg
new file mode 100644
index 0000000000..6b2724fe5e
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardShuffle.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide1.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide1.ogg
new file mode 100644
index 0000000000..9545e24485
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide1.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide2.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide2.ogg
new file mode 100644
index 0000000000..d41969c20b
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide2.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide3.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide3.ogg
new file mode 100644
index 0000000000..4e22952217
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide3.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide4.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide4.ogg
new file mode 100644
index 0000000000..47dd7e9032
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide4.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide5.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide5.ogg
new file mode 100644
index 0000000000..281d89da0a
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide5.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide6.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide6.ogg
new file mode 100644
index 0000000000..b11d1b9092
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide6.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide7.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide7.ogg
new file mode 100644
index 0000000000..700e64b893
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide7.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide8.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide8.ogg
new file mode 100644
index 0000000000..8aff3ea887
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardSlide8.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage1.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage1.ogg
new file mode 100644
index 0000000000..cc90ece158
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage1.ogg differ
diff --git a/Resources/Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage2.ogg b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage2.ogg
new file mode 100644
index 0000000000..95755e6614
Binary files /dev/null and b/Resources/Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage2.ogg differ
diff --git a/Resources/Locale/en-US/_Estaco-Pirata/cards/cards.ftl b/Resources/Locale/en-US/_Estaco-Pirata/cards/cards.ftl
new file mode 100644
index 0000000000..3e9876f984
--- /dev/null
+++ b/Resources/Locale/en-US/_Estaco-Pirata/cards/cards.ftl
@@ -0,0 +1,88 @@
+card-examined = This is the {$target}.
+cards-verb-shuffle = Shuffle
+card-verb-shuffle-success = Cards shuffled
+cards-verb-draw = Draw card
+cards-verb-flip = Flip cards
+card-verb-join = Join cards
+card-verb-organize-success = Cards flipped face { $facedown ->
+ [true] down
+ *[false] up
+}
+cards-verb-organize-up = Flip cards face up
+cards-verb-organize-down = Flip cards face down
+cards-verb-pickcard = Pick a card
+card-stack-examine = { $count ->
+ [one] There is {$count} card in this stack.
+ *[other] There are {$count} cards in this stack.
+}
+cards-stackquantitychange-added = Card was added (Total cards: {$quantity})
+cards-stackquantitychange-removed = Card was removed (Total cards: {$quantity})
+cards-stackquantitychange-joined = Stack was merged (Total cards: {$quantity})
+cards-stackquantitychange-split = Stack was split (Total cards: {$quantity})
+cards-stackquantitychange-unknown = Stack count changed (Total cards: {$quantity})
+cards-verb-convert-to-deck = Convert to deck
+cards-verb-split = Split in half
+
+card-base-name = card
+card-deck-name = deck of cards
+
+card-sc-2-clubs = 2 of clubs
+card-sc-3-clubs = 3 of clubs
+card-sc-4-clubs = 4 of clubs
+card-sc-5-clubs = 5 of clubs
+card-sc-6-clubs = 6 of clubs
+card-sc-7-clubs = 7 of clubs
+card-sc-8-clubs = 8 of clubs
+card-sc-9-clubs = 9 of clubs
+card-sc-10-clubs = 10 of clubs
+card-sc-ace-clubs = ace of clubs
+card-sc-jack-clubs = jack of clubs
+card-sc-king-clubs = king of clubs
+card-sc-queen-clubs = queen of clubs
+
+card-sc-2-diamonds = 2 of diamonds
+card-sc-3-diamonds = 3 of diamonds
+card-sc-4-diamonds = 4 of diamonds
+card-sc-5-diamonds = 5 of diamonds
+card-sc-6-diamonds = 6 of diamonds
+card-sc-7-diamonds = 7 of diamonds
+card-sc-8-diamonds = 8 of diamonds
+card-sc-9-diamonds = 9 of diamonds
+card-sc-10-diamonds = 10 of diamonds
+card-sc-ace-diamonds = ace of diamonds
+card-sc-jack-diamonds = jack of diamonds
+card-sc-king-diamonds = king of diamonds
+card-sc-queen-diamonds = queen of diamonds
+
+card-sc-2-hearts = 2 of hearts
+card-sc-3-hearts = 3 of hearts
+card-sc-4-hearts = 4 of hearts
+card-sc-5-hearts = 5 of hearts
+card-sc-6-hearts = 6 of hearts
+card-sc-7-hearts = 7 of hearts
+card-sc-8-hearts = 8 of hearts
+card-sc-9-hearts = 9 of hearts
+card-sc-10-hearts = 10 of hearts
+card-sc-ace-hearts = ace of hearts
+card-sc-jack-hearts = jack of hearts
+card-sc-king-hearts = king of hearts
+card-sc-queen-hearts = queen of hearts
+
+card-sc-2-spades = 2 of spades
+card-sc-3-spades = 3 of spades
+card-sc-4-spades = 4 of spades
+card-sc-5-spades = 5 of spades
+card-sc-6-spades = 6 of spades
+card-sc-7-spades = 7 of spades
+card-sc-8-spades = 8 of spades
+card-sc-9-spades = 9 of spades
+card-sc-10-spades = 10 of spades
+card-sc-ace-spades = ace of spades
+card-sc-jack-spades = jack of spades
+card-sc-king-spades = king of spades
+card-sc-queen-spades = queen of spades
+
+card-sc-joker = joker
+
+container-sealed = A holographic security seal is on it. Opening it will have the seal dissipate.
+container-unsealed = The seal attached to it dissipates.
diff --git a/Resources/Locale/en-US/_Estaco-Pirata/store/uplink-catalog.ftl b/Resources/Locale/en-US/_Estaco-Pirata/store/uplink-catalog.ftl
new file mode 100644
index 0000000000..c94ffdba16
--- /dev/null
+++ b/Resources/Locale/en-US/_Estaco-Pirata/store/uplink-catalog.ftl
@@ -0,0 +1,2 @@
+uplink-syndicate-deck-name = Syndicate Deck Box
+uplink-syndicate-deck-desc = A deck box with the standard 53 playing cards with syndicate branding. Please gamble responsibly.
diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml
index 5b565e8f7c..5afafc7852 100644
--- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml
+++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml
@@ -404,6 +404,7 @@
children:
- id: CrazyGlue
- id: CrazyLube
+ - id: CardBoxBlack # Floofstation - from Frontier
- !type:NestedSelector
tableId: AllToyWeaponsTable
rolls: 2
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml
index bae5b62dc9..77cc760955 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml
@@ -33,6 +33,7 @@
ClothingHeadsetCentCom: 3
ClothingOuterCoatExpensive: 1
CentCommImplanter: 3 # DeltaV - For trialmins
+ CardBoxNanotrasen: 2 # Floofstation - from Frontier
contrabandInventory:
ToyFigurineCaptain: 1
ToyFigurineHeadOfPersonnel: 1
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml
index 0fe813178f..ea40cdd3f1 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml
@@ -16,6 +16,7 @@
PaperCNCSheet: 6
MysteryFigureBox: 2
BooksBag: 3
+ CardBoxBlack: 2 # Floofstation - from Frontier
contrabandInventory:
Basketball: 1
FoodSnackBoritos: 3
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml
index 3dda4a8d83..049e7b8334 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml
@@ -19,6 +19,7 @@
ClothingUniformJumpsuitRoboNeuroticist: 5
ClothingUniformJumpskirtRoboNeuroticist: 5
# End DeltaV Additions
+ CardBoxSyndicate: 2 # Floofstation - from Frontier
contrabandInventory:
ToyFigurineFootsoldier: 1
ToyFigurineNukieElite: 1
diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml
index 9325a3f1e9..be12e98702 100644
--- a/Resources/Prototypes/Loadouts/loadout_groups.yml
+++ b/Resources/Prototypes/Loadouts/loadout_groups.yml
@@ -77,6 +77,7 @@
- ClothingHeadHatUshanka
- Eyepatch
- SuperSynthesizerInstrument #Delta-V - Ports Super Synth Trinket from Starlight
+ - CardBoxBlack # Delta V - port from euphoria, playing cards
# End DeltaV Additions
- type: loadoutGroup
diff --git a/Resources/Prototypes/_DV/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/_DV/Loadouts/Miscellaneous/trinkets.yml
index 35e4a8687d..fba93e01f1 100644
--- a/Resources/Prototypes/_DV/Loadouts/Miscellaneous/trinkets.yml
+++ b/Resources/Prototypes/_DV/Loadouts/Miscellaneous/trinkets.yml
@@ -56,3 +56,9 @@
storage:
back:
- PlushieBee
+
+- type: loadout
+ id: CardBoxBlack
+ storage:
+ back:
+ - CardBoxBlack
diff --git a/Resources/Prototypes/_EstacoPirata/Catalog/uplink_catalog.yml b/Resources/Prototypes/_EstacoPirata/Catalog/uplink_catalog.yml
new file mode 100644
index 0000000000..85f0a5cd93
--- /dev/null
+++ b/Resources/Prototypes/_EstacoPirata/Catalog/uplink_catalog.yml
@@ -0,0 +1,9 @@
+- type: listing
+ id: UplinkSyndicateDeck
+ name: uplink-syndicate-deck-name
+ description: uplink-syndicate-deck-desc
+ productEntity: CardBoxSyndicate
+ cost:
+ Telecrystal: 1 # Frontier: 1<4 (less spam please)
+ categories:
+ - UplinkPointless
diff --git a/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/base.yml b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/base.yml
new file mode 100644
index 0000000000..4f82db6810
--- /dev/null
+++ b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/base.yml
@@ -0,0 +1,90 @@
+- type: entity
+ parent: [ BoxCardboard, BaseBagOpenClose ]
+ id: CardBoxBase
+ name: deck box
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Item
+ size: Small
+ shape:
+ - 0,0,1,1
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ layers:
+ - state: black_box
+ - state: black_box_open
+ map: [ "openLayer" ]
+ visible: false
+ - type: Storage
+ maxItemSize: Normal
+ grid:
+ - 0,0,1,1
+ whitelist:
+ components:
+ - CardDeck
+ - type: OpenTriggeredStorageFill
+ contents:
+ - id: CardDeckBase
+ amount: 1
+ - type: Appearance
+ - type: StaticPrice # Frontier
+ price: 200 # Frontier
+
+# Frontier: base stack for card stack component
+- type: entity
+ parent: BaseItem
+ id: CardStackBase
+ name: stack of cards
+ abstract: true
+ components:
+ - type: Item
+ size: Small
+ - type: CardStack
+ # - type: StripMenuHidden # Floof
+ - type: ContainerContainer # Frontier
+ containers: # Frontier
+ cardstack-container: !type:Container # Frontier
+ - type: StaticPrice # Frontier
+ price: 0.01 # Frontier
+# End Frontier
+
+- type: entity
+ parent: CardStackBase
+ id: CardHandBase
+ categories: [ HideSpawnMenu ]
+ name: hand of cards
+ components:
+ - type: CardHand
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: singlecard_down_black
+ - type: UserInterface
+ interfaces:
+ enum.CardUiKey.Key:
+ type: CardHandMenuBoundUserInterface
+ # - type: ActivatableUI # Frontier
+ # key: enum.CardUiKey.Key # Frontier
+ # FLOOF ADD START: Slide papers and such under doors
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.25,-0.25,0.25,0.25"
+ density: 20
+ restitution: 0.3
+ friction: 0.2
+ # FLOOF ADD END
+
+- type: entity
+ parent: CardStackBase
+ id: CardDeckBase
+ categories: [ HideSpawnMenu ]
+ name: deck of cards
+ components:
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: deck_black_full
+ - type: Item
+ size: Normal
+ - type: CardDeck
diff --git a/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/black_cards.yml b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/black_cards.yml
new file mode 100644
index 0000000000..72e92613b8
--- /dev/null
+++ b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/black_cards.yml
@@ -0,0 +1,716 @@
+- type: entity
+ parent: CardBoxBase
+ id: CardBoxBlack
+ name: black deck box
+ components:
+ - type: Item
+ size: Small
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ layers:
+ - state: black_box
+ - state: black_box_open
+ map: [ "openLayer" ]
+ visible: false
+ - type: OpenTriggeredStorageFill
+ contents:
+ - id: CardDeckBlack
+ amount: 1
+
+- type: entity
+ parent: CardDeckBase
+ id: CardDeckBlack
+ name: deck of cards
+ categories: [ HideSpawnMenu ] # Frontier
+ suffix: DO NOT MAP # Frontier
+ components:
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: deck_black_full
+ - type: CardStack
+ initialContent:
+ # Clubs
+ - CardScAceOfClubsBlack
+ - CardSc2OfClubsBlack
+ - CardSc3OfClubsBlack
+ - CardSc4OfClubsBlack
+ - CardSc5OfClubsBlack
+ - CardSc6OfClubsBlack
+ - CardSc7OfClubsBlack
+ - CardSc8OfClubsBlack
+ - CardSc9OfClubsBlack
+ - CardSc10OfClubsBlack
+ - CardScJackOfClubsBlack
+ - CardScQueenOfClubsBlack
+ - CardScKingOfClubsBlack
+ # Diamonds
+ - CardScAceOfDiamondsBlack
+ - CardSc2OfDiamondsBlack
+ - CardSc3OfDiamondsBlack
+ - CardSc4OfDiamondsBlack
+ - CardSc5OfDiamondsBlack
+ - CardSc6OfDiamondsBlack
+ - CardSc7OfDiamondsBlack
+ - CardSc8OfDiamondsBlack
+ - CardSc9OfDiamondsBlack
+ - CardSc10OfDiamondsBlack
+ - CardScJackOfDiamondsBlack
+ - CardScQueenOfDiamondsBlack
+ - CardScKingOfDiamondsBlack
+ # Hearts
+ - CardScAceOfHeartsBlack
+ - CardSc2OfHeartsBlack
+ - CardSc3OfHeartsBlack
+ - CardSc4OfHeartsBlack
+ - CardSc5OfHeartsBlack
+ - CardSc6OfHeartsBlack
+ - CardSc7OfHeartsBlack
+ - CardSc8OfHeartsBlack
+ - CardSc9OfHeartsBlack
+ - CardSc10OfHeartsBlack
+ - CardScJackOfHeartsBlack
+ - CardScQueenOfHeartsBlack
+ - CardScKingOfHeartsBlack
+ # Spades
+ - CardScAceOfSpadesBlack
+ - CardSc2OfSpadesBlack
+ - CardSc3OfSpadesBlack
+ - CardSc4OfSpadesBlack
+ - CardSc5OfSpadesBlack
+ - CardSc6OfSpadesBlack
+ - CardSc7OfSpadesBlack
+ - CardSc8OfSpadesBlack
+ - CardSc9OfSpadesBlack
+ - CardSc10OfSpadesBlack
+ - CardScJackOfSpadesBlack
+ - CardScQueenOfSpadesBlack
+ - CardScKingOfSpadesBlack
+ # Joker
+ - CardScJokerBlack
+
+- type: entity
+ parent: BaseItem
+ id: CardBase
+ name: card
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: EmitSoundOnLand
+ sound:
+ collection: cardShove
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: singlecard_down_black
+ - type: Rotatable
+ - type: Item
+ size: Small
+ - type: UseDelay
+ delay: 0.5
+ - type: Card
+ backSprite:
+ - sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: singlecard_down_black
+ flipped: true
+ # - type: StripMenuHidden # Floof
+ # FLOOF ADD START: Slide papers and such under doors
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.25,-0.25,0.25,0.25"
+ density: 20
+ restitution: 0.3
+ friction: 0.2
+ # FLOOF ADD END
+
+# region Black Cards
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-2-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-3-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-4-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-5-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-6-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-7-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-8-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-9-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-10-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-ace-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Clubs_black
+
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-jack-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-king-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Clubs_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfClubsBlack
+ components:
+ - type: Card
+ name: card-sc-queen-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Clubs_black
+
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-jack-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-queen-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-king-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-ace-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-2-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-3-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-4-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-5-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-6-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-7-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-8-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-9-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Diamonds_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfDiamondsBlack
+ components:
+ - type: Card
+ name: card-sc-10-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Diamonds_black
+
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-2-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-3-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-4-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-5-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-6-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-7-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-8-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-9-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-10-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-king-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-queen-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-jack-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Hearts_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfHeartsBlack
+ components:
+ - type: Card
+ name: card-sc-ace-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Hearts_black
+
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-2-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-3-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-4-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-5-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-6-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-7-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-8-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-9-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Spades_black
+
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-10-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-king-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-queen-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-jack-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfSpadesBlack
+ components:
+ - type: Card
+ name: card-sc-ace-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Spades_black
+
+- type: entity
+ parent: CardBase
+ categories: [ HideSpawnMenu ]
+ id: CardScJokerBlack
+ components:
+ - type: Card
+ name: card-sc-joker
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: black_joker
+
+# endregion Black Cards
diff --git a/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/nt_cards.yml b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/nt_cards.yml
new file mode 100644
index 0000000000..63e9631c8c
--- /dev/null
+++ b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/nt_cards.yml
@@ -0,0 +1,691 @@
+- type: entity
+ parent: CardBase
+ id: CardBaseNanotrasen
+ name: card
+ components:
+ - type: Card
+ backSprite:
+ - sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: singlecard_down_nanotrasen
+
+- type: entity
+ parent: CardBoxBase
+ id: CardBoxNanotrasen
+ name: nanotrasen deck box
+ components:
+ - type: Item
+ size: Small
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ layers:
+ - state: nanotrasen_box
+ - state: nanotrasen_box_open
+ map: [ "openLayer" ]
+ visible: false
+ - type: OpenTriggeredStorageFill
+ contents:
+ - id: CardDeckNanotrasen
+ amount: 1
+
+- type: entity
+ parent: CardDeckBase
+ id: CardDeckNanotrasen
+ name: deck of cards
+ categories: [ HideSpawnMenu ] # Frontier
+ suffix: DO NOT MAP # Frontier
+ components:
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: deck_nanotrasen_full
+ - type: CardStack
+ initialContent:
+ # Clubs
+ - CardScAceOfClubsNanotrasen
+ - CardSc2OfClubsNanotrasen
+ - CardSc3OfClubsNanotrasen
+ - CardSc4OfClubsNanotrasen
+ - CardSc5OfClubsNanotrasen
+ - CardSc6OfClubsNanotrasen
+ - CardSc7OfClubsNanotrasen
+ - CardSc8OfClubsNanotrasen
+ - CardSc9OfClubsNanotrasen
+ - CardSc10OfClubsNanotrasen
+ - CardScJackOfClubsNanotrasen
+ - CardScQueenOfClubsNanotrasen
+ - CardScKingOfClubsNanotrasen
+ # Diamonds
+ - CardScAceOfDiamondsNanotrasen
+ - CardSc2OfDiamondsNanotrasen
+ - CardSc3OfDiamondsNanotrasen
+ - CardSc4OfDiamondsNanotrasen
+ - CardSc5OfDiamondsNanotrasen
+ - CardSc6OfDiamondsNanotrasen
+ - CardSc7OfDiamondsNanotrasen
+ - CardSc8OfDiamondsNanotrasen
+ - CardSc9OfDiamondsNanotrasen
+ - CardSc10OfDiamondsNanotrasen
+ - CardScJackOfDiamondsNanotrasen
+ - CardScQueenOfDiamondsNanotrasen
+ - CardScKingOfDiamondsNanotrasen
+ # Hearts
+ - CardScAceOfHeartsNanotrasen
+ - CardSc2OfHeartsNanotrasen
+ - CardSc3OfHeartsNanotrasen
+ - CardSc4OfHeartsNanotrasen
+ - CardSc5OfHeartsNanotrasen
+ - CardSc6OfHeartsNanotrasen
+ - CardSc7OfHeartsNanotrasen
+ - CardSc8OfHeartsNanotrasen
+ - CardSc9OfHeartsNanotrasen
+ - CardSc10OfHeartsNanotrasen
+ - CardScJackOfHeartsNanotrasen
+ - CardScQueenOfHeartsNanotrasen
+ - CardScKingOfHeartsNanotrasen
+ # Spades
+ - CardScAceOfSpadesNanotrasen
+ - CardSc2OfSpadesNanotrasen
+ - CardSc3OfSpadesNanotrasen
+ - CardSc4OfSpadesNanotrasen
+ - CardSc5OfSpadesNanotrasen
+ - CardSc6OfSpadesNanotrasen
+ - CardSc7OfSpadesNanotrasen
+ - CardSc8OfSpadesNanotrasen
+ - CardSc9OfSpadesNanotrasen
+ - CardSc10OfSpadesNanotrasen
+ - CardScJackOfSpadesNanotrasen
+ - CardScQueenOfSpadesNanotrasen
+ - CardScKingOfSpadesNanotrasen
+ # Joker
+ - CardScJokerNanotrasen
+
+# region Nanotrasen Cards
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-2-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-3-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-4-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-5-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-6-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-7-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-8-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-9-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-10-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-ace-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Clubs_nanotrasen
+
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-jack-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-king-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Clubs_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfClubsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-queen-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Clubs_nanotrasen
+
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-jack-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-queen-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-king-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-ace-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-2-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-3-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-4-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-5-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-6-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-7-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-8-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-9-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Diamonds_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfDiamondsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-10-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Diamonds_nanotrasen
+
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-2-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-3-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-4-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-5-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-6-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-7-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-8-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-9-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-10-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-king-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-queen-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-jack-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Hearts_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfHeartsNanotrasen
+ components:
+ - type: Card
+ name: card-sc-ace-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Hearts_nanotrasen
+
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-2-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-3-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-4-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-5-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-6-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-7-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-8-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-9-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Spades_nanotrasen
+
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-10-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-king-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-queen-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-jack-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfSpadesNanotrasen
+ components:
+ - type: Card
+ name: card-sc-ace-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Spades_nanotrasen
+
+- type: entity
+ parent: CardBaseNanotrasen
+ categories: [ HideSpawnMenu ]
+ id: CardScJokerNanotrasen
+ components:
+ - type: Card
+ name: card-sc-joker
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: nanotrasen_joker
+
+# endregion Nanotrasen Cards
diff --git a/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/syndicate_cards.yml b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/syndicate_cards.yml
new file mode 100644
index 0000000000..89fb36fe21
--- /dev/null
+++ b/Resources/Prototypes/_EstacoPirata/Entities/Object/Misc/syndicate_cards.yml
@@ -0,0 +1,691 @@
+- type: entity
+ parent: CardBase
+ id: CardBaseSyndicate
+ name: card
+ components:
+ - type: Card
+ backSprite:
+ - sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: singlecard_down_syndicate
+
+- type: entity
+ parent: CardBoxBase
+ id: CardBoxSyndicate
+ name: syndicate deck box
+ components:
+ - type: Item
+ size: Small
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ layers:
+ - state: syndicate_box
+ - state: syndicate_box_open
+ map: [ "openLayer" ]
+ visible: false
+ - type: OpenTriggeredStorageFill
+ contents:
+ - id: CardDeckSyndicate
+ amount: 1
+
+- type: entity
+ parent: CardDeckBase
+ id: CardDeckSyndicate
+ name: deck of cards
+ categories: [ HideSpawnMenu ] # Frontier
+ suffix: DO NOT MAP # Frontier
+ components:
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: deck_syndicate_full
+ - type: CardStack
+ initialContent:
+ # Clubs
+ - CardScAceOfClubsSyndicate
+ - CardSc2OfClubsSyndicate
+ - CardSc3OfClubsSyndicate
+ - CardSc4OfClubsSyndicate
+ - CardSc5OfClubsSyndicate
+ - CardSc6OfClubsSyndicate
+ - CardSc7OfClubsSyndicate
+ - CardSc8OfClubsSyndicate
+ - CardSc9OfClubsSyndicate
+ - CardSc10OfClubsSyndicate
+ - CardScJackOfClubsSyndicate
+ - CardScQueenOfClubsSyndicate
+ - CardScKingOfClubsSyndicate
+ # Diamonds
+ - CardScAceOfDiamondsSyndicate
+ - CardSc2OfDiamondsSyndicate
+ - CardSc3OfDiamondsSyndicate
+ - CardSc4OfDiamondsSyndicate
+ - CardSc5OfDiamondsSyndicate
+ - CardSc6OfDiamondsSyndicate
+ - CardSc7OfDiamondsSyndicate
+ - CardSc8OfDiamondsSyndicate
+ - CardSc9OfDiamondsSyndicate
+ - CardSc10OfDiamondsSyndicate
+ - CardScJackOfDiamondsSyndicate
+ - CardScQueenOfDiamondsSyndicate
+ - CardScKingOfDiamondsSyndicate
+ # Hearts
+ - CardScAceOfHeartsSyndicate
+ - CardSc2OfHeartsSyndicate
+ - CardSc3OfHeartsSyndicate
+ - CardSc4OfHeartsSyndicate
+ - CardSc5OfHeartsSyndicate
+ - CardSc6OfHeartsSyndicate
+ - CardSc7OfHeartsSyndicate
+ - CardSc8OfHeartsSyndicate
+ - CardSc9OfHeartsSyndicate
+ - CardSc10OfHeartsSyndicate
+ - CardScJackOfHeartsSyndicate
+ - CardScQueenOfHeartsSyndicate
+ - CardScKingOfHeartsSyndicate
+ # Spades
+ - CardScAceOfSpadesSyndicate
+ - CardSc2OfSpadesSyndicate
+ - CardSc3OfSpadesSyndicate
+ - CardSc4OfSpadesSyndicate
+ - CardSc5OfSpadesSyndicate
+ - CardSc6OfSpadesSyndicate
+ - CardSc7OfSpadesSyndicate
+ - CardSc8OfSpadesSyndicate
+ - CardSc9OfSpadesSyndicate
+ - CardSc10OfSpadesSyndicate
+ - CardScJackOfSpadesSyndicate
+ - CardScQueenOfSpadesSyndicate
+ - CardScKingOfSpadesSyndicate
+ # Joker
+ - CardScJokerSyndicate
+
+# region Syndicate Cards
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-2-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-3-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-4-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-5-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-6-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-7-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-8-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-9-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-10-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-ace-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Clubs_syndicate
+
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-jack-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-king-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Clubs_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfClubsSyndicate
+ components:
+ - type: Card
+ name: card-sc-queen-clubs
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Clubs_syndicate
+
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-jack-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-queen-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-king-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-ace-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-2-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-3-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-4-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-5-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-6-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-7-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-8-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-9-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Diamonds_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfDiamondsSyndicate
+ components:
+ - type: Card
+ name: card-sc-10-diamonds
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Diamonds_syndicate
+
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-2-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-3-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-4-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-5-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-6-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-7-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-8-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-9-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-10-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-king-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-queen-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-jack-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Hearts_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfHeartsSyndicate
+ components:
+ - type: Card
+ name: card-sc-ace-hearts
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Hearts_syndicate
+
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc2OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-2-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_2_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc3OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-3-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_3_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc4OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-4-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_4_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc5OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-5-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_5_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc6OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-6-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_6_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc7OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-7-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_7_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc8OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-8-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_8_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc9OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-9-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_9_of_Spades_syndicate
+
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardSc10OfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-10-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_10_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScKingOfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-king-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_King_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScQueenOfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-queen-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Queen_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScJackOfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-jack-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Jack_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScAceOfSpadesSyndicate
+ components:
+ - type: Card
+ name: card-sc-ace-spades
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: sc_Ace_of_Spades_syndicate
+
+- type: entity
+ parent: CardBaseSyndicate
+ categories: [ HideSpawnMenu ]
+ id: CardScJokerSyndicate
+ components:
+ - type: Card
+ name: card-sc-joker
+ - type: Sprite
+ sprite: _EstacaoPirata/Objects/Misc/cards.rsi
+ state: syndicate_joker
+
+# endregion Syndicate Cards
diff --git a/Resources/Prototypes/_EstacoPirata/SoundCollections/cards.yml b/Resources/Prototypes/_EstacoPirata/SoundCollections/cards.yml
new file mode 100644
index 0000000000..bc8ddded4b
--- /dev/null
+++ b/Resources/Prototypes/_EstacoPirata/SoundCollections/cards.yml
@@ -0,0 +1,50 @@
+- type: soundCollection
+ id: cardFan
+ files:
+ - /Audio/_EstacaoPirata/Effects/Cards/cardFan1.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardFan2.ogg
+
+- type: soundCollection
+ id: cardOpenPackage
+ files:
+ - /Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage1.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardOpenPackage2.ogg
+
+- type: soundCollection
+ id: cardPlace
+ files:
+ - /Audio/_EstacaoPirata/Effects/Cards/cardPlace1.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardPlace2.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardPlace3.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardPlace4.ogg
+
+- type: soundCollection
+ id: cardShove
+ files:
+ - /Audio/_EstacaoPirata/Effects/Cards/cardShove1.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardShove2.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardShove3.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardShove4.ogg
+
+- type: soundCollection
+ id: cardShuffle
+ files:
+ - /Audio/_EstacaoPirata/Effects/Cards/cardShuffle.ogg
+
+- type: soundCollection
+ id: cardSlide
+ files:
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide1.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide2.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide3.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide4.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide5.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide6.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide7.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardSlide8.ogg
+
+- type: soundCollection
+ id: cardTakeOutPackage
+ files:
+ - /Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage1.ogg
+ - /Audio/_EstacaoPirata/Effects/Cards/cardTakeOutPackage2.ogg
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_box.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_box.png
new file mode 100644
index 0000000000..3c78df832b
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_box.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_box_open.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_box_open.png
new file mode 100644
index 0000000000..10eb7ad5f4
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_box_open.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_joker.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_joker.png
new file mode 100644
index 0000000000..fd30eaddd8
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/black_joker.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_black_full.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_black_full.png
new file mode 100644
index 0000000000..e475aea4f2
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_black_full.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_nanotrasen_full.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_nanotrasen_full.png
new file mode 100644
index 0000000000..b68e72fad5
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_nanotrasen_full.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_syndicate_full.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_syndicate_full.png
new file mode 100644
index 0000000000..fd54e580a4
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/deck_syndicate_full.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/meta.json b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/meta.json
new file mode 100644
index 0000000000..0259684a3c
--- /dev/null
+++ b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/meta.json
@@ -0,0 +1,542 @@
+{
+ "version": 1,
+ "copyright": "Cards, Decks and Hands Sprites were originally from Paradise Station (https://github.com/ParadiseSS13/Paradise) and modified by VictorJob. Boxes are from VictorJob.",
+ "license": "CC-BY-SA-3.0",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "deck_black_full"
+ },
+ {
+ "name": "deck_nanotrasen_full"
+ },
+ {
+ "name": "deck_syndicate_full"
+ },
+ {
+ "name": "sc_10_of_Clubs_black"
+ },
+ {
+ "name": "sc_10_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_10_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_10_of_Diamonds_black"
+ },
+ {
+ "name": "sc_10_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_10_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_10_of_Hearts_black"
+ },
+ {
+ "name": "sc_10_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_10_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_10_of_Spades_black"
+ },
+ {
+ "name": "sc_10_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_10_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_2_of_Clubs_black"
+ },
+ {
+ "name": "sc_2_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_2_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_2_of_Diamonds_black"
+ },
+ {
+ "name": "sc_2_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_2_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_2_of_Hearts_black"
+ },
+ {
+ "name": "sc_2_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_2_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_2_of_Spades_black"
+ },
+ {
+ "name": "sc_2_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_2_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_3_of_Clubs_black"
+ },
+ {
+ "name": "sc_3_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_3_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_3_of_Diamonds_black"
+ },
+ {
+ "name": "sc_3_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_3_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_3_of_Hearts_black"
+ },
+ {
+ "name": "sc_3_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_3_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_3_of_Spades_black"
+ },
+ {
+ "name": "sc_3_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_3_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_4_of_Clubs_black"
+ },
+ {
+ "name": "sc_4_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_4_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_4_of_Diamonds_black"
+ },
+ {
+ "name": "sc_4_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_4_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_4_of_Hearts_black"
+ },
+ {
+ "name": "sc_4_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_4_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_4_of_Spades_black"
+ },
+ {
+ "name": "sc_4_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_4_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_5_of_Clubs_black"
+ },
+ {
+ "name": "sc_5_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_5_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_5_of_Diamonds_black"
+ },
+ {
+ "name": "sc_5_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_5_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_5_of_Hearts_black"
+ },
+ {
+ "name": "sc_5_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_5_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_5_of_Spades_black"
+ },
+ {
+ "name": "sc_5_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_5_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_6_of_Clubs_black"
+ },
+ {
+ "name": "sc_6_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_6_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_6_of_Diamonds_black"
+ },
+ {
+ "name": "sc_6_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_6_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_6_of_Hearts_black"
+ },
+ {
+ "name": "sc_6_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_6_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_6_of_Spades_black"
+ },
+ {
+ "name": "sc_6_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_6_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_7_of_Clubs_black"
+ },
+ {
+ "name": "sc_7_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_7_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_7_of_Diamonds_black"
+ },
+ {
+ "name": "sc_7_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_7_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_7_of_Hearts_black"
+ },
+ {
+ "name": "sc_7_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_7_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_7_of_Spades_black"
+ },
+ {
+ "name": "sc_7_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_7_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_8_of_Clubs_black"
+ },
+ {
+ "name": "sc_8_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_8_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_8_of_Diamonds_black"
+ },
+ {
+ "name": "sc_8_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_8_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_8_of_Hearts_black"
+ },
+ {
+ "name": "sc_8_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_8_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_8_of_Spades_black"
+ },
+ {
+ "name": "sc_8_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_8_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_9_of_Clubs_black"
+ },
+ {
+ "name": "sc_9_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_9_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_9_of_Diamonds_black"
+ },
+ {
+ "name": "sc_9_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_9_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_9_of_Hearts_black"
+ },
+ {
+ "name": "sc_9_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_9_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_9_of_Spades_black"
+ },
+ {
+ "name": "sc_9_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_9_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_Ace_of_Clubs_black"
+ },
+ {
+ "name": "sc_Ace_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_Ace_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_Ace_of_Diamonds_black"
+ },
+ {
+ "name": "sc_Ace_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_Ace_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_Ace_of_Hearts_black"
+ },
+ {
+ "name": "sc_Ace_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_Ace_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_Ace_of_Spades_black"
+ },
+ {
+ "name": "sc_Ace_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_Ace_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_Jack_of_Clubs_black"
+ },
+ {
+ "name": "sc_Jack_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_Jack_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_Jack_of_Diamonds_black"
+ },
+ {
+ "name": "sc_Jack_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_Jack_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_Jack_of_Hearts_black"
+ },
+ {
+ "name": "sc_Jack_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_Jack_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_Jack_of_Spades_black"
+ },
+ {
+ "name": "sc_Jack_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_Jack_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_King_of_Clubs_black"
+ },
+ {
+ "name": "sc_King_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_King_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_King_of_Diamonds_black"
+ },
+ {
+ "name": "sc_King_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_King_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_King_of_Hearts_black"
+ },
+ {
+ "name": "sc_King_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_King_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_King_of_Spades_black"
+ },
+ {
+ "name": "sc_King_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_King_of_Spades_syndicate"
+ },
+ {
+ "name": "sc_Queen_of_Clubs_black"
+ },
+ {
+ "name": "sc_Queen_of_Clubs_nanotrasen"
+ },
+ {
+ "name": "sc_Queen_of_Clubs_syndicate"
+ },
+ {
+ "name": "sc_Queen_of_Diamonds_black"
+ },
+ {
+ "name": "sc_Queen_of_Diamonds_nanotrasen"
+ },
+ {
+ "name": "sc_Queen_of_Diamonds_syndicate"
+ },
+ {
+ "name": "sc_Queen_of_Hearts_black"
+ },
+ {
+ "name": "sc_Queen_of_Hearts_nanotrasen"
+ },
+ {
+ "name": "sc_Queen_of_Hearts_syndicate"
+ },
+ {
+ "name": "sc_Queen_of_Spades_black"
+ },
+ {
+ "name": "sc_Queen_of_Spades_nanotrasen"
+ },
+ {
+ "name": "sc_Queen_of_Spades_syndicate"
+ },
+ {
+ "name": "singlecard_down_black"
+ },
+ {
+ "name": "singlecard_down_nanotrasen"
+ },
+ {
+ "name": "singlecard_down_syndicate"
+ },
+ {
+ "name": "syndicate_joker",
+ "delays": [
+ [
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "nanotrasen_joker",
+ "delays": [
+ [
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "black_joker",
+ "delays": [
+ [
+ 0.5,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "syndicate_box"
+ },
+ {
+ "name": "syndicate_box_open"
+ },
+ {
+ "name": "black_box"
+ },
+ {
+ "name": "black_box_open"
+ },
+ {
+ "name": "nanotrasen_box"
+ },
+ {
+ "name": "nanotrasen_box_open"
+ }
+ ]
+}
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_box.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_box.png
new file mode 100644
index 0000000000..bc8b592db7
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_box.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_box_open.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_box_open.png
new file mode 100644
index 0000000000..455c1b1061
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_box_open.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_joker.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_joker.png
new file mode 100644
index 0000000000..c7c5c9e061
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/nanotrasen_joker.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_black.png
new file mode 100644
index 0000000000..1c45b9f176
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..23f499fe81
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..ae4d73c1a6
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_black.png
new file mode 100644
index 0000000000..17a7cb99d2
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..afad380277
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..100b213afc
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_black.png
new file mode 100644
index 0000000000..0a179f78ee
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..055942e1e6
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..b9a8467485
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_black.png
new file mode 100644
index 0000000000..5fc75d0bce
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..01187507f6
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_syndicate.png
new file mode 100644
index 0000000000..b4ac829a24
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_10_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_black.png
new file mode 100644
index 0000000000..ba33f6b6a7
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..2067145ca0
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..1a057ecf79
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_black.png
new file mode 100644
index 0000000000..e5e5afcbf3
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..f0ee45883d
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..8f6549e8d3
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_black.png
new file mode 100644
index 0000000000..b16deb15ae
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..28b79bf532
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..7f99d786cf
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_black.png
new file mode 100644
index 0000000000..4ff15e4136
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..c8c01eb2d5
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_syndicate.png
new file mode 100644
index 0000000000..bea976dc1b
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_2_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_black.png
new file mode 100644
index 0000000000..36fcb2d654
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..334c24f5ce
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..feeefb7bcc
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_black.png
new file mode 100644
index 0000000000..360fa0df66
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..34e8feae6f
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..1cf21d7723
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_black.png
new file mode 100644
index 0000000000..50be1e655a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..20cf0ab74e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..8d62899fe2
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_black.png
new file mode 100644
index 0000000000..d43b828a49
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..dd9ba51947
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_syndicate.png
new file mode 100644
index 0000000000..6a51db9b7e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_3_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_black.png
new file mode 100644
index 0000000000..67f25777ea
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..fb1266f391
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..2b14b3777d
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_black.png
new file mode 100644
index 0000000000..653109f088
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..93d00aa65e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..1b63837065
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_black.png
new file mode 100644
index 0000000000..30e3525c7e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..8d55ea1df9
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..2fb582d569
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_black.png
new file mode 100644
index 0000000000..cb82281e40
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..6bd780f250
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_syndicate.png
new file mode 100644
index 0000000000..e6d0a439ee
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_4_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_black.png
new file mode 100644
index 0000000000..61c3ad81f1
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..bf156aceb7
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..8183e0defa
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_black.png
new file mode 100644
index 0000000000..3dd9f7c95b
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..66032a9ddd
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..eef3d3322d
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_black.png
new file mode 100644
index 0000000000..f1fa1b4f34
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..95d5ed72a2
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..b9a25077a1
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_black.png
new file mode 100644
index 0000000000..48290bd26c
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..5f557f6f11
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_syndicate.png
new file mode 100644
index 0000000000..22f74e0535
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_5_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_black.png
new file mode 100644
index 0000000000..7b4eb021bf
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..f94cc86077
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..7b7905bd38
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_black.png
new file mode 100644
index 0000000000..c44ddd87e6
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..970bef60e4
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..729c0def3f
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_black.png
new file mode 100644
index 0000000000..23697e2f9a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..1e844e8587
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..fabd88049a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_black.png
new file mode 100644
index 0000000000..429b9c9dcf
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..7fc01c72b5
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_syndicate.png
new file mode 100644
index 0000000000..b1021e01bc
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_6_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_black.png
new file mode 100644
index 0000000000..444a83394e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..8d795e524e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..6f786cca2a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_black.png
new file mode 100644
index 0000000000..2308d43d4f
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..efbe7248ec
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..7954748eab
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_black.png
new file mode 100644
index 0000000000..e466ae7120
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..cd0b45393e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..7beeded173
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_black.png
new file mode 100644
index 0000000000..b72505fb87
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..c9923e0c89
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_syndicate.png
new file mode 100644
index 0000000000..07f4d96f75
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_7_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_black.png
new file mode 100644
index 0000000000..3367fa0d2e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..83eafee6c7
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..76d30fab1a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_black.png
new file mode 100644
index 0000000000..58a1130c4a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..6204855e3c
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..e1b2aba48e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_black.png
new file mode 100644
index 0000000000..2ce9b69f16
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..ce605b903e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..1ad0852935
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_black.png
new file mode 100644
index 0000000000..69154bbc3b
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..587025d064
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_syndicate.png
new file mode 100644
index 0000000000..ec1158a360
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_8_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_black.png
new file mode 100644
index 0000000000..59686360af
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..9c88a1a275
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..4ef37da096
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_black.png
new file mode 100644
index 0000000000..7104afcd64
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..35aba68cfe
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..f6bad83825
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_black.png
new file mode 100644
index 0000000000..43341bb1f8
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..61af6925e9
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..c3b7cc6142
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_black.png
new file mode 100644
index 0000000000..ab89960ba0
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..dbdff6554e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_syndicate.png
new file mode 100644
index 0000000000..1a68d32b7c
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_9_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_black.png
new file mode 100644
index 0000000000..5c524bad64
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..4aab2f09d4
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..47fe7da11d
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_black.png
new file mode 100644
index 0000000000..eff87dcb56
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..bc1f38c11e
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..025843a2ee
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_black.png
new file mode 100644
index 0000000000..da4360e0e5
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..7ed29a50d8
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..e17eaab8cf
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_black.png
new file mode 100644
index 0000000000..4be96b088a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..11bea7d14b
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_syndicate.png
new file mode 100644
index 0000000000..f8e87adbd4
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Ace_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_black.png
new file mode 100644
index 0000000000..83e604757b
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..5aa923cba2
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..9b1a9ee48c
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_black.png
new file mode 100644
index 0000000000..0e79933147
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..8b9d7cb53f
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..c11bda0bf3
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_black.png
new file mode 100644
index 0000000000..e9ab75342f
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..2e216e81cb
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..6b07df3520
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_black.png
new file mode 100644
index 0000000000..df54477231
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..5fa983d5e1
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_syndicate.png
new file mode 100644
index 0000000000..1da0de75ba
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Jack_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_black.png
new file mode 100644
index 0000000000..2ec99fc8dd
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..28488799a0
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..446c79e0b3
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_black.png
new file mode 100644
index 0000000000..0c561befb9
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..b6af7d6218
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..b6f8e32cc2
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_black.png
new file mode 100644
index 0000000000..fe38670021
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..1c57dd3426
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..7ebf4ce24f
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_black.png
new file mode 100644
index 0000000000..6fc8241b11
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..adb48697f9
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_syndicate.png
new file mode 100644
index 0000000000..5da2adf32a
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_King_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_black.png
new file mode 100644
index 0000000000..de3cf80db9
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_nanotrasen.png
new file mode 100644
index 0000000000..c22d142b63
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_syndicate.png
new file mode 100644
index 0000000000..e234569093
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Clubs_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_black.png
new file mode 100644
index 0000000000..7a529a1915
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_nanotrasen.png
new file mode 100644
index 0000000000..537de98404
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_syndicate.png
new file mode 100644
index 0000000000..184f90b5de
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Diamonds_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_black.png
new file mode 100644
index 0000000000..1b190bd934
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_nanotrasen.png
new file mode 100644
index 0000000000..c78fbcdba0
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_syndicate.png
new file mode 100644
index 0000000000..30c4271fc9
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Hearts_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_black.png
new file mode 100644
index 0000000000..40edb50caa
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_nanotrasen.png
new file mode 100644
index 0000000000..613f4e81ca
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_syndicate.png
new file mode 100644
index 0000000000..0106a46014
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/sc_Queen_of_Spades_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_black.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_black.png
new file mode 100644
index 0000000000..e634a9f8a0
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_black.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_nanotrasen.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_nanotrasen.png
new file mode 100644
index 0000000000..a219d05954
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_nanotrasen.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_syndicate.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_syndicate.png
new file mode 100644
index 0000000000..03b7154520
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/singlecard_down_syndicate.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_box.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_box.png
new file mode 100644
index 0000000000..3eaa88dd30
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_box.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_box_open.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_box_open.png
new file mode 100644
index 0000000000..18cbfc12a4
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_box_open.png differ
diff --git a/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_joker.png b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_joker.png
new file mode 100644
index 0000000000..2e282d0c7d
Binary files /dev/null and b/Resources/Textures/_EstacaoPirata/Objects/Misc/cards.rsi/syndicate_joker.png differ