#TerminallyRogue
A CLI sci-fi dungeon crawler set on Europa, Jupiter's moon. Every playthrough features unique narration powered by a local LLM (Qwen3-0.6B), while the game engine maintains full control of state, combat, and progression. The AI model auto-downloads on first launch — no manual setup required.
# Clone and enter the project
cd TerminallyRogue
# Option A: One-command launcher (recommended)
./play.sh
# Option B: Manual setup
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
python -m terminally_rogueThe AI narration model (~400MB) downloads automatically on first run. No separate setup step needed.
- Python 3.9+
- A terminal that supports Unicode and ANSI colors
- ~400MB disk space for the Qwen3-0.6B model (downloaded once)
Dependencies are installed automatically: rich, llama-cpp-python, huggingface-hub.
| Character | HP | ATK | DEF | Special | Playstyle |
|---|---|---|---|---|---|
| Kael - The Sentinel | 120 | 12 | 10 | Void Barrier (absorb hit) | Tank, wins by attrition |
| Nyx - The Wraith | 80 | 18 | 5 | Phase Strike (2x dmg, ignore armor) | Glass cannon |
| Sable - The Engineer | 100 | 10 | 8 | Repair Drone (heal 30 HP) | Balanced, most forgiving |
- Act I: The Descent - Ice Caves of Tara Regio
- Act II: The Deep - Subglacial Ocean & Ancient Ruins
- Act III: The Nexus - Alien Command Center
Each act features combat encounters, boss fights, weapon discoveries, and story choices that shape your ending.
Every step in the game presents you with choices:
- Exploration - Choose how to approach each area (scout, investigate, proceed cautiously). Your choices nudge mercy, knowledge, and corruption scores.
- Weapon Finds - Examine closely, equip immediately, or salvage for parts.
- Pre-Combat - Charge in aggressively, prepare defenses, or analyze the enemy.
- Story Moments - 4 critical story choices with major score impact that determine your ending.
The LLM narrates each scene in response to your pick, so every playthrough feels different.
Your choices throughout the game accumulate mercy, knowledge, and corruption scores. The highest score determines your ending:
- The Peacekeeper - Broker peace with the alien intelligence
- The Scholar - Merge with the data archive, bridge two species
- The Consumed - Become part of the alien network
Turn-based combat with attack, special ability, and item options. Each character plays differently - Kael absorbs hits, Nyx deals devastating damage, and Sable heals through fights.
Every attack, special, and enemy action is narrated by the LLM with unique flavor text, alongside the mechanical damage numbers so you always know what happened.
The game renders as a single-screen layout that fits your terminal without scrolling. The display dynamically sizes itself: location bar, narration panel, stats + inventory, and choice/action panels all compose into one view.
The Qwen3-0.6B model runs locally on CPU (1-3 second generation time) and powers all narration: exploration, combat actions, special abilities, enemy deaths, story moments, and endings. The model auto-downloads on first launch. Pre-written fallback text exists as a safety net but should rarely trigger.
TerminallyRogue/
├── play.sh # One-command launcher
├── setup_model.py # Standalone model downloader
├── models/ # GGUF model files (gitignored)
├── assets/
│ ├── ascii_art.py # Title screen, boss art
│ └── fallback_text.py # Emergency fallback narration
├── src/terminally_rogue/
│ ├── __main__.py # Entry: python -m terminally_rogue
│ ├── app.py # Main game loop
│ ├── config.py # Constants and tuning knobs
│ ├── engine/ # Game state, combat, inventory, choices
│ ├── characters/ # 3 playable characters
│ ├── narrative/ # LLM client, prompts, parser
│ └── ui/ # Rich terminal layout and input
└── tests/ # 35 tests (combat, parser, state machine)
pip install -e ".[dev]"
pytest tests/ -vMIT