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.

The Sol rows below are technically the Muscle Dome prize-exchange counter on F4, not the slot machine itself - the slot machine only pays out coins. The same coin pool funds Muscle Dome entry fees, Baka Fighter games, and counter purchases.

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.

View them in 3D. These meshes render textured + animated (per-frame per-bone ANM from PROT 1203) in the interactive viewer on the characters page - open your disc image, pick a slot, and toggle battle form to orbit and play each fighter's animation. They are the party's main-battle appearance (the minigame reuses the same pack); see the provenance note there.

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.

MinigamePer-frame controllerCore mechanicWrite-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
The slot machine's per-spin balance is overlay-local; the shared casino coin bank (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.