Page not found :(
-The page you are looking for doesn't exist or has been moved.
-diff --git a/hugo_stats.json b/hugo_stats.json index 49f0afb..04646aa 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -5,7 +5,6 @@ "article", "aside", "base", - "blockquote", "body", "button", "code", diff --git a/public/404.html b/public/404.html index 4d756ce..d3bc4f0 100644 --- a/public/404.html +++ b/public/404.html @@ -1,207 +1,3 @@ - - -
- - - - - - - - - - -The page you are looking for doesn't exist or has been moved.
-The page you are looking for doesn't exist or has been moved.
- September 7, 20231 minute -
- -You can use blog posts for announcing product updates and features.
Well-thought-through product announcements will help increase feature awareness and engage users with new functionality. Just like sharing your public roadmap, it’s also a great way to let potential customers see that you’re constantly improving.
-September 7, 20231 minute
You can use blog posts for announcing product updates and features.
Well-thought-through product announcements will help increase feature awareness and engage users with new functionality. Just like sharing your public roadmap, it’s also a great way to let potential customers see that you’re constantly improving.
You can use blog posts for announcing product updates and features.
-- September 7, 20231 minute -
-You can use blog posts for announcing product updates and features.
September 7, 20231 minute
Release Date: 2022-03-17
-Release Date: 2023-03-17
-Release Date: 2022-03-17
Release Date: 2023-03-17
It depends on your web development skill level. There are a number of benefits to the Beacon SDK if you know how to build web applications. If you don’t know how to set up your own local environment, than the Beacon SDK might now be the first place you should start. Learn more about sheet development using the custom sheet.
-If you have the skill to take advantage of the Beacon SDK, there are a number of improvements that will make it much easier to build characters sheets.
-First, the Beacon SDK allows you to develop locally and preview your changes automatically in the Roll20 Tabletop and Roll20 Character sandboxes. This means that you don’t have to keep uploading your HTML and CSS into the custom sheet to see your changes.
-Next, it allows you to develop your character sheet with all the power of JavaScript frameworks and modern web development libraries. In our example sheets, we use Vue.js, but you are free to use whatever you are most comfortable with. Also, you could use something like Cypress to create automated testing. That’s what we use in our Beacon sheets.
-Lastly, the Beacon SDK makes it much easier for a web developer who knows JSON and Javascript to access character data and manage attributes on the character. If you’re familiar with the custom sheet, you no longer have to deal with sheet workers to get the data you need for a character. Also, the Beacon SDK introduces nested and computed attributes that make complex data models for your character sheet easier to create and maintain.
-That is up to you and your comfort level. If you’re looking to learn more about web development, building a character sheet with the Beacon SDK is a great way to level up your skills. What you learn during this process can be taken with you into any other web development project you work on in the future.
-If setting up your own development environment is too intimidating for you, than it might be easier for you to start with the custom sheet and to go from there.
-You can start learning how to build a local development environment by reading or watching the following tutorials. Note: these are not tutorials that we’ve produced, but we have found them helpful in getting started with web development.
-The recent acquisition of Demiplane brings exciting new opportunities for character sheets and compendiums on Roll20. At the same time, we are fully committed to supporting the Beacon SDK and character sheets that are built in our new advanced sheets ecosystem on Roll20. In fact, we believe that the Beacon SDK will be a key component of our future plans for Demiplane integration. In addition, our new D&D 2024 sheet is built on top of the Beacon SDK, and we will continue to utilize it to build first-class experiences on Roll20.
-In short, you can rest assured that the Beacon SDK is an important tool in our toolbox moving forward.
-convertLegacyMacroAttributes
function. Sheet developers can define how to handle legacy attribute values to ensure compatibility with existing macros.SweetAlert2
prompt to users and returns the results along with any errors. It is commonly used for interactive prompts or confirmations within the VTT interface.convertLegacyMacroAttributesArgs
type defines the arguments used for handling legacy macro attributes. It includes the attribute name, character ID, and character data needed for mapping legacy attributes to the new sheet structure.It depends on your web development skill level. There are a number of benefits to the Beacon SDK if you know how to build web applications. If you don’t know how to set up your own local environment, than the Beacon SDK might now be the first place you should start. Learn more about sheet development using the custom sheet.
If you have the skill to take advantage of the Beacon SDK, there are a number of improvements that will make it much easier to build characters sheets.
First, the Beacon SDK allows you to develop locally and preview your changes automatically in the Roll20 Tabletop and Roll20 Character sandboxes. This means that you don’t have to keep uploading your HTML and CSS into the custom sheet to see your changes.
Next, it allows you to develop your character sheet with all the power of JavaScript frameworks and modern web development libraries. In our example sheets, we use Vue.js, but you are free to use whatever you are most comfortable with. Also, you could use something like Cypress to create automated testing. That’s what we use in our Beacon sheets.
Lastly, the Beacon SDK makes it much easier for a web developer who knows JSON and Javascript to access character data and manage attributes on the character. If you’re familiar with the custom sheet, you no longer have to deal with sheet workers to get the data you need for a character. Also, the Beacon SDK introduces nested and computed attributes that make complex data models for your character sheet easier to create and maintain.
That is up to you and your comfort level. If you’re looking to learn more about web development, building a character sheet with the Beacon SDK is a great way to level up your skills. What you learn during this process can be taken with you into any other web development project you work on in the future.
If setting up your own development environment is too intimidating for you, than it might be easier for you to start with the custom sheet and to go from there.
You can start learning how to build a local development environment by reading or watching the following tutorials. Note: these are not tutorials that we’ve produced, but we have found them helpful in getting started with web development.
The recent acquisition of Demiplane brings exciting new opportunities for character sheets and compendiums on Roll20. At the same time, we are fully committed to supporting the Beacon SDK and character sheets that are built in our new advanced sheets ecosystem on Roll20. In fact, we believe that the Beacon SDK will be a key component of our future plans for Demiplane integration. In addition, our new D&D 2024 sheet is built on top of the Beacon SDK, and we will continue to utilize it to build first-class experiences on Roll20.
In short, you can rest assured that the Beacon SDK is an important tool in our toolbox moving forward.
convertLegacyMacroAttributes
function. Sheet developers can define how to handle legacy attribute values to ensure compatibility with existing macros.SweetAlert2
prompt to users and returns the results along with any errors. It is commonly used for interactive prompts or confirmations within the VTT interface.convertLegacyMacroAttributesArgs
type defines the arguments used for handling legacy macro attributes. It includes the attribute name, character ID, and character data needed for mapping legacy attributes to the new sheet structure.The background color of the alert box.
-An entity in the game with attributes, bio, GM notes, and a token representation.
-A digital or printed page used to track a character’s attributes, abilities, and other relevant information in a role-playing game.
-Properties that have both get and set methods, which can be dynamically calculated.
-A function to handle mapping legacy macro attributes to the new Beacon Sheet format.
-A set of functions enabling the sheet to send commands back to the VTT.
-The person who runs the game, controls the NPCs & the story, and provides challenges for the players.
-Methods that act as event handlers to process messages from the host.
-Function to initialize the SDK relay, setting up communication between the host and the character sheet.
-A script that automates repetitive tasks in the VTT.
-A predefined format for displaying the results of a dice roll.
-A visual representation of a character or object on the virtual tabletop, with various properties like position, size, and attributes.
-An online platform that allows players to play tabletop role-playing games over the internet.
-A message displayed when an input value does not meet specific criteria.
-A system that ensures the fairness and authenticity of dice rolls in the VTT by using cryptographic methods.
- - -The background color of the alert box.
An entity in the game with attributes, bio, GM notes, and a token representation.
A digital or printed page used to track a character’s attributes, abilities, and other relevant information in a role-playing game.
Properties that have both get and set methods, which can be dynamically calculated.
A function to handle mapping legacy macro attributes to the new Beacon Sheet format.
A set of functions enabling the sheet to send commands back to the VTT.
The person who runs the game, controls the NPCs & the story, and provides challenges for the players.
Methods that act as event handlers to process messages from the host.
Function to initialize the SDK relay, setting up communication between the host and the character sheet.
A script that automates repetitive tasks in the VTT.
A predefined format for displaying the results of a dice roll.
A visual representation of a character or object on the virtual tabletop, with various properties like position, size, and attributes.
An online platform that allows players to play tabletop role-playing games over the internet.
A message displayed when an input value does not meet specific criteria.
A system that ensures the fairness and authenticity of dice rolls in the VTT by using cryptographic methods.
We appreciate your interest in contributing to the Beacon SDK project. Here are some guidelines to help you get started:
-If you find a bug, please report it by opening an issue in the GitHub repository. Provide as much detail as possible to help us understand and reproduce the issue.
-We welcome suggestions for new features. Please open an issue in the GitHub repository with a detailed description of the feature you would like to see and why you think it would be useful.
-Fork the Repository: Create a personal fork of the project on GitHub.
-Clone the Fork: Clone your fork to your local machine.
- - - -Create a Branch: Create a new branch for your work.
- - - -Make Changes: Make your changes to the codebase. Follow the existing code style and conventions.
-Run Tests: Ensure that all tests pass before submitting your changes.
- - - -Commit Changes: Commit your changes with a descriptive commit message.
- - - -Push Changes: Push your changes to your fork.
- - - -Create a Pull Request: Open a pull request from your fork to the main repository. Provide a detailed description of your changes and why they should be merged.
-Unit Tests: Run unit tests with Vitest.
- - - -End-to-End Tests: Run End-to-End tests with Cypress.
- - - -Follow the existing code style and conventions.
-Use ESLint for linting.
- - - -Format code with Prettier.
- - - -Thank you for contributing to the Beacon SDK project!
- - -We appreciate your interest in contributing to the Beacon SDK project. Here are some guidelines to help you get started:
If you find a bug, please report it by opening an issue in the GitHub repository. Provide as much detail as possible to help us understand and reproduce the issue.
We welcome suggestions for new features. Please open an issue in the GitHub repository with a detailed description of the feature you would like to see and why you think it would be useful.
Fork the Repository: Create a personal fork of the project on GitHub.
Clone the Fork: Clone your fork to your local machine.
Create a Branch: Create a new branch for your work.
Make Changes: Make your changes to the codebase. Follow the existing code style and conventions.
Run Tests: Ensure that all tests pass before submitting your changes.
Commit Changes: Commit your changes with a descriptive commit message.
Push Changes: Push your changes to your fork.
Create a Pull Request: Open a pull request from your fork to the main repository. Provide a detailed description of your changes and why they should be merged.
Unit Tests: Run unit tests with Vitest.
End-to-End Tests: Run End-to-End tests with Cypress.
Follow the existing code style and conventions.
Use ESLint for linting.
Format code with Prettier.
Thank you for contributing to the Beacon SDK project!
Actions are a collection of methods that can be executed from the Roll20 Tabletop or Roll20 Characters. These actions are used for any rolls that may need to be triggered outside of the sheet itself, such as from a macro or a chat button. Generally, most or all of a sheet’s rolls should be defined as actions.
- - - -Actions are passed into the initRelay
function in an object, where the keys are the unique names of the actions, and the values are objects containing a method
property (additional metadata fields may be added to this object in the future).
The action’s method
receives a props
object from the host containing the following properties:
dispatch
: A Dispatch
object.character
: The data of the character performing the action. Currently, the action will not receive the character’s bio or GM notes, regardless of whether the player has access to those fields.messageId
(optional): A unique ID for an existing chat message. It’s included in actions triggered from chat buttons to provide context for the original roll.rolls
(optional): Included when action is triggered from a chat button. Contains the roll results of the original roll.These methods can also receive an unlimited number of additional arguments. This is because these actions can be triggered by plain text via a macro. However, all additional arguments must be strings. Additionally, these methods can be synchronous or asynchronous and do not return a value.
- - - - - -Actions are a collection of methods that can be executed from the Roll20 Tabletop or Roll20 Characters. These actions are used for any rolls that may need to be triggered outside of the sheet itself, such as from a macro or a chat button. Generally, most or all of a sheet’s rolls should be defined as actions.
Actions are passed into the initRelay
function in an object, where the keys are the unique names of the actions, and the values are objects containing a method
property (additional metadata fields may be added to this object in the future).
The action’s method
receives a props
object from the host containing the following properties:
dispatch
: A Dispatch
object.character
: The data of the character performing the action. Currently, the action will not receive the character’s bio or GM notes, regardless of whether the player has access to those fields.messageId
(optional): A unique ID for an existing chat message. It’s included in actions triggered from chat buttons to provide context for the original roll.rolls
(optional): Included when action is triggered from a chat button. Contains the roll results of the original roll.These methods can also receive an unlimited number of additional arguments. This is because these actions can be triggered by plain text via a macro. However, all additional arguments must be strings. Additionally, these methods can be synchronous or asynchronous and do not return a value.
Sheet authors define computed properties that are accessed by the Roll20 Tabletop or Roll20 Characters. These computed properties can be used as attributes in macros and are available to assign as values to token bars - if the tokenBarValue
property is set to true.
Computed properties are passed into the initRelay
function in an object where the keys are the names of the properties, and the value should be an object containing the following:
get
(required): It receives character data along with any number of string parameters and should return the computed value.tokenBarValue
(optional): A boolean indicating whether this property should be available for use in token bars.description
(optional): A text value indicating what this computed summary property represents.set
(optional): This method receives character data and a dispatch, along with string arguments. This method does not need to return a value.tokenBarValue
to true will make the property available to use as a value for token bars. To work correctly, the get
function must not rely on any additional arguments and must return either a simple value (a string or number) or an object:set
function is omitted, the value will not be editable from the token itself. If defined, set
methods will receive one string argument, which is whatever the user types into the input for modifying the bar.Sheet authors define computed properties that are accessed by the Roll20 Tabletop or Roll20 Characters. These computed properties can be used as attributes in macros and are available to assign as values to token bars - if the tokenBarValue
property is set to true.
Computed properties are passed into the initRelay
function in an object where the keys are the names of the properties, and the value should be an object containing the following:
get
(required): It receives character data along with any number of string parameters and should return the computed value.tokenBarValue
(optional): A boolean indicating whether this property should be available for use in token bars.description
(optional): A text value indicating what this computed summary property represents.set
(optional): This method receives character data and a dispatch, along with string arguments. This method does not need to return a value.tokenBarValue
to true will make the property available to use as a value for token bars. To work correctly, the get
function must not rely on any additional arguments and must return either a simple value (a string or number) or an object:set
function is omitted, the value will not be editable from the token itself. If defined, set
methods will receive one string argument, which is whatever the user types into the input for modifying the bar.The dispatch is returned by the initRelay
and provides methods for sending commands from the character sheet back to the host. Except when specified every method below will return a promise.
The update
method sends character changes to the host (Roll20 Tabletop or Roll20 Characters) to be persisted. The partial character passed in here must contain the character’s id, and can contain any combination of the attributes, bio, and gmNotes properties. When updating a character’s attributes, only include those attributes that have changed.
Like the update
method, updateCharacter
sends character changes to the host page (Roll20 Tabletop or Roll20 Characters) to be persisted. However, this method takes a full set of character attributes as the character argument, and automatically computes the diff with existing character attributes, so that only changed attributes are sent to the data store.
The roll
method takes one or more rolls in the form of an object, where the keys are unique roll names and the values are roll strings. messageId can be provided to attach the roll to an existing chat message, either overriding it or appending to it in the chat log. If messageId is omitted, the roll will be associated with a new chat message and a new messageId for that message will be returned with the roll results. The method returns a promise that resolves with an object containing the messageId and the RollResult (see Types). The roll result is returned in the same format as in the non-beacon dice rolls computed roll system.
post
posts a message to chat, either creating a new message or overwriting an existing one. It requires a character id and message content, a string containing either plain text or HTML to be posted. The method also accepts an options object. Currently, only whisper and secret are supported, the only valid value for whisper is gm, which will send the message as a whisper to the gm. The secret option is ignored unless whisper is also set, toggling to true will cause the message to not be visible to the controlling player. Like roll, messageId can be provided to update an existing chat message, but if omitted the method will generate a new messageId and post a new chat message. The method returns the messageId.
The query
method takes an options object and uses them to display a SweetAlert2 prompt to the user. It returns the results of the query as a SweetAlertResult
, along with any errors encountered. The options work exactly as described in the documentation for SweetAlert2, however not all options are allowed. Here is a list of the allowed options:
titleText, text, iconColor, input, width, padding, background, position, grow, timer, timerProgressBar, showConfirmButton, showDenyButton, showCancelButton, ariaLabel, confirmButtonText, denyButtonText, cancelButtonText, confirmButtonAriaLabel, confirmButtonColor, cancelButtonAriaLabel, cancelButtonColor, denyButtonAriaLabel, denyButtonColor, reverseButtons, showCloseButton, closeButtonAriaLabel, returnInputValueOnDeny, imageUrl, imageWidth, imageHeight, imageAlt, inputLabel, inputPlaceholder, inputValue, inputOptions, inputPlaceholder, inputAutoTrim, inputAttributes, validationMessage, progressSteps, currentProgressStep, progressStepsDistance.
perform
executes the specified action on behalf of the character (designated by the character id), passing in args to the action method. This method can perform actions on behalf of any character, even a character that the sheet does not have data for.
see setComputed
below
getComputed
and setComputed
are both nearly identical in how they are called, taking a character id and a property with the name of the computed property you wish to get or set, and an array of string args. Both methods return a promise that resolves with the computed value.
compendiumRequest
executes an AJAX request to the compendium service’s graphQL endpoint. It takes in a graphQL query string written according to the Compendium service’s schema. The query string does not need to include the ruleSystem shortName as this is set automatically according to the campaign override or sheet.json value in the Roll20 Tabletop.
Like compendiumRequest
, except that calls to this method are automatically debounced (at 100ms) and grouped together into a single request to the compendium service. Note that this method will only return the requested data, it does not return errors or extensions.
getTokens
requires a character id string and returns information about tokens on the user’s current page. The return value contains two arrays of tokens. The tokens array contains all tokens on the current page that represent the character whose id was provided to the method. The selected array contains any tokens that are currently selected, regardless of which character they represent. The returned token objects contain all of the token attributes available to the API, you can find documentation here and here.
addToTracker
adds or updates a single item in the turn tracker. Passing in a tokenId will add the specified token to the tracker, while passing in custom with a name and an optional image url (img) will add a custom item, not connected to any character or token. A round calculation string can be added via the optional formula parameter. value is the initiative number for the item.
addActionsToHost
adds a specific action(macro) to an area of the Roll20 Tabletop UI; either the macrobar or the token action bar. Either sheetAction or action can be passed in but not both at the same time. The sheetAction arg should be passed in when an the action is to designated to a character. While the action arg should be passed in when the action is more generic.
getActions
gets a specific character’s actions(macro).
setContainerSize
updates the size of the container which holds the sheet shared settings. Returns a promise that can be awaited. This can be used in conjunction with something like the ResizeSensor event listener from npm: css-element-queries to automatically resize the container on the host.
updateTokensByCharacter
updates a particular character’s default token as well as all existing tokens representing that character. Returns a promise that can be awaited.
updateTokensByIds
updates a single or several tokens. Returns a promise that can be awaited.
autoLinkText
goes through the text to find handout names between square brackets and converts them into links with the handoutID. For example in a game with a handout named Dragon
, passing in the text string of this is a [Dragon]
to autoLinkText returns something similar to this is a <a href="https://journal.roll20.net/8je02j0kd02k">Dragon</a>
.
openDialogFromLink
opens the supplied urlString through the Roll20 Tabletop.
The dispatch is returned by the initRelay
and provides methods for sending commands from the character sheet back to the host. Except when specified every method below will return a promise.
The update
method sends character changes to the host (Roll20 Tabletop or Roll20 Characters) to be persisted. The partial character passed in here must contain the character’s id, and can contain any combination of the attributes, bio, and gmNotes properties. When updating a character’s attributes, only include those attributes that have changed.
Like the update
method, updateCharacter
sends character changes to the host page (Roll20 Tabletop or Roll20 Characters) to be persisted. However, this method takes a full set of character attributes as the character argument, and automatically computes the diff with existing character attributes, so that only changed attributes are sent to the data store.
The roll
method takes one or more rolls in the form of an object, where the keys are unique roll names and the values are roll strings. messageId can be provided to attach the roll to an existing chat message, either overriding it or appending to it in the chat log. If messageId is omitted, the roll will be associated with a new chat message and a new messageId for that message will be returned with the roll results. The method returns a promise that resolves with an object containing the messageId and the RollResult (see Types). The roll result is returned in the same format as in the non-beacon dice rolls computed roll system.
post
posts a message to chat, either creating a new message or overwriting an existing one. It requires a character id and message content, a string containing either plain text or HTML to be posted. The method also accepts an options object. Currently, only whisper and secret are supported, the only valid value for whisper is gm, which will send the message as a whisper to the gm. The secret option is ignored unless whisper is also set, toggling to true will cause the message to not be visible to the controlling player. Like roll, messageId can be provided to update an existing chat message, but if omitted the method will generate a new messageId and post a new chat message. The method returns the messageId.
The query
method takes an options object and uses them to display a SweetAlert2 prompt to the user. It returns the results of the query as a SweetAlertResult
, along with any errors encountered. The options work exactly as described in the documentation for SweetAlert2, however not all options are allowed. Here is a list of the allowed options:
titleText, text, iconColor, input, width, padding, background, position, grow, timer, timerProgressBar, showConfirmButton, showDenyButton, showCancelButton, ariaLabel, confirmButtonText, denyButtonText, cancelButtonText, confirmButtonAriaLabel, confirmButtonColor, cancelButtonAriaLabel, cancelButtonColor, denyButtonAriaLabel, denyButtonColor, reverseButtons, showCloseButton, closeButtonAriaLabel, returnInputValueOnDeny, imageUrl, imageWidth, imageHeight, imageAlt, inputLabel, inputPlaceholder, inputValue, inputOptions, inputPlaceholder, inputAutoTrim, inputAttributes, validationMessage, progressSteps, currentProgressStep, progressStepsDistance.
perform
executes the specified action on behalf of the character (designated by the character id), passing in args to the action method. This method can perform actions on behalf of any character, even a character that the sheet does not have data for.
see setComputed
below
getComputed
and setComputed
are both nearly identical in how they are called, taking a character id and a property with the name of the computed property you wish to get or set, and an array of string args. Both methods return a promise that resolves with the computed value.
compendiumRequest
executes an AJAX request to the compendium service’s graphQL endpoint. It takes in a graphQL query string written according to the Compendium service’s schema. The query string does not need to include the ruleSystem shortName as this is set automatically according to the campaign override or sheet.json value in the Roll20 Tabletop.
Like compendiumRequest
, except that calls to this method are automatically debounced (at 100ms) and grouped together into a single request to the compendium service. Note that this method will only return the requested data, it does not return errors or extensions.
getTokens
requires a character id string and returns information about tokens on the user’s current page. The return value contains two arrays of tokens. The tokens array contains all tokens on the current page that represent the character whose id was provided to the method. The selected array contains any tokens that are currently selected, regardless of which character they represent. The returned token objects contain all of the token attributes available to the API, you can find documentation here and here.
addToTracker
adds or updates a single item in the turn tracker. Passing in a tokenId will add the specified token to the tracker, while passing in custom with a name and an optional image url (img) will add a custom item, not connected to any character or token. A round calculation string can be added via the optional formula parameter. value is the initiative number for the item.
addActionsToHost
adds a specific action(macro) to an area of the Roll20 Tabletop UI; either the macrobar or the token action bar. Either sheetAction or action can be passed in but not both at the same time. The sheetAction arg should be passed in when an the action is to designated to a character. While the action arg should be passed in when the action is more generic.
getActions
gets a specific character’s actions(macro).
setContainerSize
updates the size of the container which holds the sheet shared settings. Returns a promise that can be awaited. This can be used in conjunction with something like the ResizeSensor event listener from npm: css-element-queries to automatically resize the container on the host.
updateTokensByCharacter
updates a particular character’s default token as well as all existing tokens representing that character. Returns a promise that can be awaited.
updateTokensByIds
updates a single or several tokens. Returns a promise that can be awaited.
autoLinkText
goes through the text to find handout names between square brackets and converts them into links with the handoutID. For example in a game with a handout named Dragon
, passing in the text string of this is a [Dragon]
to autoLinkText returns something similar to this is a <a href="https://journal.roll20.net/8je02j0kd02k">Dragon</a>
.
openDialogFromLink
opens the supplied urlString through the Roll20 Tabletop.
Handler methods allow the sheet to respond to data passed from the Roll20 Tabletop or Roll20 Characters (both refered to as host throughout this page) to the sheet. It is the main agrument that must be passed into initRelay
or the sheet will never fully load.
The onInit
method receives the initial data from the host.
This will be the first time we have access to character data, sheet settings, as well as compendium data if this character is made as a result of a compendium drag and drop on the host.
- - - -This function may be called multiple times during development in the sheet sandbox as part of hot reloads.
- -onChange
is called whenever a character’s data is changed on the host’s end. The event object contains a partial character with only the character’s ID and the changed data. This could be the character’s bio, GM notes, or attributes (only the changed attributes).
onSettingsChange
is called when either the host’s color theme is changed, or when the current player’s ownership of the primary character changes.
onSharedSettingsChange
is called when someone changes a shared setting in the host.
onTranslationsRequest
is called before the relay is fully initialized and returns the translation JSON data corresponding to the two-letter language argument.
onDragOver
is called when a compendium item from the compendium tab is dragged over the iframe window containing the character sheet.
Coordinates of the drag are provided via top and left values, and basic compendium data is passed so that a subsequent compendium request can be made via the provided dispatch. If the item is moved outside of the iframe, dragData
and coordinates
are null.
onDropOver
is called when a compendium item from the compendium tab is dropped over the iframe window containing the character sheet.
Coordinates of the drop are provided via top and left values, and basic compendium data is passed so that a subsequent compendium request can be made via the provided dispatch.
- - - -Handler methods allow the sheet to respond to data passed from the Roll20 Tabletop or Roll20 Characters (both refered to as host throughout this page) to the sheet. It is the main agrument that must be passed into initRelay
or the sheet will never fully load.
The onInit
method receives the initial data from the host.
This will be the first time we have access to character data, sheet settings, as well as compendium data if this character is made as a result of a compendium drag and drop on the host.
This function may be called multiple times during development in the sheet sandbox as part of hot reloads.
onChange
is called whenever a character’s data is changed on the host’s end. The event object contains a partial character with only the character’s ID and the changed data. This could be the character’s bio, GM notes, or attributes (only the changed attributes).
onSettingsChange
is called when either the host’s color theme is changed, or when the current player’s ownership of the primary character changes.
onSharedSettingsChange
is called when someone changes a shared setting in the host.
onTranslationsRequest
is called before the relay is fully initialized and returns the translation JSON data corresponding to the two-letter language argument.
onDragOver
is called when a compendium item from the compendium tab is dragged over the iframe window containing the character sheet.
Coordinates of the drag are provided via top and left values, and basic compendium data is passed so that a subsequent compendium request can be made via the provided dispatch. If the item is moved outside of the iframe, dragData
and coordinates
are null.
onDropOver
is called when a compendium item from the compendium tab is dropped over the iframe window containing the character sheet.
Coordinates of the drop are provided via top and left values, and basic compendium data is passed so that a subsequent compendium request can be made via the provided dispatch.
When utilizing Macros within the VTT, there are instances where a legacy macro might need to be employed for a Beacon sheet.
-This scenario commonly arises when transitioning from an existing legacy sheet to a Beacon sheet. During such transitions, it’s possible that the attributes called from the legacy macro may not align with the structure of attributes in the Beacon Sheet.
-The convertLegacyMacroAttributes
function serves as a pivotal tool, empowering Sheet Developers to determine the mapping strategy for legacy attributes to the new Beacon Sheet.
convertLegacyMacroAttributes
This function is defined during the initial SDK initialization process and is invoked by the host when it encounters a failure in locating an attribute’s value.
- - - -Advanced sheet macros typically first search through the defined computed properties before resorting to the convertLegacyMacroAttributes
function.
The function’s purpose is to return a value that will be substituted in the macro. However, it grants Sheet Developers the autonomy to devise their preferred approach for handling legacy attribute values.
- - - - - -When utilizing Macros within the VTT, there are instances where a legacy macro might need to be employed for a Beacon sheet.
This scenario commonly arises when transitioning from an existing legacy sheet to a Beacon sheet. During such transitions, it’s possible that the attributes called from the legacy macro may not align with the structure of attributes in the Beacon Sheet.
The convertLegacyMacroAttributes
function serves as a pivotal tool, empowering Sheet Developers to determine the mapping strategy for legacy attributes to the new Beacon Sheet.
convertLegacyMacroAttributes
This function is defined during the initial SDK initialization process and is invoked by the host when it encounters a failure in locating an attribute’s value.
Advanced sheet macros typically first search through the defined computed properties before resorting to the convertLegacyMacroAttributes
function.
The function’s purpose is to return a value that will be substituted in the macro. However, it grants Sheet Developers the autonomy to devise their preferred approach for handling legacy attribute values.
The Beacon SDK is composed of various methods and components that allow developers to create dynamic and interactive character sheets for virtual tabletop (VTT) games. initRelay
is the main method that initializes the Beacon SDK communication channel with the host (Either the Roll20 tabletop or in Roll20 Characters). It should be initialized as soon as the sheet loads, as its onInit
handler will be the earliest we can get access to that character’s data.
These components are crucial for handling actions, computations, macros, and rolls. This overview provides a high-level summary of each section, helping you understand their roles and how they integrate within the SDK.
-Actions define specific operations that can be performed by characters within the VTT. These operations can range from simple tasks like rolling a dice to more complex interactions such as casting spells or activating abilities.
-Handlers are event listeners that manage communication between the VTT and the character sheet. They respond to various events, such as changes in character attributes or settings, and trigger appropriate actions or updates.
-Computed properties are dynamic values derived from other character attributes. They allow for the creation of complex, calculated attributes that automatically update when their dependencies change.
-Macro attributes handle the conversion of legacy macro attributes to the new format used in the Beacon SDK. This ensures compatibility with older character sheets and macros, allowing for a smooth transition to the new system.
-The Rolls component allows for advanced dice-rolling mechanics within the VTT. It supports both simple and complex rolls, providing flexibility in how roll results are displayed and computed.
-The dispatch object provides methods for sending commands from the character sheet back to the host. Except when specified every method returns a promise.
-The Beacon SDK is composed of various methods and components that allow developers to create dynamic and interactive character sheets for virtual tabletop (VTT) games. initRelay
is the main method that initializes the Beacon SDK communication channel with the host (Either the Roll20 tabletop or in Roll20 Characters). It should be initialized as soon as the sheet loads, as its onInit
handler will be the earliest we can get access to that character’s data.
These components are crucial for handling actions, computations, macros, and rolls. This overview provides a high-level summary of each section, helping you understand their roles and how they integrate within the SDK.
Actions define specific operations that can be performed by characters within the VTT. These operations can range from simple tasks like rolling a dice to more complex interactions such as casting spells or activating abilities.
Handlers are event listeners that manage communication between the VTT and the character sheet. They respond to various events, such as changes in character attributes or settings, and trigger appropriate actions or updates.
Computed properties are dynamic values derived from other character attributes. They allow for the creation of complex, calculated attributes that automatically update when their dependencies change.
Macro attributes handle the conversion of legacy macro attributes to the new format used in the Beacon SDK. This ensures compatibility with older character sheets and macros, allowing for a smooth transition to the new system.
The Rolls component allows for advanced dice-rolling mechanics within the VTT. It supports both simple and complex rolls, providing flexibility in how roll results are displayed and computed.
The dispatch object provides methods for sending commands from the character sheet back to the host. Except when specified every method returns a promise.
The Roll20 Tabletop and Roll20 Characters (both refered to as host throughout the rest of this page) have several new features that enhance the way rolls are handled and displayed. These features include attributes and elements that allow for dynamic roll results and interactivity within the host. -Vist the Roll20 help center to learn more about Roll20’s Dice Rolling system
-The most command way to trigger a dice roll is through the dispatch object returned from the initRelay
, but it could also be called from actions:
The roll
method takes one or more rolls in the form of an object, where the keys are unique roll names and the values are roll strings.
messageId
can be provided to attach the roll to an existing chat message, either overriding it or appending to it in the chat log.
+
The Roll20 Tabletop and Roll20 Characters (both refered to as host throughout the rest of this page) have several new features that enhance the way rolls are handled and displayed. These features include attributes and elements that allow for dynamic roll results and interactivity within the host. +Vist the Roll20 help center to learn more about Roll20’s Dice Rolling system
The most command way to trigger a dice roll is through the dispatch object returned from the initRelay
, but it could also be called from actions:
The roll
method takes one or more rolls in the form of an object, where the keys are unique roll names and the values are roll strings.
messageId
can be provided to attach the roll to an existing chat message, either overriding it or appending to it in the chat log.
If messageId
is omitted, the roll will be associated with a new chat message and a new messageId
for that message will be returned with the roll results.
-The method returns a promise that resolves with an object containing the messageId
and the RollResults. The roll result is returned in the same format as in the non-beacon dice rolls computed roll system.
The dispatch roll method and the actions roll section do not post to the chat, instead they will return a promise which will resolve to the roll results and the message id.
- -The roll method does not send or post any data to the chat on it’s own. We instead have to use dispatch’s post method to send our roll results along with any other content to the chat.
- - - -The data-rollname
attribute tells the host that this HTML element is displaying the result of a roll.
The host will both add the Quantum Roll signature element and replace the contents of the element with the result from the roll.
-This is the preferred method for displaying roll results wherever possible, that is, sending the whole roll formula to the roll server and allowing the host to display the result.
-Tagging an element with both a data-rollname
and a data-computed="true"
tells the host that this element is associated with a roll, but the results of that roll were computed by the author, as opposed to the roll server computing the result.
The host will add the Quantum Roll signature tooltip, but the content of the element will not be modified. Generally, this should only be used when the roll server does not support a particular dice mechanic.
-Roll buttons are interactive elements that trigger sheet actions, such as damage rolls, when clicked. These buttons use the data-sheet-action
attribute to specify the action to be executed.
Additional arguments can be provided using the data-args
attribute, and the character, messageId
, and original rolls will be included automatically.
messageId
and the RollResults. The roll result is returned in the same format as in the non-beacon dice rolls computed roll system.The dispatch roll method and the actions roll section do not post to the chat, instead they will return a promise which will resolve to the roll results and the message id.
The roll method does not send or post any data to the chat on it’s own. We instead have to use dispatch’s post method to send our roll results along with any other content to the chat.
The data-rollname
attribute tells the host that this HTML element is displaying the result of a roll.
The host will both add the Quantum Roll signature element and replace the contents of the element with the result from the roll.
This is the preferred method for displaying roll results wherever possible, that is, sending the whole roll formula to the roll server and allowing the host to display the result.
Tagging an element with both a data-rollname
and a data-computed="true"
tells the host that this element is associated with a roll, but the results of that roll were computed by the author, as opposed to the roll server computing the result.
The host will add the Quantum Roll signature tooltip, but the content of the element will not be modified. Generally, this should only be used when the roll server does not support a particular dice mechanic.
Roll buttons are interactive elements that trigger sheet actions, such as damage rolls, when clicked. These buttons use the data-sheet-action
attribute to specify the action to be executed.
Additional arguments can be provided using the data-args
attribute, and the character, messageId
, and original rolls will be included automatically.
To set this sheet up properly, make sure that you have the following:
-Figure 1: Advanced sheet
-This sheet uses the same steps listed in the . Immediately after implementing those three steps, you’ll add the following step:
-You can think of this command as a sanity check you can leverage when pushing a big release for your sheet!
-The following set of commands can come in handy when working with this sheet:
-To set this sheet up properly, make sure that you have the following:
Figure 1: Advanced sheet
This sheet uses the same steps listed in the . Immediately after implementing those three steps, you’ll add the following step:
You can think of this command as a sanity check you can leverage when pushing a big release for your sheet!
The following set of commands can come in handy when working with this sheet:
This installation guide is designed for sheet developers with experience in web development, that want to start creating a character sheet from scratch or already have an existing project they wish to add Beacon to.
-To get started quickly with a boilerplate, you can download and start editing the Quick Start Example Sheet which already has the Beacon SDK installed, along with several recommanded patterns implemented in a Vue.js project.
- -Before you can install the Beacon SDK, you’ll need to have the following:
-These steps use npm but you are free to use any package manager and framework you prefer.
- -The following steps will guide you in installing the Beacon SDK in your application:
-You can find the latest version of the package on the NPM registry.
-In your project’s directory, run the following:
- - - -This will install the Beacon SDK package to your project’s package.json
file.
The Beacon package exports various utilities you can use in your application. The main one that needs to be setup to enable the connection between Beacon SDK and Roll20 is initRelay
.
Ideally you would want to call this when your sheet is initalizing, and it is the function where you will define sheet actions, computed values, and how the sheet will response to or send character data changes. visit the initRelay page for a more detailed breakdown.
-Add the following to your project:
- - - -initRelay
returns a dispatch function that allows you to call methods or send changes from the sheet to Roll20. Check out the page on dispatch to learn more about the different methods.
On the Roll20 website visit the custom sheet sandbox and create a new sandbox, we’ll use this sandbox to develop our sheet but we must set it up to listen to our local project’s web server.
-After creating a new sandbox, we’ll be taken to the sandbox details page, here you will find a collapseable section called Sheet.json Editor
, opening this we can add the settings we need to connect to our project:
After adding these changes make sure to click Save Changes
at the bottom of the page. After which you can click Launch Game
on the page to go into the game and start testing your sheet.
- -
- - -This installation guide is designed for sheet developers with experience in web development, that want to start creating a character sheet from scratch or already have an existing project they wish to add Beacon to.
To get started quickly with a boilerplate, you can download and start editing the Quick Start Example Sheet which already has the Beacon SDK installed, along with several recommanded patterns implemented in a Vue.js project.
Before you can install the Beacon SDK, you’ll need to have the following:
These steps use npm but you are free to use any package manager and framework you prefer.
The following steps will guide you in installing the Beacon SDK in your application:
You can find the latest version of the package on the NPM registry.
In your project’s directory, run the following:
This will install the Beacon SDK package to your project’s package.json
file.
The Beacon package exports various utilities you can use in your application. The main one that needs to be setup to enable the connection between Beacon SDK and Roll20 is initRelay
.
Ideally you would want to call this when your sheet is initalizing, and it is the function where you will define sheet actions, computed values, and how the sheet will response to or send character data changes. visit the initRelay page for a more detailed breakdown.
Add the following to your project:
initRelay
returns a dispatch function that allows you to call methods or send changes from the sheet to Roll20. Check out the page on dispatch to learn more about the different methods.
On the Roll20 website visit the custom sheet sandbox and create a new sandbox, we’ll use this sandbox to develop our sheet but we must set it up to listen to our local project’s web server.
After creating a new sandbox, we’ll be taken to the sandbox details page, here you will find a collapseable section called Sheet.json Editor
, opening this we can add the settings we need to connect to our project:
After adding these changes make sure to click Save Changes
at the bottom of the page. After which you can click Launch Game
on the page to go into the game and start testing your sheet.
The Beacon SDK is a toolset designed to enhance and streamline the development of virtual tabletop (VTT) character sheets and other interactive elements.
-Whether you’re a game master (GM), a developer, or a player, the Beacon SDK provides a framework to create dynamic, responsive, and fully integrated VTT experiences.
-The Beacon SDK (software development kit) is a toolset used to create digital character sheets on Roll20 for Roll20 Tabletop and Roll20 Characters.
-Whether you’re an experience developer, or just starting out, the Beacon SDK provides a framework to create dynamic, responsive, and fully integrated character sheet experiences.
-The Beacon SDK also introduces a new way to develop characters sheets for Roll20. Beacon SDK allows you to connect your local development environment to sandboxes in Roll20 Characters and Roll20 Tabletop, giving you real-time updates as you develop.
-The Beacon SDK is composed of several key components:
-For a comprehensive overview of these components, view the components section.
-To get started with the Beacon SDK, you must initialize the relay, set up your character sheets, and define the necessary actions, handlers, and computed attributes.
-This documentation provides detailed guides and example sheets to help you through each step of the process.
-By leveraging the Beacon SDK, you can create rich, interactive, fully integrated VTT experiences that enhance gameplay and streamline game management.
-Whether adapting existing character sheets or building new ones from scratch, the Beacon SDK offers the tools and flexibility to bring your digital character sheet to life.
- - -The Beacon SDK is a toolset designed to enhance and streamline the development of virtual tabletop (VTT) character sheets and other interactive elements.
Whether you’re a game master (GM), a developer, or a player, the Beacon SDK provides a framework to create dynamic, responsive, and fully integrated VTT experiences.
The Beacon SDK (software development kit) is a toolset used to create digital character sheets on Roll20 for Roll20 Tabletop and Roll20 Characters.
Whether you’re an experience developer, or just starting out, the Beacon SDK provides a framework to create dynamic, responsive, and fully integrated character sheet experiences.
The Beacon SDK also introduces a new way to develop characters sheets for Roll20. Beacon SDK allows you to connect your local development environment to sandboxes in Roll20 Characters and Roll20 Tabletop, giving you real-time updates as you develop.
The Beacon SDK is composed of several key components:
For a comprehensive overview of these components, view the components section.
To get started with the Beacon SDK, you must initialize the relay, set up your character sheets, and define the necessary actions, handlers, and computed attributes.
This documentation provides detailed guides and example sheets to help you through each step of the process.
By leveraging the Beacon SDK, you can create rich, interactive, fully integrated VTT experiences that enhance gameplay and streamline game management.
Whether adapting existing character sheets or building new ones from scratch, the Beacon SDK offers the tools and flexibility to bring your digital character sheet to life.
To set this sheet up properly, make sure that you have the following tools installed:
-Figure 1: Quickstart sheet
-Use the following steps to get started:
-a. Offline Development: This method will run the Vite server with the default port and environment set to development.
- - - -Once this code executes successfully, you can access the Vite server at http://localhost:5173
.
This method is useful when you do not have access to the Roll20 website or would like to work on parts of your project that do not depend on a connection to the VTT or Roll20 Characters, such as working on styling, mocking up the environment, building Vue components, testing functionality, etc.
-In development mode, you cannot save or access existing character data or use the Beacon SDK functions that depend on VTT or Roll20 Characters functionality, such as dice rolling and token manipulation.
- -b. Sandbox Development: This method will run the Vite server with the port set to 7620
and the environment set to staging mode.
This command will build the SCSS files and then run the Vite server. This will set the server up for connecting to a VTT custom sheet sandbox as well as through the sandbox in Roll20 Characters.
-To test your changes in the VTT custom sheet sandbox, you will need to add the following to the sheet.json
editor in the game settings:
The following set of commands can come in handy when working with this sheet:
-To set this sheet up properly, make sure that you have the following tools installed:
Figure 1: Quickstart sheet
Use the following steps to get started:
a. Offline Development: This method will run the Vite server with the default port and environment set to development.
Once this code executes successfully, you can access the Vite server at http://localhost:5173
.
This method is useful when you do not have access to the Roll20 website or would like to work on parts of your project that do not depend on a connection to the VTT or Roll20 Characters, such as working on styling, mocking up the environment, building Vue components, testing functionality, etc.
In development mode, you cannot save or access existing character data or use the Beacon SDK functions that depend on VTT or Roll20 Characters functionality, such as dice rolling and token manipulation.
b. Sandbox Development: This method will run the Vite server with the port set to 7620
and the environment set to staging mode.
This command will build the SCSS files and then run the Vite server. This will set the server up for connecting to a VTT custom sheet sandbox as well as through the sandbox in Roll20 Characters.
To test your changes in the VTT custom sheet sandbox, you will need to add the following to the sheet.json
editor in the game settings:
The following set of commands can come in handy when working with this sheet:
A release sheet is a finalized version of a character sheet or other content designed for use on the Roll20 platform. This sheet includes all the necessary code, assets, and metadata packaged together to be easily shared, tested, and eventually deployed on Roll20.
-When you’re ready to test and share a sheet on Roll20, you’d want to do it in such a way that others who might need it won’t have to set it up with a local dev environment.
-That’s what the steps below help you achieve. In this guide, you can make your sheet available in the Roll20 Tabletop and Characters.
-The following steps will aid you while releasing your sheet:
-Create a Build Command:
-You must have a build command that will produce the minified production-ready code. You can find an example in our Quickstart Package JSON. The build command must be able to create these exact files:
-sheet.js
sheet.css
host.css
(optional)Add a sheet.json
file:
Add a sheet.json
file to your sheet folder to ensure the metadata for your sheet is up-to-date. For this, you can also find an example in our Quickstart Package JSON.
Create a Pull Request in the Community Sheet Repo:
-In the Community Sheet Repo, create a pull request that must include the submission checklist from our previous process.
-When submitting a new or updated sheet to Roll20, it’s essential to follow the guidelines to ensure a smooth review and approval process.
-Below is a checklist to help you prepare your submission.
-The following are the required submission checklist items:
-You must include the following information in your sheet:
-< THE AETHYRBLOOD CHRONICLES >.
< HAPHAZARD PROJECTS >
< DPS System ('dice pool scales') >
You must also check out the following:
-In the pull request comments, make sure to list the email addresses of the Roll20 users you’d like to have access to the sheet.
-We can always grant more people access to the sheet after it is released. However, you can inform us in our Official Community Sheet Development Channels on Discord.
- -Approval and Access:
-After you create a pull request, our team will approve it and add your sheet to the sheet selection in Roll20 Tabletop and Characters. We will then give only your Roll20 user and any others you’ve listed in the pull request comments access to the sheet in Roll20. This sheet will then be available for you and others with access to test it.
-After you have released a test version of your sheet, you can follow the same steps as releasing a test version to make your sheet available to everyone. This time, the pull request comments state that it is a final release version.
-Once you have created the pull request, our team will review the sheet functionality, code, and metadata for consistency, best practices, and overall system security. We reserve the right to reject any sheet that does not meet our terms of use or conflicts with our partnerships.
- - -A release sheet is a finalized version of a character sheet or other content designed for use on the Roll20 platform. This sheet includes all the necessary code, assets, and metadata packaged together to be easily shared, tested, and eventually deployed on Roll20.
When you’re ready to test and share a sheet on Roll20, you’d want to do it in such a way that others who might need it won’t have to set it up with a local dev environment.
That’s what the steps below help you achieve. In this guide, you can make your sheet available in the Roll20 Tabletop and Characters.
The following steps will aid you while releasing your sheet:
Create a Build Command:
You must have a build command that will produce the minified production-ready code. You can find an example in our Quickstart Package JSON. The build command must be able to create these exact files:
sheet.js
sheet.css
host.css
(optional)Add a sheet.json
file:
Add a sheet.json
file to your sheet folder to ensure the metadata for your sheet is up-to-date. For this, you can also find an example in our Quickstart Package JSON.
Create a Pull Request in the Community Sheet Repo:
In the Community Sheet Repo, create a pull request that must include the submission checklist from our previous process.
When submitting a new or updated sheet to Roll20, it’s essential to follow the guidelines to ensure a smooth review and approval process.
Below is a checklist to help you prepare your submission.
The following are the required submission checklist items:
You must include the following information in your sheet:
< THE AETHYRBLOOD CHRONICLES >.
< HAPHAZARD PROJECTS >
< DPS System ('dice pool scales') >
You must also check out the following:
In the pull request comments, make sure to list the email addresses of the Roll20 users you’d like to have access to the sheet.
We can always grant more people access to the sheet after it is released. However, you can inform us in our Official Community Sheet Development Channels on Discord.
Approval and Access:
After you create a pull request, our team will approve it and add your sheet to the sheet selection in Roll20 Tabletop and Characters. We will then give only your Roll20 user and any others you’ve listed in the pull request comments access to the sheet in Roll20. This sheet will then be available for you and others with access to test it.
After you have released a test version of your sheet, you can follow the same steps as releasing a test version to make your sheet available to everyone. This time, the pull request comments state that it is a final release version.
Once you have created the pull request, our team will review the sheet functionality, code, and metadata for consistency, best practices, and overall system security. We reserve the right to reject any sheet that does not meet our terms of use or conflicts with our partnerships.
Link to valuable, relevant resources.
- - -Link to valuable, relevant resources.
Congrats on setting up a new Doks project!
- -Edit content/_index.md
to see this page change.
Add Markdown files to content
to create new pages.
Edit your config in config/_default/hyas/doks.toml
.
Learn more in the Docs.
-Congrats on setting up a new Doks project!
Edit content/_index.md
to see this page change.
Add Markdown files to content
to create new pages.
Edit your config in config/_default/hyas/doks.toml
.
Learn more in the Docs.
Last updated on September 7, 2023
-Last updated on September 7, 2023