clone

a browser grid puzzle game where you push words around to rewrite the rules of each level

main
miau-is-true / openspec / changes / archive / 2026-09-24-fix-miau-forward-facing / specs / game-presentation / spec.md
spec.md 3.2K source

MODIFIED Requirements

Requirement: Supported character glyphs SHALL use scoped facing state

The presentation SHALL maintain horizontal facing per entity ID as visual state separate from simulation coordinates. The built-in MIAU 🐈 SHALL have native left-facing direction, including when a pack repeats that same glyph as a plain palette string. A mod palette object MAY declare faces: 'left' | 'right' for another profile glyph; a different plain string and a front-facing glyph such as FENN 🦊 SHALL remain non-directional by default. Every accepted horizontal displacement SHALL update a directional entity's facing to its travel direction, including being pushed. When a pushed entity also moves itself horizontally in the same turn, its self-movement direction SHALL take precedence. Vertical movement, transformation, idle frames, and blocked intents SHALL preserve prior horizontal facing. Undo SHALL restore per-ID facing history, while loading or resetting a level SHALL use its native declared or neutral facing. A facing change MAY use a glyph-only squash; reduced motion SHALL apply the direction immediately.

Scenario: Built-in cat faces forward in every pack

  • WHEN a MIAU entity with the built-in 🐈 glyph moves right in a core proof or a pack with palette.MIAU: '🐈'
  • THEN the settled board mirrors the native-left glyph to face right, without mirroring its cell, shadow, or text

Scenario: Leftward travel uses the native pose

  • WHEN that MIAU entity subsequently moves left
  • THEN the settled board draws the native-left glyph without a mirror

Scenario: Pushes turn a directional actor

  • WHEN a directional entity is successfully pushed one cell to the right
  • THEN its settled horizontal facing is right, while a blocked push leaves its prior facing unchanged

Scenario: Self-movement wins after a push

  • WHEN one accepted turn pushes an actor right and then moves that actor left under an automaton rule
  • THEN the actor's settled horizontal facing is left

Scenario: Vertical movement preserves the horizontal pose

  • WHEN a MIAU entity moves up or down after facing right
  • THEN its horizontal glyph orientation remains right because the side-profile emoji has no vertical view

Scenario: A transformation preserves per-ID facing

  • WHEN an entity transforms to another noun during a settled turn
  • THEN the entity ID retains its prior horizontal facing, unless the resulting noun has no directional glyph and uses its normal fallback

Scenario: A custom mod glyph opts in explicitly

  • WHEN a mod supplies a different profile glyph with faces: 'right'
  • THEN leftward travel mirrors that glyph, while a different plain-string glyph is not mirrored

Scenario: Undo and reset restore the correct pose

  • WHEN the player undoes a directional turn or resets/loads a level
  • THEN Undo restores the prior per-ID facing, and reset/load returns MIAU to the declared native-left pose

Scenario: Reduced motion skips facing animation

  • WHEN reduced motion is enabled and a horizontal move changes facing
  • THEN the settled glyph faces its direction immediately without a transitional squash