Update 14.0 - Engine Upgrade, Feature Additions & Performance Improvements
[p][/p][h2]Tabletop Simulator v14.0 - Engine Upgrade, Feature Additions & Performance Improvements![/h2][p][/p][p]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 ❤️[/p]
[p]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.[/p][h2]Read First (Important Changes)[/h2]
- [p]New minimum OS / platform requirements:[/p]
- [p]Windows: 64-bit Windows 10 21H1+ (Windows 11 supported)[/p]
- [p]macOS: 11 Big Sur+[/p]
- [p]Linux: Ubuntu 22.04 / 24.04 (64-bit)[/p]
- [p]Win 32-bit builds are no longer supported.[/p]
- [p]Keybind behavior changed: keybinds now use physical key location instead of character (better across keyboard layouts). Keybinds have been reset due to this change.[/p]
- [p]Image pipeline update: your RAW image cache will be cleared with this update due to image pipeline changes and new translucency support.[/p]
- [p]Voice chat: if you are the host and disable voice chat, it disables voice chat for all players.[/p]
[p]Gameplay, rules, and your saves are unchanged. This is primarily an engine + quality-of-life update.[/p][h2]Summary[/h2]
- [p]Engine & platform[/p]
- [p]Engine upgrade to Unity 6 LTS for smoother performance, better stability, and faster loading in many cases. Over 5 years of engine improvements![/p]
- [p]Native Apple Silicon support on macOS with a universal app (Apple Silicon + Intel), using Metal by default on Apple Silicon.[/p]
- [p]The game executable is now code signed, improving trust with Windows and reducing false positives with antivirus.[/p]
- [p]Rendering & mod assets[/p]
- [p]New Vulkan graphics API option on Windows & Linux (experimental) for potentially better performance in heavy scenes.[/p]
- [p]New rendering & image upgrades: higher quality PCSS shadows, optional image translucency, and WebP image support for more efficient mods.[/p]
- [p]Quality of life[/p]
- [p]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.[/p]
- [p]Lua / creators[/p]
- [p]Lua upgrades including a new turn-order API, improved deck dealing controls (including “deal from bottom”), [c]putObject[/c] index support, plus stability fixes for scripting and drafting/hand selection workflows.[/p]
- [p]Updated TTS to Unity 6 LTS.[/p]
- [p]Updated all plugins to their latest compatible versions.[/p]
- [p]The game executable is now code signed, improving trust with Windows and reducing false positives with antivirus.[/p]
- [p]Windows[/p]
- [p]64-bit only.[/p]
- [p]Minimum: Windows 10 version 21H1 (build 19043) or newer.[/p]
- [p]Windows 11 fully supported.[/p]
- [p]macOS[/p]
- [p]Minimum: macOS 11 Big Sur or newer.[/p]
- [p]Ships as a universal app that runs on both Intel and Apple Silicon (M-series).[/p]
- [p]On Apple Silicon, TTS runs natively (no Rosetta required).[/p]
- [p]Linux[/p]
- [p]Officially supported/tested: Ubuntu 22.04 / 24.04, 64-bit.[/p]
- [p]Wayland and X11 supported (behavior may vary by distro/driver).[/p]
[p]If you're on an older OS than the above, TTS may not launch after this update. Please update your system.[/p][h3]Graphics APIs[/h3]
- [p]macOS (Apple Silicon)[/p]
- [p]Metal is now the default graphics API when running on Apple Silicon.[/p]
- [p]If you're not on Apple Silicon, the game uses OpenGLCore by default.[/p]
- [p]Windows & Linux[/p]
- [p]Added Vulkan as a new experimental graphics API.[/p]
- [p]In very demanding scenes, Vulkan can offer better performance on supported hardware.[/p]
- [p]If you hit visual glitches or stability problems, switch back to the default renderer.[/p]
- [p]Includes the latest Unity 6 security fixes, addressing known file-loading vulnerabilities in older engine versions.[/p]
- [p]Combined with code signing, this should reduce security prompts and exploit risk.[/p]
- [p]Greatly increased snappiness of WASD camera movement with less "floaty" gravity.[/p]
- [p]Keybinds now use physical key location instead of character, so bindings line up across different keyboard layouts.[/p]
- [p]Turn order UI now updates dynamically in the top-right player list whenever turn order changes.[/p]
- [p]Controller input for moving pointers should now feel slightly smoother.[/p]
- [p]Greatly optimized network serialization on CPU via more efficient bitpacking.[/p]
- [p]Image loading improvements[/p]
- [p]Loading new (uncached) images is now more performant.[/p]
- [p]Improved image quality in many cases.[/p]
- [p]Reduced likelihood of crashes when large or many new images are being loaded.[/p]
- [p]Added support for WebP images, a more efficient image format than JPG or PNG. (Feedback #2273)[/p]
- [p]Voice chat improvements:[/p]
- [p]Disabling voice chat in the configuration menu properly stops all voice chat processes.[/p]
- [p]This can fix audio issues with some Bluetooth headsets.[/p]
- [p]If you are the host and disable voice chat, it disables voice chat for all players.[/p]
- [p]Added an error message when trying to use voice chat when it isn't connected.[/p]
- [p]UI theme can now automatically follow your system theme if none is manually selected.[/p]
- [p]Added a higher quality shadow setting PCSS, which gives more realistic shadows and blurs based on distance.[/p]
- [p]Added a new console command [c]Translucency[/c] that allows images to support partial translucency (EXPERIMENTAL, please send us feedback on this!).[/p]
- [p]Added a popup when disconnecting while players are still connected to offer them host migration. (Feedback #2663)[/p]
[p]Note: Your RAW image cache will be cleared with this update due to image pipeline changes and new translucency support.[/p][hr][/hr][h2]Music Player[/h2]
- [p]Added search filter for playlists. (Feedback #2143)[/p]
- [p]Added Clear Playlist button.[/p]
- [p]Added Export Playlist and Import Playlist[/p]
- [p]Save your current playlist to a file.[/p]
- [p]Add a playlist file into your current playlist.[/p]
- [p]Added Upload Music Folder[/p]
- [p]Select a folder and upload all songs in it at once, with naming.[/p]
- [p]TTS will now suggest a name for a song when you provide a URL or file.[/p]
- [p]Fix: Music player no longer breaks when loading a new mod. (Feedback #2038)[/p]
- [p]Fix: Music events no longer break when a song ends with no playlist active.[/p]
- [p]Fix: Music player no longer resets when loading a save file with no music saved on it.[/p]
- [p]On-screen notes region is now resizable.[/p]
- [p]New notepad settings for:[/p]
- [p]Font[/p]
- [p]Font size[/p]
- [p]Text justification[/p]
- [p]New console commands:[/p]
- [p][c]ui_notepad_edit[/c][/p]
- [p][c]ui_notepad_left_align[/c][/p]
- [p][c]ui_notepad_locked[/c][/p]
- [p][c]ui_notepad_fixed_width_font[/c][/p]
- [p][c]ui_notepad_font_size[/c][/p]
- [p][c]ui_notepad_size[/c][/p]
- [p][c]ui_notepad_text[/c][/p]
- [p]While Grid settings are open, the grid now renders on top of everything, making adjustments easier.[/p]
- [p]Controlled via [c]ui_grid_highlight_when_editing[/c] (console / Misc setting).[/p]
- [p]New anchor & gizmo mode[/p]
- [p]Click the Gizmo button in the Grid window.[/p]
- [p]Select a component to center the grid on it.[/p]
- [p]Ctrl+click a second component to size the grid appropriately (using your snap settings). (Feedback #1871)[/p]
- [p]Added [c]measure_grid_multiplier[/c] command.[/p]
- [p]Applies to drawn lines, text, and decals.[/p]
- [p]Non-promoted players[/p]
- [p]"Erase all" now only erases their own drawings/decals. (Feedback #1841)[/p]
- [p]Promoted players[/p]
- [p]Can erase everything[/p]
- [p]Can erase just their own[/p]
- [p]Can erase all content from a specific player[/p]
- [p]Cloud folder dropdown now has a "Select Folder" button that opens the Cloud Manager folder browser. (Feedback #711)[/p]
- [p]Starred folders[/p]
- [p]Folders can now be Starred (button next to folder name).[/p]
- [p]Starred folders show first in the folder browser dropdown. (Feedback #711)[/p]
- [p]Cloud search now restricts results to the current folder. (Feedback #1839)[/p]
- [p]Fix: Resolved several file browser issues and cleaned up its underlying code to improve stability.[/p]
- [p]Holding ALT while dealing or drawing from a deck will now take the card from the bottom of the deck. (Feedback #2680)[/p]
- [p]The deck will do a small “hop” animation to make it clear when this happens.[/p]
- [p]Works both with the number keys and the GUI.[/p]
- [p]Dealing hand objects will now correctly deal to your new hand if you change the table.[/p]
- [p]Custom Figurine[/p]
- [p]Added toggle to use a minimal collider on the card part. (Feedback #1929)[/p]
- [p]Added option to mirror the back texture. (Feedback #2107)[/p]
- [p]Added Reset Scale to an object's scale context menu. (Feedback #2078)[/p]
- [p]Hotseat player names are now remembered between sessions. (Feedback #2070)[/p]
- [p]Added [c]vr_floor[/c] command / VR setting[/p]
- [p]Lets you turn off the floor independently of [c]fog[/c] / "Floor Of Mist". (Feedback #2173)[/p]
- [p]Server browser improvements[/p]
- [p]Player names now show in the server browser.[/p]
- [p]Your name is hidden if you are offline, invisible, or you untick the "Show Name In Server Browser" option.[/p]
- [p][c]component_hotkey_state_change[/c][/p]
- [p]When enabled, press number keys while hovering an object to change its State.[/p]
- [p]Appears in Misc Settings.[/p]
- [p][c]ui_notebook[/c][/p]
- [p]Shows the Notebook window.[/p]
- [p][c]text_tool_default_font_size[/c][/p]
- [p]Sets default size for the Text tool. (Feedback #2000)[/p]
- [p][c]autorun_lua[/c][/p]
- [p]Controls whether Lua automatically runs when updated.[/p]
- [p][c]camera_reset_on_color_change[/c][/p]
- [p]Controls whether the camera automatically moves to your seat when you change color. (Feedback #256)[/p]
- [p][c]show_name_in_server_browser[/c][/p]
- [p]Controls whether your name is listed in the server browser for public servers you join.[/p]
- [p][c]measure_grid_multiplier[/c][/p]
- [p]Applies a scale multiplier when the line measure tool is in Grid mode.[/p]
- [p]Fixed [c]help[/c] command not working on commands that have no arguments.[/p]
- [p]Removed old console commands related to global chat. (Feedback #2117)[/p]
- [p]Fixed a major networking issue where loading a save file could break the game state. (Feedback #2641)[/p]
- [p]Fixed rewinds and autosaves not working correctly. (Feedback #2656)[/p]
- [p]Fixed an issue where XML UI could be blocked by incorrect objects, including the invisible floor at [c]y = 1[/c]. (Feedback #2647)[/p]
- [p]Fixed a 64-depth issue when downloading and loading mods. (Feedback #2640)[/p]
- [p]Fixed hand selection working incorrectly with the new Lua drafting mechanic.[/p]
- [p]Fixed an issue where you could erase your drawn lines incorrectly. (Feedback #2702)[/p]
- [p]Fixed several HandSelectMode issues. (Feedback #2618)[/p]
- [p]Fixed a bug in [c]Lua Wait.collect[/c]. (Feedback #2635)[/p]
- [p]Fixed an issue where XML UI would not be blocked by objects when it should.[/p]
- [p]Fixed XML UI not hiding in hidden zones. (Feedback #2673)[/p]
- [p]Fixed partial transparency when importing UI and decal images for the first time.[/p]
- [p]Fixed advancing the turn immediately after loading a game always going to the first player instead of the second.[/p]
- [p]Fixed a macOS issue where text could be entered while the Cmd modifier key was held. (Feedback #2636)[/p]
- [p]Fixed infinite bags visually breaking after Undo or Reload. (Feedback #2665)[/p]
- [p]Fixed drop indicator not showing color when dropping with Alt + Right Click for decks and stacks.[/p]
- [p]Fixed grid size inputs not allowing you to type a [c].[/c] at the end.[/p]
- [p]Fixed [c]onLoad[/c] not executing in Hot Seat Mode. (Feedback #2629)[/p]
- [p]Fixed RPG tileset snapping preview so it now displays correctly.[/p]
- [p]Fixed Flick and Combine sometimes requiring a double click when you are a client.[/p]
- [p]Fixed right click while drawing a line not canceling for everyone else. (Feedback #125)[/p]
- [p]You can now obtain the "Be Social" achievement using in-game chat. (Feedback #1895)[/p]
- [p]Fixed game crashing when trying to load a CMYK JPG.[/p]
- [p]Fixed line tool not converting to cm in component mode. (Feedback #1934)[/p]
- [p]Fixed "Showing Hand" button displaying incorrect color after seat swap.[/p]
- [p]Fixed on-screen hand blocking in-game UI. (Feedback #1757)[/p]
- [p]Fixed hotseat turn not being set to correct player on load. (Feedback #1960)[/p]
- [p]Fixed hotseat players being unable to drop cards in searched deck. (Feedback #1959)[/p]
- [p]Fixed hotseat turn incorrectly resetting when loading a Classic game.[/p]
- [p]When starting a hotseat game, the game now only picks larger tables, so all player colors are immediately selectable.[/p]
- [p]Fixed context menu not clamping to screen. (Feedback #1966)[/p]
- [p]Fixed context menu appearing in the wrong position when right-clicking a card in hand. (Feedback #2051)[/p]
- [p]Fixed unintuitive Text Tool placement behavior.[/p]
- [p]Fixed appearance of custom card aspect ratios when searching containers. (Feedback #2021)[/p]
- [p]Fixed cards merging incorrectly with a deck when the deck is on a snap point. (Feedback #2063)[/p]
- [p]Fixed left edge of search dialog not having a collider. (Feedback #2077)[/p]
- [p]Fixed Japanese language name in language select. (Feedback #2116)[/p]
- [p]Fixed shake detector triggering when the user spams Tap.[/p]
- [p]Fixed Random Domino/Card/Mahjong Tile not generating every possible object. (Feedback #2160, #2154)[/p]
- [p]Fixed rewind/forward ([c]rwd/fwd[/c]) not working correctly. (Feedback #2161)[/p]
- [p]Fixed game breaking on first launch but working on subsequent launches.[/p]
- [p]Fixed cards getting cut off onscreen when scaling very large hands.[/p]
- [p]Fixed deleting a folder in Cloud Manager not deleting all contained files.[/p]
- [p]Fixed issues when uploading PDF files via "Upload All" in the Cloud Manager.[/p]
- [p]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.[/p]
- [p]Fixed dice behavior when picking up and dropping instantly, so dice now roll correctly in that scenario.[/p]
- [p]Fixed VR floor setting being inverted for the [c]vr_floor[/c] option.[/p]
- [p]Added [c]tryObjectStateChange(object, new_state_index, player_label)[/c] and [c]object.tryStateChange(new_state_index, player_label)[/c]. (Feedback #1822)[/p]
- [p]Limited [c]tryObjectStateChange[/c] and [c]tryStateChange[/c] to only trigger on valid state indices.[/p]
- [p]Added [c]Turns.getTurnOrder()[/c] which returns the current turn order, including automatic order (in automatic mode) and custom order (in custom mode).[/p]
- [p]Lua will now receive the ALT modifier on the events [c]onNumberTyped[/c] and [c]onObjectNumberTyped[/c].[/p]
- [p]Updated [c]obj.deal(int NumCards, string Color = Colour.SeatedLabel, int HandIndex = 1, bool DealFromBottom = false)[/c][/p]
- [p]Now supports dealing from the bottom of the deck when [c]DealFromBottom = true[/c] (only works for decks).[/p]
- [p][c]chooseInHand(label, minCount, maxCount, prompt, players) -> affectedPlayers[/c][/p]
- [p][c]chooseInHandOrCancel(label, minCount, maxCount, prompt, players) -> affectedPlayers[/c][/p]
- [p][c]clearChooseInHand(players) -> affectedPlayers[/c][/p]
- [p][c]currentChooseInHand(player) -> label[/c][/p]
- [p][c]onPlayerHandChoice(player_color, label, objects)[/c] → Callback triggered when a player confirms their selection.[/p]
- [p]Added [c]Wait.collect(table expected_ids, on_finished, on_add = nil, on_error = nil) -> {table expected, table results, add(id, ...), reset()}[/c].[/p]
- [p]When the task for a given id is complete, call: [c]collect_table:add(id, ...)[/c].[/p]
- [p]The first time this happens for a given id:[/p]
- [p][c]collect_table.results\[id][/c] is set to the [c]...[/c] you passed in.[/p]
- [p]If you provided [c]on_add[/c], it is called as: [c]on_add(id, ...)[/c].[/p]
- [p]The first time this happens for a given id:[/p]
- [p]Error handling:[/p]
- [p]If you call [c]add[/c] more than once for the same id and you provided [c]on_error[/c], it is called as: [c]on_error(Wait.COLLECT_DUPLICATE, id, ...)[/c].[/p]
- [p]If you call [c]add[/c] with an id that was not expected and you provided [c]on_error[/c], it is called as: [c]on_error(Wait.COLLECT_UNKNOWN, id, ...)[/c].[/p]
- [p][c]on_finished(results)[/c] is called with the final [c]results[/c] table.[/p]
- [p][c]collect_table:reset()[/c] to zero out call counts and clear results so you can reuse the same collector.[/p]
- [p][c]storeRewindState(closure andThen, block_further_stores)[/c][/p]
- [p]Attempts to store a rewind state if there are unsaved changes, then calls: [c]andThen(success, didSave)[/c].[/p]
- [p][c]success[/c][/p]
- [p][c]true[/c] → the call completed successfully.[/p]
- [p][c]false[/c] → a rewind state could not be stored. You should always check this before continuing.[/p]
- [p][c]didSave[/c][/p]
- [p][c]true[/c] → a new rewind state was actually written.[/p]
- [p][c]false[/c] → call succeeded but there was nothing new to save.[/p]
- [p]If [c]block_further_stores[/c] is [c]true[/c] and [c]success[/c] is [c]true[/c], then no additional rewind states will be recorded until:[/p]
- [p]You call [c]storeRewindState[/c] again, or[/p]
- [p]You call [c]allowRewindStore()[/c], or[/p]
- [p]60 seconds have passed.[/p]
- [p][c]allowRewindStore()[/c][/p]
- [p]Clears the block on storing rewind states.[/p]
- [p][c]player.drawHandStash()[/c] → draws all cards from stash into hand.[/p]
- [p][c]player.setHandStashLocation(v3 position, int rotation)[/c] → set stash position & rotation.[/p]
- [p][c]card.moveToHandStash()[/c] → moves a card in hand into its stash.[/p]
- [p]Lua added an optional index parameter to [c]putObject(Obj, index)[/c]. (Feedback #659)[/p]
- [p]Fixed an issue with [c]Lua GetData()[/c] involving the new Steam IDs.[/p]
- [p]Fixed [c]JSON.encode[/c] not working correctly with Unicode. (Feedback #1263)[/p]
- [p]Revert fixing XML UI being not being clickable through objects (caused too many regressions) https://feedback.tabletopsimulator.com/2728[/p]
- [p]Fixed SSAO bug with being able to see SSAO through objects https://feedback.tabletopsimulator.com/2639[/p]
- [p]Fixed model tint color translucency, when the translucency command setting is off.,[/p]
- [p]Fixed token mesh generation for certain images type that was breaking.,[/p]
- [p]Fixed snapping preview for grid not showing rotation correctly https://feedback.tabletopsimulator.com/2726[/p]
- [p]Fixed snapping preview for rotation snap points not show correctly when spawning objects.,[/p]
- [p]Fixed incorrect random ranges for decks, mahjong tiles and dominos https://feedback.tabletopsimulator.com/2717[/p]
- [p]Fixed resolution settings in the graphics menu cutting off https://feedback.tabletopsimulator.com/2727[/p]
- [p]Fixed depth limit for JSON load to 256 from 128 https://feedback.tabletopsimulator.com/273030[/p][p][/p]
- [p]Added a 'Community Chat' button to the chat menu that opens the Tabletop Simulator community group chat on Steam. Community Chat Rules need to be accepted before you can join. [/p]
- [p]Fixed crash loading certain images (let us know if you have anymore crash events!) https://feedback.tabletopsimulator.com/2736[/p]
- [p] Fixed Custom Figurine not updating when you choose to update similar https://feedback.tabletopsimulator.com/2722[/p]
- [p] Fixed ui_toast_duration error causing the misc setting menu to not open on first click.[/p][p][/p]
- [p]Windows: [c]%USERPROFILE%\\AppData\\LocalLow\\Berserk Games\\Tabletop Simulator\\Player.log[/c][/p]
- [p]macOS: [c]~/Library/Logs/Berserk Games\\Tabletop Simulator/Player.log[/c][/p]
- [p]Linux: [c]~/.config/unity3d/Berserk Games\\Tabletop Simulator/Player.log[/c][/p]
- [p]OS version[/p]
- [p]GPU + driver version[/p]
- [p]Player.log[/p]
- [p]Workshop link (if it's mod-related)[/p]