What’s New

Tabletop Simulator

Games

Tabletop Simulator is the only simulator where you can let your aggression out by flipping the table!

Latest · by Berserk GamesWebsite

Changelog

Update v14.2 - Updated Steam P2P Networking & Engine Update

Update v14.2 continues our networking overhaul as highlighted in the Tabletop Simulator 2.0 roadmap, bringing you more stable, secure and reliable networking and connectivity in addition to an engine upgrade to Unity 6.3 LTS.


New Steam Networking (Full Migration)

We've retired the legacy Steam P2P system and fully migrated to the new Steam Networking APIs across all multiplayer code paths.

What this means for you:

  • More reliable connections and fewer weird edge-case disconnects

  • Improved NAT traversal for smoother hosting/joining

  • More consistent latency behavior without changing how multiplayer fundamentally works

  • Better privacy & security: Connections are routed through Steam relays (no direct IP exposure) and all traffic is now encrypted

Engine Update to Unity 6.3.10 LTS

We recently upgraded to Unity 6.0 LTS, with this update bringing Tabletop Simulator to the latest and most modern Unity version release. This is preparation for the upcoming UX overhaul, UI Toolkit in 3D world space and all the latest features and performance improvements that Unity has to offer.

This update changes the minimum requirement for MacOS users to version 12 or higher.


Behind-the-Scenes
Project & Infrastructure Cleanup

This update also includes a large internal cleanup pass:

  • Codebase cleanup & reorganization

  • Infrastructure upgrades, including our Perforce server

While you won’t see these changes directly in-game, they will speed up development and help us move through the roadmap quicker and more efficiently.


Scripting
MoonSharp Update
  • MoonSharp has been updated to a newer version with many miscellaneous fixes. It addresses json.encode\decode issues with negative numbers and other bugs. [#968]

  • We've added stack traces! When Lua errors occur you should see detailed information on the functions that were in progress when the error happened.

Utility
  • The lua console command now prints results, no more endless lua log(...) when testing!

Hotseat Overhaul

Revamped the Hotseat mode so it should function the same as online players by using a new virtual network player system. This should fix all the misc hotseat bugs and issues, giving you a more reliable way to test your mods or play locally, and now remembers last tool selected for each hotseat player.


Rolling Improvements
  • Added a minimum spin amount when rolling dice and coins via Randomize

  • Fixed frame-dependent spin variance when rolling dice and coins with Randomize


Fixes
  • Fixed a networking issue where packets that were exactly a multiple of 1 MB could break in transit

  • Fixed objects not returning to an Infinite Bag after changing states [#1176]

  • Fixed an issue where clients could not start looping/triggered effects [#2948]

  • ** Fixed issues with uppercase file extensions for PDF/Text/Audio [#2459]

  • [Linux / Wayland] File browser no longer causes a segfault in some cases [#1451]

  • File browser falls back to the built-in one if the OS browser fails to load

  • Fixed objects teleport and falling over and over again for clients on a table flip.

  • Fixed hidden zones not being editable for people with permissions to change them. [#2941]

Update v14.1 - Network Security Overhaul

It's been a week since we announced the Tabletop Simulator 2.0 Roadmap and we're hitting the ground running with with Part 1 of our Network Security Overhaul.

We know there have been questions and concerns raised by the community following the roadmap announcement. Please know that we are listening and have more information to address your feedback in a more direct manner coming soon.

For now our primary focus is action and getting tangible changes rolled out. This release centers on network hardening — a major re-write of our internal networking implementation to patch critical exploits and prevent malicious users from tampering with the game.

While this update stabilizes our current infrastructure we are working on Part 2 of the overhaul - Migrating the game to use the new Steam Networking API.

Alongside the security hardening we have made sure to issue game bans the users who were abusing the exploits by attacking servers and the server browser.

Thank you to everyone who participated in the Public Betas to help us test these critical infrastructure changes!

Network Hardening & Security
  • Major Network Stack Rewrite: Overhauled the networking system to greatly improve security and stability.

  • Exploit Fixes: Patched multiple exploits, including potential "while loop" crashes caused by malicious packets.

  • RPC & Sync Validation: Added new validation checks to block malicious users (who are not registered correctly) from sending invalid Remote Procedure Calls (RPCs) or Syncs.

  • Packet Routing: Fixed issues where packets were still being routed to clients even if the call was invalid.

  • Traffic Limiting: Network calls are now strictly limited to specific destinations (Server or Client) to prevent unauthorized cross-communication.

  • P2P Logging: Added system logging messages when connecting via P2P. This will now display the Steam ID of users you connect to, allowing for easier reporting or blocking of malicious users.

  • Cross-Platform ID: Internal network IDs are now more robust, reducing connection issues between different platforms.

Search Revamp
  • System Overhaul: The Search system has been revamped to work much better and with the improved network security standards.

  • Hotseat Fix: Fixed an issue where Search was not working correctly in Hotseat mode.

  • Order Alerts: Added a chat notification when a player changes the order of a deck or bag in the search menu.

General Fixes & Improvements
  • Pastebin: Fixed the Pastebin URL converter to correctly handle both http and https links.

  • Host Migration: Updated host migration to provide clearer notifications to players about what is happening during the process.

Public Beta Fixes
  • Music Player: Fixed a network issue regarding the "ready check" when clients first connect to a game with active music.

  • Player Colors:

  • Fixed "player color change" messages not working correctly for clients.

  • Fixed an issue where choosing the color 'Grey' was not notifying the chat.

  • Physics Settings: Fixed an issue where physics settings were not editable by non-admins.

  • RPC Duplication: Fixed an issue where clients were doubling up on RPCs, causing duplications in actions (e.g., measuring movement).

  • Chat Blocking: Fixed an issue where chat messages were not being correctly blocked by Lua on client-side scripts.

Hotfixes

v14.1.5 Hotfix 1

  • Fixed search not working for old decks with GUIDs that weren't unique for each card.

  • Fixed the orientation of objects in search menu when there is a custom alt zoom rotation set on them.

  • Fixed issues in hotseat with draw, search, etc not working if not player 1.

  • Fixed peek indicator not being removed when clients stop peeking an object.

  • Fixed peek indicator issues when sharing your hand with other players.

v14.1.5 Hotfix 2

  • Made initial network connection process slightly more reliable.

  • Small network optimization by reducing network traffic by 1 packet per second per client.

  • Fixed search not working in hotseat for everyone but player 1. (FOR REAL)

  • Fixed search not working for old bags with GUIDs that collided by checking for collisions and fixing them on the object.

Hotfix v14.1.6

  • Fixed issue with Combined objects not displaying correctly for clients when they are children of children.

  • No longer do we force unique guids on decks or bags for search, because it can cause issues with mods expecting old behavior.

Hotfix v14.1.7

  • Bag is now searchable like decks with only searching the first few number of objects contained.

  • Better network security for old Lua UI.

  • Fixed legacy Lua Input not syncing correctly for the host.

  • Fixed notepad not syncing for clients.

  • Fixed issue with combined objects glitching out when cloning them.

  • Fixed issue with player.showOptionsDialog() not syncing correctly.

Hotfix v14.1.8

  • Fix major networking issue causing players to be kicked from a server when the number of players increased.

  • Fixed search reorder message always happening on decks and bags with cloned objects contained in them.

  • Fixed issue with legacy Lua input not sending select false events.

v14.1.8 Hotfix 1

  • Fixed broken table flip!

  • Improved error reporting when a blocked player connects to a host.

  • Blocked, banned, or not friend players will no longer notify for a game invite.

  • Now reports the SteamID of the player that is inviting you.


We want to extend a huge thank you to our community for your continued support and feedback. All ofWe want to extend a huge thank you to our community for your continued support and feedback. All of us at Berserk Games are incredibly excited to tackle the challenges ahead and bring the rest of the roadmap to life!

Update 14.0 - Engine Upgrade, Feature Additions & Performance Improvements

Tabletop Simulator v14.0 - Engine Upgrade, Feature Additions & Performance Improvements!

A quick note from the team: We know it’s been a long time since the last big update. Behind the scenes we’ve been doing a lot of groundwork on the engine and tools, and this patch is the first step to a renewed focus on regular updates and improvements to TTS. Thank you for your patience and for sticking with us ❤️

Thanks to everyone who tried out this update in the public beta—your feedback was invaluable in helping us make it as good as it is. A lot of the new features and fixes came directly from what you shared with us.

Read First (Important Changes)
  • New minimum OS / platform requirements:

  • Windows: 64-bit Windows 10 21H1+ (Windows 11 supported)

  • macOS: 11 Big Sur+

  • Linux: Ubuntu 22.04 / 24.04 (64-bit)

  • Win 32-bit builds are no longer supported.

  • Keybind behavior changed: keybinds now use physical key location instead of character (better across keyboard layouts). Keybinds have been reset due to this change.

  • Image pipeline update: your RAW image cache will be cleared with this update due to image pipeline changes and new translucency support.

  • Voice chat: if you are the host and disable voice chat, it disables voice chat for all players.

Gameplay, rules, and your saves are unchanged. This is primarily an engine + quality-of-life update.

Summary
  • Engine & platform

  • Engine upgrade to Unity 6 LTS for smoother performance, better stability, and faster loading in many cases. Over 5 years of engine improvements!

  • Native Apple Silicon support on macOS with a universal app (Apple Silicon + Intel), using Metal by default on Apple Silicon.

  • The game executable is now code signed, improving trust with Windows and reducing false positives with antivirus.

  • Rendering & mod assets

  • New Vulkan graphics API option on Windows & Linux (experimental) for potentially better performance in heavy scenes.

  • New rendering & image upgrades: higher quality PCSS shadows, optional image translucency, and WebP image support for more efficient mods.

  • Quality of life

  • Camera movement improvements, deal from bottom of deck, keyboard layout–friendly keybind behavior, turns system improvements, controller pointer smoothing, music player overhaul, notepad improvements, grid tools, erase-all controls, Cloud Manager upgrades, and new console options.

  • Lua / creators

  • Lua upgrades including a new turn-order API, improved deck dealing controls (including “deal from bottom”), putObject index support, plus stability fixes for scripting and drafting/hand selection workflows.


Engine, Platform & Security
  • Updated TTS to Unity 6 LTS.

  • Updated all plugins to their latest compatible versions.

  • The game executable is now code signed, improving trust with Windows and reducing false positives with antivirus.

New OS / Platform Requirements
  • Windows

  • 64-bit only.

  • Minimum: Windows 10 version 21H1 (build 19043) or newer.

  • Windows 11 fully supported.

  • macOS

  • Minimum: macOS 11 Big Sur or newer.

  • Ships as a universal app that runs on both Intel and Apple Silicon (M-series).

  • On Apple Silicon, TTS runs natively (no Rosetta required).

  • Linux

  • Officially supported/tested: Ubuntu 22.04 / 24.04, 64-bit.

  • Wayland and X11 supported (behavior may vary by distro/driver).

If you're on an older OS than the above, TTS may not launch after this update. Please update your system.

Graphics APIs
  • macOS (Apple Silicon)

  • Metal is now the default graphics API when running on Apple Silicon.

  • If you're not on Apple Silicon, the game uses OpenGLCore by default.

  • Windows & Linux

  • Added Vulkan as a new experimental graphics API.

  • In very demanding scenes, Vulkan can offer better performance on supported hardware.

  • If you hit visual glitches or stability problems, switch back to the default renderer.

Security
  • Includes the latest Unity 6 security fixes, addressing known file-loading vulnerabilities in older engine versions.

  • Combined with code signing, this should reduce security prompts and exploit risk.


General & Performance
  • Greatly increased snappiness of WASD camera movement with less "floaty" gravity.

  • Keybinds now use physical key location instead of character, so bindings line up across different keyboard layouts.

  • Turn order UI now updates dynamically in the top-right player list whenever turn order changes.

  • Controller input for moving pointers should now feel slightly smoother.

  • Greatly optimized network serialization on CPU via more efficient bitpacking.

  • Image loading improvements

  • Loading new (uncached) images is now more performant.

  • Improved image quality in many cases.

  • Reduced likelihood of crashes when large or many new images are being loaded.

  • Added support for WebP images, a more efficient image format than JPG or PNG. (Feedback #2273)

  • Voice chat improvements:

  • Disabling voice chat in the configuration menu properly stops all voice chat processes.

  • This can fix audio issues with some Bluetooth headsets.

  • If you are the host and disable voice chat, it disables voice chat for all players.

  • Added an error message when trying to use voice chat when it isn't connected.

  • UI theme can now automatically follow your system theme if none is manually selected.

Rendering Options
  • Added a higher quality shadow setting PCSS, which gives more realistic shadows and blurs based on distance.

  • Added a new console command Translucency that allows images to support partial translucency (EXPERIMENTAL, please send us feedback on this!).

Connectivity & Session Safety
  • Added a popup when disconnecting while players are still connected to offer them host migration. (Feedback #2663)

Note: Your RAW image cache will be cleared with this update due to image pipeline changes and new translucency support.


Music Player
  • Added search filter for playlists. (Feedback #2143)

  • Added Clear Playlist button.

  • Added Export Playlist and Import Playlist

  • Save your current playlist to a file.

  • Add a playlist file into your current playlist.

  • Added Upload Music Folder

  • Select a folder and upload all songs in it at once, with naming.

  • TTS will now suggest a name for a song when you provide a URL or file.

  • Fix: Music player no longer breaks when loading a new mod. (Feedback #2038)

  • Fix: Music events no longer break when a song ends with no playlist active.

  • Fix: Music player no longer resets when loading a save file with no music saved on it.


Notepad (On-Screen Notes)
  • On-screen notes region is now resizable.

  • New notepad settings for:

  • Font

  • Font size

  • Text justification

  • New console commands:

  • ui_notepad_edit

  • ui_notepad_left_align

  • ui_notepad_locked

  • ui_notepad_fixed_width_font

  • ui_notepad_font_size

  • ui_notepad_size

  • ui_notepad_text


Grid
  • While Grid settings are open, the grid now renders on top of everything, making adjustments easier.

  • Controlled via ui_grid_highlight_when_editing (console / Misc setting).

  • New anchor & gizmo mode

  • Click the Gizmo button in the Grid window.

  • Select a component to center the grid on it.

  • Ctrl+click a second component to size the grid appropriately (using your snap settings). (Feedback #1871)

  • Added measure_grid_multiplier command.


Erase All
  • Applies to drawn lines, text, and decals.

  • Non-promoted players

  • "Erase all" now only erases their own drawings/decals. (Feedback #1841)

  • Promoted players

  • Can erase everything

  • Can erase just their own

  • Can erase all content from a specific player


Cloud Manager
  • Cloud folder dropdown now has a "Select Folder" button that opens the Cloud Manager folder browser. (Feedback #711)

  • Starred folders

  • Folders can now be Starred (button next to folder name).

  • Starred folders show first in the folder browser dropdown. (Feedback #711)

  • Cloud search now restricts results to the current folder. (Feedback #1839)

  • Fix: Resolved several file browser issues and cleaned up its underlying code to improve stability.


Dealing: Deal From Bottom
  • Holding ALT while dealing or drawing from a deck will now take the card from the bottom of the deck. (Feedback #2680)

  • The deck will do a small “hop” animation to make it clear when this happens.

  • Works both with the number keys and the GUI.

  • Dealing hand objects will now correctly deal to your new hand if you change the table.


Misc Features
  • Custom Figurine

  • Added toggle to use a minimal collider on the card part. (Feedback #1929)

  • Added option to mirror the back texture. (Feedback #2107)

  • Added Reset Scale to an object's scale context menu. (Feedback #2078)

  • Hotseat player names are now remembered between sessions. (Feedback #2070)

  • Added vr_floor command / VR setting

  • Lets you turn off the floor independently of fog / "Floor Of Mist". (Feedback #2173)

  • Server browser improvements

  • Player names now show in the server browser.

  • Your name is hidden if you are offline, invisible, or you untick the "Show Name In Server Browser" option.


Console Commands

New/updated commands:

  • component_hotkey_state_change

  • When enabled, press number keys while hovering an object to change its State.

  • Appears in Misc Settings.

  • ui_notebook

  • Shows the Notebook window.

  • text_tool_default_font_size

  • Sets default size for the Text tool. (Feedback #2000)

  • autorun_lua

  • Controls whether Lua automatically runs when updated.

  • camera_reset_on_color_change

  • Controls whether the camera automatically moves to your seat when you change color. (Feedback #256)

  • show_name_in_server_browser

  • Controls whether your name is listed in the server browser for public servers you join.

  • measure_grid_multiplier

  • Applies a scale multiplier when the line measure tool is in Grid mode.

Fixes:

  • Fixed help command not working on commands that have no arguments.

  • Removed old console commands related to global chat. (Feedback #2117)


Open Beta Fixes
  • Fixed a major networking issue where loading a save file could break the game state. (Feedback #2641)

  • Fixed rewinds and autosaves not working correctly. (Feedback #2656)

  • Fixed an issue where XML UI could be blocked by incorrect objects, including the invisible floor at y = 1. (Feedback #2647)

  • Fixed a 64-depth issue when downloading and loading mods. (Feedback #2640)

  • Fixed hand selection working incorrectly with the new Lua drafting mechanic.

  • Fixed an issue where you could erase your drawn lines incorrectly. (Feedback #2702)

  • Fixed several HandSelectMode issues. (Feedback #2618)

  • Fixed a bug in Lua Wait.collect. (Feedback #2635)


Fixes
  • Fixed an issue where XML UI would not be blocked by objects when it should.

  • Fixed XML UI not hiding in hidden zones. (Feedback #2673)

  • Fixed partial transparency when importing UI and decal images for the first time.

  • Fixed advancing the turn immediately after loading a game always going to the first player instead of the second.

  • Fixed a macOS issue where text could be entered while the Cmd modifier key was held. (Feedback #2636)

  • Fixed infinite bags visually breaking after Undo or Reload. (Feedback #2665)

  • Fixed drop indicator not showing color when dropping with Alt + Right Click for decks and stacks.

  • Fixed grid size inputs not allowing you to type a . at the end.

  • Fixed onLoad not executing in Hot Seat Mode. (Feedback #2629)

  • Fixed RPG tileset snapping preview so it now displays correctly.

  • Fixed Flick and Combine sometimes requiring a double click when you are a client.

  • Fixed right click while drawing a line not canceling for everyone else. (Feedback #125)


Misc Fixes
  • You can now obtain the "Be Social" achievement using in-game chat. (Feedback #1895)

  • Fixed game crashing when trying to load a CMYK JPG.

  • Fixed line tool not converting to cm in component mode. (Feedback #1934)

  • Fixed "Showing Hand" button displaying incorrect color after seat swap.

  • Fixed on-screen hand blocking in-game UI. (Feedback #1757)

  • Fixed hotseat turn not being set to correct player on load. (Feedback #1960)

  • Fixed hotseat players being unable to drop cards in searched deck. (Feedback #1959)

  • Fixed hotseat turn incorrectly resetting when loading a Classic game.

  • When starting a hotseat game, the game now only picks larger tables, so all player colors are immediately selectable.

  • Fixed context menu not clamping to screen. (Feedback #1966)

  • Fixed context menu appearing in the wrong position when right-clicking a card in hand. (Feedback #2051)

  • Fixed unintuitive Text Tool placement behavior.

  • Fixed appearance of custom card aspect ratios when searching containers. (Feedback #2021)

  • Fixed cards merging incorrectly with a deck when the deck is on a snap point. (Feedback #2063)

  • Fixed left edge of search dialog not having a collider. (Feedback #2077)

  • Fixed Japanese language name in language select. (Feedback #2116)

  • Fixed shake detector triggering when the user spams Tap.

  • Fixed Random Domino/Card/Mahjong Tile not generating every possible object. (Feedback #2160, #2154

Tabletop Simulator v14.0 Public Beta — Engine Upgrade (Unity 6 LTS)

Tabletop Simulator v14.0 Public Beta — Engine Upgrade (Unity 6 LTS)

_A quick note from the team: _We know it’s been a long time since the last big update. Behind the scenes we’ve been doing a lot of groundwork on the engine and tools, and this patch is the first step to a renewed focus on regular updates and improvements to TTS. Thank you for your patience and for sticking with us ❤️

Public Beta (Steam)

This is a huge engine and platform update, so we’re rolling it out as a public beta first to shake out any remaining issues before it goes live for everyone.

How to opt into the public beta on Steam
  • Open your Steam Library.

  • Right-click Tabletop SimulatorProperties…

  • Go to the Betas tab.

  • Select the public beta branch for the Unity 6 update from the dropdown.

  • Close the window and let Steam download the update.

You can switch back to the live version at any time by setting the beta dropdown back to “None”.

Give feedback

Please report bugs and suggestions on our Nolt board 👉 https://feedback.tabletopsimulator.com/

Include your OS, GPU, and logs (see Troubleshooting & Logs below) when reporting issues. It helps a lot.

Please use the "Public Beta" tag for feedback to do with this patch.


Windows: 64-bit Windows 10 21H1+ (Windows 11 supported) macOS: 11 Big Sur+ Linux: Ubuntu 22.04/24.04 (64-bit)

Summary
  • Engine upgrade to Unity 6 LTS: smoother performance, better stability, and faster loading in many cases.

  • Native Apple Silicon support on macOS with a universal app that runs on both Apple Silicon and Intel, using Metal by default on Apple Silicon.

  • New Vulkan graphics API option on Windows & Linux (experimental) for potentially better performance in heavy scenes.

  • New minimum system requirements:

  • Windows: 64-bit Windows 10 21H1+ (Windows 11 supported)

  • macOS: 11 Big Sur+

  • Linux: Ubuntu 22.04/24.04 (64-bit)

  • Win 32-bit builds are no longer supported.

  • Game & plugins updated to latest versions and now code-signed for fewer antivirus/security issues.

  • Big quality-of-life upgrades: camera movement, keybind behavior, music player overhaul, notepad improvements, grid tools, erase-all controls, Cloud Manager upgrades, new console options.

  • New Lua tools for drafting, hand selection, hand “stash” areas, rewind control, and more scripting power.

Gameplay, rules, and your saves are unchanged. This is primarily an engine and quality-of-life update.


Engine, Platform & Security
  • Updated TTS to Unity 6 LTS.

  • Updated all plugins to their latest compatible versions.

  • The game executable is now code signed, improving trust with Windows and reducing false positives with antivirus.

New OS / Platform Requirements
  • Windows

  • 64-bit only.

  • Minimum: Windows 10 version 21H1 (build 19043) or newer.

  • Windows 11 fully supported.

  • macOS

  • Minimum: macOS 11 Big Sur or newer.

  • Now ships as a universal app that runs on both Intel and Apple Silicon (M-series).

  • On Apple Silicon, TTS now runs natively (no Rosetta required).

  • Linux

  • Supported: Ubuntu 22.04 / 24.04, 64-bit.

  • Wayland and X11 supported (behavior may vary by distro/driver).

If you’re on an older OS than the above, TTS may not launch after this update. Please update your system.

Graphics APIs
  • macOS (Apple Silicon):

  • Metal is now the default graphics API when running on Apple Silicon.

  • If you’re not on Apple Silicon, the game uses OpenGLCore by default.

  • Windows & Linux:

  • Added Vulkan as a new experimental graphics API.

  • In very demanding scenes, Vulkan can offer better performance on supported hardware.

  • Because Vulkan is still experimental, if you hit visual glitches or stability problems, switch back to the default renderer.

Security
  • Includes the latest Unity 6 security fixes, addressing known file-loading vulnerabilities in older engine versions.

  • Combined with code signing, this should reduce security prompts and exploit risk.


General & Performance
  • Greatly increased snappiness of WASD camera movement with less “floaty” gravity.

  • Keybinds now use physical key location instead of character, so bindings line up across different keyboard layouts.

  • Voice chat improvements:

  • Disabling voice chat in the configuration menu properly stops all voice chat processes.

  • This can fix audio issues with some Bluetooth headsets.

  • If you are the host and disable voice chat, it disables voice chat for all players.

  • Added an error message when trying to use voice chat when it isn’t connected.

  • UI theme can now automatically follow your system theme if none is manually selected.

  • Greatly optimized network serialization on CPU via more efficient bitpacking.

  • Image loading improvements:

  • Loading new (uncached) images is now more performant.

  • Improved image quality in many cases.

  • Reduced likelihood of crashes when large or many new images are being loaded.


VR (Beta Note)
  • In the current public beta, post-processing is not active in VR. This means effects like LUT-based color grading and other post-processing visuals do not work in VR yet. We’re planning to restore this in a future update.

Music Player
  • Added search filter for playlists. (Nolt #2143)

  • Added Clear Playlist button.

  • Added Export Playlist and Import Playlist:

  • Save your current playlist to a file.

  • Add a playlist file into your current playlist.

  • Added Upload Music Folder:

  • Select a folder and upload all songs in it at once, with naming.

  • TTS will now suggest a name for a song when you provide a URL or file.

  • Fix: Music player no longer breaks when loading a new mod. (Nolt #2038)

  • Fix: Music events no longer break when a song ends with no playlist active.

  • Fix: Music player no longer resets when loading a save file with no music saved on it.


Notepad (On-Screen Notes)
  • On-screen notes region is now resizable.

  • New notepad settings for:

  • Font

  • Font size

  • Text justification

  • New console commands:

  • ui_notepad_edit

  • ui_notepad_left_align

  • ui_notepad_locked

  • ui_notepad_fixed_width_font

  • ui_notepad_font_size

  • ui_notepad_size

  • ui_notepad_text


Grid
  • While Grid settings are open, the grid now renders on top of everything, making adjustments easier.

  • Controlled via ui_grid_highlight_when_editting (console / Misc setting).

  • New anchor & gizmo mode:

  • Click the Gizmo button in the Grid window.

  • Select a component to center the grid on it.

  • Ctrl+click a second component to size the grid appropriately (using your snap settings). (Nolt #1871)


Erase All
  • Applies to drawn lines, text, and decals.

  • Non-promoted players:

  • “Erase all” now only erases their own drawings/decals. (Nolt #1841)

  • Promoted players:

  • Can erase everything.

  • Can erase just their own.

  • Can erase all content from a specific player.


Cloud Manager
  • Cloud folder dropdown now has a “Select Folder” button that opens the Cloud Manager folder browser. (Nolt #711)

  • Starred folders:

  • Folders can now be Starred (button next to folder name).

  • Starred folders show first in the folder browser dropdown. (Nolt #711)

  • Cloud search now restricts results to the current folder. (Nolt #1839)

  • Fix: Resolved several file browser issues and cleaned up its underlying code to improve stability.


Misc Features
  • Custom Figurine:

  • Added toggle to use a minimal collider on the card part. (Nolt #1929)

  • Added option to mirror the back texture. (Nolt #2107)

  • Added Reset Scale to an object’s scale context menu. (Nolt #2078)

  • Hotseat player names are now remembered between sessions. (Nolt #2070)

  • Added vr_floor command / VR setting:

  • Lets you turn off the floor independently of fog / “Floor Of Mist”. (Nolt #2173)

  • Server browser improvements:

  • Player names now show in the server browser.

  • Your name is hidden if you are offline, invisible, or you untick the “Show Name In Server Browser” option.

(The previously mentioned standalone external server browser tool has been removed and is no longer part of this update.)


Console Commands

New/updated commands:

  • component_hotkey_state_change

  • When enabled, press number keys while hovering an object to change its State.

  • Appears in Misc Settings.

  • ui_notebook

  • Shows the Notebook window.

  • text_tool_default_font_size

  • Sets default size for the Text tool. (Nolt #2000)

  • autorun_lua

  • Controls whether Lua automatically runs when updated.

  • camera_reset_on_color_change

  • Controls whether the camera automatically moves to your seat when you change color. (Nolt #256)

  • show_name_in_server_browser

  • Controls whether your name is listed in the server browser for public servers you join.

Fixes:

  • Fixed help command not working on commands that have no arguments.

  • Removed old console commands related to global chat. (Nolt #2117)


Misc Fixes
  • You can now obtain the “Be Social” achievement using in-game chat. (Nolt #1895)

  • Fixed game crashing when trying to load a CMYK JPG.

  • Fixed line tool not converting to cm in component mode. (Nolt #1934)

  • Fixed “Showing Hand” button displaying incorrect color after seat swap.

  • Fixed on-screen hand blocking in-game UI. (Nolt #1757)

  • Fixed hotseat turn not being set to correct player on load. (Nolt #1960)

  • Fixed hotseat players being unable to drop cards in searched deck. (Nolt #1959)

  • Fixed hotseat turn incorrectly resetting when loading a Classic game.

  • When starting a hotseat game, the game now only picks larger tables, so all player colors are immediately selectable.

  • Fixed context menu not clamping to screen. (Nolt #1966)

  • Fixed context menu appearing in the wrong position when right-clicking a card in hand. (Nolt #2051)

  • Fixed unintuitive Text Tool placement behavior.

  • Fixed appearance of custom card aspect ratios when searching containers. (Nolt #2021)

  • Fixed cards merging incorrectly with a deck when the deck is on a snap point. (Nolt #2063)

  • Fixed left edge of search dialog not having a collider. (Nolt #2077)

  • Fixed Japanese language name in language select. (Nolt #2116)

  • Fixed shake detector triggering when the user spams Tap.

  • Fixed Random Domino/Card/Mahjong Tile not generating every possible object. (Nolt #2160, #2154)

  • Fixed rewind/forward (rwd/fwd) not working correctly. (Nolt #2161)

  • Fixed game breaking on first launch but working on subsequent launches.

  • Fixed cards getting cut off onscreen when scaling very large hands.

  • Fixed deleting a folder in Cloud Manager not deleting all contained files.

  • Fixed issues when uploading PDF files via “Upload All” in the Cloud Manager.

  • Fixed a bug where objects with multiple assets (primary/secondary AssetBundles) could think they finished loading too early, breaking on-screen hands, highlighting, and Lua load completion.

  • Fixed dice behavior when picking up and dropping instantly, so dice now roll correctly in that scenario.

  • Fixed VR floor setting being inverted for the vr_floor option.


Lua

New Lua functions and features for creators:

Object State Changes
  • Added tryObjectStateChange(object, new_state_index, player_label) and object.tryStateChange(new_state_index, player_label). (Nolt #1822)

These are called whenever a user uses the state change action on an object — even if the object doesn’t actually have extra states. That means:

  • You can hook into the “state change” action to drive similar custom behavior in your own scripts.

  • You should not use this as a generic “do anything” trigger; keep it semantically tied to state-change-like behavior so your mods remain intuitive.

Wait.collect
  • Added Wait.collect(table expected_ids, on_finished, on_add = nil, on_error = nil) -> {table expected, table results, add(id, ...), reset()}.

Wait.collect takes a list of expected ids and returns a collect_table:

  • When the task for a given id is complete, call: collect_table:add(id, ...).

  • The first time this happens for a given id:

  • collect_table.results\ is set to the ... you passed in.

  • If you provided on_add to Wait.collect, it is called as: on_add(id, ...).

  • Error handling:

  • If you call add more than once for the same id and you provided on_error, it is called as: on_error(Wait.COLLECT_DUPLICATE, id, ...).

  • If you call add with an id that was not expected and you provided on_error, it is called as: on_error(Wait.COLLECT_UNKNOWN, id, ...).

When all expected ids have been added:

  • on_finished(results) is called with the final results table.

You can call:

  • collect_table:reset() to zero out call counts and clear results so you can reuse the same collector.
Rewind State

Rewind states are stored periodically. If a store happens in the middle of a complex scripted change, you can end up with bad intermediate states. These helpers let you control when rewinds are saved. (Nolt #617)

  • storeRewindState(closure andThen, block_further_stores)

  • Attempts to store a rewind state if there are unsaved changes, then calls: andThen(success, didSave).

  • success:

  • true → the call completed successfully.

  • false → a rewind state could not be stored. You should always check this before continuing.

  • didSave:

  • true → a new rewind state was actually written.

  • false → call succeeded but there was nothing new to save.

  • If block_further_stores is true and success is true, then no additional rewind states will be recorded until:

  • You call

Hotfix v13.3 - Steam Cloud Formatting, Player Typing Indicator & More

This patch addresses the recent downtime due to issues with the Steam Cloud and includes a couple of additions and fixes to the game.

  • Fixed a major issue with steam cloud url format causing loading issues.

  • All save files on load are converted to the new url format. (http://cloud-3.steamusercontent.com/ -> https://steamusercontent-a.akamaihd.net/)

  • Old cache files will load even with these new urls so we don't have to redownload everything and waste space on storage.

  • Added player color to typing indicator below chat

  • Added component_hotkey_state_change console command/ misc setting. nolt/1828

  • Hand Select Mode working for Lua (player.chooseInHand / player.chooseInHandOrCancel)

  • Changed chooseInHand so it is now a feature of HandZone, instead of Player.

This makes more sense from a game perspective, and will now work with hotseat, won't mess up if the player for instance changes their seat. Instead of setting a callback when you start the hand select mode you provide a label, and when a player ends hand select mode this event will fire: onPlayerHandChoice(player_colour, label, chosen_objects, confirmed)

  • Made magnify zoom slightly larger.

  • Added a console command magnify_zoom_size to control this size.

  • Added this settings to the misc UI settings menu.

  • Fixed alt zoom not working on hand objects when they are not on screen.

Update v13.2 - Discord Game Join, Valve Index Support, Custom Fonts & More!

The long-awaited 13.2 Update is here! This patch addresses some of the most requested features and bug fixes including Discord game join support, Valve Index support for VR, a chat typing indicator, and much more!

Improvements

  • Added a typing indicator that shows up next to the player name and chat window. (Note: it will only show typing that you will be able to see, not if typing to another team) https://tabletopsimulator.nolt.io/785

  • The deck deal-to-color wheel now handles a number typed on top of it, dealing that many cards to the relevant player(s). https://tabletopsimulator.nolt.io/738

  • Right-clicking on slider bar will open dialog allowing for text entry of value. https://tabletopsimulator.nolt.io/730

  • Added confirmation prompt to table flip. https://tabletopsimulator.nolt.io/782

  • Randomizing while hovering over the hand with nothing selected will randomize the entire hand. https://tabletopsimulator.nolt.io/864

  • Visualize Looking For Player on Host - Can be easily disabled from there as well

  • Added visual indication for when an object is dropped into a container. Control with ui_container_enter_indicator console command / misc setting. https://tabletopsimulator.nolt.io/736

  • Added move left & move right options to rotation value UI. https://tabletopsimulator.nolt.io/947

  • Added search to PDF. https://tabletopsimulator.nolt.io/971

  • Changed tooltip text on rewind slider to display time as minutes and seconds.

  • Enabled Metal support for Marmoset shaders fixing Mac rendering issues.

  • Group action will now put the objects into a bag as long as only one bag is present in the selection and no other combinations of decks/stacks were made. You can use the group_into_bag_first command / misc setting to override the last condition, putting everything into the bag if it's the only one (ahead of combining into decks/stacks). https://tabletopsimulator.nolt.io/1594

  • Added logging of pertinent URL when a game asset fails to load.

  • Added showing your hand to another player (right-click a card in your hand and select Show Hand->. https://tabletopsimulator.nolt.io/409

  • Updated Unity version to 2019.4.40 for better stability and bug fixes.

Discord Game Join

  • Can now invite people to join your game from within Discord.

  • Can now ask to join a player's game from Discord and they will be given an in-game popup to accept or decline this request.

  • Joining a game from within discord will launch the game and join the server with one button press.

  • Discord will automatically supply the password for the server if it exists making joining even more seamless.

Search

  • Added feature to search: when searching decks you can specify a number of cards N, and only the top N cards will appear in the search window. This allows for "Peek"-like actions. https://tabletopsimulator.nolt.io/713

  • When a player is searching a deck and changes the order of the deck by moving a card, the movement is logged in the Game chat. You can disable seeing this via the console command / misc setting container_logging.

VR

  • Added default bindings for Index controllers.

Fog of War

XML UI

System Console

Lua

  • Added onPlayerChatTyping(player, typing)

  • object.Container.Search(player, cards = -1) - activate search window for player, optionally limited to top N cards.

  • Callback generated by object.addContextMenu changed: f(player_color) is now f(player_color, object_position, object).

  • Added object parameter to onPlayerPing event

  • Added calls for built-in dialog windows:

  • player.showInfoDialog(info) Displays info string to player.

  • player.showConfirmDialog(info, callback) Displays info string to player. Callback is called as f(player_color) if user hits OK.

  • player.showInputDialog(description, default_text, callback) Simple text input. Callback is called as f(text, player_color) if user hits OK.

  • player.showMemoDialog(description, default_text, callback) Large text input. Callback is called as f(text, player_color) if user hits OK.

  • player.showOptionsDialog(description, {options}, default_value, callback) Options Dropdown. Callback is called as f(option_text, option_index, player_color) if user hits OK.

  • player.showColorDialog({default_color}, callback)Color picker. Callback is called as f(color, player_color) if user hits Apply. https://tabletopsimulator.nolt.io/1343

  • Added LuaPlayer.copy(objects) and LuaPlayer.paste(position).

  • Added zone.getObjects(true), which includes all objects in zone regardless of tags.

  • Added language support to addContextMenu. https://tabletopsimulator.nolt.io/1646

  • If an object has its alt_view_angle set it will use that angle when viewed in container search. https://tabletopsimulator.nolt.io/1575

  • Added gizmo_selectable for Objects

  • Fixed search window ignoring tryObjectEnter/onObjectEnter events. https://tabletopsimulator.nolt.io/778

  • Validate (numeric) enums coming from Lua are not out of range.

  • Fixed Lua lighting, turns, and hands not networking syncing when changing settings. https://tabletopsimulator.nolt.io/1703 https://tabletopsimulator.nolt.io/1085

  • Fixed Layout zone not sorting by Memo. https://tabletopsimulator.nolt.io/1624

  • Fixed getObjectsWithTag returning incorrect values. https://tabletopsimulator.nolt.io/1718

  • Fixed Color.fromhex not working when alpha was omitted. https://tabletopsimulator.nolt.io/1631

  • Fixed lua object.hasAnyTag() not working when a deck inherited its tags from its cards. https://tabletopsimulator.nolt.io/1593

Lua Lighting

  • Added member variables lut_index, lut_contribution, lut_url.

  • No longer need to call apply() to trigger an update any change will automatically apply.

Lua Materials

  • Added support for editing materials vars from Lua. https://tabletopsimulator.nolt.io/724

  • Added new class called material.

  • Added getMaterials() and getMaterialsInChildren() functions to GameObject. Materials function very similarly to Components:

  • GameObject game_object

  • String shader

  • set()

  • get()

  • getVars()

Fixes

Update v13.1 Native File Browser, Cloud Manager, Rewind Time & More!

Update v13.1 Native File Browser, Cloud Manager & Rewind Time Improvements, Optimizations, and much more!

This patch we wanted to focus on bug fixing, optimizations, and working through the feedback the community has provided for us on our new feedback website: https://tabletopsimulator.nolt.io/roadmap

We have found the feedback website to be instrumental in helping us work on the most important features and the fixes you guys would like to see, and we will continue to use this for our future updates.

Since going live we have implemented 96 suggestions left by the community on nolt!

If you have any feedback of suggestions of your own you can head on over to https://tabletopsimulator.nolt.io/

Native File Browser
  • Added a native file browser as an alternative to the built-in one. (your OS file browser)

  • The native file browser supports selecting multiple files where applicable.

  • VR still uses the built-in file browser to ensure interaction still works.

  • Added console command file_browser_native and also added it to the misc settings menu.

Cloud Manager Improvements
  • Cloud Management should overall work much better and be less frustrating to use. https://tabletopsimulator.nolt.io/52

  • Cloud manager can now upload multiple files at once using the new native file browser.

  • Fixed cloud manager reseting to the root path every time you upload or delete something.

  • Fixed cloud manager folders not showing up until you open the cloud manager one more time. https://tabletopsimulator.nolt.io/310

Rewind Time Improvements
  • Rewind and fast-forward has been revamped with better controls and more information. https://tabletopsimulator.nolt.io/393

  • Can now rewind time in multiple steps with the new time slider.

  • Can now see the number of time steps in each direction.

  • Rewind states now are only being created if something has changed since the last rewind state.

  • Rewind now works for promoted players instead of just the host.

General
  • Updated Unity to 2019.4.23 for bug and stability improvements.

  • Added support for multiple auto save files. The default is now 3 and can be changed in the console and misc settings. https://tabletopsimulator.nolt.io/582

  • Broadcast message now appear at the top to better match up with the sliding out animation and fades out smoother. https://tabletopsimulator.nolt.io/448

  • Renamed save file "Expand" to "Search" to better reflect what it does.

  • Added Custom Music to the save file "Search" to make it easier to bring over music from one save to another.

  • Added Music to Workshop asset tags.

  • Added "chat_input_clear_on_dismiss" console property. May be set to OFF to allow clicking away from the chat input field without losing partially written chat messages.

  • Rotation values now store their data as strings instead of objects in the save file.

  • Added EpochTime to save files.

  • Changed misc option / console command "keyboard_single_digit_draw" to "keyboard_single_digit_by_default" - it is now used whenever you type on any component (e.g. when changing component states). If enabled you can still type higher numbers by starting with a 0. https://tabletopsimulator.nolt.io/187

  • Added "end_turn" command. https://tabletopsimulator.nolt.io/130

  • Grouping individual cards will now give the formed deck any tags which all the cards share. https://tabletopsimulator.nolt.io/657

Optimizations
  • Greatly reduced the lock up when spawning lots of objects, such as when loading a save file.

  • Reduced ram usage by about ~100 MB thanks to shader stripping.

  • Save/Workshop file "Search" is now much faster with less chance of a hard lock up.

  • Optimized network serialization to generate less garbage and cause less stutters.

  • Optimized under the hood cloning code.

  • Save file info now caches significantly faster (Less waiting when opening the Games menu).

  • Reduced network bandwidth for impact sounds.

Lua

`

  • Added previous turn color player as second param for onPlayerTurn event.

  • Added Object.getZones() that returns all the zones that the object is interacting with. https://tabletopsimulator.nolt.io/219

  • Added onObject(Enter/Leave)Zone that works on all zones instead of just scripting zones. https://tabletopsimulator.nolt.io/85

  • Added support for all zones with getObjects(). https://tabletopsimulator.nolt.io/613

  • Added UI.loading bool to see if the UI is still loading on this Object.

  • Added lua object.getJson(bool indented) to disable indenting.

  • Added (Global) tryObjectRotate(object, spin, flip, player_color, old_spin, old_flip). spin & flip values [0, 360] degrees.

  • Added (Object) tryRotate(spin, flip, player_color, old_spin, old_flip).

  • Added (Universal) onObjectRotate(object, spin, flip, player_color, old_spin, old_flip).

  • Added (Object) onRotate(spin, flip, player_color, old_spin, old_flip).

  • Added (Universal) onPlayerPing(player, position). https://tabletopsimulator.nolt.io/28

  • Added (LayoutZone) object.LayoutZone.getOptions(), .setOptions({options table}), .layout()

  • Added (LayoutZone) onGroupSort(table group, bool reversed) and onZoneGroupSort(object zone, table group, bool reversed) lua events: return table in desired sorted order, or false to allow default zone behaviour. If present they take precedence over the selected sort in the zone options.

  • Ensured LuaWebRequest's text no longer raises a null reference exception when no downloadHandler is set.

  • Object.getData() now correctly omits null value keys.

  • Fixed being able to addAttachment with the Table bricking the game. https://tabletopsimulator.nolt.io/413

  • Fixed being unable to lua object.deal() to index hands greater than 1. https://tabletopsimulator.nolt.io/400

  • Fixed issue with on[Enter/Leave]ScriptingZone was firing multiple times in a row. https://tabletopsimulator.nolt.io/176

  • Fixed Book setHighlight()/clearHighlight() bug. https://tabletopsimulator.nolt.io/270

  • Fixed minor bug whereby RPCLookAt was using the yaw after validating the pitch (instead of validating the yaw).

  • Fixed lua Player.getAvailableColors() can have repeats. https://tabletopsimulator.nolt.io/536

  • Fixed issue with tryObjectEnter/tryObjectEnterContainer only firing for the first object dropped in a bag. https://tabletopsimulator.nolt.io/150

  • Fixed tryObjectEnter/tryObjectEnterContainer not being passed the object entering when the container was a stack. https://tabletopsimulator.nolt.io/477

  • Fixed data/JSON round-tripping i.e. spawnObjectData({data=JSON.decode(JSON.encode(container.getData()))}).

  • Fixed Lua core mishandling of nil table inserts i.e. table.insert(tab, 1, nil).

`

Lua Player Action APIs

An API that fires when a user performs an action. You may return false to prevent the action. As opposed to onObject* events, actions are fired once per user action, rather than once per object affected.

Added (Universal) onPlayerAction(player, action, targets). targets is a list of Objects and action will be one of: ` onPlayerAction(player, action, targets), new actions:

  • Player.Action.Select

  • Player.Action.PickUp

  • Player.Action.RotateIncrementalLeft (Q)

  • Player.Action.RotateIncrementalRight (E)

  • Player.Action.RotateOver (Alt + F, whilst held)

  • Player.Action.FlipIncrementalLeft (Alt + Q, whilst held)

  • Player.Action.FlipIncrementalRight (Alt + E, whilst held)

  • Player.Action.FlipOver (F)

  • Player.Action.Copy (Ctrl + C / Menu Copy / Menu Clone)

  • Player.Action.Cut (Ctrl + X / Menu Cut)

  • Player.Action.Delete (Delete / Backspace / Menu Delete)

  • Player.Action.Group (G)

  • Player.Action.Paste (Ctrl + V / Menu Paste)

  • Player.Action.Randomize (R / Menu Roll)

  • Player.Action.Under (U)

Nolt Link: https://tabletopsimulator.nolt.io/520 `

Player.Action is not a table, but you may still do: `

  • for name, value in pairs(Player.Action) do

  • log(Player.Action)

`

Nolt Links:

Lua Value and Value Flags
  • Value now persisted in ObjectState.

  • Summing of Value now takes into consideration stacks. https://tabletopsimulator.nolt.io/12

  • Objects with differing Value or ValueFlags are no longer stackable.

  • Selected objects will now have their value summed according to their tags.

  • value_flags will continue to work like before, but are now deprecated in favor of object tags.

Fixes
v13.1 Hotfix 1:
  • Fixed sticky not working correctly on Objects.

  • Fixed GMNotes spacing issue.

  • Fixed jointed objects not being grabbed correctly.

  • Fixed lua tryObjectEnterContainer deleting the object when return false.

  • v13.1 Hotfix 2
  • Fixed chip dupe bug when they are stacked.

Update v13.0 - Translations, Engine Upgrade, Layout Zones, Object Tags & More!

Hey everyone it's been a while, but we have a huge patch for you guys today!

The headline feature is Tabletop Simulator now supports translations for all 29 languages supported by Steam. The game has been translated with the help of google translate but we also added support for creating your own translations and sharing them on the Workshop. Using google translate is an exciting jumping off point for a more global user friendly experience, however, recognizing google translate’s limitations we are also excited to see what native speakers in the community can come up with for the most authentic multilingual game play experience. Furthermore, the translation support is extended to all of your great mods out there. Now players can participate in the same game with different localized text or assets based on their selected language.

We've also upgraded the game's engine (everything should run smoother), added layout zones (automatically lay out cards easily), and added object tags (easily filter system interactions).

We have a bunch of other great new features, upgrades, and fixes you can read about all below.

Finally we are launching a new method for collecting user feedback and bug reports found at https://tabletopsimulator.nolt.io/.

This will allow us to better connect with the community for a more fluid and streamlined feedback loop, including increased visibility into our process. The new system allows you to easily make suggestions and upvote and downvote other community member ideas in a similar style to reddit. Additionally, the community will now be able to see our progress on implementing suggestions, fixes, and new features through the roadmap tool.

Updates, Optimizations, and Cleanup
  • Updated Unity version to 2019.4 LTS.

  • Enable graphics jobs, free performance by multi-threading the rendering (benchmarked up to 25% increase in fps).

  • PhysX version upgrade gives better accuracy and performance in a variety of cases.

  • Video player is now using hardware decoding on the gpu making video textures more performant.

  • Updated tablet chromium version which now supports mp3.

  • Updated Dissonance voice chat plugin.

  • Voice chat is now working on Linux again.

  • Updated Lua Moonsharp to 2.0.

  • Lots of code refractoring and cleanup to facilitate faster updates in the future.

  • Reduced ram usage, by lower the number of variants for our custom DXT5nm Standard shader.

  • Optimized a lot of physics code to use non gc allocing functions.

  • Greatly sped up updating Workshop mods on initial load.

  • Optimized the netcode to be more performant on the cpu.

Translation
  • Added translations for most common languages using google translate. Access Language menu via the button in the bottom right of the main menu, or in the menu bar of the Configuration window.

  • Added the ability to create your own translations for the default UI and share them on the Workshop.

  • Added localization support for your text fields. This allows you to translate your mods for different languages. Example: {en}Hello {fr}Bonjour {de}Hallo

This also works in url fields if you need to change assets based on the language.

Example: {en}url1 {fr}url2 Supported languages: English, [zh-cn]Chinese (Simplified), Russian, Spanish, [pt-br]Portuguese (Brazil), German, French, Korean, Polish, Turkish, Japanese, [zh-tw]Chinese (Traditional), Thai, Italian, Portuguese, Czech, Hungarian, Swedish, Dutch, [es-419]Spanish (Latin America), Danish, Finnish, Norwegian, Romanian, Ukrainian, Greek, Vietnamese, Bulgarian, Arabic

Object Tags

New mechanics which allows objects to selectively interact with game systems. If a system (e.g. a hidden zone, a hand zone, etc.) has a tag set, then only objects which share a tag with it will interact with it.

Taggable systems:

  • Hidden zones

  • Randomize zones

  • Hand zones

  • Layout zones

  • Fog-of-War zones

  • Scripting zones

  • Snap points

Set what tags a object or system has by right-clicking it and selecting Tags from the menu. You may access all tags present at the table via the Modding->Tags window. Added Snap-Point Creation Tags window: new snap points will automatically gain whatever tags you set here.

Zones

Hand, Hidden, and Random zones should perform much faster and no longer slow down the game. Zones now work correctly when there are multiple colliders attached to the same Object. (TODO: LayoutZone and FogOfWarZone)

Zones now all have a right-click context menu. Left-click will open the zone-specific menu that used to be on right-click.

Layout Zones

New Zone tool (in the zone tool popout) which allows you to automatically lay out objects (primarily cards) across the table. Deploy like any other zone, then left-click and hit the cog to change its settings. Especially useful for card games in which you lay melds on the table (like Gin) or which have trick-taking (Whist, Bridge, etc.), but can also be used to simply arrange a bunch of objects in a grid without locking them to it.

Features include:

  • Filter affected objects (face-up/down, non-cards, etc)

  • Split/Combine decks.

  • Set to Manual Only for one-off arranging.

  • Automatic sorting of objects inside groups based on Name, Description, etc.

Layout Zones can triggered by using the Layout Zone tool and left-clicking the zone then hitting the big Layout button, or by right-clicking a object inside a zone it interacts with and selecting the Layout option in its context menu. Mouse pointer shows icon indicating when you are holding an object inside a layout zone: will also show the zone's name if it has one.

Hotseat
  • Improved turn transitions.

  • Added ability to set player names.

  • End Turn button now shows current player instead.

  • Added some Misc Settings, detailed below.

  • Fixed object visibility.

  • Fixed a bunch of bugs in the Lua API relating to Hotseat mode.

General
  • Added "Order" option to contextual menu for bags (LIFO, FIFO, and Random).

  • Spawn mode now works off objects in the void.

  • Picking up objects that are teleported from out bounds now snap to the mouse nicer.

  • When cloning/spawning objects you may hold the left mouse button down and move the mouse to spawn multiple objects.

  • Buttons will now only appear on Books (i.e. PDF objects) when you hover the mouse over them. This can be disabled in Misc Settings.

  • Decks now have a Spread action in the right-click menu; spreads the cards out across the table. Distance between cards is set in Misc Settings.

  • NGUI now shows up on objects in the onscreen hand view and optimized it when alt zooming. (XML UI still doesn't work)

  • Added description to the tooltip when searching a container.

  • Workshop loading wheel above chat is always spinning now when updating.

Lua:
  • HandZones are now Objects like everything else.

  • Added Lua Hands.getHands() and get/setValue() string Color for Hands Objects.

  • Added Lua WebRequest.custom(string url, string method, bool download, string data, Dictionary<string, string> headers, Closure callbackFunction)

  • Lua getAllObjects() is now instantly updated to add or remove when an object is spawned or destroyed.

  • Added Hands class to Lua with members (bool enable, bool disable_unused, int hiding) sames as the hands menu.

  • Deck no longer populates cards with its script and script state.

  • Added tryRandomize(player_color) and tryObjectRandomize(object, player_color) for when someone tries to shuffle/roll/randomize an object. Returning false will prevent randomization.

  • Added onBlindfold(player, blindfolded) event, triggered when a player puts on or takes off blindfold.

  • Added object.alt_view_angle property: when non-zero the Alt view will use the specified Euler angle to look at the object.

  • Added object.getPositionSmooth() and object.getRotationSmooth() return the current smooth move target and null if not moving.

  • Added object.isDestroyed() returns true if an object is (or will be) destroyed.

  • Deprecated object.tag property: use object.type instead.

  • Deprecated filter... commands: now use prefix try.... e.g. tryObjectEnter.

  • Added object.memo, a string you can store info in on an object.

  • Stopped the ability to spawn Tables using spawnObject.

Added Lua Global classes Tables and Backgrounds.

Tables:

`

  • string getTable()

  • bool setTable(string name)

  • string getCustomURL()

  • bool setCustomURL(string url)

  • Object getTableObject()

  • Backgrounds:

  • string getBackground()

  • bool setBackground(string name)

  • string getCustomURL()

  • bool setCustomURL(string url) `

Added Info global static class exposing Info menu.

`

  • string name

  • string type

  • string complexity

  • int[] playing_time

  • int[] number_of_players

  • List tags `

Added calls for working with Tags:

  • object.getTags() -> Table gets the Tags attached to an object.

  • object.setTags(Table tags) sets the Tags attached to an object.

  • object.addTag(string label) adds the Tag to the object.

  • object.removeTag(string label) removes the Tag from the object.

  • object.hasTag(string label) -> bool checks if the object has the Tag.

  • object.hasAnyTag() -> bool checks if the object has any Tags.

  • object.hasMatchingTag(other) -> bool checks if the other object has a matching Tag with this object.

  • scripting_zone.getObjects() will utilize Tags attached to the zone, unless you override with scripting_zone.getObjects(true)

  • deck.spread(distance) uses the spread action on the deck.

  • getObjectsWithTag(string tag)

  • getObjectsWithAnyTags({tag, tag...})

  • getObjectsWithAllTags({tag, tag...})

Lua Fixes:
  • Fixed network sync bug with Xml UI by adding null check to Xml setAttribute(s) and setValue.

  • Fixed object.getSnapPoints() throwing when having no snap points.

  • Fixed loading_custom to work with custom decks and cards.

  • Fixed object.clone() sound parameter not working.

  • Fixed MusicPlayer.playlistIndex to MusicPlayer.playlist_index (old way still works).

  • Fixed Grid calls not working over network.

  • Fixed Grid.snapping not working.

  • Fixed showHotkeyConfig working over network. Added color parameter; dialog will be shown to that player.

  • Fixed onObjectRandomize and onRandomize not returning correct player colour.

  • Fixed Physics.cast not returning list in correct order.

  • Fixed Group action ignoring tryObjectEnter and tryObjectEnterContainer.

System Console
  • Added commands for options detailed in Misc Settings above.

  • Added language, language_... commands for selecting current language.

  • Added translation_export, translation_import, translation_for... commands for working on translations.

  • Added translate command to translate an English term into the current language (if TTS knows it).

  • Added hotseat_name_..., hotseat_start_turn, and hotseat_end_turn commands.

  • Added pointer_position command.

  • Added lift_height and rotation_degrees commands.

  • Added action_spread and action_layout commands.

  • Added ui_clear command to clear UI generated by other commands (e.g. ui_button)

Fixes
  • Fixed major bug when saving stuff to cache not overwriting but writing on top of and maybe deleting garbage at the end.

  • Fixed url redirect issue when trying to load assets from the web with expired certs error. (Curl error 51: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_EXPIRED)

  • Fixed chat breaking and being uninteractable.

  • Fixed bug when uploading steam cloud image thumbnail for Workshop by only allowing local files.

  • Fixed being unable to click through magnify ui to pick up objects.

  • Fixed issues with states number 95 being 96.

  • Fixed rotation values not syncing on connecting client.

  • Fixed null reference when downloading old workshop files that had null width and height deck info.

  • Fixed issue when downloading a bunch of mods with the games menu open causing an insane number of threads to spawn and blow up the game.

  • Fixed bug with FogOfWarZone and child colliders not working correctly.

  • Fixed objects with Measure Movement working on clients.

  • Fixed measuring tool logging revealing hidden object info.

  • Fixed Lift Height slider not hiding when you click away from it.

  • Fixed Pan key not working while holding a object (as long as it is not on the same binding as Flip)

  • Fixed Camera Hold Rotate key not working while holding a object (as long as it is not on the same binding as Tap)

Known Issues:
  • Mac performance reduced and steam overlay not working. (Try using the Metal option when launching the game)
Hotfix v13.0.1
  • Fixed not being able to put objects back into infinite bags.

  • Fixed card peek not working correctly.

  • Fixed cards not flipping correctly in Hand Zones.

  • Fixed {verifycache} not working on URLs.

  • Fixed scripting zones getObjects() not working on interactable == false.

  • Fixed VR highlighting displaying incorrectly.

v13.0.1 Hotfix 1
  • Fixed issues when going from one hand zone into another.

  • Fixed reversed scroll direction on Linux.

  • Fixed exception issue that caused not being able to load a game.

v13.0.1 Hotfix 2

General:

  • If you are having performance issue on your Mac check your resolution in Configuration -> Graphics and lower it.

  • Fixed bag order contextual not hiding correctly.

  • Fixed tooltip for bag order.

  • Fixed Spread context menu item.

  • Fixed layout zone hotkey with F3.

  • Fixed using localize codes in global chat.

Lua:

  • Forgot to add this in the main patch notes but GUIDs are now stable.

  • Fixed scripting zone working on other zones or tables.

  • Fixed lua spawnObject callback by delaying it one frame.

  • Fixed putObject memo field no longer contributes toward object equality.

  • Fixed script_state on global not clearing between loads.

Hotfix v13.0.2

General:

  • Language will not be automatically set to a google translated language but default to English.

  • Added a cloud url check for workshop upload so that it doesn't get stuck uploading.

  • Added knowledge base articles for Object Tags and Layout Zones.

Fixes:

  • Fixed hand zones interactions to be more consistent when overlapping multiple zones.

  • Fixed issues with hand zones eating other hand zones cards being dealt to them.

  • Fixed tablets being governed by Digital permission instead of Tablet.

  • Fixed objects sometimes not being visible when searching a container due to a scrolling issue.

  • Fixed crash cashed from using a custom lut with incorrect dimensions.

  • Fixed Layout Zone not working on rotations other than 0 and 180.

  • Fixed lua issue when a client removed an item from a bag it wouldn't trigger onPickUp() event.

  • Fixed Spread contextual tooltip.

  • Fixed physics menu sliders not working correctly.

Hotfix v13.0.3

General:

  • Updated Unity to 2019.4.19.

  • Updated Dissonance voice chat plugin.

  • Updated Steamworks.net steam plugin.

  • Updated Skyshop rendering plugin.

  • Add "Metal" launch option for Macs, that should run the game faster but with some graphical issues.

Fixes:

  • Fixed issue with player hand named and portrait not updating correctly.

  • Fixed issue with guids ending up empty if the json of an object was missing the guid.

  • Fixed translating card images not working.

  • Fixed issues with server type UI messing up.

  • Fixed being able to mess around with non-active players from top-right menu in hotseat mode.

  • Fixed searching from one object to another messing up scroll position.

  • Fixed zone tooltips.

Hotfix v13.0.4

General: Zones now instantly respond to settings that cause an object to interact with the zone without it having to go in and out. Lua deprecated getAllObjects() with getObjects(), old function doesn't return hand zones for compatability. (Global.getObjects() works too) Added lua tags to getObjects() on all container returns. Hand Zones now functions like all other Objects and are saved as such. Added misc setting controlling randomize zone prompt-on-load.

Fixes: Fixed issue with hands not hiding for clients. Fixed up the last of the hand zone name and potrait positioning. Fixed randomize zone not prompting on load. Fixed title issue with custom translations. Fixed issue with translations exporting more than it should when uploading. Fixed issue if invalid hidden colors were being set for Hand and Hidden zones. Fixed turns menu help button link. Fixed tags getting translated version of Game Type & Complexity Fixed lua tryObjectEnter only firing on first dropped object if it returned false. Fixed lua getObjects() not working correctly with onObjectPickUp() by delaying it a frame to match prior version. Fixed lua Wait.frames() to work correctly if it was called after the Update() loop.

Hotfix v13.0.5

Hey everyone this is likely the last hotfix for this update unless something else comes up majorly broken. With that said we will be likely be turning off the old version of the game on the "public beta" by the end of the week. So if you have any further issue caused by this update please report them here: https://tabletopsimulator.nolt.io/

Changes: Alt zoom doesn't hide other player's pointers anymore. Disabled the appearance of being able to turn off turns while in hotseat mode.

Fixes: Fixed voice chat not working on Mac. (Make sure to accept the allow mic dialog that pops up) Fixed issue with not being able to put objects in searched container. Fixed duping bug with cards. Fixed issue with pure white color tint not syncing correctly. Fixed PDF buttons not displaying for all players. Fixed pointers not hiding correctly in hidden zones when setting is enabled. Fixed not being able to flip a Table after leaving and joining a new game. Fixed lua turn events in hotseat mode. Fixed UI click-through issue with XML UI blocking 2d UI interaction. Fixed blurry text on Language menu. Fixed contextual menu clipping off the screen. Fixed contextual menu material options text being clipped. Fixed elapsed typo on mod loading.

Known Issues: Mac performance reduced and steam overlay not working. (Try using the Metal option when launching the game)

Update v12.4 Line Tool Revamp, Ghost Preview, Tags, Physics Improvements & More!

Hey everyone, hope you're all doing good! We got a great patch you guys today with a ton of great features, improvements, and fixes.

Summary:

You can now make your games friends or invite only, no longer requiring a password. We have a ton of great new features to the line tool making it awesome for all your wargaming needs. There are a lot of great physics improvements to make everything feel a lot more stable. Workshop tags have been revamped and have many more options making it easier to find your games. Custom Card shapes have been added hex, circle, and square. Spawning overhaul where you can see a ghost preview where the object will appear. And much more all covered below!

General
  • The game will now show a ghost object where your object will drop when snapping to grid or snap points.

  • You may still drag components out of the component window, but if you click one instead you will enter Spawn mode. Click the left mouse to place a copy of that object. Hit right mouse or escape to end.

  • New context menu for objects: Clone. Puts you in Spawn mode for that object.

  • When holding an object, hitting escape will return it to where you picked it up.

  • Snap points are now editable for promoted players.

  • New feature where when you press a number key while holding a bunch of objects it will arrange it in a grid based on the number of rows specified with the number key.

  • Settings added for various new features present in the patch.

  • Misc setting added to make containers (decks, bags, etc.) respond to the first number typed on them.

Server
  • Added new server types public, friends, and invite.

  • Public servers are just how you are used to anyone can join, but you can have an optional password.

  • Friends server means only friends can join, no password required.

  • Invite server means only people you choose to invite can join the game, no password required.

  • Server browser loading should be faster because there will be less public servers that need to fetched with the new friends and invite servers.

  • Server browser will now always get your friends servers instantly first.

  • Server browser is now available while you are in a game, in the escape menu.

  • Server browser now shows the total number of people in-game.

  • Fixed connecting to a new game while you are already in one.

Line Tool
  • Moved measurement options from Misc menu to the Line Tool button.

  • Added Grid units alongside Inches and Metric, Will measure according to the size of the grid.

  • Added 2D/3D modes. In 2D all measurements are flattened to the horizontal plane. In 3D height is included.

  • Added ruler mode: Auto or Free. In Auto mode the ruler will take advantage of objects you hover over, snapping to them where appropriate. You can hold down ctrl to override this behaviour.

  • Objects now have a Measure Movement toggle, which if enabled will mean whenever that object is picked up (and you are in Auto mode) a measurement will be started.

  • When in Auto mode, if you start measuring while holding an object (by holding tab), it will measure from the pickup location.

  • You may hold down shift while measuring to view the orthogonal axes (2D mode) or the flat distance + height (3D mode). Holding ctrl at the same time will show the other.

  • Fixed being stuck in Line Tool after using it while holding an object.

Line Tool: Options
Line Tool: Object Snapping
Line Tool: Orthogonal Components
Line Tool: Flat Distance + Height
Pure Mode
  • Added Pure Mode, a simpler view of the table, tunable in the Theme Editor. Supports all built-in tables.
Pure Mode: Light Theme
Pure Mode: Dark Theme
Hand Zones
  • On-screen Hand View now shrinks when you are not hovering over it.

  • Optimized Hand Zones with lots of objects in them.

  • Hands Zones are much snappier with their movement.

  • Fixed issue where object you were holding would go below objects in your Hand Zone.

  • Fixed sub components of cards/dominoes/pachisi (drawings, decals, attached objects, etc.) not hiding in hands.

Spectator View
  • Picture-in-Picture window now allows you to interact with the game through it.

  • For example, you could set it to look at a dice, and whenever you want you can hover over the dice and hit R to roll.

Physics
  • Greatly improved the reliability of physics collisions especially for thin objects.

  • Consolidated physics settings under a new menu called Physics.

  • Gravity slider goes twice as high now for stronger gravity.

  • Cards collider thickness is now the actual size instead of being much thicker.

  • Cards will no longer stack if their scale differ by 15%.

  • Made it so you have to be more precise when placing objects into a bag / infinite bag to reduce accidents especially on large objects.

  • Revamped teleporting when objects fall off the table to now place it floating at the edge of the table where it flew off to reduce disruption.

Tags
  • Revamped the workshop tags with a bunch more and now available in the new Options -> Info menu.

  • These tags are now embedded in the save file and will be in the future searchable and filterable in-game just like the Workshop.

  • New tags categories: Type, Game Category, Complexity, Number of Players, Play Time, and Assets.

UI
  • Add an all search to the games menu.

  • Objects menu revamp completed by merging all Object Menus into the same menu that is searchable.

  • Search for Games and Objects menu has been improved.

  • Physics options have now been moved into Options -> Physics.

  • When you have a folder open on the UI popup menus will have it default selected for you.

  • Added hover icons for buttons and input fields for 3d Xml UI matching 3d NGUI.

  • Added tooltips to Tablet UI buttons.

  • Renamed vector paint to just draw.

  • Can now hold down rotate snap point buttons for continuous rotation.

  • Fixed Saved Objects that are wider than taller now save their thumbnails correctly.

  • Fixed decks making shuffling sounds in the components menu.

  • Fixed PDF popout window working at any UI scale.

  • Fixed hand opening up like you can grab on a 3d UI element overlapping an object.

  • Fixed scaling alt zoom on UI objects.

  • Fixed performance issue when alt zooming objects on the UI.

  • Fixed when having the Components -> Boards open causing snap in the middle of the table.

New Searchable Objects Menu
Custom Objects
  • Added Custom Card/Deck shape types: Rectangle (Rounded), Rectangle, Hex (Rounded), Hex, Circle.

  • Added Stand Up toggle to Custom Token, that stands the token up like a meeple.

  • Optimized Custom Token to load instantly for images with no transparency.

  • When updating an Custom Object, if there exists any objects with matching custom object properties, a popup will appear and ask if you also want to update them.

Lua
  • Updated Color and Vector types: https://github.com/Berserk-Games/Tabletop-Simulator-Lua-Classes

  • object.measure_movement - access the Measure Movement object toggle.

  • Vector held_position_offset - position offset from pointer, lift height and object bounds still modify distance from surface.

  • Vector held_rotation_offset - rotation offset from pointer. This in combination with held_spin_index and held_flip_index determine rotation.

  • int held_spin_index - 0-23 value, 15 degrees Y axis. Upside down is 12, right side up is 0. Changes when a player rotates.

  • int held_flip_index - 0-23 value, 15 degrees Z or X axis depending on the object. Face down is 12, face up is 0. Changes when a player hits flip or alt + rotate.

  • Vector pick_up_position - The position the object was picked up at.

  • Vector pick_up_rotation - The rotation the object was picked up at.

  • bool held_reduce_force - When the Object collides with something while moving this is automatically enabled and reduces the movement force.

  • Added Object.getData() and spawnObjectData({ data = Object.GetData()}), which is the same thing as getJson() and spawnObjectJson() except that is working with tables and you don't have to convert in Lua which should be more performant.

  • Added type to getCustomObject() from cards.

  • Fixed filterObjectEnter and filterObjectEnterContainer not working while game is loading.

System Console

`

  • Added _action_cut, action_deal, action_draw, action_flip, action_group, action_lock, action_randomize, action_rotate, action_search, action_split, action_state_next, action_state_prev _commands, which will trigger that action on the currently selected object.

  • For example, you could do bind f action_search, and then would open the search window.

  • Fixed edit command messing up { } characters. `

Fixes
  • Fixed Fog of War sync on load.

  • Fixed objects not revealing when being dragged out from underneath Fog of War.

  • Fixed Cloud Manager not loading for people that had a corrupted cloud after uploading a save.

  • Fixed Search and expand working with non decks that aren't loaded already on the table.

  • Fixed black spectator hidden zone bug.

  • Fixed SSAO not being enabled correctly for cameras besides main.

  • Fixed bug with PDFs breaking in search / expand and dummy mode.

  • Fixed networking issues with the attach tool.

  • Fixed AssetBundle not hiding correctly that don't have a mesh filter.

  • Fixed AssetBundles that are attached not having colliders.

  • Fixed Fog of War cut paste issue.

  • Fix FoW issue where the fog was not lifting for clients

  • Fix FoW issue where the faraway objects were incorrectly not revealed

  • Fixed color picker display of low-alpha colors.

  • Fixed Attached Objects not getting converted when doing upload all on the cloud manager.

  • Fixed up issues with stacking custom tiles as chips.

  • Fixed rotation of cards in hands on the poker table.

  • Fixed touchscript exceptions being thrown.

  • Fixed timer sound not playing the digital clock.

  • Fixed putting objects into the search windows for decks or bags not deleting the object for clients.

  • Fixed visual objects now working decals in Search, UI, Attach, etc.

Update v12.3 Attach Tool, Server Browser & Search Improvements, and much more!

Hey everyone, hope you are all doing ok in these crazy times! We have another great update for you guys today that adds a brand new tool called Attach which lets you stick objects together. We also have a much needed performance optimization on the server browser due to all the new players joining us! Welcome everyone new hope you all our enjoying the game! We have a ton more below in the full patch notes.

Attach Tool
  • The new tool is used for combining objects into a single object.

  • This attach is in a parent child relationship where one object is the owner of the other.

  • Want to add modular pieces to your figures? This is the perfect tool.

  • You might be thinking this sounds like the old joint tool but this lets you merge objects and even put them in and out of bags.

  • This is also much more performant compared to the old joint tool because it's just one object with multiple visuals combined.

Combine Tools
  • Includes the Attach, Fixed Joint (old joint tool), Hinge Joint, and Springs Joint tools.

  • Exposes the Hinge Joint and Spring Joint tools without being hidden in a menu.

  • Hinge joints are just like a door, but they can even have motors!

  • Springs joints are just like sound objects are connect with a spring.

  • All joint properties can be configured in the right click contextual menu -> Joints.

Server Browser
  • Improved Server Browser performance.

  • Server Browser window is now resizable.

  • Server Browser search text is now persistent.

  • Server Browser search now looks in country codes if you use square brackets, i.e. ****

  • Fixed some search bugs in Server Browser (also, see below).

Search

Search inputs are now more powerful (applies to Server Browser and in-game Search dialog).

  • Ignores case and inflections: A and รƒยก will both be found by a.

  • Will filter to entries which match all space-separated words in search.

  • Use comma to add another set of words.

  • Start a word with - to negate it, removing any entries which it matches.

  • Negation only applies to the set of words it is grouped with.

  • A set of words which are all negated will apply to every set of words.

Example: gloom -fantasy, scythe, -casual will find any servers with "gloom" (but not "fantasy") or "scythe", so long as they do not contain "casual".

Spectator View
  • Fixed alt-zoomed objects not displaying on spectator view.

  • Fixed objects in hidden zones showing when view restricted.

  • Spectator Zoom may appear at cursor or at a fixed position.

  • Spectator Zoom may be restricted.

  • See System Console section for details.

VR
  • Changed Wall Mode to Tilt Mode, and added Tilt Angle setting.
General
  • Special thanks to modzero for helping us track down a security vulnerability that we hotfixed.

  • Added Drag Selectable toggle to components: when disabled the object will not be included in a drag selection (unless SHIFT held).

  • Alt-zoomed books (i.e. PDFs) may now be page-turned with the mouse wheel.

  • Split Zoom Toggle key binding into Zoom Toggle and Pan actions.

  • Alt-Zoom may now be fixed in place on the screen instead of following pointer (see System Console section below)

  • Made collapsed context menus more obvious.

  • Added entry in Misc settings to set size of collapsed menus.

  • Objects which can go in hand will be drawable by hitting 1 on them, like cards etc. Can be disabled in Misc settings.

  • Fixed context menus being stuck.

  • Fixed turn indicator not displaying.

  • Fixed scaling on custom figurine colliders.

  • Fixed BBCode showing up in steam/discord rich presence.

  • Fixed some UI theming issues.

Lua
UI
  • Fixed a bunch of bad interactions between 2D XML UI, 3D XML UI, the normal UI, and invisible objects. Everything should now behave as you would expect.
Object values

Allows objects to behave similarly to poker chips: when set, the object will display its value when hovered over, and if multiple objects which share a flag are selected the total value will be displayed.

  • object.value - integer value of object.

  • object.value_flags - flags for object values.

Book objects (e.g. PDFs)
  • book.page_offset - Offset virtual book numbers are from numbers rendered on pages.

  • book.getPage(offsetPageNumbering = false) - Get current page. If offsetPageNumber is true then factor in the page_offset.

  • setPage(page, offsetPageNumbering = false) - Set current page.

  • setHighlight(x1, y1, x2, y2) - Set highlight box on current page.

  • clearHighlight() - Clear highlight.

Browser objects (e.g. Tablet)
  • browser.url - URL which currently wants to display.

  • browser.pixel_width - The pixel width the browser is virtually rendering to.

Attach Tool
  • To go along with the new Attach tool there is new Object functions available to create these bindings in script.

  • object.addAttachment(Object) - The Object supplied as param is destroyed and becomes a dummy Object child.

  • object.removeAttachment(index) - Use getAttachments() to find out the index property.

  • object.destroyAttachment(index) - Use getAttachments() to find out the index property.

  • object.removeAttachments() - Detaches the children of this Object.

  • object.destroyAttachments() - Destroys the children objects without detaching them.

  • object.getAttachments() - Returns a table in the same format as getObjects() for containers.

Grid Global Class
  • Grid options menu is now available to scripting as Grid.show_lines = true

  • int type

  • bool show_lines

  • Color color

  • float opacity

  • bool thick_lines

  • float offsetX

  • float offsetY

  • float sizeX

  • float sizeY

Misc
  • object.drag_selectable - Drag Selectable toggle of object.

  • object.getSelectingPlayers() - Returns table of players currently selecting the object.

  • object.addToPlayerSelection(player_color) - Add object to player's selection.

  • object.removeFromPlayerSelection(player_color) - Remove object from player's selection.

  • player.clearSelectedObjects() - Clears a player's current selection.

Fixes:
  • Fixed log not outputing to external API.
System Console
  • cam_load, cam_load_zero, cam_save, cam_save_zero - Load and save camera positions.

  • dev_autoconfirm_browser_url_change - Disables browser page load confirmation. Use with caution!

  • hand_component_hotkey_draw - Controls whether objects which can go in hands will respond to the draw 1 hotkey.

  • load & save - Load and save games.

  • spectator_restrict_zoom - Restrict view of spectator zoom if object should be hidden to spectators.

  • spectator_show_zoom - Display alt-zoom in spectator window.

  • spectator_zoom_follows_pointer - Alt-zoom aopears at pointer position in spectator window.

  • spectator_zoom_position - Position on spectator window alt-zoom appears if above is turned off.

  • ui_context_menus_collapsed_height - Height of collapsed context menus.

  • ui_games_window - Visibiliy of Games window.

  • ui_server_browser_search - search text in Server Browser.

  • ui_server_browser_window - Visibility of Server Browser window.

  • zoom_position - Position on screen to display alt-zoom if above is disabled.

  • zoom_follows_pointer - Alt-zoom follows mouse pointer.

  • vr_tilt_mode, vr_tilt_angle - VR Tilt Mode toggle, and angle setting.

Update v12.2 - Theme Editor, Chat Filter, Picture-in-Picture and More!

We've got yet another great update for you today featuring a Custom Theme Editor (dark mode included), Global Chat Filter, Picture-in-Picture and many scripting improvements!

Theme Editor & Dark Mode

Alongside the new Dark theme, you may now edit the colours of the user interface however you wish using the Theme Editor. Find it in the Configuration->Interface window.

Global Chat

The Global Chat now has a Profanity filter that the user can enable to filter out profanity, spam and misbehaviour. Can be enabled/disabled in chat settings, or with /filter & /nofilter

Picture-in-Picture / Spectator View
  • Spectator view can now be used for picture-in-picture, if you are not using it on another monitor. Can be enabled by right-clicking background in game and selecting Picture-in-Picture.

  • Console commands added for this, and some spectator commands reworked. See below.

  • Fixed restricted visiblity (which shows the world as a Grey player sees it).

  • Fixed fog-of-war view.

  • Fixed pointer visibility.

General
  • Images assets are no longer resized to the nearest power of 2 thanks a bug fix by Unity. (Unity version 2019.1.14)

  • Lowered max angular velocity cap to make dice feel better and more like previous versions.

  • Various UI improvements and fixes, most notably on Color Picker, Server Browser, and Script Editor.

  • Custom Figurine object now has a Card Scale property, so the figurine card can be scaled independently from the base.

  • GM Notes section added to bottom of right-click context menu for Black player (can be disabled in Misc settings)

  • Each section in the right-click context menu can be collapsed by clicking the line above it (can be disabled in Misc settings)

  • Misc setting to control mouse shake threshold.

  • Misc setting to control whether games can add items to context menus.

  • Misc setting to control whether games can show the game-specific keyboard controls config window.

  • Misc setting to control whether a single card will behave as a deck when you type a number on it. If ON then you will draw the card. If OFF then it will change state / rotation value, etc.

  • Fixed blindfold in right-click menu not working.

  • Fixed spectators (grey players) seeing things they shouldn't (in fog-of-war for instance).

  • Fixed game freezing when you hold a stack of two objects and use alt+right-mouse to drop one.

Lua
New API events:
  • filterObjectEnterContainer(container, object) - Global version of object.filterObjectEnter

  • onPlayerChangeTeam(player, team) - Called when a player changes team.

  • onObjectHover(player, object) & object.onHover(player) - Called when a player moves their pointer over an object.

  • onObjectNumberTyped(object, player, number) & object.onNumberTyped(player, number) - Called when a player types a number on an object. Uses new property object.max_typed_number

  • onObjectStateChange(object, old_guid) & object.onStateChange(old_guid) - Called when an object changes state, after it is in its new state.

  • onObjectCollisionEnter(object, collision_info), onObjectCollisionStay(object, collision_info), onObjectCollisionExit(object, collision_info) - Called when an object collides with another. Objects must be registered with the collision handler before they will trigger these events.

New API commands:
onNumberTyped example:
  • player.setUITheme(theme_script) - Sets the player's UI theme.

  • object.addContextMenuItem(label, function, keep_open = false) - Adds a right-click context menu to the object.

  • object.clearContextMenu() - Clears all items added by above.

  • addContextMenuItem(label, function, keep_open = false, require_table = false) - Same as above, but global (when user right-clicks empty space, or the table).

  • clearContextMenu() - Clears all items added by above.

  • addHotkey(label, method_name, trigger_on_key_up = false) - Add a bindable control. User may assign a key to it in Options->Game Keys.

  • showHotkeyConfig() - Shows the config window described above.

  • clearHotkeys() - Remove all controls created by above.

  • container.remainder - After using container.takeObject, if there is only one object left in the container (which means the container will be destoyed in the next frame) then this will be set to that last remaining object.

  • object.getGMNotes() & object.setGMNotes(notes) - For new GM notes feature.

  • object.registerCollisions(include_stay_events = false), object.unregisterCollisions() - Objects must be registered in order to trigger the global collision handler events detailed above. Stay events are particularly expensive, so only set that parameter to true if you absolutely require it.

Fixes:
  • Fixed filterObjectEnter not working under certain conditions.

  • Fixed decals not cleaning up correctly when using setDecals

System Console
Spectator command rework:
  • spectator_window now controls the picture-in-picture mode.

  • spectator_screen can be used to open spectator view on another monitor.

  • spectator_activate_with_resolution now has -p parameter to specify picture-in-picture. This command can be used to open picture-in-picture with specific position and size.

New commands: (for more info see above page, or use help )
  • ui_main_flip, ui_main_modding, ui_main_music, ui_main_notebook, ui_main_objects, ui_main_options - Control visibility of buttons on top menu bar.

  • spectator_panel_buttons - Whether picture-in-picture window has buttons to control it.

  • spectator_panel_corners - Whether picture-in-picture window has corners to resize it.

  • spectator_panel_locked - Whether picture-in-picture window can be moved.

  • ui_theme_color_ - Color of specified selector.

  • ui_theme_batch_start & ui_theme_batch_end - Group multiple ui_theme_color_ commands together.

  • ui_theme_count - Number of themes.

  • ui_theme_from_game_auto - Whether games can set the theme colors.

  • ui_theme_is_ - Sets current theme.

  • ui_theme_index - Index of current theme. Set to change theme.

  • ui_theme_name - Name of current theme. Set to change theme.

  • chat_filter - Whether the chat filter is enabled.

  • chat_refresh_filter - Refresh the chat filter rules.

  • card_is_a_deck_for_hotkeys - Whether the setting described above is enabled.

  • game_hotkey_bind - Bind a key to a game-generated control.

  • game_hotkey_list - List bindable controls generated by loaded game.

  • ui_context_menus_from_games - Whether games can add items to context menus.

  • game_hotkey_config_can_open - Whether games can show the game-specific control binding window.

  • ui_context_menus_can_collapse - Whether context menu section can be collapsed.

  • ui_context_menus_show_gm_notes - Whether GM notes are displayed at bottom of context menu for Black player.

New DLC - Blood Rage & Boss Monster

We've got two new DLC additions in store for you today - Blood Rage and Boss Monster

In Blood Rage, each player controls their own Viking clan’s warriors, leader, and ship. Ragnarök has come, and it’s the end of the world! It’s the Vikings’ last chance to go down in a blaze of glory and secure their place in Valhalla at Odin’s side! For a Viking there are many pathways to glory. You can invade and pillage the land for its rewards, crush your opponents in epic battles, fulfill quests, increase your clan's stats, or even die gloriously either in battle or from Ragnarök, the ultimate inescapable doom.

https://store.steampowered.com/app/610700/Tabletop_Simulator__Blood_Rage/

Inspired by a love of classic video games, Boss Monster: The Dungeon Building Card Game pits 2-4 players in a competition to build the ultimate side-scrolling dungeon. Players compete to lure and destroy hapless adventurers, racing to outbid one another to see who can build the most enticing, treasure-filled dungeon. The goal of Boss Monster is to be the first Boss to amass ten Souls, which are gained when a Hero is lured and defeated — but a player can lose if his Boss takes five Wounds from Heroes who survive his dungeon.

https://store.steampowered.com/app/610701/Tabletop_Simulator__Boss_Monster/

Only the host needs to own the DLC for everyone at the table to play

Update v12.1 Music Player, PDF support, and tons of other great improvements!

Hey everyone, we got another great update for you today! We have added 2 very long requested features a Music Player and PDF support! There are also a ton of great additions and improvements listed below in the patch notes.

Music Player
  • The music player let's you play audio files (.mp3, .wav, .ogg, ogv) which are synced for all players.

  • Great for room music or so your DnD campaign has the right mood!

  • Supports playlists with ordering, shuffling, and looping.

Custom PDF
  • New object Custom PDF, that allows you import a PDF onto a tile.

  • This converts the PDF into a series of images, to make it easy to import your rule books!

  • Supports multiple pages: swap between them with the contextual menu, next/previous state hotkeys, or the buttons on the left and right side.

  • Can popout the PDF to the screen by hitting the hidden UI button on the top left of the PDF object.

  • You can joint this to any objects to add any visual flair you would like to match the game.

Cloud Manager Folders
  • Cloud manager now supports folders just like Saved Games/Objects.

  • When you import all loaded assets into cloud it puts them in a folder defaulting to the Game name.

  • Can now name files that are uploaded to the Cloud instead of just using the file name on disk.

Sound Improvements
  • Custom Objects that are set to dice or coin will now get that correct sounds for their selected material type.

  • Improved sounds for objects interacting with locked objects.

  • Added glass material type for Custom AssetBundle and Custom Model.

Alpha Transparency Support
  • Added alpha support to the color picker.

  • Can now draw with semi tranparency.

  • Can color tint objects to have alpha transparency, which goes nicely with the new glass material type.

  • Objects with alpha transparency will not cast shadows.

Magnify Revamp
  • Magnify (hotkey m) overhauled to be round.

  • Scroll up or down to control the zoom level of the magnify.

  • Fixed visual issues with previous magnify.

General Improvements
  • Added loading percent next to the player names on the top right.

  • For the top bar in-game the Scripting, Workshop Upload, and Cloud Manager menus have been moved under "Modding".

  • Improved auto-raise to work better with overhangs.

  • Added a workshop indicator next to the chat window that you can hover over and get info about how far along the workshop subscription check is at.

  • Moved physics mode (semi-lock, locked, etc) from Configuration to Server Options.

  • Greatly improved compatibility with old AssetBundles shaders. This will fix a lot of broken DLCs.

  • Improved Fog of War performance.

  • File Browser now remembers the last opened path.

  • Updated Voice Chat plugin.

  • Voice chat is now using a higher quality setting.

  • Added hidden zone opacity sliders to Misc settings.

Scripting Improvements
  • New global class Vector:

` Constructors:

Vector(num, num, num) --> return a vector with specified (x, y, z) components

Vector(table) --> return a vector with x/y/z or 1/2/3 conponents from source table (x/y/z first)

Vector.new(...) --> same as Vector(...)

Vector.max(vec1, vec2) --> return a vector with max components between vec1 and vec2

Vector.min(vec1, vec2) --> return a vector with min components between vec1 and vec2

Vector.between(vec1, vec2) --> return a vector pointing from vec1 to vec2

vec:copy() --> copy self into a new vector and retur it

Component access:

vec.x, vec.y, vec.z --> read/write component

v[1], v[2], v[3] --> read/write component

vec:get() => num, num, num --> returns x, y, z components of self

Methods modifying self and returning self:

vec:setAt(key, num) --> same as "vec = num"

vec:set(num, num, num) --> set x, y, z components to passed values

vec:add(otherVec) --> adds components of otherVec to self

vec:sub(otherVec) --> subtracts components of otherVec from self

vec:scale(otherVec) --> multiplies self components by corresponding compnents from otherVec

vec:scale(num) --> multiplies self components by a numeric factor

vec:clamp(num) --> if self magnitude is higher than provided limit, scale self down to match it

vec:normalize() --> scale self to magnitude of 1

vec:project(otherVec) --> make self into projection on another vector

vec:reflect(otherVec) --> reflect self over a plane defined through a normal vector arg

vec:inverse() --> multiply self components by -1

vec:moveTowards(otherVec, num) --> move self towards another vector, but only up to a provided distance limit

vec:rotateTowards(otherVec, num) --> rotate self towards another vector, but only up to a provided angle limit

vec:projectOnPlane(otherVec) --> project self on a plane defined through a normal vector arg

Methods not modifying self:

vec:dot(otherVec) --> return a dot product of self with otherVec

vec:magnitude() --> return self magnitude (length)

vec:sqrMagnitude() --> return self magnitude (length) squared

vec:distance(otherVec) --> returns distance between self and otherVec

vec:sqrDistance(otherVec) --> returns squared distance between self and otherVec

vec:equals(otherVec, num) --> returns true if otherVec same as self (optional numeric tolerance param), false otherwise

vec:string(str) --> return string describing self, optional string prefix

vec:angle(otherVec) --> return an angle between self and otherVec, in degrees [0, 180]

vec:cross(otherVec) --> return a cross-product vector of self and otherVec

vec:lerp(otherVec, num) --> return a vector some part of the way between self and otherVec, numeric arg [0, 1] is the fraction

vec:normalized() --> return a new vector that is normalized (length 1) version of self

vec:orthoNormalize() --> return three normalized vectors perpendicular to each other, first one being in the same dir as self

vec:orthoNormalize(otherVec) --> same as vec:orthoNormalize(), but second vector is guranteed to be on a self-otherVec plane

Operators:

vecOne + vecTwo --> return a new vector with added components of vecOne and vecTwo

vecOne - vecTwo --> return a new vector with subtracted components of vecTwo from vecOne

vecOne * vecTwo --> return a new vector with multiplied components of vecOne and vecTwo, NOT a dot product (!)

vec * number --> return a new vector with all components from vec scaled by a numeric factor

number * vec --> same as "vec * number"

vecOne == vecTwo --> return true if both vectors identical or within a small margin of each other, false otherwise

tostring(vec) --> return a string description of a vector `

  • New global class Color:

`

Constructors:

Color(num, num, num) --> return a color with specified (r, g, b) components

Color(num, num, num, num) --> return a color with specified (r, g, b, a) components

Color(table) --> return a color with r/g/b/a or 1/2/3/4 components from source table (letter keys prioritized)

Color.new(...) --> same as Color(...)

Color.fromString(colorStr) --> return a color from a color string ('Red', 'Green' etc), capitalization ignored

Color.fromHex(hexStr) --> return a color from a hex representation string (e.g. '#ff112233'), hash sign and alpha are optional

col:copy() --> copy self into a new color and return it

Color.Purple --> shorthand for Color.fromString('Purple'), works for all player and added colors, capitalization ignored

Component access:

col.r, col.g, col.b, col.a --> read/write component

col[1], col[2], col[3], col[4] --> read/write component

col:get() => num, num, num, num --> returns r, g, b, a components of self

col:toHex(includeAlpha) --> returns a hex string for self, boolean parameter

col:toString(num) --> returns a color string if matching this instance, nil otherwise, optional numeric tolerance param

Methods modifying self and returning self:

col:setAt(key, num) --> same as "col = num"

col:set(num, num, num, num) --> set r, g, b, a components to passed values

Methods not modifying self:

col:equals(otherCol, num) --> returns true if otherCol same as self, false otherwise, optional numeric tolerance param

col:lerp(otherCol, num) --> return a color some part of the way between self and otherCol, numeric arg [0, 1] is the fraction

Operators:

colOne == colTwo --> return true if both colors identical or within a small margin of each other, false otherwise

tostring(col) --> return a string description of a color

Other:

Color.list --> table of all color strings

Color.Add(name, yourColor) --> add your own color definition to the class (string name, Color instance yourColor) `

  • Added an overload to UI.setXml() and UI.setXmlTable() to take a CustomAssets as the last param.

  • Music Player exposed to Lua.

  • Added logString function, which returns a string representation of a lua object (the same representation the log function uses)

  • Fixed cleanup issue with Xml custom assets UI from lua for clients.

  • Fixed turns not network syncing for Lua.

VR
  • Improved movement - added movement inertia. Can be calibrated or disabled in VR settings.

  • Grid overlay now renders in VR.

  • Fog of War now renders in VR.

  • Added VR documentation to api website: https://api.tabletopsimulator.com/vr/

Spectator Mode
  • Spectator window may now display the view grey players have (for example, cards in your hand will be hidden). Enable with +spectator_restrict_view

  • Spectator window now renders the grid. May be turned off with -spectator_show_grid

System Console
  • Added documentation for system console to tabletop api website: https://api.tabletopsimulator.com/systemconsole/

  • Inline variable evaluation changed to use { and } (instead of < and >). See above page for details.

  • You may now use alias to run commands when a toggle variable's value is changed.

  • skip now allows for various comparisons, and fuzzy equality check.

  • Added ui_anchor, ui_label and ui_toggle commands (to accompany ui_button), allowing you more options for easily running commands / changing setting during play.

New commands: (for more info see above page, or use help )

  • append - Adds text, or the last entered command, to a text variable.

  • camera_reset_on_load - Whether the camera resets its position when you do a Save & Play in Atom.

  • chat_input - Activates chat input box.

  • component_examine - Sets game component currently being examined.

  • component_move, component_rotate, component_position, component_rotation - Apply movements to components.

  • eval - Evaluates an expression and stores it in a variable.

  • examine_position, examine_rotation - Return information on the currently examined component.

  • hidden_zone_showing_opacity, hidden_zone_hiding_opacity - Set visual opacity of hidden zones.

  • lua - Execute a lua statement.

  • music_add, music_mute, music_next, music_pause, music_play, music_prev, music_repeat, music_shuffle, music_timecode - Commands to control new music player.

  • spectator_restrict_view - Whether the spectator window shows your view, or that of a grey player.

  • spectator_show_grid - Whether the grid is rendered in the spectator window.

  • team - Stores / sets team you are currently on.

  • ui_anchor - Sets position UI elements are made relative to (default is 0,0 - the center of the screen)

  • ui_label - Add static text UI element.

  • ui_toggle - Add checkbox UI element.

  • vector_x, vector_y, vector_z - Return an individual axis from a vector variable.

  • vr_move_with_inertia - Whether you have inertia in VR.

  • vr_move_friction - When you have inertia, how quickly you slow down.

  • vr_scale_rotate_rate - How much smoothing is applied during scaling/rotating.

Fixes
  • Fixed scroll wheel being inverted for Linux.

  • Fixed Components menu chess Wood White King being missing.

  • Fixed search and expand for Games menu.

  • Fixed misc issues with spectator camera.