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