Minigames & Sol Tower
Coin-economy minigames, prize-exchange counters, and the side-quest chains layered through Sol Tower (CDNAME town0d). Driven by data/gamedata/casino.toml + data/gamedata/sol_tower.toml, joined against the item / weapon / armor / accessory tables so every prize resolves to its effect text. The world and shops pages already surface part of this data; this page is where the full picture lives.
What's here
Sol Tower
Vertical structure with a B2 basement reached by service elevator. Each floor hosts a mix of vendors, the major minigames, and a handful of side-quests that don't fit anywhere else in the gamedata schema. The asset viewer can be pre-filtered to this scene.
Side-quest chains
Sol Tower is the hub for several multi-step quests that thread back through other towns. Each row is the sequence of beats; rewards reference items in the curated tables.
Slot machines
Two coin-economy prize tables sit behind the slot-machine pulls: the Vidna casino exchanges casino coins won at its slots for items, while the Sol Tower F4 Muscle Dome counter exchanges the same coin pool (also earned through Muscle Dome runs and Baka Fighter rounds) for a higher-value prize ladder. Each ladder is capped at the 100,000-coin Earth Egg.
Muscle Dome courses
Three fixed-progression arenas. Entry fee is a flat 100 coins. Restrictions are enforced at course entry - Beginner and Expert disable equipment and items but allow magic; Master adds a magic ban. Accessories are always permitted.
Muscle Paradise secrets
Baka Fighter
Rock-paper-scissors variant with life meters. Each round shows a button sequence the player must reproduce. Completing all 14 rounds pays out coins.
The fighters (3D meshes)
The minigame's fighters reuse the party's battle character pack - PROT 1204 (CDNAME other5; the 1203-1206 family), loaded here by overlay_baka_fighter via func_0x8003e6bc("data\field\other5.lzs", …) + func_0x8003eb98(0x4B5/0x4B6, …) (debug string "OTHER5 %d %d"). Baka Fighter lets you play as Vahn/Noa/Gala, so it borrows the same higher-detail meshes the engine installs for turn-based battles. The container is flat streaming-format: five TMD2 meshes (asset type 0x09) plus seven 256×256 4bpp character TIM atlases (CLUTs at VRAM rows 490..495, 497). The PLAYER SELECT roster - the red-gi fighter, the red-haired fighter in the blue/orange vest, the green-trousered fighter - is exactly these meshes.
Internals (reverse-engineered)
The tables above are the player-facing prize / roster data. Each minigame
also has a reverse-engineered runtime write-up - its
per-frame state machine, scoring math, and RAM-state globals, traced from
the captured overlay code. Each is its own page under
docs/subsystems/ in the repo.
| Minigame | Per-frame controller | Core mechanic | Write-up |
|---|---|---|---|
| Fishing | FUN_801cf3bc |
Tension-gauge (0x801d9168) reel tug-of-war; catch score into the persistent counter 0x8008444c. |
minigame-fishing.md |
| Slot machine | FUN_801cf0d8 |
Reel SM + dual RNG (an in-overlay LCG for reels, BIOS rand for balance-bracketed feature odds); payout / jackpot eval. |
minigame-slot-machine.md |
| Baka Fighter | FUN_801d3468 |
Rock-paper-scissors attack-type exchange; loads the PROT 1204 party meshes (the default-equipment battle-form pack). | minigame-baka-fighter.md |
| Dance | FUN_801cf470 |
Beat-clock SM with an accuracy-weighted timing-window judge; direction-symbol step chart. | minigame-dance.md |
| Muscle Dome | FUN_801d0748 |
Card-battle: deal a hand, commit cards into the fighter's action queue under a point budget, resolve via the shared battle-action path. | minigame-muscle-dome.md |
0x800845A4) is only written when you
cash out at the counter - which is why an "Infinite Coins" code reads
full at the cage but doesn't make individual spins free. The four hub
minigames (fishing / slot / Baka Fighter / dance) are distinct overlay
files that share a library core, so the same code address hosts a
different function in each (VA aliasing) - the controllers
above are each read from their own overlay's dump.