🎮 A tiny tribute to the classic NES Arkanoid, built in Godot with a twist: procedurally generated graphics and music.
▶ Play TINYNOID in your browser
| Platform | Download |
|---|---|
| Web | tinynoid-web.zip |
| Windows x86_64 | tinynoid-windows-x86_64.zip |
| Linux x86_64 | tinynoid-linux-x86_64.tar.gz |
| macOS universal | tinynoid-macos-universal.zip |
| Checksums | SHA256SUMS |
| Main menu | Stage 1 — Rainbow Gate | Stage 17 — Waveform II |
|---|---|---|
![]() |
![]() |
![]() |
Open godot/project.godot in Godot 4.7.2 and run the
main scene.
- Move: Arrow keys, A/D, mouse, touch drag, or controller stick
- Launch / Select: Spacebar, Enter, click, tap, or controller face button
- Menus / High Scores: Arrow keys, click, tap, or controller
- Restart stage: R
- Return to menu: Escape
- Window size (desktop): F2 for 2×, F3 for 3×
- Fullscreen: F11 or Alt+Enter
- 33 original stages
- Eight capsules: Expand, Slow, Disruption, Catch, Laser, Break, Player, and Thru
- Compatible capsule effects stack together until life loss or stage clear
- Protected random drops reward the opening and prevent long dry streaks
- Global Top 100 scores with offline local history
- UTC Daily Cartridge with one shared community level and daily world ranking
- Post-game X/Twitter handles and deterministic pixel avatars
- Unranked Community Lab levels with creator attribution and moderation status
- Mobile-friendly fixed-grid community level editor
- Personalized share links with level-specific pixel-art previews
- Shareable Game Over and Campaign Clear score cards
- Standard, multi-hit Silver, and indestructible Gold bricks
- Pixel-perfect 256×240 rendering with integer scaling
- Distinct procedurally generated music for the menu and every stage
- Generated sound effects, visuals, animations, and level layouts
Run the headless test suite:
godot --headless --path godot res://tests/test_runner.tscn
node --test web/tests/*.test.mjs
deno test supabase/functions/_shared/*_test.ts
npm run build --prefix tinynoid-shareServe the static level editor locally:
python3 -m http.server 4173 --directory webThen open http://127.0.0.1:4173/editor/. Community levels and their secure
Supabase deployment contract are documented in
docs/community-levels.md.
Vercel hosts the complete production app at
tinynoid.vercel.app. The connected Vercel
project uses tinynoid-share/ as its root and deploys main automatically.
Its build exports Godot Web and places the editor, schema, social cards, and
friendly community-level pages under the same domain.
The Vercel project setting Include files outside the Root Directory in the
Build Step must remain enabled because the build reads godot/, web/,
schema/, and .github/scripts/.
Supabase remains the leaderboard, community catalog, moderation, and dynamic level-preview backend. Friendly level slugs are resolved by a database RPC so published links remain stable as the catalog grows.
The same Godot Web export can be published on Wavedash.
godot/web_shell.html reports load progress and calls Wavedash.init() only
when Wavedash injects its SDK, so other hosts are unaffected. Keep
wavedash.toml engine-less: a [godot] section makes Wavedash boot its
default loader instead of this shell. On Wavedash, Stage 1 campaign scores are
also posted to the portal leaderboard keyed leaderboard (higher is better);
the in-game Top 100 still comes from Supabase.
-
wavedash.tomltargets theadrianmg/tinynoidgame in the Developer Portal. Don't runwavedash initat the repository root, because it detects the legacy Unity project. -
Export only the game to
godot/build/wavedash/:GODOT_BIN=/path/to/godot .github/scripts/build-wavedash.sh
-
Test it in the sandbox, upload it, then publish the printed build ID:
wavedash dev wavedash build push -m "TINYNOID $(git rev-parse --short HEAD)" wavedash publish <BUILD_ID>
Wavedash runs every player and build on its own *.builds.wavedashcdn.com
origin. The Supabase game functions accept those origins once deployed; see
supabase/README.md. Browser storage is
scoped to that origin, so the saved X handle and local score history start
fresh with each new Wavedash build; global scores are unaffected.
Store cover art, a 16:9 thumbnail video, and gameplay screenshots live in
docs/wavedash/. The title-only covers are drawn by
web/social/cover.html: serve web/social/ and open
cover.html?format=wide (1920×1080) or ?format=square (1080×1080). The
canvas is the final image. The thumbnail video is real gameplay rendered by
godot/tools/wavedash_thumbnail.tscn
with an automatic paddle; its script header has the Movie Maker and ffmpeg
commands.
The legacy Unity project remains in the repository as migration history. The Godot game uses original layouts and generated presentation assets.


