Meet the mote: a small blue creature with one eye and no keyframes. Every card below is a different way for a thing to move — the maths of procedural animation, one letter of the alphabet at a time, eight laps of it. Laps one and two teach the machinery — one idea per card: sines and polar coordinates, springs and damping ratios, headings and wheelbases, steering brains, joint chains, verlet bodies, raycasts, A* and Béziers, and the clock itself (time scale, hitstop, substeps). Laps three and four are genre laps — sci-fi, adventure, action, fantasy, arcade, cozy, minimalist, glitchy, goofy: homing missiles, slimes, a Frogger hop, a tank turret, a kite, a pinball table, a zombie horde — a picture-book to skim until you recognise the motion you were imagining; each genre card's caption names the teaching card it borrows from. Laps five to eight fill the gaps the first four left — eight more families: input & intent (coyote time, jump buffers, dead zones, gestures, flings), collision & contact (boxes, circles, sweeps, tiles one axis at a time, one-way ledges, slopes, sensors, triggers, hitboxes), platformer verbs (mantle, ladder, wall-run, slide, roll, glide, jetpack, swim, gravity flips, ziplines), wheels, wings & ballast (drift, suspension, hovercraft, boost, a pseudo-3D road, warp stars, six degrees of freedom, mounts, trains), squads & maps (formations, escorts, hiding, context steering, flow fields, Dijkstra and influence maps, behaviour trees, utility AI, daily schedules), joints, cloth & grains (CCD, quadrupeds, jiggle, cloth, rope bridges, torque, hinges, breakable links, throws, artillery, falling sand, tile water), rewinds, rooms & beats (ring buffers, fixed steps, energy turns, the beat clock, pause, cooldowns, group framing, room cameras, camera kicks, zoom punches, rail and orbit cameras, screen wrap), and game verbs (fishing, farming, cooking, sokoban, a pet, emotes, a xylophone, painting, photo mode, match-3, tetrominoes, rhythm judgement, the cartoon wind-up). Each style is a living loop (it keeps moving with nobody touching it) plus a press reaction (click a running card to aim it, excite it, or shove it — most cards use where you click; a small badge says click or drag until you have). Press ▶ Run all, or wake one card at a time. The tempo buttons run everything at ×2 or ×4 for skimming — as extra substeps, so the springs stay honest. Under each card, open code loads its full source into the editor at the bottom — every style is one self-contained function, written to be read.
Every style also hides a rhyme. A rhyme is the same motion with two or three dials turned — a stiffness, a count, a speed, a palette — and nothing else. Click ⇄ its rhyme on any card to swap them in place (208 more movement styles folded into the same cards), then open code to read the pair: every card keeps its numbers in a D = { … } block at the top, and the rhyme's source is that block with the moved dials named. The maths is the cast list, not the obstacle. Seventeen families, seventeen kinds of memory — the original nine: Clocks & circles store nothing (position is a formula of time); Slopes & springs remember a velocity; Headings & vehicles remember an angle; Brains & steering add an intention; Crowds & fields give every body one rule, or every point in space an opinion; Paths, grids & schedules remember a route; Chains & joints remember a list of joints; Bodies & ground remember position and last position; Time & cameras move the clock and the window themselves — and the eight new ones remember a timer, a shape, a state, a grip, a slot or a map, a constraint or a cell, a buffer or a clock, and a rule. Every formula on the cards — v₀ = √(2gh), cos A = (a² + d² − b²)/2ad, ω = v ÷ r, 1 − exp(−k·dt) — is drawn on the canvas where it acts, so the symbol and the motion arrive together.
Every style is one function, make(u), returning { frame(dt, t), press(x, y) } — and drag: true when its press is a continuous control (the runtime then repeats the press while the pointer is held). Its dials sit at the top in a D = { … } object, so the first thing to edit is always in the first three lines. The kit u: ctx, W, H (canvas), GY (the standard ground line), the palette (MOVER blue for the protagonist, TARGET amber for where it wants to be, BONE, GOOD, HOT, MAGIC), and the drawing kit: stage() (night backdrop + graph paper), ground(), dot(), ring(), line(), rect(), poly(), arrow(x1,y1,x2,y2,c) — vectors drawn honestly — mote(x,y,angle) (the protagonist), label(), plus the little maths drawer: len(x,y), clamp, lerp, ease, smooth(rate, dt) (the framerate-proof lerp factor), wrapAngle (fold any angle into −π..π), rand(a,b), rng(seed), noise(x) (smooth 1-D noise), TAU. Everything else — every spring constant, threshold, and turn rate — lives in plain sight in D.
The preview is bigger than the cards, and every style is written relative to W, H, and GY — the same code scales up without edits. Click (or drag, on the drag cards) the preview to trigger the press reaction; most styles aim at your click.
D. Set the Damp card's zetas to 0.1 and watch it ring like a bell; give Arrive a tiny slow radius and it becomes plain Seek; raise the Gait walker's step threshold and it takes long lazy strides; drop Swarm's separation radius and the flock becomes a mob; in Timescale, make the three scales 0.1, 1 and 4 and notice the frame counters still tick at the same rate — slow motion is a smaller dt, not more frames; in Substep, replace 1 − exp(−k·dt) with a bare 0.1 and watch the 10 fps curve fall behind. The universal anatomy: decide what the thing wants (a target, a height, a heading), measure the gap between wanting and having, and close a fraction of that gap every frame. That one sentence is most of procedural animation.In Godot: all 208 (+208 rhymes) are ported — seventeen family files in scenes/motion/, paged by family in locomotion.gd (grab the Godot project and press its menu's F; right-click any card for its rhyme — there it is literally a dictionary merge over the card's dials — double-click to enlarge, 1/2/4 for tempo). The same maths runs unchanged — GDScript spells Math.atan2 as atan2, gives you lerp_angle for free, and Vector2 makes the vector code shorter than the JS. In Unity and Unreal the concepts land one-to-one on Vector3.SmoothDamp, Quaternion.Slerp, Physics.Raycast, NavMeshAgent / FMath::VInterpTo, FQuat::Slerp, LineTraceSingleByChannel, AIController::MoveTo — chapter 14 is the full encyclopaedia entry: the maths in plain words, the vocabulary decoded, the eight laps mapped, and every engine's spelling — with chapter 17 (input & intent) and chapter 18 (collision & contact) as the two families that earned chapters of their own.