12 — Small Things, Done Right
A new frame, a reusable API, and a character who turns around
The Frame, Revisited
The ember frame worked. It was also too busy — three gradient shades, an inner shadow, a lot happening in 24 pixels. Redesigned it. One purple, one dark fill, transparent corners. Six colors in the source, two after GBA quantization. Twenty-four pixels is no place to show off.
Fill color dropped from #303030 to #101010 — nearly black. White text pops harder. The menu reads as its own thing now, not a tinted copy of the overworld.
Making It Reusable
The ember frame started life inside gear_ui.c — hardcoded tile offset, hardcoded BG layer, party screen only. Then the EMBER submenu on the start menu wanted the same look. Different layer, different offset, same aesthetic.
Split the API. The original static functions stay for the party screen (tile offset 0x3E). New public functions — LoadEmberFrameGfxAt() and DrawEmberFrameAt() — take an offset parameter. Start menu loads at 0x011, party screen at 0x3E. Same 9 tiles, same palette, different VRAM addresses.
The EMBER submenu opens with the dark frame now instead of the standard white FireRed window. Manual cursor too — ▶ drawn at x=0, erased with dark fill. Same pattern as the gear slot chooser. One convention, two screens, no white rectangles.
The Small Fix That Matters
Early in the game your rival storms out of Oak’s lab. The player watches him go — turns right, then down, tracking the exit. Oak walks over to hand you your first relic.
But the player never turned back. Oak delivering his speech about ancient artifacts to the back of your head. Two lines fixed it:
applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp
waitmovement 0
The player turns to face Oak before the dialogue starts. Nobody would file a bug report. Everybody would feel it.
Consistency Sweep
Audited every hint bar in the game. The scrapper was the holdout — {A_BUTTON}Scrap instead of {A_BUTTON}:Scrap, and “Exit” instead of “Back”. One line. But now every screen follows the same {ICON}:Label format with “Back” for B button.
Updated the style guide and technical docs too — the ember frame’s public API, the ▶ cursor convention, the new fill color. The kind of notes that keep the next session from rebuilding what already exists.
By the Numbers
| Metric | Value |
|---|---|
| Active | ~19.5 hours (incl. overnight) |
| Commits | 58 |
| Lines of C added | ~2,000 |
| New source files | 1 (forge_ui.c) |
| Feature branches merged | 7 |
| Fix commits | 21 |
| Copilot requests | 79 |
| Tool executions | ~1,860 |
| Sub-agents | 56 |
| Project total commits | 166 |
| Project total lines of C | ~11,300 |
| EWRAM remaining | ~240 bytes |
A redesigned frame, a reusable API, a character who turns around, and a colon in the right place. Finishing the small things is what makes it a game.
Back to README