Translate the reference mockup into an implementation spec - #116
Open
yoelthewhale wants to merge 1 commit into
Open
Translate the reference mockup into an implementation spec#116yoelthewhale wants to merge 1 commit into
yoelthewhale wants to merge 1 commit into
Conversation
Adds docs/VISUAL_TARGET_SPEC.md: the blueprint for getting from the current UI to the approved 2026-08-21 reference, element by element, without breaking the progression system underneath it. Two findings drove most of the plan. Solo has no timer. endsAt is nil for Solo and timeLeft is always 0, so the reference's TIME widget is a mockup artifact rather than a feature to build. The only Solo loss condition is having no legal move. Recorded so nobody implements UI against a system that does not exist. The results breakdown mostly already has its data. resultSummary carries score, best, previous best, coins, xp, lines cleared, highest combo and the next-unlock text, so most of the reference's panel can ship immediately. Stage reached needs one server line. Base-score and combo-bonus rows need real score attribution on the server, and time bonus needs a timer that does not exist -- those are called out as new systems rather than quietly built. The spec keeps the identity/flavor/energy model intact and says so repeatedly, because the reference is a single flavor at low energy and is easy to mistake for an instruction to make the game permanently pink. Anything carrying meaning -- ink, danger, success, disabled, rank metals -- stays stable; anything carrying mood moves with flavor and energy. Phasing is reordered from the obvious one: the HUD must be extracted out of BlockBlastClient.client.luau before any large HUD code lands, since it sits at 198 of Luau's 200 locals and that is exactly how #96 happened. That extraction is flagged as the highest-risk step and wants its own behaviour-neutral PR. Also includes the twelve-asset PNG request list, deliberately excluding anything containing text, numbers, or layout so nothing gets baked into an image that needs to recolour per flavor or reflow on a phone. Analysis only. No implementation, and no gameplay changes: the gameplay-feel findings are split into verified facts and untested hypotheses for a later task. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN5ZLNq4wennfYp2AMKPxR
This was referenced Aug 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related issue
Part of #98. Documentation only — no implementation, per the review-first instruction.
What changed
Adds
docs/VISUAL_TARGET_SPEC.md, the blueprint for getting from the current UI to the approved 2026-08-21 reference without breaking the progression system underneath it.VISUAL_DIRECTION.mdgains one pointer to it.Two findings drove most of the plan:
Solo has no timer.
endsAtisnilfor Solo andtimeLeftis always 0. The reference'sTIME 1:28widget is a mockup artifact, not a feature to build. The only Solo loss condition is having no legal move. Recorded explicitly so nobody implements UI against a system that does not exist.The results breakdown mostly already has its data.
resultSummarycarries score, best, previous best, coins, XP, lines cleared, highest combo, and next-unlock text — so most of the reference's panel can ship immediately. "Stage reached" needs one server line. "Base score" and "combo bonus" need real score attribution on the server (score is one running total today), and "time bonus" needs a timer that doesn't exist. Those are called out as new systems rather than quietly built.Notable decisions in the spec
BlockBlastClient.client.luaubefore any large HUD code lands — it sits at 198/200 locals and that is exactly how [Critical] GameServer.server.luau exceeds Luau's 200-local-register limit and fails to compile #96 happened. That extraction is flagged as the highest-risk step and wants its own behaviour-neutral PR.How I tested it
Validation
stylua src— unaffected, nosrc/changesselene src,lune run scripts/run-tests.luau,rojo build— nosrc/change, CI covers themRisks or notes for the reviewer
None to the code — this touches no
src/file.Three decisions in §13 genuinely need you, and the plan branches on them:
Also worth flagging: nothing in the current visual work has been seen rendered. Every phase in this plan assumes a Studio pass before the next builds on it.
Generated by Claude Code