100% Procedural Travel Simulator — inspired by Oregon Trail, FTL, and Organ Trail
Voyage is a rogue-like travel simulator where every map, event, crew, vessel, audio, and narrative is procedurally generated from a single seed. The game supports five genre themes:
- Fantasy — Enchanted realm / Silk Road setting
- Sci-fi — Deep space / star lanes setting
- Horror — Zombie apocalypse wasteland
- Cyberpunk — Megacity sprawl
- Post-apocalyptic — Irradiated dust-bowl wastes
All gameplay assets are generated at runtime — no bundled images, audio, or pre-written content.
✅ Feature Complete (v5.0) — All five versions implemented with full gameplay loop.
- ✅ Go module and project structure
- ✅ ECS framework with GenreSwitcher interface
- ✅ Seed-based deterministic RNG
- ✅ Ebitengine rendering foundation
- ✅ Procedural world map generation
- ✅ Resource management system (six-axis model)
- ✅ Crew/party system with procedural generation
- ✅ Vessel/transport system with upgrades
- ✅ Procedural event system with grammar templates
- ✅ Audio synthesis (waveforms, ADSR, SFX, adaptive music)
- ✅ UI/HUD/Menus with genre theming
- ✅ Win/lose conditions
- ✅ Save/load system with multiple slots
- ✅ Configuration and input rebinding
- ✅ CI/CD pipeline
- ✅ Validation scripts
- ✅ All 5 genres fully integrated
- ✅ Faction system with reputation
- ✅ Quest/objective system
- ✅ Meta-progression between runs
- ✅ Leaderboards and async convoy mode
- ✅ WebAssembly and mobile builds
- ✅ Modding system
- Go 1.22 or later
- OpenGL support (for Ebitengine rendering)
On Linux, you may need:
sudo apt-get install libgl1-mesa-dev xorg-devgo install github.com/opd-ai/voyage/cmd/voyage@latestOr build from source:
git clone https://github.com/opd-ai/voyage.git
cd voyage
go build ./cmd/voyage# Start with random seed
./voyage
# Start with specific seed (for reproducible runs)
./voyage --seed 12345
# Start with specific genre
./voyage --genre scifi
# Start with specific difficulty
./voyage --difficulty hard
# Combine options
./voyage --seed 42 --genre cyberpunk --difficulty nightmare
# Show version
./voyage --version
# Show help
./voyage --help| Flag | Values | Default | Description |
|---|---|---|---|
--seed |
integer | random | Master seed for procedural generation |
--genre |
fantasy, scifi, horror, cyberpunk, postapoc | fantasy | Genre theme |
--difficulty |
easy, normal, hard, nightmare | normal | Difficulty level |
--version |
- | - | Show version information |
| Key | Action |
|---|---|
| Arrow keys | Move vessel |
| Enter/Space | Select/Confirm |
| Escape | Pause/Menu |
| 1-4 | Select event choices |
| F3 | Toggle debug info |
# Run tests (headless mode for CI/servers without display)
go test -tags headless -race ./...
# Run tests with display (requires X11/Wayland)
go test -race ./...
# Run benchmarks
go test -tags headless -bench=. ./pkg/benchmark/...
# Check for issues
go vet -tags headless ./...
# Validate no bundled assets
./scripts/validate-no-assets.shcmd/voyage/ # Main entry point
pkg/
engine/ # ECS framework with GenreSwitcher
procgen/seed/ # Deterministic RNG
procgen/world/ # World map generation
rendering/ # Ebitengine rendering
resources/ # Resource management
crew/ # Party/crew system
vessel/ # Transport system
events/ # Event system
audio/ # Audio synthesis
ux/ # UI/HUD/Menus
game/ # Game loop and state
config/ # Configuration
saveload/ # Save/load system
scripts/ # Validation and utility scripts
- Resource Attrition — Food, water, fuel, medicine, morale, and currency deplete over time
- Party/Crew Mortality — Procedurally generated crew members who can sicken, die, or desert
- Vessel Integrity — Transport accumulates damage and requires repair
- Procedural Event Stream — Grammar-based text generation with branching choices
- Route Choice with Consequence — Multiple paths with varying risk/reward
- Fully Procedural World — Every element generated from the master seed
Voyage supports both offline and online leaderboards:
- Offline mode (default): Scores are stored locally and persist between sessions. No internet connection required.
- Online mode: Requires a self-hosted leaderboard server. The default server URL is a placeholder; online features will not work without configuration.
To use online leaderboards, you would need to:
- Deploy a compatible leaderboard server (reference implementation not yet available)
- Configure the server URL via environment variable or config file
Async convoy mode allows players to share seeds and compare runs. This feature works entirely offline using seed-based determinism.
MIT License — see LICENSE for details.
- ROADMAP.md — Detailed feature planning and milestones
- CONTRIBUTING.md — Development guidelines
monero:43H3Uqnc9rfEsJjUXZYmam45MbtWmREFSANAWY5hijY4aht8cqYaT2BCNhfBhua5XwNdx9Tb6BEdt4tjUHJDwNW5H7mTiwe