September 10, 2019 Development Update

Beta 0.3.6 Update Notes

Greetings friends. I'm proud to share a new Foundry Virtual Tabletop beta update. This update has some major and substantial updates to core systems and software - focusing on improving the stability and consistency of key systems. The biggest improvement in this update is the new redesigned Configuration and Setup experience which gives a centralized management panel for Systems, Modules, Worlds, and core VTT software updates. The experience for installing and updating new community content has never been easier. In addition to this major new feature, there are a ton of quality of life improvements and bug fixes designed to smooth out some of the rough edges introduced in previous updates. I am proud of this set of changes and know it will serve me well as I continue development of new tools and functions looking ahead towards 0.3.7. Thank you all for your continued encouragement and sharing of this project - your help in spreading the word and supporting my work means so much to me.

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!

New Features

  • Implemented a major new feature which redesigns the Configuration and Setup page of Foundry VTT. This new page is far more powerful and functionality rich. From this centralized landing page you can update the core software, install and update Game Systems, install and update Modules, and create and manage Worlds. Systems and Modules can be installed directly with one-click by providing a link to their manifest (module.json or system.json) file. Installed Systems and Modules can be easily and automatically checked for updates and updated if a new version is available. I am very excited for this change as I believe it will make the process of installing and managing community created content much easier in Foundry VTT, further empowering the awesome module and system developers who are hard at work in the community.
  • Redesigned the Game Settings menu to support separate tabs for Core, System, and Module settings while sorting the displayed modules alphabetically for improved organization.
  • Due to the introduction of the new Configuration and Setup page which handles Module installation and updates, the ability to update Modules while inside an active World has been removed. This is a good change, as updating modules "in flight" caused some problems and complexitities which were not always well handled. You still configure which Modules are active within a World using the same Manage Modules application as before.
  • The display of Tokens on Hexagonal Grids has been improved so the bounding box for the token mirrors the hex dimension, instead of being too wide or too tall for the shorter side of the hex.
  • Files and Folders displayed in the File Picker will now be sorted alphabetically in a case-insensitive way. Previously lowercase names were sorted after uppercase ones (per Unix convention).
  • Formatting of the exported text chat log file has been improved to add more detail about dice rolls, showing both the initial formula, and the rolled result (including all rolled dice).
  • Incorporated localization support for the Scene Configuration sheet. Thanks to Ayan for contributing an updated HTML template and translation string keys.
  • Improved the sorting logic for Combatants, adding an additional sorting layer after initiative score and name for the Token ID to ensure that the resulting sort order is always deterministic.
  • You may now include some additional flavor text along with any dice roll submitted in the chat window by separating the roll portion of the command with a # character. For example /roll 4d6kh # Rolling for ability scores!.
  • Added additional buttons to the Settings sidebar as an alternative way to return to key setup menu screens. There are new buttons for "Return to Setup", "Configure Players", and "Log Out".
  • Added a new button on the Settings tab of the sidebar to render the Community Wiki documentation in a pop-out iframe. Many thanks to errational, CyberPathogen, and the many other wonderful curators and contributors of the community wiki for creating this helpful resource.
  • The ability to export-to-JSON and import-from-JSON has been added for more Entity types - including Items, Journal Entries, and Scenes. Previously only Actors had this capability.
  • Added localization support for context-menu options on Sidebar Directory containers.
  • Added a new Journal Entry context menu option to Duplicate an existing entry, as was possible for other Entity types.
  • Improve the hit area definition of newly added Drawings from the 0.3.5 update so they are easier to select and manipulate once drawn.
  • Made a change which allows chat commands to span multiple lines without being incorrectly truncated.
  • Users who have "Limited" permission to a Journal Entry will now be able to see Map Notes placed for that entry, but will not be able to inspect the details of the note. This can allow GMs an alternative option for label significant locations without revealing details about those locations to players or needing to keep those details in a separate entry.
  • A User's chosen color is now shown as a border around all out of character chat messages sent by that User.
  • The syntax for sending whispered messages in chat has been made more flexible to support /w and /whisper prefixes in addition to the previous @User syntax.
  • Web URLs posted in chat messages will be automatically converted to a clickable hyperlink.

Core Bug Fixes

  • Fixed an issue with attempting to add an Owned Item directly to an Item type compendium.
  • Changing the Actor that a Token references would not fully take effect until a hard refresh, as double-clicking the Token would continue to open the old Actor's sheet.
  • Fixed a problem with IP address identification which sometimes resulted in the local and internet IPs not being properly displayed.
  • Solved a problem for newly created Actors which prevented the img attribute from being initially present in their prototype Token data model.
  • Hardened a loophole with EULA acceptance which previously allowed you to simply close the window to dismiss the agreement without later prompting.
  • Applied a fix for the PIXI v5 update which caused a vertex buffer overflow when rendering large Graphics objects (like big Hex grids). This caused hexagonal grids to no longer render after some number of polygons.
  • Fixed a problem that occured when deleting a World-level compendium pack which had not yet connected to its database.
  • Removed visibility of the "Delete All" button on the Measured Templates layer for players who could not use that button as they lack GM permission.
  • Made a change to lock tiles while they are in the middle of a drag workflow. Previously the Tile could be rotated via mousewheel while mid-drag causing server desynchronization problems.
  • Applied an additional check to prevent Compendium pack paths from being written to world files as absolute paths instead of relative to the World directory as intented.
  • Fixed an issue since the PIXI v5 migration which prevented Scene background color from being properly applied.
  • Corrected the rendering of large hex grids in 0.3.5 which produced an incorrect offset with artifact lines.
  • Improve the vertical spacing of TinyMCE editors since the v4.x update in 0.3.5 to make better use of the bounding container.
  • Fixed an order-of-operations problem with the unregisterSheet method which caused it to incorrectly clear a previously registered sheet for all Entity types, even if a specific type of entity to no longer use the sheet for was specified.
  • Improved the logic of the version comparison function used to detect module and system update availability to work for more types of versioning schema.
  • Fixed a bug in the "Simple Worldbuilding" system which prevented Owned Items from being properly editable.
  • An unintentional "feature" in 0.3.5 caused mousing over a Polygon point during a drawing creation workflow to undo that point. This, while sometimes nice, was an unintentional workflow that could sometimes produce frustrating results and has been removed.
  • Fixed a bug whereby an Owned Item could be dropped on the Actor who owns it, thereby duplicating the item data in that Actor.
  • Drawing objects can no longer have no line, no fill, and no text - causing them to become effectively invisible. Drawings must have at least one of these values set.
  • Remove the "Delete All" button from Players on the Drawing layer since they do not have GM permission to delete the drawings of others. This was a bug fix for now, but I may bring this back in the future where the button would only delete drawings belonging to the user.
  • Corrected accidental residual references to CONFIG.Token which has been removed in favor of other global configurations.
  • Improved the approach towards regex matching for chat message whispers and dynamic entity links to better support international characters in Firefox where unicode regex escapes are not supported.

Core Software, APIs, and Module Development

  • The server-side implementations of "Pakcages": System, Module, and World have all been jointly refactored to extend the same abstract base Package interface and share much more common code and implementation. This has improved quality and consistency of how these packages are managed and described within the VTT software.
  • Broadly refactored and improved code quality for the Chat Log sidebar and the messages that are rendered within it. This was some of the oldest FVTT code, as chat was one of the first features I implemented. It was well overdue for a fresh coat of paint.
  • Refactored the sidebar directory templates and CSS rules to adopt a flexbox layout which should be more friendly for mod developers who want to add additional content into the sidebar.
  • The ChatMessage Entity now has a required type field added to its data model to more explicitly differentiate different types of chat communication. The valid types of chat messages are enumerated in CHAT_MESSAGE_TYPES.
  • Some changes to keystroke handling have been implemented. Several keys were previously only captured on keyup, which are now captured on keydown with a repetition filter added. This provides a more responsive experience when interacting with these controls.
  • Performed some code cleanup in the Combat class to remove some deprecated properties and bring greater consistency to the structure for current and previous round tracking.
  • Improved the informativeness of the error message thrown if the --world startup flag references a World which does not exist.
  • An informative fatal error is now triggered if there are multiple packages (systems, modules, worlds) which have the same "name" attribute in their manifest files.
  • A new structure is supported (and enforced) for defining module-based translation files. Under this new approach, languages are defined as an Array of Objects, and JavaScript code is no longer required to manipulate the CONFIG object as this is handled automatically. See this issue on GitLab for more details.
  • English language translations are now always used as a fallback option for any localization strings which do not have an available translation in the designated preferred locale.
  • Because of the new management strategy for module-provided translation files, these translations are now accessible on the main configuration and setup pages of the Application where modules were previously not able to contribute content.
  • Improved server-side zip file extraction to support an option to de-dupe the folder structure during the extraction process if nested directories are present.
  • Added a confirmDialog() helper function to streamline the process of rendering standard yes/no prompts using less code.
  • Revisit support for options.height = "auto" to be specified in an Application render options - auto height applications will be automatically resized (vertically) when they ar re-rendered to accomodate changes to the internal content.
  • Improve server-side Socket management to automatically learn the Entity class names for which to open socket listeners instead of hard-coding them.
  • Added a very simple Number.isNumeric() helper method to test whether a string represents a numeric value.
  • Enforce a safe Proxy environment for evaluating math expressions in dice rolls. Thanks KaKaRoTo for pointing out this cool approach towards evaluating code using a limited and controlled scope.

D&D5e System Improvements

  • Stat blocks and actions for CR 1/4 monster compendium entries have been added. Token artwork and biographies for these creatures are still pending, but I want to push ahead on making sure the SRD Monsters compendium has usable creature definitions for running encounters. Expect further progress in this area on an ongoing basis.
  • Right clicking a skill proficiency icon will cycle backwards in addition to left click cycling forwards. Thanks Giddy for the suggestion.
  • Added support for a custom weapon attack critical threshold configured as an additional special Actor trait. Thanks TimPosney for the suggestion.
  • Updated the character sheet to display the effective Initiative modifier (after additional bonuses) instead of just the base modifier. Thanks to RedReign for the suggestion.
  • Added equipped, attuned, and rarity fields to every item type in the 5e system data model.
  • Minor tweaks to the content displayed in the footer of spell cards.
  • Fixed a bug with the "apply damage" chat dropdown which was incorrectly setting current HP to undefined instead of applying the relative damage difference correctly.
  • Ensured that all Spells in the 5e Spells compendium have the "prepared" attribute present in their data model (with a default value of false).