Hello everyone! Today we're pleased to roll out our latest major update to the Roll20 ecosystem: The Update of Holding. This is our largest and most ambitious update to date, and we thank all of you (especially our Supporters and Mentors) who support us and allow us to continue improving Roll20 every single day. This forum post will specifically address the new changes that are coming to the virtual tabletop itself. We're also rolling out two completely new additions to the Roll20 site, the Compendium and the Roll20 for Android and Roll20 for iPad apps. Those each have their own forum posts, so check those out as well. Without further ado, here we go! Folders? Yep. After numerous requests over the past two years, we have finally "seen the light" and added folders to the interface. The good news is that we were also able to fully retain the current tagging and searching functionality as well! When you first log into your Campaign, you will see that the old separation between Characters and Handouts is now gone, and by default instead you will have two folders, a "Characters" folder and a "Handouts" folder. The items in those folders will be sorted alphabetically, just like on the old system. However, you now have the ability to use the handles on the left-hand side of the items (which will appear when you hover over them) to drag-and-drop and move items around as you please. You can put them in other folders, you can put characters and handouts in the same folder, etc. Note : if you want to move items around inside the folders, use the handle. If you want to drag-and-drop a Character or Handout onto the tabletop or onto a player, drag and drop the name of the item instead. Adding new Characters, Handouts, and folders are all now combined together into a single "Add" button at the top of the Journal tab. All items when added will currently be added to the top of the folder structure, and you can then move them into whatever place you'd like, including nesting folders in other folders up to 5 levels deep. In addition, you can right-click on a Folder to directly add a Character, Handout, or Subfolder to it. You can also Delete or Rename folders by right-clicking on them. Finally, you can right-click on an item (Character or Handout) to Delete it, Archive it, or Show it to Players (and yes, you can now use Show to Players both for Handouts and Characters!) Regarding tags and searching, if you use the search box at the top of the panel to search for a name or a tag, we will show a "filtered" view of items that are visible. Likewise, players will only see items they have in their journal, and we will only show the players a folder if it is non-empty (meaning there is at least one thing in there they can see). So you don't need to worry about naming a folder something that would give away a future plot hook -- as long as the players can't see any items in the folder, they won't see that folder's name, either. Popout Characters and Handouts <a href="http://i.imgur.com/5fHGXpr.gif" rel="nofollow">http://i.imgur.com/5fHGXpr.gif</a> You now have the option to "popout" Character dialog boxes into their own windows! To do so, there's a new icon next to the Character's name when you open up the Character, it looks like two little windows. Clicking that button will create a completely new window on your computer that contains that Character's information (including their Character Sheet if they have one). You can then move this window around like any other window on your computer, including resizing it, minimizing it, or (of course!) moving it to a different screen. And, of course, you can do the same thing with your Handouts as well. If you like the new popout feature enough that you want to use it all the time, there's a new Setting in your My Settings tab that will allow you to "Use popouts for Characters" -- instead of opening a dialog box which you then need to popout, instead clicking on a Character will always open a popout window directly. Overhauled 3D Dice We've completely overhauled the way that 3D Dice work behind-the-scenes. They now take significantly less resources to run (around 50 MB of extra memory as opposed to 500MB+ of extra memory that was required previously). The new renderer will now always show the same result to everyone. No more differences on different player's screens in terms of the results that are shown. Results are actually now calculated on our QuantumRoll server using the same technology that calculates our regular non-3D dice rolls. That means you now get the guaranteed random results you get in normal rolls, with the added benefit of seeing it in 3D! You'll now see the QuantumRoll next to 3D rolls to indicate this. We've generally improved the 3D appearance of the dice, making them larger (and easier to read), and also greatly reducing the amount of time on average that the dice spend rolling before they come to a stop. Should be a much "faster" experience in general. No more "stuck" 6-sided dice rolls! We're going to continue working on this going forward. In the pipeline we're planning to add support for dice "replays" (where you can click on any dice result and see the 3D dice roll behind-the-scenes for that roll), better support for showing 3D Dice that are used in whispers and gmrolls, and more. Introducing Roll Templates Rolls are a key part of tabletop gaming in general and Roll20 in particular. We've been working over the past year to really improve the way that we generate the results of rolls (via new technology like QuantumRoll, recent updates to our 3D Dice, and more), but for a while now we've also wanted to update the end result of the rolling experience -- namely, how rolls are displayed to players. We know that different games require different amounts of rolls, formatted in different ways, and that matching that formatting in a familiar way is a great way to get new players up to speed. Today we're pleased to introduce a new feature that will add amazing flexibility and customization to your roll results: Roll Templates. Put simply, Roll Templates allow sheet authors (or Mentors if they are using custom character sheets) to control the layout and styling of roll results. For example, you can turn this: Into something like one of these: Much better! And since Roll Templates are part of our Character Sheets system, sheet authors who are so inclined can take the time to create roll styles that match seamlessly with their character sheet look and feel (as well as the look and feel of the game the sheet is for). So no longer do 5E rolls need to look the same as those for 13th Age, FATE, or any other system. Some sheets (such as D&D 5th Edition and the Pathfinder (Legacy) sheet) already have Roll Templates baked into the dice rolls right in the sheet. We anticipate that other sheet authors will follow suit as time allows. In addition to allowing you to style your rolls in pretty much any fashion you'd like, the Roll Templates: Support some basic logic on the display end. So you can hide or show parts of the template depending on if a value was provided, or hide a section based on a value. Have helper functions to do things like check if a roll was a crit, fumble, or for a specific value. For example, while your macro might do all the possible needed rolls (such as Advantage and Crit Damage for 5th Edition), your roll template could only display those rolls if needed (for example, by checking the Attack roll to see if it was a crit) -- this can really help cut down on confusion for newer players. Are available to everyone (including Free users) in the Update of Holding -- no need to have API access to give your rolls a little extra styling. If you're using a community sheet and it has roll templates, everyone gets to use them. Getting started with Roll Templates is incredibly easy, and we've rolled out a full documentation to help sheet authors get started here: <a href="https://wiki.roll20.net/Roll_Templates" rel="nofollow">https://wiki.roll20.net/Roll_Templates</a> The main end-user experience we anticipate for this is sheet authors creating roll templates as part of their character sheets, and then programming the rolls on their sheets to use those templates. However, you'll also be able to create your own custom macros and abilities that use the templates available with your sheet of choice, or if you're a Mentor you'll be able to use the 'Custom' sheet option to create your own roll templates. If you want to play around with this feature yourself right now, we've included a built-in template regardless of what sheet you're using that you can try out right now. Here's a quick example of a roll that uses our default template: &{template:default} {{attack= [[1d20]] }} {{damage= [[2d6]] }} {{name= My Test Roll }} The default template is special, in that it will just list out whatever arguments you give it in a table format. A "normal" template would have a more system-specific layout and have a list of attributes that it accepts. You can change out the rolls to whatever you want, include an ability or macro, etc. The only requirement is that the roll must be an inline roll (so it can't be a macro for example that does a "/roll" command, but you can use Roll Templates in whispers.) You may need to update your macros and abilities to reflect this. Improvements to Character Sheet Performance We've greatly improved the performance of Character Sheets, especially those with lots of fields and tabbed layouts. Now when a value is changed in a sheet, rather than updating the entire sheet we now only update the field(s) that were changed as well as any auto-calculated fields that would have been affected by that change. For example, when changing a tab in the Pathfinder sheet previously it was re-updating all fields on the entire sheet, even though the only thing that had changed was the active tab. Now only the active tab is "updated" (causing the tab to change). In our testing we saw the amount of time spent updating after changing a field drop from (on average) 1000ms+ to under 10ms. (a 100x speedup). So basically the sheets should feel more responsive, especially when updating values and changing tabs. New Command: /talktomyself We realized that sometimes folks want to be able to just do macro testing or other types of commands where they don't want to pollute the chat archive (or annoy other players in-game). There's now a new command for this. Typing "/talktomyself" and hitting Enter will enable an off the record mode, where any commands (including rolls) that you execute will only display for yourself and will not be broadcast to any other players, and in addition will not be stored in the chat archive for the campaign. A special notification will persist in the top-right of the chat input box to remind you that you have this mode active. When you're finished, just type "/talktomyself off" and hit Enter to re-enter the normal mode. Basic Formatting in Text Chat Messages You can now make use of basic Markdown syntax in your text chat messages. We don't support the entire breadth of everything Markdown can do (like headers), but rather just basic formatting. Here's a quick rundown: Format Syntax Bold Text **text to bold** Italicize Text *text to italicize* Link to URL [Google]( <a href="http://www.google.com" rel="nofollow">http://www.google.com</a> ) Image [Roll20 Logo]( <a href="http://roll20.net/assets/themes/roll20/images/new-logo-white-sm.png" rel="nofollow">http://roll20.net/assets/themes/roll20/images/new-logo-white-sm.png</a> ) (Note that including an image is just putting in a link to an image. If the link ends in ".png", ".jpg", ".jpeg", or ".gif", we will automatically insert an image tag in addition to linking to the source image). You can use the Markdown formatting in general messages, whispers (/w), descriptions (/desc), and emotes (/em). You can also include Markdown formatting in the values you pass to the new Roll Templates and it should work fine. For example, {{attack= [[1d20]] vs **AC**}}. Let us know if you run into any incompatibilities there. New Chat Command (Escape Text): ` We've added a new text-chat command, "`" (that's a back-tick if it's hard to see). If you put a back-tick at the beginning of a command, it will not parse anything about it (inline rolls, variables, etc.) Instead it will just output your text directly. So for example: `&{template:default} {{attack=[[1d20]]}} Would just output that text as it appears, rather than triggering the template or doing an inline roll. Custom Critical Success and Fumble Points in Rolls We've added an additional syntax to dice rolls which allows you specify that point at which a roll is considered to be a "Critical Success" or "Critical Failure (Fumble)". Here's a quick example: /roll 1d20cs>10 // Show any roll equal to 10 or greater as a crit success /roll 1d20cf<3 //Show any roll equal to or less than 3 as a crit failure. /roll 1d20cs20cs10 //Show any roll equal to 20 or 10 exactly as a crit success Note that these values will not affect other things that by default work on max roll value (including exploding, penetrating, etc.). It basically only affects the display of the roll result to the player. For example, if you want dice to explode on 18 or higher, and you want to show an 18 or higher as a crit, you would need to do: /roll 1d20!>18cs>18 API: Dice Engine Updated The API has been updated to the latest dice roll engine library, which means that all of the fun stuff we've been adding recently (such as "ro" for reroll once, the new custom crit success and crit failure mods discussed above, etc.) are now available for your API scripts to use in their rolls as well. In addition, the API now uses the QuantumRoll server when performing both regular and inline rolls, so if you use sendChat() to perform rolls you'll now see that the QuantumRoll icon will show up on player's screens in the text chat. API: API Command Buttons in Text Chat You can also take advantage of the new text chat formatting (in both your API-generated messages and those generated by macros and abilities) to create "API command buttons" in the chat. Here's an example of what that looks like: To do so using Markdown formatting: [Attack Roll](!attackroll) Where the part in the brackets will show up in the button, and part in the parentheses is the command to be executed. You can include anything in a normal roll (macros, abilities, queries, etc.), but keep in mind that the command itself will be executed by the player who clicks on it -- so for example don't include @{Character|AC} if everyone who can see the message can't access that Character. In that case, include the actual value as it existed when you sent the command by filling it in yourself before you send the chat message. These buttons work in general messages, whispers, etc. Note that if you use /direct to send a message, we won't do any Markdown parsing on it, so you need to include your own <a> tags. Here's an example of that: <a href="!attackroll">Attack Roll</a> API: playerIsGM(playerid) We've added a native function that works the same as the very popular isGM() script that Aaron wrote. It's a drop-in replacement, so just change all of your scripts to use "playerIsGM()" instead of "isGM()". The new function will always return the correct answer depending on the current moment, so even if a GM chooses to re-join as a player or a player is promoted to a GM mid-game, playerIsGM() will respond accordingly without any need to clear a cache or restart the API sandbox. Other API Updates: Added to Object.remove() method , which deletes an object from the game. Can be used on the same objects as createObj (characters, handouts, macros, graphics, text, etc.). You call it directly on the object. So for example, mycharacter.remove(); Added read-only access to the "journalfolder" property on the Campaign object. This is a JSON string which contains data about the folder structure of the campaign. When passing the ID of a character to the sendChat() command, the avatar of that Character will now be shown alongside the chat message if one is set. Added read-and-write access to the following properties on the Page object: "lightupdatedrop": True/false value, only update Dynamic Lighting when an object is dropped. "lightenforcelos": True/false value, enforce Line of Sight for objects "lightrestrictmove": True/false value, don't allow objects that have sight to move through Dynamic Lighting walls "lightglobalillumn": True/false value, if true anywhere a token can "see" it is assumed there is bright light present. Added read-and-write access to the "light_multiplier" object on Graphic objects. Added read-only access to the "_defaulttoken" property on Characters. This is a JSON string that contains the data for the Character's default token if one is set. Note that this is a "blob" similar to "bio" and "notes", so you must pass a callback function to get(). Fixed the bug where editing an object right after you created it with createObj() would cause an error. The API fully supports the new Roll Templates feature as of today. Miscellaneous and Bug Fixes [Bugfix] Fixed a bug that's been around for a while where players sometimes couldn't roll global macros created by the GM directly from the Settings tab using the little dice icon there. [Bugfix] It should now be easier to select drawings. In particular, using the drag-select tool inside of an empty drawing shape (such as walls you have drawn around a room) will no longer select the shape unless your selection crosses the actual lines of the drawing. This should make it much easier to select for example, a door that is slightly "inside" of a room. [Bugfix] Fixed an issue where you would receive a "Connection timed out" error when attempting to clear the Chat Log of campaigns that have a very large chat history. If you adjust the size of the right sidebar after you join a game, your 3D Dice will not "squish" into weird shapes. Instead the aspect ratio will always be maintained and they will instead shrink or grow in size. [Bugfix] Fixed a bug where when you drag dice inside of a dice result to re-order them, the new order was not appearing to other players in the game immediately. Added autolinking of URLs inside the descriptions of Character Sheets on the Campaign Settings and New Campaign screens. This allows sheet authors to more easily direct you to a wiki page or other source of information about the sheet. [Bugfix] Fixed a bug where when you changed players between pages, the turn tracker wasn't immediately updating for players (it should hide any tokens that are not on the current page they are on).