October 30, 2019, 7:13 am

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[key] = 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 [etc] --> 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[key] = 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.
October 30, 2019, 7:13 am

Hey everyone, this is one of our largest updates yet! We've updated the game engine massively to the latest version of Unity 2019.1 which will give us overall better performance and features. There has also been an optimization pass to reduce stutter causing situations, so everything can be as silky smooth as possible. That's just the tip of the iceberg: reduced game size 4gb, AssetBundle materials, spectator camera improvements, and ton more covered below!

Unity Engine Upgrade:
  • Upgrade Unity version from 5.6.6 to 2019.1.
  • Dx11 on Windows, OpenGLCore on Mac and Linux.
  • FPS should be overall faster. Can be twice as fast in really specific scenes.
  • Physics performance improved.
  • Video textures much faster with more formats support (.m4v and .mov)
  • Incremental garbage collector greatly reduces the game's stutters.
Changes:
  • Dx9 support has been dropped (only 0.01% of players have a gpu that is only Dx9). Dx10 is minimum requirement now.
  • Windows Xp support dropped and with Steam not supporting it anymore either this isn't a surprise.
  • All custom images are now resized to a power of 2 internal, so avoid using non power of 2 images if you can. This is due to Dx11 bug this might be changed back in the future if Unity fixes this.
  • RAW cache from Images and Models had to deleted to due incompatibilities with the engine upgrade.
Known Issues:
  • AssetBundles using crunched textures will not load correctly and need to be re-exported from Unity 2019.1 with the updated Modding Project.
  • AssetBundle mesh colliders might behave differently due to physx upgrade.
New System Requirements:
  • OS: Windows 7 SP1+, macOS 10.12+, Ubuntu 16.04+
  • Graphics card with DX10 (shader model 4.0) capabilities.
  • CPU: SSE2 instruction set support.
Performance Optimizations:
  • Saving mod asset to disk is now async and will not sutter the game.
  • Greatly reduced the time it takes to destroy objects reducing the lag when changing mods.
  • Made the Games & Saved Objects menu async to fix stutters when opening them.
DLC Improvments:
  • DLC are no longer included in the game install and will be downloaded when played the first time.
  • This has reduce the install size of the game by 4 gigs.
  • We can also now update and add new DLCs without having to update the game.
  • Can now have multiple DLCs loaded up at once.
AssetBundle Materials:
  • Added support for loading AssetBundle materials into any Custom Object Image slot.
  • Create holographic playing cards or add normal maps to your custom dice!
  • Works by assigning your material to an AssetBundle and then exporting like normal.
General Improvements:
  • Custom Card added so you can create cards one at a time.
  • Added /rules to global chat which opens a link to the rules on our knowledge base.
  • Update DLC Three Cheers for master with scripted components.
  • Disabled being able to load local files with the Tablet due to javascript exploits.
  • Opening urls now only open steam links in the overlay and all others open in your default browser.
  • Secured many networking related functions from hackers.
  • Added .json to Steam Cloud upload file types.
  • Steam Cloud now supports uploading files greater than 100mb.
Lua:
  • Added filterObjectEnter(object) event: Place it on an object, and it will prevent any objects from being able to enter it. For example, placing it on a deck will not allow cards to enter it. If you return true in the function, the item will be allowed in.
XML UI:
  • Updated plugin to the latest version.
  • Can now get the click button for events like onClick with the value param passed.
  • Xml UI image assets are now no longer compressed to make them look nicer.
  • Xml UI errors now print to chat, to make it easier to debug Xml UI.
Caching Improvement:
  • Added support for adding {verifycache} in front of your urls to have the game check the last-modified header of a url to update the local cache if it is stale. Only does this check once per game session.
  • This is an advanced feature for people that want to host content on there own servers and make sure people get updates without having to change the URLs.
  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified
VR
  • Added a warning message when you do not have any control bindings (typically because you are using unsupported hardware), instructing you on how to set the bindings up in SteamVR.
  • Fixed objects not clumping when you shake the controller.
  • Fixed stack/deck grab not working with laser pointer.
Spectator Mode
  • Spectator mode now works when you use a different resolution than your main display. It has had an overhaul, and now works using these commands:
displays - Lists all available displays. ID 0 will always be your main game screen.
spectator_window - Turn on to activate the spectator window.
spectator_activate_with_resolution - Use instead of above to specify display, resolution, etc.
vr_spectator_replaces_main_window - In VR, controls whether spectator mode makes its own window or just uses the desktop mirror.
spectator_camera_follow_player - When ON the camera will follow your point-of-view.
spectator_camera_attachment - Lets you specify a component or pointer to attach camera to.
spectator_camera_follow_attachment - When ON the camera will follow the above object.
spectator_camera_dolly - When camera is following an object, it will be offset this far in the direction it is facing.
spectator_camera_offset_position - When camera is following an object it will be offset by this X Y Z.
spectator_camera_offset_rotation - When camera is following an object its facing will be offset by thus X Y Z.
spectator_camera_load - Set the camera to a saved camera position.
spectator_camera_load_zero - As above, but the position is zero-indexed (useful when coupled with certain commands like Add).
spectator_camera_smooth_on_load - Whether smoothing is applied during above.
spectator_camera_target - Lets you specify a component or pointer for the camera to track.
spectator_camera_tracking - When ON the camera will track the above object.
spectator_camera_look_at - Make spectator camera look a component or pointer.
spectator_camera_override_player_with_look - When ON the look at and track commands will work when camera is following player.
spectator_show_ui - Whether the UI is displayed on the spectator window.
spectator_post_processing - Whether post-processing effects are applied to spectator window.
spectator_camera_smooth_position - Positional smoothing factor.
spectator_camera_smooth_rotation - Rotational smoothing factor.
spectator_camera_stay_upright - When ON the camera will not go upside-down.
Example autoexec.cfg:
+spectator_window
-spectator_show_ui

# Make easier to type versions of spectator_camera_ commands.
# i.e. cam_load instead of spectator_camera_load
alias cam_* spectator_camera_*

+cam_stay_upright

# make right control have camera follow player while held
# @ makes it not output to console
bind +right_control @+cam_follow_player
bind -right_control @-cam_follow_player

# make semicolon look at object under pointer
# need to start line with > to stop <hovered> being evaluated,
# and exec to make it evaluate when activated
>bind semicolon exec cam_look_at <hovered>

# make period toggle object tracking, and comma set tracked object
bind period !cam_tracking
>bind comma exec cam_target <hovered>

# make right shift cycle through first 3 camera positions
alias next_camera add cam_load_zero 1 3
bind right_shift next_camera

# make some buttons to load specific camera positions
ui_button 1 600   0 cam_load 1
ui_button 2 600 -30 cam_load 2
ui_button 3 600 -60 cam_load 3
System Console
  • '/' commands now worked when typed into console tab
  • Fixed color command ignoring permissions
New commands:
  • chat_font_size - The size of the font in the chat windows.
  • say_global, say_game, say_team - Transmits text to specified chat channel.
  • subtract - Like add, but allows you to subtract current value from another (good for ping-ponging between two numbers).
  • vr_steamvr_bindings - Lists all current steamVR bindings.
  • ui_button - Lets you make a button on your screen which will perform a command.
  • highlight - Highlights specified component.
  • mod_caching, mod_caching_raw, mod_threading, and mod_thread_count. Last three variables are typically used as parameters in other commands, buy enclosing them with << and >>.
  • find - Call with parameters to find a component. Will then be set to that component.
  • grabbed - Equals the component you are currently holding.
  • hovered - Equals the component you are hovering over.
For example:
  • find -name "Blue Player Token"
  • highlight <>

If you want to set up a binding/alias/button in a script then you need to start the line with a >, surround the variable with < and > instead, and use exec.

>bind right_control exec spectator_camera_attachment <hovered>
Fixes:
  • Fixed blury comfirmation UI for tablet.
  • Fixed saving .rawm to disk when regular caching.
  • Fixed random sort for Games and Saved Objects is now actually working correctly.
  • Fixed custom objects not probably being positioned on the UI correctly.
  • Fixed the black background fade stuttering on when open exist to main menu window.
  • Fixed some format stuff for file browser or tooltips. Added back .jpeg.
  • Fixed line tool, including flick and joint.
October 30, 2019, 7:13 am

Hey there everyone! This is one of biggest updates yet, we have a lot of great stuff coming for you guys in this update, but we want to make sure it's stable before pushing it live. So, we are doing a public beta first and we want to hear from you about any issues!

To opt into the beta:

  • Right click on Tabletop Simulator in your Steam library.
  • Choose Properties -> Beta.
  • Then in the drop down for "Select the beta you would like to opt into:" choose "public_beta".
Unity Engine Upgrade:
  • Upgrade Unity version from 5.6.6 to 2019.1.
  • Dx11 on Windows, OpenGLCore on Mac and Linux.
  • FPS should be overall faster. Can be twice as fast in really specific scenes.
  • Physics performance improved.
  • Video textures much faster with more formats support (.m4v and .mov)
  • Incremental garbage collector greatly reduces the game's stutters.
Changes:
  • Dx9 support has been dropped only 0.01% of players have a gpu that is only Dx9. Dx10 is minimum requirement now.
  • Windows Xp support dropped and with Steam not supporting it anymore either this isn't a surprise.
  • All custom images are now resized to a power of 2 internal, so avoid using non power of 2 images if you can. This is due to Dx11 bug this might be changed back in the future if Unity fixes this.
  • RAW cache from Images and Models had to deleted to due incompatibilities with the engine upgrade.
Known Issues:
  • Due the massive engine upgrade AssetBundle are the most effected due to Unity changes you might have to re-export your AssetBundle from 2019.1 with the updated Modding Project.
  • Old AssetBundles using crunched textures will not load correctly and need to be re-exported.
  • AssetBundle mesh colliders might behave differently due to physx upgrade.
Performance Optimizations:
  • Saving mod asset to disk is now async and will not sutter the game.
  • Greatly reduced the time it takes to destroy objects reducing the lag when changing mods.
  • Made the Games & Saved Objects menu async to fix stutters when opening them.
DLC Improvments:
  • DLC are no longer included in the game install and will be downloaded when played the first time.
  • This has reduce the install size of the game by 4 gigs.
  • We can also now update and add new DLCs without having to update the game.
AssetBundle Materials:
  • Added support for loading AssetBundle materials into any Custom Object Image slot.
  • Create holographic playing cards or add normal maps to your custom dice!
  • Works by assigning your material to an AssetBundle and then exporting like normal.
General Improvements:
  • Custom Card added so you can create cards one at a time.
  • Added /rules to global chat which opens a link to the rules on our knowledge base.
  • Update DLC Three Cheers for master with scripted components.
  • Disabled being able to load local files with the Tablet due to javascript exploits.
  • Opening urls now only open steam links in the overlay and all others open in your default browser.
  • Secured many networking related functions from hackers.
  • Added .json to Steam Cloud upload file types.
  • Steam Cloud now supports uploading files greater than 100mb.
System Console:
  • Added mod_caching, mod_caching_raw, mod_threading, and mod_thread_count.
  • Added say_global, say_game, say_team commands.
  • / commands now work when typed into system console.
  • Added subtract command.
  • Renamed vr_bindings command to vr_steamvr_bindings
  • Added say_global, say_game, say_team commands.
Spectator Mode:
  • Spectator mode should be working correctly with differing monitor resolutions.
  • Added displays command, reworked spectator_activate_with_resolution command (can now specify display)
  • spectator_camera_attachment - sets component or pointer for camera to attach to.
  • spectator_camera_follow_attachment - when this is on the camera will move as if attached to above entity.
  • spectator_camera_follow_player - renamed, was spectator_camera_follow.
  • spectator_camera_dolly - distance camera is offset along the direction it is looking.
  • spectator_camera_offset_position - vector3 positional offset from attachment.
  • spectator_camera_offset_rotation - vector3 rotational offset from attachment.
  • spectator_camera_look_at - make camera look at specified component or pointer.
  • spectator_camera_target - sets component or pointer for camera to track.
  • spectator_camera_tracking - when ON the camera will constantly track the above entity.
  • spectator_camera_override_player_with_look - when ON look and track commands will override follow_player.
  • spectator_camera_stay_upright - when ON the camera will avoid being upside-down.
Lua:
  • Added onObjectTryEnter(object) callback: if present on an object then it will be called when another object would be inserted into it (like a card into a deck or a token into a bag). If it returns false then the item will not be able to enter.
XML UI:
  • Updated plugin to the latest version.
  • Can now get the click button for events like onClick with the value param passed.
  • Xml UI image assets are now no longer compressed to make them look nicer.
  • Xml UI errors now print to chat, to make it easier to debug Xml UI.
  • Fixed line tool, including flick and joint.
Caching Improvement:
  • Added support for adding {verifycache} in front of your urls to have the game check the last-modified header of a url to update the local cache if it is stale. Only does this check once per game session.
  • This is an advanced feature for people that want to host content on there own servers and make sure people get updates without having to change the URLs.
  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified
Fixes:
  • Fixed blury comfirmation UI for tablet.
  • Fixed saving .rawm to disk when regular caching.
  • Fixed random sort for Games and Saved Objects is now actually working correctly.
  • Fixed custom objects not probably being positioned on the UI correctly.
  • Fixed the black background fade stuttering on when open exist to main menu window.
  • Fixed some format stuff for file browser or tooltips. Added back .jpeg.
  • Fixed line tool, including flick and joint.
October 30, 2019, 7:13 am

Oh my! More optimizations are always nice, as the community continues to produce fantastic and more technically complex creations. But if you’re hungry for a new feature, we hope you’ll enjoy the new Video Images, which allow you to use videos as textures for assets. Plus, a long requested feature: Spectator Mode! Whatever your taste, we think this patch has a little something for everybody.

Loading Improvements:
  • Overall loading should be much faster and smoother than in the past!
  • New image caching folder “Images RAW” that stores .rawt files to speed up loading by up to 20 times.
  • General optimization to use less memory when loading your games up.
  • Greatly reduced custom image ram usage by ~50%.
  • AssetBundles now load in async and with less stutters.
  • Loading generates much less garbage for the garbage collector to clean up to reduce stutters.
  • Fixed normal maps for Custom Models not working correctly and being slow.
  • Better error handling when trying to load assets with an unsupported file type.
  • Added CMYK JPG detection to avoid game crash.
Video Images:

https://giant.gfycat.com/RightJointAchillestang.webm

  • Enjoy animated textures for you assets or play jigsaw with animated video!
  • Import videos (.mp4 and .webm) into the image slot on any custom asset. Note: Linux does not support .mp4.
Graphics:
  • New sharpen post processing to enhance the overall clarity of the game.
  • Configuration graphic changes are instant now without having to hit apply.
Improvements:
  • Reduced CPU usage when lots of objects are loaded up.
  • Added game load time to system console.
  • Optimized DLC Cosmic by removing all the extra scripting zones from each expansion.
  • Added console commands rewind_interval and unload_interval.
Scripting:

There's now a way to interact with Unity's built in components using this new API. You can control all aspects of your assetbundles for example changing the light settings, all from Lua. You can read more about it on the API page. self.getComponentInChildren("Light").set("intensity", 20)

Object and GameObject:
  • getComponent(name) return Component
  • getComponents(optional name) return Component[
  • getComponentInChildren(name) return Component
  • getComponentsInChildren(optional name) return Component[
  • getChild(name) return GameObject
  • getChildren() return GameObject[
  • name return string

Component:

  • game_object return GameObject
  • get(varName) return value
  • getVars() return Dictionary<string Name, string Type>
  • set(varName, value) return bool
  • name return string
Scripting Fixes:
  • Fixed Component UI menu triggering onObjectDestroy lua events.
  • Fixed XML UI syncing issue for connecting players.
Spectator Mode
  • Spectator mode provides a second fullscreen viewport to be used for streaming / recording. The UI can be shown or hidden on it, and its camera can follow your own or be set to any stored position.
  • Spectator mode requires a second monitor to display on. If you only have one physical monitor then you can use something like spacedesk.net to get around this limitation.
  • Spectator mod is controlled via the following console commands:
spectator_window - turn on to activate the spectator window
spectator_show_ui - whether the UI is displayed on the spectator window
spectator_camera_follow - when enabled spectator camera will follow your view
spectator_camera_load - set spectator camera to a stored position
spectator_camera_load_zero - same as above, but zero-indexed (so 0 = slot 1, 1 = slot 2, etc.)
spectator_camera_smooth_position - factor used to smooth spectator camera movement
spectator_camera_smooth_rotation - factor used to smooth spectator camera rotation
spectator_camera_smooth_on_load - when enabled smoothing will be applied when loading camera positions as well as when following player
spectator_post_processing - whether post-processing effects are applied to the spectator window
vr_spectator_replaces_main_window - in VR, controls whether spectator mode makes its own window or just uses the desktop mirror.

Example autoexec.cfg:

 +spectator_window
 -spectator_show_ui
 +spectator_camera_follow
 spectator_camera_smooth_position 0.1
 spectator_camera_smooth_rotation 0.1

# set right control key to toggle player follow
 bind right_control !spectator_camera_follow

 # set space to make spectator camera follow player while it is held down
 # @ = silence command in console
 bind +space @+spectator_camera_follow
 bind -space @-spectator_camera_follow

 # set keys to jump to specific camera positions
 bind comma spectator_camera_position 1
 bind period spectator_camera_position 2
 bind semicolon spectator_camera_position 3

 # set right shift key to cycle through the first 3 camera positions
 alias next_camera add spectator_camera_position_from_zero 1 3
 bind right_shift next_camera
Fixes:
  • Fixed memory leaks with custom assets when changing urls on an already loaded custom object.
  • Fixed ui search overlapping issues.
  • Fixed with hackers being able to delete objects without being admin.
  • Fixed hand zones not working on colliders that where child objects.
  • Fixed flick tooltip showing garbage.
Custom Model Loading:

Speed up loading of cached models by up to 20 times with new .rawm format and "Models Raw" folder. This uses the same principle as the what we've done to the images to speed up loading of your .obj files.

Spectator Mode:
  • Added spectator_activate_with_resolution command.
  • Fixed spectator window freezing after returning to main menu.
  • Fixed post processing on spectator window.
Fixes:
  • Fixed scroll bar in Configuration > UI > MISC.
  • Fixed normals maps not working with non square images.
  • Fixed issues with XML UI rich text.
October 30, 2019, 7:13 am

This patch is filled to bursting with general improvements that you, the community, have been asking for. Better Fog of War, useful scripting additions, better VR, game chat announcements of clearing and measurements, Jigsaw puzzle improvements and MORE! If you don't see the improvements you were hoping for in this update, we're still hard at work on even more improvements for the future!

Jigsaw Puzzle Improvements
  • The game can now detect if the jigsaw puzzle is complete.
  • The "Shuffle" and "Check" commands can be found if you right-click on the puzzle box.
  • The UI that opens when a new puzzle is created now remembers the settings you used on your last puzzle.
  • Pieces will rotate to nearest 90-degree rotation when snapping in place.
Improved Fog of War
  • Higher maximum reveal range!
  • Field of View (and field of view offset) added!
  • You can cause items in the Fog to become hidden again if a "reveal" moves off of them. This works like Fog of War in many RTS games. You can enable this feature by right-clicking the Fog of War Zone with the Fog of War Zone Tool and enabling it.
  • Some performance improvements have been made as well.
  • Revealer Objects can now also be hidden from each other.
Miscellaneous Settings Menu

Some new features, as they are worked on, do not have their own UI menu yet. We've got them collected in the "MISC" setting menu!

  • To locate the menu, go to: "Configuration > Interface > Misc..."
  • Tweak the camera rotation speed.
  • Hide VR players.
  • Center on mouse when zooming.
  • Switch from "inches" to "metric".
  • You will see some other patch notes that mention the "MISC" menu. They can be modified here as well.
General Improvements
  • If you press a number key when over a single card, it will draw that single card (like it would if the card was part of a deck).
  • You can shuffle cards in your hand by highlighting the ones you want to shuffle and clicking R.
  • Dice rolling in high-gravity rooms has been improved.
  • New "Sort" categories have been added to various menus. "Classic" now has "Last Played", "DLC" now has "Purchased", and "Workshop" now has "Downloaded".
  • When you open the search menu, the keyboard cursor will jump up to the Search box. This is so you can just start typing to begin a search, rather than needing to click in the "Search" text box.
  • Both "Previous State" and "Next State" options have been added. They have keyboard shortcuts, PgUp and PgDn by default. You can change which keys scroll through the states of an object in the Configuration menu. You can change if they wrap (the last one leads back to the first) in the Misc menu.
  • The line tool is now able to log its measurements, printing them to the Game tab. This is off by default, but can be enabled in the Misc menu.
  • Server Browser sorting now works during the refresh.
  • You can now use Ctrl-F6 to toggle all UI panels on/off.
  • The tablet should now work on Linux. This is experimental.
  • The on-screen hand interaction area is now much smaller if nothing is currently in the hand to avoid accidental interactions.
  • Added chat message notifying if someone deletes all vector lines, 3d texts, or decals.
  • You can now Shift+F keys to cycle through your tools in reverse order.
  • The version number on the bottom right of the main menu is now click-able to bring up patch notes.
  • Fixed objects getting stuck above tiny play areas.
Scripting
  • Added group(table). This allows you to group a table of objects, in the same way the "G" key would for a player! It returns a list of the grouped objects.
  • Added addDecal(table), getDecals(), and setDecals(table). Now scripting can add decals into the game world.
  • Added object.getJoints().
  • When a table of parameters for a joint is returned, it now includes joint_object_guid. This is the GUID for the object which is attached by the joint.
  • Added desired_position to the list of parameters returned by .getCustomObject() when it is used on a Jigsaw Puzzle piece. This parameter is the "solved" position for the piece.
  • New Time class added, used to easily fetch information like os.time(), but also other informations like time passed since last frame, total frames passed, etc.
  • pingTable(vector) added to the Player class. Now a script can emulate a player pinging.
  • Added setComponentVar(componentName, varName, value) and getComponentVar(componentName, varName) as an object function. This allows you to access components that you have made part of your AssetBundle via scripting. For example, changing lights or colliders on the fly. These functions will also work on the components of default objects like "Collider" and "Light".

You can find details and examples for these, and all of Tabletop Simulator's functions, in the Tabletop Simulator API.

Bugs Fixed
  • Scripting can now properly read whose turn it is (according to the Turns system).
  • Fixed custom objects in scripting zones failing to trigger events.
  • Fixed items that are hidden being revealed for a frame when switching states.
  • Prevented "scaling permission" pop-up when using Vector paint.
  • Removed Grey player's ability to delete notebook pages.
  • Improved snapping for very small and very large objects.
  • Thief animation fixed. (poor little guy gets sick during Unity changes for some reason)
  • Fixed shuffling deck from right-click menu not triggering OnObjectRandomize.
  • Fixed collisions trigger when loading custom objects.
VR

Keep tabs on VR improvements on the discussion page.

VR Improvements
  • Updated to SteamVR action+binding system.
  • VR controllers can now act as a joypad for control binding; turn on Joypad Emulation in the VR settings, and make sure the Controller option at the bottom of the Controls window is ticked.
  • Using above, most normal control bindings should work where approriate in VR (e.g. Copy, Paste, Flip, etc.)
  • Can now attach the VR UI screen to a controller: rotate your wrist as if you were looking at your watch.
  • Added Drawings, Text, Gizmo, Snap, and Decal tools.
  • Fixed Zone tools, Line tool (displays measurement, arrow ping).
  • Fixed objects (such as chess pieces) warping into upright rotation on grab (now smooth-moves).
  • Trigger Click Effect now known as Orient Object.
  • Orient Object action should now work on all card-like objects (dominos, mahjong tiles, etc). Also works on jigsaw pieces: will rotate them to next 90-degree angle.
  • Fixed snap points.
  • Made resize room visual effect less opaque.
  • Fixed non-hands objects being picked up by VR virtual hand.
  • Fixed tooltips & icons on Oculus Rift.
  • Pad bindings now use compass notation (i.e. vr_left_pad_north = left controller, up on pad)
VR Settings
  • Physical UI Screen, Attached UI Screen, UI Scale - Control how the VR UI Screen is displayed.
  • Display VR Players - Can select whether other VR players are visible (off, hands-only, hands+headset)
  • Wall mode - will rotate room so the table is vertical.
  • Align Zoomed Object - Zoom object now matches rotation of the object it is displaying.
  • Grabbing Hides Gem - Hides controller gem when holding on object.
  • Hover Tooltips - Display UI hover tooltips above controller.
  • Interface Click Threshold - When the interface click action is bound to an analog input it will use this value.
  • Laser Activation Threshold - When laser activation is bound to an analog input it will use this value.
  • Laser Beam Thickness, Laser Dot Size - Control how big the laser pointer is.
  • Left Tool Hotkeys & Right Tool Hotkeys - Bind the default tool select hotkeys to the pad.
  • Tooltips Action Enabled - Can be turned off here to disable tooltips (instead of having to unbind the action).
  • Floor of mist - change the floor.
Console Commands

All New Console Commands

camera_clear_saved_positions
camera_load_rotation_rate
camera_restore_saved_positions
camera_store_saved_positions
component_default_autoraise
component_default_grid
component_default_hands
component_default_ignore_fow
component_default_reveal_fow
component_default_snap
component_default_sticky
component_default_tooltip
component_override_defaults
component_state_wrapping
drawing_erase_all
drawing_render_fully_visible
dice_roll_height_multiplier
jigsaw_randomize
jigsaw_validate
measure_in_metric
measure_logging
mouse_wheel_zoom_and_center
sendkey
ui_config_misc
ui_panel_chat
ui_panel_main
ui_panel_notepad
ui_panel_player
ui_panel_tools
vr_display_network_players_off
vr_display_network_players_hands
vr_display_network_players_all
vr_grabbing_hides_gem
vr_hover_tooltips
vr_interface_click_threshold
vr_left_controller_bind_tool_hotkeys
vr_mode_display_network_players
vr_mode_ui_attachment
vr_joypad_emulation
vr_laser_activation_threshold
vr_laser_beam_thickness
vr_laser_dot_size
vr_right_controller_bind_tool_hotkeys
vr_tooltips_action_enabled
vr_ui_attach_left
vr_ui_attach_right
vr_ui_detached
vr_ui_floating
vr_ui_scale
vr_ui_suppressed
vr_wall_mode
vr_zoom_object_aligned
Renamed Console Commands
vr_trigger_click_effect_delay -> vr_orient_object_delay
vr_thumbstick_repeat_duration -> vr_interface_repeat_duration
Removed Console Commands
vr_cards_held_like_in_hand
vr_tooltips_when_gripping
vr_trigger_activates_laser
vr_trigger_activates_ui
vr_trigger_click_effect
October 30, 2019, 7:13 am

It has been a while since the last update, because we've been plugging away at making it a big one. Fog of War, Play Area control, Line Tool improvements, Additive Loading, VR Improvements, and much of it covered in our brand new Knowledge Base. Oh my!

Fog of War:
  • Found under the Zone tools, Fog of War acts similarly to a hidden zone, with the zone hiding objects that are within it.
  • You can right click any object to enable "Reveal Fog Of War" in its Toggles menu. This object now reveals fog, instead of being hidden inside of it.
  • Right clicking it again shows options for visibility range as well as what color objects are revealed for.
  • The piece reveals area of the fog, which is represented by a black plane.
  • Did we mention it can be accessed via scripting? See below.
  • GM (black seat) players can see everything in the fog.
  • Objects also have a "Ignore Fog of War" toggle, to disable the hiding effect on that piece.
  • All "Boards" are unaffected by fog, and are still visible. You can set your Custom Models or AssetBundles to be "boards" if you want them visible as well.
  • Read about other options and system details on the Zone Tools section of the new Knowledge Base.
Play Area:
  • Want the camera to move further from the table? Or not be able to? Play area lets you set that distance limit.
  • Use this to make a small room that the player can't sneak out of.
  • Use it to make even BIGGER setups.
  • The setting can be modified under Options at the top of the screen, then under the Game settings.
Improved Line Tool:
  • Your measurements with the line tool are now visible for all players!
  • The line never covers the number.
  • It is not blurry. What more could you ask for from a line?!
Additive Load:

When in the Game menu, when clicking the 3 dots that appear in the upper right of a Game when you go to select it, you will see a new option: Additive Load.

  • Clicking this option causes all of the game pieces from the save to be loaded into your CURRENT game.
  • So all your current game objects remain where they were and the ones from the save you Additive Loaded from will appear as well.
  • An ideal use for this is to save different dungeon/map setups, then load them into your current game after clearing space.
New Knowledge Base:
  • The old Knowledge Base was built to explain the many systems in Tabletop Simulator.
  • A replacement for the old Knowledge Base, the new Knowledge Base has a fast, much more modern setup.
  • It is patterned on the update API.
  • There have been some additional documents created, updates to classics and more.
  • It also allows you to submit improvements via GitHub.
VR Improvements:

On-Screen Keyboard:

  • Turn on in Interface settings. Displays an on-screen keyboard - mainly for use in VR (makes searching a lot easier). Can be toggled in VR with button on right of screen.

VR Settings UI:

  • You no longer need to use console commands to configure your VR experience.
  • Accessible through Interface settings, or in VR with button on right of screen.
  • Added setting to disable displaying network player VR peripherals; accessible in VR settings or via console command vr_display_network_players
  • Added settings for how selection works: either a box with a fixed height (as it has been), a box exactly as you draw it, or a box anchored to the table surface.
  • Long hover tooltips now wordwrap.
System Console:

A number of commands are now persistent: you do not need to add them to your autoexec to set them at startup; instead they will remember their setting between sessions. help will show which commands persist.

New Commands:
reset
ui_config_vr
ui_keyboard_default_state
ui_keyboard_show
ui_keyboard_scale
ui_keyboard_echo_duration
vr_display_network_players
vr_mode_selection_style
vr_selection_style_anchored
vr_selection_style_exact
vr_selection_style_fixed
Scripting Changes:

Not as much here as in some other patches. But we made sure you had access to some of the new toys.

  • Added Physics.play_area
  • Added object.setFogOfWarReveal(table)
  • Added object.getFogOfWarReveal()
  • Added object.ignore_fog_of_war
  • Read more about these in the API.
Bug Fixes:
  • Peeking cards no longer causes their name/description to become available for all players to see for a few moments.
  • Improvements to the console's color changing commands to prevent abuse.
October 30, 2019, 7:13 am

Hey everyone got meaty patch for you guys this time focusing on improving the drawing tool with improved visuals and functionality. We also got a plethora of great VR improvements that can be seen below like virtual hands. Also like normal we got a bunch of great scripting improvements.

Drawing Tool
  • Sharper less blurry look.
  • Added line, box, and circle tool.
  • Can now control thickness using +/-.
  • Added draw indicator to easier to see where you will be drawing.
  • Can now draw on any angled surface on objects.
  • Pixel paint removed.
  • Fixed up bugs plaguing lines on objects.
General
  • Added Steam rich presence to see what games your friends are playing and if there is any room!
  • Server browser now streams in results instead of in one big chunk.
  • You can stop this refresh by clicking the refresh again.
  • Raised max packet size from 1 mb to 10 mb allowing you to load larger save files when promoted.
  • Input fields are now auto selected for popup dialogs.
  • Removed "Hacking in Unity" discord message.
  • Objects will now have their face hidden while face-down (set per object, defaults to on for objects such as cards / decks / dominos)
  • Rotation Value identifiers which begin with # will not be displayed in tooltip.
  • Tutorial now always uses Museum backdrop (as it has good text contrast)
Scripting

Updates to the new Wait class:

  • Added repetitions to Wait.time to better emulate Timer. Wait.time(func, time, number_repetitions).
  • Using -1 will cause infinite repetitions
  • Improvements to stop() so it should work more as expected.

Returns from getObject and getStates improved to a common standard, includes:

  • Name and Nickname
  • Description
  • Lua Script and Lua Script State

New Object functions:

  • obj.drop() causes the item, if held by a player, to be dropped.
  • setHiddenFrom(players) Hides objects from a specific player/players. Uses "hand zone" hiding.
  • setInvisibleTo(players) Hides objects from a specific player/players. Uses "hidden zone" hiding.
  • attachHider(...) and attachInvisibleHider(...) are more advanced version of
  • setHiddenFrom and setInvisibleTo, there to help handle complex situations easily.
  • Old Object Functions (with new features!)
  • setRotationValues() now allows you to start a name/value with a # and it won't display the value in the tooltip.
  • randomize(color) Now an optional string can be added so that
  • onObjectRandomized will trigger, indicating that player color triggered it.

New base function:

  • get/setVectorLines() Allows for lines to be placed via scripting using the new vector line tools`
  • New Spawnable object: Custom Decks!
  • Technically this was added before, but now it works and is documented!
  • Spawn using spawnObject then set it using setCustomObject
  • Clarifications to the Object class
  • Some functions, let setSnapPoints or call, work on both Object and Global.
  • To highlight which Object functions can be directed at the game world, they have been broken out on the Object page into a "Global Functions" section.

New Object member Variables

  • use_rotation_value_flip can be used to modify which direction objects flip.
  • is_face_down determines if an object's "face" is pointed down (like with cards). The face is the direction that faces the positive Y value.
  • hide_when_face_down hides an Object when it is face-down. Objects are hidden like if in a hidden zone. The face is the direction that faces the positive Y value.

New Event

  • onObjectEnterContainer has long been a requested event, and it is now available!
VR
  • New virtual hand feature that lets you interact with your hand just like if it was attached to your left controller.
  • Click trigger while holding a card to straighten it and hide it from other players. Click again to toggle.
  • When you pull an object out of the search inventory (for example, removing a card from a deck) it will appear at the controller tip, and be grabbed if possible.
  • Improved controller tooltips.
  • Tooltip showing click button for Vive on main menu.
  • Fixed VR tutorial.
  • Flick and Line tools now working properly.
  • Reduced jitter on scale + rotate.
  • Up no longer defaults to teleport (but that can be re-enabled with vr_teleport_with_pad)
  • Down on pad now defaults to Zoom, on both controllers.
  • Pad now has context commands when hovering over objects.
  • Lots of other VR changes/improvement that can all be found here.
Stats Monitor
  • Added a stats monitor for fps, memory, and sound.
  • Activated with stats_monitor console cmd.
Fixes
  • Fixed auto raise over tablet freaking out.
  • Fixed input bug spamming hotkeys into input fields when first selecting.
  • Fixed locking object while it then unlocking it dropping through world.
  • Fixed splitting into 10 decks merges some of the decks.
  • Fixed decal on flipped cards bug.
  • Fixed vector, decals, infinite bags hiding bugs.
  • Fixed onscreen hands not showing decals and vector lines.
  • Fixes convert URL to steam cloud now works on UI custom assets.
  • Fixed string size limit over the network being increased for large xml.
October 30, 2019, 7:13 am

Hey we got another great patch for you guys today with a ton of great scripting changes, give host, and a brand new file browser!

Give Host:
  • Allows the host of game to pass the hosting off to another player that is connected to them.
  • The selected player will receive a confirmation dialog to accept the new host and can accept or decline.
  • If accepted all players will disconnect and then have the choice to reconnect to the new host in the exact same setup and layout they were just playing in.
  • Everything will be preserved from the previous host.
New File Browser:
  • Brand new file browser.
  • Can search and favorite folders to easily find your assets.
  • Works in VR now.
Split & Cut:
  • New split added to contextual menu that let's you split a deck / stack in a certain number of stacks.
  • Cut has been improved by letting you choose at what proportion you want to split the deck / stack.

Scripting Improvements:

Lua

putObject() now returns an Object.

  • Using it to combine two cards will return an object reference to the newly formed deck.
  • Using it to put an object into a container/stack/deck will return the container/stack/deck it was made part of.
New class Notes
  • Contains notebook and set/getNotes functions.
  • Deprecated the old "Base" versions of these functions.
New class Wait
  • This new class allows you to easily trigger functions after some form of delay.
  • Contains frames, time, condition, and stop functions.
  • Deprecated Timer class entirely.
New Object functions
  • obj.cut(int) - Cuts a deck at the given card index.
  • obj.split(int) - Splits a deck in a number of stacks.
  • obj.getRotationValue - Returns the current rotationValue of an object (see: gizmo tool).
  • This function existed previously, but was not documented.
Event Functions
  • Added onObjectPeek(object, player) - Triggers when peek is used by a player.
  • Added object.onPeek(player), object.onRandomize(player).
Misc
  • Player Color strings convert automatically
  • Example: printToAll("Hello", "Green").
  • Snap points created on objects use Vectors local to the Object, rather than global.
  • This applies to both position and rotation.
  • Fix for optional parameters of spawnObjectJSON().
  • Fix motor_force not working on jointTo().
New Object Member Variables
  • loading_custom - Indicates if the assets of a custom element are being loaded.
  • spawning - Indicates if any object is currently in the process of spawning.
  • These are helpful to determine if elements are loaded into the game fully
  • Especially useful with the new Wait class!
Callback Changes
  • Callbacks are being overhauled to use brand new syntax where you directly pass the function instead of the function string name, function owner, and params.
  • Ex: Wait.time(|| print("Done"), 1) or Wait.time(function() print("Done") end, 1)
  • Effected are spawnObject/Json(), takeObject(), and Webrequests.
Custom UI:

New Lua function:

  • UI.setValue(string id, string value) - Updates the value that appears within element tags {>>(ex: THIS)<<}
  • UI.getValue(string id)- Obtains the value that appears within element tags {>>(ex: THIS)<<}
  • Both support Rich Text!
  • Added get/setCustomAssets() with keys named and url.
  • New InputField attribute placeholder- Greyed out text that appears in the input if there is no text present.
Chat Improvements
  • Added optional timestamps for chat found in chat settings.
  • Improved black outline around text in chat.
  • Numbers in chat are now monospace.
Onscreen indicators
  • Added on screen indicators to the edge of the screen for ping arrow and peek icons.
  • Never miss a notification because you were looking at the wrong direction.
UI Improvements
  • Add clear input x button to all search inputs.
  • Added a scale animation to popup menus.
  • Added a safe guard to restore UIs dragged off the screen.
VR Fixes:
  • VR Beta info & settings (+how to revert to original controls)
  • Fixed cards and decks rotating on pickup.
  • Fixed zoom scale speed being framerate dependent.
  • Fixed Custom Xml UI not working.
  • Fixed file browser not working.
October 30, 2019, 7:13 am

Hey everyone we got another great patch for you guys focused on a broad range of things, but a lot had to do with spring cleaning and keeping everything running great. We got a couple of great Custom Xml UI examples below to help you started getting your feet wet. They are also very functional and could be useful for your games.

Xml UI Example:

Score Tracker https://steamcommunity.com/sharedfiles/filedetails/?id=1415879101 Dice Roller https://steamcommunity.com/sharedfiles/filedetails/?id=1393821479

General:
  • Flip now actually flips the dice instead of increasing the number value (rotate right still does this).
  • Optimized away all garbage allocation per frame to improve overall smoothness.
  • Optimized 2D UI rendering to be more performant.
  • Overall lots of code cleanup to improve our workflow in the future.
Xml UI:
  • Visibility attribute now supports admin, host, and team names.
  • Clicking button won't block your hotkeys anymore.
  • Added getXmlTable() setXmlTable().
  • Fixed onValueChanged recursive event loop.
  • Fixed setAttribute() not working if it thought there wasn't a change.
  • Fixed not being able to setXml() with an empty string.
  • Fix support for RichText in Get/SetXmlTable().
  • Fixed zombie Xml UI when opening File Browser.
Scripting:
  • Added Player.getAvailableColors() and Player.getColors().
  • Added SetSnapPoints() and GetSnapPoints().
  • Added JointTo().
  • Lots of scripting improvements to make it easier to convert between Lua Tables and C# types.
  • Fixed Hotseat crash when using scripting input fields.
  • Fixed camera triggering scripting zone.
  • Fixed Turns.getNextColor() returning name instead of color.
Permissions:
  • Added feedback with a onscreen popup warning when trying to do
  • something that is blocked by a permission.
  • Permission save objects / saves to block saving objects to chest.
  • Permission peek to block alt+shift looking at the backside of an object.
  • Permission nudge to disabling all nudging with N.
External API:
  • Atom will now warn you when you try to Save & Play after creating an object in TTS without saving.
  • Lua error reporting improved.
  • Various fixes.
VR:

Zoom object: by default bound to pad-down on the left control. Touch it to display the last examined object (with either controller). Click it to lock in this mode; click again to exit. While locked, pad-left and pad-right will scale the object. Fixed rift hotkeys.

New commands:
vr_left_hand_pad_down_bindable
vr_left_hand_pad_down_zoom
vr_left_hand_zoom_scale
vr_right_hand_pad_down_bindable
vr_right_hand_pad_down_zoom
vr_right_hand_zoom_scale
October 30, 2019, 7:13 am

This section includes 10.6.1 & 10.6.2

Hey everyone we got another patch for you guys today focused on improving the new Custom UI by adding the ability to attach them to 3d objects in the game. Also many VR Improvements especially for Oculus. Last and not least a new looking for players indicator on the server browser.

Custom UI
  • Supports 3D UI attached to Objects.
  • Each object can have its own assets (images)
  • UI.getXml() and UI.setXml() added, allows for dynamic UI creation from a string. Expect more ways to dynamically spawn to added in the future.
  • Click sounds added for the UI.
  • Player colors now match TTS colors. For example, "red" is now equivalent to the player color red exactly.
  • Dragging is improved so the element doesn't snap to its rectAlignment when dragged.
  • Fixed changing active attribute from scripts the visibility attribute would sometimes not work correctly.
  • Added position attribute and fixed rotation to work like you would expect.
  • Scale of onscreen UI based on resolution height instead of width.
  • Custom UI hides correctly whenever there is a popup dialog.
  • Scripting editor now has two modes Lua and UI that let you edit their respective scripts per Object or Global.
VR Improvements
  • Fixed grabbing objects messing with rotation.
  • Selection box will use laser position if laser is on.
  • Fixed selection box placement bug.
  • Added icon showing current tool mode.
Fixed Rift controls:
  • Gem now defaults to angled and is better positioned
  • Trigger activates laser and UI objects
  • Stick controls activate properly (teleport works on click, rotation will repeat on hold)
  • Stick UI becomes visible when stick touched.

New console commands:

vr_card_in_hand
vr_laser_beam_opacity
vr_laser_beam_visible
vr_mode_icon_colored
vr_thumbstick_icons_constant
vr_thumbstick_repeat_duration
vr_trigger_activates_laser
vr_trigger_activates_ui
Looking For Players
  • New looking for players indicator on the server browser. This will be default on for all servers.
  • This can be changed in game by going Options -> Server.
  • Can also be set from scripting with setLookingForPlayers(bool).
General
  • Updated to Unity 5.6.6.
  • Fixed thumbnail preview image causing image to being lower resolution than it should in the world.

v10.6.1

General:
  • Adjusted hardware mouse pointer position to be more accurate.
  • Looking for players icons desaturated and reversed the sort.
  • Fixed issue if you have a corrupt BlockList.json it would stop you from being able to connect to a server.
Xml UI:
  • Added getXmlTable() and setXmlTable() for dealing with Xml easier with Lua tables.
  • Changed setXml() from changing the actual Xml for the save file so everything is runtime changes only.
  • Changed getXml() to return the current Xml string including any runtime changes from setAttribute().
  • Fixed event recursion causing a potential lock up.
  • Fixed setXml() not working with empty string.
Scripting:
  • Added a 'debug_external_api' console command to show logging for external api messages.
  • Fixed logging an empty table throwing null.
VR:
  • Changed vr hotkey defaults.
  • Fixed current tool icon animating unduly.

v10.6.2

Xml UI:
  • Changed UI.getXmlTable() properties to be lowercase and change text to value.
  • Fixed issue with UI.setXml().
  • Fixed issue visibility and late joining players.
October 30, 2019, 7:13 am

This patch includes creating Custom UIs using Xml giving you the power of Unity's UI system with an easy to use format. We also have a brand new API documentation that is much more feature complete with examples and better looks. Can be found here: https://api.tabletopsimulator.com/

Read about the new VR Controls at the bottom of the patch notes!

Custom UI
  • Custom UI added using Xml.
  • Gives the power of Unity's UI system.
  • Docs can be found here: https://api.tabletopsimulator.com/ui/introUI/
Scripting
  • object.randomize (or shuffle/etc) now returns 'true' if shuffle occurred. For example, a deck currently being searched by a player will not shuffle, so 'false' is returned.
  • Added search events: onObjectSearchStart, onObjectSearchEnd, onSearchStart, onSearchEnd
  • Button callbacks now have a third parameter which will be set to true if the button was right-clicked or long-pressed.
  • createButton now lets you specify 'hover_color' and 'press_color'
  • Added getJSON() to Object and spawnObjectJSON() this is the same format as Objects are saved in the save files.
  • Turns class added to let you controls the turns menu from scripting.
  • Event onPlayerTurn(player) added.
Voice Chat
  • Team icon is now working.
  • Updated to latest version of voice chat.
  • Fixed more bugs with Voice Chat.
Fixes
  • Fixed items appearing faded in Search window.
  • Fixed Search window not working in VR.
  • Fixes to cosmic encounter.
VR Controls Update

The goal is to provide a more intuitive VR experience; closer to how you would play a board game IRL. This is still in development, feel free to leave us your feedback about how it feels! To enable the old control scheme type +vr_controls_original into the system console.

Note

Various commands in the system console govern vr behaviour: type help vr to see them. For example, turning 'vr_sticky_grab' on will mean you do not have to hold the trigger to maintain grip on an object; instead you press to grab, then press again to release. If you want these commands to persist then add them to your autoexec (type 'edit autoexec' and enter them there).

You can quickly switch between old and new controls if you do something like 'bind right_control !vr_controls_original' (...you can then hit right control to toggle)

Changes
  • Laser pointer now turns on and off as the player touches the touch pad, and is oriented like a pointer rather than a gun (it now matches the default steam keyboard laser).
  • Selection box now drawn from controller position instead of laser position.
Controls
Touchpad when not holding an object:
  • Center = click (buttons, UI, etc.)
  • Up = teleport
  • Left & Right = Mapped tool. Hold left or right to bind current tool to that button.
Touchpad when holding an object:
  • Center = flip
  • Left & Right = Rotate
  • Grip buttons now let you move (holding one controller) or rotate/scale (holding both). Holding any grip button will display control layout.

  • Holding menu button will reset your position.
  • Trigger now used exclusively to interact with 3D world
Advanced
  • The touchpad controls when not holding an object are set using the console bind command, and can be overwritten, so you can bind any command you want to the touchpad if you wish (left, right, and up if you disable teleport; down and center are reserved). For example: 'bind vr_right_pad_left !vr_laser_constant' will toggle the laser on and off when you hit left on the right controller's touchpad. You can use -, +, and ! bind prefixes to bind to press, release, and long press respectively. Use 'vr_unbind_all' before binding your own to remove the default bindings.

Example autoexec

-vr_controls_original
vr_unbind_all
bind +vr_right_pad_left tool_grab
bind -vr_right_pad_left tool_revert
bind +vr_right_pad_right tool_paint
bind -vr_right_pad_right tool_revert

This will mean for the right controller, as long as you hold the left pad you will be in grab mode, and as long as you hold the right pad you will be in paint mode.

October 30, 2019, 7:13 am

This is our first update in 2018 and while this patch may not seem too exciting, it’s because we spent a lot time cleaning up underlining code to facilitate better updates for the future. We hope you do like any of the changes and updates that have been added thus far.

A big thing we’ve added to TTS is Discord integration, so you can see what game your friends are playing, what they are hosting and the number of seats available, and much more. Hope you enjoy!

Discord Integration
  • You can now click on a user in Discord and see what game they are playing within TTS.
  • You can see when players are hosting a game, the number of seats available and their color.
  • You can also see how long that particular session has been going as well as if they are in singleplayer or multiplayer.
DLC Battle For Souls Update
  • Fixed bouncing rulebook when changing states.
  • Added info to the Notebook.
  • Made background objects non-interactable.
Scripting Improvements
  • Added custom deck setCustomObject() and getCustomObject() support.
  • Fixed takeObject() collision issue with concave colliders.
  • Fixed sync input fields on late joining people.
  • Fixed null reference with Player.getSelectedObjects().
  • getCustomObject() will return a list of these keys because it could be multiple decks combined:
  • string face, bool unique_back, string back, int width, int height, int number, bool sideways, bool back_is_hidden
Chat Improvements
  • Added a ‘System’ tab console (icon is a tilde ~).
  • This gives better user experience with errors and reports for players.
  • Color of chat window will be different to differentiate between this tab and the others.
Hotkey Improvements

Added hotkeys to toggle UI elements on and off:

  • ctrl-f1: Tools
  • ctrl-f2: Top Menu
  • ctrl-f3: Players
  • ctrl-f4: Notepad
  • ctrl-f5: Chat
Improvements
  • You can now modify custom decks with by reopening the custom menu.
  • Enter key now works in password dialog.
  • Duplicate errors logged to any chat tab now collate, rather than spamming the chat box.
Fixes
  • Fixed issue with Text editor text invisible when it has too many characters.
  • Fixed bug with 3d pointer sometimes not showing up onscreen hands.
  • Fixed DLC custom assetbundle textures not getting converted correctly by making the secondary bundle load first.
  • Fix chat settings and host server UI overlap.
  • Fixed chat yellow indicator disappearing for all tabs when changing tabs.
  • Fixed global chat history being lost when exiting to main menu.

v10.3.1

  • Had to reset saved settings to fix keybind issue.
  • Fixed system console hotkey activating when typing in input field.
  • Fixed being unable to rebind the system console hotkeys.
  • Fixed translations being activated when they aren't ready.
  • Fixed lua takeObject() breaking with grid and snap points.
October 30, 2019, 7:13 am
External Editor:
  • ASCII to UTF8, atom will work with all languages now.
  • Save file path added sent to external editor.
  • Added sendExternalMessage(Table) and event onExternalMessage(Table).
  • Added remote script execution from external editor.
Scripting:
  • Added Playercolor.getHoverObject()
  • Added static WebRequest class
  • Global script now has self, which is just the same thing as Global.
  • takeObject() now default smooth moves objects unless you supply smooth = false
  • Added sound property to spawnObject() to disable spawn sound.
Global Class WebRequest:
  • Get(string url, Object owner, string function)
  • Post(string url, Table form, Object owner, string function)
  • Put(string url, string data, Object owner, string function)

Callback function has property with keys string url, bool is_done, float download_progress, float upload_progress, bool is_error, string error, string text.

Improvements
  • Spawn dropdown added to spawn an object in its exact saved spot.
  • This is great when trying to spawn a compound object.
  • Fixed issue with one of the colliders in the Indonesia DLC.
Fixes
  • Fixed custom assetbundles not loading in cloud manager.
  • Fixed issue with custom objects starting with 2 dummy objects.

Hotfix 1

  • Fixed takeObject() collision issues with concave custom colliders.
  • Fixed input fields not syncing text to late joining players.
  • Fixed magnify getting stuck on your screen if you got disconnected while using magnify.
  • Fixed spectators being able to interact with calculators.
October 30, 2019, 7:13 am

This tiny update was mainly to get VR and Touch working again after the slight downtime with v10.0. Thanks for your patience!

General Improvements
  • VR is now working.
  • Touch is now working.
  • Doubled the max size of the packets so you can search and save larger things.
  • Improved sorting for server browser.
  • Servers that have a friend in it now have green text.
  • Added an invite icon on the top right, so you can easily invite your friends once all the slots are full, then it disappears.
  • Ping is more accurate and less jumpy.
  • Fixed issue with 50 value poker chip not showing properly for clients.

Hotfix 1

  • Fixed ping showing lower than it actually is.