Current section
Files
Jump to
Current section
Files
README.md
# Carom
An Arkanoid, in a terminal, on [Cauldron](https://github.com/jaman/cauldron).
[](https://www.youtube.com/watch?v=6l3q_5xSbLI)
A game of it, with the music, is [on YouTube](https://www.youtube.com/watch?v=6l3q_5xSbLI).

```bash
mix carom
mix carom --mode text # glyphs, even where the terminal has pixels
mix carom --fps 120 --seed 7 --name alice
```
## Playing
**Move the paddle with the mouse** — it follows the pointer exactly. `space` or a click
serves; `p` pauses; `r` restarts; `Esc` or `q` goes back to the title. `←/→` work too, and
hold as long as the key is down on a terminal that reports key releases (kitty, Ghostty,
WezTerm); elsewhere a press glides the paddle a set distance, which `,` and `.` adjust.
`?` shows the keys in play. `s` opens the settings — key bindings, pointer steering, effects
and music levels, display, frame rate. Three lives; lose the ball below the paddle and one is
gone.
## The field
Twenty bricks across, six rows deep, walls on three sides and nothing below. Soft bricks are
10 points, firm 30, hard 50; solid blocks bounce and never break, and a level is cleared
when everything else is gone. Five layouts cycle — a plain wall; gaps to fall through with
two pillars that never go away; a pyramid, worth most at the top; a roof with a way in at
each end; a diamond with solid corners — and the ball is a little faster each time round.
The paddle sends the ball off at an angle that depends on where it lands: the middle
returns it straight, the ends send it wide.
## Capsules
Breaking a brick has a one-in-seven chance of dropping a capsule. Catch it on the paddle:
| | |
|---|---|
| **wide** | a paddle half again as long, for 18 seconds |
| **slow** | the ball drops to 65% speed, for 14 seconds |
| **multi** | every ball in play splits into three |
| **life** | an extra one |
| **narrow** | *bad*: a stubby paddle for 10 seconds — same pill, different colour, so it can be dodged |
Wide and narrow replace each other rather than stacking.
## Tuning
The column beside the field is live: `[` `]` paddle speed, `,` `.` glide, `-` `=` ball speed,
`;` `'` pointer ease. What you set stays for the game.
## Sound
A voice for every event — the paddle, each kind of brick, the walls, a capsule caught, a
ball lost — and a piece of music a level.
## Under the hood
[TECHNICAL.md](TECHNICAL.md): the world and the client, steering, levels as pictures,
what the engine does for a real-time game, the layout of the code, tracing.
## License
MIT