BrickRain pixel-art wordmark over falling tetrominoes

BRICKRAIN

A falling-blocks game for Roku TV — pixel art, chiptune sound, zero network.

CI status Latest release Logic coverage at least 80 percent MIT license

View on GitHub

Gameplay

Gameplay video on a real Roku TV — coming soon

How to play

Steer the falling tetrominoes into the well, complete horizontal lines to clear them, and survive as the speed climbs every 10 lines.

Controls (Roku remote)

ButtonAction
Left / RightMove piece
DownSoft drop (hold to repeat)
OKRotate clockwise
UpHard drop
Rewind (◀◀)Rotate counter-clockwise
Fast-forward (▶▶)Hold piece
Play / PausePause / resume
BackPause menu; from the menu, exit

Rules

How to run it

On a real Roku (developer mode)

git clone https://github.com/HectorIFC/BrickRain.git
cd BrickRain
npm install
cp .env.example .env          # set ROKU_DEV_TARGET (device IP) and ROKU_DEV_PASSWORD
npm run deploy                # builds and sideloads out/brickrain.zip

Enable developer mode first: on the remote press Home ×3, Up, Up, Right, Left, Right, Left, Right.

Without a Roku (in the browser via brs-engine)

npm install
npm run build                 # produces out/brickrain.zip
npm run test:logic            # run the full logic suite headless (no device)

Drop out/brickrain.zip into the brs-engine web app to play the channel in a browser.

Architecture & credits

BrickRain is split into a pure functional core (source/logic/ — plain data in, plain data out, no SceneGraph dependencies) and a thin imperative shell (components/ — SceneGraph nodes that render state and forward input). That separation is what makes the whole game testable without a device: the core is covered by Rooibos and a headless brs-node suite. See the README for the deep dive.

All artwork and audio are original, generated from scratch by the scripts in tools/ (generate_artwork.py, generate_sounds.py) — no third-party assets, no copyright concerns.