Explainer

Why an AI can't roll dice (and what that costs your game)

5 min read · Updated August 2026

When you ask a chatbot for a d20, you get a number produced as part of text generation. That distinction is technical and it quietly changes how much uncertainty matters over a whole campaign.

What a real die does

A physical d20 samples a uniform distribution: twenty outcomes, each equally likely, with no memory of what came before and no context from your fiction.

A browser die should also produce unpredictable outcomes with the same distribution.

What a language model does instead

A model generating "you rolled a ___" is choosing the next token from the sentence it is building. That sentence includes scene context, your preferred outcomes, and distributional patterns from training.

So output can correlate with story tone. That is exactly what a die must avoid when it is carrying risk in the system.

Test it in two minutes

Open any chatbot and ask: "Roll a d20 fifty times and list only the numbers." Then count. You may see clusters, context-dependent shifts, and streaks that are more pattern-like than independent draws should be.

  • Repeated numbers and short motifs can be common, especially around emotionally loaded turns.
  • Low results can appear rarer than expected in some runs.
  • Long lists can drift into rhythms that a true RNG is much less likely to produce.

What it costs you

Risk is the engine of roleplaying. A roll matters because outcomes are uncertain, and you should feel uncertain. Remove indifference and three things collapse:

  1. Tension. You stop bracing before a roll, because you've learned the outcome will be survivable.
  2. Meaningful choice. If outcomes rarely punish bad decisions, strategy becomes little more than narration.
  3. Ownership. A victory you weren't allowed to lose isn't yours. This is the one people describe as "it stopped feeling like a game" without being able to say why.

The fix is not a better prompt

"Roll honestly, do not fudge results" helps for a handful of turns and then decays, because it's an instruction fighting the mechanism that generates every token. You cannot prompt a text predictor into being a random number generator.

The fix is to move the roll out of the model. Roll in code, resolve the result against the published rules in code, then hand the model a finished fact — "the action die came up 3 against 7 and 9: a miss" — and ask it only to describe what a miss looks like here. The model never learns what you needed, because it's told the answer after the answer exists.

That's how Markbound is built: a solo roleplaying game with an AI narrator that can't cheat. The dice roll in your browser, the rules are real Ironsworn, and your journal records what you did. On the front page you can play a short written opening without an account — same dice engine as a live saga, and rolled outcomes are never scripted to succeed.

Try it without an account.

Play a short written opening — real dice, real sheet, no signup — on the front page. Or read a full nine-turn session with every roll printed.