Tools and engines
Learning paths through this topic
Find quests that wait for each other so none of them can ever start
When quest A needs B and B needs C and C needs A again, the whole chain stays locked forever, and the player just sees a quest giver who does nothing. This entry shows how to find such a ring, name the quests in it, and not flag harmless shared requirements by mistake.
Spot quests in a save that could never have happened and fix the harmless ones
A save can say a quest is finished while the quest before it never started. Sometimes that is damage, sometimes a normal result of your own update. This entry shows how to tell the two apart so the game neither locks players out nor wipes honest progress.
Stop a visual effect from changing which treasure drops
If the whole game draws its dice from one pool, adding a sparkle or an extra monster sound can silently change the chest everyone gets, and a saved fight plays out differently after loading. This entry shows how to split the dice per job and keep a run repeatable.
Find items in your crafting list that the player can never actually make
After many AI-written changes a recipe may need something that nothing in the world provides, or two items may each wait for the other. The player only finds out hours in. This entry gives the AI a check that names every dead end and what is missing.
Replay a player's recorded inputs and find the exact step where your game goes wrong
A player says that after a long fight the game ended up in a state that cannot be right, and nobody can reproduce it by hand. This entry shows how to record a run so it can be replayed exactly, and how to name the first moment where two versions of the game disagree.
Never respawn the player inside a rock, in the lava or high in the air
After a wall is built over the old bed, or the land is regenerated, the saved respawn point can lie somewhere the player cannot live. This entry gives the AI a search for the nearest good place that always gives the same answer and says when there is none.
Make a world that wraps around without breaking distances at the seam
In a world where walking far enough east brings you back from the west, a monster just across the seam can look a whole map away, so it never notices you. This entry gives the AI the right way to measure across the seam and to keep positions inside the map.
Notice a damaged or half-written save before it replaces a good one
A crash, a closed tab or a full disk can leave a save cut off in the middle, and the game then loads a hero with missing items. This entry shows how to tell a whole save from a broken one, and a trap that makes good saves look broken.
Show exactly what changed between two saves so a bug report is useful
When a player says a chest emptied itself or a door opened too early, the AI needs to see what really changed, not two huge files. This entry shows how to produce a short list of differences, and which noisy fields to leave out so the real cause is visible.
Turn a hero name into a save file name that works on every computer
Players type names with slashes, dots, accents and emoji, and a save named after the hero then fails on one system while working on another. This entry shows how to build a safe file name, keep two heroes with the same name apart, and not cut a name in half.
Do not lose the whole world when the game closes in the middle of saving
A power cut or a closed browser tab during a save can leave a file that is cut off, and the player's whole world is gone. This entry gives the AI a way to keep two copies and always load the newest one that is still whole.
Save only the blocks the player changed, so the save file stays small
Saving every tile of a huge generated world makes the file grow into the hundreds of megabytes. This entry shows the AI how to store just the player's changes on top of the generated land, and what to do when a later update changes the generator.