On this page
  1. The problem procedural generation is solving
  2. Two approaches, and their trade-off
  3. The constraint that makes it fair
  4. Constrained generation in the other games
  5. What improves when nothing repeats
  6. Determinism, seeds and why we do not use them
  7. How to play a game that never repeats
  8. When a hand-built level is the better choice
  9. The constraints a generator must respect
  10. Seeds, and why we do not expose them
  11. When a generator produces something bad anyway

The problem procedural generation is solving

A hand-built level is exactly as good as the person who built it and exactly as long as they had time for. Once a player has learned it, it is finished. That is fine for a game with an ending and useless for a game whose whole proposition is 'go again'.

Procedural generation replaces the level with a set of rules that produce levels. Done badly, it produces noise: content that is technically infinite and emotionally meaningless, because no arrangement means anything. Done well, it produces a space of possible arrangements that all obey the same grammar — so a player can learn the grammar even though they can never learn the arrangement.

Ten games on this site are procedural to some degree. What follows is how each one avoids producing noise.

Two approaches, and their trade-off

Chunk templates

The standard approach, used by most runners and platformers including Monster Tower. The designer builds a library of small, hand-checked pieces — a floor with a moving platform, a gap with a crumbling ledge — each tagged with what it requires. The generator picks pieces weighted by how far into the run the player is and stitches them together.

The advantage is guaranteed playability: if every chunk is individually solvable, every combination is at least possible. The cost is that an experienced player eventually recognises chunks, and recognition is the beginning of the end of a game's life.

Per-obstacle generation

Endless Monster Run generates each obstacle individually rather than from templates. Nothing repeats, ever, so there is nothing to recognise.

The cost is that all responsibility for fairness moves into the constraint system. With chunks, fairness is checked once by a human; with per-obstacle generation, it has to be guaranteed by a rule that runs thousands of times a minute.

The constraint that makes it fair

The rule is short and it is the most important thing in this guide.

Each obstacle class has a commit cost — how long the player is locked into a response after handling it. A jump commits you for about 0.55 seconds, a slide for 0.45, a dash for 0.4. The generator will not place the next obstacle inside that window plus a reaction allowance.

The allowance starts around 420 milliseconds and shrinks toward a floor of 260 as a run progresses. Crucially it is measured in time and converted to pixels using the current speed — which is why a fast run is not simply a denser one. As speed rises, the minimum pixel gap grows to match.

The promise this buys is worth stating plainly: the generator is allowed to be as nasty as it likes about WHAT it places, and never about WHEN. If a procedural game here ever feels like it gave you an impossible pair, that is a bug worth reporting.

There is a second constraint on top. In Beast Run, formations may block one or two of three lanes but never all three, and the same pair is never blocked twice in a row — because a repeated two-lane block reads as unfair even when it is technically survivable.

Constrained generation in the other games

GameWhat is generatedThe constraint
Monster TowerFloors from tagged chunk templatesEvery floor includes a plain landing platform reachable without perfect timing
Lava BeastLedges up a vertical shaftEach ledge is placed within jump reach of the one below it
Monster EscapeA maze, depth-firstExtra walls are knocked through afterwards so no wrong turn is a full retrace
Rolling BeastTerrain from smooth value noiseAmplitude grows with distance so hills get bigger, not just faster
Monster TunnelContinuous wall geometryThe gap narrows to a floor; late difficulty comes from faster undulation
Monster Coin RushCoin streams sweeping across the fieldStreams never arrive faster than the player can cross the field between them

The maze case is the least obvious. A perfect maze — one with no loops — is miserable to escape from, because every wrong turn must be fully retraced. Knocking roughly fourteen per cent of the walls through afterwards converts it from a memory test into a routing problem you can solve live, which is a much better game.

What improves when nothing repeats

In a hand-built game, improvement is partly knowledge. In a fully procedural one, knowledge is worthless — so what is left?

  1. Classification speed. How fast you identify which of three obstacle classes is in front of you. This is the dominant skill in Endless Monster Run and it improves quickly.
  2. Pattern vocabulary. In template-based games you stop seeing 'a floor' and start seeing 'a spinner floor with a moving-platform entry', which you already know how to solve.
  3. Commitment speed. How quickly you choose a route and start executing, rather than deliberating. This is what Lava Beast measures almost exclusively.
  4. Recovery. Since arrangements are unfamiliar, you will be wrong more often. How fast you stop being wrong matters more here than anywhere else.

That is a genuine progression curve, and it is why an endless game can still feel like it is teaching you something on the fiftieth run.

Determinism, seeds and why we do not use them

It is technically easy to make a procedural game deterministic: seed the random number generator and the same seed produces the same run forever. Several famous games do this, and it enables seed sharing and fair competition.

We do not, for one reason: this site has no server and no leaderboard, so there is nobody to compete against on a shared seed. Determinism would buy us nothing and cost the thing procedural generation is for, which is that your hundredth run is genuinely new.

Where determinism is useful we do use it internally — the noise function behind Rolling Beast's terrain is seeded per run so a hill stays put between frames, and the background detail in several games is derived from a hash rather than stored, which keeps memory flat.

How to play a game that never repeats

  • Learn the vocabulary, not the level. Three obstacle classes, six spawn patterns, four platform types. That is the whole language.
  • Do not look for a rhythm. Template games have a faint one; per-obstacle games have none, and searching for one is actively harmful.
  • Solve from the exit backwards. In Monster Tower, find your way off a floor first and then work out how to reach it.
  • Commit fast. In generated content, a decent decision made immediately beats a good decision made late, every time.
  • Expect to be wrong more often. Unfamiliar arrangements produce more mistakes; the measure of skill is how little each one costs you.

When a hand-built level is the better choice

Procedural generation is not automatically better, and nine games here use designed content instead.

The rule we use: if the game wants to make a specific point about a specific interaction, it needs a designer. A generator can produce a floor with a moving platform and a crumbling ledge; it cannot produce a level that exists to teach you that crumbling stone is for crossing rather than standing. That is an argument, and arguments have authors.

So the split across the library is roughly: teaching and completion go to hand-built levels, endless replay goes to generators, and the two coexist rather than compete.

The constraints a generator must respect

Procedural generation without constraints produces unplayable content very quickly. Every generator here operates under the same five rules, enforced in code rather than trusted to tuning.

  1. Reachability. No gap may exceed jump range at the player's actual movement speed, and the check uses the speed at that moment rather than a nominal figure.
  2. Commit spacing. Nothing may be placed within the duration of the longest action you might currently be committed to, plus a reaction allowance.
  3. A safe route. Every generated section has at least one path through it that requires no risk-taking, even if that path scores poorly.
  4. No repetition. The same arrangement may not appear twice within a short window, because a generator that repeats reads as broken rather than as random.
  5. Recovery space. After a dense section, the next section is guaranteed to be sparser. Sustained maximum density is how a generator produces a run that nobody could have survived.

The fifth rule is the one people notice without being able to name it. A game that is relentlessly dense feels unfair even when every individual obstacle was avoidable, because there was never a moment to reset your position or your attention.

Seeds, and why we do not expose them

Every generator here is driven by a seeded pseudo-random sequence, which means a run is technically reproducible. We do not give you the seed, and the reason is about what the category is for.

A visible seed turns an endless game into a puzzle: find the good seed, memorise it, optimise it. That is a legitimate kind of game and it is not this one. The value of an endless runner is that you are responding rather than recalling, and knowing the layout in advance removes the only skill it was testing.

The seed is still useful internally — it is how a generator bug gets reproduced during development, by replaying the exact sequence that produced the impossible gap. That is a debugging tool rather than a feature, and it stays on our side of the line.

When a generator produces something bad anyway

Constraints reduce bad output; they do not eliminate it. A generator will occasionally produce a section that is technically legal and genuinely unpleasant, and it is worth knowing what that looks like so you can tell it from your own mistake.

The recognisable case is a legal-but-cruel arrangement: every gap within range, every spacing above the minimum, and no room to breathe across a long stretch. Nothing violated a rule and the section is still worse than any section a designer would have shipped.

Our response to reports of these is to look at the constraint set rather than to patch the instance, because there is no instance to patch — the arrangement exists only in that one seeded sequence. Usually the fix is a new constraint, which is how the recovery-space rule came to exist in the first place.

If a section felt impossible rather than difficult, it is worth reporting. We cannot reproduce it from a description alone, but a description of the shape — 'three high obstacles with no gap, about ninety seconds in' — is frequently enough to find the rule that should have prevented it.

Key takeaways

  • Procedural generation replaces a level with a grammar — players learn the grammar even though they never learn the arrangement.
  • Chunk templates guarantee playability but become recognisable; per-obstacle generation never repeats but moves all fairness into the constraint system.
  • The core constraint is commit cost plus a shrinking reaction allowance, measured in time and converted to pixels at the current speed.
  • Mazes get extra loops knocked through because a perfect maze makes every wrong turn a full retrace.
  • What improves in a procedural game is classification speed, pattern vocabulary, commitment speed and recovery.

Frequently asked questions

Is procedural generation just randomness?

No. Randomness picks what appears; constraints decide whether it is allowed to appear there. Without the second half you get noise rather than a game.

Can a procedural game give me an impossible situation?

Not in this library. Spacing is enforced from each obstacle's commit cost plus a reaction allowance, so every obstacle is individually handleable.

Why is Endless Monster Run harder than the other runners?

Because it generates each obstacle individually rather than from pre-checked chunks, so there are no sequences to recognise, and its reaction allowance floor is the tightest on the site at 260 ms.

Do you use seeds so runs can be shared?

No. With no server and no leaderboard there is nobody to share a seed with, and determinism would cost the main benefit of generation.

Can I replay the same generated layout?
No. Generation is seeded, so a layout is technically reproducible, but seeds are not exposed. Knowing the layout in advance would remove the reading and reacting that endless games exist to test.
Illustrated portrait used for the Monster Arcade editorial byline

Alex Morgan

Browser Games Editor & Interactive Gaming Content Specialist

Alex Morgan is the editorial byline for everything published on Monster Arcade — the design notes behind all 30 original games, the strategy guides, and the tuning decisions that set every difficulty curve on the site. More about our editorial byline.

Published · Last updated