Skip to content

Visual polish + biome-signature terrain - #18

Merged
FiddlyDigital merged 4 commits into
mainfrom
claude/visual-polish
Jul 26, 2026
Merged

Visual polish + biome-signature terrain#18
FiddlyDigital merged 4 commits into
mainfrom
claude/visual-polish

Conversation

@FiddlyDigital

Copy link
Copy Markdown
Owner

Two complementary passes that lift the game toward a "pro" level of polish: a visual-identity overhaul and a gameplay-feel change that makes biomes distinct to build in.

Visual identity & UI (0f7ac66, 33ebe33, 74aa070)

  • Title screen + Celtic foundation — palette tokens (--accent-dim, --gold-glow, --shadow-deep, --carve-hi/lo), an ogham-rule divider, an atmospheric start-modal backdrop with drifting motes and a title shimmer (all reduced-motion guarded). Fixed the "FORMORIAN" → "Fomorian" typo and reflowed the subtitle.
  • In-game atmosphere — a biome-tinted depth gradient behind the grid, a translucent veil over unexplored tiles, and a cached edge vignette so the board reads as a lit chamber rather than a flat field.
  • HUD & control chrome — gold top-cap and hairline dividers on the HUD strip, and carved-stone bevels on the D-pad and restart buttons.

Biome-signature terrain (b56fa19)

Terrain used to be laid uniformly on S/L/J locks regardless of biome, so every biome felt the same to build in. Which shapes freeze into ground is now a biome trait via a new optional terrainShapes set, so play-feel escalates as you descend:

Biome Floors Terrain shapes Effect
Cairn Halls 1–4 S/L/J sacred (baseline)
Sídhe Caverns 5–9 S/L/J/O/I ice — densest
Bres's Causeway 10+ S/L/J/O swamp

terrainShapes is optional and defaults to ["S","L","J"], so existing data and the schema stay backward-compatible. The falling-piece terrain hint in the renderer is now biome-aware to match.

Touches: types.ts (BiomeDef.terrainShapes?), biomes.json + schema, dataLoader.ts (Biome.terrainShapes), game.ts lockBlock, renderer.ts, plus 3 new tests and README updates.

Verification

npm run verify green on the branch: 429/429 tests, coverage ~84.8% stmts / 76.8% branches / 84.7% funcs / 87.8% lines (above thresholds), lint clean, build + smoke pass.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 4 commits July 26, 2026 13:06
Visual-identity lane, phase 1–2 (balanced Celtic direction):
- :root gains semantic tokens (accent-dim, gold-glow, shadow-deep, carve
  hi/lo bevels) as one source of truth for the polish pass.
- Reusable .ogham-rule divider (gold rule + central lozenge).
- Title screen becomes an actual title screen: #start-modal gets an opaque
  atmospheric backdrop (radial green glow + gold floor wash) so the live
  board no longer bleeds through, drifting CSS motes, and a shimmering gold
  title framed by ogham rules. Reduced-motion disables the animations.
- Carved-stone bevel + press state on the primary CTAs.
- Fix copy: "FORMORIAN" → "Fomorian"; split the subtitle into two lines.

CSS/HTML only. 426 tests, lint, build, smoke all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6kP5vUAcNbxLK5EnPKAhv
Phase 3 of the visual lane. The play field no longer reads as a flat black
rectangle:
- A biome-tinted vertical depth gradient behind the tiles (top wash fading
  to black), so the un-built void has depth. Unexplored tiles now paint a
  translucent veil instead of an opaque fill, letting the gradient read
  through as cavern darkness.
- A cached edge vignette (radial darkening) drawn over the world each frame,
  focusing the eye on the hero's column and giving a lit-from-within feel.

Renderer-only, no new assets. 426 tests, lint, build, smoke green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6kP5vUAcNbxLK5EnPKAhv
Phase 4 of the visual lane — tie the in-game UI to the title/modal system:
- #hud-strip gets the signature gold top-cap, a carved-stone gradient +
  bevel, hairline rules between HP/floor/gold sections, and a touch more
  width/padding so the stat cluster reads at a glance.
- The on-screen control buttons gain a carved-stone rest state (top-lit
  gradient + bevel edges), keeping their existing press ripple/scale.

CSS only. 426 tests, lint, build, smoke green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6kP5vUAcNbxLK5EnPKAhv
Terrain was laid uniformly on S/L/J locks regardless of biome, so every
biome felt the same to build in. Make *which* shapes freeze into ground a
biome trait via a new optional `terrainShapes` set, so the play-feel shifts
as you descend:

- Cairn Halls (floors 1-4): S/L/J → sacred (baseline)
- Sídhe Caverns (floors 5-9): S/L/J/O/I → ice (densest — the ice biome
  ices up more of the board)
- Bres's Causeway (floors 10+): S/L/J/O → swamp

`terrainShapes` is optional and defaults to ["S","L","J"], so existing data
and the schema stay backward-compatible. The falling-piece terrain hint in
the renderer is now biome-aware to match.

- types.ts: BiomeDef.terrainShapes?: string[]
- biomes.json + schema: per-biome terrainShapes (optional array)
- dataLoader.ts: Biome.terrainShapes with S/L/J default
- game.ts lockBlock: resolve biome, lay terrainType on terrainShapes locks
- renderer.ts: biome-aware falling-piece terrain hint
- tests: 3 biome-signature cases (ice-on-I in caverns only, per-biome type
  on shared S, swamp-on-O deep only)
- README: biome/terrain rows document terrainShapes

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6kP5vUAcNbxLK5EnPKAhv
@FiddlyDigital
FiddlyDigital merged commit 189739c into main Jul 26, 2026
1 check passed
@FiddlyDigital
FiddlyDigital deleted the claude/visual-polish branch July 26, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants