Capstone
Lexicon Duel โ Design Document
Source of truth for the capstone ยท revise as you learn ยท v0.3
Elevator pitch
"A turn-based card-battler where your deck is letters, your attacks are words, and the rarer the word, the bigger the hit. Slay the Spire meets Scrabble, in your pocket."
Design pillars
1. Respect the player's vocabulary
Finding a good word is the win, not the number. If a player types ZYMURGY you want them to feel seen. Visual and sonic rewards scale with word rarity, not just point value.
2. Runs, not campaigns
One session = one run. 15-30 minutes on a phone, on a commute. No "continue your save" friction. Death is normal, resets are fast.
3. Legible mechanics
Every combat modifier, every effect, visible. No hidden math. Players who can't predict their damage can't strategize. Intent previews, damage calculators, move consequences โ all shown.
4. Mobile-native feel
Designed for the thumb, not ported from desktop. Cards fall into a one-hand grip zone. Important actions at the bottom of the screen.
5. Ship something small
20 cards, 5 enemies, one boss. That's the MVP. Expand after launch if people play it.
Scope
| Area | In scope (v1) | Out of scope (v1) |
| Cards |
26 letter tiles + 4 special tiles (wildcard, 2x, venom, etc.) |
Deck-building between runs, multi-copy cards, card synergies |
| Enemies |
5 regular enemies + 1 boss |
Elites, procedural variants, multi-enemy encounters |
| Run structure |
Linear: 5 duels โ boss โ win/lose screen |
Map, branching paths, events, shops |
| Status effects |
Strength, Weakness, Block, Bleed |
Poison stacks, Vulnerability, Curses, buffs-of-buffs |
| Meta-progression |
Total wins counter, a "daily word" mode |
Unlockable cards, ascension, cosmetics |
| Audio |
~12 SFX + 1 battle loop + 1 menu loop |
Voice lines, dynamic music, area-specific tracks |
Core loop
- Draw 7 letter tiles from your deck.
- Spell a word by tapping tiles. Preview updates live: score, validity.
- Submit. Cards fly at the enemy, damage pops, enemy takes hit.
- End turn. Enemy acts on their intent.
- Repeat until one side hits 0 HP.
Damage formula
word_damage = floor((sum of tile values) * length^1.2) + strength_bonus - target.weakness_mult - target.block
minimum: 1
Strength: +N per attack
Weakness: 0.75x damage dealt
Block: absorbs damage 1:1, consumed on hit
Bleed: stacks, deals 1 damage per stack per turn, decay -1/turn
Word scoring feel-tuning
- 3-letter words: ~8-15 damage โ survival tool
- 5-letter words: ~25-40 damage โ workhorse
- 7-letter words: ~60-100 damage โ burst
- Rare-letter plays (Q, X, Z): extra celebration โ particle burst + SFX layer
Goal: 4-6 player words per duel against a 20-30 HP enemy. If shorter, games feel random; if longer, they feel grindy.
Enemy roster (v1)
- Goblin Scribe โ 15 HP. Attacks for 4-6. Pattern: Attack, Block 3, Attack+1. Tutorial enemy.
- Thesaurus Rat โ 18 HP. Applies Weakness. Attacks for 4. Forces the player to think about damage multiplication.
- Etymology Wolf โ 22 HP. Heavy single-hit (10 damage every third turn). Teaches tempo.
- Mnemonic Specter โ 20 HP. Discards 2 random tiles on turn start. Forces the player off autopilot.
- Punctuation Golem โ 30 HP, 5 block per turn. Slow, tanky. Rewards long words.
- BOSS: The Grammar Lich โ 50 HP. Three phases:
- Phase 1 (full HP): attack 5 / buff self / attack 8 pattern
- Phase 2 (<50% HP): adds "silences vowels" โ vowels deal half damage next turn
- Phase 3 (<25% HP): attacks twice per turn, heals 3/turn
Tile distribution
Scrabble standard (98 tiles, no blanks) โ use the Deck Simulator to tune. Starting deck reshuffles when exhausted.
Special tiles added to starter deck:
- Wildcard (ร1) โ counts as any letter. Zero point value. Draws attention to word choice, not tile luck.
- 2ร multiplier (ร1) โ doubles final damage when in the submitted word.
- Venom tile (ร1) โ a "V" that also applies 2 Bleed to the target.
Architecture summary
Hard-learned from the curriculum. Files are all under capstone/godot-project/.
- Scenes: Main, Duel, Card, HandContainer, EnemyPortrait, TitleScreen, MapScreen
- Autoloads: Global (rng, save, tuning), Events (signal bus), SFX, SceneTransition
- Resources: CardData, EnemyData, EnemyStrategy (+ subclasses), StatusEffect (+ subclasses), CardEffect (+ subclasses), TuningData
- Controllers: DuelController (state machine), ActionQueue, Deck, Hand, WordValidator (uses ENABLE)
- Combatant base class: handles damage pipeline, statuses, signals
UX principles
- Bottom-thumb reachability. Hand, End Turn, Submit all in the bottom 40% of screen.
- Tap-don't-drag. Select tiles by tapping (toggle), not dragging. Test: can you play with one hand?
- Word preview above the hand. Always-visible: current word, score, valid/invalid.
- Enemy intent icon above enemy. Never let the enemy do something unannounced.
- Undo the last tile tap. Accidental taps happen โ tapping a selected tile deselects.
Content pipeline (per new enemy)
- Create
data/enemies/X.tres as EnemyData with stats + strategy Resource
- Generate portrait via PixelLab MCP (see Module 8 exercise)
- Write one unique SFX (hit + hurt grunt)
- Playtest: does the enemy's mechanic force a new player behavior?
- Commit with tag
enemy-X-added
Release plan
- Alpha (solo): 5 enemies wired, boss stubbed, one art pass. Self-playtest 20 runs.
- Closed beta (10 friends): boss done, full audio, basic tuning. Google Play internal test track.
- Open beta (100 testers, ~4 weeks): satisfy Google's 14-day-20-tester requirement. Gather retention data.
- v1.0 launch: Play Store public listing. itch.io mirror. Twitter/Bluesky announcement with 30s gameplay clip.
- v1.1 (if signal): iOS port + one new content drop (2 enemies, 3 cards).
What counts as "done"
A first-time player can:
- Open the app, see a title screen, tap Play
- Play a full run without outside instruction
- Win or lose gracefully, see a result screen, start a new run
- Close the app and have their "total wins" persist
- Show the game to a friend, hand over the phone, and the friend gets it
That's v1. Everything else is v2+.
Living doc
Revise this every 2-3 weeks. Date each revision at the top. A design doc frozen at project start becomes a lie by week 4 โ use it as a compass, not a constitution.
Starter Godot project
See the scaffold at capstone/godot-project/ โ a minimal but runnable Godot 4.x project with the architecture conventions above. Open its project.godot in Godot to start building.