pokepinballrs/sym_ewram.txt
Youpeoples 69f931d646
Some checks failed
CI / build (push) Has been cancelled
Mass naming: Ball/PinballGame Unk variables, function names (#210)
* sha1 compliant

fingers crossed

* oops. You need these too.

missing files.

* renames

* renames 2

* renames 4

* more renames

347 replacements, 31 files. SHA1 verified.

## Ramp Prize (was "rubyPondBumper")

- `rubyPondBumperHitFlag` -> `rampPrizeType` -- controls Nuzleaf ramp prize (0=none, 1=1UP, 2-100=powerUp). Not pond-related at all, it's the prize platform at the top of the Ruby ramp.
- `rubyPondBumperTimer` -> `rampPrizeRespawnTimer` -- 600-frame cooldown before ramp prize respawns with random type.

Files: global.h, board_process3_ruby.c, collision_checks.c, ruby_ramp_entities.c + PC port (26 total)

## Screen Shake

- `horizontalShakeOffset` -> `screenShakeX` -- X-axis camera shake (Whiscash + Rayquaza). Shorter, clearer.
- `bonusBoardYOffset` -> `screenShakeY` -- Y-axis camera shake (Rayquaza + Groudon, bonus stages only). Pairs with screenShakeX.

Files: global.h, board_process2.c, board_process3_rayquaza.c, board_process3_groudon.c, board_process7.c, ruby_board_entities.c + PC port (44 total)

## Gauntlet Flash (drop "Boss")

- `gauntletBossFlashTimer` -> `gauntletFlashTimer` -- not a boss fight, it's a projectile launcher board feature. "Boss" was misleading.
- `gauntletBossFlashActive` -> `gauntletFlashActive` -- same. The `gauntletProjectile*` fields were already correct and kept as-is.

Files: global.h, collision_checks.c, ruby_board_entities.c + PC port (20 total)

## Egg Delivery System (was "TravelMode"/"EvolutionMode")

Two delivery paths exist after the hatch cave: Pelipper (rare, Totodile) and egg drop (common, Aerodactyl). The old names "Travel" and "Evolution" referred to the delivery mechanism, not the game modes of the same name. This was confusing.

Fields:
- `travelSpriteFrame` -> `pelipperDeliveryFrame`
- `pikaSaverAnimFrameTimer` -> `pelipperDeliveryTimer` -- "PikaSaver" was a leftover decompilation artifact
- `modeSpriteTimer` -> `eggDropTimer`
- `modeSpriteX` -> `eggDeliveryX`
- `modeSpriteY` -> `eggDeliveryY`
- `modeSpriteVelX` -> `eggDeliveryVelX`
- `modeSpriteVelY` -> `eggDeliveryVelY`
- `eggAnimTravelState` -> `eggDeliveryState` -- dropped misleading "Travel"

Functions:
- `InitTravelModeSprites` -> `InitPelipperEggDelivery`
- `AnimateTravelModeSprite` -> `AnimatePelipperEggDelivery`
- `InitEvolutionModeSprites` -> `InitEggDropDelivery`
- `AnimateEvolutionModeSprite` -> `AnimateEggDropDelivery`

Files: global.h, functions.h, catch_hatch_animations.c, ruby_catch_mode.c + PC port (132 total)

## Catch Hole Animation (was "sharpedo")

- `sharpedoOamIndex` -> `catchHoleAnimFrame` -- used by both Sharpedo (Ruby) and Wailmer (Sapphire). Named after the shared mechanic, matches adjacent `catchHolePauseTimer`.
- `sharpedoTileVariant` -> `catchHoleTileVariant` -- same, shared between both boards.

Files: global.h, ruby_catch_mode.c, board_process3_sapphire.c, ruby_board_entities.c, sapphire_board_entities.c, pinball_game_main.c + PC port (73 total)

* more renames

362 replacements across 28 files. GBA ROM SHA1 verified.

## Renames

### gravityFrozen -> ballGrabbed
This field is set to 1 when a legendary boss grabs the ball during its attack sequence, and cleared to 0 when the ball is released. The old name described what happens as a side effect (gravity stops updating), but the actual state being tracked is whether the boss is holding the ball. Used by Kyogre, Groudon, and Rayquaza boss fights.

### bossColorState -> kecleonFramesetBase
Only used by the Kecleon bonus stage. It stores a base animation frameset index derived from Kecleon's movement direction angle (via `gKecleonVisibleWalkDirectionMap`), then various offsets are added to select specific walk/stand/fall frames. Nothing to do with color.

### bossSubEntityState -> dusclopsWalkFootIndex
Only used by the Dusclops bonus stage. Cycles through values 0-4 to track which foot Dusclops is leading with during its walk cycle. The parity (`& 1`) determines animation direction. Other bonus stages initialize it to 0 and never touch it again.

### kecleonHitState -> kecleonBoardHitState
Tracks collision with any of the 14 berry zones on the Kecleon board (4 large + 10 small, collision cases 8-12), not just Kecleon's body being hit directly. The broader name better reflects that this covers all scope/berry overlay collisions.

### catchSpinRadius -> trapSpinRadius
### captureAngleQ16 -> trapAngleQ16
These two fields control the ball's spiral orbit during trap captures (boss fights, center hole traps, Jirachi bonus). They are not used by the regular catch system (Sharpedo hole). The old names mixed "catch" and "capture" inconsistently and were ambiguous with the separate catch mode. "trap" distinguishes this mechanic clearly.

### travelPelipperPosX/PosY/VelX/VelY -> travelPainterPosX/PosY/VelX/VelY
### gRubyTravelPelipper_Gfx -> gRubyTravelVolbeat_Gfx
### gSapphireTravelPelipper_Gfx -> gSapphireTravelIllumise_Gfx
The travel cutscene entity is Volbeat (Ruby board) and Illumise (Sapphire board), not Pelipper. The actual Pelipper has its own separate fields (`pelipperState`, `pelipperPosX`, `pelipperPosY` at offsets 0x306-0x322) and its own graphics (`gPelipper_Gfx` from `pelipper.4bpp`). The travel sprites at ROM 0x08483D8C / 0x08488A0C are 44-53% different from real Pelipper pixel data, and the Ruby and Sapphire variants differ from each other by 22-37% per frame, consistent with two distinct but related Pokemon. The previous "travelPelipper" labels were a misidentification.

### rouletteSpeciesId -> rouletteAreaIndex
This array stores area-based portrait indices (0-12) used to look up graphics sets, not actual species IDs. The lookup table `gAreaToSpeciesTable` is essentially an identity mapping (area N maps to index N). The old name made it sound like the roulette was selecting a specific Pokemon species, when it is selecting an area index for portrait rendering.

## Source File Reverts

17 source files reverted from descriptive names back to their original ROM-offset names. The `ld_script.txt` linker order was updated to match.

| Descriptive Name | Reverted To |
|------------------|-------------|
| `interrupt_handlers.c` | `rom_850.c` |
| `text_graphics_util.c` | `rom_1068C.c` |
| `banner_camera.c` | `rom_1A0F4.c` |
| `ruby_catch_mode.c` | `rom_1A98C.c` |
| `ruby_board_entities.c` | `rom_201B8.c` |
| `catch_hatch_animations.c` | `rom_27E08.c` |
| `catch_roulette_rendering.c` | `rom_27F94.c` |
| `sprite_link_init.c` | `rom_2414.c` |
| `ruby_ramp_entities.c` | `rom_2C538.c` |
| `sapphire_board_entities.c` | `rom_2E67C.c` |
| `sapphire_egg_cave.c` | `rom_30480.c` |
| `sapphire_visual_effects.c` | `rom_31BE8.c` |
| `capture_registry.c` | `rom_31CF8.c` |
| `bonus_stage_transitions.c` | `rom_356A0.c` |
| `board_layout_init.c` | `rom_467F4.c` |
| `ruby_hud_animations.c` | `rom_4F258.c` |
| `sapphire_hud_animations.c` | `rom_50AD4.c` |

* removal

Removed duplicated & unwanted renames

* renames

## Changes Made

### Misidentified Pokemon Entities (6 functions + 2 fields)

Wrong Pokemon names from initial decompilation. Corrected based on in-game sprite identification.

| Old Name | New Name | File | Notes |
|----------|----------|------|-------|
| `InitPelipperEggDelivery` | `InitTotodileEggDelivery` | rom_27E08.c | Sprite group 82; Totodile carries egg when `rubyPondState == RUBY_POND_STATE_LOTAD` |
| `AnimatePelipperEggDelivery` | `AnimateTotodileEggDelivery` | rom_27E08.c | Same entity |
| `InitEggDropDelivery` | `InitAerodactylEggDelivery` | rom_27E08.c | Sprite group 12; Aerodactyl flies in with the egg |
| `AnimateEggDropDelivery` | `AnimateAerodactylEggDelivery` | rom_27E08.c | Same entity |
| `UpdateGauntletBossAnimation` | `UpdateChikoritaAttackAnimation` | rom_201B8.c | Sprite groups 13-14; Chikorita shoots leaf projectiles at bumpers |
| `AnimateGauntletBossSprite` | `AnimateChikoritaSprite` | rom_201B8.c | Sprite group 53, flash animation |
| `pelipperDeliveryFrame` | `totodileDeliveryFrame` | global.h (0x2C3) | Misattributed to Pelipper |
| `pelipperDeliveryTimer` | `totodileDeliveryTimer` | global.h (0x2C4) | Same |

### Chikorita Fields (7 fields, 0x2B0-0x2BC)

| Old | New |
|-----|-----|
| `gauntletFlashTimer` | `chikoritaFlashTimer` |
| `gauntletFlashActive` | `chikoritaFlashActive` |
| `gauntletProjectileX` | `chikoritaProjectileX` |
| `gauntletProjectileY` | `chikoritaProjectileY` |
| `gauntletProjectileVelX` | `chikoritaProjectileVelX` |
| `gauntletProjectileUnused` | `chikoritaProjectileUnused` |
| `gauntletProjectileTimer` | `chikoritaProjectileTimer` |

### Chikorita Data Labels (3)

| Old | New |
|-----|-----|
| `gGauntletExplosionTiles` | `gChikoritaExplosionTiles` |
| `gGauntletProjectileTiles` | `gChikoritaProjectileTiles` |
| `gGauntletBossFlashFrameIndices` | `gChikoritaFlashFrameIndices` |

### Spheal Stage Entity Disambiguation (3 functions + 1 struct + 1 data label)

The Spheal bonus stage has two Pokemon: Spheal (flying enemies) and Sealeo (ground minions that get knocked down). Functions were lumping both under "Spheal."

| Old Name | New Name | Notes |
|----------|----------|-------|
| `UpdateSphealMinionLogic` | `UpdateSealeoEntityLogic` | "Minions" use `minionState`/`minionFramesetIx` - these are Sealeo |
| `UpdateSphealFlyingEnemyLogic` | `UpdateSphealEntityLogic` | Flying enemies ARE Spheal; dropped redundant "FlyingEnemy" |
| `UpdateSphealKnockdownPhysics` | `UpdateSealeoKnockdownPhysics` | Knockdown targets are Sealeo (operates on `minionState[var0]`) |
| `struct FlyingEnemyPath` | `struct SphealFlightPath` | Flight path data for Spheal patterns |
| `gSphealFlyingEnemyPathData` | `gSphealFlightPathData` | Matching struct rename |

### Ruby Board Distinction (4 functions)

These are Ruby-only but lacked the "Ruby" prefix. Sapphire counterparts already had it.

| Old Name | New Name |
|----------|----------|
| `DispatchCatchModeInit` | `DispatchRubyCatchModeInit` |
| `UpdateCatchModeAnimation` | `UpdateRubyCatchModeAnimation` |
| `InitEvolutionShopMode` | `InitRubyEvolutionShopMode` |
| `AnimateEvolutionShopSequence` | `AnimateRubyEvolutionShopSequence` |

### Improved Descriptiveness (3 functions + 2 data labels + 1 field)

| Old Name | New Name | Notes |
|----------|----------|-------|
| `ProcessMainBoardBallDrain` | `ProcessMainBoardBallDrainAndLaunch` | Also handles plunger charging/launch (lines 421-438) |
| `HideCaughtPokemonSprite` | `CleanupCaughtPokemonSprite` | Sets OAM off-screen AND sets `available=0` |
| `HideJirachiSprites` | `CleanupJirachiSprites` | Hides sprite group 33 AND deactivates 4 star tag groups (45-48) |
| `gMonIconTilesGfx` | `gPikaSaverTilesGfx` | Pikachu saver icon tiles, indexed via `gPikaSaverAnimFrameTable` |
| `monIconTileIndex` | `pikaSaverTileIndex` | Indexes into `gPikaSaverTilesGfx` |
| `field` (0x10FD) | `savedField` | Adjacent fields are `savedTempField`, `savedIsBonusField`, etc. |

### Comments Added (4)

| Location | Comment |
|----------|---------|
| `progressLevel` (0x70E) | Becomes bonusMultiplier at end-of-ball; displayed on the blue bonus sign |
| `ballLaunchTimer` (0x1328) | Countdown to activate secondaryBall (multiball) |
| Fields 0x1106-0x110E | Values applied by the pause process (set when pausing) |
| Fields 0x1110-0x1118 | Values preserved from before pause (restored when unpausing) |
2026-03-15 19:40:33 -05:00

584 lines
14 KiB
Plaintext

gPinballGameState: @ 0x02000000
.space 0x2000
sGbPlayerCurKeys: @ 0x2002000
.space 0x2
sGbPlayerPrevKeys: @ 0x2002002
.space 0x6
gGbPlayerTilemapBuffer: @ 0x2002008
.space 0x800
gSio32Id: @ 0x2002808
.space 0xC
gSio32SendData: @ 0x02002814
.space 0x4
gSio32ReceivedData: @ 0x02002818
.space 0x4
gSio32RemoteDeviceId: @ 0x0200281C
.space 0x4
sChecksumAvailable: @ 0x02002820
.space 0x2
gLinkSavedIme: @ 0x02002822
.space 0x2
sNumVBlanksWithoutSerialIntr: @ 0x02002824
.space 0x1
sSendBufferEmpty: @ 0x02002825
.space 0x1
sLinkFlowControlDelay: @ 0x02002826
.space 0x1
sHandshakePlayerCount: @ 0x02002827
.space 0x1
sSendNonzeroCheck: @ 0x02002828
.space 0x2
sRecvNonzeroCheck: @ 0x0200282A
.space 0x2
gEReaderUnused1: @ 0x0200282C
.space 0x1
gEReaderUnused2: @ 0x0200282D
.space 0x3
gPokedex_EraseSaveDataAccessCounter: @ 0x02002830
.space 0x1
gPokedex_EraseSaveDataAccessStep: @ 0x02002831
.space 0x7
gFieldSelectData: @ 0x02002838
.space 0x18
gFieldSelectSoftReset: @ 0x02002850
.space 0x8
gHighScoreScreenState: @ 0x02002858
.space 0x25
gHighScoreDisplayMode: @ 0x0200287D
.space 0x3
gScrollDirection: @ 0x02002880
.space 0x2
gScrollXOffset: @ 0x02002882
.space 0x2
gResetComboTimer: @ 0x02002884
.space 0x1
gResetComboCount: @ 0x02002885
.space 0x3
gTitlescreen: @ 0x2002888
.space 0x18
gEraseSaveDataAccessStep: @ 0x20028A0
.space 0x1
gEraseSaveDataAccessCounter: @ 0x20028A1
.space 0x1
gEReaderAccessStep: @ 0x20028A2
.space 0x1
gEReaderAccessCounter: @ 0x20028A3
.space 0x1
gTitleTransitionActive: @ 0x20028A4
.space 0x1
gTitleRestartDebounce: @ 0x20028A5
.space 0x3
gPaletteFadeRGBCache: @ 0x020028A8
.space 0x30
CurrentBoardProcPairs_020028D8: @ 0x020028D8
.space 0x48
gOptionsData: @ 0x02002920
.space 0x12
gOptionsBGMDigitTileIds: @ 0x02002932
.space 0x3
gOptionsSEDigitTileIds: @ 0x02002935
.space 0x5
gOptionsButtonConfigEditFlags: @ 0x0200293A
.space 0x1E
gDpcmSampleBuffer: @ 0x2002958
.space 0x40
gMPlayTrack_BGM: @ 0x2002998
.space 0x320
gMPlayTrack_SE1: @ 0x2002CB8
.space 0xF0
gMPlayTrack_SE2: @ 0x2002DA8
.space 0xF0
gMPlayTrack_SE3: @ 0x2002E98
.space 0xA0
verifySramFast_Work: @ 0x02002F38
.space 0xA0
readSramFast_Work: @ 0x02002FD8
.space 0x88
gIntrTable: @ 0x2003060
.space 0x40
gBoardBGTileBufferAlt: @ 0x020030A0
.space 0x8020
gMain: @ 0x200B0C0
.space 0x40
.space 0x34
.space 0x5A
@ These are all entries in gMain.spriteGroups
gMain_saveData_pokedexFlags_90: @ 0x0200B18E
.space 0x76
gMain_saveData_customButtonConfig: @ 0x0200B204
.space 0x14
gMain_saveData_highscores: @ 0x0200B218
.space 0x14
gMain_saveData_highscores_1_scoreLo: @ 0x0200B22C
.space 0x18C
gMain_spriteGroups: @ 0x0200B3B8
.space 0xB8
gMain_spriteGroups_1: @ 0x0200B470
.space 0xB8
gMain_spriteGroups_2: @ 0x0200B528
.space 0xB8
gMain_spriteGroups_3: @ 0x0200B5E0
.space 0xB8
gMain_spriteGroups_4: @ 0x0200B698
.space 0xB8
gMain_spriteGroups_5: @ 0x0200B750
.space 0xB8
gMain_spriteGroups_6: @ 0x0200B808
.space 0xB8
gMain_spriteGroups_7: @ 0x0200B8C0
.space 0xB8
gMain_spriteGroups_8: @ 0x0200B978
.space 0xB8
gMain_spriteGroups_9: @ 0x0200BA30
.space 0xB8
gMain_spriteGroups_10: @ 0x0200BAE8
.space 0xB8
gMain_spriteGroups_11: @ 0x0200BBA0
.space 0xB8
gMain_spriteGroups_12: @ 0x0200BC58
.space 0xB8
gMain_spriteGroups_13: @ 0x0200BD10
.space 0xB8
gMain_spriteGroups_14: @ 0x0200BDC8
.space 0xB8
gMain_spriteGroups_15: @ 0x0200BE80
.space 0xB8
gMain_spriteGroups_16: @ 0x0200BF38
.space 0xB8
gMain_spriteGroups_17: @ 0x0200BFF0
.space 0xB8
gMain_spriteGroups_18: @ 0x0200C0A8
.space 0xB8
gMain_spriteGroups_19: @ 0x0200C160
.space 0xB8
gMain_spriteGroups_20: @ 0x0200C218
.space 0xB8
gMain_spriteGroups_21: @ 0x0200C2D0
.space 0xB8
gMain_spriteGroups_22: @ 0x0200C388
.space 0xB8
gMain_spriteGroups_23: @ 0x0200C440
.space 0xB8
gMain_spriteGroups_24: @ 0x0200C4F8
.space 0xB8
gMain_spriteGroups_25: @ 0x0200C5B0
.space 0xB8
gMain_spriteGroups_26: @ 0x0200C668
.space 0x170
gMain_spriteGroups_28: @ 0x0200C7D8
.space 0xB8
gMain_spriteGroups_29: @ 0x0200C890
.space 0xB8
gMain_spriteGroups_30: @ 0x0200C948
.space 0xB8
gMain_spriteGroups_31: @ 0x0200CA00
.space 0xB8
gMain_spriteGroups_32: @ 0x0200CAB8
.space 0x170
gMain_spriteGroups_34: @ 0x0200CC28
.space 0x170
gMain_spriteGroups_36: @ 0x0200CD98
.space 0x2E0
gMain_spriteGroups_40: @ 0x0200D078
.space 0x228
gMain_spriteGroups_43: @ 0x0200D2A0
.space 0x170
gMain_spriteGroups_45: @ 0x0200D410
.space 0x170
gMain_spriteGroups_47: @ 0x0200D580
.space 0xB8
gMain_spriteGroups_48: @ 0x0200D638
.space 0x228
gMain_spriteGroups_51: @ 0x0200D860
.space 0xB8
gMain_spriteGroups_52: @ 0x0200D918
.space 0x8
gMain_spriteGroups_52_oam: @ 0x0200D920
.space 0xB0
gMain_spriteGroups_53: @ 0x0200D9D0
.space 0x2E0
gMain_spriteGroups_57: @ 0x0200DCB0
.space 0xB8
gMain_spriteGroups_58: @ 0x0200DD68
.space 0xB8
gMain_spriteGroups_59: @ 0x0200DE20
.space 0xB8
gMain_spriteGroups_60: @ 0x0200DED8
.space 0xB8
gMain_spriteGroups_61: @ 0x0200DF90
.space 0xB8
gMain_spriteGroups_62: @ 0x0200E048
.space 0xB8
gMain_spriteGroups_63: @ 0x0200E100
.space 0xB8
gMain_spriteGroups_64: @ 0x0200E1B8
.space 0xB8
gMain_spriteGroups_65: @ 0x0200E270
.space 0x8
gMain_spriteGroups_65_oam: @ 0x0200E278
.space 0xB0
gMain_spriteGroups_66: @ 0x0200E328
.space 0x170
gMain_spriteGroups_68: @ 0x0200E498
.space 0xB8
gMain_spriteGroups_69: @ 0x0200E550
.space 0xB8
gMain_spriteGroups_70: @ 0x0200E608
.space 0xB8
gMain_spriteGroups_71: @ 0x0200E6C0
.space 0x2E0
gMain_spriteGroups_75: @ 0x0200E9A0
.space 0xB8
gMain_spriteGroups_76: @ 0x0200EA58
.space 0x170
gMain_spriteGroups_78: @ 0x0200EBC8
.space 0x2E0
gMain_spriteGroups_82: @ 0x0200EEA8
.space 0xCF0
@main object ends in the middle of the above space.
gVBlankIntrFuncPtr: @ 0x200FB98
.space 0x4
gMainCallback: @ 0x200FB9C
.space 0x4
gVCountIntrFuncShadow: @ 0x200FBA0
.space 0x10
gBoardGfxBuffer: @ 0x0200FBB0
.space 0x8020
gVBlankIntrFuncShadow: @ 0x2017BD0
.space 0x4
gMainCallbackShadow: @ 0x2017BD4
.space 0xC
gUnknown_02017BE0: @ 0x2017BE0
.space 0x2000
gVCountIntrFuncPtr: @ 0x2019BE0
.space 0x4
gRumbleLoopCounter: @ 0x2019BE4
.space 0x4
gRumbleFrameCounter: @ 0x2019BE8
.space 0x4
gRumbleMotorMode: @ 0x02019BEC
.space 0x4
gSio32ReconnectTimer: @ 0x02019BF0
.space 0x4
gSio32SerialEnabled: @ 0x02019BF4
.space 0x4
gRumblePatternIndex: @ 0x2019BF8
.space 0x4
gRumblePatternPosition: @ 0x2019BFC
.space 0x4
gRumbleCommand: @ 0x02019C00
.space 0x4
gRumblePaused: @ 0x2019C04
.space 0x4
gRumbleSpeedMode: @ 0x2019C08
.space 0x4
gGameBoyPlayerEnabled: @ 0x2019C0C
.space 0x4
gSio32CommState: @ 0x02019C10
.space 0x10
gEReaderLinkDataReceived: @ 0x02019C20
.space 0x4
gPokedexScrollActive: @ 0x02019C24
.space 0x4
gPokedexSpriteIndexBase: @ 0x02019C28
.space 0x4
gLastSendQueueCount: @ 0x02019C2C
.space 0x4
gIntroScaleX: @ 0x02019C30
.space 0x10
gPokedexVramBuffer: @ 0x02019C40
.space 0x800
gPokedexSpriteAnimTimer: @ 0x0201A440
.space 0x4
gLinkTimeoutCounter: @ 0x0201A444
.space 0x4
gPokedexAnimatedIconFrame: @ 0x0201A448
.space 0x4
gEReaderGeneralTimer: @ 0x0201A44C
.space 0x4
gIntroSpriteEntities: @ 0x0201A450
.space 0x60
gBallSpeedSubmenuVisible: @ 0x0201A4B0
.space 0x4
gAutoDisplayTitlescreenMenu: @ 0x201A4B4
.space 0x4
gCompletionBannerY: @ 0x0201A4B8
.space 0x4
gLinkExchangeSendPhase: @ 0x0201A4BC
.space 0x4
gSelectedBallSpeed: @ 0x0201A4C0
.space 0x10
gLinkRecvBuffer: @ 0x0201A4D0
.space 0x20
gPokedexCursorBlinkOffset: @ 0x0201A4F0
.space 0x4
gBallSpeedDisplayToggle: @ 0x0201A4F4
.space 0x4
gSelectedBonusField: @ 0x0201A4F8
.space 0x8
gHighScoreNameEntry: @ 0x0201A500
.space 0x10
gLinkExchangeFrameCounter: @ 0x0201A510
.space 0x4
gPokedexNumOwned: @ 0x0201A514
.space 0x4
gUnknown_0201A518: @ 0x0201A518
.space 0x8
gPaletteFadeBuffers: @ 0x0201A520
.space 0xC00
gPokedexLinkStateTimer: @ 0x0201B120
.space 0x4
gLinkExchangeStep: @ 0x0201B124
.space 0x4
gPokedexLinkTransferPhase: @ 0x0201B128
.space 0x8
gGlyphLowerRowBuffer: @ 0x0201B130
.space 0x40
gMergedSapphireScoreIndex: @ 0x0201B170
.space 0x4
gEReaderTransitionStep: @ 0x0201B174
.space 0x4
gShowDialogFlag: @ 0x0201B178
.space 0x8
gIntroScene3_AltBG1TilemapBuffer: @ 0x0201B180
.space 0x1000
gPokedexLinkSendCounter: @ 0x0201C180
.space 0x4
gEReaderCardIndex: @ 0x0201C184
.space 0x4
gIntroScaleY: @ 0x0201C188
.space 0x4
gCompletionBannerVisible: @ 0x0201C18C
.space 0x4
gTitleNoSaveMenuSpriteSets: @ 0x0201C190
.space 0x1C
gLinkPlayerCount: @ 0x0201C1AC
.space 0x4
gLinkExchangeCommand: @ 0x0201C1B0
.space 0x4
gPokedexShowPageIndicator: @ 0x0201C1B4
.space 0x4
gIntroBlendSrc: @ 0x0201C1B8
.space 0x4
gPokedexMasterHandshakeState: @ 0x0201C1BC
.space 0x4
gIntroTileBuffer: @ 0x0201C1C0
.space 0xE000
gPokedexFlags: @ 0x0202A1C0
.space 0x1D0
gPokedexFlagExchangeBuffer: @ 0x0202A390
.space 0x1C4
sRecvQueueSnapshot: @ 0x0202A554
.space 0x4
gPokedexInfoWindowSlideStep: @ 0x0202A558
.space 0x4
gPokedexShowPortrait: @ 0x0202A55C
.space 0x4
gBonusFieldSelectTimer: @ 0x0202A560
.space 0x4
gEReaderLinkHandshakeStarted: @ 0x0202A564
.space 0x4
gPokedexShowCatchHatch: @ 0x0202A568
.space 0x4
gIntroBGWhiteFlash: @ 0x0202A56C
.space 0x8
gPokedexListEntryCount: @ 0x0202A574
.space 0x4
gIntroAnimStep: @ 0x0202A578
.space 0x4
gPokedexCursorOffset: @ 0x0202A57C
.space 0x4
gEReaderTextAnimDelay: @ 0x0202A580
.space 0x8
gPokedexShowAnimSprite: @ 0x0202A588
.space 0x4
gEReaderStatusSpriteIndex: @ 0x0202A58C
.space 0x4
gPokedexInfoWindowBackupTiles: @ 0x0202A590
.space 0x800
gEReaderTextPageIndex: @ 0x0202AD90
.space 0x10
gIntroBGParams: @ 0x0202ADA0
.space 0x30
gLinkStatusResult: @ 0x0202ADD0
.space 0x4
gIntroBlendDst: @ 0x0202ADD4
.space 0x4
gIntroWailmerScaleY: @ 0x0202ADD8
.space 0x4
gLinkNegotiationFlags: @ 0x0202ADDC
.space 0x4
gPokedexSelectedMon: @ 0x0202ADE0
.space 0x4
gLinkExchangeResult: @ 0x0202ADE4
.space 0x4
gEReaderLinkAckSent: @ 0x0202ADE8
.space 0x1008
gLinkConnectionState: @ 0x0202BDF0
.space 0x10
gTitleSavedMenuSpriteSets: @ 0x0202BE00
.space 0x1C
gBonusFieldLoadingCounter: @ 0x0202BE1C
.space 0x4
gPokedexBlinkTimer: @ 0x0202BE20
.space 0x4
gTitleReturnedFromMenu: @ 0x202BE24
.space 0xC
gGlyphUpperRowBuffer: @ 0x0202BE30
.space 0x40
gIntroPalSwapBuffer: @ 0x0202BE70
.space 0x40
gCompletionBannerDone: @ 0x0202BEB0
.space 0x4
gIntroScene6EntitySpawnIndex: @ 0x0202BEB4
.space 0x4
gPokedexNumSeen: @ 0x0202BEB8
.space 0x4
gDialogType: @ 0x0202BEBC
.space 0x4
gEReaderHeaderSpriteIndex: @ 0x0202BEC0
.space 0x4
gPokedexShowPopupWindow: @ 0x0202BEC4
.space 0x4
gLinkAdvanceState: @ 0x0202BEC8
.space 0x4
gPokedexHandshakeRetryCount: @ 0x0202BECC
.space 0x4
gBonusFieldSelectState: @ 0x0202BED0
.space 0x4
gCompletionBannerPhase: @ 0x0202BED4
.space 0x4
gMergedRubyScoreIndex: @ 0x0202BED8
.space 0x4
gIntroObjWhiteFlash: @ 0x0202BEDC
.space 0x4
gPokedexButtonPromptFrame: @ 0x0202BEE0
.space 0x4
gBonusFieldSelectNextMainState: @ 0x0202BEE4
.space 0x4
gBonusFieldHighlightPalette: @ 0x0202BEE8
.space 0x4
gEReaderReceivedCardId: @ 0x0202BEEC
.space 0x4
gIntroPalFadeLevel: @ 0x0202BEF0
.space 0x4
gPokedexPageIndicatorTimer: @ 0x0202BEF4
.space 0x4
gEReaderExitTargetState: @ 0x0202BEF8
.space 0x4
gPokedexPopupTypeIndex: @ 0x0202BEFC
.space 0x4
gPokedexAnimatedIconTimer: @ 0x0202BF00
.space 0x4
gPokedexShowButtonPrompt: @ 0x0202BF04
.space 0x4
gPokedexScrollbarY: @ 0x0202BF08
.space 0x4
gPokedexSpriteAnimFrame: @ 0x0202BF0C
.space 0x4
gIntroFrameCounter: @ 0x0202BF10
.space 0x4
gPokedexSpriteCategory: @ 0x0202BF14
.space 0xC
gLink: @ 0x0202BF20
.space 0x624
gPokedexClientHandshakeState: @ 0x0202C544
.space 0x4
gIntroScene6VelocityIndex: @ 0x0202C548
.space 0x4
gLinkExchangeTimeout: @ 0x0202C54C
.space 0x4
gRemoteTopScores: @ 0x0202C550
.space 0x30
gCompletionBannerFrame: @ 0x0202C580
.space 0x4
gEReaderStatusSpriteVisible: @ 0x0202C584
.space 0x4
gHighScoreEntrySource: @ 0x202C588
.space 0x4
gPokedexScrollWaitFrames: @ 0x0202C58C
.space 0x4
gPokedexShowLinkCableIcon: @ 0x0202C590
.space 0x4
gIntroOverlayFadeStep: @ 0x0202C594
.space 0x4
gLinkExchangeRecvPhase: @ 0x0202C598
.space 0x4
gLinkPacketCounter: @ 0x0202C59C
.space 0x4
gEReaderTransitionTimer: @ 0x0202C5A0
.space 0x4
gEReaderTextBlinkToggle: @ 0x0202C5A4
.space 0x4
gIntroJingleVariant: @ 0x0202C5A8
.space 0x4
gPokedexPageIndicatorBlink: @ 0x0202C5AC
.space 0x4
gPokedexListPosition: @ 0x0202C5B0
.space 0x4
gPokedexLinkChunkIndex: @ 0x0202C5B4
.space 0xC
gScoreDigitBuffer: @ 0x0202C5C0
.space 0x20
sLinkMasterHandshakeState: @ 0x0202C5E0
.space 0x4
gIntroWailmerScaleX: @ 0x0202C5E4
.space 0x4
gPokedexDetailFrameCount: @ 0x0202C5E8
.space 0x8
gLinkSendBuffer: @ 0x0202C5F0
.space 0x14
gEReaderTextCharIndex: @ 0x0202C604
.space 0xC
gWorkingHighScores: @ 0x0202C610
.space 0x14
gUnknown_0202C624: @ 0x0202C624
.space 0xAC
gUnknown_0202C6D0: @ 0x0202C6D0
.space 0x14
gUnknown_0202C6E4: @ 0x0202C6E4
.space 0xAC
gIntroSceneIndex: @ 0x0202C790
.space 0x4
gPokedexDescriptionPage: @ 0x0202C794
.space 0xC
gCatchSpriteFrameBuffer: @ 0x0202C7A0
.space 0xFC0
gCatchAnimTileBuffer: @ 0x0202D760
.space 0x120
gKecleonSpriteSets: @ 0x0202D880
.space 0x2E40
gGameOverLetterXOffsets: @ 0x020306C0
.space 0x10
gCatchSpritePalettes: @ 0x020306D0
.space 0x20
gCatchSequencePalA: @ 0x020306F0
.space 0x20
gCatchSequencePalB: @ 0x02030710
.space 0x20
gCatchSequencePalC: @ 0x02030730
.space 0x20
gGameOverLetterAmplitudes: @ 0x02030750
.space 0x10
gCatchSpriteGfxBuffer: @ 0x02030760
.space 0x900
gCatchSpriteFlashGfx: @ 0x02031060
.space 0x480
gCurrentPinballGame: @ 0x20314E0
.space 0x20
gGameOverLetterYOffsets: @ 0x02031500
.space 0x10
gReplayFrameCounter: @ 0x02031510
.space 0x10
gBoardConfig: @ 0x2031520
.space 0x70
gKecleonSpriteOrderMap: @ 0x02031590
.space 0x40
gCatchSpritePaletteBuffer: @ 0x020315D0
.space 0x520
gCustomButtonConfigs: @ 0x02031AF0
.space 0x28
gCustomButtonConfigTileIds: @ 0x02031B18
.space 0x18