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

Running aerial combat in Roll20

Just want to cull some ideas/solution to running aerial combat on what is generally a 2-D grid (I'm running 5E DnD specifically but I assume this question is largely system agnostic). How do you represent/resolve 3 dimensional movement/position in a 2 dimensional gridded space?
I use the Flight API script, which is good enough for handling my sole Aarakocra player.  If you plan a massive airship battle, things get harder to manage, but it's still the best way I've found to do it.
1558121035
GiGs
Pro
Sheet Author
API Scripter
Without a script, you can show height by using the status markers. Pick a colour to represent altitude, and a scale, and you can show the number 0-9 on the status marker. You can use multiple colours if you need 2 or 3 digit heights.
1558122644

Edited 1558122687
The Aaron
Roll20 Production Team
API Scripter
You can also use a /roll 1d20 command, then drag the resultant die onto the table next to the token and set it's face to be whatever elevation you like (1-20).  It will have the color of the player that rolls it, and players can drag them out so they can move them with their tokens, but you'll have to resize then if you want them smaller. You could also have the player change their token's name to have the elevation.
Thank you GiGs and The Aaron for the suggestions.  All good ones.  I especially like the idea of using status icon as it is discreet.  Now, if there's a way to short cut movement calculations in 3d...
1558130442
GiGs
Pro
Sheet Author
API Scripter
Is the ruler not good enough?
Sorry, I'm a bit confused.  Can the ruler compute distance in 3d grid?
1558131012

Edited 1558131036
What complicates things somewhat is the fact the 5e does not use Euclidean distance for point A to B generally - esp. if you use the variant rule (if not, I think simple computation could just be the max between distance on x-y plane and vertical).  One can make the exception for aerial combat, by just computing the Euclidean distance and round to the nearest 5' perhaps.
1558131486

Edited 1558131518
GiGs
Pro
Sheet Author
API Scripter
oh, hehe, sorry about that. I'm the one who was confused.  You can do trigonometry and exponents in dice macros, so it is possible to have a macro to calculate precise distance. Distance: [[round((?{Distance?|1}**2 + ?{Height?|1} **2)**0.5)]] If you have a scaling factor on height (like each unit is 10 feet, just multiple by ten, likewise for distance) Here I'm assuming youre measuring in hexes of 5', and height is in units of 10' (just to be awkward) Distance: [[round(((?{Distance in hexes?|1}*5)**2 + (?{Height in units?|1}*10) **2)**0.5)]]
1558132118

Edited 1558132138
Thanks for the code!  Yeah, I think I may have to just treat 3d movement as Euclidean straight line movements to simplify things as I'm using the variant rules for diagonal movement in 5E.  :( It would be way too time consuming to figure out how many diagonal cubes one moves and whether they'd count as 5' movement or 10'.  
1558132450

Edited 1558132499
GiGs
Pro
Sheet Author
API Scripter
If accuracy is vital, you could measure the straight vertical and straight horizontal distance, and also the height, using the same process: Eith a grid this wouldnt be too hard. Distance: [[round((?{Vertical?|1}**2 + (?{Horizontal?|1}**2 + ?{Height?|1}**2)**0.5)]]
Sorry, I think I was somewhat unclear.  Computing the straight line Euclidean distance isn't the problem really.  The problem is that per D&D variant rule, first diagonal square movement counts as 5' then next as 10' then next as 5' and so on.  This is easy enough to compute in 2-D with the ruler and setting.  However, once we add another dimension, it complicates things somewhat.  Although, now that I think about it, you would know how many diagonal cubes you'd travel since it'd be equal to the number of diagonal squares as projected onto the x-y plane.  Maybe the formula won't be too hard to implement.
1558133717

Edited 1558133745
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
I just extend the non-Euclidean (or non-Pythagorean) geometry to the third dimension. If r=the greater of x or y*, then r = the greater of x, y, or z. This feels nicely in keeping with the KISS philosophy of 5e. Find the greatest range and go! *instead of r 2 =x 2  + y 2
1558134753

Edited 1558135732
Hi keithcurtis.  This would be accurate if I wasn't using the variant rule (as all single square movement would be equal), but with variant rule, I don't think it is.  Though I can think more on it.  But, for the sake of simplicity I may just apply that rule for aerial combat only. EDIT: BTW, what is KISS philosophy?
1558135785
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Hmm. In that case, you could use the ruler to find the horizontal range. Let's say it computes out to 13 inches. Your attacker has an altitude of 8 inches. Use the ruler settings for your variant rule to find the range on a square 8 inches away on the y axis and 13 inches away on the x axis. It does require two measurements, but should come close enough for RPG reckoning. Sorry, I usually load up tabs and then answer threads sequentially, and sometimes I forget to refresh the page. I wrote my answer before I saw your immediately preceding post. I saw earlier that you had mentioned the variant, but not later that you were looking for a solution within that structure.
1558136473
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
KISS = "Keep It Simple, Stupid". It's just a reminder to designers of any kind of system to refrain from needless complication. Obviously, people will draw that line in different places. 5e draws it very close, sacrificing "realism" for "speed of play" in most cases, putting things like the range variant or flanking rules as options for those who still want fine crunch.
1558136553
The Aaron
Roll20 Production Team
API Scripter
KISS = Keep It Simple, Silly! (Or whatever S you want. =D)
1558136981

Edited 1558137030
I think the easiest thing to do would be to just treat it as if all squares are equivalent but still compute the distance traveled in x-y plane using the variant rule.  I.e. use the max distance heuristic but compute the x-y distance using the variant rule.  I won't be fully accurate, but accurate enough. Re: KISS, as someone who got introduced to D&D through 1E and 2E AD&D as a youngster (I'm dating myself I know), I can fully get behind this KISS philosophy.  I'm happy that days of endless table look ups and rule extensions that had no unifying design concept (think "Complete ____'s Handbook" of 2E) are no more.
1558137715
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
I remember cutting out and assembling the 1ed AD&D Combat Calculator wheel. So you could properly figure out how to hit not only Armor Class, but armor type, according to your class, level and precise weapon choice (while noting its speed factor). Crazy complicated, but that's what I was into then.
I guess you have your concepts straight, but for all others trying to figure out what has been said here: Matthew Colville has a very good YouTube video on this topic where he explains the difference between the options and how to apply it to third dimension.  I use a hex as 2D base and use the non-euklidian squares approach for 3d, cause hex has no easy 3d shape. 
1558190980
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
For anyone following the thread who my find it useful, here is a query macro for finding 3d range once you know 2d range and altitude. This uses the Pythagorean theorem and rounds in a standard fashion: 3d range is [[round(((?{2d range|0}**2)+(?{altitude|0}**2))**.5)]]
1558202483
GiGs
Pro
Sheet Author
API Scripter
I posted that a few posts up, Keith :)
1558206297
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
I missed that. Although, mine is slightly different in that you could count the x-y range however you feel comfortable with, including hexes. Only the z-axis is unforgiving real-world math.
1558208300
GiGs
Pro
Sheet Author
API Scripter
I did that version a couple posts earlier ;)
1558209537
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Well, I'll go back to bed, then. :D
1558210663
GiGs
Pro
Sheet Author
API Scripter
hehe, just as well you didnt rad back, you'd have seen me being just as confused even earlier in the thread.
1558581701

Edited 1558581934
So thinking about this for more than a passing moment.  The answer for variant rule is much simpler than one may think.  Here's the step by step way one could calculate. Assumption : You're always traveling vertically (whether that's straight up or down or diagonally up or down) until you reach the destination in the z-axis. Suppose the number of cubes in the z-axis to travel is less than or equal to the number of cubes to travel in the x-y plane.  Then, the total distance traveled is equal to the distance traveled in the x-y plane since you'll reach the z-axis destination before (or right as you reach) the destination in the x-y plane and thus we can compute the traveled distance by first projecting onto the x-y plane. Suppose the number of cubes in the  z-axis to travel is greater than the number of cubes to travel in the x-y plane.  Then, the total distance traveled is equal to the distance traveled in the x-y plane plus number of cubes remaining in the z-axis after subtracting the number cubes traveled in the x-y plane times 5'.  You can think of this as first project onto the x-y plane then when you reach the destination in the x-y plane, you'll have remainder of straight vertical travel as computed above. In short, the formula can be computed given three parameters (a = # of cubes in x-y plane, b = # of cubes in z-axis, c = x-y distance) dist = c + max{b-a , 0}*5 Or in Roll20 command, [[?{x-y Dist|0} + [[{[[?{No. z cubes|0}-?{No. x-y cubes|0}]],0}kh1]]*5]]