A photograph does not show a walk
A check that photographs a walking character checks nothing. There is a moment, in the middle of every step, when a swinging arm and a dead arm sit in exactly the same place. Photographed there, they look alike. We paid for that lesson, and we changed our checks.
1. The check said green, the character still walked badly
We had just redone the characters' movement. Until then it was built by hand, gesture by gesture, and it showed: a scarecrow on a treadmill. We stopped that and copied real animations onto the avatars' skeletons.
An automated check verified the result. It opened the game, made the character walk, read the position of the right arm bone, and concluded: the arm is not at rest, so it moves, so this is fine. Green.
Except that on screen, the character still walked badly. The check was not lying: it was looking at the wrong moment.
2. Why a single measurement proves nothing
A swinging arm passes through every position, including the resting position, twice per step. If the check reads the bone at exactly that instant, it reads the same value it would read from a dead arm. One measurement cannot tell them apart.
3. What we changed: the check becomes patient
Instead of reading the bone once, the check reads it about ten times in a row, three tenths of a second apart. It keeps two numbers only: the smallest value seen, and the largest. At the end, it subtracts.
That subtraction is the spread: how far the arm travels between its highest and its lowest point. A dead arm has a spread of zero, no matter when you photograph it. A walking arm has a spread you can demand.
arm = { min: very large, max: very small }
repeat about ten times:
value = read the right arm bone
if value < arm.min : arm.min = value
if value > arm.max : arm.max = value
wait 300 milliseconds
spread = arm.max − arm.min
We do the same for the thigh and for the hips. Three bones, three spreads, three thresholds to clear. The check no longer asks "is this arm at rest?", it asks "has this arm covered enough ground?".
4. What it caught straight away
Two real defects, invisible to the eye for several days.
The first: the village inhabitants were never put back into position after loading. The game loads them in the background so it can start faster, and nobody restored their pose once they arrived. They moved — a little — but not like the others. A patient check saw it; a glance did not.
The second: copying an avatar crashed. The character holds a piece of information that points back at itself, and the copier went round in circles on it. We now set that piece aside during the copy and put it back afterwards.
5. The rule we take from it
Three checks were made patient at once. This is not a video game story: it holds for anything that changes over time. A machine heating up, a queue draining, a site answering more and more slowly. Every time, a single measurement can land exactly on the reassuring value.
A check that has never refused guards nothing. This one refuses now, and that is why it is worth having.