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

AreaIn 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

  1. Draw 7 letter tiles from your deck.
  2. Spell a word by tapping tiles. Preview updates live: score, validity.
  3. Submit. Cards fly at the enemy, damage pops, enemy takes hit.
  4. End turn. Enemy acts on their intent.
  5. 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

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)

  1. Goblin Scribe โ€” 15 HP. Attacks for 4-6. Pattern: Attack, Block 3, Attack+1. Tutorial enemy.
  2. Thesaurus Rat โ€” 18 HP. Applies Weakness. Attacks for 4. Forces the player to think about damage multiplication.
  3. Etymology Wolf โ€” 22 HP. Heavy single-hit (10 damage every third turn). Teaches tempo.
  4. Mnemonic Specter โ€” 20 HP. Discards 2 random tiles on turn start. Forces the player off autopilot.
  5. Punctuation Golem โ€” 30 HP, 5 block per turn. Slow, tanky. Rewards long words.
  6. 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:

Architecture summary

Hard-learned from the curriculum. Files are all under capstone/godot-project/.

UX principles

Content pipeline (per new enemy)

  1. Create data/enemies/X.tres as EnemyData with stats + strategy Resource
  2. Generate portrait via PixelLab MCP (see Module 8 exercise)
  3. Write one unique SFX (hit + hurt grunt)
  4. Playtest: does the enemy's mechanic force a new player behavior?
  5. Commit with tag enemy-X-added

Release plan

  1. Alpha (solo): 5 enemies wired, boss stubbed, one art pass. Self-playtest 20 runs.
  2. Closed beta (10 friends): boss done, full audio, basic tuning. Google Play internal test track.
  3. Open beta (100 testers, ~4 weeks): satisfy Google's 14-day-20-tester requirement. Gather retention data.
  4. v1.0 launch: Play Store public listing. itch.io mirror. Twitter/Bluesky announcement with 30s gameplay clip.
  5. v1.1 (if signal): iOS port + one new content drop (2 enemies, 3 cards).

What counts as "done"

A first-time player can:

  1. Open the app, see a title screen, tap Play
  2. Play a full run without outside instruction
  3. Win or lose gracefully, see a result screen, start a new run
  4. Close the app and have their "total wins" persist
  5. 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.