diff --git a/Content.Client/Tabletop/TabletopSystem.cs b/Content.Client/Tabletop/TabletopSystem.cs index 1f146a1798..5aafb5ffe3 100644 --- a/Content.Client/Tabletop/TabletopSystem.cs +++ b/Content.Client/Tabletop/TabletopSystem.cs @@ -44,8 +44,9 @@ namespace Content.Client.Tabletop UpdatesOutsidePrediction = true; CommandBinds.Builder - .Bind(EngineKeyFunctions.Use, new PointerInputCmdHandler(OnUse, false, true)) - .Register(); + .Bind(EngineKeyFunctions.Use, new PointerInputCmdHandler(OnUse, false, true)) + .Bind(EngineKeyFunctions.UseSecondary, new PointerInputCmdHandler(OnUseSecondary, true, true)) + .Register(); SubscribeNetworkEvent(OnTabletopPlay); SubscribeLocalEvent(HandleComponentState); @@ -177,6 +178,17 @@ namespace Content.Client.Tabletop _ => false }; } + private bool OnUseSecondary(in PointerInputCmdArgs args) + { + if (_draggedEntity != null && _table != null) + { + var ev = new TabletopRequestTakeOut(); + ev.Entity = _draggedEntity.Value; + ev.TableUid = _table.Value; + RaiseNetworkEvent(ev); + } + return false; + } private bool OnMouseDown(in PointerInputCmdArgs args) { diff --git a/Content.Server/Tabletop/Components/TabletopGameComponent.cs b/Content.Server/Tabletop/Components/TabletopGameComponent.cs index 7ebd12f200..dfac9e89df 100644 --- a/Content.Server/Tabletop/Components/TabletopGameComponent.cs +++ b/Content.Server/Tabletop/Components/TabletopGameComponent.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Vector2 = System.Numerics.Vector2; namespace Content.Server.Tabletop.Components { @@ -8,18 +9,33 @@ namespace Content.Server.Tabletop.Components [RegisterComponent, Access(typeof(TabletopSystem))] public sealed class TabletopGameComponent : Component { + /// + /// The localized name of the board. Shown in the UI. + /// [DataField("boardName")] public string BoardName { get; } = "tabletop-default-board-name"; + /// + /// The type of method used to set up a tabletop. + /// [DataField("setup", required: true)] public TabletopSetup Setup { get; } = new TabletopChessSetup(); + /// + /// The size of the viewport being opened. Must match the board dimensions otherwise you'll get the space parallax (unless that's what you want). + /// [DataField("size")] public Vector2i Size { get; } = (300, 300); + /// + /// The zoom of the viewport camera. + /// [DataField("cameraZoom")] public Vector2 CameraZoom { get; } = Vector2.One; + /// + /// The specific session of this tabletop. + /// [ViewVariables] public TabletopSession? Session { get; set; } = null; } diff --git a/Content.Server/Tabletop/TabletopBackgammonSetup.cs b/Content.Server/Tabletop/TabletopBackgammonSetup.cs index 3d312796d0..f0bb72d0f8 100644 --- a/Content.Server/Tabletop/TabletopBackgammonSetup.cs +++ b/Content.Server/Tabletop/TabletopBackgammonSetup.cs @@ -5,8 +5,6 @@ namespace Content.Server.Tabletop [UsedImplicitly] public sealed class TabletopBackgammonSetup : TabletopSetup { - [DataField("boardPrototype")] - public string BackgammonBoardPrototype { get; } = "BackgammonBoardTabletop"; [DataField("whitePiecePrototype")] public string WhitePiecePrototype { get; } = "WhiteTabletopPiece"; @@ -15,7 +13,7 @@ namespace Content.Server.Tabletop public string BlackPiecePrototype { get; } = "BlackTabletopPiece"; public override void SetupTabletop(TabletopSession session, IEntityManager entityManager) { - var board = entityManager.SpawnEntity(BackgammonBoardPrototype, session.Position); + var board = entityManager.SpawnEntity(BoardPrototype, session.Position); const float borderLengthX = 7.35f; //BORDER const float borderLengthY = 5.60f; //BORDER diff --git a/Content.Server/Tabletop/TabletopCheckerSetup.cs b/Content.Server/Tabletop/TabletopCheckerSetup.cs index de73f7a0af..b6a425dcb7 100644 --- a/Content.Server/Tabletop/TabletopCheckerSetup.cs +++ b/Content.Server/Tabletop/TabletopCheckerSetup.cs @@ -8,14 +8,12 @@ namespace Content.Server.Tabletop [UsedImplicitly] public sealed class TabletopCheckerSetup : TabletopSetup { - [DataField("boardPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string CheckerBoardPrototype { get; } = "CheckerBoardTabletop"; // TODO: Un-hardcode the rest of entity prototype IDs, probably. public override void SetupTabletop(TabletopSession session, IEntityManager entityManager) { - var checkerboard = entityManager.SpawnEntity(CheckerBoardPrototype, session.Position.Offset(-1, 0)); + var checkerboard = entityManager.SpawnEntity(BoardPrototype, session.Position.Offset(-1, 0)); session.Entities.Add(checkerboard); diff --git a/Content.Server/Tabletop/TabletopChessSetup.cs b/Content.Server/Tabletop/TabletopChessSetup.cs index e5f086ba94..463de14680 100644 --- a/Content.Server/Tabletop/TabletopChessSetup.cs +++ b/Content.Server/Tabletop/TabletopChessSetup.cs @@ -8,14 +8,12 @@ namespace Content.Server.Tabletop [UsedImplicitly] public sealed class TabletopChessSetup : TabletopSetup { - [DataField("boardPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string ChessBoardPrototype { get; } = "ChessBoardTabletop"; // TODO: Un-hardcode the rest of entity prototype IDs, probably. public override void SetupTabletop(TabletopSession session, IEntityManager entityManager) { - var chessboard = entityManager.SpawnEntity(ChessBoardPrototype, session.Position.Offset(-1, 0)); + var chessboard = entityManager.SpawnEntity(BoardPrototype, session.Position.Offset(-1, 0)); session.Entities.Add(chessboard); diff --git a/Content.Server/Tabletop/TabletopEmptySetup.cs b/Content.Server/Tabletop/TabletopEmptySetup.cs new file mode 100644 index 0000000000..840afccfc7 --- /dev/null +++ b/Content.Server/Tabletop/TabletopEmptySetup.cs @@ -0,0 +1,14 @@ +using JetBrains.Annotations; + +namespace Content.Server.Tabletop +{ + [UsedImplicitly] + public sealed class TabletopEmptySetup : TabletopSetup + { + public override void SetupTabletop(TabletopSession session, IEntityManager entityManager) + { + var board = entityManager.SpawnEntity(BoardPrototype, session.Position.Offset(0, 0)); + session.Entities.Add(board); + } + } +} diff --git a/Content.Server/Tabletop/TabletopHologramComponent.cs b/Content.Server/Tabletop/TabletopHologramComponent.cs new file mode 100644 index 0000000000..1a9c7ec61c --- /dev/null +++ b/Content.Server/Tabletop/TabletopHologramComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Server.Tabletop; + +/// +/// This is used for tracking pieces that are simply "holograms" shown on the tabletop +/// +[RegisterComponent] +public sealed class TabletopHologramComponent : Component +{ + +} diff --git a/Content.Server/Tabletop/TabletopParchisSetup.cs b/Content.Server/Tabletop/TabletopParchisSetup.cs index 14e2ba6417..353ca86877 100644 --- a/Content.Server/Tabletop/TabletopParchisSetup.cs +++ b/Content.Server/Tabletop/TabletopParchisSetup.cs @@ -7,8 +7,6 @@ namespace Content.Server.Tabletop [UsedImplicitly] public sealed class TabletopParchisSetup : TabletopSetup { - [DataField("boardPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string ParchisBoardPrototype { get; } = "ParchisBoardTabletop"; [DataField("redPiecePrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] public string RedPiecePrototype { get; } = "RedTabletopPiece"; @@ -24,7 +22,7 @@ namespace Content.Server.Tabletop public override void SetupTabletop(TabletopSession session, IEntityManager entityManager) { - var board = entityManager.SpawnEntity(ParchisBoardPrototype, session.Position); + var board = entityManager.SpawnEntity(BoardPrototype, session.Position); const float x1 = 6.25f; const float x2 = 4.25f; diff --git a/Content.Server/Tabletop/TabletopSetup.cs b/Content.Server/Tabletop/TabletopSetup.cs index ad1cc3a2e3..3c9a020651 100644 --- a/Content.Server/Tabletop/TabletopSetup.cs +++ b/Content.Server/Tabletop/TabletopSetup.cs @@ -1,3 +1,6 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + namespace Content.Server.Tabletop { [ImplicitDataDefinitionForInheritors] @@ -10,5 +13,8 @@ namespace Content.Server.Tabletop /// Tabletop session to set up. You'll want to grab the tabletop center position here for spawning entities. /// Dependency that can be used for spawning entities. public abstract void SetupTabletop(TabletopSession session, IEntityManager entityManager); + + [DataField("boardPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] + public string BoardPrototype = default!; } } diff --git a/Content.Server/Tabletop/TabletopSystem.cs b/Content.Server/Tabletop/TabletopSystem.cs index c0dec008b0..f76b2d9386 100644 --- a/Content.Server/Tabletop/TabletopSystem.cs +++ b/Content.Server/Tabletop/TabletopSystem.cs @@ -1,6 +1,11 @@ +using Content.Server.Popups; using Content.Server.Tabletop.Components; +using Content.Shared.Examine; +using Content.Shared.Hands.Components; using Content.Shared.Interaction; +using Content.Shared.Item; using Content.Shared.Tabletop; +using Content.Shared.Tabletop.Components; using Content.Shared.Tabletop.Events; using Content.Shared.Verbs; using JetBrains.Annotations; @@ -16,7 +21,9 @@ namespace Content.Server.Tabletop public sealed partial class TabletopSystem : SharedTabletopSystem { [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly ViewSubscriberSystem _viewSubscriberSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; public override void Initialize() { @@ -27,10 +34,73 @@ namespace Content.Server.Tabletop SubscribeLocalEvent(OnPlayerDetached); SubscribeLocalEvent(OnGamerShutdown); SubscribeLocalEvent>(AddPlayGameVerb); + SubscribeLocalEvent(OnInteractUsing); + + SubscribeNetworkEvent(OnTabletopRequestTakeOut); InitializeMap(); } + private void OnTabletopRequestTakeOut(TabletopRequestTakeOut msg, EntitySessionEventArgs args) + { + if (args.SenderSession is not IPlayerSession playerSession) + return; + + if (!TryComp(msg.TableUid, out TabletopGameComponent? tabletop) || tabletop.Session is not { } session) + return; + + + if (!msg.Entity.IsValid()) + return; + + if (!TryComp(msg.Entity, out TabletopHologramComponent? hologram)) + { + _popupSystem.PopupEntity(Loc.GetString("tabletop-error-remove-non-hologram"), msg.TableUid, args.SenderSession); + return; + } + + // Check if player is actually playing at this table + if (!session.Players.ContainsKey(playerSession)) + return; + + // Find the entity, remove it from the session and set it's position to the tabletop + session.Entities.TryGetValue(msg.Entity, out var result); + session.Entities.Remove(result); + _entityManager.QueueDeleteEntity(result); + } + + private void OnInteractUsing(EntityUid uid, TabletopGameComponent component, InteractUsingEvent args) + { + if (!EntityManager.TryGetComponent(args.User, out HandsComponent? hands)) + return; + + if (component.Session is not { } session) + return; + + if (hands.ActiveHand == null) + return; + + if (hands.ActiveHand.HeldEntity == null) + return; + + var handEnt = hands.ActiveHand.HeldEntity.Value; + + if (!TryComp(handEnt, out var item)) + return; + + var meta = MetaData(handEnt); + var protoId = meta.EntityPrototype?.ID; + + var hologram = _entityManager.SpawnEntity(protoId, session.Position.Offset(-1, 0)); + + // Make sure the entity can be dragged and can be removed, move it into the board game world and add it to the Entities hashmap + EnsureComp(hologram); + EnsureComp(hologram); + session.Entities.Add(hologram); + + _popupSystem.PopupEntity(Loc.GetString("tabletop-added-piece"), uid, args.User); + } + protected override void OnTabletopMove(TabletopMoveEvent msg, EntitySessionEventArgs args) { if (args.SenderSession is not IPlayerSession playerSession) @@ -57,11 +127,14 @@ namespace Content.Server.Tabletop if (!EntityManager.TryGetComponent(args.User, out var actor)) return; - ActivationVerb verb = new(); - verb.Text = Loc.GetString("tabletop-verb-play-game"); - verb.Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/die.svg.192dpi.png")); - verb.Act = () => OpenSessionFor(actor.PlayerSession, uid); - args.Verbs.Add(verb); + var playVerb = new ActivationVerb() + { + Text = Loc.GetString("tabletop-verb-play-game"), + Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/die.svg.192dpi.png")), + Act = () => OpenSessionFor(actor.PlayerSession, uid) + }; + + args.Verbs.Add(playVerb); } private void OnTabletopActivate(EntityUid uid, TabletopGameComponent component, ActivateInWorldEvent args) diff --git a/Content.Shared/Tabletop/SharedTabletopSystem.cs b/Content.Shared/Tabletop/SharedTabletopSystem.cs index 5fcf9b234f..542542054a 100644 --- a/Content.Shared/Tabletop/SharedTabletopSystem.cs +++ b/Content.Shared/Tabletop/SharedTabletopSystem.cs @@ -86,6 +86,13 @@ namespace Content.Shared.Tabletop } } + [Serializable, NetSerializable] + public sealed class TabletopRequestTakeOut : EntityEventArgs + { + public EntityUid Entity; + public EntityUid TableUid; + } + #region Utility /// diff --git a/Resources/Locale/en-US/paper/book-dnd.ftl b/Resources/Locale/en-US/paper/book-dnd.ftl new file mode 100644 index 0000000000..7aea7fc202 --- /dev/null +++ b/Resources/Locale/en-US/paper/book-dnd.ftl @@ -0,0 +1,155 @@ +book-cnc-sheet = C&C 5e Character Sheet + -------------------------------------------------------------------------------------- + SECTION 1: THE BASICS + -------------------------------------------------------------------------------------- + Character Name : + Race / Class : + Level / Exp Pts : + Background : + + -------------------------------------------------------------------------------------- + SECTION 2: ABILITIES + -------------------------------------------------------------------------------------- + Strength = 10 (+0) 10 Base + Dexterity = 10 (+0) 10 Base + Constitution = 10 (+0) 10 Base + Intelligence = 10 (+0) 10 Base + Wisdom = 10 (+0) 10 Base + Charisma = 10 (+0) 10 Base + + Proficiency Bonus = + Perception (passive wisdom) = + + Racial (Race) + + Class (Class) + + + -------------------------------------------------------------------------------------- + SECTION 3: SAVING THROWS + -------------------------------------------------------------------------------------- + + ( )Strength = +0 + ( )Dexterity = +0 + ( )Constitution = +0 + ( )Intelligence = +0 + ( )Wisdom = +0 + ( )Charisma = +0 + + + -------------------------------------------------------------------------------------- + SECTION 4: SKILLS + -------------------------------------------------------------------------------------- + + ( ) Acrobatics (Dex) +0 ( ) Medicine (Wis) +0 + ( ) Animal Handling (Wis) +0 ( ) Nature (Int) +0 + ( ) Arcana (Int) +0 ( ) Perception (Wis) +0 + ( ) Athletics (Str) +0 ( ) Performance (Cha) +0 + ( ) Deception (Cha) +0 ( ) Persuasion (Cha) +0 + ( ) History (Int) +0 ( ) Religion (Int) +0 + ( ) Insight (Wis) +0 ( ) Sleight of Hand (Dex) +0 + ( ) Intimidation (Cha) +0 ( ) Stealth (Dex) +0 + ( ) Investigation (Int) +0 ( ) Survival (Wis) +0 + + + -------------------------------------------------------------------------------------- + SECTION 5: COMBAT & HEALTH + -------------------------------------------------------------------------------------- + + + Armor Class : + Initiative (passive) : + Speed : + + Hit Dice : + Max Hit Points : + Current Hit Points : + Temporary Hit Points : + + ATTACKS + Weapon type(Melee or Ranged) / Bonus / Damage (Type) + + -------------------------------------------------------------------------------------- + SECTION 6: BACKGROUND + -------------------------------------------------------------------------------------- + + Age / Gender : + Height / Weight : + Eyes / Skin / Hair : + Description : + + Background : + Skill Proficiencies : + Tool Proficiencies : + Languages : + + Features : + Con of Choice : + Traits : + Ideal : + Bonds : + Flaws : + + -------------------------------------------------------------------------------------- + SECTION 7: EXTRAS + -------------------------------------------------------------------------------------- + Equipment List + Description Cost Weight + + + lbs + + Wealth + PP : + EP : + GP : + SP : + CP : + + Gems : + Jewelry : + Other : + Magic Items : + + + -------------------------------------------------------------------------------------- + SECTION 8: SPELLCASTING + -------------------------------------------------------------------------------------- + + Spell Level: + Spell Save DC: + Spell Attack Mod: + Spell Slots: + 1: (MAX) (USED) + 2: (MAX) (USED) + 3: (MAX) (USED) + 4: (MAX) (USED) + 5: (MAX) (USED) + 6: (MAX) (USED) + 7: (MAX) (USED) + 8: (MAX) (USED) + 9: (MAX) (USED) + + Cantrips + Name Casting Time Range Duration Components + + 1: Name Casting Time Range Duration Components Ritual? + + 2: Name Casting Time Range Duration Components Ritual? + + 3: Name Casting Time Range Duration Components Ritual? + + 4: Name Casting Time Range Duration Components Ritual? + + 5: Name Casting Time Range Duration Components Ritual? + + 6: Name Casting Time Range Duration Components Ritual? + + 7: Name Casting Time Range Duration Components Ritual? + + 8: Name Casting Time Range Duration Components Ritual? + + 9: Name Casting Time Range Duration Components Ritual? + -------------------------------------------------------------------------------------- + Carps and Crypts 5e + diff --git a/Resources/Locale/en-US/tabletop/tabletop.ftl b/Resources/Locale/en-US/tabletop/tabletop.ftl index 1231b8bf24..b2bacd1649 100644 --- a/Resources/Locale/en-US/tabletop/tabletop.ftl +++ b/Resources/Locale/en-US/tabletop/tabletop.ftl @@ -1,6 +1,9 @@ ## TabletopGameComponent tabletop-verb-play-game = Play Game +tabletop-verb-dump-pieces = Dump Pieces tabletop-default-board-name = Board Game +tabletop-error-remove-non-hologram = You cant remove a built in piece! +tabletop-added-piece = The board shimmers brightly! ## Chess tabletop-chess-board-name = Chess @@ -14,3 +17,6 @@ tabletop-backgammon-board-name = Backgammon ## Checkers tabletop-checkers-board-name = Checkers + +## Battlemap +tabletop-battlemap-board-name = Battlemap diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index 304a3a3425..d44765826f 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -140,8 +140,13 @@ - id: BackgammonBoard - id: ParchisBoard - id: CheckerBoard - - id: d6Dice - amount: 4 + - id: ShipBattlemap + - id: SnowBattlemap + - id: SandBattlemap + - id: MoonBattlemap + - id: GrassBattlemap + - id: DiceBag + amount: 6 - type: entity id: CrateFunATV diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml index 99d4e516b1..f022b4b9a5 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml @@ -1,12 +1,18 @@ - type: vendingMachineInventory id: GoodCleanFunInventory startingInventory: - DiceBag: 4 + DiceBag: 6 Paper: 8 d6Dice: 8 ChessBoard: 1 BackgammonBoard: 1 ParchisBoard: 1 CheckerBoard: 1 + ShipBattlemap: 1 + SnowBattlemap: 1 + SandBattlemap: 1 + MoonBattlemap: 1 + GrassBattlemap: 1 + PaperCNCSheet: 6 MysteryFigureBox: 2 BooksBag: 3 diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml index bcdff314ab..ab404b88a3 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml @@ -1,5 +1,5 @@ - type: entity - parent: BaseItem + parent: BaseBoardEntity id: BackgammonBoard name: backgammon board description: Old fashioned game of dice and pieces. @@ -12,14 +12,14 @@ size: 550, 410 setup: !type:TabletopBackgammonSetup + boardPrototype: BackgammonBoardTabletop - type: entity id: BackgammonBoardTabletop name: backgammon + parent: BaseBoardTabletop noSpawn: true components: - type: Sprite sprite: Objects/Fun/Tabletop/backgammon_tabletop.rsi state: backgammonBoard - noRot: false - drawdepth: FloorTiles diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml new file mode 100644 index 0000000000..33a2d5b502 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml @@ -0,0 +1,39 @@ +- type: entity + parent: BaseItem + id: BaseBoardEntity # Board item + name: board + abstract: true + description: A blank board. + components: + - type: TabletopGame + size: 256, 256 + setup: + !type:TabletopEmptySetup + boardPrototype: Crowbar + +- type: entity + id: BaseTabletopPiece # Board piece + parent: BaseItem + abstract: true + components: + - type: TabletopDraggable + - type: Sprite + netsync: false + noRot: true + - type: Appearance + - type: Tag + tags: + - TabletopPiece + +- type: entity + id: BaseBoardTabletop + name: baseboard + abstract: true + noSpawn: true + components: + - type: Tag + tags: + - TabletopBoard + - type: Sprite + noRot: false + drawdepth: FloorTiles diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml index bbfd403e91..c6aa12db3e 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml @@ -1,6 +1,6 @@ # Uses the chessboard and generic pieces - type: entity - parent: BaseItem + parent: BaseBoardEntity id: CheckerBoard name: checkerboard description: A checkerboard. Pieces included! @@ -11,35 +11,26 @@ - type: TabletopGame boardName: tabletop-checkers-board-name size: 338, 274 - setup: !type:TabletopCheckerSetup + setup: + !type:TabletopCheckerSetup + boardPrototype: CheckerBoardTabletop # Checkerboard tabletop item (item only visible in tabletop game) - type: entity id: CheckerBoardTabletop name: checkerboard + parent: BaseBoardTabletop noSpawn: true components: - type: Sprite sprite: Objects/Fun/Tabletop/chessboard_tabletop.rsi state: chessboard_tabletop - noRot: false - drawdepth: FloorTiles - -- type: entity - id: BaseCheckerPiece - parent: BaseItem - noSpawn: true - components: - - type: TabletopDraggable - - type: Sprite - noRot: true - - type: Appearance # The pieces - type: entity id: WhiteCheckerPiece name: white piece - parent: BaseCheckerPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/checker_pieces.rsi @@ -48,7 +39,7 @@ - type: entity id: WhiteCheckerQueen name: white queen - parent: BaseCheckerPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/checker_pieces.rsi @@ -57,7 +48,7 @@ - type: entity id: BlackCheckerPiece name: black piece - parent: BaseCheckerPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/checker_pieces.rsi @@ -66,7 +57,7 @@ - type: entity id: BlackCheckerQueen name: black queen - parent: BaseCheckerPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/checker_pieces.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml index f5821b9bf7..b31b7803ba 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml @@ -1,6 +1,6 @@ # Chessboard item (normal in game item you can hold in your hand) - type: entity - parent: BaseItem + parent: BaseBoardEntity id: ChessBoard name: chessboard description: A chessboard. Pieces included! @@ -11,36 +11,26 @@ - type: TabletopGame boardName: tabletop-chess-board-name size: 338, 274 - setup: !type:TabletopChessSetup + setup: + !type:TabletopChessSetup + boardPrototype: ChessBoardTabletop # Chessboard tabletop item (item only visible in tabletop game) - type: entity id: ChessBoardTabletop name: chessboard + parent: BaseBoardTabletop noSpawn: true components: - type: Sprite sprite: Objects/Fun/Tabletop/chessboard_tabletop.rsi state: chessboard_tabletop - noRot: false - drawdepth: FloorTiles - -## Chess pieces -- type: entity - id: BaseChessPiece - parent: BaseItem - abstract: true - components: - - type: TabletopDraggable - - type: Sprite - noRot: true - - type: Appearance # White pieces - type: entity id: WhiteKing name: white king - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -49,7 +39,7 @@ - type: entity id: WhiteQueen name: white queen - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -58,7 +48,7 @@ - type: entity id: WhiteRook name: white rook - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -67,7 +57,7 @@ - type: entity id: WhiteBishop name: white bishop - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -76,7 +66,7 @@ - type: entity id: WhiteKnight name: white knight - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -85,7 +75,7 @@ - type: entity id: WhitePawn name: white pawn - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -95,7 +85,7 @@ - type: entity id: BlackKing name: black king - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -104,7 +94,7 @@ - type: entity id: BlackQueen name: black queen - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -113,7 +103,7 @@ - type: entity id: BlackRook name: black rook - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -122,7 +112,7 @@ - type: entity id: BlackBishop name: black bishop - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -131,7 +121,7 @@ - type: entity id: BlackKnight name: black knight - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi @@ -140,7 +130,7 @@ - type: entity id: BlackPawn name: black pawn - parent: BaseChessPiece + parent: BaseTabletopPiece components: - type: Sprite sprite: Objects/Fun/Tabletop/chess_pieces.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml new file mode 100644 index 0000000000..51f17d55b9 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml @@ -0,0 +1,135 @@ +# Board item (given to players) +- type: entity + parent: BaseBoardEntity + id: BaseBattlemap + name: battlemap + abstract: true + description: A battlemap for your epic dungeon exploring to begin, pieces not included! + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/grassbm.rsi + state: icon + - type: TabletopGame + boardName: tabletop-battlemap-board-name + setup: + !type:TabletopEmptySetup + boardPrototype: GrassBoardTabletop + +- type: entity + parent: BaseBattlemap + id: GrassBattlemap + name: grass battlemap + description: A battlemap for your epic dungeon exploring to begin, pieces not included! + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/grassbm.rsi + - type: TabletopGame + setup: + !type:TabletopEmptySetup + boardPrototype: GrassBoardTabletop + +- type: entity + parent: BaseBattlemap + id: MoonBattlemap + name: moon battlemap + description: A battlemap for your epic moon exploring to begin, pieces not included! + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/moonbm.rsi + - type: TabletopGame + setup: + !type:TabletopEmptySetup + boardPrototype: MoonBoardTabletop + +- type: entity + parent: BaseBattlemap + id: SandBattlemap + name: sand battlemap + description: A battlemap for your epic beach episodes to begin, pieces not included! + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/sandbm.rsi + - type: TabletopGame + setup: + !type:TabletopEmptySetup + boardPrototype: SandBoardTabletop + +- type: entity + parent: BaseBattlemap + id: SnowBattlemap + name: snow battlemap + description: A battlemap for your frigid exploring to begin, pieces not included! # if this isn't funny enough i can remove it + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/snowbm.rsi + - type: TabletopGame + setup: + !type:TabletopEmptySetup + boardPrototype: SnowBoardTabletop + +- type: entity + parent: BaseBattlemap + id: ShipBattlemap + name: ship battlemap + description: A battlemap for your epic space exploring to begin, pieces not included! + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/shipbm.rsi + - type: TabletopGame + size: 543, 543 + setup: + !type:TabletopEmptySetup + boardPrototype: ShipBoardTabletop + +# Background entity (actually shown in the board) +- type: entity + parent: BaseBoardTabletop + id: GrassBoardTabletop + name: grass battlemap + noSpawn: true + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi + state: tabletop + noRot: false + drawdepth: FloorTiles + +- type: entity + parent: BaseBoardTabletop + id: MoonBoardTabletop + name: grass battlemap + noSpawn: true + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi + state: tabletop + +- type: entity + parent: BaseBoardTabletop + id: SandBoardTabletop + name: sand battlemap + noSpawn: true + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi + state: tabletop + +- type: entity + parent: BaseBoardTabletop + id: SnowBoardTabletop + name: snow battlemap + noSpawn: true + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi + state: tabletop + +- type: entity + parent: BaseBoardTabletop + id: ShipBoardTabletop + name: ship battlemap + noSpawn: true + components: + - type: Sprite + sprite: Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi + state: tabletop diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml index 614d74e395..bb5fdf1f0b 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml @@ -1,6 +1,6 @@ # Parchís board item (normal in game item you can hold in your hand) - type: entity - parent: BaseItem + parent: BaseBoardEntity id: ParchisBoard name: parchís board description: Cross and circle board game famous for destroying countless friendships. @@ -13,16 +13,16 @@ size: 574, 574 setup: !type:TabletopParchisSetup + boardPrototype: ParchisBoardTabletop # Parchís tabletop item (item only visible in tabletop game) - type: entity id: ParchisBoardTabletop name: parchís + parent: BaseBoardTabletop noSpawn: true components: - type: Sprite sprite: Objects/Fun/Tabletop/parchis_tabletop.rsi state: board - noRot: false - drawdepth: FloorTiles diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/tabletopGeneric.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/tabletopGeneric.yml index 0be3b37a65..120112b9de 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/tabletopGeneric.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/tabletopGeneric.yml @@ -1,18 +1,16 @@ - type: entity - id: BaseTabletopPiece - parent: BaseItem + id: BaseGenericTabletopPiece + parent: BaseTabletopPiece abstract: true components: - - type: TabletopDraggable - type: Sprite noRot: true sprite: Objects/Fun/Tabletop/generic_pieces.rsi - - type: Appearance - type: entity id: RedTabletopPiece name: red piece - parent: BaseTabletopPiece + parent: BaseGenericTabletopPiece components: - type: Sprite state: red @@ -20,7 +18,7 @@ - type: entity id: GreenTabletopPiece name: green piece - parent: BaseTabletopPiece + parent: BaseGenericTabletopPiece components: - type: Sprite state: green @@ -28,7 +26,7 @@ - type: entity id: YellowTabletopPiece name: yellow piece - parent: BaseTabletopPiece + parent: BaseGenericTabletopPiece components: - type: Sprite state: yellow @@ -36,7 +34,7 @@ - type: entity id: BlueTabletopPiece name: blue piece - parent: BaseTabletopPiece + parent: BaseGenericTabletopPiece components: - type: Sprite state: blue @@ -44,7 +42,7 @@ - type: entity id: WhiteTabletopPiece name: white piece - parent: BaseTabletopPiece + parent: BaseGenericTabletopPiece components: - type: Sprite state: white @@ -52,7 +50,7 @@ - type: entity id: BlackTabletopPiece name: black piece - parent: BaseTabletopPiece + parent: BaseGenericTabletopPiece components: - type: Sprite state: black diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index b985cb14d9..bcbbc4403f 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -140,6 +140,37 @@ guides: - CargoBounties +- type: entity + name: character sheet + parent: Paper + id: PaperCNCSheet # legally gray zone of using "D&D" and "DND" + description: 'A sheet for your Carps and Crypts characters.' + components: + - type: Paper + contentSize: 10000 + escapeFormatting: false + content: book-cnc-sheet + - type: Sprite + sprite: Objects/Misc/bureaucracy.rsi + netsync: false + layers: + - state: paper + color: "#cccccc" + - state: paper_words + map: ["enum.PaperVisualLayers.Writing"] + color: "#cccccc" #aaaaaaaaaaaaaaaaaaaaaaa + visible: false + - state: paper_stamp-generic + map: ["enum.PaperVisualLayers.Stamp"] + visible: false + - type: PaperVisuals + backgroundImagePath: "/Textures/Interface/Paper/paper_background_default.svg.96dpi.png" + contentImagePath: "/Textures/Interface/Paper/paper_content_lined.svg.96dpi.png" + backgroundModulate: "#cccccc" + contentImageModulate: "#cccccc" + backgroundPatchMargin: 16.0, 16.0, 16.0, 16.0 + contentMargin: 16.0, 16.0, 16.0, 16.0 + - type: entity parent: Paper id: PaperWritten diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 4785edadd0..4103b904cb 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -801,6 +801,12 @@ - type: Tag id: Taser +- type: Tag + id: TabletopBoard + +- type: Tag + id: TabletopPiece + - type: Tag id: TimerBrigElectronics diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm.rsi/icon.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm.rsi/icon.png new file mode 100644 index 0000000000..b2fea90bc1 Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm.rsi/meta.json new file mode 100644 index 0000000000..bf6c485d5d --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original by Visne, Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/discordia-space/CEV-Eris/commit/026ee3250ac1de938b503e3eb46ad73dd9c3ca82", + "size": { + "x": 18, + "y": 18 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi/meta.json new file mode 100644 index 0000000000..5f3f5ea29e --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/discordia-space/CEV-Eris/commit/026ee3250ac1de938b503e3eb46ad73dd9c3ca82", + + "size": { + "x": 288, + "y": 288 + }, + "states": [ + { + "name": "tabletop" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi/tabletop.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi/tabletop.png new file mode 100644 index 0000000000..4e88b840d5 Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi/tabletop.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm.rsi/icon.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm.rsi/icon.png new file mode 100644 index 0000000000..e72816576c Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm.rsi/meta.json new file mode 100644 index 0000000000..825a83f3bc --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original by Visne, Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/vgstation-coders/vgstation13/tree/e4d3ea7f69d21c3667be12b114fa935c4640cb05", + "size": { + "x": 18, + "y": 18 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi/meta.json new file mode 100644 index 0000000000..4bd2d29ac1 --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/vgstation-coders/vgstation13/tree/e4d3ea7f69d21c3667be12b114fa935c4640cb05", + + "size": { + "x": 288, + "y": 288 + }, + "states": [ + { + "name": "tabletop" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi/tabletop.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi/tabletop.png new file mode 100644 index 0000000000..ceda9820aa Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi/tabletop.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm.rsi/icon.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm.rsi/icon.png new file mode 100644 index 0000000000..2b57289f51 Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm.rsi/meta.json new file mode 100644 index 0000000000..bf6c485d5d --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original by Visne, Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/discordia-space/CEV-Eris/commit/026ee3250ac1de938b503e3eb46ad73dd9c3ca82", + "size": { + "x": 18, + "y": 18 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi/meta.json new file mode 100644 index 0000000000..5f3f5ea29e --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/discordia-space/CEV-Eris/commit/026ee3250ac1de938b503e3eb46ad73dd9c3ca82", + + "size": { + "x": 288, + "y": 288 + }, + "states": [ + { + "name": "tabletop" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi/tabletop.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi/tabletop.png new file mode 100644 index 0000000000..826dc0cc2a Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi/tabletop.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm.rsi/icon.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm.rsi/icon.png new file mode 100644 index 0000000000..facfe08953 Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm.rsi/meta.json new file mode 100644 index 0000000000..5f09a73f5b --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original by Visne, Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://opengameart.org/content/seamless-space-backgrounds", + "size": { + "x": 18, + "y": 18 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi/meta.json new file mode 100644 index 0000000000..cfde17c5dd --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, parallax from https://opengameart.org/content/seamless-space-backgrounds", + + "size": { + "x": 543, + "y": 543 + }, + "states": [ + { + "name": "tabletop" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi/tabletop.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi/tabletop.png new file mode 100644 index 0000000000..e29f1eddc2 Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi/tabletop.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm.rsi/icon.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm.rsi/icon.png new file mode 100644 index 0000000000..4ea62ca6cd Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm.rsi/meta.json new file mode 100644 index 0000000000..14bf32524b --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original by Visne, Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/tgstation/tgstation/tree/8abb19545828230d92ba18827feeb42a67a55d49", + "size": { + "x": 18, + "y": 18 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi/meta.json b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi/meta.json new file mode 100644 index 0000000000..ca55416486 --- /dev/null +++ b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Assembled by Just-a-Unity-Dev on GitHub or eclips_e#0001 (728101795427254312) on Discord, texture from https://github.com/tgstation/tgstation/tree/8abb19545828230d92ba18827feeb42a67a55d49", + + "size": { + "x": 288, + "y": 288 + }, + "states": [ + { + "name": "tabletop" + } + ] +} diff --git a/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi/tabletop.png b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi/tabletop.png new file mode 100644 index 0000000000..65d1313047 Binary files /dev/null and b/Resources/Textures/Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi/tabletop.png differ