Beta 0.3.0 Update Notes (Patreon)
Content
Greetings friends, this release marks and exciting milestone for Foundry Virtual Tabletop as the software graduates to the 0.3.x iteration of Beta development. There are several significant changes as part of 0.3.0, so I hope you will carefully read these update notes. There are a lot of them this time - 0.3.0 is the biggest (in terms of amount of changes) update to Foundry VTT yet!
[Above - Token HUD and Chat Bubbles]
The key highlights of this new version include Electron Migration, improvements to the Walls system to support many more wall options, including one-way and terrain types, the new Token HUD which provides a better user experience in quickly editing token health or elevation values, the addition of chat bubbles which visually illustrate tokens in a Scene which are speaking in character, improvements to fog of war rendering performance (as much as a 50% reduction in GPU usage), and many smaller features and bug fixes. Overall this version addressed and resolved almost twice the number of issues of typical Foundry VTT updates. The size and scope of this update is substantial, so I would like to offer a sincere thanks to the testers who are helping me to evaluate it and identify any new bugs and feedback.
[Above - an example use of the new Terrain Walls type]
I'm really excited about the continued progress for this software and motivated by the support and encouragement of the community. Thank you all for appreciating my work, providing thoughtful feedback, and encouraging me to do even more. As always, please keep an eye on the development progress board here for visibility into what features are in progress and coming up next!
https://gitlab.com/foundrynet/foundryvtt/boards
Please Read: Electron Migration
There is a key change as part of Foundry Virtual Tabletop 0.3.0 which deserves a section on its own to discuss. I have migrated the native application encapsulation from NWJS (https://nwjs.io/) to Electron (https://electronjs.org/) for a number of key reasons which I believe to make it the superior choice for ongoing development. The immediate consequence of this change is the following:
There is no support to patch pre-existing versions of Foundry VTT to this new update version. Everyone must re-download the full application with the arrival of 0.3.0. Future updates will use the auto-updater feature, but this version requires a re-download.
There are two primary advantages of Electron which motivated this decision. Application performance is measurably improved compared to the NWJS implementation. I hope users will find the Electron experience to be slightly more responsive. Secondly - using Electron supports an easier build process which will allow me to support native Linux and MacOS versions more easily in the future.
New Features
- The native encapsulation layer for the application has been migrated to Electron. Please see the important paragraph above for more thorough explanation around the consequences and implications of this change.
- The Wall placeable object has been updated to support many additional options for wall placement. The previous appraoch of classifying walls using four prototypical types has been replaced with each wall object having granular control over how it affects movement, perception, direction of effect, and door configuration. The Wall placement tool now supports a greater number of prototypical options, but each wall may be manually configured by double clicking on one of its endpoints.
- The expansion of the walls system now allows for one-way walls which can restrict movement or perception from just a single direction while allowing it from the other. To make a Wall one-way only, go into the wall segment configuration and set the Direction property of the wall. The available directions "Left" and "Right" are denoted with respect to the direction of the wall ray. For example, if a wall is drawn from point A towards point B, along that ray "LEFT" would be to the left of B and "RIGHT" would be to the right of B.
- The expansion of the Walls system also supports a new type of perception rescriction - called "SECONDARY" in the wall configuration. This type of perception restriction allows for Terrain Walls which do not block visibility of the first collision, but do block visibility for subsequent wall collisions. Terrain type walls have a variety of awesome use cases and can add a lot of flexibility to the type of visual experience which can be created in Scenes.
- Added a "Clone Tool" for wall placement which will place more of the same type of wall which was previously placed or edited. For example, if you desire to use many segments of a specific wall configuration, you can follow a workflow where you configure just one segment of the exact wall type you want and then use the Clone Tool to place many more segments of that same type.
- Added new Wall placement tools for Terrain and Etheral wall types to quickly place prototypical versions of walls with those movement or perception restrictions.
- Added a new Token HUD which is activated by clicking and holding on a Token for a brief period of time. The HUD will allow you to quickly and conveniently edit the value of that token's attribute bars, update their displayed elevation property, and quickly access the configuration sheet for that particular Token. Only one Token can be focused with the HUD at a time, which will fade out when it is not immediately in use to retain an unobtrusive UI.
- Chat Bubbles have been added to show in-character messages spoken by particular Tokens. A message which is sent using either the /ic or the /emote prefix will be displayed from the perspective of the speaking Token as a chat bubble positioned above their token on the Scene HUD layer. Chat bubbles provide a nice way to immersively illustrate conversations or emotes occuring between characters in the world. This functionality may not appeal to all groups, so it is possible to disable Chat Bubbles as a world-level configuration option in the game settings menu.
- Added a new option to the Scene context menu to Duplicate Scene, creating a copy of the scene and all the objects it contains which can form the starting point for modifications to an existing map.
- The visual appearance of camera panning behaviors has been improved. These occur when TAB cycling between tokens, or when dragging your cursor to the edge of the screen during a Wall placement workflow. In such cases the canvas will now pan more smoothly for a nicer user experience.
- A previous update added the possibility of image type Journal Entries. While this was a nice addition, it put users in a position where a Journal Entry could only be an image OR a text entry. With this update, the multiple types of Journal Entries have once again been consolidated and each journal entry may have both image and text components. Buttons in the header of a Journal Entry allow you to toggle between the different modes.
- The functionality to handout a Journal Entry to players has been moved from the right click context menu of the Journal sidebar to the header of a specific entry which you want to hand out. This has several advantages - foresmost being that it allows for additional context of the share request to be implied. If the GM is viewing the text portion of a journal entry when clicking the "handout" button, players will also be shown the text component. If a GM is viewing the image component of a Journal Entry when it is handed out, the players will be shown the Journal Entry image.
- The title of Journal Entries has been suppressed for players whom do not have at least LIMITED permission to view the entry. This avoids spoiling the title of a journal entry to players when handing it out to show it to everyone (including those who lack normal permission).
- Added a new tool to showcase Actor Artwork or Token Artwork available in the right-click context menu for Actors and Items. This will display a pop-out UI which showcases the artwork in a more zoomed-in format. Moreover, this showcase can be handed out like a Journal Entry to show a profile image, token image, or item image to all connected players.
- Improved the display rendering of Scene-type Compendium packs.
- Substantially improved the performance of moving or deleting multiple Tokens at once using a group-selection workflow. These changes have been rolled out initially for Tokens alone, but the improvements will be generalized to benefit other types of Placeable Objects in a subsequent update.
- Added support to run Foundry Virtual Tabletop using HTTPS and a SSL Certificate. In order to run FVTT in SSL mode, you (for now, this process can be improved in the future) need to edit the options.json file to add two new attributes directing the application towards a SSL key certificate files for your domain. If these properties have been defined and point towards valid files, the server will automatically run using HTTPS instead of simply HTTP. See the following for an example: https://gitlab.com/foundrynet/foundryvtt/issues/466
Core Bug Fixes
- Improve the user experience around chain placement of Wall segments. The system will now record the exact coordinate positions of a prior endpoint to ensure that no gaps are present. Furthermore, the wall placement workflow now incorpoates a rapid double-click detection filter which can prevent the accidental placement of very short walls in quick succession.
- Fix a bug for Ruler measurement - if a measured movement path experience a wall collision, it caused the Ruler to become in a somewhat broken state which prevented further measurement. Now if a movement is blocked by collision, you may continue measuring to find a valid path.
- Corrected a bug with editing placed Wall segments - in a previous version of FVTT collapsing a wall by dragging it's endpoints together would delete the segment. This behavior had gotten broken and was leaving stray walls around with identical endpoints. This behavior has been corrected and collapsing a wall segment will now delete the wall.
- Closed a loophole which allowed players to move a Token using a Ruler measurement workflow even if the game was currently paused.
- When a game system only has one Actor type, a bug was occuring when creating new Actors that would pop the only value out of an Array, making subsequent requests cause a breaking error.
- When placing or deleting a Token from a Scene which has vision or light emission settings, the current state of vision and fog of war was not immediately updating until that newly placed Token was updated by moving it. This has been addressed and the lighting/vision implications of placed or deleted Tokens should be realized immediately for all clients.
- Wall endpoint coordinates were not always correctly coerced to integer pixel coordinates. This has been addressed and all Wall endpoints are rounded to the nearest pixel before being saved to the database. This helps reduce data size and also avoids issues with tiny gaps between wall segments due to floating point precision issues.
- Some server-side validators were not correctly being applied. For example - it was possible to create an Ambient Sound object with no sound file specified as its audio path. This should have been prevented as a validation failure on the server side but was not. The application of data model validations has been improved to ensure that all objects are validated before they are saved to the DB.
- An Item sheet for an Owned Item would remain displayed even if that item was deleted from its parent Actor. Now, any sheets associated with an Owned Item will be closed automatically if that item is deleted. Additionally, Owned Item sheets were not previously uniquely IDed, which resulted in multiple sheets being opened for the same item. Now each OwnedItem is referenced in the ID strategy for the sheet, resulting in only a singleton DOM element per Owned Item.
- Alterations to Folder entities were not always immediately synchronized across all connected clients. This fix will allow Folder naming or permission changes to more reliably propagate as soon as they occur.
- It was possible for some functions which used the same event Hook to not get called in some situations when a previously called hooked function returned a "falsey" value instead of explicitly false. This has been addressed and all Hooked functions will execute as expected.
- Fixed a UI rendering bug with the PlayerConfiguration app which prevented the impersonated Character from being correctly highlighted for selection.
Core Software, APIs, and Module Development
- Server side logging files are now produced. When running the application either using Electron or via Node.js, the debug.txt and error.txt files will be produced in the root Foundry directory. These files will contain valuable debugging information or errors which can help me better solve any issues which players encounter while using the software.
- An optional data object may now be passed to the Application.render() function which can allow Applications to conditionally tailor their rendering strategy to the components of a data model which were modified, triggering the render request. For example, Entities will now pass the updated (differenced) data to the render function when re-rendering active sheets.
- Each PlaceableObject subclass (Token, AmbientLight, MeasuredTemplate, etc...) now retains a reference to the Scene within which it resides. This makes identifying the parent container for an object more convenient as you may simply reference object.scene.
- Each Application class may now choose to define it's CSS id as a dynamic property as an alternative to a static option.
- Added the new CanvasAnimation helper class with methods which automate the process of linear (for now) animation of a canvas object between two values.
- Added a Canvas HUD layer providing the ability to render DOM elements with a positioning relative to a canvas coordinate and scale.
- Performance of the fog of war rendering algorithm has been improved substantially! I identified a simplification which resulted in fewer containers needing to be drawn to the canvas which, in my own testing, reduced GPU utilization between 30 and 60% for most Scenes.
- The alias {String} attribute of the ChatMessage entity data model has been deprecated in favor of a speaker {Object.{actor, scene, token, alias}} attribute which captures more (optional) data about the origination of a particular chat message or dice roll.
- The ChatMessage data model has been extended to explicitly track the emote {Boolean} property to record whether or not a message is of the "emote" type - allowing modules and systems to customize the rendering of emote messages differently from others.
- Improve upon the way that Application instances are rendered and positioned. This allows for more flexible configuration of application scale and position which can be specified either using CSS or using JS at render time.
- The Canvas.dropActor() method has been moved to TokenLayer.dropActor() and it's signature has been improved to offer some additional customization options for how the Actor data is translated into a newly placed Token.
- Much of the client-side socket behavior has been factored out and standardized within the SocketInterface helper class which is re-used throughout the client-side codebase. This guarantees a more standardized data contract and handling logic to ensure that various APIs which transact data with the server for saving adhere to the same conventions and prototypical method signatures.
- Previously, Module manifest module.json files were required to specify the styles, packs, and scripts attributes by passing empty Arrays if no assets of that type were included by the Module. Now these attributes may be safely omitted if none are included.
- Extended the signature of the Entity.hasPerm() method to provide an additional argument for whether to require an exact match or an inequality-based permission match.
- Modules may now request a specialized messaging socket be provided for their own use in exchanging data. Please see the following for more detail: https://gitlab.com/foundrynet/foundryvtt/issues/582
- An extensive backend standardization and compatibility pass has occured for the server side Document, EmbeddedDocument, Entity, and EmbeddedEntity data classes. This has improved and standardized the data management approach used by the server-side code.
- The server side code has been significantly overhauled and polished to feature better practices and more standardization for key server-side modules.
- Added an extra sanity check on server start to check for and protect against missing write permissions in the public directory of the application location.
D&D5e System Improvements
- The display of all types of Item sheets has gotten an update - adding a consistently themed sidebar for all items which displays helpful summary information at a glance.
- Improve the tab navigation behavior of Item sheets - previously item sheets were resetting to the Description tab whenever a change was made - now the currently viewed tab will be correctly remembered and retained.
- Corrected several data errors in the Spells SRD.