Word VocabularyBehind the build
From ideas, art, and sound to a working product and release. Explore each chapter, its challenges, and the solutions.
Project imageContact sheet of repaired tiles and their intended senses; open the full image to inspect the details.
Supporting media
Good-looking art must teach the right word
Where it started
Start with 3,000 words and picture clues, checking that every image teaches the intended meaning.
What went wrong
Some attractive images showed the wrong subject, such as the wrong primate or millet resembling maize. Players could learn the wrong meaning.
The solution
Review the whole catalog and repair only flagged words, keeping their IDs and image slots stable and unrelated pictures unchanged.
- Compare every tile with its literal sense and stable ID, rather than checking file coverage alone.
- Generate replacement color masters for flagged entries and repack their original 128×128 slots without changing IDs.
- Bind visual-review status to both the sense and pixel hash, invalidating the review when either changes.
Technical details & evidence
Development process
The starting point was a 3,000-word catalog and clue sprite sheets. Spelling, the intended literal sense, and the visible subject had to agree.
- Compare every tile with its literal sense and stable ID, rather than checking file coverage alone.
- Generate replacement color masters for flagged entries and repack their original 128×128 slots without changing IDs.
- Bind visual-review status to both the sense and pixel hash, invalidating the review when either changes.
Recorded problem
Some pictures represented the wrong subject: BABOON resembled a mandrill and MILLET looked like maize. Attractive imagery could still teach the wrong meaning.
Implementation
Review the entire actual catalog, repair individual words, and use deterministic packing to verify that unrelated tiles remain pixel-identical.
Evidence & limits
The 1 Oct 2026 record reports 3,000 reviewed tiles, 72 repaired words across passes, and no unresolved visual findings. This was AI visual review, not expert certification of every subject.
Source: Docs/ArtQA/README.md · Shipping clue art review · 1 Oct 2026
Keep music behind the spoken word
Where it started
Keep one background loop across pages and lower it during pronunciation so the word remains clear.
The design challenge
Repeated or overlapping pronunciation must not restore music too early or leave it quiet after speech is cancelled.
The solution
Let actual speech playback control ducking. Restore music after the last voice ends and pause it when the app loses focus.
- Record music provenance and license; use one Ogg file and an application-owned AudioSource.
- Duck music from 0.12 to 0.018 during pronunciation, restoring it after the final active voice ends.
- Handle repeated taps, overlapping voices, mute, and backgrounding through actual voice state.
Technical details & evidence
Development process
Pronunciation must remain clear while music continues across pages. One lofi loop is shared across the app, with ducking controlled by actual speech playback.
- Record music provenance and license; use one Ogg file and an application-owned AudioSource.
- Duck music from 0.12 to 0.018 during pronunciation, restoring it after the final active voice ends.
- Handle repeated taps, overlapping voices, mute, and backgrounding through actual voice state.
Design constraints
Timer-based recovery can restore music before speech ends or leave it quiet after cancellation. A player recreated for each page would restart the loop.
Implementation
Track active pronunciation players, use unscaled fades, release ducking on mute, disable, or focus loss, and pause/resume the loop at its existing position.
Evidence & limits
LOFI_BGM and DECISIONS document this mechanism. Numerical and playback-boundary checks do not replace listening on a physical device.
Source: Docs/Audio/LOFI_BGM.md + DECISIONS.md · 2 Oct 2026
Project imageGreen/pink crossing in the corrected Unity PlayMode promo; this is an after-fix image.
Supporting media
Overlapping paths must remain readable
Where it started
Generate a real puzzle and trace words to exercise gesture input, path colors, and saved discoveries.
What went wrong
Overlapping word paths became difficult to distinguish, while repeated coverage could darken the same stroke unintentionally.
The solution
Preserve each word’s color and mix pigments at crossings. Composite each stroke once so repeated frames do not keep darkening it.
- Generate a real production puzzle and drive the normal gesture input.
- Persist solved-path colors by discovery order so retries and reloads preserve them.
- Capture stroke crossings, test GPU blending, and recapture after the runtime fix.
Technical details & evidence
Development process
Rules moved from the Python reference lab to C# with an independent answer validator. Real gestures record crossed Gems; solved state drives color and effects without altering rules for a promo capture.
- Generate a real production puzzle and drive the normal gesture input.
- Persist solved-path colors by discovery order so retries and reloads preserve them.
- Capture stroke crossings, test GPU blending, and recapture after the runtime fix.
Recorded problem
The initial promo exposed a drag-color collision with solved paths. Overlaps selected the stronger pigment, and repeated frame coverage risked darkening the same stroke.
Implementation
Preserve each stroke’s color, mix crossing pigments, composite a whole stroke once, and union repeated dab coverage without accumulating extra darkness.
Evidence & limits
The 4 Oct promo record reports 5/5 checks across GPU crossings, retry/reload, the production scene, and Continue. The image is a spot check from the corrected clip.
Source: Docs/Release/DragPromo-2026-10-04/README.md
Measure text before fitting the board
Where it started
Fit the board, clues, review text, and banner together while making the entire dictionary browsable.
What went wrong
Fixed-size cards did not fit long text, and some scrollbars looked usable without handling pointer input correctly.
The solution
Measure text with the real fonts and repair the shared scrollbar so the affected pages behave consistently.
- Measure authored text, grow review/completion cards, then refit the board.
- Place Play relative to actual banner bounds and separate safe-area controls from full-screen scenery.
- Recycle Collection rows with a ListView and provide a usable scrollbar hit area.
Technical details & evidence
Development process
The UI fits the board, clues, review text, and banner into one screen, while the Collection must expose all words without creating 3,000 image objects at once.
- Measure authored text, grow review/completion cards, then refit the board.
- Place Play relative to actual banner bounds and separate safe-area controls from full-screen scenery.
- Recycle Collection rows with a ListView and provide a usable scrollbar hit area.
Recorded problem
Long text exceeded fixed card reservations, while a scrollbar without the required input structure could look usable but fail to respond correctly.
Implementation
Use measured heights, keep icon size independent of card growth, and fix slider structure in the shared theme used by Settings, Collection, and the map.
Evidence & limits
The 12–13 Oct decisions record the layout changes and four passing panel-pointer regressions, preserving saved puzzles and answers.
Source: DECISIONS.md · measured cards, Collection, shared scrollbar · 12–13 Oct 2026
When iOS export fails inside the compiler
Where it started
After a fix, create a fresh iOS artifact and verify that its version and signature match the intended source.
What went wrong
Unity’s code conversion crashed during parallel work, preventing the release pipeline from reaching a distributable artifact.
The solution
Preserve the failed build and reduce conversion to one worker. That build succeeded without changing gameplay or the Unity version.
- Preserve the failed export and logs before changing build conditions.
- Expose a worker-count option for IL2CPP conversion without changing Unity or gameplay logic.
- Verify archive/IPA identity after success and restore temporary build arguments.
Technical details & evidence
Development process
UI fixes require a fresh artifact tied to the corrected source. Build-tool failures must be distinguished from gameplay failures.
- Preserve the failed export and logs before changing build conditions.
- Expose a worker-count option for IL2CPP conversion without changing Unity or gameplay logic.
- Verify archive/IPA identity after success and restore temporary build arguments.
Recorded problem
iOS build 7 crashed inside IL2CPP during parallel ReadOnlyHashSet/generics collection, blocking the archive pipeline.
Implementation
Build 8 limited conversion to one worker and kept native compilation separate, retaining compiler/runtime checks.
Evidence & limits
The 12 Oct record reports successful single-worker conversion. That mitigation does not establish the compiler’s underlying root cause.
Source: DECISIONS.md · iOS build-7 IL2CPP failure and build-8 single-worker conversion · 12 Oct 2026
Bring it together before release
From individual parts to one app
Build Android code 15 and iOS build 9 from the corrected UI source, verifying signatures, versions, and matching symbols.
The app and listing must agree
iOS Simulator records show 63 of 72 checks passed; nine still require physical devices, accounts, or Store access. Android code 15 has no fresh handset acceptance run.
Recorded release status
Android was submitted directly to Production review with symbols; iOS build 9 and Remove Ads were submitted for review. The 13 Oct record does not establish approval or public availability.
Dated project evidence, not a live Store lookup.
Build details & records
Integration
- Use the V2.3 Python lab as a reference, port the rules to C#, and validate answers independently of the board generator.
- Create a stable-ID image manifest for 3,000 words, checking senses, artwork, and mappings before Unity import.
- Persist the whole puzzle and solved paths with temp/backup/replace so reopening restores the same board.
Evidence
The 13 Oct 2026 record reports 63 Passed out of 72 requested iOS build-9 simulator checks; nine repeated checks depended on physical devices, accounts, or Store access. Full release acceptance and fresh Android code-15 handset acceptance were not claimed.
Store submission
Android 0.1.14 (15) was submitted directly to Production review with native symbols. iOS 0.1.13 (9) and Remove Ads were Waiting for Review, with automatic release after approval. This record does not confirm approval or public availability of those builds.
Project records
- Docs/ArtQA/README.md · Shipping clue art review · 1 Oct 2026
- Docs/Audio/LOFI_BGM.md + DECISIONS.md · 2 Oct 2026
- Docs/Release/DragPromo-2026-10-04/README.md
- DECISIONS.md · measured cards, Collection, shared scrollbar · 12–13 Oct 2026
- DECISIONS.md · iOS build-7 IL2CPP failure and build-8 single-worker conversion · 12 Oct 2026
- README.md
- PRODUCTION_PLAN.md
- Docs/Release/PLAY-V15-2026-10-13.md
- Docs/StoreListing/iOS-0.1.13/BUILD-9.md
- Docs/StoreListing/iOS-0.1.13/STORE-STATUS.md