Tabletop Simulator (TTS) is a video game that lets people play numerous board games on a virtual table with friends over the internet. It also allows people to create virtual board games.

When creating a board game in TTS, all of the “assets” for their custom components (images, 3D models, and so on) need to be hosted online. Most people use free hosting services like Imgur to store these assets, and use the urls to those files in their game.

This works fine until they want to make any changes to the files themselves.

When they upload the new version a new url is generated. This means they either have to recreate those components within their game, or fiddle around with their game’s “.json” file to change them all themselves.

Which kinda sucks.

Especially while you’re prototyping your game, making frequent changes to stats and text and format, and adding new cards and so on.

I’ve been playing with TTS for prototyping and, being the pragmatic programmer-y type that I am, have figured out a nice little workflow.

I’ll be talking pretty exclusively about creating custom cards in this post, but the principles should be identical for any other kind of custom component. I also go through the process of prototyping a game, but if you’re recreating a game in TTS a lot of ideas should still work for you.

Local/Offline Hosting

When you’re first putting together your game, testing it locally without other players, you don’t even need to host! There’s a special folder you can use to put all of your images and still load them into the game like usual. On Windows at least, this is found in Documents > My Games > Tabletop Simulator > Mods > Images. (You can find the path for your system by looking on the game’s knowledgebase.)

This folder keeps all of the images used by any game you ever access, so there may be a ton of files in there already. All you need to do is copy in the image you want to use. For Custom Decks, this would be the card sheet images.

First change its name to something easily identifiable. I simply add an underscore at the start so that it pops up at the top of the folder (when sorting the files by name). In general, as long as it doesn’t start with “http” the file shouldn’t get overwritten by TTS.

Then drag it into the folder and make your deck!

In the Custom Deck menu, there are a number of options. There are a couple I’d like to talk about.

First is the Width and Height sliders. This dictates how many cards across and how many down there are in your card sheet image. It uses these numbers to figure out where to “cut” that image to make the cards themselves.

So say you’ve got 10 cards in your game. You could lay them out in a 4 x 3 grid in your image. Then you’d set Width to 4 and Height to 3. (Note that the last card in the bottom-right of the image will be used as the “hidden” side, for when other players aren’t allowed to see the face of your card.)

And then there’s the Face and Back URLs. Here, you normally paste the urls for those hosted images. But as we’re using those local/offline files, we can just use their filenames. So if you called your face card sheet “_Face Card Sheet.png,” you can just type “_Face Card Sheet.png” into the Face text box. Same goes for the Back text box.

Change Number to 10, fill in the rest of your settings, hit Import, and watch your beautiful new deck load in! Congratulations!

And because you can change your image directly, you can easily make changes to it. All you need to do is save your game, overwrite the image in the TTS Mods folder, and reload the game. The new image will be loaded when the cards are made within your game, which means any changes will be reflected in TTS!



This would be a pretty efficient way of doing things. You can have fewer cards at a higher resolution and make your game look nice and pretty. And the ease of updating the cards speeds up development of your board game considerably.

But we can do better.

Minimum effort, maximum return

The problem with this method is that once it’s imported, you’re tied to having that many cards in your game. (You can import multiple decks, but it just takes more time to update multiple files than it does to update one big file with everything in.) When you’re prototyping you don’t just edit the existing cards; you add new ones.

Here’s what I recommend in those early playtesting days. Width 10, Height 7, Number 69. These are the maximum settings for any deck. Now, as the recommended size for a deck sheet image is 4096 x 4096, so if you follow that guideline each card would only be as big as 409 x 585 in size. This is a lower resolution than if you had fewer cards and used the space more efficiently, so your cards may become a tad blurry when zooming in. But bear with me…

After changing your card sheet to be 10 x 7, Import your deck with those maximum settings. You’ll have a load of blank cards at the bottom of your new deck. Don’t worry; that’s intentional. Don’t remove them just yet.

Now make a copy of that entire deck. (Don’t paste it on top of the old one; just put it somewhere else.) Add a bag onto the table (Chest > Tools > Bag) and drag one of those decks into it for safekeeping, and put that bag to one side.

Now you can go and delete all the blank cards you don’t need from the remaining deck on the table. An easy way of doing this would be to hover over the deck and hit “99″ on your keyboard to draw up to 99 cards from the deck (all of them in this case). You can now easily drag a box around the blank cards and hit “Delete.” Then drag a box around the other cards and hit “G” to group them into a deck again. Job done!

But why are we going through all this?

The idea is to waste none of your card slots. If you need to add a card to the deck, just add that card to your card sheet, overwrite the local image with the new version, and reload your game. If you drag your “backup” deck out of the bag, one of those blank cards will now show the card you added. You can just Right-click > Search the back-up deck, drag out the new card, copy it into your “testing” deck, and put it back.

Normally you’d need to re-import the whole deck and sort it all out again, splitting it up, moving it around, whatever you need to do to set up your game. But using this method, you can a) make changes to the existing cards and they’ll stay in the right places for when you want to playtest next, and b) add cards super-easily.

What you lose in image quality on the cards you gain in speed of tweaking your board game prototype! It makes early prototyping and testing almost as easy as paper and pencil tweaking IRL, but you don’t have to go through the hours of work it takes to get that first prototyping up and running. (More on that soon!)

Once you’re ready to playtest with other players, you can still upload the card sheet images and import as you would normally. But there are ways of making this process easier, too. Tune in next time to fine out more! ^^