From 76dbb41a2f9616e06ac475425832481fa9fd48f9 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 2 Jul 2017 17:29:36 -0500 Subject: Move game object collision logic into separate files for each stage --- engine/pinball_game.asm | 2 +- .../blue_stage_resolve_collision.asm | 8068 ++++++++++++++++++ .../diglett_bonus_resolve_collision.asm | 783 ++ .../gengar_bonus_resolve_collision.asm | 1445 ++++ .../meowth_bonus_resolve_collision.asm | 3380 ++++++++ .../mewtwo_bonus_resolve_collision.asm | 750 ++ .../object_collision/object_collision.asm | 51 + .../red_stage_resolve_collision.asm | 8730 ++++++++++++++++++++ .../seel_bonus_resolve_collision.asm | 2807 +++++++ 9 files changed, 26015 insertions(+), 1 deletion(-) create mode 100755 engine/pinball_game/object_collision/blue_stage_resolve_collision.asm create mode 100755 engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm create mode 100755 engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm create mode 100755 engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm create mode 100755 engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm create mode 100755 engine/pinball_game/object_collision/red_stage_resolve_collision.asm create mode 100755 engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm (limited to 'engine') diff --git a/engine/pinball_game.asm b/engine/pinball_game.asm index 08e821c..23c6490 100755 --- a/engine/pinball_game.asm +++ b/engine/pinball_game.asm @@ -89,7 +89,7 @@ GameScreenFunction_HandleBallPhysics: ; 0xd909 ld [wCollisionForceAngle], a .noFlipperCollision call CheckGameObjectCollisions - call Func_281c ; not collision-related + call ResolveGameObjectCollisions ld hl, wKeyConfigMenu call IsKeyPressed jr z, .didntPressMenuKey diff --git a/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm new file mode 100755 index 0000000..056f0fe --- /dev/null +++ b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm @@ -0,0 +1,8068 @@ +ResolveBlueFieldTopGameObjectCollisions: ; 0x1c715 + call ResolveShellderCollision + call ResolveBlueStageSpinnerCollision + call ResolveBlueStagePinballUpgradeTriggersCollision + call HandleBlueStageBallTypeUpgradeCounter + call Func_1e66a + call ResolveBlueStageBoardTriggerCollision + call ResolveBlueStagePikachuCollision + call ResolveSlowpokeCollision + call ResolveCloysterCollision + call Func_1ea3b + call ResolvePsyduckPoliwagCollision + call ResolveBlueStageForceFieldCollision + call Func_1e9c0 + call Func_1c8b6 + call Func_1f18a + callba Func_146a9 + call Func_1f27b + call Func_1df15 + callba Func_30188 + ld a, $0 + callba Func_10000 + ret + +ResolveBlueFieldBottomGameObjectCollisions: ; 0x1c769 + call Func_1ca4a + call Func_1ce40 + call ResolvePsyduckPoliwagCollision + call Func_1ca85 + call Func_1e4b8 + call HandleBlueStageBallTypeUpgradeCounter + call Func_1e5c5 + call Func_1c7d7 + call ResolveBlueStagePikachuCollision + call Func_1ead4 + call ResolveBlueStageBonusMultiplierCollision + call Func_1e757 + call Func_1e9c0 + call Func_1ea0a + call Func_1c8b6 + callba Func_14733 + callba Func_146a2 + call Func_1f261 + call Func_1de93 + callba Func_30188 + ld a, $0 + callba Func_10000 + ret + +Func_1c7c7: ; 0x1c7c7 + ld a, $0 + ld [wStageCollisionState], a + callba LoadStageCollisionAttributes + ret + +Func_1c7d7: ; 0x1c7d7 + ld a, [wPinballLaunchAlley] + and a + ret z + xor a + ld [wPinballLaunchAlley], a + ld a, [wd4de] + and a + jr z, .asm_1c810 + xor a + ld [wRightAlleyTrigger], a + ld [wLeftAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld hl, wBallXVelocity + ld [hli], a + ld [hl], a + ld [wBallSpin], a + ld [wBallRotation], a + ld a, $71 + ld [wBallYVelocity], a + ld a, $fa + ld [wBallYVelocity + 1], a + ld a, $1 + ld [wd549], a + lb de, $00, $0a + call PlaySoundEffect +.asm_1c810 + ld a, $ff + ld [wPreviousTriggeredGameObject], a + ld a, [wd4de] + and a + ret nz + ld a, [wd4e0] + and a + jr nz, .asm_1c82c + call Func_1c839 + ld a, $1 + ld [wd4e0], a + ld [wd4de], a + ret + +.asm_1c82c + ld hl, wKeyConfigBallStart + call IsKeyPressed + ret z + ld a, $1 + ld [wd4de], a + ret + +Func_1c839: ; 0x1c839 + ld a, [hGameBoyColorFlag] + and a + callba nz, LoadGreyBillboardPaletteData +.showNextMap + ld a, [wInitialMapSelectionIndex] + inc a + cp $7 ; number of maps to choose from at the start of play + jr c, .gotMapId + xor a ; wrap around to 0 +.gotMapId + ld [wInitialMapSelectionIndex], a + ld c, a + ld b, $0 + ld hl, BlueStageInitialMaps + add hl, bc + ld a, [hl] + ld [wCurrentMap], a + push af + lb de, $00, $48 + call PlaySoundEffect + pop af + add (PalletTownPic_Pointer - BillboardPicturePointers) / 3 ; map billboard pictures start at the $29th entry in BillboardPicturePointers + callba LoadBillboardPicture + ld b, $20 ; number of frames to delay before the next map is shown +.waitOnCurrentMap + push bc + callba Func_eeee + ld hl, wKeyConfigBallStart + call IsKeyPressed + jr nz, .ballStartKeyPressed + pop bc + dec b + jr nz, .waitOnCurrentMap + jr .showNextMap + +.ballStartKeyPressed + pop bc + callba Func_30253 + ld bc, StartFromMapText + callba Func_3118f + ld a, [wCurrentMap] + ld [wd4e3], a + xor a + ld [wd4e2], a + ret + +BlueStageInitialMaps: ; 0x1c8af + db VIRIDIAN_CITY + db VIRIDIAN_FOREST + db MT_MOON + db CERULEAN_CITY + db VERMILION_STREETS + db ROCK_MOUNTAIN + db CELADON_CITY + +Func_1c8b6: ; 0x1c8b6 + ld a, [wd64c] + inc a + cp $3c + jr z, .asm_1c8c2 + ld [wd64c], a + ret + +.asm_1c8c2 + xor a + ld [wd64c], a + ld hl, wd64d + inc [hl] + ld a, [hl] + cp $5 + ret nz + ld a, [wd644] + and a + jr nz, .asm_1c8e1 + ld a, [wd643] + and a + jr nz, .asm_1c8e5 + ld a, [wRightAlleyCount] + cp $2 + jr nc, .asm_1c8e5 +.asm_1c8e1 + xor a + ld [wd64b], a +.asm_1c8e5 + ld a, [wd644] + and a + jr nz, .asm_1c8f8 + ld a, [wd643] + and a + jr nz, .asm_1c8fc + ld a, [wLeftAlleyCount] + cp $3 + jr z, .asm_1c8fc +.asm_1c8f8 + xor a + ld [wd64b], a +.asm_1c8fc + xor a + ld [wd64d], a + xor a + ld [wd64a], a + ld [wd649], a + ld [wd648], a + ld a, [wBlueStageForceFieldDirection] + cp $1 ; right direction + jr z, .asm_1c97f + cp $3 ; left direction + jr z, .asm_1c97f +.asm_1c915 + ld a, [wd644] + cp $0 + jr z, .asm_1c925 + ld a, [wd55a] + cp $0 + jr nz, .asm_1c933 + jr .asm_1c947 + +.asm_1c925 + ld a, [wd643] + cp $0 + jr nz, .asm_1c933 + ld a, [wRightAlleyCount] + cp $2 + jr c, .asm_1c947 +.asm_1c933 + ld a, [wd64b] + cp $1 + jr z, .asm_1c947 + ld a, $1 ; right direction + ld [wBlueStageForceFieldDirection], a + ld [wd64b], a + ld [wd640], a + jr .asm_1c99e + +.asm_1c947 + ld a, [wd644] + cp $0 + jr z, .asm_1c955 + ld a, [wd55a] + cp $0 + jr z, .asm_1c969 +.asm_1c955 + ld a, [wd643] + cp $0 + jr nz, .asm_1c969 + ld a, [wLeftAlleyCount] + cp $3 + jr nz, .asm_1c97f + ld a, [wInSpecialMode] + and a + jr nz, .asm_1c97f +.asm_1c969 + ld a, [wd64b] + cp $3 + jr z, .asm_1c915 + ld a, $3 ; left direction + ld [wBlueStageForceFieldDirection], a + ld [wd64b], a + ld a, $1 + ld [wd640], a + jr .asm_1c99e + +.asm_1c97f + ld a, [wd641] + and a + jr nz, .asm_1c993 + xor a + ld [wBlueStageForceFieldDirection], a + ld a, $1 + ld [wd640], a + ld [wd64a], a + jr .asm_1c99e + +.asm_1c993 + ld a, $2 ; down direction + ld [wBlueStageForceFieldDirection], a + ld a, $1 + ld [wd640], a + ret + +.asm_1c99e + ld a, [wBlueStageForceFieldDirection] + cp $0 ; up direction + jr nz, .asm_1c9ac + ld a, $1 + ld [wd64a], a + jr .asm_1c9c0 + +.asm_1c9ac + cp $1 + jr nz, .asm_1c9b7 + ld a, $1 + ld [wd649], a + jr .asm_1c9c0 + +.asm_1c9b7 + cp $3 + jr nz, .asm_1c9c0 + ld a, $1 + ld [wd648], a +.asm_1c9c0 + ret + +ResolveShellderCollision: ; 0x1c9c1 + ld a, [wWhichShellder] + and a + jr z, .noCollision + xor a + ld [wWhichShellder], a + call Func_1ca29 + ld a, [wd641] + and a + jr nz, .asm_1c9f2 + ld a, $1 + ld [wd641], a + ld a, [wBlueStageForceFieldDirection] + cp $0 ; up direction + jr nz, .asm_1c9f2 + ld a, $2 ; down direction + ld [wBlueStageForceFieldDirection], a + ld a, $1 + ld [wd640], a + ld a, $3 + ld [wd64c], a + ld [wd64d], a +.asm_1c9f2 + ld a, $10 + ld [wd4d6], a + ld a, [wWhichShellderId] + sub $3 + ld [wd4d7], a + ld a, $4 + callba Func_10000 + ld bc, FiveHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ret + +.noCollision + ld a, [wd4d6] + and a + ret z + dec a + ld [wd4d6], a + ret nz + ld a, $ff + ld [wd4d7], a + ret + +Func_1ca29: ; 0x1ca29 + ld a, $ff + ld [wd803], a + ld a, $3 + ld [wd804], a + ld hl, $0200 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + lb de, $00, $0e + call PlaySoundEffect + ret + +Func_1ca4a: ; 1ca4a + ld a, [wWildMonCollision] + and a + ret z + xor a + ld [wWildMonCollision], a + ld a, $1 + ld [wBallHitWildMon], a + lb de, $00, $06 + call PlaySoundEffect + ret + +ResolveBlueStageSpinnerCollision: ; 0x1ca5f + ld a, [wSpinnerCollision] + and a + jr z, Func_1ca85 + xor a + ld [wSpinnerCollision], a + ld a, [wBallYVelocity] + ld c, a + ld a, [wBallYVelocity + 1] + ld b, a + ld a, c + ld [wd50b], a + ld a, b + ld [wd50c], a + ld a, $c + callba Func_10000 + ; fall through + +Func_1ca85: ; 0x1ca85 + ld hl, wd50b + ld a, [hli] + or [hl] + ret z + ld a, [wd50b] + ld c, a + ld a, [wd50c] + ld b, a + bit 7, b + jr nz, .asm_1caa3 + ld a, c + sub $7 + ld c, a + ld a, b + sbc $0 + ld b, a + jr nc, .asm_1cab0 + jr .asm_1caad + +.asm_1caa3 + ld a, c + add $7 + ld c, a + ld a, b + adc $0 + ld b, a + jr nc, .asm_1cab0 +.asm_1caad + ld bc, $0000 +.asm_1cab0 + ld a, c + ld [wd50b], a + ld a, b + ld [wd50c], a + ld hl, wd50b + ld a, [wd509] + add [hl] + ld [wd509], a + inc hl + ld a, [wd50a] + adc [hl] + bit 7, a + ld c, $0 + jr z, .asm_1cad3 + add $18 + ld c, $1 + jr .asm_1cadb + +.asm_1cad3 + cp $18 + jr c, .asm_1cadb + sub $18 + ld c, $1 +.asm_1cadb + ld [wd50a], a + ld a, c + and a + ret z + ld bc, TenPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld hl, wd62d + call Func_e4a + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + jr nz, .asm_1caff + call Func_1cb1c + ret + +.asm_1caff + inc a + ld [wPikachuSaverCharge], a + call Func_1cb1c + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + jr nz, .asm_1cb12 + ld a, $64 + ld [wd51e], a +.asm_1cb12 + ld a, [wCurrentStage] + bit 0, a + ret nz + call Func_1cb43 + ret + +Func_1cb1c: ; 0x1cb1c + ld a, [wd51e] + and a + ret nz + ld a, [wPikachuSaverCharge] + ld c, a + ld b, $0 + ld hl, SoundEffectIds_1cb33 + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + call PlaySoundEffect + ret + +SoundEffectIds_1cb33: + db $12, $13, $14, $15, $16, $17, $18, $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $11 + +Func_1cb43: ; 0x1cb43 + ld a, [wPikachuSaverCharge] + ld c, a + sla c + ld b, $0 + ld hl, TileDataPointers_1cb60 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1cb56 + ld hl, TileDataPointers_1cd10 +.asm_1cb56 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_1cb60) + call Func_10aa + ret + +TileDataPointers_1cb60: + dw TileData_1cb80 + dw TileData_1cb85 + dw TileData_1cb8a + dw TileData_1cb8f + dw TileData_1cb94 + dw TileData_1cb99 + dw TileData_1cb9e + dw TileData_1cba3 + dw TileData_1cba8 + dw TileData_1cbad + dw TileData_1cbb2 + dw TileData_1cbb7 + dw TileData_1cbbc + dw TileData_1cbc1 + dw TileData_1cbc6 + dw TileData_1cbcb + +TileData_1cb80: ; 0x1cb80 + db $02 + dw TileData_1cbd0 + dw TileData_1cbda + +TileData_1cb85: ; 0x1cb85 + db $02 + dw TileData_1cbe4 + dw TileData_1cbee + +TileData_1cb8a: ; 0x1cb8a + db $02 + dw TileData_1cbf8 + dw TileData_1cc02 + +TileData_1cb8f: ; 0x1cb8f + db $02 + dw TileData_1cc0c + dw TileData_1cc16 + +TileData_1cb94: ; 0x1cb94 + db $02 + dw TileData_1cc20 + dw TileData_1cc2a + +TileData_1cb99: ; 0x1cb99 + db $02 + dw TileData_1cc34 + dw TileData_1cc3e + +TileData_1cb9e: ; 0x1cb9e + db $02 + dw TileData_1cc48 + dw TileData_1cc52 + +TileData_1cba3: ; 0x1cba3 + db $02 + dw TileData_1cc5c + dw TileData_1cc66 + +TileData_1cba8: ; 0x1cba8 + db $02 + dw TileData_1cc70 + dw TileData_1cc7a + +TileData_1cbad: ; 0x1cbad + db $02 + dw TileData_1cc84 + dw TileData_1cc8e + +TileData_1cbb2: ; 0x1cbb2 + db $02 + dw TileData_1cc98 + dw TileData_1cca2 + +TileData_1cbb7: ; 0x1cbb7 + db $02 + dw TileData_1ccac + dw TileData_1ccb6 + +TileData_1cbbc: ; 0x1cbbc + db $02 + dw TileData_1ccc0 + dw TileData_1ccca + +TileData_1cbc1: ; 0x1cbc1 + db $02 + dw TileData_1ccd4 + dw TileData_1ccde + +TileData_1cbc6: ; 0x1cbc6 + db $02 + dw TileData_1cce8 + dw TileData_1ccf2 + +TileData_1cbcb: ; 0x1cbcb + db $02 + dw TileData_1ccfc + dw TileData_1cd06 + +TileData_1cbd0: ; 0xcbd0 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageBlueFieldTopBaseGameBoyGfx + $c20 + db Bank(StageBlueFieldTopBaseGameBoyGfx) + db $00 ; terminator + +TileData_1cbda: ; 0xcbda + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageBlueFieldTopBaseGameBoyGfx + $c40 + db Bank(StageBlueFieldTopBaseGameBoyGfx) + db $00 ; terminator + +TileData_1cbe4: ; 0xcbe4 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1800 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cbee: ; 0xcbee + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1820 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cbf8: ; 0xcbf8 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1840 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc02: ; 0xcc02 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1860 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc0c: ; 0xcc0c + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1880 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc16: ; 0xcc16 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $18A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc20: ; 0xcc20 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $18C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc2a: ; 0xcc2a + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $18E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc34: ; 0xcc34 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1900 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc3e: ; 0xcc3e + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1920 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc48: ; 0xcc48 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1940 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc52: ; 0xcc52 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1960 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc5c: ; 0xcc5c + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1980 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc66: ; 0xcc66 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $19A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc70: ; 0xcc70 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $19C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc7a: ; 0xcc7a + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $19E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc84: ; 0xcc84 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1A00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc8e: ; 0xcc8e + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1A20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cc98: ; 0xcc98 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1A40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cca2: ; 0xcca2 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1A60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccac: ; 0xccac + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1A80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccb6: ; 0xccb6 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1AA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccc0: ; 0xccc0 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1AC0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccca: ; 0xccca + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1AE0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccd4: ; 0xccd4 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1B00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccde: ; 0xccde + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1B20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cce8: ; 0xcce8 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1B40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccf2: ; 0xccf2 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1B60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1ccfc: ; 0xccfc + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1B80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1cd06: ; 0xcd06 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $6E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1BA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileDataPointers_1cd10: + dw TileData_1cd30 + dw TileData_1cd33 + dw TileData_1cd36 + dw TileData_1cd39 + dw TileData_1cd3c + dw TileData_1cd3f + dw TileData_1cd42 + dw TileData_1cd45 + dw TileData_1cd48 + dw TileData_1cd4b + dw TileData_1cd4e + dw TileData_1cd51 + dw TileData_1cd54 + dw TileData_1cd57 + dw TileData_1cd5a + dw TileData_1cd5d + +TileData_1cd30: ; 0x1cd30 + db $01 + dw TileData_1cd60 + +TileData_1cd33: ; 0x1cd33 + db $01 + dw TileData_1cd6e + +TileData_1cd36: ; 0x1cd36 + db $01 + dw TileData_1cd7c + +TileData_1cd39: ; 0x1cd39 + db $01 + dw TileData_1cd8a + +TileData_1cd3c: ; 0x1cd3c + db $01 + dw TileData_1cd98 + +TileData_1cd3f: ; 0x1cd3f + db $01 + dw TileData_1cda6 + +TileData_1cd42: ; 0x1cd42 + db $01 + dw TileData_1cdb4 + +TileData_1cd45: ; 0x1cd45 + db $01 + dw TileData_1cdc2 + +TileData_1cd48: ; 0x1cd48 + db $01 + dw TileData_1cdd0 + +TileData_1cd4b: ; 0x1cd4b + db $01 + dw TileData_1cdde + +TileData_1cd4e: ; 0x1cd4e + db $01 + dw TileData_1cdec + +TileData_1cd51: ; 0x1cd51 + db $01 + dw TileData_1cdfa + +TileData_1cd54: ; 0x1cd54 + db $01 + dw TileData_1ce08 + +TileData_1cd57: ; 0x1cd57 + db $01 + dw TileData_1ce16 + +TileData_1cd5a: ; 0x1cd5a + db $01 + dw TileData_1ce24 + +TileData_1cd5d: ; 0x1cd5d + db $01 + dw TileData_1ce32 + +TileData_1cd60: ; 0x1cd60 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $4A, $4B + + db $00 ; terminator + +TileData_1cd6e: ; 0x1cd6e + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $4C, $4D + + db $00 ; terminator + +TileData_1cd7c: ; 0x1cd7c + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $4E, $4F + + db $00 ; terminator + +TileData_1cd8a: ; 0x1cd8a + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $50, $51 + + db $00 ; terminator + +TileData_1cd98: ; 0x1cd98 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $52, $53 + + db $00 ; terminator + +TileData_1cda6: ; 0x1cda6 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $54, $55 + + db $00 ; terminator + +TileData_1cdb4: ; 0x1cdb4 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $56, $57 + + db $00 ; terminator + +TileData_1cdc2: ; 0x1cdc2 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1cdd0: ; 0x1cdd0 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $48, $49 + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1cdde: ; 0x1cdde + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $5C, $5D + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1cdec: ; 0x1cdec + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $5E, $5F + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1cdfa: ; 0x1cdfa + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $60, $61 + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1ce08: ; 0x1ce08 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $62, $63 + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1ce16: ; 0x1ce16 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $64, $65 + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1ce24: ; 0x1ce24 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $66, $67 + + db $02 ; number of tiles + dw vBGMap + $163 + db $58, $59 + + db $00 ; terminator + +TileData_1ce32: ; 0x1ce32 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $143 + db $68, $69 + + db $02 ; number of tiles + dw vBGMap + $163 + db $6A, $6B + + db $00 ; terminator + +Func_1ce40: ; 1ce40 + ld a, [wWhichBumper] + and a + jr z, .asm_1ce53 + call Func_1ce72 + call Func_1ce60 + xor a + ld [wWhichBumper], a + call Func_1ce94 +.asm_1ce53 + ld a, [wd4da] + and a + ret z + dec a + ld [wd4da], a + call z, Func_1ce72 + ret + +Func_1ce60: ; 0x1ce60 + ld a, $10 + ld [wd4da], a + ld a, [wWhichBumperId] + sub $1 + ld [wd4db], a + sla a + inc a + jr asm_1ce7a + +Func_1ce72: ; 1ce72 + ld a, [wd4db] + cp $ff + ret z + sla a +asm_1ce7a: ; 0x1ce7a + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1ceca + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1ce8a + ld hl, TileDataPointers_1cf3a +.asm_1ce8a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_1ceca) + call Func_10aa + ret + +Func_1ce94: ; 0x1ce94 + ld a, $ff + ld [wd803], a + ld a, $3 + ld [wd804], a + ld hl, $0200 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + ld a, [wWhichBumperId] + sub $1 + ld c, a + ld b, $0 + ld hl, Data_1cec8 + add hl, bc + ld a, [wCollisionForceAngle] + add [hl] + ld [wCollisionForceAngle], a + lb de, $00, $0b + call PlaySoundEffect + ret + +Data_1cec8: + db -8, 8 + +TileDataPointers_1ceca: + dw TileData_1ced2 + dw TileData_1ced5 + dw TileData_1ced8 + dw TileData_1cedb + +TileData_1ced2: ; 0x1ced2 + db $01 + dw TileData_1cede + +TileData_1ced5: ; 0x1ced5 + db $01 + dw TileData_1cef5 + +TileData_1ced8: ; 0x1ced8 + db $01 + dw TileData_1cf0c + +TileData_1cedb: ; 0x1cedb + db $01 + dw TileData_1cf23 + +TileData_1cede: ; 0x1cede + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $61 + + db $02 ; number of tiles + dw vBGMap + $144 + db $62, $63 + + db $02 ; number of tiles + dw vBGMap + $164 + db $64, $65 + + db $02 ; number of tiles + dw vBGMap + $185 + db $66, $67 + + db $00 ; number of tiles + +TileData_1cef5: ; 0x1cef5 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $68 + + db $02 ; number of tiles + dw vBGMap + $144 + db $69, $6A + + db $02 ; number of tiles + dw vBGMap + $164 + db $6B, $6C + + db $02 ; number of tiles + dw vBGMap + $185 + db $6D, $6E + + db $00 ; number of tiles + +TileData_1cf0c: ; 0x1cf0c + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $6F + + db $02 ; number of tiles + dw vBGMap + $14E + db $70, $71 + + db $02 ; number of tiles + dw vBGMap + $16E + db $72, $73 + + db $02 ; number of tiles + dw vBGMap + $18D + db $74, $75 + + db $00 ; number of tiles + +TileData_1cf23: ; 0x1cf23 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $76 + + db $02 ; number of tiles + dw vBGMap + $14E + db $77, $78 + + db $02 ; number of tiles + dw vBGMap + $16E + db $79, $7A + + db $02 ; number of tiles + dw vBGMap + $18D + db $7B, $7C + + db $00 ; number of tiles + +TileDataPointers_1cf3a: + dw TileData_1cf42 + dw TileData_1cf45 + dw TileData_1cf48 + dw TileData_1cf4b + +TileData_1cf42: ; 0x1cf42 + db $01 + dw TileData_1cf4e + +TileData_1cf45: ; 0x1cf45 + db $01 + dw TileData_1cf65 + +TileData_1cf48: ; 0x1cf48 + db $01 + dw TileData_1cf7c + +TileData_1cf4b: ; 0x1cf4b + db $01 + dw TileData_1cf93 + +TileData_1cf4e: ; 0x1cf4e + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $39 + + db $02 ; number of tiles + dw vBGMap + $144 + db $3A, $3B + + db $02 ; number of tiles + dw vBGMap + $164 + db $3C, $3D + + db $02 ; number of tiles + dw vBGMap + $185 + db $3E, $3F + + db $00 ; terminator + +TileData_1cf65: ; 0x1cf65 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $40 + + db $02 ; number of tiles + dw vBGMap + $144 + db $41, $42 + + db $02 ; number of tiles + dw vBGMap + $164 + db $43, $44 + + db $02 ; number of tiles + dw vBGMap + $185 + db $45, $46 + + db $00 ; terminator + +TileData_1cf7c: ; 0x1cf7c + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $39 + + db $02 ; number of tiles + dw vBGMap + $14E + db $3B, $3A + + db $02 ; number of tiles + dw vBGMap + $16E + db $3D, $3C + + db $02 ; number of tiles + dw vBGMap + $18D + db $3F, $3E + + db $00 ; terminator + +TileData_1cf93: ; 0x1cf93 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $40 + + db $02 ; number of tiles + dw vBGMap + $14E + db $42, $41 + + db $02 ; number of tiles + dw vBGMap + $16E + db $44, $43 + + db $02 ; number of tiles + dw vBGMap + $18D + db $46, $45 + + db $00 ; terminator + +ResolveBlueStageBoardTriggerCollision: ; 0x1cfaa + ld a, [wWhichBoardTrigger] + and a + ret z + xor a + ld [wWhichBoardTrigger], a + ld bc, FivePoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wStageCollisionState] + cp $0 + jr nz, .asm_1cfe5 + ld a, $1 + ld [wStageCollisionState], a + callba LoadStageCollisionAttributes + ld a, $1 + ld [wd580], a + callba Func_1404a +.asm_1cfe5 + ld a, [wWhichBoardTriggerId] + sub $7 + ld c, a + ld b, $0 + ld hl, wd521 + add hl, bc + ld [hl], $1 + ld a, [wd521] + and a + call nz, Func_1d010 + ld a, [wd522] + and a + call nz, Func_1d047 + ld a, [wd523] + and a + call nz, HandleLeftAlleyTriggerBlueField + ld a, [wd524] + and a + call nz, HandleRightAlleyTriggerBlueField + ret + +Func_1d010: ; 0x1d010 + xor a + ld [wd521], a + ld a, [wLeftAlleyTrigger] + and a + ret z + xor a + ld [wLeftAlleyTrigger], a + ld a, $1 + callba Func_10000 + ret c + ld a, [wLeftAlleyCount] + cp $3 + ret z + inc a + ld [wLeftAlleyCount], a + cp $3 + jr z, .asm_1d03e + set 7, a + ld [wIndicatorStates], a + ret + +.asm_1d03e + ld [wIndicatorStates], a + ld a, $80 + ld [wIndicatorStates + 2], a + ret + +Func_1d047: ; 0x1d047 + xor a + ld [wd522], a + ld a, [wRightAlleyTrigger] + and a + ret z + xor a + ld [wRightAlleyTrigger], a + ld a, $2 + callba Func_10000 + ret c + ld a, [wRightAlleyCount] + cp $3 + ret z + inc a + ld [wRightAlleyCount], a + cp $3 + jr z, .asm_1d071 + set 7, a +.asm_1d071 + ld [wIndicatorStates + 1], a + ld a, [wRightAlleyCount] + cp $2 + ret c + ld a, $80 + ld [wIndicatorStates + 3], a + ret + +HandleLeftAlleyTriggerBlueField: ; 0x1d080 +; Ball passed over the left alley trigger point in the Blue Field. + xor a + ld [wd523], a + ld [wRightAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $1 + ld [wLeftAlleyTrigger], a + ret c + ret + +HandleRightAlleyTriggerBlueField: ; 0x1d091 +; Ball passed over the right alley trigger point in the Blue Field. + xor a + ld [wd524], a + ld [wLeftAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $1 + ld [wRightAlleyTrigger], a + ret + +ResolveBlueStagePikachuCollision: ; 0x1d0a1 + ld a, [wWhichPikachu] + and a + jr z, .asm_1d110 + xor a + ld [wWhichPikachu], a + ld a, [wd51c] + and a + jr nz, .asm_1d110 + ld a, [wPikachuSaverSlotRewardActive] + and a + jr nz, .asm_1d0c9 + ld a, [wWhichPikachuId] + sub $d + ld hl, wd518 + cp [hl] + jr nz, .asm_1d110 + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + jr nz, .asm_1d0fc +.asm_1d0c9 + ld hl, PikachuSaverAnimationDataRedStage + ld de, wPikachuSaverAnimationFrameCounter + call CopyHLToDE + ld a, [wPikachuSaverSlotRewardActive] + and a + jr nz, .asm_1d0dc + xor a + ld [wPikachuSaverCharge], a +.asm_1d0dc + ld a, $1 + ld [wd51c], a + xor a + ld [wBallXVelocity], a + ld [wBallXVelocity + 1], a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + ld [wBallSpin], a + ld [wBallRotation], a + ld [wd549], a + call FillBottomMessageBufferWithBlackTile + jr .asm_1d110 + +.asm_1d0fc + ld hl, PikachuSaverAnimation2DataRedStage + ld de, wPikachuSaverAnimationFrameCounter + call CopyHLToDE + ld a, $2 + ld [wd51c], a + lb de, $00, $3b + call PlaySoundEffect +.asm_1d110 + ld a, [wd51c] + and a + call z, Func_1d1fb + call Func_1d133 + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + ret nz + ld a, [wd51e] + and a + ret z + dec a + ld [wd51e], a + cp $5a + ret nz + lb de, $0f, $22 + call PlaySoundEffect + ret + +Func_1d133: ; 0x1d133 + ld a, [wd51c] + cp $1 + jr nz, .asm_1d1ae + ld hl, PikachuSaverAnimationDataRedStage + ld de, wPikachuSaverAnimationFrameCounter + call UpdateAnimation + ret nc + ld a, [wPikachuSaverAnimationFrameIndex] + cp $1 + jr nz, .asm_1d18c + xor a + ld [wd85d], a + call Func_310a + rst AdvanceFrame + ld a, $1 + callba PlayPikachuSoundClip + ld a, $1 + ld [wd85d], a + ld a, $ff + ld [wd803], a + ld a, $60 + ld [wd804], a + ld hl, wd62e + call Func_e4a + jr nc, .asm_1d185 + ld c, $a + call Func_e55 + callba z, Func_30164 +.asm_1d185 + lb de, $16, $10 + call PlaySoundEffect + ret + +.asm_1d18c + ld a, [wPikachuSaverAnimationFrameIndex] + cp $11 + ret nz + ld a, $fc + ld [wBallYVelocity + 1], a + ld a, $1 + ld [wd549], a + ld bc, FiveThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + xor a + ld [wd51c], a + ret + +.asm_1d1ae + cp $2 + jr nz, .asm_1d1c7 + ld hl, PikachuSaverAnimation2DataRedStage + ld de, wPikachuSaverAnimationFrameCounter + call UpdateAnimation + ret nc + ld a, [wPikachuSaverAnimationFrameIndex] + cp $1 + ret nz + xor a + ld [wd51c], a + ret + +.asm_1d1c7 + ld a, [hNumFramesDropped] + swap a + and $1 + ld [wPikachuSaverAnimationFrame], a + ret + +PikachuSaverAnimationDataRedStage: ; 0x1d1d1 +; Each entry is [duration][OAM id] + db $0C, $02 + db $05, $03 + db $05, $02 + db $05, $04 + db $05, $05 + db $05, $02 + db $06, $06 + db $06, $07 + db $06, $08 + db $06, $02 + db $06, $05 + db $06, $08 + db $06, $07 + db $06, $02 + db $06, $08 + db $06, $07 + db $06, $02 + db $01, $00 + db $00 + +PikachuSaverAnimation2DataRedStage: ; 0x1d1f6 +; Each entry is [duration][OAM id] + db $0C, $02 + db $01, $00 + db $00 + +Func_1d1fb: ; 0x1d1fb + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed2 + jr z, .asm_1d209 + ld hl, wd518 + ld [hl], $0 + ret + +.asm_1d209 + ld hl, wKeyConfigRightFlipper + call IsKeyPressed2 + ret z + ld hl, wd518 + ld [hl], $1 + ret + +ResolveSlowpokeCollision: ; 0x1d216 + ld a, [wSlowpokeCollision] + and a + jr z, .asm_1d253 + xor a + ld [wSlowpokeCollision], a + ld bc, TenThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $05 + call PlaySoundEffect + ld hl, SlowpokeCollisionAnimationData ; 0x1d312 + ld de, wd632 + call CopyHLToDE + xor a + ld [wBallXVelocity], a + ld [wBallXVelocity + 1], a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + ld [wBallXPos], a + ld [wBallYPos], a + xor a + ld [wd549], a +.asm_1d253 + ld hl, SlowpokeCollisionAnimationData ; 0x1d312 + ld de, wd632 + call UpdateAnimation + push af + ld a, [wd632] + and a + jr nz, .asm_1d271 + ld a, $19 + ld [wd632], a + xor a + ld [wd633], a + ld a, $6 + ld [wd634], a +.asm_1d271 + pop af + ret nc + ld a, [wd634] + cp $1 + jr nz, .asm_1d2b6 + xor a + ld [wd548], a + ld a, [wLeftAlleyCount] + cp $3 + jr nz, .asm_1d299 + callba Func_10ab3 + ld a, [wd643] + and a + ret z + ld a, $1 + ld [wd642], a +.asm_1d299 + ld hl, wd63a + call Func_e4a + ld hl, wd62a + call Func_e4a + ret nc + ld c, $19 + call Func_e55 + callba z, Func_30164 + ret + +.asm_1d2b6 + ld a, [wd634] + cp $4 + jr nz, .asm_1d2c3 + ld a, $1 + ld [wd548], a + ret + +.asm_1d2c3 + ld a, [wd634] + cp $5 + ret nz + ld a, $1 + ld [wd549], a + ld a, $b0 + ld [wBallXVelocity], a + ld a, $0 + ld [wBallXVelocity + 1], a + xor a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + lb de, $00, $06 + call PlaySoundEffect + ld a, [wd642] + cp $0 + jr nz, .asm_1d2f8 + ld a, $f + callba Func_10000 +.asm_1d2f8 + xor a + ld [wd642], a + ld [wd64c], a + ld [wd64d], a + ld a, $1 + ld [wd641], a + ld a, $2 ; down direction + ld [wBlueStageForceFieldDirection], a + ld a, $1 + ld [wd640], a + ret + +SlowpokeCollisionAnimationData: ; 0x1d312 +; Each entry is [OAM id][duration] + db $08, $01 + db $06, $02 + db $06, $02 + db $08, $01 + db $01, $00 + db $29, $00 + db $28, $01 + db $2A, $00 + db $27, $01 + db $29, $00 + db $28, $01 + db $2B, $00 + db $28, $01 + db $00 + +ResolveCloysterCollision: ; 0x1d32d + ld a, [wCloysterCollision] + and a + jr z, .asm_1d36a + xor a + ld [wCloysterCollision], a + ld bc, TenThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $05 + call PlaySoundEffect + ld hl, CloysterCollisionAnimationData + ld de, wd637 + call CopyHLToDE + xor a + ld [wBallXVelocity], a + ld [wBallXVelocity + 1], a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + ld [wBallXPos], a + ld [wBallYPos], a + xor a + ld [wd549], a +.asm_1d36a + ld hl, CloysterCollisionAnimationData + ld de, wd637 + call UpdateAnimation + push af + ld a, [wd637] + and a + jr nz, .asm_1d388 + ld a, $19 + ld [wd637], a + xor a + ld [wd638], a + ld a, $6 + ld [wd639], a +.asm_1d388 + pop af + ret nc + ld a, [wd639] + cp $1 + jr nz, .asm_1d3cb + xor a + ld [wd548], a + ld a, [wRightAlleyCount] + cp $2 + jr c, .noCatchEmMode + ld a, $8 + jr nz, .asm_1d3a1 + xor a +.asm_1d3a1 + ld [wRareMonsFlag], a + callba StartCatchEmMode +.noCatchEmMode + ld hl, wd63b + call Func_e4a + ld hl, wd62a + call Func_e4a + ret nc + ld c, $19 + call Func_e55 + callba z, Func_30164 + ret + +.asm_1d3cb + ld a, [wd639] + cp $4 + jr nz, .asm_1d3d8 + ld a, $1 + ld [wd548], a + ret + +.asm_1d3d8 + ld a, [wd639] + cp $5 + ret nz + ld a, $1 + ld [wd549], a + ld a, $4f + ld [wBallXVelocity], a + ld a, $ff + ld [wBallXVelocity + 1], a + xor a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + lb de, $00, $06 + call PlaySoundEffect + ld a, $e + callba Func_10000 + xor a + ld [wd64c], a + ld [wd64d], a + ld a, $1 + ld [wd641], a + ld a, $2 ; down direction + ld [wBlueStageForceFieldDirection], a + ld a, $1 + ld [wd640], a + ret + +CloysterCollisionAnimationData: ; 0x1d41d +; Each entry is [OAM id][duration] + db $08, $01 + db $06, $02 + db $06, $02 + db $08, $01 + db $01, $00 + db $29, $00 + db $28, $01 + db $2A, $00 + db $27, $01 + db $29, $00 + db $28, $01 + db $2B, $00 + db $28, $01 + db 00 ; terminator + +ResolveBlueStageBonusMultiplierCollision: ; 0x1d438 + call Func_1d692 + ld a, [wWhichBonusMultiplierRailing] + and a + jp z, Func_1d51b + xor a + ld [wWhichBonusMultiplierRailing], a + lb de, $00, $0d + call PlaySoundEffect + ld a, [wWhichBonusMultiplierRailingId] + sub $f + jr nz, .asm_1d48e + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1d45c + ld a, $1f + jr .asm_1d45e + +.asm_1d45c + ld a, $29 +.asm_1d45e + call Func_1d5f2 + ld a, $3c + ld [wd647], a + ld a, $9 + callba Func_10000 + ld a, [wd610] + cp $3 + jp nz, asm_1d4fa + ld a, $1 + ld [wd610], a + ld a, $3 + ld [wd611], a + ld a, [wd60c] + set 7, a + ld [wd60c], a + jr asm_1d4fa + +.asm_1d48e + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1d497 + ld a, $21 + jr .asm_1d499 + +.asm_1d497 + ld a, $2b +.asm_1d499 + call Func_1d5f2 + ld a, $1e + ld [wd647], a + ld a, $a + callba Func_10000 + ld a, [wd611] + cp $3 + jr nz, asm_1d4fa + ld a, $1 + ld [wd610], a + ld a, $1 + ld [wd611], a + ld a, $80 + ld [wd612], a + ld a, [wd60d] + set 7, a + ld [wd60d], a + ld a, [wd482] + inc a + cp 100 + jr c, .asm_1d4d5 + ld a, 99 +.asm_1d4d5 + ld [wd482], a + jr nc, .asm_1d4e9 + ld c, $19 + call Func_e55 + callba z, Func_30164 +.asm_1d4e9 + ld a, [wd60c] + ld [wd614], a + ld a, [wd60d] + ld [wd615], a + ld a, $1 + ld [wd613], a +asm_1d4fa: ; 0x1d4fa + ld bc, TenPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wd60c] + call Func_1d5f2 + ld a, [wd60d] + add $14 + call Func_1d5f2 + ld a, $3c + ld [wd647], a + ret + +Func_1d51b: ; 0x1d51b + call Func_1d5bf + ld a, [wd612] + and a + jr z, .asm_1d559 + dec a + ld [wd612], a + cp $70 + jr nz, .asm_1d538 + ld a, $2 + ld [wd610], a + ld a, $2 + ld [wd611], a + jr .asm_1d559 + +.asm_1d538 + and a + jr nz, .asm_1d559 + ld a, $3 + ld [wd610], a + xor a + ld [wd611], a + ld a, [wd482] + call Func_1d65f + ld a, [wd60c] + call Func_1d5f2 + ld a, [wd60d] + add $14 + call Func_1d5f2 + ret + +.asm_1d559 + ld a, [wd610] + cp $2 + jr c, .asm_1d58b + cp $3 + ld a, [hNumFramesDropped] + jr c, .asm_1d56a + srl a + srl a +.asm_1d56a + ld b, a + and $3 + jr nz, .asm_1d58b + bit 3, b + jr nz, .asm_1d580 + ld a, [wd60c] + res 7, a + ld [wd60c], a + call Func_1d5f2 + jr .asm_1d58b + +.asm_1d580 + ld a, [wd60c] + set 7, a + ld [wd60c], a + call Func_1d5f2 +.asm_1d58b + ld a, [wd611] + cp $2 + ret c + cp $3 + ld a, [hNumFramesDropped] + jr c, .asm_1d59b + srl a + srl a +.asm_1d59b + ld b, a + and $3 + ret nz + bit 3, b + jr nz, .asm_1d5b1 + ld a, [wd60d] + res 7, a + ld [wd60d], a + add $14 + call Func_1d5f2 + ret + +.asm_1d5b1 + ld a, [wd60d] + set 7, a + ld [wd60d], a + add $14 + call Func_1d5f2 + ret + +Func_1d5bf: ; 0x1d5bf + ld a, [wd5ca] + and a + ret nz + ld a, [wd613] + and a + ret z + xor a + ld [wd613], a + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5cc + ld de, BonusMultiplierText + call LoadTextHeader + ld hl, wBottomMessageText + $12 + ld a, [wd614] + and $7f + jr z, .asm_1d5e9 + add $30 + ld [hli], a +.asm_1d5e9 + ld a, [wd615] + res 7, a + add $30 + ld [hl], a + ret + +Func_1d5f2: ; 0x1d5f2 + push af + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1d5fd + pop af + call Func_1d602 + ret + +.asm_1d5fd + pop af + call Func_1d645 + ret + +Func_1d602: ; 0x1d602 + push af + res 7, a + ld hl, wd60e + cp $14 + jr c, .asm_1d611 + ld hl, wd60f + sub $a +.asm_1d611 + cp [hl] + jr z, .asm_1d626 + ld [hl], a + ld c, a + ld b, $0 + sla c + ld hl, TileDataPointers_1d6be + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_1d6be) + call Func_10aa +.asm_1d626 + pop af + ld bc, $0000 + bit 7, a + jr z, .asm_1d632 + res 7, a + set 1, c +.asm_1d632 + cp $14 + jr c, .asm_1d638 + set 2, c +.asm_1d638 + ld hl, TileDataPointers_1d946 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_1d946) + call Func_10aa + ret + +Func_1d645: ; 0x1d645 + bit 7, a + jr z, .asm_1d64d + res 7, a + add $a +.asm_1d64d + ld c, a + ld b, $0 + sla c + ld hl, TileDataPointers_1d97a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_1d97a) + call Func_10aa + ret + +Func_1d65f: ; 0x1d65f + ld a, [wd482] + inc a + cp $64 + jr c, .asm_1d669 + ld a, $63 +.asm_1d669 + ld b, a + xor a + ld hl, Data_1d68b + ld c, $7 +.asm_1d670 + bit 0, b + jr z, .asm_1d676 + add [hl] + daa +.asm_1d676 + srl b + inc hl + dec c + jr nz, .asm_1d670 + push af + swap a + and $f + ld [wd60c], a + pop af + and $f + ld [wd60d], a + ret + +Data_1d68b: +; BCD powers of 2 + db $01, $02, $04, $08, $16, $32, $64 + +Func_1d692: ; 0x1d692 + ld a, [wd647] + cp $1 + jr z, .asm_1d69e + dec a + ld [wd647], a + ret + +.asm_1d69e + ld a, $0 + ld [wd647], a + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1d6b3 + ld a, $1e + call Func_1d5f2 + ld a, $20 + call Func_1d5f2 + ret + +.asm_1d6b3 + ld a, $2a + call Func_1d5f2 + ld a, $28 + call Func_1d5f2 + ret + +TileDataPointers_1d6be: + dw TileData_1d6ee + dw TileData_1d6f3 + dw TileData_1d6f8 + dw TileData_1d6fd + dw TileData_1d702 + dw TileData_1d707 + dw TileData_1d70c + dw TileData_1d711 + dw TileData_1d716 + dw TileData_1d71b + dw TileData_1d720 + dw TileData_1d725 + dw TileData_1d72a + dw TileData_1d72f + dw TileData_1d734 + dw TileData_1d739 + dw TileData_1d73e + dw TileData_1d743 + dw TileData_1d748 + dw TileData_1d74d + dw TileData_1d752 + dw TileData_1d757 + dw TileData_1d75c + dw TileData_1d761 + +TileData_1d6ee: ; 0x1d6ee + db $02 + dw TileData_1d766 + dw TileData_1d770 + +TileData_1d6f3: ; 0x1d6f3 + db $02 + dw TileData_1d77a + dw TileData_1d784 + +TileData_1d6f8: ; 0x1d6f8 + db $02 + dw TileData_1d78e + dw TileData_1d798 + +TileData_1d6fd: ; 0x1d6fd + db $02 + dw TileData_1d7a2 + dw TileData_1d7AC + +TileData_1d702: ; 0x1d702 + db $02 + dw TileData_1d7b6 + dw TileData_1d7C0 + +TileData_1d707: ; 0x1d707 + db $02 + dw TileData_1d7ca + dw TileData_1d7D4 + +TileData_1d70c: ; 0x1d70c + db $02 + dw TileData_1d7de + dw TileData_1d7E8 + +TileData_1d711: ; 0x1d711 + db $02 + dw TileData_1d7f2 + dw TileData_1d7FC + +TileData_1d716: ; 0x1d716 + db $02 + dw TileData_1d806 + dw TileData_1d810 + +TileData_1d71b: ; 0x1d71b + db $02 + dw TileData_1d81a + dw TileData_1d824 + +TileData_1d720: ; 0x1d720 + db $02 + dw TileData_1d82e + dw TileData_1d838 + +TileData_1d725: ; 0x1d725 + db $02 + dw TileData_1d842 + dw TileData_1d84C + +TileData_1d72a: ; 0x1d72a + db $02 + dw TileData_1d856 + dw TileData_1d860 + +TileData_1d72f: ; 0x1d72f + db $02 + dw TileData_1d86a + dw TileData_1d874 + +TileData_1d734: ; 0x1d734 + db $02 + dw TileData_1d87e + dw TileData_1d888 + +TileData_1d739: ; 0x1d739 + db $02 + dw TileData_1d892 + dw TileData_1d89C + +TileData_1d73e: ; 0x1d73e + db $02 + dw TileData_1d8a6 + dw TileData_1d8B0 + +TileData_1d743: ; 0x1d743 + db $02 + dw TileData_1d8ba + dw TileData_1d8C4 + +TileData_1d748: ; 0x1d748 + db $02 + dw TileData_1d8ce + dw TileData_1d8D8 + +TileData_1d74d: ; 0x1d74d + db $02 + dw TileData_1d8e2 + dw TileData_1d8EC + +TileData_1d752: ; 0x1d752 + db $02 + dw TileData_1d8f6 + dw TileData_1d900 + +TileData_1d757: ; 0x1d757 + db $02 + dw TileData_1d90a + dw TileData_1d914 + +TileData_1d75c: ; 0x1d75c + db $02 + dw TileData_1d91e + dw TileData_1d928 + +TileData_1d761: ; 0x1d761 + db $02 + dw TileData_1d932 + dw TileData_1d93C + +TileData_1d766: ; 0x1d766 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d770: ; 0x1d770 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1cc0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d77a: ; 0x1d77a + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d70 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d784: ; 0x1d784 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1cd0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d78e: ; 0x1d78e + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d798: ; 0x1d798 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1ce0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7a2: ; 0x1d7a2 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d90 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7AC: ; 0x1d7AC + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1cf0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7b6: ; 0x1d7b6 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1da0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7C0: ; 0x1d7C0 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7ca: ; 0x1d7ca + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1db0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7D4: ; 0x1d7D4 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d10 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7de: ; 0x1d7de + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1dc0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7E8: ; 0x1d7E8 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7f2: ; 0x1d7f2 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1dd0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d7FC: ; 0x1d7FC + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d30 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d806: ; 0x1d806 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1de0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d810: ; 0x1d810 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d81a: ; 0x1d81a + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $27 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1df0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d824: ; 0x1d824 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1d50 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d82e: ; 0x1d82e + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1ea0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d838: ; 0x1d838 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d842: ; 0x1d842 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1eb0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d84C: ; 0x1d84C + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e10 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d856: ; 0x1d856 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1ec0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d860: ; 0x1d860 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d86a: ; 0x1d86a + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1ed0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d874: ; 0x1d874 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e30 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d87e: ; 0x1d87e + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1ee0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d888: ; 0x1d888 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d892: ; 0x1d892 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1ef0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d89C: ; 0x1d89C + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e50 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8a6: ; 0x1d8a6 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1f00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8B0: ; 0x1d8B0 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8ba: ; 0x1d8ba + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1f10 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8C4: ; 0x1d8C4 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e70 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8ce: ; 0x1d8ce + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1f20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8D8: ; 0x1d8D8 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8e2: ; 0x1d8e2 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $28 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1f30 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8EC: ; 0x1d8EC + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $7E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1e90 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1d8f6: ; 0x1d8f6 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $29 + dw StageBlueFieldBottomBaseGameBoyGfx + $A90 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1d900: ; 0x1d900 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $2C + dw StageBlueFieldBottomBaseGameBoyGfx + $AC0 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1d90a: ; 0x1d90a + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $29 + dw StageBlueFieldBottomBaseGameBoyGfx + $AE0 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1d914: ; 0x1d914 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $2C + dw StageBlueFieldBottomBaseGameBoyGfx + $B10 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1d91e: ; 0x1d91e + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $33 + dw StageBlueFieldBottomBaseGameBoyGfx + $B30 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1d928: ; 0x1d928 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $36 + dw StageBlueFieldBottomBaseGameBoyGfx + $B60 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1d932: ; 0x1d932 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $33 + dw StageBlueFieldBottomBaseGameBoyGfx + $B80 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1d93C: ; 0x1d93C + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $36 + dw StageBlueFieldBottomBaseGameBoyGfx + $BB0 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileDataPointers_1d946: + dw TileData_1d94e + dw TileData_1d951 + dw TileData_1d954 + dw TileData_1d957 + +TileData_1d94e: ; 0x1d94e + db $01 + dw TileData_1d95a + +TileData_1d951: ; 0x1d951 + db $01 + dw TileData_1d962 + +TileData_1d954: ; 0x1d954 + db $01 + dw TileData_1d96a + +TileData_1d957: ; 0x1d957 + db $01 + dw TileData_1d972 + +TileData_1d95a: ; 0x1d95a + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $27 + + db $00 ; terminator + +TileData_1d962: ; 0x1d962 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $7D + + db $00 ; terminator + +TileData_1d96a: ; 0x1d96a + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $28 + + db $00 ; terminator + +TileData_1d972: ; 0x1d972 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $7E + + db $00 ; terminator + +TileDataPointers_1d97a: + dw TileData_1d9d2 + dw TileData_1d9d5 + dw TileData_1d9d8 + dw TileData_1d9db + dw TileData_1d9de + dw TileData_1d9e1 + dw TileData_1d9e4 + dw TileData_1d9e7 + dw TileData_1d9ea + dw TileData_1d9ed + dw TileData_1d9f0 + dw TileData_1d9f3 + dw TileData_1d9f6 + dw TileData_1d9f9 + dw TileData_1d9fc + dw TileData_1d9ff + dw TileData_1da02 + dw TileData_1da05 + dw TileData_1da08 + dw TileData_1da0b + dw TileData_1da0e + dw TileData_1da11 + dw TileData_1da14 + dw TileData_1da17 + dw TileData_1da1a + dw TileData_1da1d + dw TileData_1da20 + dw TileData_1da23 + dw TileData_1da26 + dw TileData_1da29 + dw TileData_1da2c + dw TileData_1da2f + dw TileData_1da32 + dw TileData_1da35 + dw TileData_1da38 + dw TileData_1da3b + dw TileData_1da3e + dw TileData_1da41 + dw TileData_1da44 + dw TileData_1da47 + dw TileData_1da4a + dw TileData_1da4d + dw TileData_1da50 + dw TileData_1da53 + +TileData_1d9d2: ; 0x1d9d2 + db $01 + dw TileData_1da56 + +TileData_1d9d5: ; 0x1d9d5 + db $01 + dw TileData_1da5e + +TileData_1d9d8: ; 0x1d9d8 + db $01 + dw TileData_1da66 + +TileData_1d9db: ; 0x1d9db + db $01 + dw TileData_1da6e + +TileData_1d9de: ; 0x1d9de + db $01 + dw TileData_1da76 + +TileData_1d9e1: ; 0x1d9e1 + db $01 + dw TileData_1da7e + +TileData_1d9e4: ; 0x1d9e4 + db $01 + dw TileData_1da86 + +TileData_1d9e7: ; 0x1d9e7 + db $01 + dw TileData_1da8e + +TileData_1d9ea: ; 0x1d9ea + db $01 + dw TileData_1da96 + +TileData_1d9ed: ; 0x1d9ed + db $01 + dw TileData_1da9e + +TileData_1d9f0: ; 0x1d9f0 + db $01 + dw TileData_1daa6 + +TileData_1d9f3: ; 0x1d9f3 + db $01 + dw TileData_1daae + +TileData_1d9f6: ; 0x1d9f6 + db $01 + dw TileData_1dab6 + +TileData_1d9f9: ; 0x1d9f9 + db $01 + dw TileData_1dabe + +TileData_1d9fc: ; 0x1d9fc + db $01 + dw TileData_1dac6 + +TileData_1d9ff: ; 0x1d9ff + db $01 + dw TileData_1dace + +TileData_1da02: ; 0x1da02 + db $01 + dw TileData_1dad6 + +TileData_1da05: ; 0x1da05 + db $01 + dw TileData_1dade + +TileData_1da08: ; 0x1da08 + db $01 + dw TileData_1dae6 + +TileData_1da0b: ; 0x1da0b + db $01 + dw TileData_1daee + +TileData_1da0e: ; 0x1da0e + db $01 + dw TileData_1daf6 + +TileData_1da11: ; 0x1da11 + db $01 + dw TileData_1dafe + +TileData_1da14: ; 0x1da14 + db $01 + dw TileData_1db06 + +TileData_1da17: ; 0x1da17 + db $01 + dw TileData_1db0e + +TileData_1da1a: ; 0x1da1a + db $01 + dw TileData_1db16 + +TileData_1da1d: ; 0x1da1d + db $01 + dw TileData_1db1e + +TileData_1da20: ; 0x1da20 + db $01 + dw TileData_1db26 + +TileData_1da23: ; 0x1da23 + db $01 + dw TileData_1db2e + +TileData_1da26: ; 0x1da26 + db $01 + dw TileData_1db36 + +TileData_1da29: ; 0x1da29 + db $01 + dw TileData_1db3e + +TileData_1da2c: ; 0x1da2c + db $01 + dw TileData_1db46 + +TileData_1da2f: ; 0x1da2f + db $01 + dw TileData_1db4e + +TileData_1da32: ; 0x1da32 + db $01 + dw TileData_1db56 + +TileData_1da35: ; 0x1da35 + db $01 + dw TileData_1db5e + +TileData_1da38: ; 0x1da38 + db $01 + dw TileData_1db66 + +TileData_1da3b: ; 0x1da3b + db $01 + dw TileData_1db6e + +TileData_1da3e: ; 0x1da3e + db $01 + dw TileData_1db76 + +TileData_1da41: ; 0x1da41 + db $01 + dw TileData_1db7e + +TileData_1da44: ; 0x1da44 + db $01 + dw TileData_1db86 + +TileData_1da47: ; 0x1da47 + db $01 + dw TileData_1db8e + +TileData_1da4a: ; 0x1da4a + db $01 + dw TileData_1db96 + +TileData_1da4d: ; 0x1da4d + db $01 + dw TileData_1dba5 + +TileData_1da50: ; 0x1da50 + db $01 + dw TileData_1dbb4 + +TileData_1da53: ; 0x1da53 + db $01 + dw TileData_1dbc3 + +TileData_1da56: ; 0x1da56 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $62 + + db $00 ; terminator + +TileData_1da5e: ; 0x1da5e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $63 + + db $00 ; terminator + +TileData_1da66: ; 0x1da66 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $64 + + db $00 ; terminator + +TileData_1da6e: ; 0x1da6e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $65 + + db $00 ; terminator + +TileData_1da76: ; 0x1da76 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $66 + + db $00 ; terminator + +TileData_1da7e: ; 0x1da7e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $67 + + db $00 ; terminator + +TileData_1da86: ; 0x1da86 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $68 + + db $00 ; terminator + +TileData_1da8e: ; 0x1da8e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $69 + + db $00 ; terminator + +TileData_1da96: ; 0x1da96 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $6A + + db $00 ; terminator + +TileData_1da9e: ; 0x1da9e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $6B + + db $00 ; terminator + +TileData_1daa6: ; 0x1daa6 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $58 + + db $00 ; terminator + +TileData_1daae: ; 0x1daae + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $59 + + db $00 ; terminator + +TileData_1dab6: ; 0x1dab6 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $5A + + db $00 ; terminator + +TileData_1dabe: ; 0x1dabe + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $5B + + db $00 ; terminator + +TileData_1dac6: ; 0x1dac6 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $5C + + db $00 ; terminator + +TileData_1dace: ; 0x1dace + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $5D + + db $00 ; terminator + +TileData_1dad6: ; 0x1dad6 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $5E + + db $00 ; terminator + +TileData_1dade: ; 0x1dade + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $5F + + db $00 ; terminator + +TileData_1dae6: ; 0x1dae6 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $60 + + db $00 ; terminator + +TileData_1daee: ; 0x1daee + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $4 + db $61 + + db $00 ; terminator + +TileData_1daf6: ; 0x1daf6 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $76 + + db $00 ; terminator + +TileData_1dafe: ; 0x1dafe + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $77 + + db $00 ; terminator + +TileData_1db06: ; 0x1db06 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $78 + + db $00 ; terminator + +TileData_1db0e: ; 0x1db0e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $79 + + db $00 ; terminator + +TileData_1db16: ; 0x1db16 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $7A + + db $00 ; terminator + +TileData_1db1e: ; 0x1db1e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $7B + + db $00 ; terminator + +TileData_1db26: ; 0x1db26 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $7C + + db $00 ; terminator + +TileData_1db2e: ; 0x1db2e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $7D + + db $00 ; terminator + +TileData_1db36: ; 0x1db36 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $7E + + db $00 ; terminator + +TileData_1db3e: ; 0x1db3e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $7F + + db $00 ; terminator + +TileData_1db46: ; 0x1db46 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $6C + + db $00 ; terminator + +TileData_1db4e: ; 0x1db4e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $6D + + db $00 ; terminator + +TileData_1db56: ; 0x1db56 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $6E + + db $00 ; terminator + +TileData_1db5e: ; 0x1db5e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $6F + + db $00 ; terminator + +TileData_1db66: ; 0x1db66 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $70 + + db $00 ; terminator + +TileData_1db6e: ; 0x1db6e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $71 + + db $00 ; terminator + +TileData_1db76: ; 0x1db76 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $72 + + db $00 ; terminator + +TileData_1db7e: ; 0x1db7e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $73 + + db $00 ; terminator + +TileData_1db86: ; 0x1db86 + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $74 + + db $00 ; terminator + +TileData_1db8e: ; 0x1db8e + dw LoadTileLists + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $F + db $75 + + db $00 ; terminator + +TileData_1db96: ; 0x1db96 + dw LoadTileLists + db $05 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $24 + db $25, $26, $27 + + db $02 ; number of tiles + dw vBGMap + $44 + db $28, $29 + + db $00 ; terminator + +TileData_1dba5: ; 0x1dba5 + dw LoadTileLists + db $05 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $24 + db $2A, $2B, $2C + + db $02 ; number of tiles + dw vBGMap + $44 + db $2D, $2E + + db $00 ; terminator + +TileData_1dbb4: ; 0x1dbb4 + dw LoadTileLists + db $05 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $2D + db $27, $26, $2F + + db $02 ; number of tiles + dw vBGMap + $4E + db $29, $28 + + db $00 ; terminator + +TileData_1dbc3: ; 0x1dbc3 + dw LoadTileLists + db $05 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $2D + db $2C, $2B, $30 + + db $02 ; number of tiles + dw vBGMap + $4E + db $2E, $2D + + db $00 ; terminator + +ResolvePsyduckPoliwagCollision: ; 0x1dbd2 + ld a, [wWhichPsyduckPoliwag] + and a + jp z, Func_1dc8e + cp $2 + jr z, .asm_1dc33 + xor a + ld [wWhichPsyduckPoliwag], a + ld hl, wLeftMapMoveCounter + ld a, [hl] + cp $3 + jp z, Func_1dc8e + inc a + ld [hl], a + ld hl, wd4f7 + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1dc06 + ld a, $54 + ld [wc7e3], a + ld a, $55 + ld [wc803], a +.asm_1dc06 + ld a, $1 + call Func_1de4b + ld a, [wLeftMapMoveCounter] + call Func_1de6f + ld a, [wLeftMapMoveCounter] + cp $3 + ld a, $7 + callba Func_10000 + ld a, $2 + ld [wd646], a + ld a, $78 + ld [wLeftMapMoveDiglettAnimationCounter], a + ld a, $14 + ld [wLeftMapMoveDiglettFrame], a + jr .asm_1dc8a + +.asm_1dc33 + xor a + ld [wWhichPsyduckPoliwag], a + ld hl, wRightMapMoveCounter + ld a, [hl] + cp $3 + jp z, Func_1dc8e + inc a + ld [hl], a + ld hl, wd4f9 + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1dc5c + ld a, $52 + ld [wc7f0], a + ld a, $53 + ld [wc810], a +.asm_1dc5c + ld a, $3 + call Func_1de4b + ld a, [wRightMapMoveCounter] + cp $3 + ld a, $8 + callba Func_10000 + ld a, [wRightMapMoveCounter] + cp $3 + ccf + call z, Func_1ddf4 + ld a, $2 + ld [wd645], a + ld a, $28 + ld [wRightMapMoveDiglettAnimationCounter], a + ld a, $78 + ld [wRightMapMoveDiglettFrame], a +.asm_1dc8a + call Func_1de22 + ret + +Func_1dc8e: ; 0x1dc8e + call Func_1dc95 + call Func_1dd2e + ret + +Func_1dc95: ; 0x1dc95 + ld a, [wd646] + cp $0 + ret z + ld a, [wLeftMapMoveDiglettAnimationCounter] + and a + jr z, .asm_1dceb + dec a + ld [wLeftMapMoveDiglettAnimationCounter], a + ld a, [wd644] + and a + ret nz + ld a, [wLeftMapMoveDiglettFrame] + cp $1 + jr z, .asm_1dcb9 + cp $0 + ret z + dec a + ld [wLeftMapMoveDiglettFrame], a + ret + +.asm_1dcb9 + ld a, [wd646] + cp $2 + ret nz + call Func_1130 + ret nz + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1dcd7 + ld a, [wLeftMapMoveCounter] + cp $0 + jr z, .asm_1dcd4 + ld b, $7 + add b + jr .asm_1dcd9 + +.asm_1dcd4 + xor a + jr .asm_1dcd9 + +.asm_1dcd7 + ld a, $8 +.asm_1dcd9 + call Func_1de6f + ld a, [wLeftMapMoveCounter] + cp $3 + ccf + call z, Func_1ddc7 + ld a, $1 + ld [wd646], a + ret + +.asm_1dceb + ld a, [wd646] + cp $1 + ret nz + ld a, [wLeftMapMoveDiglettAnimationCounter] + and a + ret nz + ld a, $0 + call Func_1de4b + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1dd0c + ld a, $5e + ld [wc7e3], a + ld a, $5f + ld [wc803], a +.asm_1dd0c + ld a, $0 + ld [wd646], a + ld a, [wLeftMapMoveCounter] + sub $3 + ret nz + ld a, [wLeftMapMoveCounter] + sub $3 + ld [wLeftMapMoveCounter], a + call Func_1de6f + ld a, $0 + call Func_1de4b + ld a, $0 + ld [wd646], a + ret + +; XXX + ret + +Func_1dd2e: ; 0x1dd2e + ld a, [wd645] + cp $0 + ret z + cp $1 + jr z, .asm_1dd53 + cp $3 + jr z, .asm_1dd69 + ld a, [wRightMapMoveDiglettAnimationCounter] + cp $0 + jr z, .asm_1dd48 + dec a + ld [wRightMapMoveDiglettAnimationCounter], a + ret + +.asm_1dd48 + ld a, $2 + call Func_1de4b + ld a, $1 + ld [wd645], a + ret + +.asm_1dd53 + ld a, [wRightMapMoveCounter] + add $4 + call Func_1de6f + ld a, [wRightMapMoveCounter] + add $3 + call Func_1de4b + ld a, $3 + ld [wd645], a + ret + +.asm_1dd69 + ld a, [wRightMapMoveDiglettFrame] + and a + jr z, .asm_1dd74 + dec a + ld [wRightMapMoveDiglettFrame], a + ret + +.asm_1dd74 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1dd89 + ld a, [wRightMapMoveCounter] + cp $0 + jr z, .asm_1dd85 + ld b, $a + add b + jr .asm_1dd8b + +.asm_1dd85 + ld a, $4 + jr .asm_1dd8b + +.asm_1dd89 + ld a, $9 +.asm_1dd8b + call Func_1de6f + ld a, $2 + call Func_1de4b + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1dda9 + ld a, $24 + ld [wc7f0], a + ld a, $25 + ld [wc810], a + ld a, $0 + ld [wd645], a +.asm_1dda9 + ld a, [wRightMapMoveCounter] + sub $3 + ret nz + ld a, [wRightMapMoveCounter] + sub $3 + ld [wRightMapMoveCounter], a + ld a, $4 + call Func_1de6f + ld a, $2 + call Func_1de4b + ld a, $0 + ld [wd645], a + ret + +Func_1ddc7: ; 0x1ddc7 + ld hl, wd63d + call Func_e4a + ld hl, wd62b + call Func_e4a + jr nc, .asm_1dde4 + ld c, $a + call Func_e55 + callba z, Func_30164 +.asm_1dde4 + xor a + ld [wd55a], a + callba StartMapMoveMode + scf + ret + +Func_1ddf4: ; 0x1ddf4 + ld hl, wd63c + call Func_e4a + ld hl, wd62b + call Func_e4a + jr nc, .asm_1de11 + ld c, $a + call Func_e55 + callba z, Func_30164 +.asm_1de11 + ld a, $1 + ld [wd55a], a + callba StartMapMoveMode + scf + ret + +Func_1de22: ; 0x1de22 + ld a, [wCurrentStage] + bit 0, a + ret z + ld a, $55 + ld [wd803], a + ld a, $4 + ld [wd804], a + ld a, $2 + ld [wd7eb], a + ld bc, FiveHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $0f + call PlaySoundEffect + ret + +Func_1de4b: ; 0x1de4b + ld b, a + ld a, [wCurrentStage] + bit 0, a + ret z + ld a, b + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1df66 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1de63 + ld hl, TileDataPointers_1e00f +.asm_1de63 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_1df66) + call Func_10aa + ret + +Func_1de6f: ; 0x1de6f + ld b, a + ld a, [wCurrentStage] + bit 0, a + ret z + ld a, b + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1e0a4 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1de87 + ld hl, TileDataPointers_1e1d6 +.asm_1de87 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_1e0a4) + call Func_10aa + ret + +Func_1de93: ; 0x1de93 + ld hl, wd4f7 + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_1ded2 + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_1ded2 + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wLeftMapMoveCounter] + and a + jr z, .asm_1ded2 + cp $3 + jr z, .asm_1ded2 + dec a + ld [wLeftMapMoveCounter], a + call Func_1de6f + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1decd + ld a, [wLeftMapMoveCounter] + cp $0 + jr z, .asm_1deca + ld b, $7 + add b + jr .asm_1decf + +.asm_1deca + xor a + jr .asm_1decf + +.asm_1decd + ld a, $8 +.asm_1decf + call Func_1de6f +.asm_1ded2 + ld hl, wd4f9 + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_1df14 + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_1df14 + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wRightMapMoveCounter] + and a + jr z, .asm_1df14 + cp $3 + jr z, .asm_1df14 + dec a + ld [wRightMapMoveCounter], a + add $4 + call Func_1de6f + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1df0f + ld a, [wRightMapMoveCounter] + cp $0 + jr z, .asm_1df0b + ld b, $a + add b + jr .asm_1df11 + +.asm_1df0b + ld a, $4 + jr .asm_1df11 + +.asm_1df0f + ld a, $9 +.asm_1df11 + call Func_1de6f +.asm_1df14 + ret + +Func_1df15: ; 0x1df15 + ld b, $0 + ld hl, wd4f8 + ld a, [hld] + or [hl] + jr z, .asm_1df3e + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_1df3e + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_1df3e + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wLeftMapMoveCounter] + and a + jr z, .asm_1df3e + cp $3 + jr z, .asm_1df3e + dec a + ld [wLeftMapMoveCounter], a +.asm_1df3e + ld hl, wd4fa + ld a, [hld] + or [hl] + jr z, .asm_1df65 + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_1df65 + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_1df65 + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wRightMapMoveCounter] + and a + jr z, .asm_1df65 + cp $3 + jr z, .asm_1df65 + dec a + ld [wRightMapMoveCounter], a +.asm_1df65 + ret + +TileDataPointers_1df66: + dw TileData_1df74 + dw TileData_1df77 + dw TileData_1df7a + dw TileData_1df7f + dw TileData_1df84 + dw TileData_1df89 + dw TileData_1df8e + +TileData_1df74: ; 0x1df74 + db $01 + dw TileData_1df93 + +TileData_1df77: ; 0x1df77 + db $01 + dw TileData_1df9f + +TileData_1df7a: ; 0x1df7a + db $02 + dw TileData_1dfab + dw TileData_1dfb5 + +TileData_1df7f: ; 0x1df7f + db $02 + dw TileData_1dfbf + dw TileData_1dfc9 + +TileData_1df84: ; 0x1df84 + db $02 + dw TileData_1dfd3 + dw TileData_1dfdd + +TileData_1df89: ; 0x1df89 + db $02 + dw TileData_1dfe7 + dw TileData_1dff1 + +TileData_1df8e: ; 0x1df8e + db $02 + dw TileData_1dffb + dw TileData_1e005 + +TileData_1df93: ; 0x1df93 + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $A3 + db $4A + + db $01 ; number of tiles + dw vBGMap + $C3 + db $4B + + db $00 ; terminator + +TileData_1df9f: ; 0x1df9f + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $A3 + db $4C + + db $01 ; number of tiles + dw vBGMap + $C3 + db $4D + + db $00 ; terminator + +TileData_1dfab: ; 0x1dfab + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4E + dw StageBlueFieldBottomBaseGameBoyGfx + $CE0 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1dfb5: ; 0x1dfb5 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $51 + dw StageBlueFieldBottomBaseGameBoyGfx + $D10 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1dfbf: ; 0x1dfbf + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4E + dw StageBlueFieldBottomBaseGameBoyGfx + $D30 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1dfc9: ; 0x1dfc9 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $51 + dw StageBlueFieldBottomBaseGameBoyGfx + $D60 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1dfd3: ; 0x1dfd3 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $20B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1dfdd: ; 0x1dfdd + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $51 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $20E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1dfe7: ; 0x1dfe7 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2100 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1dff1: ; 0x1dff1 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $51 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2130 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1dffb: ; 0x1dffb + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2150 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e005: ; 0x1e005 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $51 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2180 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileDataPointers_1e00f: + dw TileData_1e01d + dw TileData_1e020 + dw TileData_1e023 + dw TileData_1e026 + dw TileData_1e029 + dw TileData_1e02c + dw TileData_1e02f + +TileData_1e01d: ; 0x1e01d + db $01 + dw TileData_1e032 + +TileData_1e020: ; 0x1e020 + db $01 + dw TileData_1e03e + +TileData_1e023: ; 0x1e023 + db $01 + dw TileData_1e04a + +TileData_1e026: ; 0x1e026 + db $01 + dw TileData_1e05c + +TileData_1e029: ; 0x1e029 + db $01 + dw TileData_1e06e + +TileData_1e02c: ; 0x1e02c + db $01 + dw TileData_1e080 + +TileData_1e02f: ; 0x1e02f + db $01 + dw TileData_1e092 + +TileData_1e032: ; 0x1e032 + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $A3 + db $35 + + db $01 ; number of tiles + dw vBGMap + $C3 + db $36 + + db $00 ; terminator + +TileData_1e03e: ; 0x1e03e + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $A3 + db $37 + + db $01 ; number of tiles + dw vBGMap + $C3 + db $38 + + db $00 ; terminator + +TileData_1e04a: ; 0x1e04a + dw LoadTileLists + db $05 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $90 + db $4F + + db $02 ; number of tiles + dw vBGMap + $AF + db $50, $51 + + db $02 ; number of tiles + dw vBGMap + $CF + db $52, $53 + + db $00 ; terminator + +TileData_1e05c: ; 0x1e05c + dw LoadTileLists + db $05 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $90 + db $54 + + db $02 ; number of tiles + dw vBGMap + $AF + db $55, $56 + + db $02 ; number of tiles + dw vBGMap + $CF + db $57, $58 + + db $00 ; terminator + +TileData_1e06e: ; 0x1e06e + dw LoadTileLists + db $05 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $90 + db $59 + + db $02 ; number of tiles + dw vBGMap + $AF + db $5A, $5B + + db $02 ; number of tiles + dw vBGMap + $CF + db $5C, $5D + + db $00 ; terminator + +TileData_1e080: ; 0x1e080 + dw LoadTileLists + db $05 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $90 + db $59 + + db $02 ; number of tiles + dw vBGMap + $AF + db $5A, $5E + + db $02 ; number of tiles + dw vBGMap + $CF + db $5C, $5F + + db $00 ; terminator + +TileData_1e092: ; 0x1e092 + dw LoadTileLists + db $05 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $90 + db $60 + + db $02 ; number of tiles + dw vBGMap + $AF + db $61, $62 + + db $02 ; number of tiles + dw vBGMap + $CF + db $63, $64 + + db $00 ; terminator + +TileDataPointers_1e0a4: + dw TileData_1e0b8 + dw TileData_1e0bf + dw TileData_1e0c6 + dw TileData_1e0cd + dw TileData_1e0d4 + dw TileData_1e0d9 + dw TileData_1e0de + dw TileData_1e0e3 + dw TileData_1e0e8 + dw TileData_1e0ed + +TileData_1e0b8: ; 0x1e0b8 + db $03 + dw TileData_1e0f0 + dw TileData_1e0fa + dw TileData_1e104 + +TileData_1e0bf: ; 0x1e0bf + db $03 + dw TileData_1e10e + dw TileData_1e118 + dw TileData_1e122 + +TileData_1e0c6: ; 0x1e0c6 + db $03 + dw TileData_1e12c + dw TileData_1e136 + dw TileData_1e140 + +TileData_1e0cd: ; 0x1e0cd + db $03 + dw TileData_1e14a + dw TileData_1e154 + dw TileData_1e15e + +TileData_1e0d4: ; 0x1e0d4 + db $02 + dw TileData_1e168 + dw TileData_1e172 + +TileData_1e0d9: ; 0x1e0d9 + db $02 + dw TileData_1e17c + dw TileData_1e186 + +TileData_1e0de: ; 0x1e0de + db $02 + dw TileData_1e190 + dw TileData_1e19a + +TileData_1e0e3: ; 0x1e0e3 + db $02 + dw TileData_1e1a4 + dw TileData_1e1ae + +TileData_1e0e8: ; 0x1e0e8 + db $02 + dw TileData_1e1b8 + dw TileData_1e1c2 + +TileData_1e0ed: ; 0x1e0ed + db $01 + dw TileData_1e1cc + +TileData_1e0f0: ; 0x1e0f0 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageBlueFieldBottomBaseGameBoyGfx + $C10 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e0fa: ; 0x1e0fa + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageBlueFieldBottomBaseGameBoyGfx + $C40 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e104: ; 0x1e104 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $47 + dw StageBlueFieldBottomBaseGameBoyGfx + $C70 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e10e: ; 0x1e10e + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1FC0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e118: ; 0x1e118 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2050 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e122: ; 0x1e122 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2080 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e12c: ; 0x1e12c + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1FF0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e136: ; 0x1e136 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2050 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e140: ; 0x1e140 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2080 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e14a: ; 0x1e14a + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2020 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e154: ; 0x1e154 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2050 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e15e: ; 0x1e15e + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2080 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e168: ; 0x1e168 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $58 + dw StageBlueFieldBottomBaseGameBoyGfx + $D80 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e172: ; 0x1e172 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5A + dw StageBlueFieldBottomBaseGameBoyGfx + $DA0 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e17c: ; 0x1e17c + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $58 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $21A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e186: ; 0x1e186 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $21E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e190: ; 0x1e190 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $58 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $21A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e19a: ; 0x1e19a + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2210 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e1a4: ; 0x1e1a4 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $58 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $21C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e1ae: ; 0x1e1ae + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2240 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e1b8: ; 0x1e1b8 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageBlueFieldBottomBaseGameBoyGfx + $C40 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e1c2: ; 0x1e1c2 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $47 + dw StageBlueFieldBottomBaseGameBoyGfx + $C70 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e1cc: ; 0x1e1cc + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $58 + dw StageBlueFieldBottomBaseGameBoyGfx + $D80 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileDataPointers_1e1d6: + dw TileData_1e1f2 + dw TileData_1e1f5 + dw TileData_1e1f8 + dw TileData_1e1fb + dw TileData_1e1fe + dw TileData_1e201 + dw TileData_1e204 + dw TileData_1e207 + dw TileData_1e20a + dw TileData_1e20d + dw TileData_1e210 + dw TileData_1e213 + dw TileData_1e216 + dw TileData_1e219 + +TileData_1e1f2: ; 0x1e1f2 + db $01 + dw TileData_1e21c + +TileData_1e1f5: ; 0x1e1f5 + db $01 + dw TileData_1e238 + +TileData_1e1f8: ; 0x1e1f8 + db $01 + dw TileData_1e254 + +TileData_1e1fb: ; 0x1e1fb + db $01 + dw TileData_1e270 + +TileData_1e1fe: ; 0x1e1fe + db $01 + dw TileData_1e28c + +TileData_1e201: ; 0x1e201 + db $01 + dw TileData_1e2a2 + +TileData_1e204: ; 0x1e204 + db $01 + dw TileData_1e2b8 + +TileData_1e207: ; 0x1e207 + db $01 + dw TileData_1e2ce + +TileData_1e20a: ; 0x1e20a + db $01 + dw TileData_1e2e4 + +TileData_1e20d: ; 0x1e20d + db $01 + dw TileData_1e2fa + +TileData_1e210: ; 0x1e210 + db $01 + dw TileData_1e310 + +TileData_1e213: ; 0x1e213 + db $01 + dw TileData_1e326 + +TileData_1e216: ; 0x1e216 + db $01 + dw TileData_1e336 + +TileData_1e219: ; 0x1e219 + db $01 + dw TileData_1e346 + +TileData_1e21c: ; 0x1e21c + dw LoadTileLists + db $0C ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $60 + db $36, $37, $38 + + db $03 ; number of tiles + dw vBGMap + $80 + db $39, $3A, $3B + + db $03 ; number of tiles + dw vBGMap + $A0 + db $4C, $4D, $4E + + db $03 ; number of tiles + dw vBGMap + $C0 + db $4F, $50, $51 + + db $00 ; terminator + +TileData_1e238: ; 0x1e238 + dw LoadTileLists + db $0C ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $60 + db $3C, $37, $38 + + db $03 ; number of tiles + dw vBGMap + $80 + db $3D, $3E, $3B + + db $03 ; number of tiles + dw vBGMap + $A0 + db $52, $53, $54 + + db $03 ; number of tiles + dw vBGMap + $C0 + db $55, $56, $57 + + db $00 ; terminator + +TileData_1e254: ; 0x1e254 + dw LoadTileLists + db $0C ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $60 + db $40, $41, $38 + + db $03 ; number of tiles + dw vBGMap + $80 + db $42, $43, $3B + + db $03 ; number of tiles + dw vBGMap + $A0 + db $52, $53, $54 + + db $03 ; number of tiles + dw vBGMap + $C0 + db $55, $56, $57 + + db $00 ; terminator + +TileData_1e270: ; 0x1e270 + dw LoadTileLists + db $0C ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $60 + db $36, $46, $47 + + db $03 ; number of tiles + dw vBGMap + $80 + db $48, $49, $4A + + db $03 ; number of tiles + dw vBGMap + $A0 + db $52, $53, $54 + + db $03 ; number of tiles + dw vBGMap + $C0 + db $55, $56, $57 + + db $00 ; terminator + +TileData_1e28c: ; 0x1e28c + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $91 + db $4D, $65, $4E + + db $03 ; number of tiles + dw vBGMap + $B1 + db $66, $67, $68 + + db $03 ; number of tiles + dw vBGMap + $D1 + db $69, $6A, $6B + + db $00 ; terminator + +TileData_1e2a2: ; 0x1e2a2 + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $91 + db $4D, $6C, $4E + + db $03 ; number of tiles + dw vBGMap + $B1 + db $6D, $6E, $68 + + db $03 ; number of tiles + dw vBGMap + $D1 + db $6F, $70, $6B + + db $00 ; terminator + +TileData_1e2b8: ; 0x1e2b8 + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $91 + db $4D, $6C, $4E + + db $03 ; number of tiles + dw vBGMap + $B1 + db $66, $72, $68 + + db $03 ; number of tiles + dw vBGMap + $D1 + db $69, $73, $6B + + db $00 ; terminator + +TileData_1e2ce: ; 0x1e2ce + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $91 + db $4D, $75, $4E + + db $03 ; number of tiles + dw vBGMap + $B1 + db $66, $76, $77 + + db $03 ; number of tiles + dw vBGMap + $D1 + db $69, $78, $79 + + db $00 ; terminator + +TileData_1e2e4: ; 0x1e2e4 + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $80 + db $3F, $3A, $3B + + db $03 ; number of tiles + dw vBGMap + $A0 + db $4C, $4D, $4E + + db $03 ; number of tiles + dw vBGMap + $C0 + db $4F, $50, $51 + + db $00 ; terminator + +TileData_1e2fa: ; 0x1e2fa + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $80 + db $44, $45, $3B + + db $03 ; number of tiles + dw vBGMap + $A0 + db $4C, $4D, $4E + + db $03 ; number of tiles + dw vBGMap + $C0 + db $4F, $50, $51 + + db $00 ; terminator + +TileData_1e310: ; 0x1e310 + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $80 + db $39, $4B, $4A + + db $03 ; number of tiles + dw vBGMap + $A0 + db $4C, $4D, $4E + + db $03 ; number of tiles + dw vBGMap + $C0 + db $4F, $50, $51 + + db $00 ; terminator + +TileData_1e326: ; 0x1e326 + dw LoadTileLists + db $06 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $91 + db $4D, $65, $4E + + db $03 ; number of tiles + dw vBGMap + $B1 + db $6D, $71, $68 + + db $00 ; terminator + +TileData_1e336: ; 0x1e336 + dw LoadTileLists + db $06 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $91 + db $4D, $65, $4E + + db $03 ; number of tiles + dw vBGMap + $B1 + db $66, $74, $68 + + db $00 ; terminator + +TileData_1e346: ; 0x1e346 + dw LoadTileLists + db $06 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $91 + db $4D, $65, $4E + + db $03 ; number of tiles + dw vBGMap + $B1 + db $66, $67, $77 + + db $00 ; terminator + +ResolveBlueStagePinballUpgradeTriggersCollision: ; 0x1e356 + ld a, [wWhichPinballUpgradeTrigger] + and a + jp z, Func_1e471 + xor a + ld [wWhichPinballUpgradeTrigger], a + ld a, [wStageCollisionState] + cp $0 + jr nz, .asm_1e386 + ld a, $1 + ld [wStageCollisionState], a + callba LoadStageCollisionAttributes + ld a, $1 + ld [wd580], a + callba Func_1404a +.asm_1e386 + ld a, [wStageCollisionState] + bit 0, a + jp z, Func_1e471 + ld a, [wd5fc] + and a + jp nz, Func_1e471 + xor a + ld [wRightAlleyTrigger], a + ld [wLeftAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $b + callba Func_10000 + ld a, [wWhichPinballUpgradeTriggerId] + sub $13 + ld c, a + ld b, $0 + ld hl, wd5f9 + add hl, bc + ld a, [hl] + ld [hl], $1 + and a + jr z, .asm_1e3bf + ld [hl], $0 +.asm_1e3bf + ld bc, OneHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld hl, wd5f9 + ld a, [hli] + and [hl] + inc hl + and [hl] + jr nz, .asm_1e3de + lb de, $00, $09 + call PlaySoundEffect + jp asm_1e475 + +.asm_1e3de + ld a, $1 + ld [wd5fc], a + ld a, $80 + ld [wd5fd], a + ; load approximately 1 minute of frames into wBallTypeCounter + ld a, $10 + ld [wBallTypeCounter], a + ld a, $e + ld [wBallTypeCounter + 1], a + ld bc, FourHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wBallType] + cp MASTER_BALL + jr z, .masterBall + lb de, $06, $3a + call PlaySoundEffect + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5cc + ld de, FieldMultiplierText + call LoadTextHeader + ld a, [wBallType] + ld c, a + ld b, $0 + ld hl, BallTypeProgression2BlueField + add hl, bc + ld a, [hl] + ld [wBallType], a + add $30 + ld [wBottomMessageText + $12], a + jr .asm_1e465 + +.masterBall + lb de, $0f, $4d + call PlaySoundEffect + ld bc, OneMillionPoints + callba AddBigBCD6FromQueue + ld bc, $0100 + ld de, $0000 + push bc + push de + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5d4 + ld de, DigitsText1to8 + call Func_32cc + pop de + pop bc + ld hl, wd5cc + ld de, FieldMultiplierSpecialBonusText + call LoadTextHeader +.asm_1e465 + callba TransitionPinballUpgrade + jr asm_1e475 + +Func_1e471: ; 0x1e471 + call Func_1e4b8 + ret z +asm_1e475: ; 0x1e475 + ld hl, wd5fb + ld b, $3 +.asm_1e47a + ld a, [hld] + push hl + call Func_1e484 + pop hl + dec b + jr nz, .asm_1e47a + ret + +Func_1e484: ; 0x1e484 + and a + jr z, .asm_1e496 + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1e491 + ld hl, TileDataPointers_1e520 + jr .asm_1e4a3 + +.asm_1e491 + ld hl, TileDataPointers_1e556 + jr .asm_1e4a3 + +.asm_1e496 + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1e4a0 + ld hl, TileDataPointers_1e526 + jr .asm_1e4a3 + +.asm_1e4a0 + ld hl, TileDataPointers_1e55c +.asm_1e4a3 + push bc + dec b + sla b + ld e, b + ld d, $0 + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + ld a, $7 + ld de, LoadTileLists + call Func_10c5 + pop bc + ret + +Func_1e4b8: ; 0x1e4b8 + ld a, [wd5fc] + and a + jr z, .asm_1e4e5 + ld a, [wd5fd] + dec a + ld [wd5fd], a + jr nz, .asm_1e4ca + ld [wd5fc], a +.asm_1e4ca + and $7 + jr nz, .asm_1e4e3 + ld a, [wd5fd] + srl a + srl a + srl a + and $1 + ld hl, wd5f9 + ld [hli], a + ld [hli], a + ld [hl], a + ld a, $1 + and a + ret + +.asm_1e4e3 + xor a + ret + +.asm_1e4e5 + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed + jr z, .leftFlipperKeyIsPressed + ; left flipper key is pressed + ld hl, wd5f9 + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hl] + ld e, a + ld a, c + ld [hld], a + ld a, e + ld [hld], a + ld a, b + ld [hl], a + ret + +.leftFlipperKeyIsPressed + ld hl, wKeyConfigRightFlipper + call IsKeyPressed + ret z + ; right flipper key is pressed + ld hl, wd5f9 + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hl] + ld e, a + ld a, b + ld [hld], a + ld a, c + ld [hld], a + ld a, e + ld [hl], a + ret + +BallTypeProgression2BlueField: ; 0x1e514 +; Determines the next upgrade for the Ball. + db GREAT_BALL ; POKE_BALL -> GREAT_BALL + db GREAT_BALL ; unused + db ULTRA_BALL ; GREAT_BALL -> ULTRA_BALL + db MASTER_BALL ; ULTRA_BALL -> MASTER_BALL + db MASTER_BALL ; unused + db MASTER_BALL ; MASTER_BALL -> MASTER_BALL + +BallTypeDegradation2BlueField: ; 0x1e51a +; Determines the previous upgrade for the Ball. + db POKE_BALL ; POKE_BALL -> POKE_BALL + db POKE_BALL ; unused + db POKE_BALL ; GREAT_BALL -> POKE_BALL + db GREAT_BALL ; ULTRA_BALL -> GREAT_BALL + db ULTRA_BALL ; unused + db ULTRA_BALL ; MASTER_BALL -> GREAT_BALL + +TileDataPointers_1e520: + dw TileData_1e52c + dw TileData_1e533 + dw TileData_1e53a + +TileDataPointers_1e526: + dw TileData_1e541 + dw TileData_1e548 + dw TileData_1e54f + +TileData_1e52c: ; 0x1e52c + db $02, $02 + dw vBGMap + $86 + db $66, $67 + db $00 + +TileData_1e533: ; 0x1e533 + db $02, $02 + dw vBGMap + $69 + db $66, $67 + db $00 + +TileData_1e53a: ; 0x1e53a + db $02, $02 + dw vBGMap + $8C + db $66, $67 + db $00 + +TileData_1e541: ; 0x1e541 + db $02, $02 + dw vBGMap + $86 + db $64, $65 + db $00 + +TileData_1e548: ; 0x1e548 + db $02, $02 + dw vBGMap + $69 + db $64, $65 + db $00 + +TileData_1e54f: ; 0x1e54f + db $02, $02 + dw vBGMap + $8C + db $64, $65 + db $00 + +TileDataPointers_1e556: + dw TileData_1e562 + dw TileData_1e569 + dw TileData_1e570 + +TileDataPointers_1e55c: + dw TileData_1e577 + dw TileData_1e57e + dw TileData_1e585 + +TileData_1e562: ; 0x1e562 + db $02, $02 + dw vBGMap + $86 + db $43, $43 + db $00 + +TileData_1e569: ; 0x1e569 + db $02, $02 + dw vBGMap + $69 + db $43, $43 + db $00 + +TileData_1e570: ; 0x1e570 + db $02, $02 + dw vBGMap + $8C + db $43, $43 + db $00 + +TileData_1e577: ; 0x1e577 + db $02, $02 + dw vBGMap + $86 + db $42, $42 + db $00 + +TileData_1e57e: ; 0x1e57e + db $02, $02 + dw vBGMap + $69 + db $42, $42 + db $00 + +TileData_1e585: ; 0x1e585 + db $02, $02 + dw vBGMap + $8C + db $42, $42 + db $00 + +HandleBlueStageBallTypeUpgradeCounter: ; 0x1e58c + ld a, [wCapturingMon] + and a + ret nz + ; check if counter is at 0 + ld hl, wBallTypeCounter + ld a, [hli] + ld c, a + ld b, [hl] + or b + ret z + dec bc + ld a, b + ld [hld], a + ld [hl], c + or c + ret nz + ; counter is now 0! Degrade the ball upgrade. + ld a, [wBallType] + ld c, a + ld b, $0 + ld hl, BallTypeDegradation2BlueField + add hl, bc + ld a, [hl] + ld [wBallType], a + and a + jr z, .pokeball + ; load approximately 1 minute of frames into wBallTypeCounter + ld a, $10 + ld [wBallTypeCounter], a + ld a, $e + ld [wBallTypeCounter + 1], a +.pokeball + callba TransitionPinballUpgrade + ret + +Func_1e5c5: ; 0x1e5c5 + ld a, [wWhichCAVELight] + and a + jr z, .asm_1e623 + xor a + ld [wWhichCAVELight], a + ld a, [wd513] + and a + jr nz, .asm_1e623 + ld a, [wWhichCAVELightId] + sub $16 + ld c, a + ld b, $0 + ld hl, wd50f + add hl, bc + ld a, [hl] + ld [hl], $1 + and a + ret nz + ld bc, OneHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld hl, wd50f + ld a, [hli] + and [hl] + inc hl + and [hl] + inc hl + and [hl] + jr z, Func_1e627 + ld a, $1 + ld [wd513], a + ld a, $80 + ld [wd514], a + ld bc, FourHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $09 + call PlaySoundEffect + ld hl, wd62c + call Func_e4a + jr Func_1e627 + +.asm_1e623 + call Func_1e66a + ret z + ; fall through + +Func_1e627: ; 0x1e627 + ld hl, wd512 + ld b, $4 +.asm_1e62c + ld a, [hld] + push hl + call Func_1e636 + pop hl + dec b + jr nz, .asm_1e62c + ret + +Func_1e636: ; 0x1e636 + and a + jr z, .asm_1e648 + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1e643 + ld hl, TileDataPointers_1e6d7 + jr .asm_1e655 + +.asm_1e643 + ld hl, TileDataPointers_1e717 + jr .asm_1e655 + +.asm_1e648 + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1e652 + ld hl, TileDataPointers_1e6df + jr .asm_1e655 + +.asm_1e652 + ld hl, TileDataPointers_1e71f +.asm_1e655 + push bc + dec b + sla b + ld e, b + ld d, $0 + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + ld a, $7 + ld de, LoadTileLists + call Func_10c5 + pop bc + ret + +Func_1e66a: ; 0x1e66a + ld a, [wd513] + and a + jr z, .asm_1e6a0 + ld a, [wd514] + dec a + ld [wd514], a + jr nz, .asm_1e687 + ld [wd513], a + ld a, $1 + ld [wd608], a + ld a, $3 + ld [wd607], a + xor a +.asm_1e687 + and $7 + ret nz + ld a, [wd514] + srl a + srl a + srl a + and $1 + ld hl, wd50f + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld a, $1 + and a + ret + +.asm_1e6a0 + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed + jr z, .asm_1e6bc + ld hl, wd50f + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld e, a + ld a, [hl] + ld d, a + ld a, c + ld [hld], a + ld a, d + ld [hld], a + ld a, e + ld [hld], a + ld a, b + ld [hl], a + ret + +.asm_1e6bc + ld hl, wKeyConfigRightFlipper + call IsKeyPressed + ret z + ld hl, wd50f + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld e, a + ld a, [hl] + ld d, a + ld a, e + ld [hld], a + ld a, b + ld [hld], a + ld a, c + ld [hld], a + ld a, d + ld [hl], a + ret + +TileDataPointers_1e6d7: + dw TileData_1e6e7 + dw TileData_1e6ed + dw TileData_1e6f3 + dw TileData_1e6f9 + +TileDataPointers_1e6df: + dw TileData_1e6ff + dw TileData_1e705 + dw TileData_1e70b + dw TileData_1e711 + +TileData_1e6e7: ; 0x1e6e7 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $5E + + db $00 ; terminator + +TileData_1e6ed: ; 0x1e6ed + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $5E + + db $00 ; terminator + +TileData_1e6f3: ; 0x1e6f3 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $60 + + db $00 ; terminator + +TileData_1e6f9: ; 0x1e6f9 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $60 + + db $00 ; terminator + +TileData_1e6ff: ; 0x1e6ff + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $5D + + db $00 ; terminator + +TileData_1e705: ; 0x1e705 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $5D + + db $00 ; terminator + +TileData_1e70b: ; 0x1e70b + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $5F + + db $00 ; terminator + +TileData_1e711: ; 0x1e711 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $5F + + db $00 ; terminator + +TileDataPointers_1e717: + dw TileData_1e727 + dw TileData_1e72d + dw TileData_1e733 + dw TileData_1e739 + +TileDataPointers_1e71f: + dw TileData_1e73f + dw TileData_1e745 + dw TileData_1e74b + dw TileData_1e751 + +TileData_1e727: ; 0x1e727 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $49 + + db $00 ; terminator + +TileData_1e72d: ; 0x1e72d + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $4A + + db $00 ; terminator + +TileData_1e733: ; 0x1e733 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $4B + + db $00 ; terminator + +TileData_1e739: ; 0x1e739 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $4C + + db $00 ; terminator + +TileData_1e73f: ; 0x1e73f + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $47 + + db $00 ; terminator + +TileData_1e745: ; 0x1e745 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $48 + + db $00 ; terminator + +TileData_1e74b: ; 0x1e74b + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $7A + + db $00 ; terminator + +TileData_1e751: ; 0x1e751 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $7B + + db $00 ; terminator + +Func_1e757: ; 0x1e757 + ld a, [wSlotCollision] + and a + jr z, .asm_1e78c + xor a + ld [wSlotCollision], a + ld a, [wd604] + and a + ret z + ld a, [wd603] + and a + jr nz, .asm_1e78c + xor a + ld hl, wBallXVelocity + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [wd549], a + ld [wBallXPos], a + ld [wBallYPos], a + ld a, $50 + ld [wBallXPos + 1], a + ld a, $16 + ld [wBallYPos + 1], a + ld a, $13 + ld [wd603], a +.asm_1e78c + ld a, [wd603] + and a + ret z + dec a + ld [wd603], a + ld a, $18 + ld [wd606], a + ld a, [wd603] + cp $12 + jr nz, .asm_1e7b2 + lb de, $00, $21 + call PlaySoundEffect + callba LoadMiniBallGfx + ret + +.asm_1e7b2 + cp $f + jr nz, .asm_1e7c1 + callba Func_dd62 + ret + +.asm_1e7c1 + cp $c + jr nz, .asm_1e7d0 + xor a + ld [wd548], a + ld [wBallSpin], a + ld [wBallRotation], a + ret + +.asm_1e7d0 + cp $9 + jr nz, .asm_1e7d8 + call Func_1e830 + ret + +.asm_1e7d8 + cp $6 + jr nz, .asm_1e7f5 + xor a + ld [wd604], a + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + callba LoadMiniBallGfx + ret + +.asm_1e7f5 + cp $3 + jr nz, .asm_1e80e + callba LoadBallGfx + ld a, $2 + ld [wBallYVelocity + 1], a + ld a, $80 + ld [wBallXVelocity], a + ret + +.asm_1e80e + and a + ret nz + call Func_1e8f6 + ld a, [wCatchEmOrEvolutionSlotRewardActive] + cp CATCHEM_MODE_SLOT_REWARD + ret nz + call GenRandom + and $8 + ld [wRareMonsFlag], a + callba StartCatchEmMode + xor a + ld [wCatchEmOrEvolutionSlotRewardActive], a + ret + +Func_1e830: ; 0x1e830 + xor a + ld [wIndicatorStates + 4], a + ld a, $d + callba Func_10000 + jr nc, .asm_1e84b + ld a, $1 + ld [wd548], a + ld [wd549], a + ret + +.asm_1e84b + ld a, [wd624] + cp $3 + jr nz, .asm_1e891 + ld a, [wd607] + and a + jr nz, .asm_1e891 +.asm_1e858 + ld a, [wBonusStageSlotRewardActive] + and a + jr nz, .asm_1e867 + xor a + ld [wd625], a + ld a, $40 + ld [wd626], a +.asm_1e867 + xor a + ld [wBonusStageSlotRewardActive], a + ld a, $1 + ld [wd495], a + ld [wd4ae], a + ld a, [wd498] + ld c, a + ld b, $0 + ld hl, GoToBonusStageTextIds_BlueField + add hl, bc + ld a, [hl] + ld [wd497], a + call Func_1e8c3 + xor a + ld [wd609], a + ld [wCatchEmOrEvolutionSlotRewardActive], a + ld a, $1e + ld [wd607], a + ret + +.asm_1e891 + callba Func_ed8e + xor a + ld [wd608], a + ld a, [wd61d] + cp $d + jr nc, .asm_1e858 + ld a, $1 + ld [wd548], a + ld [wd549], a + ld a, [wCatchEmOrEvolutionSlotRewardActive] + cp EVOLUTION_MODE_SLOT_REWARD + ret nz + callba Func_10ab3 + xor a + ld [wCatchEmOrEvolutionSlotRewardActive], a + ret + +Func_1e8c3: ; 0x1e8c3 + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5dc + ld a, [wd497] + ld de, GoToMeowthStageText + cp STAGE_MEOWTH_BONUS + jr z, .loadText + ld de, GoToSeelStageText + cp STAGE_SEEL_BONUS + jr z, .loadText + ld de, GoToMewtwoStageText +.loadText + call LoadTextHeader + ld de, $0000 + call PlaySong + rst AdvanceFrame + lb de, $3c, $23 + call PlaySoundEffect + ret + +GoToBonusStageTextIds_BlueField: + db STAGE_GENGAR_BONUS + db STAGE_MEWTWO_BONUS + db STAGE_MEOWTH_BONUS + db STAGE_DIGLETT_BONUS + db STAGE_SEEL_BONUS + +Func_1e8f6: ; 0x1e8f6 + ld a, [wCurrentStage] + and $1 + sla a + ld c, a + ld a, [wd604] + add c + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1e91e + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1e912 + ld hl, TileDataPointers_1e970 +.asm_1e912 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_1e91e) + call Func_10aa + ret + +TileDataPointers_1e91e: + dw TileData_1e926 + dw TileData_1e929 + dw TileData_1e92c + dw TileData_1e931 + +TileData_1e926: ; 0x1e926 + db $01 + dw TileData_1e936 + +TileData_1e929: ; 0x1e929 + db $01 + dw TileData_1e93f + +TileData_1e92c: ; 0x1e92c + db $02 + dw TileData_1e948 + dw TileData_1e952 + +TileData_1e931: ; 0x1e931 + db $02 + dw TileData_1e95c + dw TileData_1e966 + +TileData_1e936: ; 0x1e936 + dw LoadTileLists + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $229 + db $EE, $EF + + db $00 ; terminator + +TileData_1e93f: ; 0x1e93f + dw LoadTileLists + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $229 + db $F0, $F1 + + db $00 ; terminator + +TileData_1e948: ; 0x1e948 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1F + dw StageBlueFieldBottomBaseGameBoyGfx + $9F0 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e952: ; 0x1e952 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $21 + dw StageBlueFieldBottomBaseGameBoyGfx + $A10 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1e95c: ; 0x1e95c + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1F + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1BC0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e966: ; 0x1e966 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $21 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1BE0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileDataPointers_1e970: + dw TileData_1e978 + dw TileData_1e97d + dw TileData_1e980 + dw TileData_1e983 + +TileData_1e978: ; 0x1e978 + db $02 + dw TileData_1e986 + dw TileData_1e98F + +TileData_1e97d: ; 0x1e97d + db $01 + dw TileData_1e99b + +TileData_1e980: ; 0x1e980 + db $01 + dw TileData_1e9a4 + +TileData_1e983: ; 0x1e983 + db $01 + dw TileData_1e9b2 + +TileData_1e986: ; 0x1e986 + dw LoadTileLists + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $229 + db $F0, $F1 + + db $00 ; terminator + +TileData_1e98F: ; 0x1e98F + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $224 + db $D8 + + db $01 ; number of tiles + dw vBGMap + $22f + db $EC + + db $00 ; terminator + +TileData_1e99b: ; 0x1e99b + dw LoadTileLists + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $229 + db $F2, $F3 + + db $00 ; terminator + +TileData_1e9a4: ; 0x1e9a4 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $9809 + db $15, $16 + + db $02 ; terminator + dw vBGMap + $29 + db $17, $18 + + db $00 ; terminator + +TileData_1e9b2: ; 0x1e9b2 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $9 + db $19, $1A + + db $02 ; terminator + dw vBGMap + $29 + db $1B, $1C + + db $00 ; terminator + +Func_1e9c0: ; 0x1e9c0 + ld a, [wd607] + and a + ret z + dec a + ld [wd607], a + ret nz + ld a, [wInSpecialMode] + and a + ret nz + ld a, [wd609] + and a + jr z, .asm_1e9dc + ld a, [wd498] + add $15 + jr .asm_1e9e3 + +.asm_1e9dc + ld a, [wd608] + and a + ret z + ld a, $1a +.asm_1e9e3 + ld hl, wCurrentStage + bit 0, [hl] + callba nz, Func_30256 + ld a, [wd604] + and a + ret nz + ld a, $1 + ld [wd604], a + ld a, $80 + ld [wIndicatorStates + 4], a + ld a, [wCurrentStage] + bit 0, a + call nz, Func_1e8f6 + ret + +Func_1ea0a: ; 0x1ea0a + ld a, [wd604] + and a + ret z + ld a, [wBallYPos + 1] + sub $fe + cp $30 + ret nc + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, a + ld b, $0 + sla c + sla c + add hl, bc + jr asm_1ea6a + +Func_1ea3b: ; 0x1ea3b + ld a, [wd604] + and a + ret z + ld a, [wBallYPos + 1] + sub $86 + cp $30 + ret nc + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, a + ld b, $0 + sla c + sla c + add hl, bc + ; fall through + +asm_1ea6a: ; 0x1ea6a + ld bc, BallPhysicsData_f0000 + add hl, bc + ld de, wBallXVelocity + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + push bc + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + bit 7, b + jr z, .asm_1eaa9 + ld a, c + cpl + ld c, a + ld a, b + cpl + ld b, a + inc bc +.asm_1eaa9 + pop hl + bit 7, h + jr z, .asm_1eab5 + ld a, l + cpl + ld l, a + ld a, h + cpl + ld h, a + inc hl +.asm_1eab5 + add hl, bc + sla l + rl h + ld a, h + cp $2 + ret c + ld a, [wd804] + and a + ret nz + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + lb de, $00, $04 + call PlaySoundEffect + ret + +Func_1ead4: ; 0x1ead4 + ld a, [hNumFramesDropped] + and $f + ret nz + ld bc, $0000 +.asm_1eadc + push bc + ld hl, wIndicatorStates + add hl, bc + ld a, [hl] + cp $1 + jr z, .asm_1eaf8 + bit 7, [hl] + jr z, .asm_1eaf8 + ld a, [hl] + res 7, a + ld hl, hNumFramesDropped + bit 4, [hl] + jr z, .asm_1eaf5 + inc a +.asm_1eaf5 + call Func_1eb41 +.asm_1eaf8 + pop bc + inc c + ld a, c + cp $2 + jr nz, .asm_1eadc + ld a, [hNumFramesDropped] + and $f + ret nz + ld a, [wCurrentStage] + bit 0, a + ret z + ld bc, $0002 +.asm_1eb0d + push bc + ld hl, wIndicatorStates + add hl, bc + ld a, [hl] + cp $1 + jr z, .asm_1eb29 + bit 7, [hl] + jr z, .asm_1eb29 + ld a, [hl] + res 7, a + ld hl, hNumFramesDropped + bit 4, [hl] + jr z, .asm_1eb2b + inc a + inc a + jr .asm_1eb2b + +.asm_1eb29 + ld a, $0 +.asm_1eb2b + push af + ld hl, wd648 + add hl, bc + dec hl + dec hl + ld a, [hl] + ld d, a + pop af + add d + call Func_1eb41 + pop bc + inc c + ld a, c + cp $5 + jr nz, .asm_1eb0d + ret + +Func_1eb41: ; 0x1eb41 + push af + sla c + ld hl, TileDataPointers_1eb61 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1eb4f + ld hl, TileDataPointers_1ed51 +.asm_1eb4f + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + pop af + sla a + ld c, a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_1eb61) + call Func_10aa + ret + +TileDataPointers_1eb61: + dw TileDataPointers_1eb6b + dw TileDataPointers_1eb75 + dw TileDataPointers_1eb7f + dw TileDataPointers_1eb87 + dw TileDataPointers_1eb8f + +TileDataPointers_1eb6b: ; 0x1eb6b + dw TileData_1eb97 + dw TileData_1eb9a + dw TileData_1eb9d + dw TileData_1eba0 + dw TileData_1eba3 + +TileDataPointers_1eb75: ; 0x1eb75 + dw TileData_1eba6 + dw TileData_1eba9 + dw TileData_1ebac + dw TileData_1ebaf + dw TileData_1ebb2 + +TileDataPointers_1eb7f: ; 0x1eb7f + dw TileData_1ebb5 + dw TileData_1ebb8 + dw TileData_1ebbb + dw TileData_1ebbe + +TileDataPointers_1eb87: ; 0x1eb87 + dw TileData_1ebc1 + dw TileData_1ebc6 + dw TileData_1ebcb + dw TileData_1ebd0 + +TileDataPointers_1eb8f: ; 0x1eb8f + dw TileData_1ebd5 + dw TileData_1ebda + dw TileData_1ebdf + dw TileData_1ebe4 + +TileData_1eb97: ; 0x1eb97 + db $01 + dw TileData_1ebe9 + +TileData_1eb9a: ; 0x1eb9a + db $01 + dw TileData_1ebf9 + +TileData_1eb9d: ; 0x1eb9d + db $01 + dw TileData_1ec09 + +TileData_1eba0: ; 0x1eba0 + db $01 + dw TileData_1ec19 + +TileData_1eba3: ; 0x1eba3 + db $01 + dw TileData_1ec29 + +TileData_1eba6: ; 0x1eba6 + db $01 + dw TileData_1ec39 + +TileData_1eba9: ; 0x1eba9 + db $01 + dw TileData_1ec49 + +TileData_1ebac: ; 0x1ebac + db $01 + dw TileData_1ec59 + +TileData_1ebaf: ; 0x1ebaf + db $01 + dw TileData_1ec69 + +TileData_1ebb2: ; 0x1ebb2 + db $01 + dw TileData_1ec79 + +TileData_1ebb5: ; 0x1ebb5 + db $01 + dw TileData_1ec89 + +TileData_1ebb8: ; 0x1ebb8 + db $01 + dw TileData_1ec93 + +TileData_1ebbb: ; 0x1ebbb + db $01 + dw TileData_1ec9d + +TileData_1ebbe: ; 0x1ebbe + db $01 + dw TileData_1eca7 + +TileData_1ebc1: ; 0x1ebc1 + db $02 + dw TileData_1ecb1 + dw TileData_1ecbb + +TileData_1ebc6: ; 0x1ebc6 + db $02 + dw TileData_1ecc5 + dw TileData_1eccf + +TileData_1ebcb: ; 0x1ebcb + db $02 + dw TileData_1ecd9 + dw TileData_1ece3 + +TileData_1ebd0: ; 0x1ebd0 + db $02 + dw TileData_1eced + dw TileData_1ecf7 + +TileData_1ebd5: ; 0x1ebd5 + db $02 + dw TileData_1ed01 + dw TileData_1ed0b + +TileData_1ebda: ; 0x1ebda + db $02 + dw TileData_1ed15 + dw TileData_1ed1f + +TileData_1ebdf: ; 0x1ebdf + db $02 + dw TileData_1ed01 + dw TileData_1ed0b + +TileData_1ebe4: ; 0x1ebe4 + db $02 + dw TileData_1ed15 + dw TileData_1ed1f + +TileData_1ebe9: ; 0x1ebe9 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $3D + + db $01 ; number of tiles + dw vBGMap + $84 + db $17 + + db $01 ; number of tiles + dw vBGMap + $A5 + db $3D + + db $00 ; terminator + +TileData_1ebf9: ; 0x1ebf9 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $3E + + db $01 ; number of tiles + dw vBGMap + $84 + db $17 + + db $01 ; number of tiles + dw vBGMap + $A5 + db $3D + + db $00 ; terminator + +TileData_1ec09: ; 0x1ec09 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $3E + + db $01 ; number of tiles + dw vBGMap + $84 + db $18 + + db $01 ; number of tiles + dw vBGMap + $A5 + db $3D + + db $00 ; terminator + +TileData_1ec19: ; 0x1ec19 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $3E + + db $01 ; number of tiles + dw vBGMap + $84 + db $18 + + db $01 ; number of tiles + dw vBGMap + $A5 + db $3E + + db $00 ; terminator + +TileData_1ec29: ; 0x1ec29 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $3D + + db $01 ; number of tiles + dw vBGMap + $84 + db $18 + + db $01 ; number of tiles + dw vBGMap + $A5 + db $3D + + db $00 ; terminator + +TileData_1ec39: ; 0x1ec39 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $3F + + db $01 ; number of tiles + dw vBGMap + $8F + db $1D + + db $01 ; number of tiles + dw vBGMap + $AE + db $3F + + db $00 ; terminator + +TileData_1ec49: ; 0x1ec49 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $40 + + db $01 ; number of tiles + dw vBGMap + $8F + db $1D + + db $01 ; number of tiles + dw vBGMap + $AE + db $3F + + db $00 ; terminator + +TileData_1ec59: ; 0x1ec59 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $40 + + db $01 ; number of tiles + dw vBGMap + $8F + db $1E + + db $01 ; number of tiles + dw vBGMap + $AE + db $3F + + db $00 ; terminator + +TileData_1ec69: ; 0x1ec69 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $40 + + db $01 ; number of tiles + dw vBGMap + $8F + db $1E + + db $01 ; number of tiles + dw vBGMap + $AE + db $40 + + db $00 ; terminator + +TileData_1ec79: ; 0x1ec79 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $40 + + db $01 ; number of tiles + dw vBGMap + $8F + db $1D + + db $01 ; number of tiles + dw vBGMap + $AE + db $40 + + db $00 ; terminator + +TileData_1ec89: ; 0x1ec89 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $15 + dw StageBlueFieldBottomBaseGameBoyGfx + $950 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1ec93: ; 0x1ec93 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $15 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1F40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ec9d: ; 0x1ec9d + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $15 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1F60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1eca7: ; 0x1eca7 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $15 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1F80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ecb1: ; 0x1ecb1 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $19 + dw StageBlueFieldBottomBaseGameBoyGfx + $990 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1ecbb: ; 0x1ecbb + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1B + dw StageBlueFieldBottomBaseGameBoyGfx + $9B0 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1ecc5: ; 0x1ecc5 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $19 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2270 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1eccf: ; 0x1eccf + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1B + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2290 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ecd9: ; 0x1ecd9 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $19 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $22B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ece3: ; 0x1ece3 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1B + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $22D0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1eced: ; 0x1eced + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $19 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $22F0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ecf7: ; 0x1ecf7 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1B + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2310 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ed01: ; 0x1ed01 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $23 + dw StageBlueFieldBottomBaseGameBoyGfx + $A30 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1ed0b: ; 0x1ed0b + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $25 + dw StageBlueFieldBottomBaseGameBoyGfx + $A50 + db Bank(StageBlueFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1ed15: ; 0x1ed15 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $23 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1C00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ed1f: ; 0x1ed1f + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $25 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1C20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ed29: ; 0x1ed29 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $23 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1C40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ed33: ; 0x1ed33 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $25 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1C60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1e3d: ; 0x1e3d + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $23 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1C80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1ed47: ; 0x1ed47 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $25 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1CA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileDataPointers_1ed51: ; 0x1ed51 + dw TileDataPointers_1ed5b + dw TileDataPointers_1ed65 + dw TileDataPointers_1ed6f + dw TileDataPointers_1ed77 + dw TileDataPointers_1ed7f + +TileDataPointers_1ed5b: ; 0x1ed5b + dw TileData_1ed87 + dw TileData_1ed8a + dw TileData_1ed8d + dw TileData_1ed90 + dw TileData_1ed93 + +TileDataPointers_1ed65: ; 0x1ed65 + dw TileData_1ed96 + dw TileData_1ed99 + dw TileData_1ed9c + dw TileData_1ed9f + dw TileData_1eda2 + +TileDataPointers_1ed6f: ; 0x1ed6f + dw TileData_1eda5 + dw TileData_1eda8 + dw TileData_1edab + dw TileData_1edae + +TileDataPointers_1ed77: ; 0x1ed77 + dw TileData_1edb1 + dw TileData_1edb4 + dw TileData_1edb7 + dw TileData_1edba + +TileDataPointers_1ed7f: ; 0x1ed7f + dw TileData_1edbd + dw TileData_1edc0 + dw TileData_1edc3 + dw TileData_1edc6 + +TileData_1ed87: ; 0x1ed87 + db $01 + dw TileData_1edc9 + +TileData_1ed8a: ; 0x1ed8a + db $01 + dw TileData_1edd9 + +TileData_1ed8d: ; 0x1ed8d + db $01 + dw TileData_1ede9 + +TileData_1ed90: ; 0x1ed90 + db $01 + dw TileData_1edf9 + +TileData_1ed93: ; 0x1ed93 + db $01 + dw TileData_1ee09 + +TileData_1ed96: ; 0x1ed96 + db $01 + dw TileData_1ee19 + +TileData_1ed99: ; 0x1ed99 + db $01 + dw TileData_1ee29 + +TileData_1ed9c: ; 0x1ed9c + db $01 + dw TileData_1ee39 + +TileData_1ed9f: ; 0x1ed9f + db $01 + dw TileData_1ee49 + +TileData_1eda2: ; 0x1eda2 + db $01 + dw TileData_1ee59 + +TileData_1eda5: ; 0x1eda5 + db $01 + dw TileData_1ee69 + +TileData_1eda8: ; 0x1eda8 + db $01 + dw TileData_1ee75 + +TileData_1edab: ; 0x1edab + db $01 + dw TileData_1ee81 + +TileData_1edae: ; 0x1edae + db $01 + dw TileData_1ee8d + +TileData_1edb1: ; 0x1edb1 + db $01 + dw TileData_1ee99 + +TileData_1edb4: ; 0x1edb4 + db $01 + dw TileData_1eea7 + +TileData_1edb7: ; 0x1edb7 + db $01 + dw TileData_1eeb5 + +TileData_1edba: ; 0x1edba + db $01 + dw TileData_1eec3 + +TileData_1edbd: ; 0x1edbd + db $01 + dw TileData_1eed1 + +TileData_1edc0: ; 0x1edc0 + db $01 + dw TileData_1eedf + +TileData_1edc3: ; 0x1edc3 + db $01 + dw TileData_1eeed + +TileData_1edc6: ; 0x1edc6 + db $01 + dw TileData_1eefb + +TileData_1edc9: ; 0x1edc9 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $31 + + db $01 ; number of tiles + dw vBGMap + $84 + db $0D + + db $01 ; number of tiles + dw vBGMap + $A5 + db $7C + + db $00 ; terminator + +TileData_1edd9: ; 0x1edd9 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $32 + + db $01 ; number of tiles + dw vBGMap + $84 + db $0D + + db $01 ; number of tiles + dw vBGMap + $A5 + db $7C + + db $00 ; terminator + +TileData_1ede9: ; 0x1ede9 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $32 + + db $01 ; number of tiles + dw vBGMap + $84 + db $0E + + db $01 ; number of tiles + dw vBGMap + $A5 + db $7C + + db $00 ; terminator + +TileData_1edf9: ; 0x1edf9 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $32 + + db $01 ; number of tiles + dw vBGMap + $84 + db $0E + + db $01 ; number of tiles + dw vBGMap + $A5 + db $7D + + db $00 ; terminator + +TileData_1ee09: ; 0x1ee09 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $64 + db $31 + + db $01 ; number of tiles + dw vBGMap + $84 + db $0E + + db $01 ; number of tiles + dw vBGMap + $A5 + db $7C + + db $00 ; terminator + +TileData_1ee19: ; 0x1ee19 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $33 + + db $01 ; number of tiles + dw vBGMap + $8F + db $0F + + db $01 ; number of tiles + dw vBGMap + $AE + db $7E + + db $00 ; terminator + +TileData_1ee29: ; 0x1ee29 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $34 + + db $01 ; number of tiles + dw vBGMap + $8F + db $0F + + db $01 ; number of tiles + dw vBGMap + $AE + db $7E + + db $00 ; terminator + +TileData_1ee39: ; 0x1ee39 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $34 + + db $01 ; number of tiles + dw vBGMap + $8F + db $10 + + db $01 ; number of tiles + dw vBGMap + $AE + db $7E + + db $00 ; terminator + +TileData_1ee49: ; 0x1ee49 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $34 + + db $01 ; number of tiles + dw vBGMap + $8F + db $10 + + db $01 ; number of tiles + dw vBGMap + $AE + db $7F + + db $00 ; terminator + +TileData_1ee59: ; 0x1ee59 + dw LoadTileLists + db $03 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $6F + db $33 + + db $01 ; number of tiles + dw vBGMap + $8F + db $10 + + db $01 ; number of tiles + dw vBGMap + $AE + db $7E + + db $00 ; terminator + +TileData_1ee69: ; 0x1ee69 + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $48 + db $05 + + db $01 ; number of tiles + dw vBGMap + $68 + db $06 + + db $00 ; terminator + +TileData_1ee75: ; 0x1ee75 + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $48 + db $07 + + db $01 ; number of tiles + dw vBGMap + $68 + db $08 + + db $00 ; terminator + +TileData_1ee81: ; 0x1ee81 + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $48 + db $09 + + db $01 ; number of tiles + dw vBGMap + $68 + db $0A + + db $00 ; terminator + +TileData_1ee8d: ; 0x1ee8d + dw LoadTileLists + db $02 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $48 + db $0B + + db $01 ; number of tiles + dw vBGMap + $68 + db $0C + + db $00 ; terminator + +TileData_1ee99: ; 0x1ee99 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $4B + db $26, $27 + + db $02 ; number of tiles + dw vBGMap + $6B + db $28, $29 + + db $00 ; terminator + +TileData_1eea7: ; 0x1eea7 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $4B + db $2A, $2B + + db $02 ; number of tiles + dw vBGMap + $6B + db $2C, $2D + + db $00 ; terminator + +TileData_1eeb5: ; 0x1eeb5 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $4B + db $2E, $2F + + db $02 ; number of tiles + dw vBGMap + $6B + db $30, $31 + + db $00 ; terminator + +TileData_1eec3: ; 0x1eec3 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $4B + db $32, $33 + + db $02 ; number of tiles + dw vBGMap + $6B + db $34, $35 + + db $00 ; terminator + +TileData_1eed1: ; 0x1eed1 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $49 + db $16, $17 + + db $02 ; number of tiles + dw vBGMap + $69 + db $18, $19 + + db $00 ; terminator + +TileData_1eedf: ; 0x1eedf + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $49 + db $1A, $1B + + db $02 ; number of tiles + dw vBGMap + $69 + db $1C, $1D + + db $00 ; terminator + +TileData_1eeed: ; 0x1eeed + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $49 + db $1E, $1F + + db $02 ; number of tiles + dw vBGMap + $69 + db $20, $21 + + db $00 ; terminator + +TileData_1eefb: ; 0x1eefb + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $49 + db $22, $23 + + db $02 ; number of tiles + dw vBGMap + $69 + db $24, $25 + + db $00 ; terminator + +ResolveBlueStageForceFieldCollision: ; 0x1ef09 + ld a, [wBlueStageForceFieldDirection] + cp $0 ; up direction + jp z, Func_1ef20 + cp $1 ; right direction + jp z, Func_1ef4d + cp $2 ; down direction + jp z, Func_1ef7e + cp $3 ; left direction + jp z, Func_1efae + ; fall through + ; default to upward forcefield + +Func_1ef20: ; 0x1ef20 + ld a, [wBallYPos + 1] + sub $60 + cp $30 + ret nc + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, a + ld b, $0 + sla c + sla c + add hl, bc + jp Func_1efdc + +Func_1ef4d: ; 0x1ef4d + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, a + ld a, $30 + sub c + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallYPos + 1] + sub $60 + cp $30 + ret nc + ld c, a + ld b, $0 + sla c + sla c + add hl, bc + jp Func_1efdc + +Func_1ef7e: ; 0x1ef7e + ld a, [wBallYPos + 1] + sub $60 + cp $30 + ret nc + ld c, a + ld a, $30 + sub c + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, a + ld b, $0 + sla c + sla c + add hl, bc + jr Func_1efdc + +Func_1efae: ; 0x1efae + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallYPos + 1] + sub $60 + cp $30 + ret nc + ld c, a + ld a, $30 + sub c + ld c, a + ld b, $0 + sla c + sla c + add hl, bc + ; fall through +Func_1efdc: ; 0x1efdc + ld a, [wBlueStageForceFieldDirection] + cp $0 ; up direction + jp z, Func_1eff3 + cp $1 ; right direction + jp z, Func_1f0be + cp $2 ; down direction + jp z, Func_1f057 + cp $3 ; left direction + jp z, Func_1f124 + ; fall through + ; default to upward forcefield + +Func_1eff3: ; 0x1eff3 + ld bc, BallPhysicsData_ec000 + add hl, bc + ld de, wBallXVelocity + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + push bc + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + bit 7, b + jr z, .asm_1f032 + ld a, c + cpl + ld c, a + ld a, b + cpl + ld b, a + inc bc +.asm_1f032 + pop hl + bit 7, h + jr z, .asm_1f03e + ld a, l + cpl + ld l, a + ld a, h + cpl + ld h, a + inc hl +.asm_1f03e + add hl, bc + sla l + rl h + ld a, h + cp $2 + ret c + ld a, [wd804] + and a + ret nz + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + ret + +Func_1f057: ; 0x1f057 + ld bc, BallPhysicsData_ec000 + add hl, bc + ld de, wBallXVelocity + bit 2, l + ret nz + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + push bc + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + sub c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + sbc b + ld [de], a + inc de + inc hl + bit 7, b + jr z, .asm_1f099 + ld a, c + cpl + ld c, a + ld a, b + cpl + ld b, a + inc bc +.asm_1f099 + pop hl + bit 7, h + jr z, .asm_1f0a5 + ld a, l + cpl + ld l, a + ld a, h + cpl + ld h, a + inc hl +.asm_1f0a5 + add hl, bc + sla l + rl h + ld a, h + cp $2 + ret c + ld a, [wd804] + and a + ret nz + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + ret + +Func_1f0be: ; 0x1f0be + ld bc, BallPhysicsData_ec000 + add hl, bc + ld de, wBallYVelocity + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc hl + push bc + dec de + dec de + dec de + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + sub c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + sbc b + ld [de], a + inc de + inc hl + bit 7, b + jr z, .asm_1f0ff + ld a, c + cpl + ld c, a + ld a, b + cpl + ld b, a + inc bc +.asm_1f0ff + pop hl + bit 7, h + jr z, .asm_1f10b + ld a, l + cpl + ld l, a + ld a, h + cpl + ld h, a + inc hl +.asm_1f10b + add hl, bc + sla l + rl h + ld a, h + cp $2 + ret c + ld a, [wd804] + and a + ret nz + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + ret + +Func_1f124: ; 0x1f124 + ld bc, BallPhysicsData_ec000 + add hl, bc + ld de, wBallYVelocity + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + sub c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + sbc b + ld [de], a + inc hl + push bc + dec de + dec de + dec de + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_ec000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + bit 7, b + jr z, .asm_1f165 + ld a, c + cpl + ld c, a + ld a, b + cpl + ld b, a + inc bc +.asm_1f165 + pop hl + bit 7, h + jr z, .asm_1f171 + ld a, l + cpl + ld l, a + ld a, h + cpl + ld h, a + inc hl +.asm_1f171 + add hl, bc + sla l + rl h + ld a, h + cp $2 + ret c + ld a, [wd804] + and a + ret nz + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + ret + +Func_1f18a: ; 0x1f18a + ld a, [wd640] + cp $0 + jr z, .asm_1f1b4 + ld a, [wBlueStageForceFieldDirection] + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1f1b5 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1f1a4 + ld hl, TileDataPointers_1f201 +.asm_1f1a4 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_1f1b5) + call Func_10aa + ld a, $0 + ld [wd640], a +.asm_1f1b4 + ret + +TileDataPointers_1f1b5: + dw TileData_1f1bd + dw TileData_1f1c0 + dw TileData_1f1c3 + dw TileData_1f1c6 + +TileData_1f1bd: ; 0x1f1bd + db $01 + dw TileData_1f1c9 + +TileData_1f1c0: ; 0x1f1c0 + db $01 + dw TileData_1f1d7 + +TileData_1f1c3: ; 0x1f1c3 + db $01 + dw TileData_1f1e5 + +TileData_1f1c6: ; 0x1f1c6 + db $01 + dw TileData_1f1f3 + +TileData_1f1c9: ; 0x1f1c9 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $189 + db $70, $71 + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $72, $73 + + db $00 ; terminator + +TileData_1f1d7: ; 0x1f1d7 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $189 + db $74, $75 + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $76, $77 + + db $00 ; terminator + +TileData_1f1e5: ; 0x1f1e5 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $189 + db $78, $79 + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $7A, $7B + + db $00 ; terminator + +TileData_1f1f3: ; 0x1f1f3 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $189 + db $7C, $7D + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $7E, $7F + + db $00 ; terminator + +TileDataPointers_1f201: + dw TileData_1f209 + dw TileData_1f20c + dw TileData_1f20f + dw TileData_1f212 + +TileData_1f209: ; 0x1f209 + db $01 + dw TileData_1f215 + +TileData_1f20c: ; 0x1f20c + db $01 + dw TileData_1f228 + +TileData_1f20f: ; 0x1f20f + db $01 + dw TileData_1f23b + +TileData_1f212: ; 0x1f212 + db $01 + dw TileData_1f24e + +TileData_1f215: ; 0x1f215 + dw LoadTileLists + db $06 ; total number of tiles + + db $02 ; number of otiles + dw vBGMap + $189 + db $6C, $6D + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $6E, $6F + + db $02 + dw vBGMap + $1c9 + db $70, $71 + + db $00 ; terminator + +TileData_1f228: ; 0x1f228 + dw LoadTileLists + db $06 ; total number of tiles + + db $02 ; number of otiles + dw vBGMap + $189 + db $72, $80 + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $73, $74 + + db $02 + dw vBGMap + $1c9 + db $75, $80 + + db $00 ; terminator + +TileData_1f23b: ; 0x1f23b + dw LoadTileLists + db $06 ; total number of tiles + + db $02 ; number of otiles + dw vBGMap + $189 + db $76, $77 + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $78, $79 + + db $02 + dw vBGMap + $1c9 + db $7A, $7B + + db $00 ; terminator + +TileData_1f24e: ; 0x1f24e + dw LoadTileLists + db $06 ; total number of tiles + + db $02 ; number of otiles + dw vBGMap + $189 + db $80, $7C + + db $02 ; number of tiles + dw vBGMap + $1a9 + db $7D, $7E + + db $02 + dw vBGMap + $1c9 + db $80, $7F + + db $00 ; terminator + +Func_1f261: ; 0x1f261 + call Func_1f27b + ret nc + ; fall through + +Func_1f265: ; 0x1f265 + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1f2b9 + add hl, bc + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, $7 + ld de, LoadTileLists + call Func_10c5 + ret + +Func_1f27b: ; 0x1f27b + ld a, [wd624] + ld hl, wd625 + cp [hl] + ret z + ld a, [wd626] + dec a + ld [wd626], a + jr nz, .asm_1f2a5 + ld a, [wd625] + ld [wd624], a + cp $3 + jr c, .asm_1f2a0 + ld a, $1 + ld [wd609], a + ld a, $3 + ld [wd607], a +.asm_1f2a0 + ld a, [wd624] + scf + ret + +.asm_1f2a5 + and $7 + ret nz + ld a, [wd626] + bit 3, a + jr nz, .asm_1f2b4 + ld a, [wd624] + scf + ret + +.asm_1f2b4 + ld a, [wd625] + scf + ret + +TileDataPointers_1f2b9: + dw TileData_1f2c1 + dw TileData_1f2cc + dw TileData_1f2d7 + dw TileData_1f2e2 + +TileData_1f2c1: ; 0x1f2c1 + db $06 ; total number of tiles + + db $06 ; number of tiles + dw vBGMap + $107 + db $B0, $B1, $B0, $B1, $B0, $B1 + + db $00 ; terminator + +TileData_1f2cc: ; 0x1f2cc + db $06 ; total number of tiles + + db $06 ; number of tiles + dw vBGMap + $107 + db $AE, $AF, $B0, $B1, $B0, $B1 + + db $00 ; terminator + +TileData_1f2d7: ; 0x1f2d7 + db $06 ; total number of tiles + + db $06 ; number of tiles + dw vBGMap + $107 + db $AE, $AF, $AE, $AF, $B0, $B1 + + db $00 ; terminator + +TileData_1f2e2: ; 0x1f2e2 + db $06 ; total number of tiles + + db $06 ; number of tiles + dw vBGMap + $107 + db $AE, $AF, $AE, $AF, $AE, $AF + + db $00 ; terminator diff --git a/engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm new file mode 100755 index 0000000..7abab10 --- /dev/null +++ b/engine/pinball_game/object_collision/diglett_bonus_resolve_collision.asm @@ -0,0 +1,783 @@ +ResolveDiglettBonusGameObjectCollisions: ; 0x19b88 + call Func_19c52 + call Func_1aad4 + call Func_19b92 + ret + +Func_19b92: ; 0x19b92 + ld a, [wd73a] + and a + ret nz + ld a, [wd4b4] + cp $8a + ret nc + ld a, $1 + ld [wStageCollisionState], a + ld [wd73a], a + xor a + ld [wc853], a + ld [wc873], a + ld [wc893], a + ld a, $5 + ld [wc872], a + ld a, $7 + ld [wc892], a + call Func_19bbd + ret + +Func_19bbd: ; 0x19bbd + ld a, [wStageCollisionState] + sla a + ld c, a + ld b, $0 + ld hl, Data_19bda + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_19bd0 + ld hl, Data_19c16 +.asm_19bd0 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(Data_19bda) + call Func_10aa + ret + +Data_19bda: + dw Data_19bde + dw Data_19be1 + +Data_19bde: ; 0x19bde + dbw $1, TileListData_19be4 + +Data_19be1: ; 0x19be1 + dbw $1, TileListData_19bfd + +TileListData_19be4: ; 0x19be4 + dw LoadTileLists + db $09 + db $02 + dw vBGMap + $113 + db $4E, $4F + db $02 + dw vBGMap + $133 + db $80, $4D + db $03 + dw vBGMap + $152 + db $80, $4B, $4C + db $02 + dw vBGMap + $172 + db $49, $4A + db $00 ; terminator + +TileListData_19bfd: ; 0x19bfd + dw LoadTileLists + db $09 + db $02 + dw vBGMap + $113 + db $1D, $FB + db $02 + dw vBGMap + $133 + db $1B, $FA + db $03 + dw vBGMap + $152 + db $18, $19, $FB + db $02 + dw vBGMap + $172 + db $14, $15 + db $00 ; terminator + +Data_19c16: + dw Data_19c1a + dw Data_19c1d + +Data_19c1a: ; 0x19c1a + dbw $1, Data_19c20 + +Data_19c1d: ; 0x19c1d + dbw $1, Data_19c39 + +Data_19c20: ; 0x19c20 + dw LoadTileLists + db $09 + db $02 + dw vBGMap + $113 + db $4E, $4F + db $02 + dw vBGMap + $133 + db $80, $4D + db $03 + dw vBGMap + $152 + db $80, $4B, $4C + db $02 + dw vBGMap + $172 + db $49, $4A + db $00 ; terminator + +Data_19c39: ; 0x19c39 + dw LoadTileLists + db $09 + db $02 + dw vBGMap + $113 + db $1D, $FB + db $02 + dw vBGMap + $133 + db $1B, $FA + db $03 + dw vBGMap + $152 + db $18, $19, $FB + db $02 + dw vBGMap + $172 + db $14, $15 + db $00 ; terminator + +Func_19c52: ; 0x19c52 + ld a, [wd73b] + and a + jr z, .asm_19cc8 + xor a + ld [wd73b], a + ld bc, OneHundredThousandPoints + callba AddBigBCD6FromQueue + lb de, $00, $35 + call PlaySoundEffect + ld hl, $0100 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + ld a, [wd73c] + sub $1 + ld c, a + ld b, $0 + ld hl, wDiglettStates + add hl, bc + ld a, [hl] + cp $6 + jr nc, .asm_19cc8 + ld a, $8 + ld [hl], a + call Func_19da8 + call Func_19df0 + ld hl, wDiglettStates + ld bc, NUM_DIGLETTS << 8 + xor a +.asm_19ca0 + ld a, [hli] + and a + jr z, .asm_19ca8 + cp $6 + jr c, .asm_19ca9 +.asm_19ca8 + inc c +.asm_19ca9 + dec b + jr nz, .asm_19ca0 + ld a, c + cp NUM_DIGLETTS + jr nz, .asm_19cc8 + ld hl, AnimationData_1ac75 + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld a, $1 + ld [wDugrioState], a + call Func_1ac2c + ld de, $0002 + call PlaySong +.asm_19cc8 + call Func_19cdd + ld a, [wd765] + and a + ret nz + ld a, $1 + ld [wd765], a + ld a, [wDugrioState] + and a + call nz, Func_1ac2c + ret + +Func_19cdd: ; 0x19cdd + ld a, [wDiglettsInitializedFlag] + and a + jr nz, .alreadyInitializedDigletts + ld a, [wDiglettInitDelayCounter] + add DIGLETT_INITIALIZE_DELAY + ld [wDiglettInitDelayCounter], a + ret nc + ld hl, DiglettInitializeOrder + ld a, [wCurrentDiglett] + ld c, a + ld b, $0 + add hl, bc + ld b, $1 +.asm_19cf8 + push bc + ld a, [hli] + bit 7, a + jr z, .asm_19d02 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hli] +.asm_19d02 + push hl + ld c, a + ld b, $0 + ld hl, wDiglettStates + add hl, bc + ld a, [hl] + and a + jr z, .asm_19d29 + dec a + jr nz, .asm_19d21 + ; pick a random starting state for the diglett that isn't the "hiding" state + call GenRandom + and $3 + add $2 + ld [hl], a + call Func_19da8 + call Func_19dcd + jr .asm_19d29 + +.asm_19d21 + and $3 + add $2 + ld [hl], a + call Func_19da8 +.asm_19d29 + pop hl + pop bc + dec b + jr nz, .asm_19cf8 + ld hl, wDiglettsInitializedFlag + ld a, [wCurrentDiglett] + add $1 + cp NUM_DIGLETTS + jr c, .notDoneInitializingDigletts + set 0, [hl] + sub NUM_DIGLETTS +.notDoneInitializingDigletts + ld [wCurrentDiglett], a + ret + +.alreadyInitializedDigletts + ld hl, DiglettUpdateOrder + ld a, [wCurrentDiglett] + ld c, a + ld b, $0 + add hl, bc + ld b, $4 ; update 4 digletts +.updateDiglettLoop + push bc + ld a, [hli] + bit 7, a + jr z, .asm_19d58 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hli] +.asm_19d58 + push hl + ld c, a + ld b, $0 + ld hl, wDiglettStates + add hl, bc + ld a, [hl] + and a + jr z, .asm_19d8f + dec a + jr nz, .asm_19d77 + call GenRandom + and $3 + add $2 + ld [hl], a + call Func_19da8 + call Func_19dcd + jr .asm_19d8f + +.asm_19d77 + cp $5 + jr c, .incrementDiglettState + ld [hl], a + jr nz, .asm_19d8f + xor a + ld [hl], a + ld a, $1 + call Func_19da8 + jr .asm_19d8f + +.incrementDiglettState + and $3 + add $2 + ld [hl], a + call Func_19da8 +.asm_19d8f + pop hl + pop bc + dec b + jr nz, .updateDiglettLoop + ld hl, wDiglettsInitializedFlag + ld a, [wCurrentDiglett] + add $4 + cp NUM_DIGLETTS + jr c, .asm_19da4 + set 0, [hl] + sub NUM_DIGLETTS +.asm_19da4 + ld [wCurrentDiglett], a + ret + +Func_19da8: ; 0x19da8 +; input: a = diglett state +; c = diglett index + cp $6 + jr c, .asm_19dae + ld a, $6 ; "getting hit" state +.asm_19dae + push bc + ld b, a + sla c + ld a, c + sla c + add c + add b ; a = (index * 6) + state + dec a + ld c, a + ld b, $0 ; bc = (index * 6) + state - 1 + sla c + rl b ; bc = 2 * ((index * 6) + state - 1) + ld hl, DiglettTileDataPointers + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(DiglettTileDataPointers) + call Func_10aa + pop bc + ret + +Func_19dcd: ; 0x19dcd + sla c + ld a, c + sla c + add c + ld c, a + ld b, $0 + ld hl, Data_19e13 + add hl, bc + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld a, e + add $1f + ld e, a + jr nc, .asm_19dea + inc d +.asm_19dea + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ret + +Func_19df0: ; 0x19df0 + sla c + ld a, c + sla c + add c + ld c, a + ld b, $0 + ld hl, Data_19e13 + add hl, bc + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, $2 + ld [de], a + inc de + ld [de], a + ld a, e + add $1f + ld e, a + jr nc, .asm_19e0d + inc d +.asm_19e0d + ld a, $2 + ld [de], a + inc de + ld [de], a + ret + +Data_19e13: + dw wc7a1 + db $19, $19, $1A, $1B + + dw wc7e1 + db $1C, $1C, $1D, $1E + + dw wc821 + db $1F, $1F, $20, $21 + + dw wc7c3 + db $22, $22, $23, $24 + + dw wc803 + db $25, $25, $26, $27 + + dw wc843 + db $28, $28, $29, $2A + + dw wc7a5 + db $2B, $2B, $2C, $2D + + dw wc7e5 + db $2E, $2E, $2F, $30 + + dw wc825 + db $31, $31, $32, $33 + + dw wc865 + db $34, $34, $35, $36 + + dw wc7c7 + db $37, $37, $38, $39 + + dw wc807 + db $3A, $3A, $3B, $3C + + dw wc847 + db $3D, $3D, $3E, $3F + + dw wc887 + db $40, $40, $41, $42 + + dw wc7e9 + db $43, $43, $44, $45 + + dw wc829 + db $46, $46, $47, $48 + + dw wc869 + db $49, $49, $4A, $4B + + dw wc7cb + db $19, $19, $1A, $1B + + dw wc80b + db $1C, $1C, $1D, $1E + + dw wc84b + db $1F, $1F, $20, $21 + + dw wc88b + db $22, $22, $23, $24 + + dw wc7ad + db $25, $25, $26, $27 + + dw wc7ed + db $28, $28, $29, $2A + + dw wc82d + db $2B, $2B, $2C, $2D + + dw wc86d + db $2E, $2E, $2F, $30 + + dw wc7cf + db $31, $31, $32, $33 + + dw wc80f + db $34, $34, $35, $36 + + dw wc84f + db $37, $37, $38, $39 + + dw wc7b1 + db $3A, $3A, $3B, $3C + + dw wc7f1 + db $3D, $3D, $3E, $3F + + dw wc831 + db $40, $40, $41, $42 + + ; unused pointers? + dw DiglettInitializeOrder + dw DiglettUpdateOrder + +INCLUDE "data/diglett_stage/diglett_stage_animation_data.asm" + +Func_1aad4: ; 0x1aad4 + ld a, [wd75f] + and a + jr z, .asm_1ab2c + xor a + ld [wd75f], a + ld a, [wDugrioState] + bit 0, a + jr z, .asm_1ab2c + cp $7 + jr z, .asm_1ab2c + inc a + ld [wDugrioState], a + sla a + ld c, a + ld b, $0 + ld hl, AnimationDataPointers_1ac62 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld bc, FiveMillionPoints + callba AddBigBCD6FromQueue + lb de, $00, $36 + call PlaySoundEffect + ld a, $33 + ld [wd803], a + ld a, $8 + ld [wd804], a + ld hl, $0200 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a +.asm_1ab2c + call Func_1ab30 + ret + +Func_1ab30: ; 0x1ab30 + ld a, [wDugrioState] + sla a + ld c, a + ld b, $0 + ld hl, AnimationDataPointers_1ac62 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wDugtrioAnimationFrameCounter + call UpdateAnimation + ret nc + ld a, [wDugrioState] + and a + ret z + cp $1 + jr nz, .asm_1ab64 + ld a, [wDugtrioAnimationFrameIndex] + cp $3 + ret nz + ld hl, AnimationData_1ac75 + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld a, $1 + ld [wDugrioState], a + ret + +.asm_1ab64 + cp $2 + jr nz, .asm_1ab7d + ld a, [wDugtrioAnimationFrameIndex] + cp $1 + ret nz + ld hl, AnimationData_1ac7f + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld a, $3 + ld [wDugrioState], a + ret + +.asm_1ab7d + cp $3 + jr nz, .asm_1ab96 + ld a, [wDugtrioAnimationFrameIndex] + cp $3 + ret nz + ld hl, AnimationData_1ac7f + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld a, $3 + ld [wDugrioState], a + ret + +.asm_1ab96 + cp $4 + jr nz, .asm_1abaf + ld a, [wDugtrioAnimationFrameIndex] + cp $1 + ret nz + ld hl, AnimationData_1ac89 + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld a, $5 + ld [wDugrioState], a + ret + +.asm_1abaf + cp $5 + jr nz, .asm_1abc8 + ld a, [wDugtrioAnimationFrameIndex] + cp $3 + ret nz + ld hl, AnimationData_1ac89 + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld a, $5 + ld [wDugrioState], a + ret + +.asm_1abc8 + cp $6 + jr nz, .asm_1abe1 + ld a, [wDugtrioAnimationFrameIndex] + cp $1 + ret nz + ld hl, AnimationData_1ac93 + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + ld a, $7 + ld [wDugrioState], a + ret + +.asm_1abe1 + cp $7 + ret nz + ld a, [wDugtrioAnimationFrameIndex] + cp $1 + jr nz, .asm_1abf2 + ld de, $0000 + call PlaySong + ret + +.asm_1abf2 + cp $2 + ret nz + ld hl, AnimationData_1ac72 + ld de, wDugtrioAnimationFrameCounter + call CopyHLToDE + xor a + ld [wDugrioState], a + ld [wd498], a + ld a, $1 + ld [wd49a], a + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5dc + ld de, DiglettStageClearedText + call LoadTextHeader + lb de, $4b, $2a + call PlaySoundEffect + ld a, $1 + ld [wd7be], a + call Func_2862 + ld hl, Data_1ac56 + jr asm_1ac2f + +Func_1ac2c: ; 0x1ac2c + ld hl, Data_1ac4a +asm_1ac2f: + ld de, wc768 + ld b, $3 +.asm_1ac34 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld a, e + add $1d + ld e, a + jr nc, .asm_1ac46 + inc d +.asm_1ac46 + dec b + jr nz, .asm_1ac34 + ret + +Data_1ac4a: + db $00, $00, $00, $00 + db $14, $14, $14, $14 + db $15, $16, $17, $18 + +Data_1ac56: + db $50, $02, $02, $51 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + +AnimationDataPointers_1ac62: ; 0x1ac62 + dw AnimationData_1ac72 + dw AnimationData_1ac75 + dw AnimationData_1ac7c + dw AnimationData_1ac7f + dw AnimationData_1ac86 + dw AnimationData_1ac89 + dw AnimationData_1ac90 + dw AnimationData_1ac93 + +AnimationData_1ac72: ; 0x1ac72 +; Each entry is [duration][OAM id] + db $01, $0C + db $00 ; terminator + +AnimationData_1ac75: ; 0x1ac75 +; Each entry is [duration][OAM id] + db $0E, $00 + db $0E, $01 + db $0E, $02 + db $00 ; terminator + +AnimationData_1ac7c: ; 0x1ac7c +; Each entry is [duration][OAM id] + db $0D, $03 + db $00 ; terminator + +AnimationData_1ac7f: ; 0x1ac7f +; Each entry is [duration][OAM id] + db $0E, $04 + db $0E, $05 + db $0E, $06 + db $00 + +AnimationData_1ac86: ; 0x1ac86 +; Each entry is [duration][OAM id] + db $0D, $07 + db $00 ; terminator + +AnimationData_1ac89: ; 0x1ac89 +; Each entry is [duration][OAM id] + db $0E, $08 + db $0E, $09 + db $0E, $0A + db $00 + +AnimationData_1ac90: ; 0x1ac90 +; Each entry is [duration][OAM id] + db $0D, $0B + db $00 ; terminator + +AnimationData_1ac93: ; 0x1ac93 +; Each entry is [duration][OAM id] + db $01, $0D + db $40, $0D + db $00 ; terminator diff --git a/engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm new file mode 100755 index 0000000..5d37c22 --- /dev/null +++ b/engine/pinball_game/object_collision/gengar_bonus_resolve_collision.asm @@ -0,0 +1,1445 @@ +ResolveGengarBonusGameObjectCollisions: ; 0x18377 + call Func_18464 + call Func_1860b + call Func_187b1 + call Func_18d34 + call Func_183b7 + callba Func_107f8 + ld a, [wd57e] + and a + ret z + xor a + ld [wd57e], a + ld a, $1 + ld [wd7be], a + call Func_2862 + callba StopTimer + ld a, [wd6a2] + cp $5 + ret nc + ld a, $1 + ld [wd6a8], a + ret + +Func_183b7: ; 0x183b7 + ld a, [wd653] + and a + ret nz + ld a, [wd4b4] + cp $8a + ret nc + ld a, $1 + ld [wStageCollisionState], a + ld [wd653], a + callba LoadStageCollisionAttributes + call Func_183db + call Func_18d91 + ret + +Func_183db: ; 0x183db + ld a, [wStageCollisionState] + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_183f8 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_183ee + ld hl, TileDataPointers_1842e +.asm_183ee + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, BANK(TileDataPointers_183f8) + call Func_10aa + ret + +TileDataPointers_183f8: + dw TileData_183fc + dw TileData_183ff + +TileData_183fc: ; 0x183fc + db $01 + dw TileData_18402 + +TileData_183ff: ; 0x183ff + db $01 + dw TileData_18418 + +TileData_18402: ; 0x18402 + dw LoadTileLists + db $06 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $113 + db $D4 + + db $02 ; number of tiles + dw vBGMap + $132 + db $D5, $D6 + + db $02 ; number of tiles + dw vBGMap + $152 + db $D9, $D7 + + db $01 ; number of tiles + dw vBGMap + $172 + db $D8 + + db $00 ; terminator + +TileData_18418: ; 0x18418 + dw LoadTileLists + db $06 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $113 + db $12 + + db $02 ; number of tiles + dw vBGMap + $132 + db $0C, $0D + + db $02 ; number of tiles + dw vBGMap + $152 + db $07, $08 + + db $01 ; number of tiles + dw vBGMap + $172 + db $03 + + db $00 ; terminator + +TileDataPointers_1842e: + dw TileData_18432 + dw TileData_18435 + +TileData_18432: ; 0x18432 + db $01 + dw TileData_18438 + +TileData_18435: ; 0x18435 + db $01 + dw TileData_1844e + +TileData_18438: ; 0x18438 + dw LoadTileLists + db $06 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $113 + db $D4 + + db $02 ; number of tiles + dw vBGMap + $132 + db $D5, $D6 + + db $02 ; number of tiles + dw vBGMap + $152 + db $D9, $D7 + + db $01 ; number of tiles + dw vBGMap + $172 + db $D8 + + db $00 ; terminator + +TileData_1844e: ; 0x1844e + dw LoadTileLists + db $06 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $113 + db $21 + + db $02 ; number of tiles + dw vBGMap + $132 + db $15, $16 + + db $02 ; number of tiles + dw vBGMap + $152 + db $0A, $0B + + db $01 ; number of tiles + dw vBGMap + $172 + db $03 + + db $00 ; terminator + +Func_18464: ; 0x18464 + ld a, [wd659] + and a + ret z + ld a, [wd657] + and a + jr z, .asm_184d5 + xor a + ld [wd657], a + ld a, [wd7be] + and a + jr nz, .asm_184d5 + ld a, [wd658] + sub $5 + ld c, a + sla a + sla a + sla a + add c + ld c, a + ld b, $0 + ld hl, wd65d + add hl, bc + ld d, h + ld e, l + ld a, [de] + and a + jr nz, .asm_184d5 + push de + dec de + dec de + dec de + ld hl, AnimationData_185e6 + call CopyHLToDE + pop de + ld a, $1 + ld [de], a + ld a, [wd67b] + inc a + ld [wd67b], a + ld bc, OneHundredThousandPoints + callba AddBigBCD6FromQueue + ld a, $33 + ld [wd803], a + ld a, $8 + ld [wd804], a + ld hl, $0100 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + lb de, $00, $2c + call PlaySoundEffect +.asm_184d5 + ld bc, $0830 + ld de, wd65d + ld hl, wd675 + call Func_1850c + ld bc, $5078 + ld de, wd666 + ld hl, wd677 + call Func_1850c + ld bc, $3050 + ld de, wd66f + ld hl, wd679 + call Func_1850c + ld de, wd65d + call Func_18562 + ld de, wd666 + call Func_18562 + ld de, wd66f + call Func_18562 + ret + +Func_1850c: ; 0x1850c + ld a, [de] + and a + ret nz + inc de + push hl + ld a, [hli] + push af + push bc + ld a, [hl] + inc a + and $1f + ld [hl], a + ld c, a + ld b, $0 + ld hl, GastlyData_18542 + add hl, bc + pop bc + pop af + and a + jr nz, .asm_18534 + ld a, [de] + add [hl] + ld [de], a + inc de + ld a, [de] + adc $0 + ld [de], a + pop hl + cp c + ret c + ld a, $1 + ld [hl], a + ret + +.asm_18534 + ld a, [de] + sub [hl] + ld [de], a + inc de + ld a, [de] + sbc $0 + ld [de], a + pop hl + cp b + ret nc + xor a + ld [hl], a + ret + +GastlyData_18542: ; 0x18542 +; Might be floating y offsets, not sure at the moment. + db $31, $32, $33, $34, $35, $36, $37, $36 + db $35, $34, $33, $32, $33, $34, $35, $36 + db $37, $38, $39, $3A, $3B, $3A, $39, $38 + db $37, $36, $35, $34, $33, $32, $31, $30 + +Func_18562: ; 0x18562 + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, AnimationDataPointers_185d9 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ret nc + ld a, [de] + dec de + and a + jr nz, .asm_1858a + ld a, [de] + cp $4 + ret nz + ld hl, AnimationData_185dd + dec de + dec de + call CopyHLToDE + ret + +.asm_1858a + cp $1 + ret nz + ld a, [de] + cp $12 + ret nz + ld a, [wd67b] + cp $a + jr nz, .asm_185b1 + ld a, $1 + ld [wd67e], a + ld [wd687], a + xor a + ld [wd659], a + ld [wd662], a + ld [wd66b], a + ld de, $0006 + call PlaySong + ret + +.asm_185b1 + ld c, a + ld a, [wd65d] + and a + jr nz, .asm_185b9 + inc c +.asm_185b9 + ld a, [wd666] + and a + jr nz, .asm_185c0 + inc c +.asm_185c0 + ld a, [wd66f] + and a + jr nz, .asm_185c7 + inc c +.asm_185c7 + ld a, c + cp $a + ret nc + ld hl, AnimationData_185dd + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + xor a + ld [de], a + ret + +AnimationDataPointers_185d9: + dw AnimationData_185dd + dw AnimationData_185e6 + +AnimationData_185dd: ; 0x185dd +; Each entry is [duration][OAM id] + db $0D, $01 + db $0D, $00 + db $0D, $02 + db $0D, $00 + db $00 ; terminator + +AnimationData_185e6: ; 0x185e6 +; Each entry is [duration][OAM id] + db $05, $03 + db $04, $03 + db $04, $04 + db $04, $03 + db $04, $04 + db $03, $03 + db $03, $04 + db $03, $03 + db $03, $04 + db $02, $03 + db $02, $04 + db $02, $03 + db $02, $04 + db $01, $03 + db $01, $04 + db $01, $03 + db $01, $04 + db $80, $04 + db $00 ; terminator + +Func_1860b: ; 0x1860b + ld a, [wd67e] + and a + ret z + ld a, [wd67c] + and a + jr z, .asm_1867c + xor a + ld [wd67c], a + ld a, [wd7be] + and a + jr nz, .asm_1867c + ld a, [wd67d] + sub $8 + ld c, a + sla a + sla a + sla a + add c + ld c, a + ld b, $0 + ld hl, wd682 + add hl, bc + ld d, h + ld e, l + ld a, [de] + and a + jr nz, .asm_1867c + push de + dec de + dec de + dec de + ld hl, AnimationData_1878a + call CopyHLToDE + pop de + ld a, $1 + ld [de], a + ld a, [wd695] + inc a + ld [wd695], a + ld bc, FiveHundredThousandPoints + callba AddBigBCD6FromQueue + ld a, $33 + ld [wd803], a + ld a, $8 + ld [wd804], a + ld hl, $0100 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + lb de, $00, $2d + call PlaySoundEffect +.asm_1867c + ld bc, $5078 + ld de, wd682 + ld hl, wd691 + call Func_186a1 + ld bc, $1038 + ld de, wd68b + ld hl, wd693 + call Func_186a1 + ld de, wd682 + call Func_186f7 + ld de, wd68b + call Func_186f7 + ret + +Func_186a1: ; 0x186a1 + ld a, [de] + and a + ret nz + inc de + push hl + ld a, [hli] + push af + push bc + ld a, [hl] + inc a + and $1f + ld [hl], a + ld c, a + ld b, $0 + ld hl, HaunterData_186d7 + add hl, bc + pop bc + pop af + and a + jr nz, .asm_186c9 + ld a, [de] + add [hl] + ld [de], a + inc de + ld a, [de] + adc $0 + ld [de], a + pop hl + cp c + ret c + ld a, $1 + ld [hl], a + ret + +.asm_186c9 + ld a, [de] + sub [hl] + ld [de], a + inc de + ld a, [de] + sbc $0 + ld [de], a + pop hl + cp b + ret nc + xor a + ld [hl], a + ret + +HaunterData_186d7: +; Might be floating y offsets, not sure at the moment. + db $31, $32, $33, $34, $35, $36, $37, $36 + db $35, $34, $33, $32, $33, $34, $35, $36 + db $37, $38, $39, $3A, $3B, $3A, $39, $38 + db $37, $36, $35, $34, $33, $32, $31, $30 + +Func_186f7: ; 0x186f7 + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, AnimationDataPointers_1877d + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ret nc + ld a, [de] + dec de + and a + jr nz, .asm_1871f + ld a, [de] + cp $4 + ret nz + ld hl, AnimationData_18781 + dec de + dec de + call CopyHLToDE + ret + +.asm_1871f + cp $1 + ret nz + ld a, [de] + cp $12 + jr nz, .asm_18761 + ld a, [wd695] + cp $a + jr nz, .asm_18740 + ld a, $1 + ld [wd656], a + call Func_18d72 + call Func_18d91 + ld de, $0000 + call PlaySong + ret + +.asm_18740 + ld c, a + ld a, [wd682] + and a + jr nz, .asm_18748 + inc c +.asm_18748 + ld a, [wd68b] + and a + jr nz, .asm_1874f + inc c +.asm_1874f + ld a, c + cp $a + ret nc + ld hl, AnimationData_18781 + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + xor a + ld [de], a + ret + +.asm_18761 + cp $13 + ret nz + ld a, [wd695] + cp $a + ret nz + ld a, $1 + ld [wd698], a + xor a + ld [wd67e], a + ld [wd687], a + ld de, GENGAR + call PlayCry + ret + +AnimationDataPointers_1877d: + dw AnimationData_18781 + dw AnimationData_1878a + +AnimationData_18781: +; Each entry is [duration][OAM id] + db $0D, $00 + db $0D, $01 + db $0D, $02 + db $0D, $03 + db $00 ; terminator + +AnimationData_1878a: +; Each entry is [duration][OAM id] + db $05, $04 + db $04, $04 + db $04, $05 + db $04, $04 + db $04, $05 + db $03, $04 + db $03, $05 + db $03, $04 + db $03, $05 + db $02, $04 + db $02, $05 + db $02, $04 + db $02, $05 + db $01, $04 + db $01, $05 + db $01, $04 + db $01, $05 + db $80, $05 + db $10, $05 + db $00 ; terminator + +Func_187b1: ; 0x187b1 + ld a, [wd698] + and a + ret z + ld a, [wd696] + and a + jp z, .asm_1885d + xor a + ld [wd696], a + ld a, [wd7be] + and a + jp nz, .asm_1885d + ld a, [wd697] + sub $a + ld c, a + sla a + sla a + sla a + add c + ld c, a + ld b, $0 + ld hl, wd69c + add hl, bc + ld d, h + ld e, l + ld a, [de] + and a + jp nz, .asm_1885d + push de + dec de + dec de + dec de + ld a, [wd6a2] + inc a + ld [wd6a2], a + cp $5 + jr nc, .asm_18804 + ld hl, AnimationData_18b2b + call CopyHLToDE + pop de + ld a, $2 + ld [de], a + lb de, $00, $37 + call PlaySoundEffect + jr .asm_18826 + +.asm_18804 + ld hl, AnimationData_18b32 + call CopyHLToDE + pop de + ld a, $3 + ld [de], a + ld a, $1 + ld [wd7be], a + call Func_2862 + callba StopTimer + ld de, $0000 + call PlaySong +.asm_18826 + ld bc, FiveMillionPoints + callba AddBigBCD6FromQueue + ld a, $33 + ld [wd803], a + ld a, $8 + ld [wd804], a + ld hl, $0200 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + ld a, [wGengarYPos] + add $0 + ld [wGengarYPos], a + ld a, [wGengarYPos + 1] + adc $ff + ld [wGengarYPos + 1], a +.asm_1885d + ld a, [wd69c] + cp $2 + jr nc, .asm_18869 + call Func_18876 + jr .asm_1886c + +.asm_18869 + call Func_188e1 +.asm_1886c + ld de, wd69c + call Func_189af + call Func_1894c + ret + +Func_18876: ; 0x18876 + ld a, [wd6a3] + cp $1 + jr z, .asm_1889b + cp $2 + jr z, .asm_1889b + ld a, [wGengarAnimationState] + cp $1 + jr z, .asm_1888c + cp $2 + jr nz, .asm_1889b +.asm_1888c + ld a, $1 + ld [wd6a4], a + ld a, $11 + ld [wd803], a + ld a, $8 + ld [wd804], a +.asm_1889b + ld a, [wGengarAnimationState] + ld hl, wd6a3 + cp [hl] + ret z + ld a, [wd69c] + and a + jr nz, .asm_188da + ld a, [wGengarYPos + 1] + add $80 + cp $a0 + jr nc, .asm_188da + ld a, [wGengarAnimationState] + and a + jr z, .asm_188ca + ld a, [wGengarYPos] + add $0 + ld [wGengarYPos], a + ld a, [wGengarYPos + 1] + adc $3 + ld [wGengarYPos + 1], a + jr .asm_188da + +.asm_188ca + ld a, [wGengarYPos] + add $0 + ld [wGengarYPos], a + ld a, [wGengarYPos + 1] + adc $1 + ld [wGengarYPos + 1], a +.asm_188da + ld a, [wGengarAnimationState] + ld [wd6a3], a + ret + +Func_188e1: ; 0x188e1 + ld a, [wd6a3] + cp $1 + jr z, .asm_18901 + cp $2 + jr z, .asm_18901 + ld a, [wGengarAnimationState] + cp $1 + jr z, .asm_188f7 + cp $2 + jr nz, .asm_18901 +.asm_188f7 + ld a, $1 + ld [wd803], a + ld a, $8 + ld [wd804], a +.asm_18901 + ld a, [wGengarAnimationState] + cp $6 + ret z + ld a, [wGengarAnimationState] + ld hl, wd6a3 + cp [hl] + ret z + ld a, [wd69c] + cp $3 + jr nz, .asm_1891d + ld a, [wd69b] + cp $9 + jr c, .asm_18945 +.asm_1891d + ld a, [wGengarAnimationState] + and a + jr z, .asm_18935 + ld a, [wGengarYPos] + add $0 + ld [wGengarYPos], a + ld a, [wGengarYPos + 1] + adc $fd + ld [wGengarYPos + 1], a + jr .asm_18945 + +.asm_18935 + ld a, [wGengarYPos] + add $0 + ld [wGengarYPos], a + ld a, [wGengarYPos + 1] + adc $ff + ld [wGengarYPos + 1], a +.asm_18945 + ld a, [wGengarAnimationState] + ld [wd6a3], a + ret + +Func_1894c: ; 0x1894c + ld a, [wd6a6] + and a + jr nz, .asm_1898f + ld a, [wd6a4] + and a + jr z, .asm_1898f + ld a, [wd6a5] + cp $3 + jr z, .asm_18980 + inc a + ld [wd6a5], a + ld a, [wd548] + ld hl, wd549 + and [hl] + jr z, .asm_18973 + ld a, [wd4b6] + inc a + ld [wd4b6], a +.asm_18973 + ld a, [wd7a0] + dec a + ld [wd7a0], a + ld a, $1 + ld [wUpperTiltPushing], a + ret + +.asm_18980 + lb de, $00, $2b + call PlaySoundEffect + ld a, $1 + ld [wd6a6], a + xor a + ld [wd6a4], a +.asm_1898f + xor a + ld [wUpperTiltPushing], a + ld a, [wd6a5] + and a + jr z, .asm_189a5 + dec a + ld [wd6a5], a + ld a, [wd7a0] + inc a + ld [wd7a0], a + ret + +.asm_189a5 + ld a, [wd6a4] + and a + ret nz + xor a + ld [wd6a6], a + ret + +Func_189af: ; 0x189af + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, AnimationDataPointers_18a57 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ret nc + ld a, [de] + dec de + and a + jr nz, .asm_189d7 + ld a, [de] + cp $4 + ret nz + ld hl, AnimationData_18a61 + dec de + dec de + call CopyHLToDE + ret + +.asm_189d7 + cp $1 + jr nz, .asm_189ed + ld a, [de] + cp $60 + ret nz + ld hl, AnimationData_18a61 + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + xor a + ld [de], a + ret + +.asm_189ed + cp $2 + jr nz, .asm_18a04 + ld a, [de] + cp $3 + ret nz + ld hl, AnimationData_18a6a + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + ld a, $1 + ld [de], a + ret + +.asm_18a04 + cp $3 + jr nz, .asm_18a3c + ld a, [de] + cp $1 + jr nz, .asm_18a14 + lb de, $00, $2e + call PlaySoundEffect + ret + +.asm_18a14 + cp $fe + ret nz + ld a, $1 + ld [wd6a8], a + ld a, $1 + ld [wd498], a + ld a, $1 + ld [wd49a], a + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5dc + ld de, GengarStageClearedText + call LoadTextHeader + lb de, $4b, $2a + call PlaySoundEffect + ret + +.asm_18a3c + cp $4 + ret nz + ld a, [de] + cp $2 + ret nz + ld hl, AnimationData_18a61 + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + xor a + ld [de], a + ld de, $0007 + call PlaySong + ret + +AnimationDataPointers_18a57: + dw AnimationData_18a61 + dw AnimationData_18a6a + dw AnimationData_18b2b + dw AnimationData_18b32 + dw AnimationData_18d2f + +AnimationData_18a61: +; Each entry is [duration][OAM id] + db $40, $01 + db $10, $00 + db $40, $02 + db $10, $00 + db $00 ; terminator + +AnimationData_18a6a: +; Each entry is [duration][OAM id] + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $01, $00 + db $01, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $01, $03 + db $01, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $01, $03 + db $01, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $01, $04 + db $01, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $00 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $04 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $02, $03 + db $01, $06 + db $00 ; terminator + +AnimationData_18b2b: +; Each entry is [duration][OAM id] + db $10, $05 + db $20, $01 + db $08, $00 + db $00 ; terminator + +AnimationData_18b32: +; Each entry is [duration][OAM id] + db $10, $05 + db $10, $00 + db $08, $03 + db $0C, $04 + db $0A, $03 + db $10, $00 + db $08, $03 + db $0C, $04 + db $0A, $03 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $00 + db $04, $06 + db $04, $00 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $00 + db $04, $06 + db $04, $00 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $01 + db $04, $06 + db $04, $00 + db $04, $06 + db $04, $00 + db $04, $06 + db $04, $02 + db $04, $06 + db $04, $02 + db $04, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $00 + db $03, $06 + db $03, $00 + db $03, $06 + db $03, $00 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $03, $01 + db $03, $06 + db $02, $01 + db $01, $00 + db $03, $06 + db $03, $00 + db $03, $06 + db $03, $00 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $03, $02 + db $03, $06 + db $02, $02 + db $02, $06 + db $02, $02 + db $02, $06 + db $02, $02 + db $02, $06 + db $02, $02 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $01 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $00 + db $02, $06 + db $02, $02 + db $02, $06 + db $02, $02 + db $02, $06 + db $02, $02 + db $02, $06 + db $02, $02 + db $02, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $02 + db $01, $06 + db $01, $00 + db $01, $06 + db $01, $00 + db $01, $06 + db $00 ; terminator + +AnimationData_18d2f: +; Each entry is [duration][OAM id] + db $40, $00 + db $40, $00 + db $00 ; terminator + +Func_18d34: ; 0x18d34 + ld a, [wWhichGravestone] + and a + jr z, .asm_18d71 + xor a + ld [wWhichGravestone], a + ld a, [wd7be] + and a + jr nz, .asm_18d71 + ld bc, OneHundredPoints + callba AddBigBCD6FromQueue + ld a, $ff + ld [wd803], a + ld a, $3 + ld [wd804], a + ld hl, $0100 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + ld de, $002f + call Func_4d8 +.asm_18d71 + ret diff --git a/engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm new file mode 100755 index 0000000..3d911eb --- /dev/null +++ b/engine/pinball_game/object_collision/meowth_bonus_resolve_collision.asm @@ -0,0 +1,3380 @@ +ResolveMeowthBonusGameObjectCollisions: ; 0x2442a + ld a, [wd710] + jr nz, .asm_2443f + ld a, [wMeowthStageBonusCounter] + dec a + dec a + cp $fe + jr z, .asm_24447 + cp $ff + jr z, .asm_24447 + ld [wd79a], a +.asm_2443f + ld de, wd79a + call Func_24f00 + jr .asm_2444b + +.asm_24447 + xor a + ld [wd79a], a +.asm_2444b + call Func_244f5 + call Func_245ab + call Func_248ac + call Func_24d07 + ld a, [wMeowthStageScore] + cp $14 + jr c, .asm_24498 + ld a, [wd712] + cp $2 + jr nc, .asm_24498 + ld a, [wd498] + cp $4 + ret z + ld a, $4 + ld [wd712], a + ld [wd498], a + ld a, $96 + ld [wd739], a + ld de, $0000 + call PlaySong + ld a, $1 + ld [wd49a], a + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5dc + ld de, MeowthStageClearedText + call LoadTextHeader + lb de, $4b, $2a + call PlaySoundEffect +.asm_24498 + ld a, [wd712] + cp $4 + jr nz, .asm_244b0 + ld a, [wSFXTimer] + and a + jr nz, .asm_244b0 + ld de, $0004 + call PlaySong + ld a, $5 + ld [wd712], a +.asm_244b0 + ld a, [wd712] + cp $4 + jr z, .asm_244c1 + callba Func_107f8 +.asm_244c1 + ld a, [wd57e] + and a + ret z + xor a + ld [wd57e], a + ld a, $1 + ld [wd7be], a + call Func_2862 + callba StopTimer + ld a, $1 + ld [wd713], a + ld a, $1 + ld [wd712], a + ld hl, MeowthAnimationData5 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $4 + ld [wd6ec], a + ret + +Func_244f5: ; 0x244f5 + ld a, [wd6e6] + and a + ret nz + ld a, [wd4b4] + cp $8a + ret nc + ld a, $1 + ld [wStageCollisionState], a + ld [wd6e6], a + callba LoadStageCollisionAttributes + call Func_24516 + ret + +Func_24516: ; 0x24516 + ld a, [wStageCollisionState] + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_24533 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_24529 + ld hl, TileDataPointers_2456f +.asm_24529 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_24533) + call Func_10aa + ret + +TileDataPointers_24533: ; 0x24533 + dw TileData_24537 + dw TileData_2453a + +TileData_24537: ; 0x24537 + db $01 + dw TileData_2453D + +TileData_2453a: ; 0x2453a + db $01 + dw TileData_24556 + +TileData_2453D: ; 0x2453D + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $01, $02 + + db $02 ; number of tiles + dw vBGMap + $133 + db $FF, $00 + + db $03 ; number of tiles + dw vBGMap + $152 + db $80, $FD, $FE + + db $02 ; number of tiles + dw vBGMap + $172 + db $F6, $FA + + db $00 ; terminator + +TileData_24556: ; 0x24556 + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $E9, $E5 + + db $02 ; number of tiles + dw vBGMap + $133 + db $E7, $E3 + + db $03 ; number of tiles + dw vBGMap + $152 + db $12, $13, $E4 + + db $02 ; number of tiles + dw vBGMap + $172 + db $10, $11 + + db $00 ; terminator + +TileDataPointers_2456f: ; 0x2456f + dw TileData_24573 + dw TileData_24576 + +TileData_24573: ; 0x + db $01 + dw TileData_24579 + +TileData_24576: ; 0x + db $01 + dw TileData_24592 + +TileData_24579: ; 0x24579 + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $F6, $F5 + + db $02 ; number of tiles + dw vBGMap + $133 + db $F4, $F3 + + db $03 ; number of tiles + dw vBGMap + $152 + db $80, $F1, $F2 + + db $02 ; number of tiles + dw vBGMap + $172 + db $EA, $EE + + db $00 ; terminator + +TileData_24592: ; 0x24592 + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $E5, $E3 + + db $02 ; number of tiles + dw vBGMap + $133 + db $E4, $E2 + + db $03 ; number of tiles + dw vBGMap + $152 + db $F0, $EF, $E3 + + db $02 ; number of tiles + dw vBGMap + $172 + db $ED, $EC + + db $00 ; terminator + +Func_245ab: ; 0x245ab + ld a, [wd6e7] + and a + jr z, .asm_24621 + cp $2 + jr z, .asm_24621 + ld a, $1 + ld [wd6f3], a + ld a, [wMeowthYPosition] + cp $20 + jr z, .asm_245c7 + cp $10 + jr z, .asm_245cc + jr .asm_245cf + +.asm_245c7 + call Func_247d9 + jr .asm_245cf + +.asm_245cc + call Func_24c28 +.asm_245cf + xor a + ld [wd6e7], a + ld [wd6f3], a + ld a, $ff + ld [wd803], a + ld a, $3 + ld [wd804], a + lb de, $00, $33 + call PlaySoundEffect + ld bc, OneThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + xor a + ld [wMeowthStageBonusCounter], a + ld a, [wd6ec] + cp $2 + jr nc, .asm_24621 + and a + jr nz, .asm_24611 + ld hl, MeowthAnimationData3 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $2 + ld [wd6ec], a + jr .asm_24651 + +.asm_24611 + ld hl, MeowthAnimationData4 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $3 + ld [wd6ec], a + jr .asm_24651 + +.asm_24621 + ld a, [wd713] + and a + jr z, .asm_2462e + ld a, $4 + ld [wd6ec], a + jr .asm_24651 + +.asm_2462e + ld a, [wd6ec] + cp $2 + jr nc, .asm_24651 + ld a, [wd70b] + cp $3 + jr nz, .asm_24651 + ld a, [wd70c] + cp $3 + jr nz, .asm_24651 + ld hl, MeowthAnimationData5 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $4 + ld [wd6ec], a +.asm_24651 + ld a, [wd6ec] + cp $2 + call c, Func_24709 + call Func_2465d + ret + +Func_2465d: ; 0x2465d + ld a, [wd6ec] + sla a + ld c, a + ld b, $0 + ld hl, MewothAnimationDataTable ; 0x246e2 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wMeowthAnimationFrameCounter + call UpdateAnimation + ret nc + ld a, [wd6ec] + and a + jr nz, .asm_24689 + ld a, [wMeowthAnimationFrameIndex] + cp $4 + ret nz + ld hl, MeowthAnimationData1 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ret + +.asm_24689 + cp $1 + jr nz, .asm_2469d + ld a, [wMeowthAnimationFrameIndex] + cp $4 + ret nz + ld hl, MeowthAnimationData2 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ret + +.asm_2469d + cp $2 + jr nz, .asm_246b5 + ld a, [wMeowthAnimationFrameIndex] + cp $1 + ret nz + ld hl, MeowthAnimationData1 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + xor a + ld [wd6ec], a + ret + +.asm_246b5 + cp $3 + jr nz, .asm_246ce + ld a, [wMeowthAnimationFrameIndex] + cp $1 + ret nz + ld hl, MeowthAnimationData2 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $1 + ld [wd6ec], a + ret + +.asm_246ce + cp $4 + jr nz, .asm_24689 + ld a, [wMeowthAnimationFrameIndex] + cp $2 + ret nz + ld hl, MeowthAnimationData5 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ret + +MewothAnimationDataTable: ; 0x246e2 + dw MeowthAnimationData1 + dw MeowthAnimationData2 + dw MeowthAnimationData3 + dw MeowthAnimationData4 + dw MeowthAnimationData5 + +MeowthAnimationData1: ; 0x246ec +; Each entry is [OAM id][duration] + db $10, $00 + db $0B, $01 + db $10, $02 + db $0C, $01 + db $00 ; terminator + +MeowthAnimationData2: ; 0x246f5 +; Each entry is [OAM id][duration] + db $10, $04 + db $0B, $05 + db $10, $06 + db $0C, $05 + db $00 ; terminator + +MeowthAnimationData3: ; 0x246fe +; Each entry is [OAM id][duration] + db $16, $03 + db $00 ; terminator + +MeowthAnimationData4: ; 0x24701 +; Each entry is [OAM id][duration] + db $16, $07 + db $00 ; terminator + +MeowthAnimationData5: ; 0x24704 + db $17, $08 + db $17, $09 + db $00 ; terminator + +Func_24709: ; 0x24709 + ld a, [wMeowthXPosition] + ld hl, wMeowthXMovement + add [hl] + ld [wMeowthXPosition], a + ld hl, wMeowthYMovement + ld a, [hl] + and a + jr z, .asm_24730 + bit 7, [hl] + ld a, [wMeowthYPosition] + jr nz, .asm_24724 + inc a + jr .asm_24725 + +.asm_24724 + dec a +.asm_24725 + cp $21 + jr z, .asm_24730 + cp $f + jr z, .asm_24730 + ld [wMeowthYPosition], a +.asm_24730 + call Func_24737 + call Func_2476d + ret + +Func_24737: ; 0x24737 + ld a, [wMeowthXPosition] + cp $8 + jr nc, .asm_24742 + ld a, $1 + jr .asm_2475a + +.asm_24742 + cp $78 + jr c, .asm_2474a + ld a, $ff + jr .asm_2475a + +.asm_2474a + ld a, [hNumFramesDropped] + and $3f + ret nz + call GenRandom + bit 7, a + ld a, $1 + jr z, .asm_2475a + ld a, $ff +.asm_2475a + ld [wMeowthXMovement], a + bit 7, a + ld a, $1 + jr z, .asm_24764 + xor a +.asm_24764 + ld [wd6ec], a + ld a, $2 + ld [wMeowthAnimationFrameCounter], a + ret + +Func_2476d: ; 0x2476d + ld a, [wMeowthYMovement] + and a + jr z, .asm_247ab + cp $1 + jr z, .asm_24791 + ld a, [wMeowthYPosition] + cp $10 + jr nz, .asm_2478d + ld a, [wd6e7] + cp $2 + jr nz, .asm_2478a + ld a, $1 + ld [wd6e7], a +.asm_2478a + xor a + jr .asm_247c9 + +.asm_2478d + ld a, $ff + jr .asm_247c9 + +.asm_24791 + ld a, [wMeowthYPosition] + cp $20 + jr nz, .asm_247a7 + ld a, [wd6e7] + cp $2 + jr nz, .asm_247a4 + ld a, $1 + ld [wd6e7], a +.asm_247a4 + xor a + jr .asm_247c9 + +.asm_247a7 + ld a, $1 + jr .asm_247c9 + +.asm_247ab + ld a, [wd70b] + cp $3 + jr z, .asm_247cd + ld a, [wd70c] + cp $3 + jr z, .asm_247d3 + ld a, [hNumFramesDropped] + and $3f + ret nz + call GenRandom + bit 0, a + ld a, $1 + jr z, .asm_247c9 + ld a, $ff +.asm_247c9 + ld [wMeowthYMovement], a + ret + +.asm_247cd + ld a, $ff + ld [wMeowthYMovement], a + ret + +.asm_247d3 + ld a, $1 + ld [wMeowthYMovement], a + ret + +Func_247d9: ; 0x247d9 + ld a, [wd6f3] + and a + ret z + ld a, [wd71a] + cp $c8 + jr nz, .asm_24823 + ld a, [wMeowthXPosition] + add $8 + ld [wd71a], a + ld a, [wMeowthYPosition] + add $fb + ld [wd727], a + ld a, $1 + ld [wd717], a + xor a + ld [wd6f3], a + ld [wd714], a + ld [wd6f5], a + ld [wd6f8], a + ld [wd6fb], a + ld a, [wMeowthXPosition] + add $14 + ld b, a + ld a, [wd4b4] + cp b + jr nc, .asm_2481d + ld a, $0 + ld [wd72a], a + jr .asm_24822 + +.asm_2481d + ld a, $1 + ld [wd72a], a +.asm_24822 + ret + +.asm_24823 + ld a, [wd71b] + cp $c8 + jr nz, .asm_24868 + ld a, [wMeowthXPosition] + add $8 + ld [wd71b], a + ld a, [wMeowthYPosition] + add $fb + ld [wd728], a + ld a, $1 + ld [wd718], a + xor a + ld [wd6f3], a + ld [wd715], a + ld [wd6f6], a + ld [wd6f9], a + ld [wd6fc], a + ld a, [wMeowthXPosition] + add $14 + ld b, a + ld a, [wd4b4] + cp b + jr nc, .asm_24862 + ld a, $0 + ld [wd72b], a + jr .asm_24867 + +.asm_24862 + ld a, $1 + ld [wd72b], a +.asm_24867 + ret + +.asm_24868 + ld a, [wd71c] + cp $c8 + ret nz + ld a, [wMeowthXPosition] + add $8 + ld [wd71c], a + ld a, [wMeowthYPosition] + add $fb + ld [wd729], a + ld a, $1 + ld [wd719], a + xor a + ld [wd6f3], a + ld [wd716], a + ld [wd6f7], a + ld [wd6fa], a + ld [wd6fd], a + ld a, [wMeowthXPosition] + add $14 + ld b, a + ld a, [wd4b4] + cp b + jr nc, .asm_248a6 + ld a, $0 + ld [wd72c], a + jr .asm_248ab + +.asm_248a6 + ld a, $1 + ld [wd72c], a +.asm_248ab + ret + +Func_248ac: ; 0x248ac + ld a, [wd717] + cp $1 + jr nz, .asm_248d3 + ld a, [wd714] + cp $a + jr z, .asm_248c4 + ld a, $0 + ld [wd6f4], a + call Func_24a30 + jr .asm_248d3 + +.asm_248c4 + ld hl, wd70b + inc [hl] + ld a, $2 + ld [wd717], a + lb de, $00, $34 + call PlaySoundEffect +.asm_248d3 + ld a, [wd718] + cp $1 + jr nz, .asm_248fa + ld a, [wd715] + cp $a + jr z, .asm_248eb + ld a, $1 + ld [wd6f4], a + call Func_24a30 + jr .asm_248fa + +.asm_248eb + ld hl, wd70b + inc [hl] + ld a, $2 + ld [wd718], a + lb de, $00, $34 + call PlaySoundEffect +.asm_248fa + ld a, [wd719] + cp $1 + jr nz, .asm_24921 + ld a, [wd716] + cp $a + jr z, .asm_24912 + ld a, $2 + ld [wd6f4], a + call Func_24a30 + jr .asm_24921 + +.asm_24912 + ld hl, wd70b + inc [hl] + ld a, $2 + ld [wd719], a + lb de, $00, $34 + call PlaySoundEffect +.asm_24921 + ld a, [wd717] + cp $2 + jr nz, .asm_2492c + ld hl, wd714 + inc [hl] +.asm_2492c + ld a, [wd718] + cp $2 + jr nz, .asm_24937 + ld hl, wd715 + inc [hl] +.asm_24937 + ld a, [wd719] + cp $2 + jr nz, .asm_24942 + ld hl, wd716 + inc [hl] +.asm_24942 + ld a, [wd717] + cp $3 + jr nz, .asm_24968 + ld a, [wd71a] + ld b, a + ld a, [wd727] + ld c, a + ld hl, wd714 + inc [hl] + ld a, [hl] + cp $2 + jr nz, .asm_2495f + call Func_24e7f + jr .asm_24968 + +.asm_2495f + cp $a + jr nz, .asm_24968 + ld a, $4 + ld [wd717], a +.asm_24968 + ld a, [wd718] + cp $3 + jr nz, .asm_2498e + ld a, [wd71b] + ld b, a + ld a, [wd728] + ld c, a + ld hl, wd715 + inc [hl] + ld a, [hl] + cp $2 + jr nz, .asm_24985 + call Func_24e7f + jr .asm_2498e + +.asm_24985 + cp $a + jr nz, .asm_2498e + ld a, $4 + ld [wd718], a +.asm_2498e + ld a, [wd719] + cp $3 + jr nz, .asm_249b4 + ld a, [wd71c] + ld b, a + ld a, [wd729] + ld c, a + ld hl, wd716 + inc [hl] + ld a, [hl] + cp $2 + jr nz, .asm_249ab + call Func_24e7f + jr .asm_249b4 + +.asm_249ab + cp $a + jr nz, .asm_249b4 + ld a, $4 + ld [wd719], a +.asm_249b4 + ld a, [wd717] + cp $4 + jr nz, .asm_249d0 + ld a, $c8 + ld [wd71a], a + ld [wd727], a + xor a + ld [wd717], a + ld hl, wd70b + dec [hl] + ld a, [hl] + cp $2 + jr z, .asm_24a06 +.asm_249d0 + ld a, [wd718] + cp $4 + jr nz, .asm_249ec + ld a, $c8 + ld [wd71b], a + ld [wd728], a + xor a + ld [wd718], a + ld hl, wd70b + dec [hl] + ld a, [hl] + cp $2 + jr z, .asm_24a06 +.asm_249ec + ld a, [wd719] + cp $4 + ret nz + ld a, $c8 + ld [wd71c], a + ld [wd729], a + xor a + ld [wd719], a + ld hl, wd70b + dec [hl] + ld a, [hl] + cp $2 + ret nz +.asm_24a06 + ld a, [wd713] + and a + ret nz + ld a, [wMeowthXMovement] + cp $ff + jr z, .asm_24a21 + ld hl, MeowthAnimationData2 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $1 + ld [wd6ec], a + ret + +.asm_24a21 + ld hl, MeowthAnimationData1 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $0 + ld [wd6ec], a + ret + +Func_24a30: ; 0x24a30 + ld a, [wd6f4] + ld c, a + ld b, $0 + ld hl, wd6f8 + add hl, bc + ld a, [hl] + and a + jr z, .asm_24a42 + call Func_24b41 + ret + +.asm_24a42 + ld a, [wd6f4] + ld c, a + ld b, $0 + ld hl, wd6f5 + add hl, bc + ld a, [hl] + bit 2, a + jr z, .asm_24a5e + bit 1, a + jr nz, .asm_24a5e + bit 0, a + jr nz, .asm_24a5e + ld hl, wd714 + add hl, bc + inc [hl] +.asm_24a5e + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld hl, Data_24af1 + ld e, a + ld d, $0 + add hl, de + ld hl, wd72a + add hl, bc + ld a, [hl] + and a + jr nz, .asm_24a97 +.asm_24a72 + ld hl, wd72a + add hl, bc + ld [hl], $0 + ld hl, wd71a + add hl, bc + ld a, [hl] + push af + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + ld hl, Data_24af1 + add hl, de + pop af + add [hl] + cp $8e + jr nc, .asm_24a97 + ld hl, wd71a + add hl, bc + ld [hl], a + jr .asm_24abf + +.asm_24a97 + ld hl, wd72a + add hl, bc + ld [hl], $1 + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + ld hl, Data_24af1 + add hl, de + ld a, [hl] + ld d, a + ld a, $ff + sub d + inc a + ld d, a + ld hl, wd71a + add hl, bc + ld a, [hl] + add d + cp $5 + jr c, .asm_24a72 + ld hl, wd71a + add hl, bc + ld [hl], a +.asm_24abf + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + ld hl, Data_24af1 + add hl, de + inc hl + ld a, [hl] + ld d, a + ld hl, wd727 + add hl, bc + ld a, [hl] + add d + ld hl, wd727 + add hl, bc + ld [hl], a + ld hl, wd6f5 + add hl, bc + inc [hl] + inc [hl] + ld a, [hl] + cp $46 + jr nz, .asm_24af0 + ld a, c + cp $9 + jr c, .asm_24aed + call Func_2438f + ret + +.asm_24aed + call Func_24319 +.asm_24af0 + ret + +Data_24af1: +; These are offsets for something in the Meowth stage + db 2, -4 + db 2, -4 + db 2, -4 + db 2, 0 + db 2, -2 + db 2, 0 + db 2, -2 + db 2, 0 + db 2, -2 + db 2, 0 + db 2, -2 + db 2, 0 + db 2, 0 + db 2, 0 + db 2, 0 + db 2, 2 + db 2, 2 + db 2, 2 + db 2, 2 + db 2, 2 + db 2, 3 + db 2, 4 + db 2, 4 + db 2, 4 + db 2, 4 + db 2, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 1, 4 + db 0, 0 + db 0, 0 + db 0, 0 + db 0, 0 + +Func_24b41: ; 0x24b41 + ld a, [wd6f4] + ld b, $0 + ld c, a + ld hl, wd6f5 + add hl, bc + ld a, [hl] + cp $14 + jp nc, Func_24bf6 + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld hl, Data_24c0a + ld e, a + ld d, $0 + add hl, de + ld hl, wd72a + add hl, bc + ld a, [hl] + and a + jr nz, .asm_24b8a +.asm_24b65 + ld hl, wd72a + add hl, bc + ld [hl], $0 + ld hl, wd71a + add hl, bc + ld a, [hl] + push af + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + ld hl, Data_24c0a + add hl, de + pop af + add [hl] + cp $90 + jr nc, .asm_24b8a + ld hl, wd71a + add hl, bc + ld [hl], a + jr .asm_24bb2 + +.asm_24b8a + ld hl, wd72a + add hl, bc + ld [hl], $1 + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + ld hl, Data_24c0a + add hl, de + ld a, [hl] + ld d, a + ld a, $ff + sub d + inc a + ld d, a + ld hl, wd71a + add hl, bc + ld a, [hl] + add d + cp $6 + jr c, .asm_24b65 + ld hl, wd71a + add hl, bc + ld [hl], a +.asm_24bb2 + ld hl, wd6f5 + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + ld hl, Data_24c0a + add hl, de + inc hl + ld a, [hl] + ld d, a + ld hl, wd727 + add hl, bc + ld a, [hl] + add d + ld hl, wd727 + add hl, bc + ld [hl], a + ld hl, wd6f5 + add hl, bc + inc [hl] + inc [hl] + ld a, [hl] + cp $12 + jr nz, .asm_24bf4 + ld a, c + cp $9 + jr c, .asm_24be1 + call Func_2438f + jr .asm_24be4 + +.asm_24be1 + call Func_24319 +.asm_24be4 + ld a, [wd6f4] + ld b, $0 + ld c, a + ld hl, wd6f8 + add hl, bc + ld a, [hl] + and a + jr nz, .asm_24bf4 + ld [hl], $1 +.asm_24bf4 + scf + ret + +Func_24bf6: ; 0x24bf6 + ld a, [wd6f4] + ld b, $0 + ld c, a + ld hl, wd6f8 + add hl, bc + ld [hl], $0 + ld hl, wd714 + add hl, bc + ld [hl], $a + ccf + ret + +Data_24c0a: +; These are offsets for something in the Meowth stage + db 2, -2 + db 2, -1 + db 2, -1 + db 2, 0 + db 2, 0 + db 2, 0 + db 2, 1 + db 2, 1 + db 2, 2 + db 2, 4 + db 1, 4 + db 0, 0 + db 0, 0 + db 0, 0 + db 0, 0 + +Func_24c28: ; 0x24c28 + ld a, [wd6f3] + and a + ret z + ld a, [wd724] + cp $c8 + jr nz, .asm_24c76 + ld a, [wMeowthXPosition] + add $8 + ld [wd724], a + ld a, [wMeowthYPosition] + add $fb + ld [wd731], a + ld a, $1 + ld [wd721], a + ld hl, wd70c + inc [hl] + xor a + ld [wd6f3], a + ld [wd71e], a + ld [wd6ff], a + ld [wd702], a + ld [wd705], a + ld a, [wMeowthXPosition] + add $14 + ld b, a + ld a, [wd4b4] + cp b + jr nc, .asm_24c70 + ld a, $0 + ld [wd734], a + jr .asm_24c75 + +.asm_24c70 + ld a, $1 + ld [wd734], a +.asm_24c75 + ret + +.asm_24c76 + ld a, [wd725] + cp $c8 + jr nz, .asm_24cbf + ld a, [wMeowthXPosition] + add $8 + ld [wd725], a + ld a, [wMeowthYPosition] + add $fb + ld [wd732], a + ld a, $1 + ld [wd722], a + ld hl, wd70c + inc [hl] + xor a + ld [wd6f3], a + ld [wd71f], a + ld [wd700], a + ld [wd703], a + ld [wd706], a + ld a, [wd6f7] + add $14 + ld b, a + ld a, [wd4b4] + cp b + jr nc, .asm_24cb9 + ld a, $0 + ld [wd735], a + jr .asm_24cbe + +.asm_24cb9 + ld a, $1 + ld [wd735], a +.asm_24cbe + ret + +.asm_24cbf + ld a, [wd726] + cp $c8 + ret nz + ld a, [wMeowthXPosition] + add $8 + ld [wd726], a + ld a, [wMeowthYPosition] + add $fb + ld [wd733], a + ld a, $1 + ld [wd723], a + ld hl, wd70c + inc [hl] + xor a + ld [wd6f3], a + ld [wd720], a + ld [wd701], a + ld [wd704], a + ld [wd707], a + ld a, [wMeowthXPosition] + add $14 + ld b, a + ld a, [wd4b4] + cp b + jr nc, .asm_24d01 + ld a, $0 + ld [wd736], a + jr .asm_24d06 + +.asm_24d01 + ld a, $1 + ld [wd736], a +.asm_24d06 + ret + +Func_24d07: ; 0x24d07 + ld a, [wd721] + cp $1 + jr nz, .asm_24d2a + ld a, [wd71e] + cp $a + jr z, .asm_24d1f + ld a, $a + ld [wd6f4], a + call Func_24a30 + jr .asm_24d2a + +.asm_24d1f + ld a, $2 + ld [wd721], a + lb de, $00, $34 + call PlaySoundEffect +.asm_24d2a + ld a, [wd722] + cp $1 + jr nz, .asm_24d4d + ld a, [wd71f] + cp $a + jr z, .asm_24d42 + ld a, $b + ld [wd6f4], a + call Func_24a30 + jr .asm_24d4d + +.asm_24d42 + ld a, $2 + ld [wd722], a + lb de, $00, $34 + call PlaySoundEffect +.asm_24d4d + ld a, [wd723] + cp $1 + jr nz, .asm_24d70 + ld a, [wd720] + cp $a + jr z, .asm_24d65 + ld a, $c + ld [wd6f4], a + call Func_24a30 + jr .asm_24d70 + +.asm_24d65 + ld a, $2 + ld [wd723], a + lb de, $00, $34 + call PlaySoundEffect +.asm_24d70 + ld a, [wd721] + cp $2 + jr nz, .asm_24d7b + ld hl, wd71e + inc [hl] +.asm_24d7b + ld a, [wd722] + cp $2 + jr nz, .asm_24d86 + ld hl, wd71f + inc [hl] +.asm_24d86 + ld a, [wd723] + cp $2 + jr nz, .asm_24d91 + ld hl, wd720 + inc [hl] +.asm_24d91 + ld a, [wd721] + cp $3 + jr nz, .asm_24db7 + ld a, [wd724] + ld b, a + ld a, [wd731] + ld c, a + ld hl, wd71e + inc [hl] + ld a, [hl] + cp $2 + jr nz, .asm_24dae + call Func_24e7f + jr .asm_24db7 + +.asm_24dae + cp $a + jr nz, .asm_24db7 + ld a, $4 + ld [wd721], a +.asm_24db7 + ld a, [wd722] + cp $3 + jr nz, .asm_24ddd + ld a, [wd725] + ld b, a + ld a, [wd732] + ld c, a + ld hl, wd71f + inc [hl] + ld a, [hl] + cp $2 + jr nz, .asm_24dd4 + call Func_24e7f + jr .asm_24ddd + +.asm_24dd4 + cp $a + jr nz, .asm_24ddd + ld a, $4 + ld [wd722], a +.asm_24ddd + ld a, [wd723] + cp $3 + jr nz, .asm_24e03 + ld a, [wd726] + ld b, a + ld a, [wd733] + ld c, a + ld hl, wd720 + inc [hl] + ld a, [hl] + cp $2 + jr nz, .asm_24dfa + call Func_24e7f + jr .asm_24e03 + +.asm_24dfa + cp $a + jr nz, .asm_24e03 + ld a, $4 + ld [wd723], a +.asm_24e03 + ld a, [wd721] + cp $4 + jr nz, .asm_24e1f + ld a, $c8 + ld [wd724], a + ld [wd731], a + xor a + ld [wd721], a + ld hl, wd70c + dec [hl] + ld a, [hl] + cp $2 + jr z, .asm_24e55 +.asm_24e1f + ld a, [wd722] + cp $4 + jr nz, .asm_24e3b + ld a, $c8 + ld [wd725], a + ld [wd732], a + xor a + ld [wd722], a + ld hl, wd70c + dec [hl] + ld a, [hl] + cp $2 + jr z, .asm_24e55 +.asm_24e3b + ld a, [wd723] + cp $4 + ret nz + ld a, $c8 + ld [wd726], a + ld [wd733], a + xor a + ld [wd723], a + ld hl, wd70c + dec [hl] + ld a, [hl] + cp $2 + ret nz +.asm_24e55 + ld a, [wd713] + and a + ret nz + ld a, [wMeowthXMovement] + cp $ff + jr z, .asm_24e70 + ld hl, MeowthAnimationData2 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $1 + ld [wd6ec], a + ret + +.asm_24e70 + ld hl, MeowthAnimationData1 + ld de, wMeowthAnimationFrameCounter + call CopyHLToDE + ld a, $0 + ld [wd6ec], a + ret + +Func_24e7f: ; 0x24e7f + ld a, b + ld [wd79c], a + ld a, c + ld [wd79e], a + ld hl, wMeowthStageBonusCounter + inc [hl] + ld a, [hl] + cp $7 ; maximum bonus + jr nz, .asm_24e92 + xor a + ld [hl], a +.asm_24e92 + ld a, $ff + ld [wd803], a + ld a, $3 + ld [wd804], a + lb de, $00, $32 + call PlaySoundEffect + ld a, [wMeowthStageBonusCounter] + dec a +.asm_24ea6 + push af + ld bc, OneHundredThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld hl, wMeowthStageScore + inc [hl] + pop af + and a + jr z, .asm_24ebf + dec a + jr .asm_24ea6 + +.asm_24ebf + ld a, [wMeowthStageBonusCounter] + dec a + dec a + cp $fe + jr z, .asm_24ed7 + cp $ff + jr z, .asm_24ed7 + ld [wd79a], a + ld de, wd79a + call Func_24ee7 + jr .asm_24ede + +.asm_24ed7 + xor a + ld [wd79a], a + ld [wd795], a +.asm_24ede + ld a, $1 + ld [wd64e], a + call Func_24fa3 + ret + +Func_24ee7: ; 0x24ee7 + ld a, $ff + ld [wd795], a + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, MeowthStageAnimationDataTable + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + dec de + dec de + dec de + call CopyHLToDE + ret + +Func_24f00: ; 0x24f00 + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, MeowthStageAnimationDataTable + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ld a, $1 + ld [wd710], a + ret nc + dec de + ld a, [de] + cp $a + ret nz + xor a + ld [de], a + ld [wd79c], a + ld [wd79e], a + ld [wd795], a + xor a + ld [wd710], a + ret + +MeowthStageAnimationDataTable: ; 0x24f30 + dw MeowthStageAnimationData1 + dw MeowthStageAnimationData2 + dw MeowthStageAnimationData3 + dw MeowthStageAnimationData4 + dw MeowthStageAnimationData5 + +MeowthStageAnimationData1: ; 0x24f3a +; Each entry is [OAM id][duration] + db $02, $00 + db $02, $01 + db $02, $02 + db $10, $00 + db $04, $0F + db $04, $00 + db $04, $0F + db $04, $00 + db $04, $0F + db $04, $00 + db $00 ; terminator + +MeowthStageAnimationData2: ; 0x24f4f +; Each entry is [OAM id][duration] + db $02, $03 + db $02, $04 + db $02, $05 + db $10, $03 + db $04, $0F + db $04, $03 + db $04, $0F + db $04, $03 + db $04, $0F + db $04, $03 + db $00 ; terminator + +MeowthStageAnimationData3: ; 0x24f64 +; Each entry is [OAM id][duration] + db $02, $06 + db $02, $07 + db $02, $08 + db $10, $06 + db $04, $0F + db $04, $06 + db $04, $0F + db $04, $06 + db $04, $0F + db $04, $06 + db $00 ; terminator + +MeowthStageAnimationData4: ; 0x24f79 +; Each entry is [OAM id][duration] + db $02, $09 + db $02, $0A + db $02, $0B + db $10, $09 + db $04, $0F + db $04, $09 + db $04, $0F + db $04, $09 + db $04, $0F + db $04, $09 + db $00 ; terminator + +MeowthStageAnimationData5: ; 0x24f8e +; Each entry is [OAM id][duration] + db $02, $0C + db $02, $0D + db $02, $0E + db $10, $0C + db $04, $0F + db $04, $0C + db $04, $0F + db $04, $0C + db $04, $0F + db $04, $0C + db $00 ; terminator + +Func_24fa3: ; 0x24fa3 + ld a, [wMeowthStageScore] + ld c, a + ld b, $0 +.asm_24fa9 + ld a, c + and a + jr z, .asm_24fb5 + ld a, b + add $8 + ld b, a + dec c + ld a, c + jr .asm_24fa9 + +.asm_24fb5 + ld a, b + and a + jr z, .asm_24fbb + sub $8 +.asm_24fbb + ld [wd652], a + ld a, [wMeowthStageBonusCounter] + and a + jr z, .asm_24fca + ld b, a + ld a, [wMeowthStageScore] + inc a + sub b +.asm_24fca + ld [wd651], a + ld a, $0 + ld [wd64e], a + ld a, [wMeowthStageScore] + and a + ret z + cp $15 + jr c, .asm_24fe2 + ld a, $14 + ld [wMeowthStageScore], a + jr .asm_24fed + +.asm_24fe2 + push af + xor a + ld [wd650], a + ld a, $1 + ld [wd64e], a + pop af +.asm_24fed + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_25007 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_24ffd + ld hl, TileDataPointers_25421 +.asm_24ffd + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_25007) + call Func_10aa + ret + +TileDataPointers_25007: + dw TileData_25031 + dw TileData_25034 + dw TileData_25037 + dw TileData_2503a + dw TileData_2503d + dw TileData_25040 + dw TileData_25043 + dw TileData_25046 + dw TileData_25049 + dw TileData_2504c + dw TileData_2504f + dw TileData_25052 + dw TileData_25055 + dw TileData_25058 + dw TileData_2505b + dw TileData_2505e + dw TileData_25061 + dw TileData_25064 + dw TileData_25067 + dw TileData_2506a + dw TileData_2506d + +TileData_25031: ; 0x25031 + db $01 + dw TileData_25070 + +TileData_25034: ; 0x25034 + db $01 + dw TileData_2509d + +TileData_25037: ; 0x25037 + db $01 + dw TileData_250ca + +TileData_2503a: ; 0x2503a + db $01 + dw TileData_250f7 + +TileData_2503d: ; 0x2503d + db $01 + dw TileData_25124 + +TileData_25040: ; 0x25040 + db $01 + dw TileData_25151 + +TileData_25043: ; 0x25043 + db $01 + dw TileData_2517e + +TileData_25046: ; 0x25046 + db $01 + dw TileData_251ab + +TileData_25049: ; 0x25049 + db $01 + dw TileData_251d8 + +TileData_2504c: ; 0x2504c + db $01 + dw TileData_25205 + +TileData_2504f: ; 0x2504f + db $01 + dw TileData_25232 + +TileData_25052: ; 0x25052 + db $01 + dw TileData_2525f + +TileData_25055: ; 0x25055 + db $01 + dw TileData_2528c + +TileData_25058: ; 0x25058 + db $01 + dw TileData_252b9 + +TileData_2505b: ; 0x2505b + db $01 + dw TileData_252e6 + +TileData_2505e: ; 0x2505e + db $01 + dw TileData_25313 + +TileData_25061: ; 0x25061 + db $01 + dw TileData_25340 + +TileData_25064: ; 0x25064 + db $01 + dw TileData_2536d + +TileData_25067: ; 0x25067 + db $01 + dw TileData_2539a + +TileData_2506a: ; 0x2506a + db $01 + dw TileData_253c7 + +TileData_2506d: ; 0x2506d + db $01 + dw TileData_253f4 + +TileData_25070: ; 0x25070 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $E4, $0C, $0D + + db $03 ; number of tiles + dw vBGMap + $3 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $6 + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_2509d: ; 0x2509d + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $0C, $0D + + db $03 ; number of tiles + dw vBGMap + $3 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $6 + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_250ca: ; 0x250ca + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $0D + + db $03 ; number of tiles + dw vBGMap + $3 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $6 + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_250f7: ; 0x250f7 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $6 + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_25124: ; 0x25124 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $6 + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_25151: ; 0x25151 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $0E + + db $03 ; number of tiles + dw vBGMap + $6 + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_2517e: ; 0x2517e + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_251ab: ; 0x251ab + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_251d8: ; 0x251d8 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $0D + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_25205: ; 0x25205 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $0E, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_25232: ; 0x25232 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $0D, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_2525f: ; 0x2525f + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $0E + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_2528c: ; 0x2528c + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $0D, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_252b9: ; 0x252b9 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_252e6: ; 0x252e6 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $16, $0D + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_25313: ; 0x25313 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $F + db $0E, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_25340: ; 0x25340 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $F + db $16, $0D, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_2536d: ; 0x2536d + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $F + db $16, $16, $0E + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_2539a: ; 0x2539a + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $F + db $16, $16, $16 + + db $02 + dw vBGMap + $12 + db $0F, $E4 + + db $00 ; terminator + +TileData_253c7: ; 0x253c7 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $F + db $16, $16, $16 + + db $02 + dw vBGMap + $12 + db $17, $E4 + + db $00 ; terminator + +TileData_253f4: ; 0x253f4 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $14, $15, $16 + + db $03 ; number of tiles + dw vBGMap + $3 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $6 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $9 + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $C + db $16, $16, $16 + + db $03 ; number of tiles + dw vBGMap + $F + db $16, $16, $16 + + db $02 + dw vBGMap + $12 + db $17, $18 + + db $00 ; terminator + +TileDataPointers_25421: ; 0x25421 + dw TileData_2544b + dw TileData_2544e + dw TileData_25451 + dw TileData_25454 + dw TileData_25457 + dw TileData_2545a + dw TileData_2545d + dw TileData_25460 + dw TileData_25463 + dw TileData_25466 + dw TileData_25469 + dw TileData_2546c + dw TileData_2546f + dw TileData_25472 + dw TileData_25475 + dw TileData_25478 + dw TileData_2547b + dw TileData_2547e + dw TileData_25481 + dw TileData_25484 + dw TileData_25487 + +TileData_2544b: ; 0x2544b + db $01 + dw TileData_2548a + +TileData_2544e: ; 0x2544e + db $01 + dw TileData_254b7 + +TileData_25451: ; 0x25451 + db $01 + dw TileData_254e4 + +TileData_25454: ; 0x25454 + db $01 + dw TileData_25511 + +TileData_25457: ; 0x25457 + db $01 + dw TileData_2553e + +TileData_2545a: ; 0x2545a + db $01 + dw TileData_2556b + +TileData_2545d: ; 0x2545d + db $01 + dw TileData_25598 + +TileData_25460: ; 0x25460 + db $01 + dw TileData_255c5 + +TileData_25463: ; 0x25463 + db $01 + dw TileData_255f2 + +TileData_25466: ; 0x25466 + db $01 + dw TileData_2561f + +TileData_25469: ; 0x25469 + db $01 + dw TileData_2564c + +TileData_2546c: ; 0x2546c + db $01 + dw TileData_25679 + +TileData_2546f: ; 0x2546f + db $01 + dw TileData_256a6 + +TileData_25472: ; 0x25472 + db $01 + dw TileData_256d3 + +TileData_25475: ; 0x25475 + db $01 + dw TileData_25700 + +TileData_25478: ; 0x25478 + db $01 + dw TileData_2572d + +TileData_2547b: ; 0x2547b + db $01 + dw TileData_2575a + +TileData_2547e: ; 0x2547e + db $01 + dw TileData_25787 + +TileData_25481: ; 0x25481 + db $01 + dw TileData_257b4 + +TileData_25484: ; 0x25484 + db $01 + dw TileData_257e1 + +TileData_25487: ; 0x25487 + db $01 + dw TileData_2580e + +TileData_2548a: ; 0x2548a + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $E3, $FD, $FE + + db $03 ; number of tiles + dw vBGMap + $3 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $6 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_254b7: ; 0x254b7 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $FD, $FE + + db $03 ; number of tiles + dw vBGMap + $3 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $6 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_254e4: ; 0x254e4 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $FE + + db $03 ; number of tiles + dw vBGMap + $3 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $6 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_25511: ; 0x25511 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $6 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_2553e: ; 0x2553e + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $6 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_2556b: ; 0x2556b + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $FE + + db $03 ; number of tiles + dw vBGMap + $6 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_25598: ; 0x25598 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_255c5: ; 0x255c5 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_255f2: ; 0x255f2 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $FE + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_2561f: ; 0x2561f + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_2564c: ; 0x2564c + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_25679: ; 0x25679 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $FE + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_256a6: ; 0x256a6 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $FE, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_256d3: ; 0x256d3 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $FE, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_25700: ; 0x25700 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $00, $FE + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_2572d: ; 0x2572d + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $F + db $FE, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_2575a: ; 0x2575a + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $F + db $00, $FE, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_25787: ; 0x25787 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $F + db $00, $00, $FE + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_257b4: ; 0x257b4 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $F + db $00, $00, $00 + + db $02 ; number of tiles + dw vBGMap + $12 + db $FD, $E3 + + db $00 ; terminator + +TileData_257e1: ; 0x257e1 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $F + db $00, $00, $00 + + db $02 ; number of tiles + dw vBGMap + $12 + db $02, $E3 + + db $00 ; terminator + +TileData_2580e: ; 0x2580e + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FF, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $3 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $6 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $9 + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $C + db $00, $00, $00 + + db $03 ; number of tiles + dw vBGMap + $F + db $00, $00, $00 + + db $02 ; number of tiles + dw vBGMap + $12 + db $02, $03 + + db $00 ; terminator diff --git a/engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm new file mode 100755 index 0000000..86df2f3 --- /dev/null +++ b/engine/pinball_game/object_collision/mewtwo_bonus_resolve_collision.asm @@ -0,0 +1,750 @@ +ResolveMewtwoBonusGameObjectCollisions: ; 0x19451 + call Func_19531 + call Func_19701 + call Func_1948b + callba Func_107f8 + ld a, [wd57e] + and a + ret z + xor a + ld [wd57e], a + ld a, $1 + ld [wd7be], a + call Func_2862 + callba StopTimer + ld a, [wd6b1] + cp $8 + ret nc + ld a, $1 + ld [wd6b3], a + ret + +Func_1948b: ; 0x1948b + ld a, [wd6a9] + and a + ret nz + ld a, [wd4b4] + cp $8a + ret nc + ld a, $1 + ld [wStageCollisionState], a + ld [wd6a9], a + callba LoadStageCollisionAttributes + call Func_194ac + ret + +Func_194ac: ; 0x194ac + ld a, [wStageCollisionState] + sla a + ld c, a + ld b, $0 + ld hl, Data_194c9 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_194bf + ld hl, Data_194fd +.asm_194bf + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(Data_194c9) + call Func_10aa + ret + +Data_194c9: + dw Data_194cd + dw Data_194d0 + +Data_194cd: ; 0x194cd + db 1 + dw Data_194d3 + +Data_194d0: ; 0x194d0 + db 1 + dw Data_194e8 + +Data_194d3: ; 0x194d3 + dw LoadTileLists + db $05 ; total number of tiles to load + + db $01 ; number of tiles + dw vBGMap + $113 + db $45 + + db $01 ; number of tiles + dw vBGMap + $133 + db $80 + + db $02 ; number of tiles + dw vBGMap + $152 + db $80, $09 + + db $01 ; number of tiles + dw vBGMap + $172 + db $12 + + db $00 ; terminator + +Data_194e8: ; 0x194e8 + dw LoadTileLists + db $05 ; total number of tiles to load + + db $01 ; number of tiles + dw vBGMap + $113 + db $46 + + db $01 ; number of tiles + dw vBGMap + $133 + db $47 + + db $02 ; number of tiles + dw vBGMap + $152 + db $48, $49 + + db $01 ; number of tiles + dw vBGMap + $172 + db $4A + + db $00 ; terminator + +Data_194fd: + dw Data_19501 + dw Data_19504 + +Data_19501: ; 0x19501 + db 1 + dw Data_19507 + +Data_19504: ; 0x19504 + db 1 + dw Data_1951c + +Data_19507: ; 0x19507 + dw LoadTileLists + db $05 ; total number of tiles to load + + db $01 ; number of tiles + dw vBGMap + $113 + db $45 + + db $01 ; number of tiles + dw vBGMap + $133 + db $80 + + db $02 ; number of tiles + dw vBGMap + $152 + db $80, $09 + + db $01 ; number of tiles + dw vBGMap + $172 + db $12 + + db $00 ; terminator + +Data_1951c: ; 0x1951c + dw LoadTileLists + db $05 ; total number of tiles to load + + db $01 ; number of tiles + dw vBGMap + $113 + db $46 + + db $01 ; number of tiles + dw vBGMap + $133 + db $47 + + db $02 ; number of tiles + dw vBGMap + $152 + db $48, $49 + + db $01 ; number of tiles + dw vBGMap + $172 + db $4A + + db $00 ; terminator + +Func_19531: ; 0x19531 + ld a, [wd6aa] + and a + jr z, .asm_195a2 + xor a + ld [wd6aa], a + ld a, [wd7be] + and a + jr nz, .asm_195a2 + ld a, [wd6af] + cp $2 + jr nc, .asm_195a2 + ld bc, FiveMillionPoints + callba AddBigBCD6FromQueue + ld a, [wd6b0] + inc a + cp $3 + jr nz, .asm_19565 + ld a, [wd6b1] + inc a + ld [wd6b1], a + xor a +.asm_19565 + ld [wd6b0], a + call ResetOrbitingBalls + ld a, [wd6b1] + cp $8 + jr z, .asm_19582 + ld a, $2 + ld de, wd6ae + call Func_19679 + lb de, $00, $39 + call PlaySoundEffect + jr .asm_195a2 + +.asm_19582 + ld a, $3 + ld de, wd6ae + call Func_19679 + ld a, $1 + ld [wd7be], a + call Func_2862 + callba StopTimer + ld de, $0000 + call PlaySong +.asm_195a2 + call Func_195ac + ld de, wd6af + call Func_195f5 + ret + +Func_195ac: ; 0x195ac + ld a, [wd6af] + and a + ret nz + ld hl, wd6bd + ld de, $0008 + ld b, $6 +.asm_195b9 + ld a, [hl] + cp $2b + jr nz, .asm_195ce + dec hl + dec hl + dec hl + ld a, [hl] + cp $2 + ret nz + ld a, $1 + ld de, wd6ae + call Func_19679 + ret + +.asm_195ce + add hl, de + dec b + jr nz, .asm_195b9 + ret + +Func_195d3: ; 0x195d3 + ld hl, wd6bd + ld de, $0008 + ld b, $6 +.asm_195db + ld a, [hl] + cp $18 + jr nz, .asm_195f0 + dec hl + dec hl + dec hl + ld a, [hl] + cp $2 + ret nz + ld d, h + ld e, l + dec de + ld a, $1 + call Func_19876 + ret + +.asm_195f0 + add hl, de + dec b + jr nz, .asm_195db + ret + +Func_195f5: ; 0x195f5 + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, Data_19691 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ret nc + ld a, [de] + rst JumpTable ; calls JumpToFuncInTable +CallTable_1960d: ; 0x1960d + dw Func_19615 + dw Func_1961e + dw Func_1962f + dw Func_19638 + +Func_19615: ; 0x19615 + dec de + ld a, [de] + cp $4 + ret nz + xor a + jp Func_19679 + +Func_1961e: ; 0x1961e + dec de + ld a, [de] + cp $c + jr nz, .asm_19628 + call Func_195d3 + ret + +.asm_19628 + cp $d + ret nz + xor a + jp Func_19679 + +Func_1962f: ; 0x1962f + dec de + ld a, [de] + cp $1 + ret nz + xor a + jp Func_19679 + +Func_19638: ; 0x19638 + dec de + ld a, [de] + cp $1 + jr nz, .asm_19645 + lb de, $00, $40 + call PlaySoundEffect + ret + +.asm_19645 + cp $20 + ret nz + ld a, $1 + ld [wd6b3], a + ld a, [wd499] + ld [wd498], a + ld a, [wNumMewtwoBonusCompletions] + cp $2 ; only counts up to 2. Gets reset to 0 when Mew is encountered in Catch 'Em Mode. + jr z, .asm_1965e + inc a + ld [wNumMewtwoBonusCompletions], a +.asm_1965e + ld a, $1 + ld [wd49a], a + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5dc +.asm_1966b + ld de, MewtwoStageClearedText + call LoadTextHeader + lb de, $4b, $2a + call PlaySoundEffect + ret + +Func_19679: ; 0x19679 + push af + sla a + ld c, a + ld b, $0 + ld hl, Data_19691 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + pop af + ld [de], a + ret + +Data_19691: + dw Data_19699 + dw Data_196a2 + dw Data_196bd + dw Data_196c0 + +Data_19699: ; 0x19699 + db $30, $00, $04, $05, $34, $04, $03, $05 + db $00 ; terminator + +Data_196a2: ; 0x196a2 + db $0A, $00, $06, $01, $05, $02, $05, $01, $04, $02, $04, $01, $04, $02, $03, $01 + db $03, $02, $03, $01, $03, $02, $04, $00, $40, $03 + db $00 ; terminator + +Data_196bd: ; 0x196bd + db $10, $06 + db $00 ; terminator + +Data_196c0: ; 0x196c0 + db $04, $06, $04, $07, $04, $06, $04, $07, $04, $06, $04, $07, $04, $06, $04, $07 + db $03, $06, $03, $07, $03, $06, $03, $07, $03, $06, $03, $07, $03, $06, $03, $07 + db $02, $06, $02, $07, $02, $06, $02, $07, $02, $06, $02, $07, $02, $06, $02, $07 + db $01, $06, $01, $07, $01, $06, $01, $07, $01, $06, $01, $07, $01, $06, $01, $07 + db $00 ; terminator + +Func_19701: ; 0x19701 + ld a, [wd6b4] + and a + jr z, .asm_19742 + xor a + ld [wd6b4], a + ld a, [wd7be] + and a + jr nz, .asm_19742 + ld a, [wd6b5] + sub $1 + sla a + sla a + sla a + ld c, a + ld b, $0 + ld hl, wd6ba + add hl, bc + ld d, h + ld e, l + ld a, [de] + and a + jr nz, .asm_19742 + dec de + ld a, $2 + call Func_19876 + ld bc, OneHundredThousandPoints + callba AddBigBCD6FromQueue + lb de, $00, $38 + call PlaySoundEffect +.asm_19742 + ld de, wd6bd + call SetOrbitingBallCoordinates + ld de, wd6c5 + call SetOrbitingBallCoordinates + ld de, wd6cd + call SetOrbitingBallCoordinates + ld de, wd6d5 + call SetOrbitingBallCoordinates + ld de, wd6dd + call SetOrbitingBallCoordinates + ld de, wd6e5 + call SetOrbitingBallCoordinates + ld de, wd6b6 + call UpdateOrbitingBallAnimation + ld de, wd6be + call UpdateOrbitingBallAnimation + ld de, wd6c6 + call UpdateOrbitingBallAnimation + ld de, wd6ce + call UpdateOrbitingBallAnimation + ld de, wd6d6 + call UpdateOrbitingBallAnimation + ld de, wd6de + call UpdateOrbitingBallAnimation + ret + +SetOrbitingBallCoordinates: ; 0x1978b +; Sets the x, y coordinates for one of the balls orbiting around Mewtwo + ld a, [de] + ld c, a + ld b, $0 + sla c + inc a + cp $48 ; num entries in MewtwoOrbitingBallsCoords + jr c, .looadCoords + xor a +.looadCoords + ld [de], a + ld hl, MewtwoOrbitingBallsCoords + 1 + add hl, bc + dec de + ld a, [hld] + ld [de], a + dec de + ld a, [hl] + ld [de], a + ret + +MewtwoOrbitingBallsCoords: +; x, y coordinates for balls that orbit around Mewtwo. + db $62, $08 + db $62, $0A + db $62, $0D + db $61, $0F + db $60, $11 + db $60, $13 + db $5F, $15 + db $5D, $17 + db $5C, $19 + db $5A, $1A + db $59, $1C + db $57, $1D + db $55, $1F + db $53, $20 + db $51, $20 + db $4F, $21 + db $4D, $22 + db $4A, $22 + db $48, $22 + db $46, $22 + db $43, $22 + db $41, $21 + db $3F, $20 + db $3D, $20 + db $3B, $1F + db $39, $1D + db $37, $1C + db $36, $1A + db $34, $19 + db $33, $17 + db $31, $15 + db $30, $13 + db $30, $11 + db $2F, $0F + db $2E, $0D + db $2E, $0A + db $2E, $08 + db $2E, $06 + db $2E, $03 + db $2F, $01 + db $30, $FF + db $30, $FD + db $31, $FB + db $33, $F9 + db $34, $F7 + db $36, $F6 + db $37, $F4 + db $39, $F3 + db $3B, $F1 + db $3D, $F0 + db $3F, $F0 + db $41, $EF + db $43, $EE + db $46, $EE + db $48, $EE + db $4A, $EE + db $4D, $EE + db $4F, $EF + db $51, $F0 + db $53, $F0 + db $55, $F1 + db $57, $F3 + db $59, $F4 + db $5A, $F6 + db $5C, $F7 + db $5D, $F9 + db $5F, $FB + db $60, $FD + db $60, $FF + db $61, $01 + db $62, $03 + db $62, $06 + +UpdateOrbitingBallAnimation: ; 0x19833 +; Updates the animation for one of the balls orbiting around Mewtwo. + ld a, [de] + and a + ret z + inc de + inc de + inc de + inc de + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, OrbitingBallAnimations + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ret nc + ld a, [de] + rst JumpTable ; calls JumpToFuncInTable +CallTable_19852: ; 0x19852 + dw Func_1985a + dw Func_19863 + dw Func_1986c + dw Func_1986d + +Func_1985a: ; 0x1985a + dec de + ld a, [de] + cp $6 + ret nz + xor a + jp Func_19876 + +Func_19863: ; 0x19863 + dec de + ld a, [de] + cp $7 + ret nz + xor a + jp Func_19876 + +Func_1986c: ; 0x1986c + ret + +Func_1986d: ; 0x1986d + dec de + ld a, [de] + cp $1 + ret nz + xor a + jp Func_19876 + +Func_19876: ; 0x19876 + push af + sla a + ld c, a + ld b, $0 + ld hl, OrbitingBallAnimations + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + pop af + ld [de], a + ret + +ResetOrbitingBalls: ; 0x1988e + ld a, [wd6b1] + sla a + sla a + sla a + ld c, a + ld b, $0 + ld hl, OrbitingBallsStartCoordsIndices + add hl, bc + ld de, wd6bd + ld b, $6 +.asm_198a3 + ld a, [hli] + push bc + push de + push hl + bit 7, a + jr nz, .asm_198b7 + ld [de], a + dec de + dec de + dec de + dec de + ld a, $3 + call Func_19876 + jr .asm_198c0 + +.asm_198b7 + dec de + dec de + dec de + dec de + dec de + dec de + dec de + xor a + ld [de], a +.asm_198c0 + pop hl + pop de + pop bc + ld a, e + add $8 + ld e, a + jr nc, .asm_198ca + inc d +.asm_198ca + dec b + jr nz, .asm_198a3 + ret + +OrbitingBallsStartCoordsIndices: +; When Mewtwo is hit, the orbs briefly disappear. When they reappear, +; this table determines which entry in the MewtwoOrbitingBallsCoords table +; each orb will start at. +; Last two bytes in each row are unused + db $00, $0C, $18, $24, $30, $3C, $FF, $FF ; All 6 orbs are up + db $00, $0E, $1D, $2B, $3A, $FF, $FF, $FF ; 5 orbs are up + db $00, $12, $24, $36, $FF, $FF, $FF, $FF ; 4 orbs + db $00, $12, $24, $36, $FF, $FF, $FF, $FF ; 3 orbs + db $00, $18, $30, $FF, $FF, $FF, $FF, $FF ; 2 orbs + db $00, $24, $FF, $FF, $FF, $FF, $FF, $FF ; 1 orb + db $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 0 orbs + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; unused + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; unused + +OrbitingBallAnimations: + dw OrbitingBallAnimation1 + dw OrbitingBallAnimation2 + dw OrbitingBallAnimation3 + dw OrbitingBallAnimation4 + +OrbitingBallAnimation1: ; 0x1991e +; Each entry is [duration][OAM id] + db $0A, $00 + db $08, $01 + db $08, $02 + db $0A, $03 + db $08, $02 + db $08, $01 + db $00 ; terminator + +OrbitingBallAnimation2: ; 0x1992b +; Each entry is [duration][OAM id] + db $05, $04 + db $06, $05 + db $06, $06 + db $07, $07 + db $07, $08 + db $08, $09 + db $08, $0A + db $00 ; terminator + +OrbitingBallAnimation3: ; 0x1993a +; Each entry is [duration][OAM id] + db $05, $0A + db $05, $09 + db $04, $08 + db $04, $07 + db $03, $06 + db $03, $05 + db $02, $04 + db $80, $0B + db $00 ; terminator + +OrbitingBallAnimation4: ; 0x1994b +; Each entry is [duration][OAM id] + db $0C, $0B + db $00 ; terminator diff --git a/engine/pinball_game/object_collision/object_collision.asm b/engine/pinball_game/object_collision/object_collision.asm index 51e34ce..b4ca37b 100755 --- a/engine/pinball_game/object_collision/object_collision.asm +++ b/engine/pinball_game/object_collision/object_collision.asm @@ -196,3 +196,54 @@ PinballCollidesWithPoints: ; 0x27fd ld a, d ld [wd578], a ret + +ResolveGameObjectCollisions: ; 0x281c + ld a, [wCurrentStage] + call CallInFollowingTable +CallTable_2822: ; 0x2822 +; not collisions + ; STAGE_RED_FIELD_TOP + padded_dab ResolveRedFieldTopGameObjectCollisions + + ; STAGE_RED_FIELD_BOTTOM + padded_dab ResolveRedFieldBottomGameObjectCollisions + + padded_dab DoNothing_1806d + + padded_dab Func_1806e + + ; STAGE_BLUE_FIELD_TOP + padded_dab ResolveBlueFieldTopGameObjectCollisions + + ; STAGE_BLUE_FIELD_BOTTOM + padded_dab ResolveBlueFieldBottomGameObjectCollisions + + ; STAGE_GENGAR_BONUS + padded_dab ResolveGengarBonusGameObjectCollisions + + ; STAGE_GENGAR_BONUS + padded_dab ResolveGengarBonusGameObjectCollisions + + ; STAGE_MEWTWO_BONUS + padded_dab ResolveMewtwoBonusGameObjectCollisions + + ; STAGE_MEWTWO_BONUS + padded_dab ResolveMewtwoBonusGameObjectCollisions + + ; STAGE_MEOWTH_BONUS + padded_dab ResolveMeowthBonusGameObjectCollisions + + ; STAGE_MEOWTH_BONUS + padded_dab ResolveMeowthBonusGameObjectCollisions + + ; STAGE_DIGLETT_BONUS + padded_dab ResolveDiglettBonusGameObjectCollisions + + ; STAGE_DIGLETT_BONUS + padded_dab ResolveDiglettBonusGameObjectCollisions + + ; STAGE_SEEL_BONUS + padded_dab ResolveSeelBonusGameObjectCollisions + + ; STAGE_SEEL_BONUS + padded_dab ResolveSeelBonusGameObjectCollisions diff --git a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm new file mode 100755 index 0000000..94d195d --- /dev/null +++ b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm @@ -0,0 +1,8730 @@ +; TODO: this file has a bunch of stuff that doesn't belong here. + +ResolveRedFieldTopGameObjectCollisions: ; 0x1460e + call ResolveVoltorbCollision + call ResolveRedStageSpinnerCollision + call ResolveRedStagePinballUpgradeTriggersCollision + call HandleRedStageBallTypeUpgradeCounter + call Func_15270 + call ResolveRedStageBoardTriggerCollision + call ResolveRedStagePikachuCollision + call ResolveStaryuCollision + call ResolveBellsproutCollision + call ResolveDittoSlotCollision + call Func_161e0 + call Func_164e3 + call Func_146a9 + call Func_174ea + call Func_148cf + callba Func_30188 + ld a, $0 + callba Func_10000 + ret + +ResolveRedFieldBottomGameObjectCollisions: ; 0x14652 + call Func_14795 + call Func_15f86 + call ResolveDiglettCollision + call Func_14880 + call Func_14e10 + call Func_154a9 + call HandleRedStageBallTypeUpgradeCounter + call Func_151cb + call Func_1652d + call ResolveRedStagePikachuCollision + call Func_167ff + call Func_169a6 + call ResolveRedStageBonusMultiplierCollision + call Func_16279 + call Func_161af + call Func_164e3 + call Func_14733 + call Func_146a2 + call Func_174d0 + callba Func_30188 + ld a, $0 + callba Func_10000 + ret + +Func_146a2: ; 0x146a2 + call Func_146a9 + call nz, Func_14707 + ret + +Func_146a9: ; 0x146a9 + ld a, [wBallSaverTimerFrames] + ld hl, wBallSaverTimerSeconds + or [hl] + ret z + ld a, [wBallXPos + 1] + cp $9a + jr nc, .asm_146e8 + ld a, [wBallSaverTimerFrames] + dec a + ld [wBallSaverTimerFrames], a + bit 7, a + jr z, .asm_146e8 + ld a, 59 + ld [wBallSaverTimerFrames], a + ld a, [hl] + dec a + bit 7, a + jr nz, .asm_146cf + ld [hl], a +.asm_146cf + inc a + ld c, $0 + cp $2 + jr c, .asm_146e4 + ld c, $4 + cp $6 + jr c, .asm_146e4 + ld c, $10 + cp $b + jr c, .asm_146e4 + ld c, $ff +.asm_146e4 + ld a, c + ld [wd4a2], a +.asm_146e8 + ld a, [wd4a2] + ld c, $0 + and a + jr z, .asm_146fe + ld c, $1 + cp $ff + jr z, .asm_146fe + ld hl, hNumFramesDropped + and [hl] + jr z, .asm_146fe + ld c, $0 +.asm_146fe + ld a, [wBallSaverIconOn] + cp c + ld a, c + ld [wBallSaverIconOn], a + ret + +Func_14707: ; 0x14707 + ld a, [wBallSaverIconOn] + and a + jr nz, .asm_1471c + ld a, BANK(BgTileData_1172b) + ld hl, BgTileData_1172b + deCoord 8, 13, vBGMap + ld bc, $0004 + call LoadOrCopyVRAMData + ret + +.asm_1471c + ld a, BANK(BgTileData_1472f) + ld hl, BgTileData_1472f + deCoord 8, 13, vBGMap + ld bc, $0004 + call LoadOrCopyVRAMData + ret + +BgTileData_1172b: + db $AA, $AB, $AC, $AD + +BgTileData_1472f: + db $B4, $B5, $B6, $B7 + +Func_14733: ; 0x14733 + ld c, $0 + ld a, [wd49b] + and a + jr z, .asm_1473d + ld c, $1 +.asm_1473d + ld a, [wd4a9] + cp c + ld a, c + ld [wd4a9], a + ret z + ; fall through + +Func_14746: ; 0x14746 + ld c, $0 + ld a, [wd49b] + and a + jr z, .asm_14750 + ld c, $2 +.asm_14750 + ld b, $0 + ld hl, AgainTextTileDataRedField + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, BANK(AgainTextTileDataRedField) + call Func_10aa + ret + +AgainTextTileDataRedField: + dw AgainTextOffTileDataRedField + dw AgainTextOnTileDataRedField + +AgainTextOffTileDataRedField: + db 2 + dw AgainTextOffTileDataRedField1 + dw AgainTextOffTileDataRedField2 + +AgainTextOnTileDataRedField: + db 2 + dw AgainTextOnTileDataRedField1 + dw AgainTextOnTileDataRedField2 + +AgainTextOffTileDataRedField1: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $38 + dw AgainTextOffGfx + db Bank(AgainTextOffGfx) + db $00 + +AgainTextOffTileDataRedField2: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $3a + dw AgainTextOffGfx + $20 + db Bank(AgainTextOffGfx) + db $00 + +AgainTextOnTileDataRedField1: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $38 + dw StageRedFieldBottomBaseGameBoyGfx + $380 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +AgainTextOnTileDataRedField2: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $3a + dw StageRedFieldBottomBaseGameBoyGfx + $3a0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +Func_14795: ; 0x14795 + ld a, [wWildMonCollision] + and a + ret z + xor a + ld [wWildMonCollision], a + ld a, $1 + ld [wBallHitWildMon], a + lb de, $00, $06 + call PlaySoundEffect + ret + +ResolveDiglettCollision: ; 0x147aa + ld a, [wWhichDiglett] + and a + jp z, .asm_14834 + xor a + ld [wWhichDiglett], a + ld a, [wWhichDiglettId] + sub $1 + sla a + ld c, a + ld b, $0 + ld hl, wLeftMapMoveCounter + add hl, bc + ld a, [hl] + cp $3 + jr z, .asm_14834 + inc a + ld [hld], a + ld [hl], $50 + ld hl, wd4f7 + add hl, bc + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, c + and a + jr z, .asm_14807 + ld a, $6a + ld [wc7f0], a + ld a, $6b + ld [wc810], a + ld a, $5 + call Func_149d9 + ld a, [wRightMapMoveCounter] + add $4 + call Func_149f5 + ld a, $8 + callba Func_10000 + ld a, [wRightMapMoveCounter] + cp $3 + call z, Func_14920 + jr .asm_14830 + +.asm_14807 + ld a, $66 + ld [wc7e3], a + ld a, $67 + ld [wc803], a + ld a, $2 + call Func_149d9 + ld a, [wLeftMapMoveCounter] + call Func_149f5 + ld a, $7 + callba Func_10000 + ld a, [wLeftMapMoveCounter] + cp $3 + call z, Func_14947 +.asm_14830 + call Func_1496d + ret + +.asm_14834 + ld a, [wd4ef] + and a + jr z, .asm_14857 + dec a + ld [wd4ef], a + jr nz, .asm_14857 + ld a, [wLeftMapMoveCounter] + sub $3 + jr nz, .asm_1484d + ld [wLeftMapMoveCounter], a + call Func_149f5 +.asm_1484d + ld a, $64 + ld [wc7e3], a + ld a, $65 + ld [wc803], a +.asm_14857 + ld a, [wd4f1] + and a + jr z, .asm_1487c + dec a + ld [wd4f1], a + jr nz, .asm_1487c + ld a, [wRightMapMoveCounter] + sub $3 + jr nz, .asm_14872 + ld [wRightMapMoveCounter], a + add $4 + call Func_149f5 +.asm_14872 + ld a, $68 + ld [wc7f0], a + ld a, $69 + ld [wc810], a +.asm_1487c + call Func_14990 + ret + +Func_14880: ; 0x14880 + ld hl, wd4f7 + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_148a6 + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_148a6 + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wLeftMapMoveCounter] + and a + jr z, .asm_148a6 + cp $3 + jr z, .asm_148a6 + dec a + ld [wLeftMapMoveCounter], a + call Func_149f5 +.asm_148a6 + ld hl, wd4f9 + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_148ce + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_148ce + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wRightMapMoveCounter] + and a + jr z, .asm_148ce + cp $3 + jr z, .asm_148ce + dec a + ld [wRightMapMoveCounter], a + add $4 + call Func_149f5 +.asm_148ce + ret + +Func_148cf: ; 0x148cf + ld b, $0 + ld hl, wd4f8 + ld a, [hld] + or [hl] + jr z, .asm_148f8 + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_148f8 + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_148f8 + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wLeftMapMoveCounter] + and a + jr z, .asm_148f8 + cp $3 + jr z, .asm_148f8 + dec a + ld [wLeftMapMoveCounter], a +.asm_148f8 + ld hl, wd4fa + ld a, [hld] + or [hl] + jr z, .asm_1491f + dec [hl] + ld a, [hli] + cp $ff + jr nz, .asm_1491f + dec [hl] + ld a, [hld] + cp $ff + jr nz, .asm_1491f + ld a, $e0 + ld [hli], a + ld a, $1 + ld [hl], a + ld a, [wRightMapMoveCounter] + and a + jr z, .asm_1491f + cp $3 + jr z, .asm_1491f + dec a + ld [wRightMapMoveCounter], a +.asm_1491f + ret + +Func_14920: ; 0x14920 + ld hl, wd62b + call Func_e4a + jr nc, .asm_14937 + ld c, $a + call Func_e55 + callba z, Func_30164 +.asm_14937 + ld a, $1 + ld [wd55a], a + callba StartMapMoveMode + ret + +Func_14947: ; 0x14947 + ld hl, wd62b + call Func_e4a + jr nc, .asm_1495e + ld c, $a + call Func_e55 + callba z, Func_30164 +.asm_1495e + xor a + ld [wd55a], a + callba StartMapMoveMode + ret + +Func_1496d: ; 0x1496d + ld a, $55 + ld [wd803], a + ld a, $4 + ld [wd804], a + ld a, $2 + ld [wd7eb], a + ld bc, FiveHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $0f + call PlaySoundEffect + ret + +Func_14990: ; 0x14990 + ld a, [wd4ef] + and a + jr nz, .asm_149b6 + ld a, [wLeftMapMoveDiglettAnimationCounter] + and a + jr z, .asm_149a2 + dec a + ld [wLeftMapMoveDiglettAnimationCounter], a + jr .asm_149b6 + +.asm_149a2 + call Func_1130 + ret nz + ld a, $14 + ld [wLeftMapMoveDiglettAnimationCounter], a + ld a, [wLeftMapMoveDiglettFrame] + xor $1 + ld [wLeftMapMoveDiglettFrame], a + call Func_149d9 +.asm_149b6 + ld a, [wd4f1] + and a + ret nz + ld a, [wRightMapMoveDiglettAnimationCounter] + and a + jr z, .asm_149c6 + dec a + ld [wRightMapMoveDiglettAnimationCounter], a + ret + +.asm_149c6 + call Func_1130 + ret nz + ld a, $14 + ld [wRightMapMoveDiglettAnimationCounter], a + ld a, [wRightMapMoveDiglettFrame] + xor $1 + ld [wRightMapMoveDiglettFrame], a + add $3 + ; fall through +Func_149d9: ; 0x149d9 + sla a + ld c, a + ld b, $0 + ld hl, TileListDataPointers_14a11 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_149e9 + ld hl, TileListDataPointers_14a83 +.asm_149e9 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, BANK(TileListDataPointers_14a11) + call Func_10aa + ret + +Func_149f5: ; 0x149f5 + sla a + ld c, a + ld b, $0 + ld hl, Data_14af5 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_14a05 + ld hl, TileListDataPointers_14c8d +.asm_14a05 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, BANK(Data_14af5) + call Func_10aa + ret + +TileListDataPointers_14a11: ; 0x14a11 + dw TileListData_14a1d + dw TileListData_14a20 + dw TileListData_14a23 + dw TileListData_14a26 + dw TileListData_14a29 + dw TileListData_14a2c + +TileListData_14a1d: ; 0x14a1d + db $01 + dw TileListData_14a2f + +TileListData_14a20: ; 0x14a20 + db $01 + dw TileListData_14a3d + +TileListData_14a23: ; 0x14a23 + db $01 + dw TileListData_14a4b + +TileListData_14a26: ; 0x14a26 + db $01 + dw TileListData_14a59 + +TileListData_14a29: ; 0x14a29 + db $01 + dw TileListData_14a67 + +TileListData_14a2c: ; 0x14a2c + db $01 + dw TileListData_14a75 + +TileListData_14a2f: ; 0x14a2f + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $a3 + db $4C, $4D + + db $02 ; number of tiles + dw vBGMap + $c3 + db $4E, $4F + + db $00 ; terminator + +TileListData_14a3d: ; 0x14a3d + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $a3 + db $50, $51 + + db $02 ; number of tiles + dw vBGMap + $c3 + db $52, $53 + + db $00 ; terminator + +TileListData_14a4b: ; 0x14a4b + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $a3 + db $54, $80 + + db $02 ; number of tiles + dw vBGMap + $c3 + db $55, $80 + + db $00 ; terminator + +TileListData_14a59: ; 0x14a59 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $af + db $56, $57 + + db $02 ; number of tiles + dw vBGMap + $cf + db $58, $59 + + db $00 ; terminator + +TileListData_14a67: ; 0x14a67 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $af + db $5a, $5b + + db $02 ; number of tiles + dw vBGMap + $cf + db $5c, $5d + + db $00 ; terminator + +TileListData_14a75: ; 0x14a75 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $af + db $80, $5e + + db $02 ; number of tiles + dw vBGMap + $cf + db $80, $5f + + db $00 ; terminator + +TileListDataPointers_14a83: + dw TileListData_14a8f + dw TileListData_14a92 + dw TileListData_14a95 + dw TileListData_14a98 + dw TileListData_14a9b + dw TileListData_14a9e + +TileListData_14a8f: ; 0x14a8f + db $01 + dw TileListData_14aa1 + +TileListData_14a92: ; 0x14a92 + db $01 + dw TileListData_14aaf + +TileListData_14a95: ; 0x14a95 + db $01 + dw TileListData_14abd + +TileListData_14a98: ; 0x14a98 + db $01 + dw TileListData_14acb + +TileListData_14a9b: ; 0x14a9b + db $01 + dw TileListData_14ad9 + +TileListData_14a9e: ; 0x14a9e + db $01 + dw TileListData_14ae7 + +TileListData_14aa1: ; 0x14aa1 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $a3 + db $54, $55 + + db $02 ; number of tiles + dw vBGMap + $c3 + db $56, $57 + + db $00 + +TileListData_14aaf: ; 0x14aaf + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $a3 + db $58, $59 + + db $02 ; number of tiles + dw vBGMap + $c3 + db $5A, $5B + + db $00 ; terminator + +TileListData_14abd: ; 0x14abd + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $a3 + db $5C, $80 + + db $02 ; number of tiles + dw vBGMap + $c3 + db $5D, $80 + + db $00 ; terminator + +TileListData_14acb: ; 0x14acb + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $af + db $55, $54 + + db $02 ; number of tiles + dw vBGMap + $cf + db $57, $56 + + db $00 ; terminator + +TileListData_14ad9: ; 0x14ad9 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $af + db $59, $58 + + db $02 ; number of tiles + dw vBGMap + $cf + db $5B, $5A + + db $00 ; terminator + +TileListData_14ae7: ; 0x14ae7 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $af + db $80, $5C + + db $02 ; number of tiles + dw vBGMap + $cf + db $80, $5D + + db $00 ; terminator + +Data_14af5: ; 0x14af5 + dw Data_14b05 + dw Data_14b0e + dw Data_14b17 + dw Data_14b20 + dw Data_14b29 + dw Data_14b32 + dw Data_14b3b + dw Data_14b44 + +Data_14b05: ; 0x14b05 + db $04 + dw Data_14b4d + dw Data_14b57 + dw Data_14b61 + dw Data_14b6b + +Data_14b0e: ; 0x14b0e + db $04 + dw Data_14b75 + dw Data_14b7f + dw Data_14b89 + dw Data_14b93 + +Data_14b17: ; 0x14b17 + db $04 + dw Data_14b9d + dw Data_14ba7 + dw Data_14bb1 + dw Data_14bbb + +Data_14b20: ; 0x14b20 + db $04 + dw Data_14bc5 + dw Data_14bcf + dw Data_14bd9 + dw Data_14be3 + +Data_14b29: ; 0x14b29 + db $04 + dw Data_14bed + dw Data_14bf7 + dw Data_14c01 + dw Data_14c0b + +Data_14b32: ; 0x14b32 + db $04 + dw Data_14c15 + dw Data_14c1f + dw Data_14c29 + dw Data_14c33 + +Data_14b3b: ; 0x14b3b + db $04 + dw Data_14c3d + dw Data_14c47 + dw Data_14c51 + dw Data_14c5b + +Data_14b44: ; 0x14b44 + db $04 + dw Data_14c65 + dw Data_14c6f + dw Data_14c79 + dw Data_14c83 + +Data_14b4d: ; 0x14b4d + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $26 + dw StageRedFieldBottomBaseGameBoyGfx + $a60 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14b57: ; 0x14b57 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $29 + dw StageRedFieldBottomBaseGameBoyGfx + $a90 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14b61: ; 0x14b61 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $2C + dw StageRedFieldBottomBaseGameBoyGfx + $ac0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14b6b: ; 0x14b6b + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $2F + dw StageRedFieldBottomBaseGameBoyGfx + $af0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14b75: ; 0x14b75 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $26 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $720 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14b7f: ; 0x14b7f + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $29 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $750 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14b89: ; 0x14b89 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $2C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $780 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14b93: ; 0x14b93 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $2F + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $7B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14b9d: ; 0x14b9d + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $26 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $7C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14ba7: ; 0x14ba7 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $29 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $7F0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14bb1: ; 0x14bb1 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $2C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $820 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14bbb: ; 0x14bbb + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $2F + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $850 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14bc5: ; 0x14bc5 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $26 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $860 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14bcf: ; 0x14bcf + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $29 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $890 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14bd9: ; 0x14bd9 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $2C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $8C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14be3: ; 0x14be3 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $2F + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $8F0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14bed: ; 0x14bed + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $30 + dw StageRedFieldBottomBaseGameBoyGfx + $B00 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14bf7: ; 0x14bf7 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $33 + dw StageRedFieldBottomBaseGameBoyGfx + $B30 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14c01: ; 0x14c01 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $36 + dw StageRedFieldBottomBaseGameBoyGfx + $B60 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14c0b: ; 0x14c0b + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $39 + dw StageRedFieldBottomBaseGameBoyGfx + $B90 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 ; terminator + +Data_14c15: ; 0x14c15 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $30 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $900 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c1f: ; 0x14c1f + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $33 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $930 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c29: ; 0x14c29 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $36 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $960 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c33: ; 0x14c33 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $39 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $990 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c3d: ; 0x14c3d + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $30 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $9A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c47: ; 0x14c47 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $33 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $9D0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c51: ; 0x14c51 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $36 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $A00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c5b: ; 0x14c5b + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $39 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $A30 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c65: ; 0x14c65 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $30 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $A40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c6f: ; 0x14c6f + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $33 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $A70 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c79: ; 0x14c79 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $36 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $AA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +Data_14c83: ; 0x14c83 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $39 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $AD0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileListDataPointers_14c8d: + dw Data_14c9d + dw Data_14ca0 + dw Data_14ca3 + dw Data_14ca6 + dw Data_14ca9 + dw Data_14cac + dw Data_14caf + dw Data_14cb2 + +Data_14c9d: ; 0x14c9d + db $01 + dw TileListData_14cb5 + +Data_14ca0: ; 0x14ca0 + db $01 + dw TileListData_14ccf + +Data_14ca3: ; 0x14ca3 + db $01 + dw TileListData_14ce9 + +Data_14ca6: ; 0x14ca6 + db $01 + dw TileListData_14d03 + +Data_14ca9: ; 0x14ca9 + db $01 + dw TileListData_14d1d + +Data_14cac: ; 0x14cac + db $01 + dw TileListData_14d37 + +Data_14caf: ; 0x14caf + db $01 + dw TileListData_14d51 + +Data_14cb2: ; 0x14cb2 + db $01 + dw TileListData_14d6b + +TileListData_14cb5: ; 0x14cb5 + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $80 + db $06, $07 + + db $03 ; number of tiles + dw vBGMap + $a0 + db $08, $09, $0A + + db $03 ; number of tiles + dw vBGMap + $c0 + db $0B, $0C, $0D + + db $02 ; number of tiles + dw vBGMap + $e0 + db $0E, $0F + + db $00 ; terminator + +TileListData_14ccf: ; 0x14ccf + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $80 + db $06, $07 + + db $03 ; number of tiles + dw vBGMap + $a0 + db $10, $11, $0A + + db $03 ; number of tiles + dw vBGMap + $c0 + db $12, $13, $0D + + db $02 ; number of tiles + dw vBGMap + $e0 + db $14, $15 + + db $00 ; terminator + +TileListData_14ce9: ; 0x14ce9 + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $80 + db $06, $07 + + db $03 ; number of tiles + dw vBGMap + $a0 + db $10, $16, $17 + + db $03 ; number of tiles + dw vBGMap + $c0 + db $12, $18, $19 + + db $02 ; number of tiles + dw vBGMap + $e0 + db $14, $15 + + db $00 ; terminator + +TileListData_14d03: ; 0x14d03 + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $80 + db $1A, $1B + + db $03 ; number of tiles + dw vBGMap + $a0 + db $1C, $1D, $17 + + db $03 ; number of tiles + dw vBGMap + $c0 + db $12, $18, $19 + + db $02 ; number of tiles + dw vBGMap + $e0 + db $14, $15 + + db $00 ; terminator + +TileListData_14d1d: ; 014d1d + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $92 + db $07, $06 + + db $03 ; number of tiles + dw vBGMap + $b1 + db $0A, $1E, $08 + + db $03 ; number of tiles + dw vBGMap + $d1 + db $22, $0C, $24 + + db $02 ; number of tiles + dw vBGMap + $f2 + db $0F, $0E + + db $00 ; terminator + +TileListData_14d37: ; 0x14d37 + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $92 + db $07, $06 + + db $03 ; number of tiles + dw vBGMap + $b1 + db $0A, $1F, $10 + + db $03 ; number of tiles + dw vBGMap + $d1 + db $22, $13, $25 + + db $02 ; number of tiles + dw vBGMap + $f2 + db $15, $14 + + db $00 ; terminator + +TileListData_14d51: ; 0x14d51 + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $92 + db $07, $06 + + db $03 ; number of tiles + dw vBGMap + $b1 + db $17, $20, $10 + + db $03 ; number of tiles + dw vBGMap + $d1 + db $23, $18, $25 + + db $02 ; number of tiles + dw vBGMap + $f2 + db $15, $14 + + db $00 ; terminator + +TileListData_14d6b: ; 0x14d6b + dw LoadTileLists + db $0A ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $92 + db $1B, $1A + + db $03 ; number of tiles + dw vBGMap + $b1 + db $17, $21, $1C + + db $03 ; number of tiles + dw vBGMap + $d1 + db $23, $18, $25 + + db $02 ; number of tiles + dw vBGMap + $f2 + db $15, $14 + + db $00 ; terminator + +ResolveVoltorbCollision: ; 0x14d85 + ld a, [wWhichVoltorb] + and a + jr z, .noVoltorbCollision + xor a + ld [wWhichVoltorb], a + call Func_14dc9 + ld a, $10 + ld [wd4d6], a + ld a, [wWhichVoltorbId] + sub $3 + ld [wd4d7], a + ld a, $4 + callba Func_10000 + ld bc, FiveHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ret + +.noVoltorbCollision + ld a, [wd4d6] + and a + ret z + dec a + ld [wd4d6], a + ret nz + ld a, $ff + ld [wd4d7], a + ret + +Func_14dc9: ; 0x14dc9 + ld a, $ff + ld [wd803], a + ld a, $3 + ld [wd804], a + ld hl, $0200 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + lb de, $00, $0e + call PlaySoundEffect + ret + +ResolveRedStageSpinnerCollision: ; 0x14dea + ld a, [wSpinnerCollision] + and a + jr z, Func_14e10 + xor a + ld [wSpinnerCollision], a + ld a, [wBallYVelocity] + ld c, a + ld a, [wBallYVelocity + 1] + ld b, a + ld a, c + ld [wd50b], a + ld a, b + ld [wd50c], a + ld a, $c + callba Func_10000 + ; fall through +Func_14e10: ; 0x14e10 + ld hl, wd50b + ld a, [hli] + or [hl] + ret z + ld a, [wd50b] + ld c, a + ld a, [wd50c] + ld b, a + bit 7, b + jr nz, .asm_14e2e + ld a, c + sub $7 + ld c, a + ld a, b + sbc $0 + ld b, a + jr nc, .asm_14e3b + jr .asm_14e38 + +.asm_14e2e + ld a, c + add $7 + ld c, a + ld a, b + adc $0 + ld b, a + jr nc, .asm_14e3b +.asm_14e38 + ld bc, $0000 +.asm_14e3b + ld a, c + ld [wd50b], a + ld a, b + ld [wd50c], a + ld hl, wd50b + ld a, [wd509] + add [hl] + ld [wd509], a + inc hl + ld a, [wd50a] + adc [hl] + bit 7, a + ld c, $0 + jr z, .asm_14e5e + add $18 + ld c, $1 + jr .asm_14e66 + +.asm_14e5e + cp $18 + jr c, .asm_14e66 + sub $18 + ld c, $1 +.asm_14e66 + ld [wd50a], a + ld a, c + and a + ret z + ld bc, TenPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld hl, wd62d + call Func_e4a + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + jr nz, .asm_14e8a + call Func_14ea7 + ret + +.asm_14e8a + inc a + ld [wPikachuSaverCharge], a + call Func_14ea7 + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + jr nz, .asm_14e9d + ld a, $64 + ld [wd51e], a +.asm_14e9d + ld a, [wCurrentStage] + bit 0, a + ret nz + call Func_14ece + ret + +Func_14ea7: ; 0x14ea7 + ld a, [wd51e] + and a + ret nz + ld a, [wPikachuSaverCharge] + ld c, a + ld b, $0 + ld hl, SoundEffects_14ebe + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + call PlaySoundEffect + ret + +SoundEffects_14ebe: + db $12, $13, $14, $15, $16, $17, $18, $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $11 + +Func_14ece: ; 0x14ece + ld a, [wPikachuSaverCharge] + ld c, a + sla c + ld b, $0 + ld hl, TileDataPointers_14eeb + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_14ee1 + ld hl, TileDataPointers_1509b +.asm_14ee1 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, BANK(TileDataPointers_14eeb) + call Func_10aa + ret + +TileDataPointers_14eeb: + dw TileData_14f0b + dw TileData_14f10 + dw TileData_14f15 + dw TileData_14f1a + dw TileData_14f1f + dw TileData_14f24 + dw TileData_14f29 + dw TileData_14f2e + dw TileData_14f33 + dw TileData_14f38 + dw TileData_14f3d + dw TileData_14f42 + dw TileData_14f47 + dw TileData_14f4c + dw TileData_14f51 + dw TileData_14f56 + +TileData_14f0b: ; 0x14f0b + db $02 + dw TileData_14f5b + dw TileData_14f65 + +TileData_14f10: ; 0x14f10 + db $02 + dw TileData_14f6f + dw TileData_14f79 + +TileData_14f15: ; 0x14f15 + db $02 + dw TileData_14f83 + dw TileData_14f8d + +TileData_14f1a: ; 0x14f1a + db $02 + dw TileData_14f97 + dw TileData_14fa1 + +TileData_14f1f: ; 0x14f1f + db $02 + dw TileData_14fab + dw TileData_14fb5 + +TileData_14f24: ; 0x14f24 + db $02 + dw TileData_14fbf + dw TileData_14fc9 + +TileData_14f29: ; 0x14f29 + db $02 + dw TileData_14fd3 + dw TileData_14fdd + +TileData_14f2e: ; 0x14f2e + db $02 + dw TileData_14fe7 + dw TileData_14ff1 + +TileData_14f33: ; 0x14f33 + db $02 + dw TileData_14ffb + dw TileData_15005 + +TileData_14f38: ; 0x14f38 + db $02 + dw TileData_1500f + dw TileData_15019 + +TileData_14f3d: ; 0x14f3d + db $02 + dw TileData_15023 + dw TileData_1502d + +TileData_14f42: ; 0x14f42 + db $02 + dw TileData_15037 + dw TileData_15041 + +TileData_14f47: ; 0x14f47 + db $02 + dw TileData_1504b + dw TileData_15055 + +TileData_14f4c: ; 0x14f4c + db $02 + dw TileData_1505f + dw TileData_15069 + +TileData_14f51: ; 0x14f51 + db $02 + dw TileData_15073 + dw TileData_1507d + +TileData_14f56: ; 0x14f56 + db $02 + dw TileData_15087 + dw TileData_15091 + +TileData_14f5b: ; 0x14f5b + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldTopBaseGameBoyGfx + $cb0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 ; terminator + +TileData_14f65: ; 0x14f65 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldTopBaseGameBoyGfx + $cd0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 ; terminator + +TileData_14f6f: ; 0x14f6f + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $AE0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14f79: ; 0x14f79 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $B00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14f83: ; 0x14f83 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $B20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14f8d: ; 0x14f8d + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $B40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14f97: ; 0x14f97 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $B60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fa1: ; 0x14fa1 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $B80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fab: ; 0x14fab + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $BA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fb5: ; 0x14fb5 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $BC0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fbf: ; 0x14fbf + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $BE0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fc9: ; 0x14fc9 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $C00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fd3: ; 0x14fd3 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $C20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fdd: ; 0x14fdd + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $C40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14fe7: ; 0x14fe7 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $C60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14ff1: ; 0x14ff1 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $C80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_14ffb: ; 0x14ffb + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $CA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15005: ; 0x15005 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $CC0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1500f: ; 0x1500f + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $CE0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15019: ; 0x15019 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $D00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15023: ; 0x15023 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $D20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1502d: ; 0x1502d + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $D40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15037: ; 0x15037 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $D60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15041: ; 0x15041 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $D80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1504b: ; 0x1504b + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $DA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15055: ; 0x15055 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $DC0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1505f: ; 0x1505f + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $DE0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15069: ; 0x15069 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $E00 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15073: ; 0x15073 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $E20 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_1507d: ; 0x1507d + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $E40 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15087: ; 0x15087 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $75 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $E60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileData_15091: ; 0x15091 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $77 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $E80 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 ; terminator + +TileDataPointers_1509b: + dw TileData_150bb + dw TileData_150be + dw TileData_150c1 + dw TileData_150c4 + dw TileData_150c7 + dw TileData_150ca + dw TileData_150cd + dw TileData_150d0 + dw TileData_150d3 + dw TileData_150d6 + dw TileData_150d9 + dw TileData_150dc + dw TileData_150df + dw TileData_150e2 + dw TileData_150e5 + dw TileData_150e8 + +TileData_150bb: ; 0x150bb + db $01 + dw TileData_150eb + +TileData_150be: ; 0x150be + db $01 + dw TileData_150f9 + +TileData_150c1: ; 0x150c1 + db $01 + dw TileData_15107 + +TileData_150c4: ; 0x150c4 + db $01 + dw TileData_15115 + +TileData_150c7: ; 0x150c7 + db $01 + dw TileData_15123 + +TileData_150ca: ; 0x150ca + db $01 + dw TileData_15131 + +TileData_150cd: ; 0x150cd + db $01 + dw TileData_1513f + +TileData_150d0: ; 0x150d0 + db $01 + dw TileData_1514d + +TileData_150d3: ; 0x150d3 + db $01 + dw TileData_1515b + +TileData_150d6: ; 0x150d6 + db $01 + dw TileData_15169 + +TileData_150d9: ; 0x150d9 + db $01 + dw TileData_15177 + +TileData_150dc: ; 0x150dc + db $01 + dw TileData_15185 + +TileData_150df: ; 0x150df + db $01 + dw TileData_15193 + +TileData_150e2: ; 0x150e2 + db $01 + dw TileData_151a1 + +TileData_150e5: ; 0x150e5 + db $01 + dw TileData_151af + +TileData_150e8: ; 0x150e8 + db $01 + dw TileData_151bd + +TileData_150eb: ; 0x150eb + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $5E, $5F + + db $00 ; terminator + +TileData_150f9: ; 0x150f9 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $60, $61 + + db $00 ; terminator + +TileData_15107: ; 0x15107 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $62, $63 + + db $00 ; terminator + +TileData_15115: ; 0x15115 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $64, $65 + + db $00 ; terminator + +TileData_15123: ; 0x15123 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $66, $67 + + db $00 ; terminator + +TileData_15131: ; 0x15131 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $68, $69 + + db $00 ; terminator + +TileData_1513f: ; 0x1513f + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $6A, $6B + + db $00 ; terminator + +TileData_1514d: ; 0x1514d + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $6C, $6D + + db $00 ; terminator + +TileData_1515b: ; 0x1515b + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $5C, $5D + + db $02 ; number of tiles + dw $992E + db $6E, $6F + + db $00 ; terminator + +TileData_15169: ; 0x15169 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $70, $71 + + db $02 ; number of tiles + dw $992E + db $6E, $6F + + db $00 ; terminator + +TileData_15177: ; 0x15177 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $72, $73 + + db $02 ; number of tiles + dw $992E + db $6E, $6F + + db $00 ; terminator + +TileData_15185: ; 0x15185 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $74, $75 + + db $02 ; number of tiles + dw $992E + db $6E, $6F + + db $00 ; terminator + +TileData_15193: ; 0x15193 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $76, $77 + + db $02 ; number of tiles + dw $992E + db $6E, $6F + + db $00 ; terminator + +TileData_151a1: ; 0x151a1 + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $78, $79 + + db $02 ; number of tiles + dw $992E + db $6E, $6F + + db $00 ; terminator + +TileData_151af: ; 0x151af + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $7A, $7B + + db $02 ; number of tiles + dw $992E + db $6E, $6F + + db $00 ; terminator + +TileData_151bd: ; 0x151bd + dw LoadTileLists + db $04 ; total number of tiles + + db $02 ; number of tiles + dw $990E + db $7C, $7D + + db $02 ; number of tiles + dw $992E + db $7E, $7F + + db $00 ; terminator + +Func_151cb: ; 0x151cb + ld a, [wWhichCAVELight] + and a + jr z, .asm_15229 + xor a + ld [wWhichCAVELight], a + ld a, [wd513] + and a + jr nz, .asm_15229 + ld a, [wWhichCAVELightId] + sub $a + ld c, a + ld b, $0 + ld hl, wd50f + add hl, bc + ld a, [hl] + ld [hl], $1 + and a + ret nz + ld bc, OneHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld hl, wd50f + ld a, [hli] + and [hl] + inc hl + and [hl] + inc hl + and [hl] + jr z, Func_asm_1522d + ld a, $1 + ld [wd513], a + ld a, $80 + ld [wd514], a + ld bc, FourHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $09 + call PlaySoundEffect + ld hl, wd62c + call Func_e4a + jr Func_asm_1522d + +.asm_15229 + call Func_15270 + ret z + ; fall through + +Func_asm_1522d: ; 0x1522d + ld hl, wd512 + ld b, $4 +.asm_15232 + ld a, [hld] + push hl + call Func_1523c + pop hl + dec b + jr nz, .asm_15232 + ret + +Func_1523c: ; 0x1523c + and a + jr z, .asm_1524e + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_15249 + ld hl, TileDataPointers_152dd + jr .asm_1525b + +.asm_15249 + ld hl, TileDataPointers_1531d + jr .asm_1525b + +.asm_1524e + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_15258 + ld hl, TileDataPointers_152e5 + jr .asm_1525b + +.asm_15258 + ld hl, TileDataPointers_15325 +.asm_1525b + push bc + dec b + sla b + ld e, b + ld d, $0 + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + ld a, $5 + ld de, LoadTileLists + call Func_10c5 + pop bc + ret + +Func_15270: ; 0x15270 + ld a, [wd513] + and a + jr z, .asm_152a6 + ld a, [wd514] + dec a + ld [wd514], a + jr nz, .asm_1528d + ld [wd513], a + ld a, $1 + ld [wd608], a + ld a, $3 + ld [wd607], a + xor a +.asm_1528d + and $7 + ret nz + ld a, [wd514] + srl a + srl a + srl a + and $1 + ld hl, wd50f + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld a, $1 + and a + ret + +.asm_152a6 + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed + jr z, .asm_152c2 + ld hl, wd50f + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld e, a + ld a, [hl] + ld d, a + ld a, c + ld [hld], a + ld a, d + ld [hld], a + ld a, e + ld [hld], a + ld a, b + ld [hl], a + ret + +.asm_152c2 + ld hl, wKeyConfigRightFlipper + call IsKeyPressed + ret z + ld hl, wd50f + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld e, a + ld a, [hl] + ld d, a + ld a, e + ld [hld], a + ld a, b + ld [hld], a + ld a, c + ld [hld], a + ld a, d + ld [hl], a + ret + +TileDataPointers_152dd: + dw TileData_152ed + dw TileData_152f3 + dw TileData_152f9 + dw TileData_152ff + +TileDataPointers_152e5: + dw TileData_15305 + dw TileData_1530b + dw TileData_15311 + dw TileData_15317 + +TileData_152ed: ; 0x152ed + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $7d + + db $00 ; terminator + +TileData_152f3: ; 0x152f3 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $7d + + db $00 ; terminator + +TileData_152f9: ; 0x152f9 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $7f + + db $00 ; terminator + +TileData_152ff: ; 0x152ff + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $7f + + db $00 ; terminator + +TileData_15305: ; 0x15305 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $7c + + db $00 ; terminator + +TileData_1530b: ; 0x1530b + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $7c + + db $00 ; terminator + +TileData_15311: ; 0x15311 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $7e + + db $00 ; terminator + +TileData_15317: ; 0x15317 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $7e + + db $00 ; terminator + +TileDataPointers_1531d: + dw TileData_1532d + dw TileData_15333 + dw TileData_15339 + dw TileData_1533f + +TileDataPointers_15325: + dw TileData_15345 + dw TileData_1534b + dw TileData_15351 + dw TileData_15357 + +TileData_1532d: ; 0x1532d + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $27 + + db $00 ; terminator + +TileData_15333: ; 0x15333 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $29 + + db $00 ; terminator + +TileData_15339: ; 0x15339 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $7E + + db $00 ; terminator + +TileData_1533f: ; 0x1533f + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $7F + + db $00 ; terminator + +TileData_15345: ; 0x15345 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $121 + db $26 + + db $00 ; terminator + +TileData_1534b: ; 0x1534b + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $123 + db $28 + + db $00 ; terminator + +TileData_15351: ; 0x15351 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $130 + db $7C + + db $00 ; terminator + +TileData_15357: ; 0x15357 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $132 + db $7D + + db $00 ; terminator + +ResolveRedStagePinballUpgradeTriggersCollision: ; 0x1535d + ld a, [wWhichPinballUpgradeTrigger] + and a + jp z, .asm_1544c + xor a + ld [wWhichPinballUpgradeTrigger], a + ld a, [wStageCollisionState] + bit 0, a + jp z, .asm_1544c + ld a, [wd5fc] + and a + jp nz, .asm_1544c + xor a + ld [wRightAlleyTrigger], a + ld [wLeftAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + call Func_159c9 + ld a, $b + callba Func_10000 + ld a, [wWhichPinballUpgradeTriggerId] + sub $e + ld c, a + ld b, $0 + ld hl, wd5f9 + add hl, bc + ld a, [hl] + ld [hl], $1 + and a + ret nz + ld bc, OneHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld hl, wd5f9 + ld a, [hli] + and [hl] + inc hl + and [hl] + jr nz, .asm_153c0 + lb de, $00, $09 + call PlaySoundEffect + jp Func_15450 + +.asm_153c0 + ld a, $1 + ld [wd5fc], a + ld a, $80 + ld [wd5fd], a + ; load approximately 1 minute of frames into wBallTypeCounter + ld a, $10 + ld [wBallTypeCounter], a + ld a, $e + ld [wBallTypeCounter + 1], a + ld bc, FourHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wBallType] + cp MASTER_BALL + jr z, .masterBall + lb de, $06, $3a + call PlaySoundEffect + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld de, FieldMultiplierText + ld hl, wd5cc + call LoadTextHeader + ld a, [wBallType] + ld c, a + ld b, $0 + ld hl, BallTypeProgressionRedField + add hl, bc + ld a, [hl] + ld [wBallType], a + add $30 + ld [wBottomMessageText + $12], a + jr .asm_15447 + +.masterBall + lb de, $0f, $4d + call PlaySoundEffect + ld bc, OneMillionPoints + callba AddBigBCD6FromQueue + ld bc, $0100 + ld de, $0000 + push bc + push de + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5d4 + ld de, DigitsText1to8 + call Func_32cc + pop de + pop bc + ld hl, wd5cc + ld de, FieldMultiplierSpecialBonusText + call LoadTextHeader +.asm_15447 + call TransitionPinballUpgrade + jr Func_15450 + +.asm_1544c + call Func_154a9 + ret z + +Func_15450 + ld a, [wStageCollisionState] + bit 0, a + ret z + ld hl, wd5fb + ld b, $3 +.asm_1545b + ld a, [hld] + push hl + call Func_15465 + pop hl + dec b + jr nz, .asm_1545b + ret + +Func_15465: ; 0x15465 + and a + jr z, .asm_15477 + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_15472 + ld hl, TileDataPointers_15511 + jr .asm_15484 + +.asm_15472 + ld hl, TileDataPointers_15543 + jr .asm_15484 + +.asm_15477 + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_15481 + ld hl, TileDataPointers_15517 + jr .asm_15484 + +.asm_15481 + ld hl, TileDataPointers_15549 +.asm_15484 + push bc + dec b + sla b + ld e, b + ld d, $0 + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + ld a, $5 + ld de, LoadTileLists + call Func_10c5 + pop bc + ret + +Func_15499: ; 0x15499 + ld a, [hGameBoyColorFlag] + and a + ret nz + ld b, $3 +.asm_1549f + push hl + xor a + call Func_15465 + pop hl + dec b + jr nz, .asm_1549f + ret + +Func_154a9: ; 0x154a9 + ld a, [wd5fc] + and a + jr z, .asm_154d6 + ld a, [wd5fd] + dec a + ld [wd5fd], a + jr nz, .asm_154bb + ld [wd5fc], a +.asm_154bb + and $7 + jr nz, .asm_154d4 + ld a, [wd5fd] + srl a + srl a + srl a + and $1 + ld hl, wd5f9 + ld [hli], a + ld [hli], a + ld [hl], a + ld a, $1 + and a + ret + +.asm_154d4 + xor a + ret + +.asm_154d6 + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed + jr z, .asm_154ee + ld hl, wd5f9 + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hl] + ld e, a + ld a, c + ld [hld], a + ld a, e + ld [hld], a + ld a, b + ld [hl], a + ret + +.asm_154ee + ld hl, wKeyConfigRightFlipper + call IsKeyPressed + ret z + ld hl, wd5f9 + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hl] + ld e, a + ld a, b + ld [hld], a + ld a, c + ld [hld], a + ld a, e + ld [hl], a + ret + +BallTypeProgressionRedField: ; 0x15505 +; Determines the next upgrade for the Ball. + db GREAT_BALL ; POKE_BALL -> GREAT_BALL + db GREAT_BALL ; unused + db ULTRA_BALL ; GREAT_BALL -> ULTRA_BALL + db MASTER_BALL ; ULTRA_BALL -> MASTER_BALL + db MASTER_BALL ; unused + db MASTER_BALL ; MASTER_BALL -> MASTER_BALL + +BallTypeDegradationRedField: ; 0x1550b +; Determines the previous upgrade for the Ball. + db POKE_BALL ; POKE_BALL -> POKE_BALL + db POKE_BALL ; unused + db POKE_BALL ; GREAT_BALL -> POKE_BALL + db GREAT_BALL ; ULTRA_BALL -> GREAT_BALL + db ULTRA_BALL ; unused + db ULTRA_BALL ; MASTER_BALL -> GREAT_BALL + +TileDataPointers_15511: + dw TileData_1551d + dw TileData_15523 + dw TileData_1552a + +TileDataPointers_15517: + dw TileData_15530 + dw TileData_15536 + dw TileData_1553d + +TileData_1551d: ; 0x1551d + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $E7 + db $ac + + db $00 ; terminator + +TileData_15523: ; 0x15523 + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $C9 + db $ad, $ae + + db $00 ; terminator + +TileData_1552a: ; 0x1552a + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $CC + db $af + + db $00 ; terminator + +TileData_15530: ; 0x15530 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $E7 + db $66 + + db $00 ; terminator + +TileData_15536: ; 0x15536 + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $C9 + db $68, $69 + + db $00 ; terminator + +TileData_1553d: ; 0x1553d + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $CC + db $6a + + db $00 ; terminator + +TileDataPointers_15543: + dw TileData_1554f + dw TileData_15555 + dw TileData_1555c + +TileDataPointers_15549: + dw TileData_15562 + dw TileData_15568 + dw TileData_1556F + +TileData_1554f: ; 0x1554f + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $e7 + db $3D + + db $00 ; terminator + +TileData_15555: ; 0x15555 + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $c9 + db $3F, $40 + + db $00 ; terminator + +TileData_1555c: ; 0x1555c + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $cc + db $41 + + db $00 ; terminator + +TileData_15562: ; 0x15562 + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $e7 + db $37 + + db $00 ; terminator + +TileData_15568: ; 0x15568 + db $02 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $c9 + db $39, $3a + + db $00 ; terminator + +TileData_1556F: ; 0x1556F + db $01 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $cc + db $3B + + db $00 ; terminator + +HandleRedStageBallTypeUpgradeCounter: ; 0x15575 + ld a, [wCapturingMon] + and a + ret nz + ld hl, wBallTypeCounter + ld a, [hli] + ld c, a + ld b, [hl] + or b + ret z + dec bc + ld a, b + ld [hld], a + ld [hl], c + or c + ret nz + ; counter is now 0! Degrade the ball upgrade. + ld a, [wBallType] + ld c, a + ld b, $0 + ld hl, BallTypeDegradationRedField + add hl, bc + ld a, [hl] + ld [wBallType], a + and a + jr z, .pokeball + ; load approximately 1 minute of frames into wBallTypeCounter + ld a, $10 + ld [wBallTypeCounter], a + ld a, $e + ld [wBallTypeCounter + 1], a +.pokeball + call TransitionPinballUpgrade + ret + +TransitionPinballUpgrade: ; 0x155a7 + ld a, [wBallType] + ld c, a + sla c + ld b, $0 + ld hl, PinballUpgradeTransitionPointers + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(PinballUpgradeTransitionPointers) + call Func_10aa + ; fall through + +Func_155bb: ; 0x155bb + ld a, [hGameBoyColorFlag] + and a + ret z + ; gameboy color + ld a, [wBallType] + sla a + ld c, a + ld b, $0 + ld hl, Data_157f7 + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + ld a, BANK(Data_157f7) + ld de, LoadPalettes + call Func_10c5 + ret + +PinballUpgradeTransitionPointers: + dw TransitionToPokeBallPointers ; POKE_BALL + dw TransitionToPokeBallPointers ; POKE_BALL + dw TransitionToGreatBallPointers ; GREAT_BALL + dw TransitionToUltraBallPointers ; ULTRA_BALL + dw TransitionToUltraBallPointers ; ULTRA_BALL + dw TransitionToMasterBallPointers ; MASTER_BALL + +TransitionToPokeBallPointers: + db 11 + dw TransitionToPokeBall_TileData_1 + dw TransitionToPokeBall_TileData_2 + dw TransitionToPokeBall_TileData_3 + dw TransitionToPokeBall_TileData_4 + dw TransitionToPokeBall_TileData_5 + dw TransitionToPokeBall_TileData_6 + dw TransitionToPokeBall_TileData_7 + dw TransitionToPokeBall_TileData_8 + dw TransitionToPokeBall_TileData_9 + dw TransitionToPokeBall_TileData_10 + dw TransitionToPokeBall_TileData_11 + +TransitionToGreatBallPointers: + db 11 + dw TransitionToGreatBall_TileData_1 + dw TransitionToGreatBall_TileData_2 + dw TransitionToGreatBall_TileData_3 + dw TransitionToGreatBall_TileData_4 + dw TransitionToGreatBall_TileData_5 + dw TransitionToGreatBall_TileData_6 + dw TransitionToGreatBall_TileData_7 + dw TransitionToGreatBall_TileData_8 + dw TransitionToGreatBall_TileData_9 + dw TransitionToGreatBall_TileData_10 + dw TransitionToGreatBall_TileData_11 + +TransitionToUltraBallPointers: + db 11 + dw TransitionToUltraBall_TileData_1 + dw TransitionToUltraBall_TileData_2 + dw TransitionToUltraBall_TileData_3 + dw TransitionToUltraBall_TileData_4 + dw TransitionToUltraBall_TileData_5 + dw TransitionToUltraBall_TileData_6 + dw TransitionToUltraBall_TileData_7 + dw TransitionToUltraBall_TileData_8 + dw TransitionToUltraBall_TileData_9 + dw TransitionToUltraBall_TileData_10 + dw TransitionToUltraBall_TileData_11 + +TransitionToMasterBallPointers: + db 11 + dw TransitionToMasterBall_TileData_1 + dw TransitionToMasterBall_TileData_2 + dw TransitionToMasterBall_TileData_3 + dw TransitionToMasterBall_TileData_4 + dw TransitionToMasterBall_TileData_5 + dw TransitionToMasterBall_TileData_6 + dw TransitionToMasterBall_TileData_7 + dw TransitionToMasterBall_TileData_8 + dw TransitionToMasterBall_TileData_9 + dw TransitionToMasterBall_TileData_10 + dw TransitionToMasterBall_TileData_11 + +TransitionToPokeBall_TileData_1: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $40) + dw PinballPokeballGfx + $0 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_2: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $43) + dw PinballPokeballGfx + $30 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_3: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $46) + dw PinballPokeballGfx + $60 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_4: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $49) + dw PinballPokeballGfx + $90 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_5: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4c) + dw PinballPokeballGfx + $c0 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_6: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4f) + dw PinballPokeballGfx + $f0 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_7: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $52) + dw PinballPokeballGfx + $120 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_8: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $55) + dw PinballPokeballGfx + $150 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_9: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $58) + dw PinballPokeballGfx + $180 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_10: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $5b) + dw PinballPokeballGfx + $1b0 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToPokeBall_TileData_11: + dw Func_11d2 + db $20, $02 + dw (vTilesOB tile $5e) + dw PinballPokeballGfx + $1e0 + db Bank(PinballPokeballGfx) + db $00 + +TransitionToGreatBall_TileData_1: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $40) + dw PinballGreatballGfx + $0 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_2: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $43) + dw PinballGreatballGfx + $30 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_3: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $46) + dw PinballGreatballGfx + $60 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_4: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $49) + dw PinballGreatballGfx + $90 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_5: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4c) + dw PinballGreatballGfx + $c0 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_6: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4f) + dw PinballGreatballGfx + $f0 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_7: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $52) + dw PinballGreatballGfx + $120 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_8: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $55) + dw PinballGreatballGfx + $150 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_9: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $58) + dw PinballGreatballGfx + $180 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_10: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $5b) + dw PinballGreatballGfx + $1b0 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToGreatBall_TileData_11: + dw Func_11d2 + db $20, $02 + dw (vTilesOB tile $5e) + dw PinballGreatballGfx + $1e0 + db Bank(PinballGreatballGfx) + db $00 + +TransitionToUltraBall_TileData_1: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $40) + dw PinballUltraballGfx + $0 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_2: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $43) + dw PinballUltraballGfx + $30 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_3: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $46) + dw PinballUltraballGfx + $60 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_4: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $49) + dw PinballUltraballGfx + $90 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_5: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4c) + dw PinballUltraballGfx + $c0 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_6: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4f) + dw PinballUltraballGfx + $f0 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_7: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $52) + dw PinballUltraballGfx + $120 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_8: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $55) + dw PinballUltraballGfx + $150 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_9: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $58) + dw PinballUltraballGfx + $180 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_10: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $5b) + dw PinballUltraballGfx + $1b0 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToUltraBall_TileData_11: + dw Func_11d2 + db $20, $02 + dw (vTilesOB tile $5e) + dw PinballUltraballGfx + $1e0 + db Bank(PinballUltraballGfx) + db $00 + +TransitionToMasterBall_TileData_1: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $40) + dw PinballMasterballGfx + $0 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_2: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $43) + dw PinballMasterballGfx + $30 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_3: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $46) + dw PinballMasterballGfx + $60 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_4: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $49) + dw PinballMasterballGfx + $90 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_5: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4c) + dw PinballMasterballGfx + $c0 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_6: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $4f) + dw PinballMasterballGfx + $f0 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_7: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $52) + dw PinballMasterballGfx + $120 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_8: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $55) + dw PinballMasterballGfx + $150 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_9: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $58) + dw PinballMasterballGfx + $180 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_10: + dw Func_11d2 + db $30, $03 + dw (vTilesOB tile $5b) + dw PinballMasterballGfx + $1b0 + db Bank(PinballMasterballGfx) + db $00 + +TransitionToMasterBall_TileData_11: + dw Func_11d2 + db $20, $02 + dw (vTilesOB tile $5e) + dw PinballMasterballGfx + $1e0 + db Bank(PinballMasterballGfx) + db $00 + +Data_157f7: + dw Data_15803 + dw Data_15803 + dw Data_1580a + dw Data_15811 + dw Data_15811 + dw Data_15818 + +Data_15803: + db $08, $04, $40, $68, $51, $37, $00 +Data_1580a: + db $08, $04, $40, $70, $51, $37, $00 +Data_15811: + db $08, $04, $40, $78, $51, $37, $00 +Data_15818: + db $08, $04, $40, $80, $51, $37, $00 + +ResolveRedStageBoardTriggerCollision: ; 0x1581f + ld a, [wWhichBoardTrigger] + and a + ret z + xor a + ld [wWhichBoardTrigger], a + ld bc, FivePoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wWhichBoardTriggerId] + sub $11 + ld c, a + ld b, $0 + ld hl, wd521 + add hl, bc + ld [hl], $1 + ld a, [wd521] + and a + call nz, Func_1587c + ld a, [wd522] + and a + call nz, Func_158c0 + ld a, [wd523] + and a + call nz, Func_15904 + ld a, [wd524] + and a + call nz, HandleLeftAlleyTriggerRedField + ld a, [wd525] + and a + call nz, Func_15931 + ld a, [wd526] + and a + call nz, Func_15944 + ld a, [wd527] + and a + call nz, HandleRightAlleyTriggerRedField + ld a, [wd528] + and a + call nz, Func_15990 + ret + +Func_1587c: ; 0x1587c + xor a + ld [wd521], a + ld a, [wLeftAlleyTrigger] + and a + ret z + xor a + ld [wLeftAlleyTrigger], a + ld a, $1 + callba Func_10000 + ret c + ld a, [wLeftAlleyCount] + cp $3 + ret z + inc a + ld [wLeftAlleyCount], a + set 7, a + ld [wIndicatorStates], a + cp $83 + ret nz + ld a, [wStageCollisionState] + and $1 + or $6 + ld [wStageCollisionState], a + callba LoadStageCollisionAttributes + call Func_159f4 + ret + +Func_158c0: ; 0x158c0 + xor a + ld [wd522], a + ld a, [wLeftAlleyTrigger] + and a + ret z + xor a + ld [wLeftAlleyTrigger], a + ld a, $1 + callba Func_10000 + ret c + ld a, [wLeftAlleyCount] + cp $3 + ret z + inc a + ld [wLeftAlleyCount], a + set 7, a + ld [wIndicatorStates], a + cp $83 + ret nz + ld a, [wStageCollisionState] + and $1 + or $6 + ld [wStageCollisionState], a + callba LoadStageCollisionAttributes + call Func_159f4 + ret + +Func_15904: ; 0x15904 + xor a + ld [wd523], a + ld a, [wSecondaryLeftAlleyTrigger] + and a + ret z + xor a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $3 + callba Func_10000 + ret + +HandleLeftAlleyTriggerRedField: ; 0x1591e +; Ball passed over the left alley trigger point in the Red Field. + xor a + ld [wd524], a + ld [wRightAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $1 + ld [wLeftAlleyTrigger], a + call Func_159c9 + ret + +Func_15931: ; 0x15931 + xor a + ld [wd525], a + ld [wRightAlleyTrigger], a + ld [wLeftAlleyTrigger], a + ld a, $1 + ld [wSecondaryLeftAlleyTrigger], a + call Func_159c9 + ret + +Func_15944: ; 0x15944 + xor a + ld [wd526], a + ld a, [wRightAlleyTrigger] + and a + ret z + xor a + ld [wRightAlleyTrigger], a + ld a, $2 + callba Func_10000 + ret c + ld a, [wRightAlleyCount] + cp $3 + ret z + inc a + ld [wRightAlleyCount], a + cp $3 + jr z, .asm_1596e + set 7, a +.asm_1596e + ld [wIndicatorStates + 1], a + ld a, [wRightAlleyCount] + cp $2 + ret c + ld a, $80 + ld [wIndicatorStates + 3], a + ret + +HandleRightAlleyTriggerRedField: ; 0x1597d +; Ball passed over the right alley trigger point in the Red Field. + xor a + ld [wd527], a + ld [wLeftAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $1 + ld [wRightAlleyTrigger], a + call Func_159c9 + ret + +Func_15990: ; 0x15990 + xor a + ld [wd528], a + ld a, [wRightAlleyTrigger] + and a + ret z + xor a + ld [wRightAlleyTrigger], a + ld a, $2 + callba Func_10000 + ret c + ld a, [wRightAlleyCount] + cp $3 + ret z + inc a + ld [wRightAlleyCount], a + cp $3 + jr z, .asm_159ba + set 7, a +.asm_159ba + ld [wIndicatorStates + 1], a + ld a, [wRightAlleyCount] + cp $2 + ret c + ld a, $80 + ld [wIndicatorStates + 3], a + ret + +Func_159c9: ; 0x159c9 + ld a, [wd7ad] + bit 7, a + ret nz + ld c, a + ld a, [wStageCollisionState] + and $1 + or c + ld [wStageCollisionState], a + ld a, $ff + ld [wd7ad], a + callba LoadStageCollisionAttributes + call Func_159f4 + ld a, $1 + ld [wd580], a + call Func_1404a + ret + +Func_159f4: ; 0x159f4 + ld a, [hLCDC] + bit 7, a + jr z, .asm_15a13 + ld a, [wd7f2] + and $fe + ld c, a + ld a, [wStageCollisionState] + and $fe + cp c + jr z, .asm_15a13 + add c + cp $2 + jr z, .asm_15a13 + lb de, $00, $00 + call PlaySoundEffect +.asm_15a13 + ld a, [wd7f2] + swap a + ld c, a + ld a, [wStageCollisionState] + sla a + or c + ld c, a + ld b, $0 + ld hl, TileDataPointers_15a3f + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_15a2d + ld hl, TileDataPointers_15d05 +.asm_15a2d + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_15a3f) + call Func_10aa + ld a, [wStageCollisionState] + ld [wd7f2], a + ret + +TileDataPointers_15a3f: + dw $0000 + dw TileData_15b71 + dw TileData_15b16 + dw TileData_15abf + dw TileData_15b23 + dw TileData_15adc + dw TileData_15b2a + dw TileData_15af3 + dw $0000 + dw $0000 + dw $0000 + dw TileData_15b16 + dw $0000 + dw TileData_15b23 + dw $0000 + dw TileData_15b2a + dw $0000 + dw $0000 + dw $0000 + dw TileData_15b71 + dw TileData_15b3d + dw $0000 + dw TileData_15b50 + dw $0000 + dw $0000 + dw $0000 + dw TileData_15b82 + dw $0000 + dw $0000 + dw TileData_15b3d + dw $0000 + dw TileData_15b50 + dw $0000 + dw $0000 + dw TileData_15b57 + dw $0000 + dw $0000 + dw TileData_15b71 + dw TileData_15b2a + dw $0000 + dw $0000 + dw $0000 + dw $0000 + dw TileData_15b57 + dw TileData_15b82 + dw $0000 + dw $0000 + dw TileData_15b2a + dw $0000 + dw $0000 + dw TileData_15b6a + dw $0000 + dw TileData_15b3d + dw $0000 + dw $0000 + dw TileData_15b71 + dw $0000 + dw $0000 + dw $0000 + dw TileData_15b6a + dw $0000 + dw TileData_15b3d + dw TileData_15b82 + dw $0000 + +TileData_15abf: ; 0x15abf + db $e + dw TileData_15b93 + dw TileData_15b9d + dw TileData_15ba7 + dw TileData_15bb1 + dw TileData_15bbb + dw TileData_15bc5 + dw TileData_15c0b + dw TileData_15c15 + dw TileData_15c1f + dw TileData_15c29 + dw TileData_15c33 + dw TileData_15c3d + dw TileData_15c47 + dw TileData_15c51 + +TileData_15adc: ; 0x15adc + db $0b + dw TileData_15c0b + dw TileData_15c15 + dw TileData_15c1f + dw TileData_15c29 + dw TileData_15c33 + dw TileData_15c3d + dw TileData_15c47 + dw TileData_15c51 + dw TileData_15ce7 + dw TileData_15cf1 + dw TileData_15cfb + +TileData_15af3: ; 0x15af3 + db $11 + dw TileData_15b93 + dw TileData_15b9d + dw TileData_15ba7 + dw TileData_15bb1 + dw TileData_15bbb + dw TileData_15bc5 + dw TileData_15c0b + dw TileData_15c15 + dw TileData_15c1f + dw TileData_15c29 + dw TileData_15c33 + dw TileData_15c3d + dw TileData_15c47 + dw TileData_15c51 + dw TileData_15cab + dw TileData_15cb5 + dw TileData_15cbf + +TileData_15b16: ; 0x15b16 + db $06 + dw TileData_15b93 + dw TileData_15b9d + dw TileData_15ba7 + dw TileData_15bb1 + dw TileData_15bbb + dw TileData_15bc5 + +TileData_15b23: ; 0x15b23 + db $03 + dw TileData_15ce7 + dw TileData_15cf1 + dw TileData_15cfb + +TileData_15b2a: ; 0x15b2a + db $09 + dw TileData_15b93 + dw TileData_15b9d + dw TileData_15ba7 + dw TileData_15bb1 + dw TileData_15bbb + dw TileData_15bc5 + dw TileData_15cab + dw TileData_15cb5 + dw TileData_15cbf + +TileData_15b3d: ; 0x15b3d + db $09 + dw TileData_15bcf + dw TileData_15bd9 + dw TileData_15be3 + dw TileData_15bed + dw TileData_15bf7 + dw TileData_15c01 + dw TileData_15ce7 + dw TileData_15cf1 + dw TileData_15cfb + +TileData_15b50: ; 0x15b50 + db $03 + dw TileData_15cab + dw TileData_15cb5 + dw TileData_15cbf + +TileData_15b57: ; 0x15b57 + db $09 + dw TileData_15b93 + dw TileData_15b9d + dw TileData_15ba7 + dw TileData_15bb1 + dw TileData_15bbb + dw TileData_15bc5 + dw TileData_15cc9 + dw TileData_15cd3 + dw TileData_15cdd + +TileData_15b6a: ; 0x15b6a + db $03 + dw TileData_15cc9 + dw TileData_15cd3 + dw TileData_15cdd + +TileData_15b71: ; 0x15b71 + db $08 + dw TileData_15c0b + dw TileData_15c15 + dw TileData_15c1f + dw TileData_15c29 + dw TileData_15c33 + dw TileData_15c3d + dw TileData_15c47 + dw TileData_15c51 + +TileData_15b82: ; 0x15b82 + db $08 + dw TileData_15c5b + dw TileData_15c65 + dw TileData_15c6f + dw TileData_15c79 + dw TileData_15c83 + dw TileData_15c8d + dw TileData_15c97 + dw TileData_15ca1 + +TileData_15b93: ; 0x15b93 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15b9d: ; 0x15b9d + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $30 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15ba7: ; 0x15ba7 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15bb1: ; 0x15bb1 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $90 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15bbb: ; 0x15bbb + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $50 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15bc5: ; 0x15bc5 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $53 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $F0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15bcf: ; 0x15bcf + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldTopBaseGameBoyGfx + $9a0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15bd9: ; 0x15bd9 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $47 + dw StageRedFieldTopBaseGameBoyGfx + $9d0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15be3: ; 0x15be3 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4A + dw StageRedFieldTopBaseGameBoyGfx + $a00 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15bed: ; 0x15bed + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $4D + dw StageRedFieldTopBaseGameBoyGfx + $a30 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15bf7: ; 0x15bf7 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $50 + dw StageRedFieldTopBaseGameBoyGfx + $a60 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c01: ; 0x15c01 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $53 + dw StageRedFieldTopBaseGameBoyGfx + $a90 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c0b: ; 0x15c0b + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $56 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $120 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c15: ; 0x15c15 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $59 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $150 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c1f: ; 0x15c1f + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $180 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c29: ; 0x15c29 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5F + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c33: ; 0x15c33 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $62 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c3d: ; 0x15c3d + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $65 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $210 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c47: ; 0x15c47 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $66 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $620 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c51: ; 0x15c51 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $69 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $650 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15c5b: ; 0x15c5b + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $56 + dw StageRedFieldTopBaseGameBoyGfx + $ac0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c65: ; 0x15c65 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $59 + dw StageRedFieldTopBaseGameBoyGfx + $af0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c6f: ; 0x15c6f + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5C + dw StageRedFieldTopBaseGameBoyGfx + $b20 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c79: ; 0x15c79 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $5F + dw StageRedFieldTopBaseGameBoyGfx + $b50 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c83: ; 0x15c83 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $62 + dw StageRedFieldTopBaseGameBoyGfx + $b80 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c8d: ; 0x15c8d + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $65 + dw StageRedFieldTopBaseGameBoyGfx + $bb0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15c97: ; 0x15c97 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $66 + dw StageRedFieldTopBaseGameBoyGfx + $bc0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15ca1: ; 0x15ca1 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $69 + dw StageRedFieldTopBaseGameBoyGfx + $bf0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15cab: ; 0x15cab + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15cb5: ; 0x15cb5 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $6F + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15cbf: ; 0x15cbf + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $72 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $310 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15cc9: ; 0x15cc9 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $6C + dw StageRedFieldTopBaseGameBoyGfx + $c20 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15cd3: ; 0x15cd3 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $6F + dw StageRedFieldTopBaseGameBoyGfx + $c50 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15cdd: ; 0x15cdd + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $72 + dw StageRedFieldTopBaseGameBoyGfx + $c80 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_15ce7: ; 0x15ce7 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $6C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $220 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15cf1: ; 0x15cf1 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $6F + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $250 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_15cfb: ; 0x15cfb + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $72 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $280 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileDataPointers_15d05: + dw $0000 + dw TileData_15db1 + dw TileData_15d96 + dw TileData_15d85 + dw TileData_15d99 + dw TileData_15d8a + dw TileData_15d9c + dw TileData_15d8f + dw $0000 + dw $0000 + dw $0000 + dw TileData_15d96 + dw $0000 + dw TileData_15d99 + dw $0000 + dw TileData_15d9c + dw $0000 + dw $0000 + dw $0000 + dw TileData_15db1 + dw TileData_15da1 + dw $0000 + dw TileData_15da6 + dw $0000 + dw $0000 + dw $0000 + dw TileData_15db4 + dw $0000 + dw $0000 + dw TileData_15da1 + dw $0000 + dw TileData_15da6 + dw $0000 + dw $0000 + dw TileData_15da9 + dw $0000 + dw $0000 + dw TileData_15db1 + dw TileData_15d9c + dw $0000 + dw $0000 + dw $0000 + dw $0000 + dw TileData_15da9 + dw TileData_15db4 + dw $0000 + dw $0000 + dw TileData_15d9c + dw $0000 + dw $0000 + dw TileData_15dae + dw $0000 + dw TileData_15da1 + dw $0000 + dw $0000 + dw TileData_15db1 + dw $0000 + dw $0000 + dw $0000 + dw TileData_15dae + dw $0000 + dw TileData_15da1 + dw TileData_15db4 + dw $0000 + +TileData_15d85: ; 0x15d85 + db $02 + dw TileData_15db7 + dw TileData_15df2 + +TileData_15d8a: ; 0x15d8a + db $02 + dw TileData_15df2 + dw TileData_15e82 + +TileData_15d8f: ; 0x15d8f + db $03 + dw TileData_15db7 + dw TileData_15df2 + dw TileData_15e50 + +TileData_15d96: ; 0x15d96 + db $01 + dw TileData_15db7 + +TileData_15d99: ; 0x15d99 + db $01 + dw TileData_15e82 + +TileData_15d9c: ; 0x15d9c + db $02 + dw TileData_15db7 + dw TileData_15e50 + +TileData_15da1: ; 0x15da1 + db $02 + dw TileData_15dd5 + dw TileData_15e82 + +TileData_15da6: ; 0x15da6 + db $01 + dw TileData_15e50 + +TileData_15da9: ; 0x15da9 + db $02 + dw TileData_15db7 + dw TileData_15e69 + +TileData_15dae: ; 0x15dae + db $01 + dw TileData_15e69 + +TileData_15db1: ; 0x15dab1 + db $01 + dw TileData_15df2 + +TileData_15db4: ; 0x15db4 + db $01 + dw TileData_15e21 + +TileData_15db7: ; 0x15db7 + dw Func_1198 + + db ($a << 1) + db $03 + dw vBGMap + $4c + + db ($40 << 1) + db $09 + dw vBGMap + $6c + + db (($32 << 1) | 1) + db $08 + dw vBGMap + $8d + + db (4 << 1) + dw vBGMap + $ae + + db (2 << 1) + dw vBGMap + $d0 + + db (2 << 1) + dw vBGMap + $f1 + + db (2 << 1) + dw vBGMap + $111 + + db (1 << 1) + dw vBGMap + $132 + + db $00 ; terminator + +TileData_15dd5: ; 0x15dd5 + dw Func_1198 + + db ($a << 1) + db $03 + dw vBGMap + $4c + + db (($28 << 1) | 1) + db $08 + dw vBGMap + $6c + + db ($4 << 1) + dw vBGMap + $8d + + db ($04 << 1) + dw vBGMap + $ae + + db ($02 << 1) + dw vBGMap + $d0 + + db ($02 << 1) + dw vBGMap + $f1 + + db ($02 << 1) + dw vBGMap + $111 + + db (1 << 1) + dw vBGMap + $132 + + db $00 ; terminator + +TileData_15df2: ; 0x15df2 + dw LoadTileLists + db $19 ; total number of tiles + + db $05 ; number of tiles + dw vBGMap + $a9 + db $1e, $1f, $20, $21, $22 + + db $07 + dw vBGMap + $c7 + db $23, $24, $39, $3a, $25, $3b, $26 + + db $08 ; number of tiles + dw vBGMap + $e6 + db $27, $37, $28, $29, $2a, $2b, $3c, $2c + + db $03 ; number of tiles + dw vBGMap + $106 + db $2d, $38, $2e + + db $01 ; number of tiles + dw vBGMap + $10d + db $2f + + db $01 ; number of tiles + dw vBGMap + $126 + db $30 + + db 00 ; terminator + +TileData_15e21: ; 0x15e21 + dw LoadTileLists + db $19 ; total number of tiles + + db $05 ; number of tiles + dw vBGMap + $a9 + db $0b, $0c, $0d, $0e, $0f + + db $07 + dw vBGMap + $c7 + db $10, $11, $33, $34, $12, $35, $13 + + db $08 ; number of tiles + dw vBGMap + $e6 + db $14, $31, $15, $16, $17, $18, $36, $19 + + db $03 ; number of tiles + dw vBGMap + $106 + db $1a, $32, $1b + + db $01 ; number of tiles + dw vBGMap + $10d + db $1c + + db $01 ; number of tiles + dw vBGMap + $126 + db $1d + + db 00 ; terminator + +TileData_15e50: ; 0x15e50 + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $100 + db $45, $46, $22 + + db $02 ; number of tiles + dw vBGMap + $120 + db $45, $46 + + db $02 ; number of tiles + dw vBGMap + $140 + db $45, $46 + + db $02 ; number of tiles + dw vBGMap + $160 + db $45, $46 + + db $00 ; terminator + +TileData_15e69: ; 0x15e69 + dw LoadTileLists + db $09 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + $100 + db $43, $44, $22 + + db $02 ; number of tiles + dw vBGMap + $120 + db $45, $46 + + db $02 ; number of tiles + dw vBGMap + $140 + db $45, $46 + + db $02 ; number of tiles + dw vBGMap + $160 + db $45, $46 + + db $00 ; terminator + +TileData_15e82: ; 0x15e82 + dw Func_1198 + + db ((4 << 1) | 1) + db $07 + dw vBGMap + $100 + + db (($23 << 1) | 1) + db $04 + dw vBGMap + $120 + + db (2 << 1) + dw vBGMap + $140 + + db (2 << 1) + dw vBGMap + $160 + + db $00 ; terminator + +ResolveBellsproutCollision: ; 0x15e93 + ld a, [wBellsproutCollision] + and a + jr z, .asm_15eda + xor a + ld [wBellsproutCollision], a + ld bc, TenThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $05 + call PlaySoundEffect + ld hl, BellsproutAnimationData + ld de, wBellsproutAnimationFrameCounter + call CopyHLToDE + xor a + ld [wBallXVelocity], a + ld [wBallXVelocity + 1], a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + ld [wBallXPos], a + ld [wBallYPos], a + ld a, $7c + ld [wBallXPos + 1], a + ld a, $78 + ld [wBallYPos + 1], a + xor a + ld [wd549], a +.asm_15eda + ld hl, BellsproutAnimationData + ld de, wBellsproutAnimationFrameCounter + call UpdateAnimation + push af + ld a, [wBellsproutAnimationFrameCounter] + and a + jr nz, .asm_15ef8 + ld a, $19 + ld [wBellsproutAnimationFrameCounter], a + xor a + ld [wBellsproutAnimationFrame], a + ld a, $6 + ld [wBellsproutAnimationFrameIndex], a +.asm_15ef8 + pop af + ret nc + ld a, [wBellsproutAnimationFrameIndex] + cp $1 + jr nz, .asm_15f35 + xor a + ld [wd548], a + ld a, [wRightAlleyCount] + cp $2 + jr c, .noCatchEmMode + ld a, $8 + jr nz, .startCatchEmMode + xor a +.startCatchEmMode + ld [wRareMonsFlag], a + callba StartCatchEmMode +.noCatchEmMode + ld hl, wd62a + call Func_e4a + ret nc + ld c, $19 + call Func_e55 + callba z, Func_30164 + ret + +.asm_15f35 + ld a, [wBellsproutAnimationFrameIndex] + cp $4 + jr nz, .asm_15f42 + ld a, $1 + ld [wd548], a + ret + +.asm_15f42 + ld a, [wBellsproutAnimationFrameIndex] + cp $5 + ret nz + ld a, $1 + ld [wd549], a + xor a + ld [wBallXVelocity + 1], a + ld a, $2 + ld [wBallYVelocity + 1], a + lb de, $00, $06 + call PlaySoundEffect + ld a, $5 + callba Func_10000 + ret + +BellsproutAnimationData: ; 0x15f69 +; Each entry is [duration][OAM id] + db $08, $01 + db $06, $02 + db $20, $03 + db $06, $02 + db $08, $01 + db $01, $00 + db $29, $00 + db $28, $01 + db $2A, $00 + db $27, $01 + db $29, $00 + db $28, $01 + db $2B, $00 + db $28, $01 + db $00 ; terminator + +Func_15f86: ; 0x15f86 + ld a, [wWhichBumper] + and a + jr z, .asm_15f99 + call Func_5fb8 + call Func_15fa6 + xor a + ld [wWhichBumper], a + call Func_15fda +.asm_15f99 + ld a, [wd4da] + and a + ret z + dec a + ld [wd4da], a + call z, Func_5fb8 + ret + +Func_15fa6: ; 0x15fa6 + ld a, $10 + ld [wd4da], a + ld a, [wWhichBumperId] + sub $6 + ld [wd4db], a + sla a + inc a + jr asm_15fc0 + +Func_5fb8: ; 0x5fb8 + ld a, [wd4db] + cp $ff + ret z + sla a +asm_15fc0 + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_16010 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_15fd0 + ld hl, Data_16080 +.asm_15fd0 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_16010) + call Func_10aa + ret + +Func_15fda: ; 0x15fda + ld a, $ff + ld [wd803], a + ld a, $3 + ld [wd804], a + ld hl, $0200 + ld a, l + ld [wFlipperYForce], a + ld a, h + ld [wFlipperYForce + 1], a + ld a, $80 + ld [wFlipperCollision], a + ld a, [wWhichBumperId] + sub $6 + ld c, a + ld b, $0 + ld hl, CollisionAngleDeltas_1600e + add hl, bc + ld a, [wCollisionForceAngle] + add [hl] + ld [wCollisionForceAngle], a + lb de, $00, $0b + call PlaySoundEffect + ret + +CollisionAngleDeltas_1600e: + db -8, 8 + +TileDataPointers_16010: + dw TileData_16018 + dw TileData_1601b + dw TileData_1601e + dw TileData_16021 + +TileData_16018: ; 0x16018 + db $01 + dw TileData_16024 + +TileData_1601b: ; 0x1601b + db $01 + dw TileData_1603B + +TileData_1601e: ; 0x1601e + db $01 + dw TileData_16052 + +TileData_16021: ; 0x16021 + db $01 + dw TileData_16069 + +TileData_16024: ; 0x16024 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $60 + + db $02 ; number of tiles + dw vBGMap + $144 + db $61, $62 + + db $02 ; number of tiles + dw vBGMap + $164 + db $63, $64 + + db $02 ; number of tiles + dw vBGMap + $185 + db $65, $66 + + db $00 ; terminator + +TileData_1603B: ; 0x1603B + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $67 + + db $02 ; number of tiles + dw vBGMap + $144 + db $68, $69 + + db $02 ; number of tiles + dw vBGMap + $164 + db $6A, $6B + + db $02 ; number of tiles + dw vBGMap + $185 + db $6C, $6D + + db $00 ; terminator + +TileData_16052: ; 0x16052 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $6E + + db $02 ; number of tiles + dw vBGMap + $14E + db $6F, $70 + + db $02 ; number of tiles + dw vBGMap + $16E + db $71, $72 + + db $02 ; number of tiles + dw vBGMap + $18D + db $73, $74 + + db $00 ; terminator + +TileData_16069: ; 0x16069 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $75 + + db $02 ; number of tiles + dw vBGMap + $14E + db $76, $77 + + db $02 ; number of tiles + dw vBGMap + $16E + db $78, $79 + + db $02 ; number of tiles + dw vBGMap + $18D + db $7A, $7B + + db $00 ; terminator + +Data_16080: + dw Data_16088 + dw Data_1608b + dw Data_1608e + dw Data_16091 + +Data_16088: ; 0x16088 + db $01 + dw Data_16094 + +Data_1608b: ; 0x1608b + db $01 + dw Data_160ab + +Data_1608e: ; 0x1608e + db $01 + dw Data_160c2 + +Data_16091: ; 0x16091 + db $01 + dw Data_160d9 + +Data_16094: ; 0x16094 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $2A + + db $02 ; number of tiles + dw vBGMap + $144 + db $2B, $2C + + db $02 ; number of tiles + dw vBGMap + $164 + db $2D, $2E + + db $02 ; number of tiles + dw vBGMap + $185 + db $2F, $30 + + db $00 ; terminator + +Data_160ab: ; 0x160ab + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $124 + db $31 + + db $02 ; number of tiles + dw vBGMap + $144 + db $32, $33 + + db $02 ; number of tiles + dw vBGMap + $164 + db $34, $35 + + db $02 ; number of tiles + dw vBGMap + $185 + db $36, $37 + + db $00 ; terminator + +Data_160c2: ; 0x160c2 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $2A + + db $02 ; number of tiles + dw vBGMap + $14E + db $2C, $2B + + db $02 ; number of tiles + dw vBGMap + $16E + db $2E, $2D + + db $02 ; number of tiles + dw vBGMap + $18D + db $30, $2F + + db $00 ; terminator + +Data_160d9: ; 0x160d9 + dw LoadTileLists + db $07 ; total number of tiles + + db $01 ; number of tiles + dw vBGMap + $12F + db $31 + + db $02 ; number of tiles + dw vBGMap + $14E + db $33, $32 + + db $02 ; number of tiles + dw vBGMap + $16E + db $35, $34 + + db $02 ; number of tiles + dw vBGMap + $18D + db $37, $36 + + db $00 ; terminator + +ResolveDittoSlotCollision: ; 0x160f0 + ld a, [wDittoSlotCollision] + and a + jr z, .asm_16137 + xor a + ld [wDittoSlotCollision], a + ld bc, TenThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + lb de, $00, $21 + call PlaySoundEffect + xor a + ld hl, wBallXVelocity + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [wd549], a + ld [wBallXPos], a + ld [wBallYPos], a + ld a, $11 + ld [wBallXPos + 1], a + ld a, $23 + ld [wBallYPos + 1], a + ld a, $10 + ld [wd600], a + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a +.asm_16137 + ld a, [wd600] + and a + ret z + dec a + ld [wd600], a + cp $f + jr nz, .asm_1614f + callba LoadMiniBallGfx + ret + +.asm_1614f + cp $c + jr nz, .asm_1615e + callba Func_dd62 + ret + +.asm_1615e + cp $9 + jr nz, .asm_1616d + xor a + ld [wd548], a + ld [wBallSpin], a + ld [wBallRotation], a + ret + +.asm_1616d + cp $6 + jr nz, .asm_1618e + callba Func_10ab3 + ld a, $1 + ld [wd548], a + ld [wd549], a + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + ret + +.asm_1618e + cp $3 + jr nz, .asm_1619d + callba LoadMiniBallGfx + ret + +.asm_1619d + and a + ret nz + callba LoadBallGfx + ld a, $2 + ld [wBallYVelocity + 1], a + ret + +Func_161af: ; 0x161af + ld a, [wd604] + and a + ret z + ld a, [wBallYPos + 1] + sub $fe + cp $30 + ret nc + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, a + ld b, $0 + sla c + sla c + add hl, bc + jr asm_1620f + +Func_161e0: ; 0x161e0 + ld a, [wd604] + and a + ret z + ld a, [wBallYPos + 1] + sub $86 + cp $30 + ret nc + ld c, $0 + ld b, a + ld h, b + ld l, c + srl b + rr c + srl b + rr c + srl h + rr l + add hl, bc + ld a, [wBallXPos + 1] + sub $38 + cp $30 + ret nc + ld c, a + ld b, $0 + sla c + sla c + add hl, bc +asm_1620f: ; 0x1620f + ld bc, BallPhysicsData_f0000 + add hl, bc + ld de, wBallXVelocity + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + push bc + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld c, a + ld a, [de] + add c + ld [de], a + inc de + inc hl + ld a, BANK(BallPhysicsData_f0000) + call ReadByteFromBank + ld b, a + ld a, [de] + adc b + ld [de], a + inc de + inc hl + bit 7, b + jr z, .asm_1624e + ld a, c + cpl + ld c, a + ld a, b + cpl + ld b, a + inc bc +.asm_1624e + pop hl + bit 7, h + jr z, .asm_1625a + ld a, l + cpl + ld l, a + ld a, h + cpl + ld h, a + inc hl +.asm_1625a + add hl, bc + sla l + rl h + ld a, h + cp $2 + ret c + ld a, [wd804] + and a + ret nz + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + lb de, $00, $04 + call PlaySoundEffect + ret + +Func_16279: ; 0x16279 + ld a, [wSlotCollision] + and a + jr z, .asm_162ae + xor a + ld [wSlotCollision], a + ld a, [wd604] + and a + ret z + ld a, [wd603] + and a + jr nz, .asm_162ae + xor a + ld hl, wBallXVelocity + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [wd549], a + ld [wBallXPos], a + ld [wBallYPos], a + ld a, $50 + ld [wBallXPos + 1], a + ld a, $16 + ld [wBallYPos + 1], a + ld a, $13 + ld [wd603], a +.asm_162ae + ld a, [wd603] + and a + ret z + dec a + ld [wd603], a + ld a, $18 + ld [wd606], a + ld a, [wd603] + cp $12 + jr nz, .asm_162d4 + lb de, $00, $21 + call PlaySoundEffect + callba LoadMiniBallGfx + ret + +.asm_162d4 + cp $f + jr nz, .asm_162e3 + callba Func_dd62 + ret + +.asm_162e3 + cp $c + jr nz, .asm_162f2 + xor a + ld [wd548], a + ld [wBallSpin], a + ld [wBallRotation], a + ret + +.asm_162f2 + cp $9 + jr nz, .asm_162fa + call Func_16352 + ret + +.asm_162fa + cp $6 + jr nz, .asm_16317 + xor a + ld [wd604], a + ld a, $5 + ld [wd803], a + ld a, $8 + ld [wd804], a + callba LoadMiniBallGfx + ret + +.asm_16317 + cp $3 + jr nz, .asm_16330 + callba LoadBallGfx + ld a, $2 + ld [wBallYVelocity + 1], a + ld a, $80 + ld [wBallXVelocity], a + ret + +.asm_16330 + and a + ret nz + call Func_16425 + ld a, [wCatchEmOrEvolutionSlotRewardActive] + cp CATCHEM_MODE_SLOT_REWARD + ret nz + call GenRandom + and $8 + ld [wRareMonsFlag], a + callba StartCatchEmMode + xor a + ld [wCatchEmOrEvolutionSlotRewardActive], a + ret + +Func_16352: ; 0x16352 + xor a + ld [wIndicatorStates + 4], a + ld a, $d + callba Func_10000 + jr nc, .asm_1636d + ld a, $1 + ld [wd548], a + ld [wd549], a + ret + +.asm_1636d + ld a, [wd624] + cp $3 + jr nz, .asm_163b3 + ld a, [wd607] + and a + jr nz, .asm_163b3 +.asm_1637a + ld a, [wBonusStageSlotRewardActive] + and a + jr nz, .asm_16389 + xor a + ld [wd625], a + ld a, $40 + ld [wd626], a +.asm_16389 + xor a + ld [wBonusStageSlotRewardActive], a + ld a, $1 + ld [wd495], a + ld [wd4ae], a + ld a, [wd498] + ld c, a + ld b, $0 + ld hl, GoToBonusStageTextIds_RedField + add hl, bc + ld a, [hl] + ld [wd497], a + call Func_163f2 + xor a + ld [wd609], a + ld [wCatchEmOrEvolutionSlotRewardActive], a + ld a, $1e + ld [wd607], a + ret + +.asm_163b3 + callba Func_ed8e + xor a + ld [wd608], a + ld a, [wd61d] + cp $d + jr nc, .asm_1637a + ld a, $1 + ld [wd548], a + ld [wd549], a + ld a, [wCatchEmOrEvolutionSlotRewardActive] + cp EVOLUTION_MODE_SLOT_REWARD + ret nz + callba Func_10ab3 + ld a, [wd7ad] + ld c, a + ld a, [wStageCollisionState] + and $1 + or c + ld [wStageCollisionState], a + xor a + ld [wCatchEmOrEvolutionSlotRewardActive], a + ret + +Func_163f2: ; 0x163f2 + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5dc + ld a, [wd497] + ld de, GoToDiglettStageText + cp STAGE_DIGLETT_BONUS + jr z, .asm_1640f + ld de, GoToGengarStageText + cp STAGE_GENGAR_BONUS + jr z, .asm_1640f + ld de, GoToMewtwoStageText +.asm_1640f + call LoadTextHeader + ld de, $0000 + call PlaySong + rst AdvanceFrame + lb de, $3c, $23 + call PlaySoundEffect + ret + +GoToBonusStageTextIds_RedField: + db STAGE_GENGAR_BONUS + db STAGE_MEWTWO_BONUS + db STAGE_MEOWTH_BONUS + db STAGE_DIGLETT_BONUS + db STAGE_SEEL_BONUS + +Func_16425: ; 0x16425 + ld a, [wCurrentStage] + and $1 + sla a + ld c, a + ld a, [wd604] + add c + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1644d + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_16441 + ld hl, TileDataPointers_164a1 +.asm_16441 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_1644d) + call Func_10aa + ret + +TileDataPointers_1644d: + dw TileData_16455 + dw TileData_16458 + dw TileData_1645b + dw TileData_16460 + +TileData_16455: ; 0x16455 + db $01 + dw TileData_16465 + +TileData_16458: ; 0x16458 + db $01 + dw TileData_1646f + +TileData_1645b: ; 0x1645b + db $02 + dw TileData_16479 + dw TileData_16483 + +TileData_16460: ; 0x16460 + db $02 + dw TileData_1648D + dw TileData_16497 + +TileData_16465: ; 0x16465 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldTopBaseGameBoyGfx + $1c0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_1646f: ; 0x1646f + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $340 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16479: ; 0x16479 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $48 + dw StageRedFieldBottomBaseGameBoyGfx + $c80 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16483: ; 0x16483 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $4A + dw StageRedFieldBottomBaseGameBoyGfx + $CA0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_1648D: ; 0x1648D + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $340 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16497: ; 0x16497 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $4A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $360 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileDataPointers_164a1: + dw TileData_164a9 + dw TileData_164ac + dw TileData_164af + dw TileData_164b2 + +TileData_164a9: ; 0x164a9 + db $01 + dw TileData_164b5 + +TileData_164ac: ; 0x164ac + db $01 + dw TileData_164be + +TileData_164af: ; 0x164af + db $01 + dw TileData_164c7 + +TileData_164b2: ; 0x164b2 + db $01 + dw TileData_164d5 + +TileData_164b5: ; 0x164b5 + dw LoadTileLists + db $02 + + db $02 + dw vBGMap + $229 + db $d4, $d5 + + db $00 + +TileData_164be: ; 0x164be + dw LoadTileLists + db $02 + + db $02 + + dw vBGMap + $229 + db $d6, $d7 + + db $00 + +TileData_164c7: ; 0x164c7 + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $9 + db $38, $39 + + db $02 + dw vBGMap + $29 + db $3a, $3b + + db $00 + +TileData_164d5: ; 0x164d5 + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $9 + db $3c, $3d + + db $02 + dw vBGMap + $29 + db $3e, $3f + + db $00 + +Func_164e3: ; 0x164e3 + ld a, [wd607] + and a + ret z + dec a + ld [wd607], a + ret nz + ld a, [wInSpecialMode] + and a + ret nz + ld a, [wd609] + and a + jr z, .asm_164ff + ld a, [wd498] + add $15 + jr .asm_16506 + +.asm_164ff + ld a, [wd608] + and a + ret z + ld a, $1a +.asm_16506 + ld hl, wCurrentStage + bit 0, [hl] + callba nz, Func_30256 + ld a, [wd604] + and a + ret nz + ld a, $1 + ld [wd604], a + ld a, $80 + ld [wIndicatorStates + 4], a + ld a, [wCurrentStage] + bit 0, a + call nz, Func_16425 + ret + +Func_1652d: ; 0x1652d + ld a, [wPinballLaunchAlley] + and a + ret z + xor a + ld [wPinballLaunchAlley], a + ld a, [wd4de] + and a + jr z, .asm_16566 + xor a + ld [wRightAlleyTrigger], a + ld [wLeftAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld hl, wBallXVelocity + ld [hli], a + ld [hl], a + ld [wBallSpin], a + ld [wBallRotation], a + ld a, $80 + ld [wBallYVelocity], a + ld a, $fa + ld [wBallYVelocity + 1], a + ld a, $1 + ld [wd549], a + lb de, $00, $0a + call PlaySoundEffect +.asm_16566 + ld a, $ff + ld [wPreviousTriggeredGameObject], a + ld a, [wd4de] + and a + ret nz + ld a, [wd4e0] + and a + jr nz, .asm_16582 + call Func_1658f + ld a, $1 + ld [wd4e0], a + ld [wd4de], a + ret + +.asm_16582 + ld hl, wKeyConfigBallStart + call IsKeyPressed + ret z + ld a, $1 + ld [wd4de], a + ret + +Func_1658f: ; 0x1658f + ld a, [hGameBoyColorFlag] + and a + callba nz, LoadGreyBillboardPaletteData +.showNextMap + ld a, [wInitialMapSelectionIndex] + inc a + cp $7 ; number of maps to choose from at the start of play + jr c, .gotMapId + xor a ; wrap around to 0 +.gotMapId + ld [wInitialMapSelectionIndex], a + ld c, a + ld b, $0 + ld hl, RedStageInitialMaps + add hl, bc + ld a, [hl] + ld [wCurrentMap], a + push af + lb de, $00, $48 + call PlaySoundEffect + pop af + add (PalletTownPic_Pointer - BillboardPicturePointers) / 3 ; map billboard pictures start at the $29th entry in BillboardPicturePointers + callba LoadBillboardPicture + ld b, $20 ; number of frames to delay before the next map is shown +.waitOnCurrentMap + push bc + callba Func_eeee + ld hl, wKeyConfigBallStart + call IsKeyPressed + jr nz, .ballStartKeyPressed + pop bc + dec b + jr nz, .waitOnCurrentMap + jr .showNextMap + +.ballStartKeyPressed + pop bc + callba Func_30253 + ld bc, StartFromMapText + callba Func_3118f + ld a, [wCurrentMap] + ld [wd4e3], a + xor a + ld [wd4e2], a + ret + +RedStageInitialMaps: ; 0x16605 + db PALLET_TOWN + db VIRIDIAN_FOREST + db PEWTER_CITY + db CERULEAN_CITY + db VERMILION_SEASIDE + db ROCK_MOUNTAIN + db LAVENDER_TOWN + +ResolveRedStagePikachuCollision: ; 0x1660c + ld a, [wWhichPikachu] + and a + jr z, .asm_1667b + xor a + ld [wWhichPikachu], a + ld a, [wd51c] + and a + jr nz, .asm_1667b + ld a, [wPikachuSaverSlotRewardActive] + and a + jr nz, .asm_16634 + ld a, [wWhichPikachuId] + sub $1c + ld hl, wd518 + cp [hl] + jr nz, .asm_1667b + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + jr nz, .asm_16667 +.asm_16634 + ld hl, PikachuSaverAnimationDataBlueStage + ld de, wPikachuSaverAnimationFrameCounter + call CopyHLToDE + ld a, [wPikachuSaverSlotRewardActive] + and a + jr nz, .asm_16647 + xor a + ld [wPikachuSaverCharge], a +.asm_16647 + ld a, $1 + ld [wd51c], a + xor a + ld [wBallXVelocity], a + ld [wBallXVelocity + 1], a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + ld [wBallSpin], a + ld [wBallRotation], a + ld [wd549], a + call FillBottomMessageBufferWithBlackTile + jr .asm_1667b + +.asm_16667 + ld hl, PikachuSaverAnimation2DataBlueStage + ld de, wPikachuSaverAnimationFrameCounter + call CopyHLToDE + ld a, $2 + ld [wd51c], a + lb de, $00, $3b + call PlaySoundEffect +.asm_1667b + ld a, [wd51c] + and a + call z, Func_16766 + call Func_1669e + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + ret nz + ld a, [wd51e] + and a + ret z + dec a + ld [wd51e], a + cp $5a + ret nz + lb de, $0f, $22 + call PlaySoundEffect + ret + +Func_1669e: ; 0x1669e + ld a, [wd51c] + cp $1 + jr nz, .asm_16719 + ld hl, PikachuSaverAnimationDataBlueStage + ld de, wPikachuSaverAnimationFrameCounter + call UpdateAnimation + ret nc + ld a, [wPikachuSaverAnimationFrameIndex] + cp $1 + jr nz, .asm_166f7 + xor a + ld [wd85d], a + call Func_310a + rst AdvanceFrame + ld a, $1 + callba PlayPikachuSoundClip + ld a, $1 + ld [wd85d], a + ld a, $ff + ld [wd803], a + ld a, $60 + ld [wd804], a + ld hl, wd62e + call Func_e4a + jr nc, .asm_166f0 + ld c, $a + call Func_e55 + callba z, Func_30164 +.asm_166f0 + lb de, $16, $10 + call PlaySoundEffect + ret + +.asm_166f7 + ld a, [wPikachuSaverAnimationFrameIndex] + cp $11 + ret nz + ld a, $fc + ld [wBallYVelocity + 1], a + ld a, $1 + ld [wd549], a + ld bc, FiveThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + xor a + ld [wd51c], a + ret + +.asm_16719 + cp $2 + jr nz, .asm_16732 + ld hl, PikachuSaverAnimation2DataBlueStage + ld de, wPikachuSaverAnimationFrameCounter + call UpdateAnimation + ret nc + ld a, [wPikachuSaverAnimationFrameIndex] + cp $1 + ret nz + xor a + ld [wd51c], a + ret + +.asm_16732 + ld a, [hNumFramesDropped] + swap a + and $1 + ld [wPikachuSaverAnimationFrame], a + ret + +PikachuSaverAnimationDataBlueStage: ; 0x1673c +; Each entry is [duration][OAM id] + db $0C, $02 + db $05, $03 + db $05, $02 + db $05, $04 + db $05, $05 + db $05, $02 + db $06, $06 + db $06, $07 + db $06, $08 + db $06, $02 + db $06, $05 + db $06, $08 + db $06, $07 + db $06, $02 + db $06, $08 + db $06, $07 + db $06, $02 + db $01, $00 + db $00 + +PikachuSaverAnimation2DataBlueStage: ; 0x16761 +; Each entry is [duration][OAM id] + db $0C, $02 + db $01, $00 + db $00 + +Func_16766: ; 0x16766 + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed2 + jr z, .asm_16774 + ld hl, wd518 + ld [hl], $0 + ret + +.asm_16774 + ld hl, wKeyConfigRightFlipper + call IsKeyPressed2 + ret z + ld hl, wd518 + ld [hl], $1 + ret + +ResolveStaryuCollision: ; 0x16781 + ld a, [wStaryuCollision] + and a + jr z, .asm_167bd + xor a + ld [wStaryuCollision], a + ld a, [wd503] + and a + jr nz, .asm_167c2 + ld bc, FiveThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wd502] + xor $1 + set 1, a + ld [wd502], a + ld a, $14 + ld [wd503], a + call Func_16859 + ld a, $6 + callba Func_10000 + ret + +.asm_167bd + ld a, [wd503] + and a + ret z +.asm_167c2 + dec a + ld [wd503], a + ret nz + ld a, [wd502] + res 1, a + ld [wd502], a + call Func_16859 + ld a, [wd502] + and $1 + ld c, a + ld a, [wStageCollisionState] + and $fe + or c + ld [wStageCollisionState], a + callba LoadStageCollisionAttributes + call Func_159f4 + lb de, $00, $07 + call PlaySoundEffect + ld a, [wStageCollisionState] + bit 0, a + jp nz, Func_15450 + jp Func_15499 + +Func_167ff: ; 0x167ff + ld a, [wStaryuCollision] + and a + jr z, .asm_16839 + xor a + ld [wStaryuCollision], a + ld a, [wd503] + and a + jr nz, .asm_1683e + ld bc, FiveThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wd502] + xor $1 + ld [wd502], a + ld a, $14 + ld [wd503], a + call Func_16878 + ld a, $6 + callba Func_10000 + ret + +.asm_16839 + ld a, [wd503] + and a + ret z +.asm_1683e + dec a + ld [wd503], a + ret nz + ld a, [wd502] + and $1 + ld c, a + ld a, [wStageCollisionState] + and $fe + or c + ld [wStageCollisionState], a + lb de, $00, $07 + call PlaySoundEffect + ret + +Func_16859: ; 0x16859 + ld a, [wd502] + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_16899 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1686c + ld hl, TileDataPointers_16910 +.asm_1686c + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_16899) + call Func_10aa + ret + +Func_16878: ; 0x16878 + ld a, [wd502] + and $1 + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_1695a + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_1688d + ld hl, TileDataPointers_16980 +.asm_1688d + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, Bank(TileDataPointers_1695a) + call Func_10aa + ret + +TileDataPointers_16899: + dw TileData_168a1 + dw TileData_168a8 + dw TileData_168af + dw TileData_168af + +TileData_168a1: ; 0x168a1 + db $03 + dw TileData_168b6 + dw TileData_168c0 + dw TileData_168ca + +TileData_168a8: ; 0x168a8 + db $03 + dw TileData_168d4 + dw TileData_168de + dw TileData_168e8 + +TileData_168af: ; 0x168af + db $03 + dw TileData_168f2 + dw TileData_168fc + dw TileData_16906 + +TileData_168b6: ; 0x168b6 + dw Func_11d2 + db $30, $03 + dw vTilesSH tile $50 + dw StageRedFieldTopBaseGameBoyGfx + $260 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_168c0: ; 0x168c0 + dw Func_11d2 + db $30, $03 + dw vTilesSH tile $53 + dw StageRedFieldTopBaseGameBoyGfx + $290 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_168ca: ; 0x168ca + dw Func_11d2 + db $10, $01 + dw vTilesSH tile $56 + dw StageRedFieldTopBaseGameBoyGfx + $2c0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_168d4: ; 0x168d4 + dw Func_11d2 + db $30, $03 + dw vTilesSH tile $52 + dw StageRedFieldTopBaseGameBoyGfx + $280 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_168de: ; 0x168de + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $55 + dw StageRedFieldTopBaseGameBoyGfx + $2b0 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileData_168e8: ; 0x168e8 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $50 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $EA0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_168f2: ; 0x168f2 + dw Func_11d2 + db $30, $03 + dw vTilesSH tile $51 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $10E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_168fc: ; 0x168fc + dw Func_11d2 + db $30, $03 + dw vTilesSH tile $54 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1110 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16906: ; 0x16906 + dw Func_11d2 + db $10, $01 + dw vTilesSH tile $50 + dw StageRedFieldTopBaseGameBoyGfx + $260 + db Bank(StageRedFieldTopBaseGameBoyGfx) + db $00 + +TileDataPointers_16910: + dw TileData_16918 + dw TileData_1691b + dw TileData_1691e + dw TileData_1691e + +TileData_16918: ;0x16918 + db $01 + dw TileData_16921 + +TileData_1691b: ;0x1691b + db $01 + dw TileData_16934 + +TileData_1691e: ;0x1691e + db $01 + dw TileData_16947 + +TileData_16921: ; 0x16921 + dw LoadTileLists + db $06 + + db $03 + dw vBGMap + $1C6 + db $C3, $C4, $C5 + + db $02 + dw vBGMap + $1E7 + db $C6, $C7 + + db $01 + dw vBGMap + $207 + db $C8 + + db $00 + +TileData_16934: ; 0x16934 + dw LoadTileLists + db $06 + + db $03 + dw vBGMap + $1C6 + db $CD, $CE, $C5 + + db $02 + dw vBGMap + $1E7 + db $C6, $C7 + + db $01 + dw vBGMap + $207 + db $C8 + + db $00 + +TileData_16947: ; 0x16947 + dw LoadTileLists + db $06 + + db $03 + dw vBGMap + $1C6 + db $C3, $C4, $C9 + + db $02 + dw vBGMap + $1E7 + db $CA, $CB + + db $01 + dw vBGMap + $207 + db $CC + + db $00 + +TileDataPointers_1695a: + dw TileData_1695e + dw TileData_16961 + +TileData_1695e: ; 0x1695e + db $01 + dw TileData_16964 + +TileData_16961: ; 0x16961 + db $01 + dw TileData_16972 + +TileData_16964: ; 0x16964 + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $40 + db $BE, $BF + + db $02 + dw vBGMap + $60 + db $C0, $C1 + + db $00 + +TileData_16972: ; 0x16972 + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $40 + db $C2, $C3 + + db $02 + dw vBGMap + $60 + db $C4, $C5 + + db $00 + +TileDataPointers_16980: + dw TileData_16984 + dw TileData_16987 + +TileData_16984: ; 0x16984 + db $01 + dw TileData_1698a + +TileData_16987: ; 0x16987 + db $01 + dw TileData_16998 + +TileData_1698a: ; 0x1698a + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $40 + db $BC, $BD + + db $02 + dw vBGMap + $60 + db $BE, $BF + + db $00 + +TileData_16998: ; 0x16998 + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $40 + db $C0, $C1 + + db $02 + dw vBGMap + $60 + db $C2, $C3 + + db $00 + +Func_169a6: ; 0x169a6 + ld a, [hNumFramesDropped] + and $1f + ret nz + ld bc, $0000 +.asm_169ae + push bc + ld hl, wIndicatorStates + add hl, bc + bit 7, [hl] + jr z, .asm_169c5 + ld a, [hl] + res 7, a + ld hl, hNumFramesDropped + bit 5, [hl] + jr z, .asm_169c2 + inc a +.asm_169c2 + call Func_169cd +.asm_169c5 + pop bc + inc c + ld a, c + cp $5 + jr nz, .asm_169ae + ret + +Func_169cd: ; 0x169cd + push af + sla c + ld hl, TileDataPointers_169ed + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_169db + ld hl, TileDataPointers_16bef +.asm_169db + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + pop af + sla a + ld c, a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_169ed) + call Func_10aa + ret + +TileDataPointers_169ed: + dw TileDataPointers_169f7 + dw TileDataPointers_16a01 + dw TileDataPointers_16a0b + dw TileDataPointers_16a0f + dw TileDataPointers_16a13 + +TileDataPointers_169f7: ; 0x169f7 + dw TileData_16a17 + dw TileData_16a1e + dw TileData_16a25 + dw TileData_16a2c + dw TileData_16a33 + +TileDataPointers_16a01: ; 0x16a01 + dw TileData_16a3a + dw TileData_16a41 + dw TileData_16a48 + dw TileData_16a4f + dw TileData_16a56 + +TileDataPointers_16a0b: ; 0x16a0b + dw TileData_16a5d + dw TileData_16a60 + +TileDataPointers_16a0f: ; 0x16a0f + dw TileData_16a63 + dw TileData_16a66 + +TileDataPointers_16a13: ; 0x16a13 + dw TileData_16a69 + dw TileData_16a6e + +TileData_16a17: ; 0x16a17 + db $03 + dw TileData_16a73 + dw TileData_16a7d + dw TileData_16a87 + +TileData_16a1e: ; 0x16a1e + db $03 + dw TileData_16a91 + dw TileData_16a9b + dw TileData_16aa5 + +TileData_16a25: ; 0x16a25 + db $03 + dw TileData_16aaf + dw TileData_16ab9 + dw TileData_16ac3 + +TileData_16a2c: ; 0x16a2c + db $03 + dw TileData_16acd + dw TileData_16ad7 + dw TileData_16ae1 + +TileData_16a33: ; 0x16a33 + db $03 + dw TileData_16aeb + dw TileData_16af5 + dw TileData_16aff + +TileData_16a3a: ; 0x16a3a + db $03 + dw TileData_16b09 + dw TileData_16b13 + dw TileData_16b1d + +TileData_16a41: ; 0x16a41 + db $03 + dw TileData_16b27 + dw TileData_16b31 + dw TileData_16b3b + +TileData_16a48: ; 0x16a48 + db $03 + dw TileData_16b45 + dw TileData_16b4f + dw TileData_16b59 + +TileData_16a4f: ; 0x16a4f + db $03 + dw TileData_16b63 + dw TileData_16b6d + dw TileData_16b77 + +TileData_16a56: ; 0x16a56 + db $03 + dw TileData_16b81 + dw TileData_16b8b + dw TileData_16b95 + +TileData_16a5d: ; 0x16a5d + db $01 + dw TileData_16b9f + +TileData_16a60: ; 0x16a60 + db $01 + dw TileData_16ba9 + +TileData_16a63: ; 0x16a63 + db $01 + dw TileData_16bb3 + +TileData_16a66: ; 0x16a66 + db $01 + dw TileData_16bbd + +TileData_16a69: ; 0x16a69 + db $02 + dw TileData_16bc7 + dw TileData_16bd1 + +TileData_16a6e: ; 0x16a6e + db $02 + dw TileData_16bdb + dw TileData_16be5 + +TileData_16a73: ; 0x16a73 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3A + dw StageRedFieldBottomBaseGameBoyGfx + $ba0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16a7d: ; 0x16a7d + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3D + dw StageRedFieldBottomBaseGameBoyGfx + $bd0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16a87: ; 0x16a87 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $40 + dw StageRedFieldBottomBaseGameBoyGfx + $c00 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16a91: ; 0x16a91 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $380 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16a9b: ; 0x16a9b + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $3B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16aa5: ; 0x16aa5 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $40 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $3E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16aaf: ; 0x16aaf + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $3F0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16ab9: ; 0x16ab9 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $420 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16ac3: ; 0x16ac3 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $40 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $450 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16acd: ; 0x16acd + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $460 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16ad7: ; 0x16ad7 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $490 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16ae1: ; 0x16ae1 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $40 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $4C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16aeb: ; 0x16aeb + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3A + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $F30 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16af5: ; 0x16af5 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $3D + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $F60 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16aff: ; 0x16aff + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $40 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $F90 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b09: ; 0x16b09 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomBaseGameBoyGfx + $c10 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16b13: ; 0x16b13 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomBaseGameBoyGfx + $c40 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16b1d: ; 0x16b1d + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $47 + dw StageRedFieldBottomBaseGameBoyGfx + $c70 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16b27: ; 0x16b27 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $4D0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b31: ; 0x16b31 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $500 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b3b: ; 0x16b3b + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $530 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b45: ; 0x16b45 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $540 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b4f: ; 0x16b4f + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $570 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b59: ; 0x16b59 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $5A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b63: ; 0x16b63 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $5B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b6d: ; 0x16b6d + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $5E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b77: ; 0x16b77 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $610 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b81: ; 0x16b81 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $41 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1010 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b8b: ; 0x16b8b + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $44 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1040 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b95: ; 0x16b95 + dw Func_11d2 + db $10, $01 + dw vTilesBG tile $47 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1070 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16b9f: ; 0x16b9f + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $20 + dw StageRedFieldBottomBaseGameBoyGfx + $a00 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16ba9: ; 0x16ba9 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $20 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1080 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16bb3: ; 0x16bb3 + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $23 + dw StageRedFieldBottomBaseGameBoyGfx + $a30 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16bbd: ; 0x16bbd + dw Func_11d2 + db $30, $03 + dw vTilesBG tile $23 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $10B0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16bc7: ; 0x16bc7 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1C + dw StageRedFieldBottomBaseGameBoyGfx + $9c0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16bd1: ; 0x16bd1 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1E + dw StageRedFieldBottomBaseGameBoyGfx + $9e0 + db Bank(StageRedFieldBottomBaseGameBoyGfx) + db $00 + +TileData_16bdb: ; 0x16bdb + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1C + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $6E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_16be5: ; 0x16be5 + dw Func_11d2 + db $20, $02 + dw vTilesBG tile $1E + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $700 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileDataPointers_16bef: + dw TileDataPointers_16bf9 + dw TileDataPointers_16c03 + dw TileDataPointers_16c0d + dw TileDataPointers_16c11 + dw TileDataPointers_16c15 + +TileDataPointers_16bf9: ; 0x16bf9 + dw TileData_16c19 + dw TileData_16c1c + dw TileData_16c1f + dw TileData_16c22 + dw TileData_16c25 + +TileDataPointers_16c03: ; 0x16c03 + dw TileData_16c28 + dw TileData_16c2b + dw TileData_16c2e + dw TileData_16c31 + dw TileData_16c34 + +TileDataPointers_16c0d: ; 0x16c0d + dw TileData_16c37 + dw TileData_16c3a + +TileDataPointers_16c11: ; 0x16c11 + dw TileData_16c3d + dw TileData_16c40 + +TileDataPointers_16c15: ; 0x16c15 + dw TileData_16c43 + dw TileData_16c46 + +TileData_16c19: ; 0x16c19 + db $01 + dw TileData_16c49 + +TileData_16c1c: ; 0x16c1c + db $01 + dw TileData_16c63 + +TileData_16c1f: ; 0x16c1f + db $01 + dw TileData_16c7d + +TileData_16c22: ; 0x16c22 + db $01 + dw TileData_16c97 + +TileData_16c25: ; 0x16c25 + db $01 + dw TileData_16cb1 + +TileData_16c28: ; 0x16c28 + db $01 + dw TileData_16ccb + +TileData_16c2b: ; 0x16c2b + db $01 + dw TileData_16ce5 + +TileData_16c2e: ; 0x16c2e + db $01 + dw TileData_16cff + +TileData_16c31: ; 0x16c31 + db $01 + dw TileData_16d19 + +TileData_16c34: ; 0x16c34 + db $01 + dw TileData_16d33 + +TileData_16c37: ; 0x16c37 + db $01 + dw TileData_16d4d + +TileData_16c3a: ; 0x16c3a + db $01 + dw TileData_16d5a + +TileData_16c3d: ; 0x16c3d + db $01 + dw TileData_16d67 + +TileData_16c40: ; 0x16c40 + db $01 + dw TileData_16d74 + +TileData_16c43: ; 0x16c43 + db $01 + dw TileData_16d81 + +TileData_16c46: ; 0x16c46 + db $01 + dw TileData_16d8f + +TileData_16c49: ; 0x16c49 + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $23 + db $5E + + db $02 + dw vBGMap + $43 + db $5F, $60 + + db $02 + dw vBGMap + $64 + db $61, $62 + + db $01 + dw vBGMap + $85 + db $63 + + db $01 + dw vBGMap + $A5 + db $64 + + db $00 + +TileData_16c63: ; 0x16c63 + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $23 + db $65 + + db $02 + dw vBGMap + $43 + db $66, $67 + + db $02 + dw vBGMap + $64 + db $61, $62 + + db $01 + dw vBGMap + $85 + db $63 + + db $01 + dw vBGMap + $A5 + db $64 + + db $00 + +TileData_16c7d: ; 0x16c7d + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $23 + db $65 + + db $02 + dw vBGMap + $43 + db $66, $67 + + db $02 + dw vBGMap + $64 + db $68, $69 + + db $01 + dw vBGMap + $85 + db $63 + + db $01 + dw vBGMap + $A5 + db $64 + + db $00 + +TileData_16c97: ; 0x16c97 + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $23 + db $65 + + db $02 + dw vBGMap + $43 + db $66, $67 + + db $02 + dw vBGMap + $64 + db $68, $69 + + db $01 + dw vBGMap + $85 + db $6A + + db $01 + dw vBGMap + $A5 + db $6B + + db $00 + +TileData_16cb1: ; 0x16cb1 + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $23 + db $5E + + db $02 + dw vBGMap + $43 + db $5F, $60 + + db $02 + dw vBGMap + $64 + db $68, $69 + + db $01 + dw vBGMap + $85 + db $6A + + db $01 + dw vBGMap + $A5 + db $6B + + db $00 + +TileData_16ccb: ; 0x16ccb + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $30 + db $6C + + db $02 + dw vBGMap + $4F + db $6D, $6E + + db $02 + dw vBGMap + $6E + db $6F, $70 + + db $01 + dw vBGMap + $8E + db $71 + + db $01 + dw vBGMap + $AE + db $72 + + db $00 + +TileData_16ce5: ; 0x16ce5 + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $30 + db $73 + + db $02 + dw vBGMap + $4F + db $74, $75 + + db $02 + dw vBGMap + $6E + db $6F, $70 + + db $01 + dw vBGMap + $8E + db $71 + + db $01 + dw vBGMap + $AE + db $72 + + db $00 + +TileData_16cff: ; 0x16cff + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $30 + db $73 + + db $02 + dw vBGMap + $4F + db $74, $75 + + db $02 + dw vBGMap + $6E + db $76, $77 + + db $01 + dw vBGMap + $8E + db $71 + + db $01 + dw vBGMap + $AE + db $72 + + db $00 + +TileData_16d19: ; 0x16d19 + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $30 + db $73 + + db $02 + dw vBGMap + $4F + db $74, $75 + + db $02 + dw vBGMap + $6E + db $76, $77 + + db $01 + dw vBGMap + $8E + db $78 + + db $01 + dw vBGMap + $AE + db $79 + + db $00 + +TileData_16d33: ; 0x16d33 + dw LoadTileLists + db $07 + + db $01 + dw vBGMap + $30 + db $6C + + db $02 + dw vBGMap + $4F + db $6D, $6E + + db $02 + dw vBGMap + $6E + db $76, $77 + + db $01 + dw vBGMap + $8E + db $78 + + db $01 + dw vBGMap + $AE + db $79 + + db $00 + +TileData_16d4d: ; 0x16d4d + dw LoadTileLists + db $03 + + db $01 + dw vBGMap + $6 + db $48 + + db $02 + dw vBGMap + $26 + db $49, $4A + + db $00 + +TileData_16d5a: ; 0x16d5a + dw LoadTileLists + db $03 + + db $01 + dw vBGMap + $6 + db $4B + + db $02 + dw vBGMap + $26 + db $4C, $4D + + db $00 + +TileData_16d67: ; 0x16d67 + dw LoadTileLists + db $03 + + db $01 + dw vBGMap + $D + db $4E + + db $02 + dw vBGMap + $2C + db $4F, $50 + + db $00 + +TileData_16d74: ; 0x16d74 + dw LoadTileLists + db $03 + + db $01 + dw vBGMap + $D + db $51 + + db $02 + dw vBGMap + $2C + db $52, $53 + + db $00 + +TileData_16d81: ; 0x16d81 + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $49 + db $40, $41 + + db $02 + dw vBGMap + $69 + db $42, $43 + + db $00 + +TileData_16d8f: ; 0x16d8f + dw LoadTileLists + db $04 + + db $02 + dw vBGMap + $49 + db $44, $45 + + db $02 + dw vBGMap + $69 + db $46, $47 + + db $00 + +ResolveRedStageBonusMultiplierCollision: ; 016d9d + ld a, [wWhichBonusMultiplierRailing] + and a + jp z, Func_16e51 + xor a + ld [wWhichBonusMultiplierRailing], a + lb de, $00, $0d + call PlaySoundEffect + ld a, [wWhichBonusMultiplierRailingId] + sub $21 + jr nz, .asm_16ddc + ld a, $9 + callba Func_10000 + ld a, [wd610] + cp $3 + jr nz, .asm_16e35 + ld a, $1 + ld [wd610], a + ld a, $3 + ld [wd611], a + ld a, [wd60c] + set 7, a + ld [wd60c], a + jr .asm_16e35 + +.asm_16ddc + ld a, $a + callba Func_10000 + ld a, [wd611] + cp $3 + jr nz, .asm_16e35 + ld a, $1 + ld [wd610], a + ld a, $1 + ld [wd611], a + ld a, $80 + ld [wd612], a + ld a, [wd60d] + set 7, a + ld [wd60d], a + ld a, [wd482] + inc a + cp 100 + jr c, .asm_16e10 + ld a, 99 +.asm_16e10 + ld [wd482], a + jr nc, .asm_16e24 + ld c, $19 + call Func_e55 + callba z, Func_30164 +.asm_16e24 + ld a, [wd60c] + ld [wd614], a + ld a, [wd60d] + ld [wd615], a + ld a, $1 + ld [wd613], a +.asm_16e35 + ld bc, TenPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wd60c] + call Func_16f28 + ld a, [wd60d] + add $14 + call Func_16f28 + ret + +Func_16e51: ; 0x16e51 + call Func_16ef5 + ld a, [wd612] + and a + jr z, .asm_16e8f + dec a + ld [wd612], a + cp $70 + jr nz, .asm_16e6e + ld a, $2 + ld [wd610], a + ld a, $2 + ld [wd611], a + jr .asm_16e8f + +.asm_16e6e + and a + jr nz, .asm_16e8f + ld a, $3 + ld [wd610], a + xor a + ld [wd611], a + ld a, [wd482] + call Func_16f95 + ld a, [wd60c] + call Func_16f28 + ld a, [wd60d] + add $14 + call Func_16f28 + ret + +.asm_16e8f + ld a, [wd610] + cp $2 + jr c, .asm_16ec1 + cp $3 + ld a, [hNumFramesDropped] + jr c, .asm_16ea0 + srl a + srl a +.asm_16ea0 + ld b, a + and $3 + jr nz, .asm_16ec1 + bit 3, b + jr nz, .asm_16eb6 + ld a, [wd60c] + res 7, a + ld [wd60c], a + call Func_16f28 + jr .asm_16ec1 + +.asm_16eb6 + ld a, [wd60c] + set 7, a + ld [wd60c], a + call Func_16f28 +.asm_16ec1 + ld a, [wd611] + cp $2 + ret c + cp $3 + ld a, [hNumFramesDropped] + jr c, .asm_16ed1 + srl a + srl a +.asm_16ed1 + ld b, a + and $3 + ret nz + bit 3, b + jr nz, .asm_16ee7 + ld a, [wd60d] + res 7, a + ld [wd60d], a + add $14 + call Func_16f28 + ret + +.asm_16ee7 + ld a, [wd60d] + set 7, a + ld [wd60d], a + add $14 + call Func_16f28 + ret + +Func_16ef5: ; 0x16ef5 + ld a, [wd5ca] + and a + ret nz + ld a, [wd613] + and a + ret z + xor a + ld [wd613], a + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5cc + ld de, BonusMultiplierText + call LoadTextHeader + ld hl, wBottomMessageText + $12 + ld a, [wd614] + and $7f + jr z, .asm_16f1f + add $30 + ld [hli], a +.asm_16f1f + ld a, [wd615] + res 7, a + add $30 + ld [hl], a + ret + +Func_16f28: ; 0x16f28 + push af + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_16f33 + pop af + call Func_16f38 + ret + +.asm_16f33 + pop af + call Func_16f7b + ret + +Func_16f38: ; 0x16f38 + push af + res 7, a + ld hl, wd60e + cp $14 + jr c, .asm_16f47 + ld hl, wd60f + sub $a +.asm_16f47 + cp [hl] + jr z, .asm_16f5c + ld [hl], a + ld c, a + ld b, $0 + sla c + ld hl, TileDataPointers_16fc8 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_16fc8) + call Func_10aa +.asm_16f5c + pop af + ld bc, $0000 + bit 7, a + jr z, .asm_16f68 + res 7, a + set 1, c +.asm_16f68 + cp $14 + jr c, .asm_16f6e + set 2, c +.asm_16f6e + ld hl, Data_171e4 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(Data_171e4) + call Func_10aa + ret + +Func_16f7b: ; 0x16f7b + bit 7, a + jr z, .asm_16f83 + res 7, a + add $a +.asm_16f83 + ld c, a + ld b, $0 + sla c + ld hl, TileDataPointers_17228 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_17228) + call Func_10aa + ret + +Func_16f95: ; 0x16f95 + ld a, [wd482] + inc a + cp 100 + jr c, .asm_16f9f + ld a, 99 +.asm_16f9f + ld b, a + xor a + ld hl, Data_16fc1 + ld c, $7 +.asm_16fa6 + bit 0, b + jr z, .asm_16fac + add [hl] + daa +.asm_16fac + srl b + inc hl + dec c + jr nz, .asm_16fa6 + push af + swap a + and $f + ld [wd60c], a + pop af + and $f + ld [wd60d], a + ret + +Data_16fc1: +; BCD powers of 2 + db $01 + db $02 + db $04 + db $08 + db $16 + db $32 + db $64 + +TileDataPointers_16fc8: + dw TileData_16ff0 + dw TileData_16ff5 + dw TileData_16ffa + dw TileData_16fff + dw TileData_17004 + dw TileData_17009 + dw TileData_1700e + dw TileData_17013 + dw TileData_17018 + dw TileData_1701d + dw TileData_17022 + dw TileData_17027 + dw TileData_1702c + dw TileData_17031 + dw TileData_17036 + dw TileData_1703b + dw TileData_17040 + dw TileData_17045 + dw TileData_1704a + dw TileData_1704f + +TileData_16ff0: ; 0x16ff0 + db $02 + dw TileData_17054 + dw TileData_1705e + +TileData_16ff5: ; 0x16ff5 + db $02 + dw TileData_17068 + dw TileData_17072 + +TileData_16ffa: ; 0x16ffa + db $02 + dw TileData_1707c + dw TileData_17086 + +TileData_16fff: ; 0x16fff + db $02 + dw TileData_17090 + dw TileData_1709a + +TileData_17004: ; 0x17004 + db $02 + dw TileData_170a4 + dw TileData_170ae + +TileData_17009: ; 0x17009 + db $02 + dw TileData_170b8 + dw TileData_170c2 + +TileData_1700e: ; 0x1700e + db $02 + dw TileData_170cc + dw TileData_170d6 + +TileData_17013: ; 0x17013 + db $02 + dw TileData_170e0 + dw TileData_170ea + +TileData_17018: ; 0x17018 + db $02 + dw TileData_170f4 + dw TileData_170fe + +TileData_1701d: ; 0x1701d + db $02 + dw TileData_17108 + dw TileData_17112 + +TileData_17022: ; 0x17022 + db $02 + dw TileData_1711c + dw TileData_17126 + +TileData_17027: ; 0x17027 + db $02 + dw TileData_17130 + dw TileData_1713a + +TileData_1702c: ; 0x1702c + db $02 + dw TileData_17144 + dw TileData_1714e + +TileData_17031: ; 0x17031 + db $02 + dw TileData_17158 + dw TileData_17162 + +TileData_17036: ; 0x17036 + db $02 + dw TileData_1716c + dw TileData_17176 + +TileData_1703b: ; 0x1703b + db $02 + dw TileData_17180 + dw TileData_1718a + +TileData_17040: ; 0x17040 + db $02 + dw TileData_17194 + dw TileData_1719e + +TileData_17045: ; 0x17045 + db $02 + dw TileData_171a8 + dw TileData_171b2 + +TileData_1704a: ; 0x1704a + db $02 + dw TileData_171bc + dw TileData_171c6 + +TileData_1704f: ; 0x1704f + db $02 + dw TileData_171d0 + dw TileData_171da + +TileData_17054: ; 0x17054 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1280 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1705e: ; 0x1705e + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1140 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17068: ; 0x17068 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $12A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17072: ; 0x17072 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1160 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1707c: ; 0x1707c + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $12C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17086: ; 0x17086 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1180 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17090: ; 0x17090 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $12E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1709a: ; 0x1709a + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $11A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170a4: ; 0x170a4 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1300 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170ae: ; 0x170ae + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $11C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170b8: ; 0x170b8 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1320 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170c2: ; 0x170c2 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $11E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170cc: ; 0x170cc + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1340 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170d6: ; 0x170d6 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1200 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170e0: ; 0x170e0 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1360 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170ea: ; 0x170ea + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1220 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170f4: ; 0x170f4 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1380 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_170fe: ; 0x170fe + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1240 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17108: ; 0x17108 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $46 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $13A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17112: ; 0x17112 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $48 + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1260 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1711c: ; 0x1711c + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1500 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17126: ; 0x17126 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $13C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17130: ; 0x17130 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1520 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1713a: ; 0x1713a + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $13E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17144: ; 0x17144 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1540 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1714e: ; 0x1714e + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1400 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17158: ; 0x17158 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1560 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17162: ; 0x17162 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1420 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1716c: ; 0x1716c + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1580 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17176: ; 0x17176 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1440 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17180: ; 0x17180 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $15A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1718a: ; 0x1718a + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1460 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_17194: ; 0x17194 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $15C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_1719e: ; 0x1719e + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1480 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_171a8: ; 0x171a8 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $15E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_171b2: ; 0x171b2 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $14A0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_171bc: ; 0x171bc + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1600 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_171c6: ; 0x171c6 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $14C0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_171d0: ; 0x171d0 + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4a + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $1620 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +TileData_171da: ; 0x171da + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $4c + dw StageRedFieldBottomIndicatorsGfx_Gameboy + $14E0 + db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) + db $00 + +Data_171e4: + dw Data_171ec + dw Data_171ef + dw Data_171f2 + dw Data_171f5 + +Data_171ec: ; 0x171ec + db $01 + dw Data_171f8 + +Data_171ef: ; 0x171ef + db $01 + dw Data_17204 + +Data_171f2: ; 0x171f2 + db $01 + dw Data_17210 + +Data_171f5: ; 0x171f5 + db $01 + dw Data_1721c + +Data_171f8: ; 0x171f8 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $C6 + + db $01 + dw vBGMap + $24 + db $C7 + + db $00 + +Data_17204: ; 0x17204 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $C8 + + db $01 + dw vBGMap + $24 + db $C9 + + db $00 + +Data_17210: ; 0x17210 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $CA + + db $01 + dw vBGMap + $2F + db $CB + + db $00 + +Data_1721c: ; 0x1721c + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $CC + + db $01 + dw vBGMap + $2F + db $CD + + db $00 + +TileDataPointers_17228: + dw TileData_17278 + dw TileData_1727b + dw TileData_1727e + dw TileData_17281 + dw TileData_17284 + dw TileData_17287 + dw TileData_1728a + dw TileData_1728d + dw TileData_17290 + dw TileData_17293 + dw TileData_17296 + dw TileData_17299 + dw TileData_1729c + dw TileData_1729f + dw TileData_172a2 + dw TileData_172a5 + dw TileData_172a8 + dw TileData_172ab + dw TileData_172ae + dw TileData_172b1 + dw TileData_172b4 + dw TileData_172b7 + dw TileData_172ba + dw TileData_172bd + dw TileData_172c0 + dw TileData_172c3 + dw TileData_172c6 + dw TileData_172c9 + dw TileData_172cc + dw TileData_172cf + dw TileData_172d2 + dw TileData_172d5 + dw TileData_172d8 + dw TileData_172db + dw TileData_172de + dw TileData_172e1 + dw TileData_172e4 + dw TileData_172e7 + dw TileData_172ea + dw TileData_172ed + +TileData_17278: ; 0x17278 + db $01 + dw TileData_172f0 + +TileData_1727b: ; 0x1727b + db $01 + dw TileData_172fc + +TileData_1727e: ; 0x1727e + db $01 + dw TileData_17308 + +TileData_17281: ; 0x17281 + db $01 + dw TileData_17314 + +TileData_17284: ; 0x17284 + db $01 + dw TileData_17320 + +TileData_17287: ; 0x17287 + db $01 + dw TileData_1732c + +TileData_1728a: ; 0x1728a + db $01 + dw TileData_17338 + +TileData_1728d: ; 0x1728d + db $01 + dw TileData_17344 + +TileData_17290: ; 0x17290 + db $01 + dw TileData_17350 + +TileData_17293: ; 0x17293 + db $01 + dw TileData_1735c + +TileData_17296: ; 0x17296 + db $01 + dw TileData_17368 + +TileData_17299: ; 0x17299 + db $01 + dw TileData_17374 + +TileData_1729c: ; 0x1729c + db $01 + dw TileData_17380 + +TileData_1729f: ; 0x1729f + db $01 + dw TileData_1738c + +TileData_172a2: ; 0x172a2 + db $01 + dw TileData_17398 + +TileData_172a5: ; 0x172a5 + db $01 + dw TileData_173a4 + +TileData_172a8: ; 0x172a8 + db $01 + dw TileData_173b0 + +TileData_172ab: ; 0x172ab + db $01 + dw TileData_173bc + +TileData_172ae: ; 0x172ae + db $01 + dw TileData_173c8 + +TileData_172b1: ; 0x172b1 + db $01 + dw TileData_173d4 + +TileData_172b4: ; 0x172b4 + db $01 + dw TileData_173e0 + +TileData_172b7: ; 0x172b7 + db $01 + dw TileData_173ec + +TileData_172ba: ; 0x172ba + db $01 + dw TileData_173f8 + +TileData_172bd: ; 0x172bd + db $01 + dw TileData_17404 + +TileData_172c0: ; 0x172c0 + db $01 + dw TileData_17410 + +TileData_172c3: ; 0x172c3 + db $01 + dw TileData_1741c + +TileData_172c6: ; 0x172c6 + db $01 + dw TileData_17428 + +TileData_172c9: ; 0x172c9 + db $01 + dw TileData_17434 + +TileData_172cc: ; 0x172cc + db $01 + dw TileData_17440 + +TileData_172cf: ; 0x172cf + db $01 + dw TileData_1744c + +TileData_172d2: ; 0x172d2 + db $01 + dw TileData_17458 + +TileData_172d5: ; 0x172d5 + db $01 + dw TileData_17464 + +TileData_172d8: ; 0x172d8 + db $01 + dw TileData_17470 + +TileData_172db: ; 0x172db + db $01 + dw TileData_1747c + +TileData_172de: ; 0x172de + db $01 + dw TileData_17488 + +TileData_172e1: ; 0x172e1 + db $01 + dw TileData_17494 + +TileData_172e4: ; 0x172e4 + db $01 + dw TileData_174a0 + +TileData_172e7: ; 0x172e7 + db $01 + dw TileData_174ac + +TileData_172ea: ; 0x172ea + db $01 + dw TileData_174b8 + +TileData_172ed: ; 0x172ed + db $01 + dw TileData_174c4 + +TileData_172f0: ; 0x172f0 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $40 + + db $01 + dw vBGMap + $24 + db $41 + + db $00 + +TileData_172fc: ; 0x172fc + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $42 + + db $01 + dw vBGMap + $24 + db $43 + + db $00 + +TileData_17308: ; 0x17308 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $44 + + db $01 + dw vBGMap + $24 + db $45 + + db $00 + +TileData_17314: ; 0x17314 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $46 + + db $01 + dw vBGMap + $24 + db $47 + + db $00 + +TileData_17320: ; 0x17320 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $48 + + db $01 + dw vBGMap + $24 + db $49 + + db $00 + +TileData_1732c: ; 0x1732c + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $4A + + db $01 + dw vBGMap + $24 + db $4B + + db $00 + +TileData_17338: ; 0x17338 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $4C + + db $01 + dw vBGMap + $24 + db $4D + + db $00 + +TileData_17344: ; 0x17344 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $4E + + db $01 + dw vBGMap + $24 + db $4F + + db $00 + +TileData_17350: ; 0x17350 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $50 + + db $01 + dw vBGMap + $24 + db $51 + + db $00 + +TileData_1735c: ; 0x1735c + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $52 + + db $01 + dw vBGMap + $24 + db $53 + + db $00 + +TileData_17368: ; 0x17368 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $2C + + db $01 + dw vBGMap + $24 + db $2D + + db $00 + +TileData_17374: ; 0x17374 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $2E + + db $01 + dw vBGMap + $24 + db $2F + + db $00 + +TileData_17380: ; 0x17380 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $30 + + db $01 + dw vBGMap + $24 + db $31 + + db $00 + +TileData_1738c: ; 0x1738c + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $32 + + db $01 + dw vBGMap + $24 + db $33 + + db $00 + +TileData_17398: ; 0x17398 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $34 + + db $01 + dw vBGMap + $24 + db $35 + + db $00 + +TileData_173a4: ; 0x173a4 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $36 + + db $01 + dw vBGMap + $24 + db $37 + + db $00 + +TileData_173b0: ; 0x173b0 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $38 + + db $01 + dw vBGMap + $24 + db $39 + + db $00 + +TileData_173bc: ; 0x173bc + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $3A + + db $01 + dw vBGMap + $24 + db $3B + + db $00 + +TileData_173c8: ; 0x173c8 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $3C + + db $01 + dw vBGMap + $24 + db $3D + + db $00 + +TileData_173d4: ; 0x173d4 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $4 + db $3E + + db $01 + dw vBGMap + $24 + db $3F + + db $00 + +TileData_173e0: ; 0x173e0 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $68 + + db $01 + dw vBGMap + $2F + db $69 + + db $00 + +TileData_173ec: ; 0x173ec + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $6A + + db $01 + dw vBGMap + $2F + db $6B + + db $00 + +TileData_173f8: ; 0x173f8 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $6C + + db $01 + dw vBGMap + $2F + db $6D + + db $00 + +TileData_17404: ; 0x17404 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $6E + + db $01 + dw vBGMap + $2F + db $6F + + db $00 + +TileData_17410: ; 0x17410 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $70 + + db $01 + dw vBGMap + $2F + db $71 + + db $00 + +TileData_1741c: ; 0x1741c + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $72 + + db $01 + dw vBGMap + $2F + db $73 + + db $00 + +TileData_17428: ; 0x17428 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $74 + + db $01 + dw vBGMap + $2F + db $75 + + db $00 + +TileData_17434: ; 0x17434 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $76 + + db $01 + dw vBGMap + $2F + db $77 + + db $00 + +TileData_17440: ; 0x17440 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $78 + + db $01 + dw vBGMap + $2F + db $79 + + db $00 + +TileData_1744c: ; 0x1744c + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $7A + + db $01 + dw vBGMap + $2F + db $7B + + db $00 + +TileData_17458: ; 0x17458 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $54 + + db $01 + dw vBGMap + $2F + db $55 + + db $00 + +TileData_17464: ; 0x17464 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $56 + + db $01 + dw vBGMap + $2F + db $57 + + db $00 + +TileData_17470: ; 0x17470 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $58 + + db $01 + dw vBGMap + $2F + db $59 + + db $00 + +TileData_1747c: ; 0x1747c + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $5A + + db $01 + dw vBGMap + $2F + db $5B + + db $00 + +TileData_17488: ; 0x17488 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $5C + + db $01 + dw vBGMap + $2F + db $5D + + db $00 + +TileData_17494: ; 0x17494 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $5E + + db $01 + dw vBGMap + $2F + db $5F + + db $00 + +TileData_174a0: ; 0x174a0 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $60 + + db $01 + dw vBGMap + $2F + db $61 + + db $00 + +TileData_174ac: ; 0x174ac + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $62 + + db $01 + dw vBGMap + $2F + db $63 + + db $00 + +TileData_174b8: ; 0x174b8 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $64 + + db $01 + dw vBGMap + $2F + db $65 + + db $00 + +TileData_174c4: ; 0x174c4 + dw LoadTileLists + db $02 + + db $01 + dw vBGMap + $F + db $66 + + db $01 + dw vBGMap + $2F + db $67 + + db $00 + +Func_174d0: ; 0x174d0 + call Func_174ea + ret nc + ; fall through + +Func_174d4: ; 0x174d4 + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_17528 + add hl, bc + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, $5 + ld de, LoadTileLists + call Func_10c5 + ret + +Func_174ea: ; 0x174ea + ld a, [wd624] + ld hl, wd625 + cp [hl] + ret z + ld a, [wd626] + dec a + ld [wd626], a + jr nz, .asm_17514 + ld a, [wd625] + ld [wd624], a + cp $3 + jr c, .asm_1750f + ld a, $1 + ld [wd609], a + ld a, $3 + ld [wd607], a +.asm_1750f + ld a, [wd624] + scf + ret + +.asm_17514 + and $7 + ret nz + ld a, [wd626] + bit 3, a + jr nz, .asm_17523 + ld a, [wd624] + scf + ret + +.asm_17523 + ld a, [wd625] + scf + ret + +TileDataPointers_17528: + dw TileData_17530 + dw TileData_1753B + dw TileData_17546 + dw TileData_17551 + +TileData_17530: ; 0x17530 + db $06 ; total number of tiles + + db $06 ; number of tiles + dw $9907 + db $B0, $B1, $B0, $B1, $B0, $B1 + db $00 + +TileData_1753B: ; 0x1753B + db $06 ; total number of tiles + + db $06 ; number of tiles + dw $9907 + db $AE, $AF, $B0, $B1, $B0, $B1 + db $00 + +TileData_17546: ; 0x17546 + db $06 ; total number of tiles + + db $06 ; number of tiles + dw $9907 + db $AE, $AF, $AE, $AF, $B0, $B1 + db $00 + +TileData_17551: ; 0x17551 + db $06 ; total number of tiles + + db $06 ; number of tiles + dw $9907 + db $AE, $AF, $AE, $AF, $AE, $AF + db $00 diff --git a/engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm b/engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm new file mode 100755 index 0000000..19f87cc --- /dev/null +++ b/engine/pinball_game/object_collision/seel_bonus_resolve_collision.asm @@ -0,0 +1,2807 @@ +ResolveSeelBonusGameObjectCollisions: ; 0x25c5a + call Func_25da3 + call Func_25ced + ld a, [wd793] + cp $14 + jr c, .asm_25c98 + ld a, [wd794] + cp $2 + jr nc, .asm_25c98 + ld a, $1 + ld [wd498], a + ld de, $0000 + call PlaySong + ld a, $1 + ld [wd49a], a + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5dc + ld de, SeelStageClearedText + call LoadTextHeader + ld a, $2 + ld [wd794], a + lb de, $4b, $2a + call PlaySoundEffect +.asm_25c98 + ld a, [wd794] + cp $2 + jr nz, .asm_25cb0 + ld a, [wSFXTimer] + and a + jr nz, .asm_25cb0 + ld de, $0003 + call PlaySong + ld a, $5 + ld [wd794], a +.asm_25cb0 + ld a, [wd794] + cp $2 + jr z, .asm_25cc1 + callba Func_107f8 +.asm_25cc1 + ld a, [wd57e] + and a + ret z + xor a + ld [wd57e], a + ld a, $1 + ld [wd7be], a + call Func_2862 + callba StopTimer + ld a, $3 + ld [wd791], a + ld a, [wd794] + cp $5 + ret z + ld a, $1 + ld [wd794], a + ret + +Func_25ced: ; 0x25ced + ld a, [wd766] + and a + ret nz + ld a, [wd4b4] + cp $8a + ret nc + ld a, $1 + ld [wStageCollisionState], a + ld [wd766], a + callba LoadStageCollisionAttributes + call Func_25d0e + ret + +Func_25d0e: ; 0x25d0e + ld a, [wStageCollisionState] + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_25d2b + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_25d21 + ld hl, TileDataPointers_25d67 +.asm_25d21 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_25d2b) + call Func_10aa + ret + +TileDataPointers_25d2b: + dw TileData_25d2f + dw TileData_25d32 + +TileData_25d2f: ; 0x25d2f + db $01 + dw TileData_25d35 + +TileData_25d32: ; 0x25d32 + db $01 + dw TileData_25d4e + +TileData_25d35: ; 0x25d35 + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $1F, $20 + + db $02 ; number of tiles + dw vBGMap + $133 + db $1D, $1E + + db $03 ; number of tiles + dw vBGMap + $152 + db $80, $1B, $1C + + db $02 ; number of tiles + dw vBGMap + $172 + db $17, $18 + + db $00 ; terminator + +TileData_25d4e: ; 0x25d4e + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $24, $F9 + + db $02 ; number of tiles + dw vBGMap + $133 + db $22, $04 + + db $03 ; number of tiles + dw vBGMap + $152 + db $36, $37, $FE + + db $02 ; number of tiles + dw vBGMap + $172 + db $35, $F9 + + db $00 ; terminator + +TileDataPointers_25d67: + dw TileData_25d6b + dw TileData_25d6e + +TileData_25d6b: ; 0x25d6b + db $01 + dw TileData_25d71 + +TileData_25d6e: ; 0x25d6e + db $01 + dw TileData_25d8a + +TileData_25d71: ; 0x25d71 + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $11, $10 + + db $02 ; number of tiles + dw vBGMap + $133 + db $0E, $0D + + db $03 ; number of tiles + dw vBGMap + $152 + db $80, $0B, $0A + + db $02 + dw vBGMap + $172 + db $07, $06 + + db $00 ; terminator + +TileData_25d8a: ; 0x25d8a + dw LoadTileLists + db $09 ; total number of tiles + + db $02 ; number of tiles + dw vBGMap + $113 + db $0F, $F4 + + db $02 ; number of tiles + dw vBGMap + $133 + db $0C, $FB + + db $03 ; number of tiles + dw vBGMap + $152 + db $09, $08, $F8 + + db $02 + dw vBGMap + $172 + db $04, $F4 + + db $00 ; terminator + +Func_25da3: ; 0x25da3 + ld a, [wd767] + and a + jp z, .asm_25e38 + xor a + ld [wd767], a + ld a, [wd768] + sla a + ld c, a + sla a + sla a + add c + ld c, a + ld b, $0 + ld hl, wd76c + add hl, bc + ld d, h + ld e, l + ld a, $9 + ld [de], a + dec de + dec de + dec de + push bc + ld hl, SeelAnimationData10 + call CopyHLToDE + pop bc + ld hl, wd76e + add hl, bc + ld a, [hl] + ld [wd79c], a + ld hl, wd770 + add hl, bc + ld a, [hl] + add $8 + ld [wd79e], a + ld a, [wd792] + cp $9 + jr nz, .asm_25df1 + ld a, $0 + ld [wd792], a + ld [wd79a], a +.asm_25df1 + ld a, [wd792] + dec a + cp $ff + jr z, .asm_25e04 + ld [wd79a], a + ld de, wd79a + call Func_261f9 + jr .asm_25e07 + +.asm_25e04 + ld [wd79a], a +.asm_25e07 + ld a, $33 + ld [wd803], a + ld a, $8 + ld [wd804], a + lb de, $00, $30 + call PlaySoundEffect + call Func_25e85 + ld hl, wd792 + inc [hl] + ld a, [wd793] + cp $14 + ret nc + ld hl, wd793 + inc [hl] + ld a, [wd792] + dec a + ld b, a + ld a, [hl] + add b + ld [hl], a + ld a, $1 + ld [wd64e], a + call Func_262f4 +.asm_25e38 + ld de, wd76c ; I think these three calls are one for each Seel swimming around + call Func_25f47 + ld de, wd776 + call Func_25f47 + ld de, wd780 + call Func_25f47 + ld a, [wd792] + dec a + cp $ff + jr z, .asm_25e5d + ld [wd79a], a + ld de, wd79a + call Func_26212 + jr .asm_25e60 + +.asm_25e5d + ld [wd79a], a +.asm_25e60 + ld bc, $087a ; again, probably one call for each Seel swimming around + ld de, wd76d + ld hl, wd772 + call Func_25ec5 + ld bc, $087a + ld de, wd777 + ld hl, wd77c + call Func_25ec5 + ld bc, $087a + ld de, wd781 + ld hl, wd786 + call Func_25ec5 + ret + +Func_25e85: ; 0x25e85 + ld a, [wd792] + inc a + ld d, $1 + ld e, a + ld a, $1 +.asm_25e8e + cp e + jr z, .asm_25e96 + sla d + inc a + jr .asm_25e8e + +.asm_25e96 + push de + ld a, d + cp $32 + jr nc, .asm_25ead + ld bc, OneHundredThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + pop de + dec d + jr .asm_25ebf + +.asm_25ead + ld bc, FiveMillionPoints + callba AddBigBCD6FromQueueWithBallMultiplier + pop de + ld a, d + sub $32 + ld d, a +.asm_25ebf + ld a, d + cp $0 + jr nz, .asm_25e96 + ret + +Func_25ec5: ; 0x25ec5 + dec de + ld a, [de] + cp $1 + jr z, .asm_25ece + cp $4 + ret nz +.asm_25ece + inc de + push hl + ld a, [hld] + push af + push bc + ld a, [hl] + and $f + ld c, a + ld b, $0 + ld hl, SeelSwimmingYOffsets + add hl, bc + pop bc + pop af + and a + jr nz, .asm_25f05 + ld a, [de] + add [hl] + ld [de], a + inc de + ld a, [de] + adc $0 + ld [de], a + pop hl + cp c + ret c + ld a, $1 + ld [hl], a + dec hl + dec hl + dec hl + dec hl + dec hl + dec hl + ld a, $7 + ld [hl], a + dec hl + dec hl + dec hl + ld d, h + ld e, l + ld hl, SeelAnimationData8 + call CopyHLToDE + ret + +.asm_25f05 + ld a, [de] + sub [hl] + ld [de], a + inc de + ld a, [de] + sbc $0 + ld [de], a + pop hl + cp b + ret nc + xor a + ld [hl], a + dec hl + dec hl + dec hl + dec hl + dec hl + dec hl + ld a, $8 + ld [hl], a + dec hl + dec hl + dec hl + ld d, h + ld e, l + ld hl, SeelAnimationData9 + call CopyHLToDE + ret + +SeelSwimmingYOffsets: + db $31, $32, $33, $34, $35, $36, $37, $36, $35, $34, $33, $32, $33, $34, $35, $36 + db $37, $38, $39, $3A, $3B, $3A, $39, $38, $37, $36, $35, $34, $33, $32, $31, $30 + +Func_25f47: ; 0x25f47 + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, SeelAnimationsTable + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ret nc + ld a, [de] + rst JumpTable ; calls JumpToFuncInTable +CallTable_25f5f: ; 0x25f5f + dw Func_25f77 + dw Func_25fbe + dw Func_25ff3 + dw Func_2602a + dw Func_2604c + dw Func_2607f + dw Func_260b6 + dw Func_260d8 + dw Func_260e2 + dw Func_260ec + dw Func_26109 + dw Func_26120 + +Func_25f77: ; 0x25f77 + dec de + ld a, [de] + cp $2 + ret nz + push de + inc de + inc de + inc de + inc de + inc de + inc de + ld a, [de] + dec a + ld [de], a + ld a, $3 + jr z, .asm_25f8f + pop de + xor a + jp Func_26137 + +.asm_25f8f + ld hl, wd792 + ld [hl], $0 + call GenRandom + bit 7, a + jr z, .asm_25fa2 + inc de + ld a, $1 + ld [de], a + dec de + jr .asm_25fa7 + +.asm_25fa2 + inc de + ld a, $0 + ld [de], a + dec de +.asm_25fa7 + inc de + ld a, [de] + and a + jr z, .asm_25fb0 + ld a, $6 + jr .asm_25fb2 + +.asm_25fb0 + ld a, $3 +.asm_25fb2 + push af + lb de, $00, $31 + call PlaySoundEffect + pop af + pop de + jp Func_26137 + +Func_25fbe: ; 0x25fbe + dec de + ld a, [de] + cp $4 + ret nz + push de + inc de + inc de + inc de + inc de + inc de + inc de + ld a, [de] + dec a + ld [de], a + jr z, .asm_25fd5 + pop de + ld a, $1 + jp Func_26137 + +.asm_25fd5 + ld a, [wd791] + cp $0 + jr z, .asm_25fe9 + ld a, $2 + ld [de], a + pop de + ld a, $4 + ld [de], a + ld a, $1 + jp Func_26137 + ret ; unused instruction + +.asm_25fe9 + ld hl, wd791 + inc [hl] + pop de + ld a, $2 + jp Func_26137 + +Func_25ff3: ; 0x25ff3 + dec de + ld a, [de] + cp $7 + ret nz + xor a + call Func_26137 + inc de + inc de + inc de + inc de + inc de + ld a, [wd792] + cp $6 + jr nc, .asm_26020 + cp $2 + jr nc, .asm_26016 + ld a, $3 + ld [de], a + lb de, $00, $31 + call PlaySoundEffect + ret + +.asm_26016 + ld a, $2 + ld [de], a + lb de, $00, $31 + call PlaySoundEffect + ret + +.asm_26020 + ld a, $1 + ld [de], a + lb de, $00, $31 + call PlaySoundEffect + ret + +Func_2602a: ; 0x2602a + dec de + ld a, [de] + cp $9 + ret nz + ld a, $1 + call Func_26137 + inc de + inc de + inc de + inc de + inc de + call GenRandom + bit 7, a + jr z, .asm_26044 + ld a, $3 + jr .asm_26046 + +.asm_26044 + ld a, $5 +.asm_26046 + ld [de], a + ld hl, wd791 + dec [hl] + ret + +Func_2604c: ; 0x2604c + dec de + ld a, [de] + cp $4 + ret nz + push de + inc de + inc de + inc de + inc de + inc de + inc de + ld a, [de] + dec a + ld [de], a + jr z, .asm_26063 + pop de + ld a, $4 + jp Func_26137 + +.asm_26063 + ld a, [wd791] + cp $0 + jr z, .asm_26075 + ld a, $2 + ld [de], a + pop de + ld a, $4 + ld [de], a + jp Func_26137 + ret ; unused instruction + +.asm_26075 + ld hl, wd791 + inc [hl] + pop de + ld a, $5 + jp Func_26137 + +Func_2607f: ; 0x2607f + dec de + ld a, [de] + cp $7 + ret nz + xor a + call Func_26137 + inc de + inc de + inc de + inc de + inc de + ld a, [wd792] + cp $6 + jr nc, .asm_260ac + cp $2 + jr nc, .asm_260a2 + ld a, $3 + ld [de], a + lb de, $00, $31 + call PlaySoundEffect + ret + +.asm_260a2 + ld a, $2 + ld [de], a + lb de, $00, $31 + call PlaySoundEffect + ret + +.asm_260ac + ld a, $1 + ld [de], a + lb de, $00, $31 + call PlaySoundEffect + ret + +Func_260b6: ; 0x260b6 + dec de + ld a, [de] + cp $9 + ret nz + ld a, $4 + call Func_26137 + inc de + inc de + inc de + inc de + inc de + call GenRandom + bit 7, a + jr z, .asm_260d0 + ld a, $3 + jr .asm_260d2 + +.asm_260d0 + ld a, $5 +.asm_260d2 + ld [de], a + ld hl, wd791 + dec [hl] + ret + +Func_260d8: ; 0x260d8 + dec de + ld a, [de] + cp $5 + ret nz + ld a, $4 + jp Func_26137 + +Func_260e2: ; 0x260e2 + dec de + ld a, [de] + cp $5 + ret nz + ld a, $1 + jp Func_26137 + +Func_260ec: ; 0x260ec + dec de + ld a, [de] + cp $1 + ret nz + push de + inc de + inc de + inc de + inc de + inc de + inc de + inc de + ld a, [de] + and a + jr z, .asm_26103 + pop de + ld a, $b + jp Func_26137 + +.asm_26103 + pop de + ld a, $a + jp Func_26137 + +Func_26109: ; 0x26109 + dec de + ld a, [de] + cp $7 + ret nz + ld a, $1 + call Func_26137 + inc de + inc de + inc de + inc de + inc de + ld a, $5 + ld [de], a + ld hl, wd791 + dec [hl] + ret + +Func_26120: ; 0x26120 + dec de + ld a, [de] + cp $7 + ret nz + ld a, $4 + call Func_26137 + inc de + inc de + inc de + inc de + inc de + ld a, $5 + ld [de], a + ld hl, wd791 + dec [hl] + ret + +Func_26137: ; 0x26137 + push af + sla a + ld c, a + ld b, $0 + ld hl, SeelAnimationsTable + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + call CopyHLToDE + pop de + inc de + pop af + ld [de], a + ret + +SeelAnimationsTable: ; 0x2614f + dw SeelAnimationData1 + dw SeelAnimationData2 + dw SeelAnimationData3 + dw SeelAnimationData4 + dw SeelAnimationData5 + dw SeelAnimationData6 + dw SeelAnimationData7 + dw SeelAnimationData8 + dw SeelAnimationData9 + dw SeelAnimationData10 + dw SeelAnimationData11 + dw SeelAnimationData12 + +SeelAnimationData1: + db $1C, $00 + db $1C, $01 + db $00 ; terminator + +SeelAnimationData2: + db $0C, $03 + db $08, $04 + db $0C, $05 + db $08, $04 + db $00 ; terminator + +SeelAnimationData3: + db $04, $06 + db $04, $07 + db $05, $08 + db $05, $09 + db $06, $0A + db $04, $0B + db $08, $0C + db $00 ; terminator + +SeelAnimationData4: + db $08, $0C + db $04, $0B + db $06, $0D + db $10, $17 + db $06, $0A + db $05, $09 + db $05, $08 + db $04, $0E + db $04, $0F + db $00 ; terminator + +SeelAnimationData5: + db $0C, $10 + db $08, $11 + db $0C, $12 + db $08, $11 + db $00 ; terminator + +SeelAnimationData6: + db $04, $13 + db $04, $14 + db $05, $08 + db $05, $09 + db $06, $0A + db $04, $0B + db $08, $0C + db $00 ; terminator + +SeelAnimationData7: + db $08, $0C + db $04, $0B + db $06, $0D + db $10, $17 + db $06, $0A + db $05, $09 + db $05, $08 + db $04, $15 + db $04, $16 + db $00 ; terminator + +SeelAnimationData8: + db $04, $06 + db $04, $07 + db $06, $0A + db $04, $15 + db $04, $16 + db $00 ; terminator + +SeelAnimationData9: + db $04, $13 + db $04, $14 + db $06, $0A + db $04, $0E + db $04, $0F + db $00 ; terminator + +SeelAnimationData10: + db $10, $02 + db $00 ; terminator + +SeelAnimationData11: + db $06, $0D + db $10, $17 + db $06, $0A + db $05, $09 + db $05, $08 + db $04, $0E + db $04, $0F + db $00 ; terminator + +SeelAnimationData12: + db $06, $0D + db $10, $17 + db $06, $0A + db $05, $09 + db $05, $08 + db $04, $15 + db $04, $16 + db $00 ; terminator + +Func_261f9: ; 0x261f9 + ld a, $ff + ld [wd795], a + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, SeelStageAnimations + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + dec de + dec de + dec de + call CopyHLToDE + ret + +Func_26212: ; 0x26212 + ld a, [de] + sla a + ld c, a + ld b, $0 + ld hl, SeelStageAnimations + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + push de + dec de + dec de + dec de + call UpdateAnimation + pop de + ret nc + dec de + ld a, [de] + cp $a + ret nz + xor a + ld [de], a + ld [wd79c], a + ld [wd79e], a + ld a, a + ld [wd795], a + ret + +SeelStageAnimations: + dw SeelStageAnimationData1 + dw SeelStageAnimationData1 + dw SeelStageAnimationData2 + dw SeelStageAnimationData3 + dw SeelStageAnimationData4 + dw SeelStageAnimationData5 + dw SeelStageAnimationData6 + dw SeelStageAnimationData7 + dw SeelStageAnimationData8 + +SeelStageAnimationData1: + db $02, $00 + db $02, $01 + db $02, $02 + db $10, $00 + db $04, $18 + db $04, $00 + db $04, $18 + db $04, $00 + db $04, $18 + db $04, $00 + db $00 ; terminator + +SeelStageAnimationData2: + db $02, $03 + db $02, $04 + db $02, $05 + db $10, $03 + db $04, $18 + db $04, $03 + db $04, $18 + db $04, $03 + db $04, $18 + db $04, $03 + db $00 ; terminator + +SeelStageAnimationData3: + db $02, $06 + db $02, $07 + db $02, $08 + db $10, $06 + db $04, $18 + db $04, $06 + db $04, $18 + db $04, $06 + db $04, $18 + db $04, $06 + db $00 ; terminator + +SeelStageAnimationData4: + db $02, $09 + db $02, $0A + db $02, $0B + db $10, $09 + db $04, $18 + db $04, $09 + db $04, $18 + db $04, $09 + db $04, $18 + db $04, $09 + db $00 ; terminator + +SeelStageAnimationData5: + db $02, $0C + db $02, $0D + db $02, $0E + db $10, $0C + db $04, $18 + db $04, $0C + db $04, $18 + db $04, $0C + db $04, $18 + db $04, $0C + db $00 ; terminator + +SeelStageAnimationData6: + db $02, $0F + db $02, $10 + db $02, $11 + db $10, $0F + db $04, $18 + db $04, $0F + db $04, $18 + db $04, $0F + db $04, $18 + db $04, $0F + db $00 ; terminator + +SeelStageAnimationData7: + db $02, $12 + db $02, $13 + db $02, $14 + db $10, $12 + db $04, $18 + db $04, $12 + db $04, $18 + db $04, $12 + db $04, $18 + db $04, $12 + db $00 ; terminator + +SeelStageAnimationData8: + db $02, $15 + db $02, $16 + db $02, $17 + db $10, $15 + db $04, $18 + db $04, $15 + db $04, $18 + db $04, $15 + db $04, $18 + db $04, $15 + db $00 ; terminator + +Func_262f4: ; 0x262f4 + ld a, [wd793] + ld c, a + ld b, $0 +.asm_262fa + ld a, c + and a + jr z, .asm_26306 + ld a, b + add $8 + ld b, a + dec c + ld a, c + jr .asm_262fa + +.asm_26306 + ld a, b + and a + jr z, .asm_2630c + sub $8 +.asm_2630c + ld [wd652], a + ld a, [wd792] + and a + jr z, .asm_2631b + ld b, a + ld a, [wd793] + inc a + sub b +.asm_2631b + ld [wd651], a + ld a, [wd793] + cp $15 + jr c, .asm_2632a + ld a, $14 + ld [wd793], a +.asm_2632a + push af + xor a + ld [wd650], a + pop af + sla a + ld c, a + ld b, $0 + ld hl, TileDataPointers_2634a + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_26340 + ld hl, TileDataPointers_26764 +.asm_26340 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(TileDataPointers_2634a) + call Func_10aa + ret + +TileDataPointers_2634a: + dw TileData_26374 + dw TileData_26377 + dw TileData_2637a + dw TileData_2637d + dw TileData_26380 + dw TileData_26383 + dw TileData_26386 + dw TileData_26389 + dw TileData_2638c + dw TileData_2638f + dw TileData_26392 + dw TileData_26395 + dw TileData_26398 + dw TileData_2639b + dw TileData_2639e + dw TileData_263a1 + dw TileData_263a4 + dw TileData_263a7 + dw TileData_263aa + dw TileData_263ad + dw TileData_263b0 + +TileData_26374: ; 0x26374 + db $01 + dw TileData_263b3 + +TileData_26377: ; 0x26377 + db $01 + dw TileData_263e0 + +TileData_2637a: ; 0x2637a + db $01 + dw TileData_2640d + +TileData_2637d: ; 0x2637d + db $01 + dw TileData_2643a + +TileData_26380: ; 0x26380 + db $01 + dw TileData_26467 + +TileData_26383: ; 0x26383 + db $01 + dw TileData_26494 + +TileData_26386: ; 0x26386 + db $01 + dw TileData_264c1 + +TileData_26389: ; 0x26389 + db $01 + dw TileData_264ee + +TileData_2638c: ; 0x2638c + db $01 + dw TileData_2651b + +TileData_2638f: ; 0x2638f + db $01 + dw TileData_26548 + +TileData_26392: ; 0x26392 + db $01 + dw TileData_26575 + +TileData_26395: ; 0x26395 + db $01 + dw TileData_265a2 + +TileData_26398: ; 0x26398 + db $01 + dw TileData_265cf + +TileData_2639b: ; 0x2639b + db $01 + dw TileData_265fc + +TileData_2639e: ; 0x2639e + db $01 + dw TileData_26629 + +TileData_263a1: ; 0x263a1 + db $01 + dw TileData_26656 + +TileData_263a4: ; 0x263a4 + db $01 + dw TileData_26683 + +TileData_263a7: ; 0x263a7 + db $01 + dw TileData_266b0 + +TileData_263aa: ; 0x263aa + db $01 + dw TileData_266dd + +TileData_263ad: ; 0x263ad + db $01 + dw TileData_2670a + +TileData_263b0: ; 0x263b0 + db $01 + dw TileData_26737 + +TileData_263b3: ; 0x263b3 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $01, $30, $31 + + db $03 ; number of tiles + dw vBGMap + $3 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $6 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_263e0: ; 0x263e0 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $30, $31 + + db $03 ; number of tiles + dw vBGMap + $3 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $6 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_2640d: ; 0x2640d + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $31 + + db $03 ; number of tiles + dw vBGMap + $3 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $6 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_2643a: ; 0x2643a + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $6 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_26467: ; 0x26467 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $6 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_26494: ; 0x26494 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $32 + + db $03 ; number of tiles + dw vBGMap + $6 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_264c1: ; 0x264c1 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_264ee: ; 0x264ee + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_2651b: ; 0x2651b + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $32 + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_26548: ; 0x26548 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_26575: ; 0x26575 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_265a2: ; 0x265a2 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $32 + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_265cf: ; 0x265cf + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $32, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_265fc: ; 0x265fc + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $32, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_26629: ; 0x26629 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $3A, $32 + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_26656: ; 0x26656 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $F + db $32, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_26683: ; 0x26683 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $F + db $3A, $32, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_266b0: ; 0x266b0 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $F + db $3A, $3A, $33 + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_266dd: ; 0x266dd + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $F + db $3A, $3A, $3A + + db $02 ; number of tiles + dw vBGMap + $12 + db $34, $04 + + db $00 ; terminator + +TileData_2670a: ; 0x2670a + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $F + db $3A, $3A, $3A + + db $02 ; number of tiles + dw vBGMap + $12 + db $3B, $04 + + db $00 ; terminator + +TileData_26737: ; 0x26737 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $38, $39, $3A + + db $03 ; number of tiles + dw vBGMap + $3 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $6 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $9 + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $C + db $3A, $3A, $3A + + db $03 ; number of tiles + dw vBGMap + $F + db $3A, $3A, $3A + + db $02 ; number of tiles + dw vBGMap + $12 + db $3B, $38 + + db $00 ; terminator + +TileDataPointers_26764: + dw TileData_2678e + dw TileData_26791 + dw TileData_26794 + dw TileData_26797 + dw TileData_2679a + dw TileData_2679d + dw TileData_267a0 + dw TileData_267a3 + dw TileData_267a6 + dw TileData_267a9 + dw TileData_267ac + dw TileData_267af + dw TileData_267b2 + dw TileData_267b5 + dw TileData_267b8 + dw TileData_267bb + dw TileData_267be + dw TileData_267c1 + dw TileData_267c4 + dw TileData_267c7 + dw TileData_267ca + +TileData_2678e: ; 0x2678e + db $01 + dw TileData_267cd + +TileData_26791: ; 0x26791 + db $01 + dw TileData_267fa + +TileData_26794: ; 0x26794 + db $01 + dw TileData_26827 + +TileData_26797: ; 0x26797 + db $01 + dw TileData_26854 + +TileData_2679a: ; 0x2679a + db $01 + dw TileData_26881 + +TileData_2679d: ; 0x2679d + db $01 + dw TileData_268ae + +TileData_267a0: ; 0x267a0 + db $01 + dw TileData_268db + +TileData_267a3: ; 0x267a3 + db $01 + dw TileData_26908 + +TileData_267a6: ; 0x267a6 + db $01 + dw TileData_26935 + +TileData_267a9: ; 0x267a9 + db $01 + dw TileData_26962 + +TileData_267ac: ; 0x267ac + db $01 + dw TileData_2698f + +TileData_267af: ; 0x267af + db $01 + dw TileData_269bc + +TileData_267b2: ; 0x267b2 + db $01 + dw TileData_269e9 + +TileData_267b5: ; 0x267b5 + db $01 + dw TileData_26a16 + +TileData_267b8: ; 0x267b8 + db $01 + dw TileData_26a43 + +TileData_267bb: ; 0x267bb + db $01 + dw TileData_26a70 + +TileData_267be: ; 0x267be + db $01 + dw TileData_26a9d + +TileData_267c1: ; 0x267c1 + db $01 + dw TileData_26aca + +TileData_267c4: ; 0x267c4 + db $01 + dw TileData_26af7 + +TileData_267c7: ; 0x267c7 + db $01 + dw TileData_26b24 + +TileData_267ca: ; 0x267ca + db $01 + dw TileData_26b51 + +TileData_267cd: ; 0x267cd + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $FB, $18, $19 + + db $03 ; number of tiles + dw vBGMap + $3 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $6 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_267fa: ; 0x267fa + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $18, $19 + + db $03 ; number of tiles + dw vBGMap + $3 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $6 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26827: ; 0x26827 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $19 + + db $03 ; number of tiles + dw vBGMap + $3 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $6 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26854: ; 0x26854 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $6 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26881: ; 0x26881 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $6 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_268ae: ; 0x268ae + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1A + + db $03 ; number of tiles + dw vBGMap + $6 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_268db: ; 0x268db + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26908: ; 0x26908 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26935: ; 0x26935 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1A + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26962: ; 0x26962 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_2698f: ; 0x2698f + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_269bc: ; 0x269bc + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1A + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_269e9: ; 0x269e9 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1A, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26a16: ; 0x26a16 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1A, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26a43: ; 0x26a43 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1D, $1A + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26a70: ; 0x26a70 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $F + db $1A, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26a9d: ; 0x26a9d + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $F + db $1D, $1A, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26aca: ; 0x26aca + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $F + db $1D, $1D, $19 + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26af7: ; 0x26af7 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $F + db $1D, $1D, $1D + + db $02 ; number of tiles + dw vBGMap + $12 + db $18, $FB + + db $00 ; terminator + +TileData_26b24: ; 0x26b24 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $F + db $1D, $1D, $1D + + db $02 ; number of tiles + dw vBGMap + $12 + db $1E, $FB + + db $00 ; terminator + +TileData_26b51: ; 0x26b51 + dw LoadTileLists + db $14 ; total number of tiles + + db $03 ; number of tiles + dw vBGMap + db $1B, $1C, $1D + + db $03 ; number of tiles + dw vBGMap + $3 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $6 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $9 + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $C + db $1D, $1D, $1D + + db $03 ; number of tiles + dw vBGMap + $F + db $1D, $1D, $1D + + db $02 ; number of tiles + dw vBGMap + $12 + db $1E, $1B + + db $00 ; terminator -- cgit v1.2.3