Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

Major Updates to Mod Scripts Coming in March

Hey everyone, You may have seen our blog post recently announcing some major changes to the Mod Scripts (aka API Scripts) system that are coming this March:&nbsp; <a href="https://blog.roll20.net/posts/roll20-mod-scripts-set-for-major-improvements-in-march/" rel="nofollow">https://blog.roll20.net/posts/roll20-mod-scripts-set-for-major-improvements-in-march/</a> As you may have heard, our very own TheAaron has joined the Roll20 team in an official capacity and is leading the charge on these improvements. We wanted to share a more detailed Change Log of these improvements with you so you can get excited and start asking questions ahead of the full launch. These changes are already in internal testing with a small group of script authors in our staging environment, with an eye toward making sure that we are maintaining backward compatibility with existing scripts. This is the first major update to this system in quite a while, and I'm very excited both to be working with TheAaron and to deliver these improvements to one of the most exciting (to me) parts of the Roll20 Tabletop. Between this and Jumpgate we're shaping up for a very interesting Spring here at Roll20! General Better Mod Output Console messages Whenever possible, output messages will now list one or more context objects. When calling toBelow(), with a character object, you might see this error: ERROR: toBelow() must called with a Roll20 graphic, text, or path Object. Called with [Roll20 character -NM0tVij02hIfnoTdihc]. The context object at the end will show That it's a Roll20 character object, and what its id is. That should help with tracking down errors in scripts. $20 A version of $20 has been added to the API Server to allow characters sheets making use of its functionality in game to still have their sheet workers run without crashing. Functions findObjs(properties, options) You can now specify the option startsWith in order to match strings that start with the specified value: // get all knight characters let knights = findObjs({type: "character", name: "Sir"},{startsWith: true}); toFront(obj) Should perform quite a bit faster now! toBack(obj) Should perform quite a bit faster now! (New!) toAbove(obj,target) You can use toAbove(obj,target) to place an object on the VTT just above another object in the sorting. target can be a valid Roll20 object on the table top, or the id of such an object. (New!) toBelow(obj,target) You can use toBelow(obj,target) to place an object on the VTT just below another object in the sorting. target can be a valid Roll20 object on the table top, or the id of such an object. spawnFxBetweenPoints(point1, point2, type, pageid) A bug in the calculation of the angle between the points has been corrected resulting in beam type fx pointing directly at the specified point2 . Objects Individual Roll20 Objects now have more capabilities. .type Objects now support a property of .type similar to .id . This is identical to calling obj.get('type') or obj.get('_type') , but now it's even easier. if('graphic' === obj.type) { // do something } campaign Campaign has two properties on it that can be accessed by scripters: sheetName — this is the shortname of the currently configured character sheet. nodeVersion — this is the version number for the node backend the API Server is running on. (New!) pageFolder The pageFolder object represents page folders in the new page menu. pageFolders have the following properties: prop | default | note -----------|--------------|----- _id | | A unique ID like other Roll20 Objects have. _type | "pageFolder" | The type for pageFolder. name | "New Folder" | A freeform text name for the folder, which shows up in the page menu. _placement | 0 | A positive integer value that is used for ordering items in the page menu. _path | "," | A comma delimited list of ids representing the path of pageFolders where this pageFolder is stored. There are new functions for adjusting the page hierarchy: placeBefore(obj) — Adjusts the _placement of this pageFolder to be immediately before the specified object in the page menu. obj must be a page or pageFolder . This may cause _path to change if they are at different levels in the hierarchy of the page menu. placeAfter(obj) — Adjusts the _placement of this pageFolder to be immediately after the specified object in the page menu. obj must be a page or pageFolder . This may cause _path to change if they are at different levels in the hierarchy of the page menu. placeIn(obj) — Adjusts the location of the pageFolder to be in the specified obj at the very end of the contents. obj must be a pageFolder . This will likely cause _placement to change. page The page object has been expanded to support the new page menu with the following new properties and functions: prop | default | note -----------|--------------|----- _placement | 0 | A positive integer value that is used for ordering items in the page menu. _path | "," | A comma delimited list of ids representing the path of pageFolders where this page is stored. There are new functions for adjusting the page hierarchy: placeBefore(obj) — Adjusts the _placement of this page to be immediately before the specified object in the page menu. obj must be a page or pageFolder . This may cause _path to change if they are at different levels in the hierarchy of the page menu. placeAfter(obj) — Adjusts the _placement of this page to be immediately after the specified object in the page menu. obj must be a page or pageFolder . This may cause _path to change if they are at different levels in the hierarchy of the page menu. placeIn(obj) — Adjusts the location of the page to be in the specified obj at the very end of the contents. obj must be a pageFolder . This will likely cause _placement to change. Additionally, the following properties have been exposed to provide access to the wrapper color that shows around the border of a page: prop | default | note ------------------|--------------|----- _wrapperAutoColor | #ffffff | This is the calculated color that hows up based on what graphics are visible on the table top. useAutoWrapper | true | When this is true, the wrapper color will be the value of _wrapperAutoColor. When it is false, the value in wrapperColor is used instead. wrapperColor | "" | This is a color that will be used for the wrapper color with useAutoWrapper is false. graphic The graphic object has several new functions, and a new behavior for one of it's properties prop | default | note ------------|--------------|----- currentSide | 0 | Setting currentSide will now automatically update the imgsrc of a graphic, including switching to Marketplace Images. If you are also setting imgsrc with the same call to .set(), the specified imgsrc will be used instead as long as it is valid. (New!) createCopy(properties) — This function will make a copy of the graphic object as if you passed its properties to createObj() . This will allow creating duplicates of Marketplace Images both within the imgsrc and sides properties. The new graphic object is returned from the function. (New!) toFront() — This is identical the passing this object to the global toFront(obj) function. (New!) toBack() — This is identical the passing this object to the global toBack(obj) function. (New!) toAbove(target) — This is identical the passing this object to the global toAbove(obj,target) function. target can be an object on the tabletop, or the ID of such an object. (New!) toBelow(target) — This is identical the passing this object to the global toBelow(obj,target) function. target can be an object on the tabletop, or the ID of such an object. character The character object has a new property and a new function. prop | default | note ------------|--------------|----- tags | "[]" | This is a JSON encoded array of strings. Valid tags are any string which does not contain whitespace or commas. Invalid tags will be stripped on set and a warning message will be sent to the Mod Output Console. (New!) createToken(properties, options, callback) — This function will create a graphic object using the _defaulttoken for the character as a base. If there is no _defaulttoken , the avatar image from the character will be used. If there is no avatar image, creation of the graphic will fail. This allows the creation of graphics with Marketplace Images. Because getting the _defaulttoken is asynchronous, the created graphic can not be returned directly, but is instead passed to the supplied callback function, if it exists. options is a JavaScript object with the following optional properties: prop | default | note -------------|--------------|----- preferAvatar | false | When true, the created graphic will use the avatar image as its imgsrc. If there is no avatar image, it will fall back on the imgsrc in the _defaulttoken. multisided | false | This determines how the sides property of the graphic is configured. See below. Multisided determines how the sides property of the graphic is constructed or manipulated when the graphic is created. multisided option | effect -----------------------|------------------- false or undefined | No changes are made to the sides property of the created graphic. If the _defaulttoken has sides, they will be set, otherwise it will be empty. true or ensure | If the _defaulttoken does not have sides set, sides will be set to imgsrc,avatar and currentSide will be set based on preferAvatar. replace | As ensure, but will overwrite the sides from the _defaulttoken. append | Adds imgsrc,avatar to the end of the sides from _defaulttoken. currentSide will be set to point to the index of imgsrc or avatar depending on preferAvatar. prepend | Adds imgsrc,avatar to the beginning of the sides from _defaulttoken. currentSide will be set to point to the index of imgsrc or avatar depending on preferAvatar. handout The handout object has a new property. prop | default | note ------------|--------------|----- tags | "[]" | This is a JSON encoded array of strings. Valid tags are any string which does not contain whitespace or commas. Invalid tags will be stripped on set and a warning message will be sent to the Mod Output Console. card The card object has a new property and a new function. prop | default | note ------------|--------------|----- card_back | "" | This is an alternate card back used for this specific card. (New!) createToken(properties, options) — This function will create a graphic object as if the card had been drawn and played to the table top. This allows the creation of graphic objects with Marketplace Images. The created graphic object is returned by the function. prop | default | note -------------|----------------|----- asCard | true | If true, the graphic object will be a card with a card_id and relationship to the deck it comes from. If false, it will be a multisided token that looks like the card but can't be "picked up", "discarded", etc. faceup | (deck default) | This determines if the graphic is created with the face or back showing. currentSide will be set appropriately. rollabletable The rollabletable object has a new function. (New!) createToken(properties) — This function will create a graphic object with sides taken from the rollabletable . This allows the creation of graphic objects with Marketplace Images. The created graphic object is returned by the function. If none of the tableitem objects associated with this rollabletable contain an avatar , no graphic is created. path The path object has some new functions. (New!) toFront() — This is identical the passing this object to the global toFront(obj) function. (New!) toBack() — This is identical the passing this object to the global toBack(obj) function. (New!) toAbove(target) — This is identical the passing this object to the global toAbove(obj,target) function. target can be an object on the tabletop, or the ID of such an object. (New!) toBelow(target) — This is identical the passing this object to the global toBelow(obj,target) function. target can be an object on the tabletop, or the ID of such an object. text The text object has some new functions. (New!) toFront() — This is identical the passing this object to the global toFront(obj) function. (New!) toBack() — This is identical the passing this object to the global toBack(obj) function. (New!) toAbove(target) — This is identical the passing this object to the global toAbove(obj,target) function. target can be an object on the tabletop, or the ID of such an object. (New!) toBelow(target) — This is identical the passing this object to the global toBelow(obj,target) function. target can be an object on the tabletop, or the ID of such an object.
1708960534
The Aaron
Roll20 Production Team
API Scripter
I'm very exited to be a part making these improvements, hopefully the first of many!
Thank you for giving the API/Mods functionality some love. &nbsp;Getting “The Aaron” engaged was a great decision.&nbsp;
1708962962
Scott C.
Forum Champion
Sheet Author
API Scripter
Compendium Curator
Nice work everyone!
1708964574

Edited 1708964603
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
I'm very excited to see what our scripter community will make with these new superpowers! Supermegaprops to the Aaron!
1708965808
The Aaron
Roll20 Production Team
API Scripter
I am most excited by: Self configuring scripts that check Campaign().sheetName to know which character sheet is configured Spawn scripts that can now create any character in a game using SomeCharacter.createToken(...) Teleport scripts that can move everyone in the party to a new may using SomeGraphic.copyToken(...)
The Aaron said: I'm very exited to be a part making these improvements, hopefully the first of many! CONGRATULATIONS DUDE!!! Well fucking deserved for the amount of stuff you've done for the community, so happy and excited to see you join officially =D
1708977980
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
The Aaron said: I am most excited by: Self configuring scripts that check Campaign().sheetName to know which character sheet is configured Spawn scripts that can now create any character in a game using SomeCharacter.createToken(...) Teleport scripts that can move everyone in the party to a new may using SomeGraphic.copyToken(...) In addition to those, I am looking forward to scripts that facilitate tag usage. !create-party !sort-monsters
1708978724
vÍnce
Pro
Sheet Author
1708985333
Pat
Pro
API Scripter
The Aaron said: I am most excited by: Self configuring scripts that check Campaign().sheetName to know which character sheet is configured Spawn scripts that can now create any character in a game using SomeCharacter.createToken(...) Teleport scripts that can move everyone in the party to a new may using SomeGraphic.copyToken(...) On that third one - I'd love to try and update the Teleport script, just gotta get my capabilities out of mothballs...&nbsp;
1708986996
The Aaron
Roll20 Production Team
API Scripter
Pat said: The Aaron said: I am most excited by: Self configuring scripts that check Campaign().sheetName to know which character sheet is configured Spawn scripts that can now create any character in a game using SomeCharacter.createToken(...) Teleport scripts that can move everyone in the party to a new may using SomeGraphic.copyToken(...) On that third one - I'd love to try and update the Teleport script, just gotta get my capabilities out of mothballs...&nbsp; Here's a minimal example of what it could look like: const teleport = (obj,pageid,layer,x,y) =&gt; { if(obj?.type === 'graphic'){ obj.createCopy({pageid,layer,left:x,top:y}); } };
The Aaron, please please please, if you have the ability, push for us to get a feature that lets us save a package of APIs to load them into another campaign. Copy game currently doesn't copy APIs, and having to reinstall and reconfigure multiple times gets really old.
just learning about The Aaron official hiring, which is unironically a pretty reassuring direction, seeing how much he and his scripts have helped the community all these years. Congratulations and excited to see what new mods come out from these changes :)!&nbsp;
1708991862
Pat
Pro
API Scripter
The Aaron said: Pat said: The Aaron said: I am most excited by: Self configuring scripts that check Campaign().sheetName to know which character sheet is configured Spawn scripts that can now create any character in a game using SomeCharacter.createToken(...) Teleport scripts that can move everyone in the party to a new may using SomeGraphic.copyToken(...) On that third one - I'd love to try and update the Teleport script, just gotta get my capabilities out of mothballs...&nbsp; Here's a minimal example of what it could look like: const teleport = (obj,pageid,layer,x,y) =&gt; { if(obj?.type === 'graphic'){ obj.createCopy({pageid,layer,left:x,top:y}); } }; Thanks - I remember enough of it to figure out this would likely slot into where there's a check for the same character on the target page - if it's not there, we can now make it.&nbsp; Then I gotta work on a better crowded-target-pad script.&nbsp;
1709005186
The Aaron
Roll20 Production Team
API Scripter
Starr Saphyre said: The Aaron, please please please, if you have the ability, push for us to get a feature that lets us save a package of APIs to load them into another campaign. Copy game currently doesn't copy APIs, and having to reinstall and reconfigure multiple times gets really old. There are currently a few problems with that architecturally, but it's on my radar, to be sure.&nbsp; =D
Aaron will get paid retroactively for all the work he's been putting in helping people code over the years, right? o.O Seriously though, GZ m8!
1709049728
The Aaron
Roll20 Production Team
API Scripter
Lol, thanks!&nbsp;&nbsp;
1709082436
Elemental Flame
Pro
Marketplace Creator
I don't understand any of this, but making Aaron part of the team is some of the greatest news I've seen posted -- and that's saying something because there's been a lot of good news of late. He has been one of the most knowledgeable resources this community has to offer and was always helpful, even to people like myself with a poor knowledge of scripting and coding and technical jargon. Great choice, Roll20 team, and congratulations The Aaron!
1709116188

Edited 1709116245
And I'm full of confidence that for once, the updates or changes made on roll20 will not break everything aside of the changes made !!!! lol Seriously, all the help that you brought me over the past few years has been a tremendous help for me and my players. !!! Thanks again and Congrats !
I noticed the tag by The Aaron's name had changed a bit back, and thought it was about the best move Roll20 had made in the years I've been here. Congratulations, it was well deserved, and I know the APIs (Mods) will be in good hands for the foreseeable future.
Nothing could give me more confidence in this upgrade than knowing that The Aaron is centrally involved. Whatever you are paying him is not enough! I LOVE the self-configuring scripts idea. I also see a lot of adjustments that will increase the value of marketplace items -- super!&nbsp; I'm looking forward to all kinds of new capabilities. Thanks, Roll20!
1709282296
Laurent
Pro
Sheet Author
API Scripter
Could someone explain a bit the part on $20? I really don't get was this is about.
1709307062
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Laurent said: Could someone explain a bit the part on $20? I really don't get was this is about. I have had it explained to me thusly: It's an implementation of Jquery that sheets have access to to control styling. &nbsp;Essentially just backend stuff that is now working on API as well so it doesn't crash when it tries to use it in response to an API command.&nbsp; Because query is usually accessed via $ ,&nbsp; $20 is the roll20 version. Make of that what you will. :)
1709309823
Brian C.
Pro
Marketplace Creator
Compendium Curator
I see I am late to the party in needing to take back my vote.&nbsp; <a href="https://app.roll20.net/forum/post/9522317/please-hire-the-aaron" rel="nofollow">https://app.roll20.net/forum/post/9522317/please-hire-the-aaron</a> Congratulations! I'm looking forward to what comes from this. :)
1709312025
The Aaron
Roll20 Production Team
API Scripter
Laurent said: Could someone explain a bit the part on $20? I really don't get was this is about. Here's the wiki page about it:&nbsp; <a href="https://wiki.roll20.net/JQuery" rel="nofollow">https://wiki.roll20.net/JQuery</a> &nbsp;&nbsp; Since it's about the visual representation of the character sheet, it has no effect on the API (there is no visual aspect to where the API runs).&nbsp; However, sheet workers on character sheets don't know where they run, just that they need to set some property on some element, they still need to call these functions.&nbsp; It was an oversight when $20 was introduced on the tabletop side that it was not introduced into the API side, which meant character sheet sheet workers needed to always check for the presence of $20 before actually calling it to avoid crashing the API server.&nbsp; With it introduced to the API Sandbox, that's one less pitfall for sheet authors, and an increase in stability for the API Server. On a side note, as a programmer you'd pronounce this "dollar twenty."&nbsp; &nbsp;I'm so far leaning on the programmer side that someone who found this name humorous had to point out to me that it looks like "twenty dollars," or "a Yuppie Food Coupon" as she called it!&nbsp; =D&nbsp;
1709364569
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
The Aaron said: On a side note, as a programmer you'd pronounce this "dollar twenty."&nbsp; &nbsp;I'm so far leaning on the programmer side that someone who found this name humorous had to point out to me that it looks like "twenty dollars," or "a Yuppie Food Coupon" as she called it!&nbsp; =D&nbsp; Thanks, I would have pronounced it "string twenty".&nbsp;
1709384821
Kurt J.
Pro
API Scripter
keithcurtis said: The Aaron said: On a side note, as a programmer you'd pronounce this "dollar twenty."&nbsp; &nbsp;I'm so far leaning on the programmer side that someone who found this name humorous had to point out to me that it looks like "twenty dollars," or "a Yuppie Food Coupon" as she called it!&nbsp; =D&nbsp; Thanks, I would have pronounced it "string twenty".&nbsp; Probably showing my age, but to me it is an ASCII "space" character :)
1709390027
The Aaron
Roll20 Production Team
API Scripter
Kurt J. said: Probably showing my age, but to me it is an ASCII "space" character :) I think that would be %20, the url encoding for a space.&nbsp; Software has a lot of encodings. =D
1709391897
Kurt J.
Pro
API Scripter
The Aaron said: Kurt J. said: Probably showing my age, but to me it is an ASCII "space" character :) I think that would be %20, the url encoding for a space.&nbsp; Software has a lot of encodings. =D It was once URL encoding was introduced :) Prior to that new fangled world-wide-web, ASCII character 32 (hex $20) is/was a space... Hex number notation has changed over time too, so now you see 0x20, or %20, and probably more I don't know about.&nbsp;
1709415964
Gold
Forum Champion
Brian C. said: I see I am late to the party in needing to take back my vote.&nbsp; <a href="https://app.roll20.net/forum/post/9522317/please-hire-the-aaron" rel="nofollow">https://app.roll20.net/forum/post/9522317/please-hire-the-aaron</a> Congratulations! I'm looking forward to what comes from this. :) That is strange. When a Suggestions thread is marked as COMPLETE (which that one is), all Votes are supposed to be returned automatically to the voters.&nbsp; Might be a bug in the Returning of Votes since the new amount of Votes were given out, a year or 2 ago?&nbsp;
I thought this update was coming in March. Now, you say you have much more work to do in other posts. I am a bit confused. When are the updates to this happening?
1711819700
vÍnce
Pro
Sheet Author
Aryan said: I thought this update was coming in March. Now, you say you have much more work to do in other posts. I am a bit confused. When are the updates to this happening? There is currently an opt-in beta of the latest updates and changes; <a href="https://app.roll20.net/forum/post/11843344/the-jumpgate-beta-for-pro-users-has-arrived" rel="nofollow">https://app.roll20.net/forum/post/11843344/the-jumpgate-beta-for-pro-users-has-arrived</a> It looks like some of the API is a somewhat "limited" ATM, but there are more changes/updates forecast by Riley in the next couple weeks.
1711897765

Edited 1711897801
Riley D.
Roll20 Team
The Mod Scripts improvements are separate from the Jumpgate improvements. All of the stuff we posted about above is coming to regular (non-Jumpgate) games as well as Jumpgate games. Aaron has been working on getting this tested and we're figuring out a rollout strategy now. I'm hoping it will be out in the next few weeks. To be clear it's all done we're just testing it thoroughly to make sure we don't negatively impact games when it is rolled out officially. In addition to that though we have some work to do on the Mod Scripts/API to get it fully compatible with Jumpgate. That work is going to happen on this new underlying platform so we're waiting on this to come out, then we'll be updating the API to make it work fully with Jumpgate.&nbsp;
I am so reliant on Mods - mostly Tokenmod - that I will opt out of Jumpgate until the Mods work. We are going to try it in my Monday game to see if the user experience for my players improve significantly, but if Tokenmod and other 'must have' mods are not working for us, it makes the game unplayable.
This is what's keeping me from trying the Jumpgate beta as well. My players are all 9-10th level and have picked up several magic items; I use macros with TokenMod commands extensively to turn on and off many of their special abilities. Not being able to confidently use them would drastically slow down combat encounters. Doug E. said: I am so reliant on Mods - mostly Tokenmod - that I will opt out of Jumpgate until the Mods work. We are going to try it in my Monday game to see if the user experience for my players improve significantly, but if Tokenmod and other 'must have' mods are not working for us, it makes the game unplayable.
1711905004
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
My Mod Scripts are working pretty well on Jumpgate. Some of the systems they modify (custom token markers, for example) are still in development. Are there any specific examples of mod scripts that are failing in and of themselves?
Pat said: The Aaron said: I am most excited by: Self configuring scripts that check Campaign().sheetName to know which character sheet is configured Spawn scripts that can now create any character in a game using SomeCharacter.createToken(...) Teleport scripts that can move everyone in the party to a new may using SomeGraphic.copyToken(...) On that third one - I'd love to try and update the Teleport script, just gotta get my capabilities out of mothballs...&nbsp; Yeah, the Teleport script does not work in Jumpgate. It is absolutely essential for my Curse of Strahd campaign to navigate Castle Ravenloft. I spent hours creating the teleport pads and linking them to the various stairways on the different maps. Works great in my non-jumpgate game. Love this script!&nbsp;
None of my macros that use tokenmod are working. Wildshape is also not&nbsp; working - when i go to configure it, it won't recognize selected tokens. Teleport does not work. I'm also having the same problem with double-click speed as you mentioned in the other thread. Also, both token menus and character sheets are loading very slowly with double-left-clicking or ALT-double-left-click. keithcurtis said: My Mod Scripts are working pretty well on Jumpgate. Some of the systems they modify (custom token markers, for example) are still in development. Are there any specific examples of mod scripts that are failing in and of themselves?
The "what you have selected" info isn't being sent to Mod Scripts right now in Jumpgate games. We have a fix for that I'm hoping will go live early this week. I think that's making a lot of Mod Scripts not work properly (there are likely other things too but that's a big one).
1712024645
Andrew R.
Pro
Sheet Author
I’ve held off testing with players until all my Mod tools work, but I’m testing copies of my games with just my Pro and Free accounts to help. It’s fun!&nbsp;
1712113730

Edited 1712113830
Here's one for The Aaron; APIHeartbeat works but creates a new macro every couple of seconds or so, using Jumpgate;
Doug E. said: Here's one for The Aaron; APIHeartbeat works but creates a new macro every couple of seconds or so, using Jumpgate; This happened before . Timmaugh wrote a quick script to delete extraneous entries. Hopefully the script issues in Jumpgate will get sorted out before the full release.
I run into the same issue almost every time that I set up a new game. For some reason, it happens every time that I load this MOD from the one-click menu, so I now always use the one from github . Even then, I sometimes have to delete the script and reload it to get the duplicates to stop, If it matters at all, API Heartbeat is the last MOD that I install when setting up a new game. Doug E. said: Here's one for The Aaron; APIHeartbeat works but creates a new macro every couple of seconds or so, using Jumpgate;
Riley D. said: The Mod Scripts improvements are separate from the Jumpgate improvements. All of the stuff we posted about above is coming to regular (non-Jumpgate) games as well as Jumpgate games.&nbsp; I'm not sure if this is related to this change or not, but in yesterday's session, the sandbox crashed more than I have ever seen it crash.&nbsp; I reset it four or five times in quick succession as it would keep crashing.&nbsp; Plus another one or two times outside of those resets.&nbsp; I haven't made any changes to the sandbox in several weeks at least.&nbsp; Could this be related or should I be posting this in the bugs forum? -Adam
Yeah, I had the same thing happen last night.
Hmmm we haven't put anything out yet, so yeah just post it as a regular bug and I'll follow up.
I found this thread while looking for help with TheAaronSheet, but I just wanted to pop in to say that I absolutely&nbsp; love &nbsp;that TheAaron has joined the official Roll20 Team!&nbsp; Hobbying my way through a custom character sheet is what led me to undertake a career transition to coding, and I couldn't have even attempted much hobbying without incredible community resources such as TAS (and many others) Glory to TheAaron! Dice for the Dice Throne, Scripts for the Scriptomancer!
1713234329
The Aaron
Roll20 Production Team
API Scripter
Woot!&nbsp; Happy to hear you've found a pleasing path!&nbsp; I love programming, I'm so happy to be doing more of it lately (I ended up in a management job for a few years and I'm sooo glad I'm done with it now. =D).&nbsp; Definitely reach out if you wanna talk shop. =D
The Aaron said: Woot!&nbsp; Happy to hear you've found a pleasing path!&nbsp; I love programming, I'm so happy to be doing more of it lately (I ended up in a management job for a few years and I'm sooo glad I'm done with it now. =D).&nbsp; Definitely reach out if you wanna talk shop. =D Thank you so much, TheAaron! I may well take you up on that in the very near future (I'm still struggling with imposter syndrome and don't feel confident I could hold up my end of the conversation yet!). I was a veterinary surgeon (but I've also done my time in management!) and the problem-solving is certainly transferrable but I'm still internalising so much new vocabulary, I feel like I can't express myself very well.