December 12, 2019, 5:36 pm

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

Dark mode & Theme Editor

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

Global Chat

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

Picture-in-Picture / Spectator View

  • Spectator view can now be used for picture-in-picture, if you are not using it on another monitor. Can be enabled by right-clicking background in game and selecting Picture-in-Picture.
  • Console commands added for this, and some spectator commands reworked. See below.
  • Fixed restricted visiblity (which shows the world as a Grey player sees it).
  • Fixed fog-of-war view.
  • Fixed pointer visibility.


  • Images assets are no longer resized to the nearest power of 2 thanks a bug fix by Unity. (Unity version 2019.1.14)
  • Lowered max angular velocity cap to make dice feel better and more like previous versions.
  • Various UI improvements and fixes, most notably on Color Picker, Server Browser, and Script Editor.
  • Custom Figurine object now has a Card Scale property, so the figurine card can be scaled independently from the base.
  • GM Notes section added to bottom of right-click context menu for Black player (can be disabled in Misc settings)
  • Each section in the right-click context menu can be collapsed by clicking the line above it (can be disabled in Misc settings)
  • Misc setting to control mouse shake threshold.
  • Misc setting to control whether games can add items to context menus.
  • Misc setting to control whether games can show the game-specific keyboard controls config window.
  • Misc setting to control whether a single card will behave as a deck when you type a number on it. If ON then you will draw the card. If OFF then it will change state / rotation value, etc.
  • Fixed blindfold in right-click menu not working.
  • Fixed spectators (grey players) seeing things they shouldn't (in fog-of-war for instance).
  • Fixed game freezing when you hold a stack of two objects and use alt+right-mouse to drop one.


New API events:

filterObjectEnterContainer(container, object) - Global version of object.filterObjectEnter
onPlayerChangeTeam(player, team) - Called when a player changes team.
onObjectHover(player, object) & object.onHover(player) - Called when a player moves their pointer over an object.
onObjectNumberTyped(object, number) & object.onNumberTyped(number) - Called when a player types a number on an object. Uses new property object.max_typed_number
onObjectStateChange(object, old_guid) & object.onStateChange(old_guid) - Called when an object changes state, after it is in its new state.
onObjectCollisionEnter(object, collision_info), onObjectCollisionStay(object, collision_info), onObjectCollisionExit(object, collision_info) - Called when an object collides with another. Objects must be registered with the collision handler before they will trigger these events.

New API commands:

player.setUITheme(theme_script) - Sets the player's UI theme.
object.addContextMenuItem(label, function, keep_open = false) - Adds a right-click context menu to the object.
object.clearContextMenu() - Clears all items added by above.
addContextMenuItem(label, function, keep_open = false, require_table = false) - Same as above, but global (when user right-clicks empty space, or the table).
clearContextMenu() - Clears all items added by above.
addHotkey(label, method_name, trigger_on_key_up = false) - Add a bindable control. User may assign a key to it in Options->Game Keys.
showHotkeyConfig() - Shows the config window described above.
clearHotkeys() - Remove all controls created by above.
'container.remainder' - After using container.takeObject, if there is only one object left in the container (which means the container will be destoyed in the next frame) then this will be set to that last remaining object.
object.getGMNotes() & object.setGMNotes(notes) - For new GM notes feature.
object.registerCollisions(include_stay_events = false), object.unregisterCollisions() - Objects must be registered in order to trigger the global collision handler events detailed above. Sway events are particularly expensive, so only set that parameter to true if you absolutely require it.


  • Fixed filterObjectEnter not working under certain conditions.
  • Fixed decals not cleaning up correctly when using setDecals

System Console

Spectator command rework:

spectator_window now controls the picture-in-picture mode.
spectator_screen can be used to open spectator view on another monitor.
spectator_activate_with_resolution now has -p parameter to specify picture-in-picture. This command can be used to open picture-in-picture with specific position and size.

New commands: (for more info see above page, or use help )

  • ui_main_flip, ui_main_modding, ui_main_music, ui_main_notebook, ui_main_objects, ui_main_options - Control visibility of buttons on top menu bar.
  • spectator_panel_buttons - Whether picture-in-picture window has buttons to control it.
  • spectator_panel_corners - Whether picture-in-picture window has corners to resize it.
  • spectator_panel_locked - Whether picture-in-picture window can be moved.
  • ui_themecolor - Color of specified selector.
  • ui_theme_batch_start & ui_theme_batch_end - Group multiple ui_themecolor commands together.
  • ui_theme_count - Number of themes.
  • ui_theme_from_game_auto - Whether games can set the theme colors.
  • ui_themeis - Sets current theme.
  • ui_theme_index - Index of current theme. Set to change theme.
  • ui_theme_name - Name of current theme. Set to change theme.
  • chat_filter - Whether the chat filter is enabled.
  • chat_refresh_filter - Refresh the chat filter rules.
  • card_is_deck_for_hotkeys - Whether the setting described above is enabled.
  • game_hotkey_bind - Bind a key to a game-generated control.
  • game_hotkey_list - List bindable controls generated by loaded game.
  • ui_context_menus_from_games - Whether games can add items to context menus.
  • game_hotkey_config_can_open - Whether games can show the game-specific control binding window.
  • ui_context_menus_can_collapse - Whether context menu section can be collapsed.
  • ui_context_menus_show_gm_notes - Whether GM notes are displayed at bottom of context menu for Black player.

v12.2.1 Hotfix 1

  • Fixed IRC messages not sending.
  • Fixed contextual menu bugs.
  • Fixed transparency potentially bricking your UI.
  • Fixed setUITheme not working.
  • Fixed aspect ratio on custom figurines.
  • Fixed calculator and tablet.

v12.2.1 Hotfix 2

  • Fixed hotseat turn indicator star.
  • Fixed server browser flashing white during refresh.
  • Added Highlight C theme selector for pressed state of pointer & top menu buttons.
  • Removed player colour tints from advanced theme palette.
  • Fixed some minor theme issues.
  • Fixed object.addContextMenuItem callback not supplying player color.
  • Fixed sort sometimes breaking on strange characters.

v12.2.2 Hotfix 3

  • Fixed drop-down in certain dialog windows displaying below the window.
  • Fixed cloud upload not using the selected folder.
  • Fixed object.loading_custom returning false too early.
  • Fixed onObjectEnterContainer only firing for one of the objects when two single objects merge.
  • Fixed typing numbers on objects not working in hotseat mode.
  • Fixed buttons attached to hidden objects (which are therefor invisible) being clickable.
  • Added setting in VR settings to disable the missing binding warning.