Beginner’s Guide

Looking to get started with Tabletop Playground as a player? Read on for a how-to on accessing the powerful community creations at your fingertips!

When you start up Tabletop Playground, you’ll be greeted with a few options for starting, joining, and browsing games, as well as a tutorial. We absolutely recommend you complete the tutorial before beginning your own game as it’ll teach you the basics of how to interact with the objects within TTPG’s gametypes. After that, you’re ready to dive in.

Starting a Game

When you select the “start game” prompt, you’ll be greeted with a window covering various tabs, gametypes, and also any custom game types you have downloaded. For now, let’s take a look at the “classic” tab.

This tab features fully-functional gametypes of some classic board games. If you like to kick it old-school, you’ll find all the usual options presented here, ready to pick up with some friends and play! 

However, chances are, if you’re reading this guide, you’re looking for something more, and that’s where TTPG’s great partnership with mod.io comes in! Select the “Find more games…” option to open a Steam browser that’ll take you right to TTPG’s mod.io hub! Just click on the button to link your Steam account to mod.io and you’re all set. If the Steam browser is not available (for example on Mac), your regular browser will open instead. Click on Login and then select “Sign in with Steam”.

On this hub, you can choose from the hundreds of community creations for gametypes, widgets for existing games, and assets for use in your own creations! Subscribing to an option by pressing the red subscribe button in this browser will automatically download the content in-game, so once you’ve subscribed to your chosen game, you will see it downloading in the upper left corner of the screen and then you’re all set!

Going back to “Start Game”, you can now select your new content from mod.io. Games started from this menu can be set-up with passwords, maximum player counts, and other options, so you’re covered whether you’re looking for a private match amongst friends or an opportunity to meet new people over the medium of board games.

Joining Games

When pressing the Join Game option, you’ll be presented with a server browser window.

On this window, you’ll have various options for filters that will narrow down your search terms. Most of TTPG’s community create private games for use amongst friends, but don’t worry! Community sources often host public games, and you can organise these events yourself on our Discord server: https://discord.com/invite/tabletop-playground 

When joining someone else’s game, please be respectful! If you’re unfamiliar with the game, be polite in asking how to play, and allow everyone to take part in the fun. Meanwhile, chat and voice chat are available within games, so when using this feature, please bear in mind the same kind of common sense rules you’d find within any other chatroom, as well as the rules we have over on our Discord server.

If you want to play with your friends, make sure that everyone has activated mod.io and then start your game with a password. Your friends can join you by finding your game in the server browser, or directly through the Steam friends list.

We hope this guide has been helpful and if you have any further questions, don’t hesitate to ask over on our official Discord server: https://discord.com/invite/tabletop-playground 

Working on packages together

If you want to work on a package with multiple people, there are a few things that you need to take care of:

  • Make sure that everyone who should edit the profile on mod.io or upload new vesions is a manager or administrator for the mod. On the mod.io page for your package, go to “Edit”, then “Team” to add team members and assign roles.
  • Packages that you subscribe to through mod.io are not directly editable, and automatic updates would overwrite changes of the other when mod.io updates the package. No team member who edits the package should subscribe to it. Instead, you’ll need to share the files in another manner, for example by downloading the zip files from the mod.io page. Unzip the file into a new folder your package directory (configurable in the game settings). It will appear in the editor and you will be able to upload new versions if you are part of the team as described above.
  • Coordination can become difficult when multiple people are working on the same files. Consider using Git to help (together with GitHub, for example). It works well for scripts and template files, but for save states and resource files like textures and models, you’ll still need to make sure that only one team member works on the same file at the same time.

Playtesting

You may also want to do playtesting sessions without making the package publicly available. You can upload your package to mod.io privately – no one else will be able too see it. In order to play with others, you have different options to allow them to subscribe to your game, see the article on Playtesting.

Saving and loading

There are some things to consider when you want to keep data in your scripts in order to stay compatible with loading save states (which also happens when using undo/redo). Whenever a save state is loaded, the entire scripting environment gets reset and all scripts are run again.

If you have any variables that may change over the course of playing the game, they will disappear when loading, and may be be re-initialized when your scripts run again. If you want to persist your variables, you need to use the setSavedData and getSavedData methods in GameWorld and GameObject.

These methods allow you to save a string for each object and for the whole game. The strings are stored in the save state, and you can retrieve them again after a state was loaded. The usual pattern would be calling setSavedData whenever your state changes to make sure that whenever the game is saved, the string contains the latest information. Then, you call getSavedData when you initialize your variables, check if saved data exists, and update your variables accordingly.

You can find a simple example of using saved data in the hit point counter in the UI tutorial. If you need to store multiple values, a convenient way is using JSON.stringify and JSON.parse to convert objects into strings. The advanced UI tutorial has an example for how this can be done.

The saved data needs to be sent across the network to all players. Even though scripts only run on the host, every player can save the current game state and load it later in a new game as host. In order to keep network traffic low and the gameplay smooth, try to minimize the size of your saved data strings, and only modify them when necessary.

Teams

Players on the same team can see the cards in each other’s card holders and interact with them. They can also see the cards that their teammates are holding.

Teams are set by the host in the session options. There are 8 possible teams and each player slot can be set to one of them (or no team). So teams are not associated directly to the players in the game, but to slots in the same way as player colors are. This allows you to already set up teams when creating a starting state for a game, without any players present. When a player switches their player slot/color, they will also switch to the team of that slot.

Team settings

Zones

Zones allow you to change behavior in restricted areas of the playing area. Each zone behavior can be set to affect everyone, nobody, or only owners of the zone. You can set any player color to be an owner, and zones can have multiple owners.

Zones can be used for many different purposes, combined with scripting and without. For example, when playing an RPG, you can define a zone that is owned by the dungeon master. It can hide objects and the owner’s cursor from everyone but the owner. In a game like Monopoly, you could define a zone that disables interaction with the “bank” objects for most players, or even for everyone if interactions are handled through scripting.

The available behavior switches for zones are:

  • Object Visibility: Objects in the zone can be hidden. Hidden objects still behave the same as visible objects, so they will interact with each other and with objects that enter the zone. If set to owners only, objects are hidden for all players except the owners.
  • Cursor Hidden: Player cursors in the zone can be hidden from other players. Every player can always see their own cursor. If set to owners only, the cursors of the owners are hidden from other players, but other cursors remain visible for everyone.
  • Interaction: Objects in the zone can’t be interacted with, but they remain visible.
  • Snapping: All snap points within the zone can be deactivated.
  • Stacking: Adding cards to stacks within the zone can be disabled.
  • Inserting: Inserting objects into containers within the zone can be disabled.

To create or edit zones, you need to enable zone mode by switching the cursor mode in the player options, or pressing the zone mode key (“U” by default). You can then create new zones by clicking and dragging. When you click on an existing zone, the coordinates window opens and a gizmo appears. This allows you to position the zone exactly where you want it.

When you right click on a zone, you get a context menu with more options: in the properties window you can select what shape and what color the zone should have. If scripting is enabled, you can also find and set the unique id of the zone here. In the behavior window, you can set which player colors are owners of the zone, and you can switch the behaviors described above.

When you create a new zone, it will have all the properties from the last zone you edited, which helps when you want to create several similar zones.