I've recently worked my way through making as much as I can automated (only using macros) to generate random encounters. If you only have 1 Random Encounter Table to draw from (by this I mean only 1 Result column like in the first example) then there is a really cool method. Consider the Random Encounter Table Day Roll Night Roll Result 1-2 1-3 Stirges (1d8+2) - 4 Ghouls (1d4+1) 3-4 - Ogre (1) 5-6 5 Goblins (1d6+3) 7-8 6 Hobgoblins (1d4+2) 9-10 7-8 Orcs (1d4+2) 11 9-10 Wolves (1d4+2) 12 11-12 Owlbear (1) I consider this 1 table (even though there are two different roll conditions in Day and Night). Now to implement this I made two Rollable Tables named re-day and re-night. Each has items named 1 through 8. Each one is weighted by counting how many roll options lead to that outcome. For instance the weight on Stirges is 2 in the day table and 3 in the night table while the weights on the Ghouls is 0 in day and 1 in night. The following macro allows you to choose which table to roll /w gm &{template:npcaction} {{rname=Random Encounter}} {{description=?{Time?|Day,[[1t[re-day]]] |Night,[[1t[re-night]]]}}} However, this will give you a ridiculous result of just an integer 1, 2, ..., 7, or 8. To remedy this you build 8 Rollable tables named 1, 2, ..., 8. Each of those tables will list the possible outcomes in them. For example Table named 4 will have the entries Goblins (4), Goblins (5), Goblins (6), Goblins (7), Goblins (8), and Goblins (9) each with weight 1. To account for this consider the macro /w gm &{template:npcaction} {{rname=Random Encounter}} {{description=?{Time?|Day,[[1t[[[1t[re-day]]]]]] |Night,[[1t[[[1t[re-night]]]]]]}}} The bit [[1t[re-day]]] will return the number corresponding to the type of encounter. Wrapping it in its own [...] will treat the output as the name of a table in the [[1t[...]]] bit which will then roll from the correct table to return an encounter. Now, in the source I got this from (LMoP) you are supposed to roll a 1d20 and on results 17-20 then roll an encounter. So make a small adjustment. /w gm &{template:npcaction} {{rname=Random Encounter}} {{description=?{Time?|Day,[[[[1d20>16]]t[[[1t[re-day]]]]]] |Night,[[[[1d20>16]]t[[[1t[re-night]]]]]]}}} You'll often get whispered a Random Encounter with the number 0 and you just have to know that means no encounter (I cannot figure how to output a string like 'No Encounter'). Later in the campaign (Wave Echo Cave) I wanted another table and I thought to do it differently. d12 Roll Result 1-3 Stirges (2d4) 4-5 Ghouls (1d4) 6 Gricks (1d4) 7-8 Bugbears (1d4) 9 Skeletons (1d6) 10 Zombies (1d6) 11-12 Ochre Jelly (1) I didn't want to delete my old set of tables to replace them with this and I couldn't figure out a way to build a second set of tables that'd work correctly. So I decided to build a robust table Random-Encounter-Wave. Each entry in the table is given by a specific outcome with count: Stirges (2), Stirges (3),...,Gricks (4),....,Ochre Jelly (1) (32 entries in all). Now the trick is figuring out the weights. First for each result roll indicated you have to calculate what I'm calling the Unique Roll Count. For dice in the for ndk the unique roll count is given by (n+k-1)!/((k-1)!*(n)!) where ! is factorial (the product of that number with all those less than it and greater than 1). For example 5!=5*4*3*2*1, and because we mathematicians like to be loony 0!=1. For each encounter this gives Result Unique Roll Count Stirges 10 Ghouls 4 Gricks 4 Bugbears 4 Skeletons 6 Zombies 6 Ochre Jelly 1 To place them on even footing (probability-wise) one must calculate the Least Common Multiple of these numbers, in this case 60, and then list the multiplier that gets you there. Result Unique Roll Count Multiplier Stirges 10 6 Ghouls 4 15 Gricks 4 15 Bugbears 4 15 Skeletons 6 10 Zombies 6 10 Ochre Jelly 1 60 Now for each outcome (e.g., Stirges (4) or Zombies (3)) you need to count how many different ways that outcome can happen (e.g., two 2's/ one 3 and one 1 or one 3 respectively). In this case it is easy, but can get wild for bigger dice like 2d8 or 3d4. Every result has only one way it can be rolled except for Stirges (4), Stirges (5), and Stirges (6) which each have 2. Let's expand our table Result Unique Roll Count Multiplier Outcome Count Stirges (2-3, 7-8) 7 (10 total) 6 1 Stirges (4-6) 3 (10 total) 6 2 Ghouls 4 15 1 Gricks 4 15 1 Bugbears 4 15 1 Skeletons 6 10 1 Zombies 6 10 1 Ochre Jelly 1 60 1 Finally we look at the 1d12 rolls and count how many rolls lead to each encounter (Encounter Count) and the final weight is Encounter Count times the Multiplier times the Outcome Count Result Unique Roll Count Multiplier Outcome Count Encounter Count Final weight Stirges (2-3, 7-8) 7 6 1 3 18 Stirges (4-6) 3 6 2 3 36 Ghouls 4 15 1 2 30 Gricks 4 15 1 1 15 Bugbears 4 15 1 2 30 Skeletons 6 10 1 1 10 Zombies 6 10 1 1 10 Ochre Jelly 1 60 1 2 120 You can see if there is a common divisor between all the Final Weights (here the Gricks' 15 screws it all up) and divide all the Final Weights by the Greatest Common Divisor to make the numbers smaller but that will have no effect. These are the weights to use for each entry in Random-Encounter-Wave table. This table also has the 17-20 on a 1d20 so this macro rolls the table and whispers me the result (reading 0 as No Encounter). /w gm &{template:npcaction} {{rname=Random Encounter}} {{description=[[[[1d20>16]]t[re-wave]]]}} Alternatively there are 16 outcomes on the d20 that lead to no Encounter and 4 that lead to an encounter. So if we take the total Final Weight of the encounters (720) and multiply this by 16/4=4 we can get the weight of No Encounter (2880) and make a new entry using this information and replace the [[1d20>16]] with 1 in the above macro. If anyone is interested I can write about this in more general, mathy terms without the example.