A player good enough to clear all 100 levels may never get to. Before they do, the
playfield can freeze, or the ball can fall into a loop it cannot leave on its own.
| Defect | What breaks | Cost | Needs |
|---|---|---|---|
| Wedge | Ball pinned against a golden brick's face; the level cannot clear and the score climbs | Unwinnable | A ball that meets a golden brick's face almost along it |
| Shuttle | Ball alternates between two golden bricks | Unwinnable | A diagonal ball that reflects at an inside corner of solid cells at each end |
| Orbit | Ball circulates among golden bricks along a path of more than two legs | Unwinnable | Faces and corners of golden bricks and borders that return the ball to its first state |
| Skim | Ball skims under the top border and never returns | Unwinnable | Any level |
| Scramble | Playfield freezes while the game plays on underneath | Unplayable | Bat on the right, bottom-left corner clear |
| Missed clear | No destructible bricks are left, but the level does not end | Level held open | A ball that hits golden bricks after the last destructible brick breaks |
| Dud | A bomb in another bomb's blast shatters and never detonates | Lost prize | Two bombs next to each other |
| Orb drift | Orb wears other inhabitants' sprites while it returns the ball | Cosmetic | An orb that catches the ball |
| Speck | A stray speck sits inside the visor's sprite | Cosmetic | Any key the ROM accepts during the front end |
| Fire gate | The missile launch ignores the fire key while the bat is frozen or stung, or moves under inertia | Missile ignored or misfired | A missile bat armed while the bat is frozen or stung, or moves under inertia |
How the ball gets stuck
Wedge, shuttle, orbit and skim trap the ball in a path it cannot leave. The ball
moves in sub-pixel steps. Each axis moves one pixel only when its own count
fills up. Every bounce empties both counts and leaves the
ball where it is. A ball that bounces before its slow axis moves a pixel
therefore travels on one axis only.
A bounce depends only on the ball's heading and on what it hits. A ball that comes
back to a place at a heading it had there before repeats its path for good. The
anti-stuck nudge turns ball A around after 30 frames within 16 pixels of where it was on both axes.
The next bounce undoes the turn, because a heading and its opposite
leave a surface at the same heading.
A trapped ball never returns to the bat. Destructible bricks off its path stay out
of reach. The level cannot clear while any remain. With none left, the level
ends late.
Wedge
The ball sticks to a golden brick.
The ball meets the face of a golden brick almost along the face. It bounces off
the face each time it probes ahead, and never moves away from it.
Each bounce scores. Only a bat bounce resets the combo. The
score climbs without end.
Shuttle
The ball runs back and forth between two golden bricks.
A diagonal ball meets an inside corner of golden bricks, where the cell beside it
and the cell ahead of it both block. A corner sends a diagonal ball
straight back along its line. With such a corner at each end, the ball runs between
them for good.
Orbit
The ball circles among golden bricks.
The ball bounces among golden bricks and borders along a path of three or more
legs. It comes back to where it started at the heading it started with. It then
repeats the path for good. Nothing on the path ever changes.
Skim
The ball never leaves the top border.
The ball runs along just under the top border at a heading close to the
horizontal. Each time it probes ahead, it also tests the border cell above it,
finds it solid and bounces. The bounce is silent and scores nothing.
Scramble
The playfield freezes.
Play with the bat on the right, so the wall runs down the left edge. Clear the
bricks from the bottom-left corner and let the ball reach the corner cell.
The game redraws only the cells whose dirty counter is set. A
terminator ends the scan. The terminator sits in the bottom-left corner cell. That
cell never changes in normal play. A ball drawn there overwrites the
terminator.
Without the terminator, the redraw runs past the end of the dirty counters. It sprays
graphics over memory. Bands of the screen change color. The redraw never draws
parts of the playfield again. Play and the score go on underneath. The damage lasts
until the next level starts.
Missed clear
Every destructible brick is gone, but the level plays on.
A level ends when every brick slot is empty or holds a golden brick at rest. The check for this
skips a golden brick only when it shows its plain face. A golden brick flashes when the ball
hits it. It also twinkles at random. In either case the check takes it for
a brick still to break.
The level ends at the first check that finds every golden brick at rest. A ball
that bounces among golden bricks therefore pushes the end back, for as long as it
stays there.
Dud
A bomb in the blast never goes off.

Orb drift
The orb wears the wrong sprites.
An orb that catches the ball chews it, then spits it out, and the ball
slides back toward the bat. On the way its animation runs past its last frame and never stops. The orb
then wears frames of the comet and then of the hive.
The drift ends when the ball reaches the bat's losing edge. There the player
loses the ball.
Speck
A stray speck sits in the visor's sprite.
A key pressed while the front end is on screen leaves a speck in the visor's
first frame. It stays until the player resets the machine.
The ROM stores the last key it accepts in LAST-K. The game keeps a byte of the
visor's sprite at the same address. It never copies the sprite in
again.
Fire gate
The fire test reads the wrong byte.
The missile launch tests fire in a value it does not choose itself.
Under direct control, and under the inertia option while the bat stands still,
that value is the controls.
While the bat moves under the inertia option, it is a step from the
inertia speed ramp. During the bat freeze, it is the
freeze timer. Neither ever holds the fire bit, so the missile does not
launch.
During the bee's sting, it is whatever the
object manager used last. The launch then follows that value, not the fire
key.
Fork me on GitHub
