Skip to content

cd4u2b0z/Keyboard-Warrior

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Keyboard Warrior

Finally, a reason to be one.

A high-fantasy roguelike where you defeat ancient evils through the rhythm of your keystrokes. Descend into the ruins of a shattered kingdom. Face corrupted knights, void walkers, and eldritch horrors. Type to survive. Die repeatedly.

Keyboard Warrior Demo

Rust License Version Status TUI


Project Status

This is a personal hobby project — a fun "fuck around and find out" experiment in terminal game development.

What Actually Works (v0.6.0)

  • Full 10-floor dungeon progression with zone-themed encounters
  • Combat with typing, combos, and flow states
  • Lore-integrated typing -- words match the zone, enemy, and story
  • Corruption effects on typing -- narrative state warps your words
  • 5 playable classes with distinct stats
  • Skill tree combat integration -- damage, crits, evasion, damage reduction
  • Basic spellcasting (Tab to toggle, 1-9 to select)
  • Items, shops, rest sites, treasure rooms
  • Faction-voiced NPCs -- merchants and healers speak with personality
  • Authored encounters -- scripted narrative moments during exploration
  • Run modifiers -- difficulty scaling for challenge modes
  • Tutorial system (5 phases)
  • Help overlay (press ? -- works in combat!)
  • Meta-progression persists -- Ink earned, upgrades bought, history tracked across runs
  • Faction reputation system (displayed in Stats)
  • Boss-specific dialogue during boss fights
  • Narrative progression through typed sentences
  • EventBus architecture — systems communicate dynamically
  • Immersive combat — per-keystroke feedback, enemy damage states, player avatars
  • Visual effects LIVE — floating damage numbers, screen shake, hit flash, combos
  • Battle summaries — stats shown after every fight (WPM, damage, accuracy)
  • Run summaries — comprehensive stats at victory/game over
  • Three endings — Final Silence, First Word, Third Grammar
  • Boss phase transitions — multi-phase fights with escalating mechanics
  • Quest log — main quests track your progression (press l)
  • Lore journal — discovered lore fragments collected (press j)
  • Narrative engine wired — lore discovery, mystery progress, chapter advancement

Recently Added (v0.6.0)

Persistence, Endings & Balance — The game actually has a real ending now:

  • Meta-progression persists — Ink, upgrades, and run history save to disk (RON format, XDG paths)
  • Three endings — Floor 10 boss routes to EndingChoice scene with three doors
  • Boss phase transitions — Hollow Knight phase 2 at 50% HP, Void Herald phases at 66%/33%
  • Balance pass — enemy HP scaling tuned, time limits tightened, first upgrade costs reduced 40%
  • Quest log scene — main quests activate on game start, viewable with l key
  • Lore journal scene — discovered fragments browseable with j key
  • Narrative engine wired — lore feeds mystery progress, faction choices track ending tendency
  • Lore fragments integrated — 30% chance of authored lore during exploration
  • Run summaries with Ink — proper RunSummary built on death/victory, Ink calculated and awarded
  • Meta preserved across restarts — upgrades and history survive death/restart

Still Dormant (~3,000 Lines)

  • Deep Lore (1,016 lines) — Three Ages, The Sundering, full cosmology (referenced but not directly surfaced)
  • World System (607 + 274 lines) — Location simulation
  • Characters (329 lines) — 4 NPCs defined but not appearing in dungeons yet

Known Issues

  • Quest objective completion not yet triggered by gameplay events
  • NPC encounters (characters.rs) not appearing in dungeons
  • Mid-run save/load not implemented (save.rs exists but unused)
  • Spell damage calculations are placeholder
  • Item effects are minimal
  • Some run stats (total damage, perfect words) not yet tracked across full run

This is a learning project. It compiles. It runs. It's fun to hack on. Don't expect polish. Expect to die.


World & Lore

"Wait, there's actual lore?" — Yes. Thousands of lines of it. Most of it unused.

Keyboard Warrior is set in a dark fantasy world recovering from The Sundering — a cataclysm caused when Archon Malachar tried to pierce the Veil between worlds and become a god.

The Three Ages

Age Era What Happened
Age of Dawn Before time Gods walked among mortals. Dragons spoke prophecy.
Age of Crowns 3,000 years Mortal kingdoms rose. The great Orders were founded.
Age of Shadow Now (47 years) The Sundering tore reality. The Blight spreads.

The Five Factions

Faction Philosophy
Mages Guild Arcane knowledge is the key to sealing the breach
Temple of Dawn Divine light will purge the corruption
Rangers of the Wild Nature's balance must be restored
Shadow Guild Information is power; secrets are currency
Merchant Consortium Trade continues; neutrality profits

The Dungeon Zones

  • Floors 1-2: The Shattered Halls — ruined castle, echoes of the old kingdom
  • Floors 3-4: The Sunken Archives — flooded library, forbidden knowledge
  • Floors 5-6: The Blighted Gardens — corrupted greenhouse, twisted nature
  • Floors 7-8: The Clockwork Depths — ancient machinery, dwarven ruins
  • Floors 9-10: The Void's Edge — reality breaks down, glimpses of the beyond
  • Floor 11+: The Breach — where The Sundering occurred

The Mystery

You are not who you think you are. As you descend, fragments of memory surface. The truth waits at the bottom — and three possible endings: Final Silence, First Word, or Third Grammar.


Vision

Keyboard Warrior is a typing game that feels like an RPG. Every keystroke has weight. Combos build momentum. Flow states reward consistency. The dungeon unfolds through your fingers.

It's also a pun. You're literally a warrior. With a keyboard. Fighting things. In a terminal. Look, the name was available.

Inspired by ttyper, Undertale, Balatro, Hades, and Dark Souls.


Quick Start

# Clone and build
git clone https://github.com/cd4u2b0z/keyboard-warrior.git
cd keyboard-warrior
cargo build --release

# Run the game
./target/release/keyboard-warrior

Requirements:

  • Rust 1.70+
  • A terminal with Unicode support
  • Nerd Font recommended for icons

How It Plays

╭─────────────────────────────────────────────────────────────────────╮
│  󰈸 FLOOR 3 — The Whispering Archives           HP ████████░░ 42/50 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   󰟀  Shadow Scribe                                                  │
│      ████████░░░░░░░░ 34/80 HP                                      │
│                                                                     │
│   ┌─────────────────────────────────────────┐                       │
│   │  Type:  「 arcane manuscript 」          │                       │
│   │         ~~~~~~ ___________              │                       │
│   └─────────────────────────────────────────┘                       │
│                                                                     │
│   󰑴 Combo: 7x  ·  󰓅 Flow: BUILDING  ·  󰧺 89 WPM  ·  󰸞 96%         │
│                                                                     │
╰─────────────────────────────────────────────────────────────────────╯
    [Tab] Spells  [?] Help  [Esc] Flee

Core Loop

  1. Explore — Navigate a 10-floor dungeon with procedural rooms
  2. Fight — Type words to attack enemies; accuracy and speed deal damage
  3. Grow — Level up, find items, learn spells, build your character
  4. Die — Roguelike permadeath with meta-progression between runs

Combat

Words appear. You type them. Damage happens.

  • Correct characters flash green; errors flash red
  • Combos build with consecutive correct words (up to 3x damage)
  • Flow states reward consistent typing rhythm
  • Time pressure adds urgency without being punishing

Exploration

Each floor contains rooms: combat encounters, elite enemies, shops, rest sites, treasure, and random events. Choose your path. Manage your resources. Reach the boss.


Controls

Key Action
j/k or ↑/↓ Navigate menus
Enter or e Confirm / Explore
Backspace Fix typing errors
Esc Back / Flee combat
? Toggle help overlay
i Inventory
s Character stats
l Quest log
j Lore journal
Tab Toggle spell mode (combat)
1-9 Select spell (spell mode)

Classes

Class Style Strength
󰜁 Wordsmith Balanced +10% damage, starts with Heal
󰯂 Scribe Spellcaster +25% MP, faster spell learning
󰺝 Spellweaver Glass cannon +50% spell damage, -20% HP
󰓥 Barbarian Tank +30% HP, +15% damage, no spells
󰗎 Trickster Luck-based Random bonuses, critical hits

Features

See Project Status for the full breakdown.


Project Structure

keyboard-warrior/
├── src/
│   ├── main.rs                    # Game loop, input handling (870+ lines)
│   │
│   ├── game/                      # Core game logic (~21,400 lines, 43 files)
│   │   ├── mod.rs                 # Module exports
│   │   │
│   │   │ # ─── CORE SYSTEMS (wired up) ───
│   │   ├── state.rs               # Game state, scene management (600+)
│   │   ├── combat.rs              # Combat state, skill integration (600+)
│   │   ├── combat_engine.rs       # Damage calc, word generation (510)
│   │   ├── combat_events.rs       # Combat event handling (282)
│   │   ├── player.rs              # Player, classes, leveling (381)
│   │   ├── enemy.rs               # Enemy definitions (366)
│   │   ├── dungeon.rs             # Floor/room generation (308)
│   │   ├── items.rs               # Equipment, consumables (455)
│   │   ├── spells.rs              # Spell definitions (281)
│   │   ├── events.rs              # Game events system (305)
│   │   ├── stats.rs               # Statistics tracking (559)
│   │   │
│   │   │ # ─── FEEL & UX (wired up) ───
│   │   ├── typing_feel.rs         # Combo, flow, rhythm (550)
│   │   ├── tutorial.rs            # 5-phase tutorial (617)
│   │   ├── help_system.rs         # Help overlay (750)
│   │   ├── config.rs              # Game configuration (434)
│   │   │
│   │   │ # ─── PROGRESSION (wired up) ───
│   │   ├── faction_system.rs      # Faction reputation (815)
│   │   ├── meta_progression.rs    # Ink/unlocks framework (612)
│   │   ├── save.rs                # Save/load system (299)
│   │   │
│   │   │ # ─── INTEGRATED SYSTEMS (v0.5.1) ───
│   │   ├── event_bus.rs           # Central event messaging (594)
│   │   ├── narrative_seed.rs      # Corruption effects on typing (906)
│   │   ├── skills.rs              # Skill trees → combat (490+)
│   │   ├── voice_system.rs        # Faction NPC dialogue (794)
│   │   ├── encounter_writing.rs   # Authored exploration events (783)
│   │   ├── run_modifiers.rs       # Difficulty scaling (632)
│   │   │
│   │   │ # ─── IMMERSION OVERHAUL (v0.5.1) ───
│   │   ├── typing_impact.rs       # Per-keystroke damage tracking (372)
│   │   ├── dialogue_engine.rs     # Context-aware enemy dialogue (384)
│   │   ├── enemy_visuals.rs       # Progressive ASCII damage (412)
│   │   ├── pacing.rs              # Tension/breather beats (370)
│   │   ├── player_avatar.rs       # Player visual presence (381)
│   │   ├── combat_immersion.rs    # Unified immersion wrapper (498)
│   │   │
│   │   │ # ─── NARRATIVE & LORE (v0.6.0) ───
│   │   ├── narrative.rs           # Faction enum, Chapter enum, dialogue structs (486)
│   │   ├── narrative_integration.rs # NarrativeEngine coordinator (649)
│   │   ├── lore_fragments.rs      # 9 discoverable lore pieces (752)
│   │   ├── quests.rs              # Quest system, 3 main quests (368)
│   │   ├── world_integration.rs   # Zone defs, lore fragment wiring (407)
│   │   ├── writing_guidelines.rs  # Tone/style guide (540)
│   │   │
│   │   │ # ─── WORLD & CHARACTERS (dormant) ───
│   │   ├── deep_lore.rs           # High fantasy cosmology (1,016)
│   │   ├── world.rs               # World locations (607)
│   │   ├── world_engine.rs        # World simulation (274)
│   │   ├── characters.rs          # 4 NPC definitions (329)
│   │   │
│   │   │ # ─── LEGACY ───
│   │   ├── typing_context.rs      # Replaced by lore_words.rs (754)
│   │   └── enemy_old.rs           # Legacy (240)
│   │
│   ├── ui/                        # Rendering (~2,850 lines)
│   │   ├── render.rs              # Core screen rendering (1,700+)
│   │   ├── combat_render.rs       # Enhanced combat UI (450)
│   │   ├── effects.rs             # Visual effects system (400)
│   │   ├── theme.rs               # Colors, icons, styles (424)
│   │   ├── lore_render.rs         # Lore display (80)
│   │   ├── spell_ui.rs            # Spell selection UI
│   │   └── stats_summary.rs       # Battle + run summary screens (450+)
│   │
│   └── data/                      # Static content (~1,700 lines)
│       ├── mod.rs                 # Data exports, lore word methods (180)
│       ├── enemies.rs             # Enemy templates (555)
│       ├── sentences.rs           # Word lists (490)
│       ├── word_lists.rs          # More words (155)
│       ├── lore_words.rs          # Zone/enemy/boss word pools (350)
│       ├── items.rs               # Item templates
│       ├── spells.rs              # Spell data
│       ├── zones.rs               # Zone data
│       └── achievements.rs        # Achievement definitions
│
├── docs/
│   └── SYSTEM_INTEGRATION_PLAN.md # Integration roadmap (completed)
│
├── .github/                       # GitHub configuration
│   ├── workflows/ci.yml           # CI pipeline (Rust checks, cross-build)
│   ├── ISSUE_TEMPLATE/            # Bug report, feature request templates
│   └── PULL_REQUEST_TEMPLATE.md   # PR template
│
├── Cargo.toml
├── CHANGELOG.md
└── README.md

Legend: (wired up) / (dormant) / (legacy)

~29,000 lines of Rust across 56 source files.


Roadmap

v0.3.0 — Gameplay Integration

  • Wire up spell casting (Tab + 1-9 + incantation)
  • Wire up faction reputation system
  • Wire up combat feel (combos, flow states)
  • Meta-progression: Ink earned on death
  • Fix floor progression bugs

v0.4.0 — Fantasy Lore Overhaul

  • High fantasy cosmology (Three Ages, The Sundering, Malachar)
  • Five factions with distinct philosophies
  • Fantasy-themed zones (6 unique areas)
  • Bosses with personality (Hollow Knight, Void Herald)
  • 14 thematic enemies with lore
  • Player mystery and multiple endings framework

v0.4.1 — Lore-Integrated Typing

  • Zone-specific word pools (30+ per zone)
  • Enemy-type word themes
  • Boss-specific dialogue lines
  • Narrative progression through typed sentences
  • Combat wired to use lore words

v0.5.0 — System Integration

  • EventBus architecture (60+ event types)
  • NarrativeSeed corruption effects
  • SkillTree combat integration (5 trees, 25+ skills)
  • VoiceSystem for faction NPCs
  • EncounterWriting authored events
  • RunModifiers difficulty scaling

v0.5.1 — Immersion Overhaul

  • TypingImpact per-keystroke damage
  • DialogueEngine context-aware taunts
  • EnemyVisuals progressive ASCII damage
  • PacingSystem tension/breather beats
  • PlayerAvatar class-based visuals
  • CombatImmersion unified wrapper

v0.5.2 — Visual Juice System

  • Effects system (floating damage, screen shake, hit flash)
  • Enhanced combat render (450 lines)
  • Combo pulse animations
  • Typing ripple feedback

v0.5.3 — Effects Wiring

  • Game loop integration (update_effects() every frame)
  • Damage tracking with deferred pattern
  • Switched to render_combat_enhanced()
  • All visual effects now actually display

v0.6.0 — Persistence, Endings & Balance

  • Meta-progression persists to disk (RON format, XDG paths)
  • Three endings (Final Silence, First Word, Third Grammar)
  • EndingChoice scene with narrative-driven door selection
  • Boss phase transitions (Hollow Knight, Void Herald)
  • Balance pass (enemy scaling, time limits, upgrade costs)
  • Quest log scene with main quest tracking
  • Lore journal scene with discovered fragments
  • NarrativeEngine wired (lore discovery, mystery progress, chapter advancement)
  • Lore fragments integrated into exploration (30% chance)
  • RunSummary with Ink calculation on death and victory
  • Meta preserved across restarts

v0.7.0 — Living World (next)

  • NPC encounters in dungeons (characters.rs)
  • Quest objective completion hooks
  • Mid-run save/load
  • Deep lore surfaced in gameplay
  • World simulation integration

v1.0.0 — The Dream

  • Full balance pass
  • All quest chains completable
  • Documentation complete
  • Actually ship something

Building

# Development build
cargo build

# Release build (optimized, ~1.5MB binary)
cargo build --release

# Run directly
cargo run --release

# Check for errors without building
cargo check

Contributing

Keyboard Warrior is a personal hobby project. It's not looking for contributors, but if you want to fork it and do something cool, go for it.

If you find a bug that's actually blocking gameplay (not just "this system isn't wired up"), feel free to open an issue. I might even fix it.


License

MIT License. See LICENSE for details.

Do whatever you want with this code. I'm not your mom.


Credits

Keyboard Warrior — Original work by Dr. Baklava

"I spent hundreds of hours on this so you can type 'ancient prophecy' at a Goblin."

Built with:

Inspired by:

  • ttyper — Terminal typing
  • Undertale — Personality and charm
  • Hades — Meta-progression
  • Balatro — Satisfying feedback
  • Dark Souls — The joy of repeated death

Type well, die often.

About

A roguelike RPG typing adventure - type to cast spells, defeat enemies, and save the realm

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors

Languages