February 28, 2025
Foundry Virtual Tabletop - Version 13 - Testing 2 Release Notes
V13: Testing, Testing!
WARNING: This Testing update is intended for those dedicated users who wish to test the new features provided in Version 13. It is not intended for use in weekly games or in games with heavy use of add-on modules. The goal for this build is to collect preliminary testing feedback from developers and users, not to power actual game sessions!
We are very pleased to announce the release of Foundry Virtual Tabletop Version 13 Testing 2 (Build 337), our second release of the Testing Phase for Version 13! As is typical for a Testing build, this update brings a wealth of ongoing improvements and bug fixes, but it also includes some exciting new features that are now ready for a first look from the community.
Please keep in mind that features and user interfaces will continue to evolve as we continue our journey towards a Stable release.
As always, it is very important to back up your user data before any major update. It is strongly recommended to backup your important Worlds before experimenting with the Testing Build. Better yet, consider taking a full Snapshot.
Token Drag Measurement: Ready for Testing!
We are happy to report that our Patreon community vote winner, Token drag measurement, is nearing completion!
There are two different ways to drag a Token using waypoints. Use the process that feels more natural to you.
Using CTRL+Click
While dragging a Token and holding down the CTRL button:
- Release the left mouse button, then left-click the map to place waypoints
- Right-click anywhere to remove the last waypoint you placed
When you finish plotting your Token's path, release the CTRL button, then:
- Left-click the final destination to move the Token, or
- Right-click anywhere to cancel the entire movement
Using a Keybinding
While dragging a Token:
- Press the configured "Place Waypoint" key ( F by default) to add a waypoint at the cursor's location'
- Press ALT and the same "Place Waypoint" key to remove the last waypoint you placed ( ALT + F by default)
- Right-click anywhere to cancel the entire movement
Additional Controls
Whichever method you use, these controls are also available:
- The Ascend and Descend Keys
-
While dragging a token, you can raise the elevation of the next waypoint with one of the keys bound to "Ascend Elevation" ( Numpad+, or E by default).
Similarly, you can lower the next waypoint with one of the keys bound to "Descend Elevation" ( Numpad-, or Q by default).
- ALT
- Holding the ALT key before you begin the movement hides it from all other users. If the movement is hidden, the word
[Hidden]displays near the end of the ruler. - CTRL + Mouse Scroll Wheel
- If the CTRL button is held down, using the scroll wheel increases or decreases the elevation of the next waypoint placed.
- SHIFT
- Holding SHIFT while creating a waypoint prevents it from snapping to the grid.
- Holding SHIFT while changing elevation only changes the elevation by 10% of the usual amount.
Typically, the elevation is always changed by an amount equal to the grid size. On a map with a 5 foot grid, Tokens go up and down 5 feet at a time.
Token Drag Measurement and the Existing Measure Distance Ruler
The new Token Drag Measurement ruler and the existing Measure Distance ruler share the same controls for setting waypoints and changing elevation, but there is an important difference between them. The Measure Distance ruler measures distance, while the Token Drag Measurement ruler measures movement cost.
Typically, these calculations are the same, but if part of the area is "difficult terrain" and includes one of the new "Modify Movement Cost" Scene Region Behaviors, the two rulers will give different results.
To make way for Token drag measurement, we decided to change the Measure Distance ruler so that it is now toggled on and off using a new configurable key ( R by default) instead of CTRL. Alternatively, you can still use the "Measure Distance" button, located in the Token Controls at the top-left of your screen.
Additional Highlights
This update also contains two other minor new features that we would like to spotlight.
Additional Control Over Automatic Token Rotation
Earlier in V13, we added a feature to automatically rotate tokens in the direction that they are moving. Although this is realistic and fun when using top-down tokens, community feedback indicated that it was a highly undesirable behavior for "pog"-style tokens (tokens that are portraits inside circular rings).
To address this concern, we've added the new "Automatic Token Rotation" World setting. If you disable this Setting, Token art will not automatically rotate to match the direction of travel, but Tokens can still be freely rotated by users as usual.
Custom Cursors
A fun new feature in V13 is the ability for Game Systems and Modules to define custom flavorful cursors.
New Features
Architecture and Infrastructure
- Upgraded dependencies for the 13.337 release, including increasing the Electron version from
33.2.0to34.2.0which adds support for Chromium 132. (12236)
Applications and User Interface
- Improved the interaction between UI Scale and the Macro Hotbar to prevent unnecessary Hotbar wrapping. (12122)
- Improved CSS styling for Folders and Sub-Folders by using
position: sticky. (10263) - Adjusted the scale of interface elements of Placeables such that they look the same regardless of the configured grid size. (10608)
- Ensured that the popped out Chatlog always has a text area for composing and submitting messages. (11878)
- Added keybindings for vertically ascending/descending a placeable object by one grid space. (11887)
- Implemented a light theme option for the game view UI. (11994)
- Reduced visual "flickering" of the Macro Hotbar by detecting mouse hover events for the entire
#action-barelement rather than for specific elements within the Hotbar. (12173) - After attempting to drag a Token through a Wall (with constrained movement enabled), the Token now snaps to the final valid grid space in the attempted movement path. (12177)
- Added a World setting to disable automatic Token rotation during movement. (12193)
- Improved the way buttons flow in
DialogV2. (12215) - Drawings can now be moved using the keyboard. (12218)
- The fading behavior of the user interface can now be partially adjusted by the Core Settings in the User Interface Configuration dialog. (12220)
- Added a keybinding to place and remove waypoints during a Token drag workflow and during distance ruler measurement (by default,
Fto place andAlt-Fto remove). (12232) - Allowed the "Ascend Vertically" and "Descend Vertically" keybindings to also change the elevation of the preview Token during a drag workflow. (12233)
- Added a "Hidden" label to the Token preview during a hidden Token drag measurement so that the User is more confident that their planned movement is not publicly visible. (12234)
- Removed the Electron window Menu Bar which was visually unappealing and interfered with ALT key behavior inside the app. (12246)
The Game Canvas
- Increased the size of Placeable Layers' undo history from 10 to 100. (11706)
- Changing the width, height, or shape of a Token is now treated as movement between the old and new center point. (11890)
- Added a Door sound set for Heavy Metal sliding doors. (12209)
Other Changes
- Replaced the "Token Enter/Exit" and "Token Moves In/Out" events of the "Display Scrolling Text" Behavior by "Token Animates In/Out". (12229)
API Improvements
Documents and Data
- Improved the server-side usability of batch pre-operation methods and captured some efficiency gains in server-side update and deletion workflows by eliminating an additional document loop. (10668)
- Relaxed the restriction on the
DataModelconstructor'ssourceso that it now only requires receiving an object after the source data migration is complete. (12125) - Added support for "value not equal" database queries with
{field}__nesyntax. (12205) - Strengthened the Scene framework using server-side batch operation handlers to ensure there can never be more than one active Scene at a time. (12207)
- Added
Scene#unviewto conveniently remove the currently drawn scene from the Canvas regardless of whether it is active or not. (12224)
Applications and User Interface
- Added API so that systems and modules can configure their own custom cursor images to use when interacting with the application. (10123)
- Converted
FilePickertoApplicationV2. (11348) - Added an
activateSceneControlshook to allow modules to respond to Control Layer, Tool, and Toggle changes in the newApplicationV2SceneControls. (12208)
The Game Canvas
- Added API to allow a different User to continue moving a Token that was paused during a previous movement. (12162)
- Made
TokenDocument#_preUpdateMovementasync. (12170) - Added two new hooks to
CanvasEnvironmentGround#initialize:configureCanvasEnvironmentandinitializeCanvasEnvironment. (12223) - Added
Token#_getKeyboardMovementAction. (12225) - Added
Token#_getHUDMovementAction, which returns the movement action inCONFIG.Token.movement.actionsto be used for elevation changes via the Token HUD. (12230) - Added
TokenDocument#resize({width, height}), which resizes the Token in a way that does not change its center point. (12239) PlaceablesLayer#_pasteObjecthas been replaced by an@internalinstance method onPlaceableObject. (12242)
Other Changes
- Added a "Simplified Gregorian" calendar configuration to the core software for basic time advancement APIs. (11915)
- Adjusted HTML sanitization to allow for custom URL protocols. (8310)
- Added
menuto the list of tags that are permitted during HTML sanitization. (10225) - Expanded the list of HTML elements allowed in cleaned HTML to include
var,output, custom core elements (such ascode-mirrororcolor-picker). Expanded the list of global allowed attributes (translate,autofocus, and others). Therequiredattribute is now allowed forinputandtextareaspecifically. (12178) - Elevated
DocumentSheetV2#submittoApplicationV2#submitto allow programmatic form submission for any application that contains forms. (12200) - Added the new
CombatantGroupEmbedded Document to help provide core support for "group initiative". (12202) - All
HTMLFormElement#submitmethods now go throughHTMLFormElement#requestSubmitinstead to ensure that they properly transact submit events. (12221)
Bug Fixes
Documents and Data
- Optimized the behavior of
CompendiumCollection#configureto avoid unnecessary operations like fullGame#initializePacksfor atomic changes like toggling the locked state of a single pack. (11710) - Resolved an error that was preventing changing the type of a Document or element within a
TypedSchemaField. (11962) - The
updateCompendiumhook once again properly fires when creating, updating, or deleting a Folder inside a Compendium pack. (12134) - The
updateCompendiumhook once again properly fires when Embedded Documents are modified within a Document inside a Compendium pack. (12144) - Fixed a bug where attempting to use deletion keys to delete keys (including flags) resulted in an error. (12175)
- Fixed a bug where Embedded Documents could not be created if the parent Document was inside a compendium. (12181)
- Strengthened the Combat framework using server-side batch operation handlers to ensure that there can never be more than one active Combat at a time. (12204)
- Fixed a bug causing
TypedObjectFieldto not function properly withArrayFieldandSetFieldelements. (12227)
Applications and User Interface
- Fixed a bug where the Hotbar fade transition was inconsistent with the fade transition of other
faded-uielements. (12238) - Moved the Chat Card z-index so that it is now above the Token HUD. (12196)
- Resolved an issue where the Submit button of a
StringTagselement could not be used on an application withsubmitOnChange: true. (11671) - Fixed some remaining cases where chat input could still overlap with the Macro Hotbar on common resolutions. (11930)
- Fixed a bug where the expanded state of chat message rolls was lost when the message re-rendered. (11941)
- Fixed a bug that was preventing the Chat scrollbar from scrolling the Chat log. (11953)
- Fixed an issue with
CombatTrackerthat could result ininitializepreventing child classes from overridinginitializewith private variables or methods. (11976) - Fixed an issue that was preventing the context menu from displaying properly for disconnected Users. (11993)
- Hid the Create Folder sidebar button for all non-GM users. (12006)
- Implemented various improvements to the recently re-designed Roll Tables, resulting in a better user experience. (12074)
- Fixed a bug where the Macro Hotbar overlapped the floating chatbox if the Chat log was popped out. (12094)
- Improved Journal sheet category label wrapping when the table of contents is collapsed. (12099)
- Fixed a bug where clicking any Scene Control, Sidebar button, or Hotbar button prevented keybindings from executing until the canvas was clicked. (12104)
- Fixed a bug where the "Create Holes" Scene Control button icon was not rendering correctly. (12111)
- Fixed a bug where the "Load PDF" button in the Journal Entry sheet was disabled for Users with Observer permissions. (12149)
- Fixed audio context switching in
PlaylistandPlaylistSoundto properly recreate the sound pipeline. (12154) - Fixed a bug where Vision Range input in the Token Config was missing the
∞in its placeholder text. Reduced the font size of∞in the placeholder text of the detection range inputs, which was previously too large. (12163) ContextMenuhooks now callHooks.callAllrather thanHooks.call. (12183)- Added separate color schemes for
<thead>elements in astandard-formin light mode. (12185) - Dragging a Compendium pack into a Compendium folder now correctly moves it into that folder. (12186)
- Hovering a controlled Combatant in the Combat Tracker now displays the Movement History of that Token, matching what happens when you hover a controlled Token on the Canvas. (12187)
- Made the Settings tab pop out scrollable. (12189)
- Updated
DraggableinApplicationV2so that it no longer uses the deprecatedbringToFront. (12190) - Improved
v1styles compatibility for theflexrowCSS environment by removing the defaultalign-itemsrule added byv2styles.(12192) - Fixed a CSS issue with the License page. (12194)
- Moved notifications to a higher
z-indexto prevent--z-index-windowfrom eventually incrementing high enough to overtake and obscure them. (12211)
The Game Canvas
- Active
CanvasAnimationworkflows are now cleanly terminated before tearing down a Scene to avoid unhandled exceptions caused by the animations attempting to complete. (12031) - Resolved an issue where vision did not render if the Vision Range was set to
∞. (12168) - When the vision
modeis changed in the Token Config, certain existing values (Color, Attenuation, Brightness, Saturation, and Contrast) now all reset to the default value of the new visionmode. (12169) - Fixed a bug where
TokenDocument#pauseMovementdid not function if it was called outside of the Document Update workflow. (12179) - Fixed a bug where
tokenRingSubjectMappingswas ignored after a Token update animation. (12201) - GM Users no longer automatically control a Token after it is un-hidden using the API. (12213)
Token#constrainMovementPathnow properly constrains movement outside of the Scene boundary even ifoptions.ignoreWallsis true. (12217)
Other Changes
ForeignDocumentFieldnow respectschoiceswhen creating form groups. (11774)- Fixed a bug with listening for keydown events in chat. (11903)
- Resolved an error that occurred when opening the Chat log as a popout. (11932)
- Chat previews now properly re-render when the message is updated. (12022)
- Fixed an issue where toggled
HTMLProseMirrorElements exited "edit mode" upon losing focus. (12041) - Resolved an issue where toggled
<prose-mirror>s did not function with HTML source editing. (12084) - Fixed a bug where custom header controls in Compendiums did not listen for
onClickevents properly. (12114) - Fixed a bug where toggled ProseMirror buttons stopped working after opening and saving a toggled ProseMirror editor. (12119)
- Prevented an error caused by calling
Hooks.offwhen no hooks were registered. (12166) - Fixed a bug where the tree structure of a directory was not built before the directory was rendered. (12180)
- Fixed a bug where creating a subclass of
ContextMenucreated an exactContextMenuinstance fromContextMenu.createrather than an instance of the subclass. (12198)