Loot & Random Table Builder
Turn weighted entries into die ranges that use every face exactly once — no gaps, no overlaps. Nested tables, no-repeat draws, printable.
3 Rusty sword weights an entry. [Gems] on its own rolls on the
table called Gems. Lines starting with # are ignored. A line that is only a
number stays text — 3 gold pieces is one entry, not three.
Roll
The table as it would be printed
What the die can and cannot represent
How the ranges are worked out
- Turning weights into die ranges is the only hard part of a random table, and it is where hand-made ones go wrong. Rounding each share on its own leaves either gaps — rolls that hit nothing — or overlaps, where one roll matches two entries and whoever is reading picks a favourite.
- This uses the largest-remainder method: everyone gets the whole faces they have earned, then the leftovers go to whoever came closest to earning another. Every face of the die is used exactly once, and no entry ends up more than one face away from its exact share.
- A die can be too small for your weights. Eight entries cannot be given distinct ranges on a d6, and rather than silently dropping some, the entries that could not be represented are listed so you can move up to a bigger die.
- Tables that reference each other are followed, and tables that reference themselves are not. A loop is reported with the path that caused it rather than being quietly truncated or hanging the page.
- Drawing several results without repeats reallocates the die each time, so the remaining entries keep their relative weights instead of the leftovers all becoming equally likely.
- A leading number is read as a weight only when something follows it, so "3 gold pieces" stays a single entry rather than becoming three copies of "gold pieces".
How to use
- Type your entries, one a line, with a weight in front if you want one.
- Pick a die — the tool says if it is too small for your weights.
- Roll, or print the table with its ranges worked out.
Frequently asked questions
Why do my hand-made tables have gaps?
Because rounding each entry’s share on its own almost never adds up to the die. You end up with gaps — rolls that hit nothing — or overlaps, where one roll matches two entries and whoever is reading quietly picks a favourite. This uses the largest-remainder method so every face is used exactly once.
How are the weights turned into ranges?
Every entry gets the whole faces it has earned, then the leftover faces go to whoever came closest to earning another one. The guarantee is that no entry ends up more than one face from its exact share, and that the ranges always run from 1 to the size of the die with nothing missing.
What if my die is too small for the weights?
It tells you, lists the entries that could not be given a range, and works out the smallest standard die that would fit them all. Nothing is silently dropped. Some splits fit no standard die at all — one part in a thousand rounds to nothing even on a d100 — and it says that too.
Can one table roll on another?
Yes. Put a table name in square brackets as an entry and rolling it will follow the reference and return the nested result. A table that eventually points back at itself is caught and reported with the path that caused the loop, rather than hanging or being quietly truncated.
Why does the actual chance differ from the weight I typed?
Because a die has a fixed number of faces and your weights may not divide it. Weight 5 out of 15 is an intended third, but a d20 has no fifteenths, so it arrives as 7 faces — 35%. The difference column shows exactly where that happens, and a bigger die usually removes it.
Can I draw several results without repeats?
Yes, and it reallocates the die after each draw so the remaining entries keep their relative weights instead of the leftovers all becoming equally likely. Asking for more results than the table holds returns everything it has rather than looping forever.
Is "3 gold pieces" three entries or one?
One. A leading number is read as a weight only when there is something after it that is not part of the number, and the parser is tested on exactly that case. If you genuinely want a weight of three on an entry called "gold pieces", that is what it does — which is the same thing.
🔒 This tool runs entirely in your browser. Nothing you enter is uploaded, logged, or stored.