Script The script will be added to the Roll20 one-click-install system in a week or 2. For now you can add this script:&nbsp; <a href="https://gitlab.com/LaytonGB/Paladin-Aura-API/-/raw/master/PaladinAura.js" rel="nofollow">https://gitlab.com/LaytonGB/Paladin-Aura-API/-/raw/master/PaladinAura.js</a> Summary Handling the distances between tokens in Roll20 can be rough. What's the distance in squares? Pixels? Page units? A problem no longer! With LED you can find the distance between 2 tokens like so: const distance = Led.from(tokenA)?.to(tokenB)?.byPageDistance()?.inPixels(); if (distance !== undefined) { &nbsp;&nbsp;&nbsp;&nbsp;// use the distance here } Using utility APIs can be awkward, so to make things easier you can get all the type-hints by adding LED as an NPM package! If you don't have Node installed, install it here:&nbsp; <a href="https://nodejs.org/en/download" rel="nofollow">https://nodejs.org/en/download</a> Then open your API script directory in a terminal and run: npm init Follow the instructions in terminal. When finished run: npm i <a href="https://gitlab.com/LaytonGB/led" rel="nofollow">https://gitlab.com/LaytonGB/led</a> Now when you start using LED it'll suggest auto-completions! Remember you still need to add this API to your Roll20 game! Commands LED has 2 main uses: Calculating distances between points or tokens. Converting between units. Calculating distances Step 1 The first command for distance calculations is always ".from()" and takes &nbsp;either the coordinates in pixels or a graphic. const distanceBetweenPointsStep1 = Led.from(xCoordinate, yCoordinate); const distanceBetweenGraphicsStep1 = Led.from(tokenA); Step 2 The second command is always ".to()" and takes the same again. const distanceBetweenPointsStep2 = distanceStep1?.to(xCoordinate, yCoordinate); const distanceBetweenGraphicsStep2 = distanceStep1?.to(tokenB); Step 3 Third is the way that distance is calculated. In 4th and 5th edition D&amp;D, "foure"&nbsp;calculations are used where the longest of X or Y travel is kept as the distance. In Pathfinder and D&amp;D 3.5e,&nbsp;"threefive" is used where the longest distance from X or Y is added to half the shortest distance from X or Y. "manhattan" adds together the X and Y distances. "pythagorean" calculates the actual distance using Sqrt(x^2 + y^2). Any of the above methods can be used as shown: const distanceFoureStep3 = distanceStep2?.byFoure(); const distanceThreeFiveStep3 = distanceStep2?.byThreeFive(); const distanceManhattanStep3 = distanceStep2?.byManhattan(); const distancePythagoreanStep3 = distanceStep2?.byPythagorean(); However usually you'll want to match your page settings. If you call the "byPageDistance" method with a pageId, that page will be used. Else if you used a graphic in step 1 or 2, the page the graphic was on will be used. Otherwise, the player page will be used. const distanceByGraphicPageStep3 = Led.from(tokenA)?.to(15, 5)?.byPageDistance(); const distanceBySpecifiedPageStep3 = Led.from(10, 3)?.to(12, 50)?.byPageDistance(pageId); const distanceByPlayerPageStep3 = Led.from(10, 3)?.to(12, 50)?.byPageDistance(); Step 4 The last step is to specify what value you want the distance in. Currently the API offers 3 unit types: Pixels: the distance in pixels as specified by the Roll20 coordinates. Squares: the number of squares between the coordinates or tokens. This can be a decimal. A page will be used as above for calculating how big the squares are. You can also call this method with a pageId to specify the page. Page units: the distance is in feet, meters, or whatever other page unit is being used.&nbsp;A page will be used as above for calculating how big the squares are and getting the unit of measurement. You can also call this method with a pageId to specify the page. const distanceInPixels = distanceStep3?.inPixels(); const distanceInSquares = distanceStep3?.inSquares(optionalPageId); const distanceInPageUnits = distanceStep3?.inPageUnits(optionalPageId); NOTE Any of these steps can fail for a variety of reasons, such as not getting a page back from roll20 due to invalid pageId, or the supplied graphics being on different pages and so the system does not know which page to use. As shown, the easiest way to deal with this is with optional chaining "?." which stops accessing the methods if the object is undefined or null. Be sure to check the final result for being "undefined" NOT for being falsy, because 0 is falsy and we've all made that mistake enough times. Converting units Sometimes you'll know a distance in one measurement, but need to use the page information to convert the value. The LED conversion methods can handle this for you. Unlike the distances method, if you pass the correct information this process cannot return undefined. Note that "page" refers to a Page object, not a pageId. const valueInSquares = Led.convert(valueInPixels).fromPixels().toSquares().onPage(page); const valueInPageUnits = Led.convert(valueInSquares).fromSquares().toPageUnits().onPage(page); const valueInPixels = Led.convert(valueInPageUnits).fromPageUnits().toPixels().onPage(page); Issues &amp; Suggestions If you've found a problem or feel like there's something missing from this API that would suit it, post in this thread or add an issue at&nbsp; <a href="https://gitlab.com/LaytonGB/led" rel="nofollow">https://gitlab.com/LaytonGB/led</a> .