July 14, 2022
Foundry Virtual Tabletop - Version 10 Development 3 Release Notes

Be certain to carefully back up any critical user data before installing this update.
Packed to the brim with every last minute API change we could fit, we're extremely pleased to announce that this update brings the API Development phase for Version 10 to a close. This update focused primarily on incorporating the final requests for API changes from our development community, while also strengthening aspects of the API which we knew needed to be released before we could move on to the User Testing phase. Now that all the framework and backend work is solidified we can move on and start refining the user-facing experience for our awesome community!
WARNING: Updates on the Development channel are intended for testing and feedback from the development community. While the features and improvements of these updates may be close to a level of stability intended for public testing, they are likely to still include some bugs and incompatibilities which may frustrate you. It is not intended to use these releases for a live game.
Update Highlights
With the closing of the API Development cycle, much of this update prioritized finalizing any API changes we needed to make before we could move on to User Testing, to be sure that community developers had all the tools that we could provide them to update all their awesome packages to support V10. However, that doesn't mean we didn't manage to find some ways to squeeze in some features users will find exciting:
Journals V2
We spent a lot of time during this update refining some of the last pieces of the underlying framework for Journals V2. This update brings improvements to both the user interface and functionality of journals, correcting some bugs and adding some nice new functionality. Dynamic links got a series of improvements, including the ability to link to specific headings inside a journal, relative links within the same journal entry, and ability to play playlist sounds directly from a journal entry for all players. We also managed to polish up some of the lingering bugs with multi-page view, specific journal sheet types, and the ProseMirror editor. While much of the UI features are not yet finalized, the core functionality requiring API updates has been mostly handled. Look forward to the UI getting a facelift in the upcoming testing phase!
Canvas Improvements
There's a lot that has changed with canvas rendering, including new features for Vision, improvements to Tile Occlusion and Overhead Tile rendering, and a whole lot of extremely technical API changes that only people gifted in the dark sorcerous arts of PIXI can easily grasp. For the rest of us end-users, this update brings support for setting a "Fog Exploration Image" or setting different colors for explored or unexplored areas of the Fog, and a new approach to sorting for controlled tokens that might overlap one another on the canvas. Some improvements have been brought in for Canvas Drawings, including some tweaks to improve how text is rendered if you're using a custom font, but mostly changing validation and labeling for some fields. In addition, a new "Vision" occlusion mode for Overhead Tiles makes it possible for your tokens to see inside an area covered by an Overhead tile only using their line of sight (though please note that this features is going to be refined further before V10 stable). Lastly, there have been further tweaks and refinements to the performance to canvas rendering including lighting to further balance the benefits of performance and accuracy.
User Tours
This update brings the first iteration on an interface for user Tours, allowing for developers to register Tours for users to complete, and allowing users to restart tours they have already completed. We expect to leverage this feature heavily to provide both surface level information as well as deeper tutorials for new users going forward.
Breaking Changes
Architecture and Infrastructure
mergeObject
now supports a newperformDeletions
option to control whether it implements the'-='
shortcut prefixed delete instructions or ignores them. (6582)Tile#getRoofSprite
has been removed in favour of the newly reworked Roof occlusion framework. (7121)
Other Changes
- Meta Issue: Overview of breaking changes in Document and data models from V9 to V10. (6849)
New Features
Documents and Data
- Meta Issue: Overall feedback collection for "Journal V2". (7050)
- Display of the Edit button for Journal Entry Pages now uses CSS rather than Javascript to control whether it is visible. (7413)
Applications and User Interface
- Meta Issue: Identify and address ProseMirror feature gaps. (7286)
- Meta Issue: Implement "Journal V2" enhancing the interface and functionality of the journal system. (4941)
- A new "Tour Manager" UI has been added, allowing users to view and consume Tours that have been registered in
game.tours
. (6883) - Image Journal Entry Pages have a new UI which displays the full-sized image when viewing the entry page or showing the image to players. (857)
- Dynamic links to playlist sounds can now be used to start a track or playlist for all users, rather than simply offering a preview for the individual user. (6778)
ui.notifications
are now also logged to the dev-tools console for the purposes of allowing users to see warnings or errors that may otherwise vanish before they finish reading them. (4826)- Controlled tokens are now shifted to a higher
sort
value relative to their peers at the same elevation. It is now possible to customizeTokenDocument#sort
to accommodate handling for this, but this is anticipated to change in a later version when this data is persisted in the database. (7425) - Minimizing and Maximizing Application windows now makes use of CSS selectors instead of jQuery. (6670)
The Game Canvas
- Overhead Tiles now support a new "Vision" occlusion mode which will reveal the portions of the tile based on a controlled Token's vision polygon. Further development is expected to iterate on this feature during the testing phase to more firmly align with user expectations. (4834)
- A new vision mode "Detect Invisibility" has been added, and some visual improvements have been brought in for the tremorsense vision mode. (7451)
- The
CanvasVisibility
layer has been migrated to use a normal blend mode from its previous multiply blend mode. In addition, it is now possible to define an image to be used as an overlay for the Fog of War for non explored areas, which may be configured from the Scene Configuration window. (7249) - It is now possible to set different colors between explored and unexplored Fog Exploration areas from the Scene configuration. (7452)
- Measured Templates can now be "hidden", bringing feature parity with light sources and sound sources, a template can be hidden with right-click and can be initially created in a hidden state by holding ALT when they are being placed. (2538)
Package Development
- When installing and updating packages, the new Package Relationship
compatibility
field is now checked to ensure package dependencies respectmaximum
andminimum
compatible versions. (7314) - Packages which display a "Dependencies required" flag on the Setup screen will now link to the Read Me or Project URL when possible, else it will default to the URL for the package manifest. (7458)
Dice and Cards
- The chat parsing syntax for roll expressions has been extended and should now recognize roll expressions on multiple lines. The parser now passes each roll expresion into
Rolls
as part of a createdChatMessage
. (6821) - As part of ChatMessage restructuring with regard to rolls, arbitrary terms can now have Flavor attached to them. (7392)
- Roll formulas once again support use of the "Remainder" operator
%
. (6674)
Localization and Accessibility
- The position field in Drawing configuration has been relabeled to use the term "Coordinate" instead of "Position", for consistency with other parts of the UI. (6973)
API Improvements
Architecture and Infrastructure
- The relationship between
Actors#fromCompendium
andActor#_preCreate
has been simplified, application of default prototype token settings have been shifted to apply exclusively to theActor#_preCreate
operation. (6453) - A number of core software dependencies have been updated. (7479)
Documents and Data
- Every class in the
JournalPageSheet
prototype chain now calls arender{className}
hook when each individual page is rendered in the combined Journal Entry view. (7431) - The new Collection
game.tours
has been added, for the purposes of registering and managing Tour documements. (6984) - Game
Settings
can now be configured to use atype
that refers to aDataModel
class definition. (7041) - The Setting update workflow now passes
userId
to settingonChange
handlers. (7421)
Applications and User Interface
- The ProseMirror
activateEditor
entry point now provides the hookcreateProseMirrorEditor
, allowing developers to add functionality to the created editor instance. (6723) - It is now possible to create relative links among other Journal Entry Pages within the same Journal Entry document. (7415)
AudioHelper#unlock
has been added, which stores aPromise
that resolves once theAudioContext
is available. (7432)- The Handlebars template
loadTemplates
now provides an alternate method to allow key/value pairs to be used to define shorthand references for templates. (6760)
The Game Canvas
#updateTileOcclusion
has been refactored, providing the new private method_identifyOccludedTiles
which houses the logic for whether a tile should be occluded. (7342)- A new masking group has been added to the canvas tree rendering process, and can be used to define masks and other display objects which should be rendered first in a given frame.(7144)
token.document.getFlag("core", "occlusionRadius")
has been added, allowing for the occlusion radius of a token to be overrridden on a per-token basis. (7343)- The Rain particle effect emitter now supports a
maxParticles
as an input option to control the density of the rain. (7422) - The
ParticleEffect#stop
operation now supports adelay
which allows some time for particles to naturally decay before the emitter is cleaned up. (7423) - The
activateNote
Hook has been added, and is called when a Map Note is activated. (7447) - The
MovementSource
class has been implemented, and is passed to the Line of Sight Polygon backend when testing collision for Token movements. (7466) - The canvas rendering API now supports use of PIXI batch creation functionality for shaders. (7475)
Package Development
ClientPackage#migrateManifest
now supports an option to produce a backwards-compatible manifest JSON. (7474)
Localization and Accessibility
- The
selectOptions
handlebars helper now supports sorting the options provided based on their label, after localization, by passing thesort {boolean}
parameter. (7237)
Bug Fixes
Documents and Data
- Returning
false
on apreCreateItem
hook should no longer result in errors for synthetic actors. (6953) - TinyMCE should no longer display unexpected data as a result of a module or system injecting HTML into the DOM. (7460)
- Drawing documents are now validated to ensure that they have either visible text, visible fill, or visible lines. (7405)
Applications and User Interface
- A memory leak related to the audio engine has been corrected. This leak could occur as a result of buffered audio not being properly released from memory when a sound is no longer playing. (7437)
- Updating a Wall type to "Door" now re-renders the wall settings window to make the door state selection menu visible. (6904)
- The configuration window for canvas placeables such as Tiles now display "Grid Units" as a fallback if the Scene does not have a specific unit of measurement defined. (6971)
- Journal application windows now have a minimum size to prevent cases where important UI buttons would be obscured by resizing. (7179)
- Setting the default Journal Entry Page Sheet sheet to "markdown" should no longer cause pages to become stuck in an uneditable state. (7409)
- Clicking a Dynamic Link to a specific page in the same journal entry while in multipage mode should now navigate the user to the specific page as expected. (7410)
- Attempting to use the ProseMirror editor to edit more than one Journal Entry Page at a time no longer throws an error and should now function as expected. (7450)
- The Edit button should no longer appear on Journal Entries stored within a locked compendium. (7407)
- The default token settings configuration window should once again render as expected. (7436)
- An issue which caused vision range inputs to not properly render in the Token Configuration sheet has been resolved. (7434)
- An issue where Sidebar Tabs could occasionally appear renderedered on top of each other has been resolved. (7420)
- The
KeybindingsConfig
application should now display macOS Command symbol in place of the CTRL key for Mac clients. (6997)
The Game Canvas
- To strengthen accuracy of vision calculation,
ClockwiseSweepPolygon
rays are now extended to the maximum distance of a radius or polygon. (7449) - The internal workflow of the
ClockwiseSweepPolygon
has been improved and simplified to provide better handling of cases with colinear endpoints. (7440) - Deleting a
FogExploration
document via the API using its standard delete workflow should now correctly reset the Fog Exploration data. (6573) - Color intensity should no longer have an effect on the illumination color used for negative luminosity light sources. (7468)
- Luminosity value should once again affect how much light is diminished by Darkness Level. (7426)
- An issue which caused the Vision Limitation Threshhold to stop functioning as expected has been resolved. (7467)
- Ambient sound sources now treat a token as a listener only if it is controlled OR if it is observable to a non-Gamemaster user while no tokens are controlled. (7443)
- Changing a Token's image on the canvas should now function as expected. (7408)
- Token elevation text should now be properly anchored to the top of the token frame. (7402)
- A redudant data preparation workflow for synthetic (un-linked) token actors has been removed. (7476)
- Text Drawings are now redrawn when width is changed, allowing users to configure different text wrapping widths. (6996)
- Text Drawings have been refined to resolve an issue where custom fonts could be clipped as a result of insufficient padding. (4490)
Tile#refreshOcclusion
now calls the hooks forrefreshTile
. (7341)GridHighlight#highlightGridPosition
no longer incorrectly treats the black border option asnull
. (7424)
Package Development
- Attempting to install an unavailable package should now provide an error message instead of an unhandled exception. (7403)
- If the "Default World" uses a system that is not installed, it should now return to setup rather than failing to launch and throwing an error. (7430)
Dice and Cards
- Calls to the static
Roll
method should now be called on the configuredRoll
class where appropriate. (6905) - The specific roll expression
/r ((0+1)d6 + 3 + )
should no longer result in a thrown error. (6938) - An unintended change to the default sort mode for Cards resulted in Card Decks not sorting as expected, this has been corrected. (7465)
- Cards should once again properly be recalled to their originating Deck when a Deck is reset. (7464)
Localization and Accessibility
- Some issues with localization labels for software update logging messages have been corrected. (7433)