https://github.com/cyd0n1a/voidstrider64
A groovy procedurally-generated twin-stick arena dreamcore shmup/shooter for the Nintendo 64.
https://github.com/cyd0n1a/voidstrider64
analogue3d expansion-pak homebrew libdragon n64 n64-development nintendo nintendo64 tiny3d
Last synced: 22 days ago
JSON representation
A groovy procedurally-generated twin-stick arena dreamcore shmup/shooter for the Nintendo 64.
- Host: GitHub
- URL: https://github.com/cyd0n1a/voidstrider64
- Owner: Cyd0n1a
- License: gpl-2.0
- Created: 2026-07-03T08:35:22.000Z (23 days ago)
- Default Branch: master
- Last Pushed: 2026-07-03T09:24:15.000Z (23 days ago)
- Last Synced: 2026-07-03T11:06:10.218Z (23 days ago)
- Topics: analogue3d, expansion-pak, homebrew, libdragon, n64, n64-development, nintendo, nintendo64, tiny3d
- Language: C
- Homepage: https://www.cydonis.co.uk/about
- Size: 8.85 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# VoidStrider64


**A procedurally-generated twin-stick arena shooter for the Nintendo 64.**

Geometry Wars' arena combat, staged inside a Space Giraffe wormhole: a
semi-transparent, deformable neon grid floats over an infinite, undulating
tunnel that the whole scene appears to fly through. Every mesh, texture,
palette and sound effect is generated procedurally at runtime — the ROM ships
as code, math, and (eventually) a handful of hand-composed tracker modules.
Built with [libdragon](https://github.com/DragonMinded/libdragon) (preview
branch) and [tiny3d](https://github.com/HailToDodongo/tiny3d), in C.
> **Requires the Expansion Pak (8MB).** This is a hard requirement — the game
> checks at boot and halts with an error screen without it.

## Controls
| Input | Action |
|---|---|
| Analog Stick | Move (full analog, 360°) |
| C-Buttons | Fire in 8 directions (combos give diagonals; hold to stream) |
| Z | Smart bomb (when the meter is full — bottom-left, pulses cyan) |
| Start | Restart after game over |
Kill Wanderers, collect the shards they drop to build your multiplier
(1×–10×), and don't let the multiplier decay. Full-size Wanderers split in
two when destroyed. Shard pickups also speed up your bomb recharge.
## Building
Requires Python3+ & Docker (the toolchain runs in the official libdragon image — no host
toolchain needed):
```bash
git clone --recurse-submodules https://github.com/Cyd0n1a/VoidStrider64.git
cd VoidStrider64
bash build.sh # -> voidstrider64.z64
```
`build.sh` copies the vendored libdragon patches from `patches/libdragon/`
into the submodule (fgeom/rspq_profile backports that tiny3d needs at the
pinned SHA), installs libdragon in the container, builds tiny3d, then builds
the ROM. Output is logged to `build.log`.
Tested in [Ares](https://ares-emu.net/) (Homebrew Mode), Gopher64, and on real hardware
via flashcart. PAL and NTSC both target 320×240 @ 60fps.
## Design
The full game design document lives in
[VOIDSTRIDER64_GDD.md](VOIDSTRIDER64_GDD.md). Current state tracks roughly
milestone M5 (combat core+) of the plan described there:
- ✅ M0 — procedural wormhole tunnel (ring conveyor, seeded LFO shapes, HSV palette drift)
- ✅ M1 — transparent spring-deformable grid + procedural player ship
- ✅ M2 — C-button combat, Wanderer enemies, shards/multiplier, smart bomb, procedural SFX synth
- ✅ M3 — full bestiary (Seeker, Swarmer, Turret, Pulsar, Snake) + spawn director
- ✅ M4 — .xm tracker soundtrack via xm64, beat-synced visuals. Wavetable music in core gameplay loop.
- ✅ M5 — seeds UI, accessibility options, EEPROM high scores.
- ⚪ M6+ — Polishing, various improvements, and REDACTED further (secret! 🤔) features! 😜
- ⚪ M7+ — Was eaten by a small wiggly grue... 😉
## License
© 2026 [Amanda Hariette-Scott](https://bsky.app/profile/cydonis.co.uk) & [Cydonis Heavy Industries](https://cydonis.co.uk). All Rights Reserved.
libdragon and tiny3d are the work of their respective authors under their
respective licenses (see submodules).