doc 5 of 5

Part 04 — Taste and measure

You will build: nothing — this part is the process. The tuning loop, the A/B, the feel checklist as a deliverable, the wallpaper rule, and the stop. The effects parts 01–03 installed are now yours to tune, and this part is how you tune them without lying to yourself.

Why this exists#

Parts 01–03 gave you the machinery — the flash, the stop, the shove, the shake, the thock, the float text. The machinery is correct and un-tuned: the flash is six frames, the stop is two, the shake is a 4.0 and an 8.0, the thock is −6 dB — and every one of those numbers is a placeholder wearing a design's clothes. The difference between "the effects are in" and "the game feels good" is the tuning, and the tuning is where the feel shelf meets the performance shelf's identity: measure it, then state the number. A feel you can't measure is a feel you can't stop adding to, and the stop is the part that keeps the juice from becoming the tax.

The process#

A — The tuning loop: one number, thirty seconds, a commit#

The loop is the unit of the tuning, and it's small on purpose:

  1. Pick one number. The flash's duration. The shake's magnitude. The thock's volume. One — the loop that tunes three numbers at once is three loops you can't attribute, and the attribution is the point.
  2. Change it. Six frames to eight. The 4.0 to a 5.0. The −6 to a −8.
  3. Play for thirty seconds. Not "run the scene and glance" — play, the way the player plays, the hit repeated enough times that the number is either right or annoying. Thirty seconds is the length where a wrong number becomes visible and a right one becomes invisible (the effect stops being an effect and starts being the game).
  4. Keep or revert. The git commit is the keep; the git revert (or the undo) is the revert. The commit message is the number and the reason — "flash 6→8 frames: the decay reads as a blink at 6, a pop at 8" — the record the next tuning builds on.
  5. The next number. Loop.

The loop's discipline is the one number and the commit as the measurement. A tuning session that changes five numbers and commits once is five tunings with no attribution — the "it feels better now" with no "better because of which." The commit-per-number is the feel's version of part 01's (the performance shelf's) guard: the number is the finding, and the finding is named in the record.

B — The A/B: the branch is the measurement#

When the loop's thirty seconds can't decide (the flash at six and eight both "feel fine"), the A/B is the measurement the loop can't give:

  • Two branches, two numbers. feel/flash-6 and feel/flash-8, each a commit, each playable.
  • Ten minutes each, back to back. Play the six for ten, stop, play the eight for ten. The stop is the control — the ten-minute memory of the six is what the eight is measured against, and a back-to-back with no stop is the eight measured against the eight (the adaptation, the number becoming the baseline).
  • Write the note before you merge. The note is the spec the merge implements — "the eight's decay is the pop; the six's is the blink; merge the eight" — written while the difference is still vivid, not reconstructed at the merge. The note is the measurement; the merge is the act.

The A/B is the loop's dispute resolution — the two numbers that both pass the thirty seconds but don't both pass the ten minutes. It's slower (two branches, twenty minutes, a note) and it's for the calls that are slow anyway (the flash's duration is the feel's central number; the shake's magnitude is the one the player feels in their stomach). Not every number earns an A/B — the thock's volume is a loop (the −6 vs −8 is a thirty-second call); the flash's duration is an A/B (the six vs eight is a ten-minute call). The test is the dispute: a number the loop decides is a loop; a number the loop can't is an A/B.

C — The feel checklist: the deliverable#

The part's deliverable is the table — your game's central moments, one row each, the columns the witnesses. The survivor's game, worked:

MomentThe frame (the fact)The flashThe shoveThe shakeThe soundThe text
The sword's hitthe hitbox's active tickthe golem's pop (6f)the impulse (part 02)— (the player's hit, no shake)the thock (the fact)the damage number (the BACK pop)
The golem's touchthe contact signalthe player's pop— (the player doesn't shove)the camera's 4.0 (part 03)the hurt sting (the fact)the damage number, red
The clump-deaththe last golem's health_depletedthe stack (part 02's stretch)the 6.0 (the big hit)the pool's burst (the audio part 03)the numbers, pooled (the perf part 03)
The level-upthe level_up signalthe sting + the duck (the audio part 02)the "Level Up!" (the CUBIC commit)
The pickupthe magnet's credit (the survivor's stage 06)the chime (the fact, the credit)

The table is the feel's spec — the moments, the frames, the witnesses, and the absences (the dash is a decision: the sword's hit doesn't shake the camera because the player's hit isn't the player's screen-event, part 03's A; the level-up doesn't flash because the level-up is the world's event, not a target's). A feel without the table is a feel you can't audit — the next effect you add has no row to be in, and the absence you meant (the dash) is indistinguishable from the absence you forgot. The table is the 3D farm's stage 07 "requirements, no code" shape, applied to the feel: the deliverable is the spec of the moments, and the code is the implementation of a spec you can read.

D — The wallpaper rule: the effect that stops being information#

The rule is the audio shelf's part 03 finding, made general: an effect that plays N times a minute stops being information after the N/3. The thock that plays thirty times a minute is the thock you hear for the first ten and stop hearing for the next twenty — the adaptation, the effect becoming the baseline. The wallpaper is the feel's failure mode: the juice that's so constant it's the room tone, and the room tone is the feel's absence (the player can't confirm the hit by the thock, because the thock is always there).

The cures are the design's, not the code's:

  • The variation — the thock's pitch randomized ±3% (the audio shelf's part 03, the pool's voice carrying a slightly different pitch per hit). The variation breaks the adaptation — the thock that's never quite the same is the thock the ear keeps tracking. A constant effect is wallpaper; a varying one is information.
  • The reservation — the big effects (the clump's 6.0 shake, the level-up's sting) are reserved for the big events, and the small events (the chip damage, the single golem) get the small witnesses (the 1.0 shake, the thock). The reservation is the boss fights shelf's tell/active on the feel: the big moment earns the big witness, and the big witness spent on the small moment is the wallpaper made official. Part 01's D (the stop on the player's hits, not the contact) is the reservation's first application.
  • The removal — the effect that's wallpaper and varying and reserved, and still wallpaper, is removed. The flash on the golem's hit (the target's pop) is information (the hit confirmed); the flash on the player's hurt (the same pop, the same frame) is the wallpaper — the player sees the red damage number, the shake, the sting; the flash is the fourth witness doing the first three's job. Remove it; the three are enough.

The wallpaper test is the loop's thirty seconds, run on the effect's rate: play the game for three minutes and name the effect you stopped noticing. The one you named is the wallpaper; the cures (variation, reservation, removal) are in that order, and the removal is the one the others are trying to avoid.

E — The juice tax: the feel's budget#

The overview named it: every effect is a frame of work, a listener, and a bus. The tax is the performance shelf's row, applied to the feel — the flash's tween (a per-frame property), the shake's exp (a per-frame math), the thock's pool voice (a mix source), the float text's pooled node (a render object). At one hit a second, the tax is the row's "cheaply, linearly" (the performance part 02's float-ops row). At thirty hits a second (the survivor's clump, the audio part 03's rate), the tax is the spike (the performance part 01's shape) — the thirty flashes, the thirty thocks, the thirty texts in one frame, and the frame is the dip.

The budget is the measurement, not the feeling: the performance part 01's Monitor, on the clump, with the feel on and off. The delta is the tax — the frames the juice costs, and the frames are the number the stop (part F) is made of. A feel that costs 4 ms of the 16.6 on the clump is a feel that's buying the confirmation with a quarter of the frame — the purchase, measured. A feel that costs 8 ms is a feel that's taking the frame the physics needs — the tax, and the tax is the removal's (part D) or the frame-skip's (the performance part 02's B, the flash on every third golem in the clump, the wallpaper rule and the performance rule meeting) argument.

F — The stop: when the juice is enough#

The stop is the part the shelf needs, because the juice is the one system you can always add more of — another flash, another shake, another sound, another text — and the "one more" is the feel's version of the performance shelf's refused claim (the optimization that's not measured, the effect that's not earned). The stop is three tests, in order:

  1. The silence test. Play the game with all the feel removed (the flash off, the shake off, the thock off, the text off) — the bare event, the number and the shove. Does the game still play? If the bare game is unplayable (the hits don't confirm, the damage is invisible), the feel is load-bearing and the stop is "keep what's load-bearing, remove what's not." If the bare game plays fine (the shove and the number are enough), the feel is ornament, and the ornament's budget is the tax (part E) — the ornament earns its frames or it's the wallpaper.
  2. The last-effect test. The last effect you added is the one you'd cut. If you can name the last effect and not want to cut it, the feel is earned; if the last effect is the one you'd cut (the "it's nice but I'd remove it"), the feel is past the stop — the last effect is the wallpaper made recent, and the removal is part D's.
  3. The player-test. A person who hasn't seen the game plays for five minutes and says "that hit landed" (the feel is working) or "there's a lot going on" (the feel is the wallpaper, the tax is visible, the stop is now). The player's words are the measurement the Monitor can't give — the Monitor says the frames; the player says the feel.

The stop is the three tests' and: the feel that's load-bearing (test 1), whose last effect you'd keep (test 2), and whose player-test says "landed" (test 3) is the feel that's enough. The feel that fails any of the three is the feel that's past — and the past is the removal, the reservation, the frame-skip, in part D's and E's order.

G — The self-review, the feel's four questions#

The survivor's stage 09 four questions, on the feel's files: for the shake, the flash, the pool of thocks, the float text — (1) the one job, (2) the doors it knows (the event's signal, the camera, the bus), (3) what breaks if deleted (the witness lost, the moment's row in the table, part C, with a dash), (4) what breaks if duplicated (the double-shake, the two thocks, the wallpaper made worse). Question 3 is the feel's audit — the deletion is the silence test (part F's 1) run per-file, and the file whose deletion breaks nothing is the file that's the wallpaper. The four questions, on the feel, are the stop made mechanical.

Checkpoint — definition of done#

  • The tuning loop ran: at least three numbers tuned, one commit each, the commit message the number and the reason — the record the next tuning builds on
  • An A/B resolved a dispute the loop couldn't — two branches, ten minutes each, the note written before the merge, the merge the note's implementation
  • The feel checklist (part C) is filled for your game's central moments — the rows, the witnesses, and the dashes (the absences that are decisions, not omissions)
  • The wallpaper test ran: three minutes, the effect you stopped noticing named, and the cure (variation, reservation, removal) applied or the removal committed
  • The juice tax is measured: the Monitor on the clump, feel on and off, the delta stated in ms — the purchase or the tax, named
  • The stop's three tests ran, and the feel is at the stop (the last effect you'd keep, the player-test's "landed") — or past it, and the removal is the next commit
  • The four questions (part G) answered for the feel's files — the deletion audit, the wallpaper found per-file
  • Committed — the feel is a record, and the record is the commits

If you get stuck#

  • The tuning is "it feels better" with no number → the loop's one-number discipline, part A — the "better" is the three numbers you changed, and the attribution is the commit-per-number you skipped. Re-run the loop on one number; the "better" resolves into the number that's the cause, and the other two revert.
  • The A/B is a wash (both feel fine, the note is "no difference") → the difference is below the ten-minute threshold — the numbers are both right, and the loop's thirty seconds was the correct instrument all along. Pick either (the earlier, the simpler) and move on; the A/B that can't decide is the A/B the loop already decided.
  • The feel checklist has no dashes (every moment, every witness) → the reservation (part D) is missing — the big witness on the small moment, the wallpaper made systematic. The dash is the decision; a table with no dashes is a table where every effect is load-bearing, and the load-bearing-all is the tax (part E) with no stop.
  • The juice tax is the whole frame (the clump's feel costs 16 ms of the 16.6) → the feel is past the stop (part F), and the frame-skip (the performance part 02's B) is the fix — the flash on every third golem, the thock on the first two, the text pooled (the performance part 03). The wallpaper rule and the performance rule meet at the tax, and the meeting is the stop.
  • The player-test says "there's a lot going on" and the Monitor says the frame is fine → the tax is the attention, not the frame — the feel is the wallpaper (part D), the effects are competing for the eye, and the cure is the removal (the last effect, part F's 2), not the optimization. The frame is fast; the feel is loud. The loud is the removal's argument.