From 519111415056983f3955bc8847283e675dc61280 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 8 Jul 2017 13:20:11 -0700 Subject: Labeled map-move counter stuff. Started pulling queued graphics data into separate files --- .../load_stage_data/load_blue_field.asm | 16 +- .../load_stage_data/load_red_field.asm | 8 +- .../blue_stage_resolve_collision.asm | 4729 ++++++-------------- .../red_stage_resolve_collision.asm | 2125 +-------- 4 files changed, 1664 insertions(+), 5214 deletions(-) (limited to 'engine') diff --git a/engine/pinball_game/load_stage_data/load_blue_field.asm b/engine/pinball_game/load_stage_data/load_blue_field.asm index 4dcd2df..7d5c888 100644 --- a/engine/pinball_game/load_stage_data/load_blue_field.asm +++ b/engine/pinball_game/load_stage_data/load_blue_field.asm @@ -86,9 +86,9 @@ Func_1c235: ; 0x1c235 .asm_1c249 xor a .asm_1c24a - call Func_1de4b + call LoadPsyduckOrPoliwagGraphics ld a, [wLeftMapMoveCounter] - call Func_1de6f + call LoadPsyduckOrPoliwagNumberGraphics ld a, [hGameBoyColorFlag] and a jr z, .asm_1c267 @@ -106,7 +106,7 @@ Func_1c235: ; 0x1c235 .asm_1c267 ld a, $8 .asm_1c269 - call Func_1de6f + call LoadPsyduckOrPoliwagNumberGraphics ld a, [wRightMapMoveDiglettFrame] and a jr z, .asm_1c295 @@ -134,10 +134,10 @@ Func_1c235: ; 0x1c235 .asm_1c295 ld a, $2 .asm_1c297 - call Func_1de4b + call LoadPsyduckOrPoliwagGraphics ld a, [wRightMapMoveCounter] add $4 - call Func_1de6f + call LoadPsyduckOrPoliwagNumberGraphics ld a, [hGameBoyColorFlag] and a jr z, .asm_1c2b7 @@ -155,15 +155,15 @@ Func_1c235: ; 0x1c235 .asm_1c2b7 ld a, $9 .asm_1c2b9 - call Func_1de6f + call LoadPsyduckOrPoliwagNumberGraphics ret .asm_1c2bd ld a, $6 - call Func_1de4b + call LoadPsyduckOrPoliwagGraphics ld a, [wRightMapMoveCounter] add $4 - call Func_1de6f + call LoadPsyduckOrPoliwagNumberGraphics ret Func_1c2cb: ; 0x1c2cb diff --git a/engine/pinball_game/load_stage_data/load_red_field.asm b/engine/pinball_game/load_stage_data/load_red_field.asm index 1464b82..1e40057 100644 --- a/engine/pinball_game/load_stage_data/load_red_field.asm +++ b/engine/pinball_game/load_stage_data/load_red_field.asm @@ -120,9 +120,9 @@ Func_140f9: ; 0x140f9 ld [wStageCollisionMap + $103], a ld a, $2 .asm_1410c - call Func_149d9 + call LoadDiglettGraphics ld a, [wLeftMapMoveCounter] - call Func_149f5 + call LoadDiglettNumberGraphics ld a, [wd4f1] and a jr z, .asm_14127 @@ -133,10 +133,10 @@ Func_140f9: ; 0x140f9 ld a, $2 .asm_14127 add $3 - call Func_149d9 + call LoadDiglettGraphics ld a, [wRightMapMoveCounter] add $4 - call Func_149f5 + call LoadDiglettNumberGraphics ret Func_14135: ; 0x14135 diff --git a/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm index 512e81e..7b79312 100644 --- a/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm +++ b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm @@ -16,7 +16,7 @@ ResolveBlueFieldTopGameObjectCollisions: ; 0x1c715 call Func_1f18a callba Func_146a9 call Func_1f27b - call Func_1df15 + call UpdateMapMoveCounters_BlueFieldTop callba HandleExtraBall ld a, $0 callba Func_10000 @@ -41,7 +41,7 @@ ResolveBlueFieldBottomGameObjectCollisions: ; 0x1c769 callba Func_14733 callba Func_146a2 call Func_1f261 - call Func_1de93 + call UpdateMapMoveCounters_BlueFieldBottom callba HandleExtraBall ld a, $0 callba Func_10000 @@ -524,3234 +524,1491 @@ UpdateSpinnerChargeGraphics_BlueField: ; 0x1cb43 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 +INCLUDE "data/queued_tiledata/blue_field/spinner.asm" -TileData_1cb99: ; 0x1cb99 - db $02 - dw TileData_1cc34 - dw TileData_1cc3e +ResolveBlueStageBumperCollision: ; 1ce40 + ld a, [wWhichBumper] + and a + jr z, .asm_1ce53 + call LoadBumperCollisionGraphics_BlueField + call Func_1ce60 + xor a + ld [wWhichBumper], a + call ApplyBumperCollision_BlueField +.asm_1ce53 + ld a, [wd4da] + and a + ret z + dec a + ld [wd4da], a + call z, LoadBumperCollisionGraphics_BlueField + ret -TileData_1cb9e: ; 0x1cb9e - db $02 - dw TileData_1cc48 - dw TileData_1cc52 +Func_1ce60: ; 0x1ce60 + ld a, $10 + ld [wd4da], a + ld a, [wWhichBumperId] + sub $1 + ld [wd4db], a + sla a + inc a + jr asm_1ce7a -TileData_1cba3: ; 0x1cba3 - db $02 - dw TileData_1cc5c - dw TileData_1cc66 +LoadBumperCollisionGraphics_BlueField: ; 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 -TileData_1cba8: ; 0x1cba8 - db $02 - dw TileData_1cc70 - dw TileData_1cc7a +ApplyBumperCollision_BlueField: ; 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, BumperCollisionAngleDeltas_BlueField + add hl, bc + ld a, [wCollisionForceAngle] + add [hl] + ld [wCollisionForceAngle], a + lb de, $00, $0b + call PlaySoundEffect + ret -TileData_1cbad: ; 0x1cbad - db $02 - dw TileData_1cc84 - dw TileData_1cc8e +BumperCollisionAngleDeltas_BlueField: + db -8, 8 -TileData_1cbb2: ; 0x1cbb2 - db $02 - dw TileData_1cc98 - dw TileData_1cca2 +INCLUDE "data/queued_tiledata/blue_field/bumpers.asm" -TileData_1cbb7: ; 0x1cbb7 - db $02 - dw TileData_1ccac - dw TileData_1ccb6 +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, wCollidedAlleyTriggers + add hl, bc + ld [hl], $1 + ld a, [wCollidedAlleyTriggers + 0] + and a + call nz, HandleSecondaryLeftAlleyTrigger_BlueField + ld a, [wCollidedAlleyTriggers + 1] + and a + call nz, HandleSecondaryRightAlleyTrigger_BlueField + ld a, [wCollidedAlleyTriggers + 2] + and a + call nz, HandleLeftAlleyTrigger_BlueField + ld a, [wCollidedAlleyTriggers + 3] + and a + call nz, HandleRightAlleyTrigger_BlueField + ret -TileData_1cbbc: ; 0x1cbbc - db $02 - dw TileData_1ccc0 - dw TileData_1ccca +HandleSecondaryLeftAlleyTrigger_BlueField: ; 0x1d010 +; Ball passed over the secondary left alley trigger point in the Blue Field. + xor a + ld [wCollidedAlleyTriggers + 0], 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 -TileData_1cbc1: ; 0x1cbc1 - db $02 - dw TileData_1ccd4 - dw TileData_1ccde +.asm_1d03e + ld [wIndicatorStates], a + ld a, $80 + ld [wIndicatorStates + 2], a + ret -TileData_1cbc6: ; 0x1cbc6 - db $02 - dw TileData_1cce8 - dw TileData_1ccf2 +HandleSecondaryRightAlleyTrigger_BlueField: ; 0x1d047 +; Ball passed over the secondary right alley trigger point in the Blue Field. + xor a + ld [wCollidedAlleyTriggers + 1], 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 -TileData_1cbcb: ; 0x1cbcb - db $02 - dw TileData_1ccfc - dw TileData_1cd06 +HandleLeftAlleyTrigger_BlueField: ; 0x1d080 +; Ball passed over the left alley trigger point in the Blue Field. + xor a + ld [wCollidedAlleyTriggers + 2], a + ld [wRightAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $1 + ld [wLeftAlleyTrigger], a + ret c + ret -TileData_1cbd0: ; 0xcbd0 - dw Func_11d2 - db $20, $02 - dw vTilesBG tile $6C - dw StageBlueFieldTopBaseGameBoyGfx + $c20 - db Bank(StageBlueFieldTopBaseGameBoyGfx) - db $00 ; terminator +HandleRightAlleyTrigger_BlueField: ; 0x1d091 +; Ball passed over the right alley trigger point in the Blue Field. + xor a + ld [wCollidedAlleyTriggers + 3], a + ld [wLeftAlleyTrigger], a + ld [wSecondaryLeftAlleyTrigger], a + ld a, $1 + ld [wRightAlleyTrigger], a + ret -TileData_1cbda: ; 0xcbda - dw Func_11d2 - db $20, $02 - dw vTilesBG tile $6E - dw StageBlueFieldTopBaseGameBoyGfx + $c40 - db Bank(StageBlueFieldTopBaseGameBoyGfx) - db $00 ; terminator +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, wPikachuSaverAnimation + call InitAnimation + 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 [wEnableBallGravityAndTilt], a + call FillBottomMessageBufferWithBlackTile + jr .asm_1d110 -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 - -ResolveBlueStageBumperCollision: ; 1ce40 - ld a, [wWhichBumper] - and a - jr z, .asm_1ce53 - call LoadBumperCollisionGraphics_BlueField - call Func_1ce60 - xor a - ld [wWhichBumper], a - call ApplyBumperCollision_BlueField -.asm_1ce53 - ld a, [wd4da] - and a - ret z - dec a - ld [wd4da], a - call z, LoadBumperCollisionGraphics_BlueField - 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 - -LoadBumperCollisionGraphics_BlueField: ; 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 - -ApplyBumperCollision_BlueField: ; 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, BumperCollisionAngleDeltas_BlueField - add hl, bc - ld a, [wCollisionForceAngle] - add [hl] - ld [wCollisionForceAngle], a - lb de, $00, $0b - call PlaySoundEffect - ret - -BumperCollisionAngleDeltas_BlueField: - 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, wCollidedAlleyTriggers - add hl, bc - ld [hl], $1 - ld a, [wCollidedAlleyTriggers + 0] - and a - call nz, HandleSecondaryLeftAlleyTrigger_BlueField - ld a, [wCollidedAlleyTriggers + 1] - and a - call nz, HandleSecondaryRightAlleyTrigger_BlueField - ld a, [wCollidedAlleyTriggers + 2] - and a - call nz, HandleLeftAlleyTrigger_BlueField - ld a, [wCollidedAlleyTriggers + 3] - and a - call nz, HandleRightAlleyTrigger_BlueField - ret - -HandleSecondaryLeftAlleyTrigger_BlueField: ; 0x1d010 -; Ball passed over the secondary left alley trigger point in the Blue Field. - xor a - ld [wCollidedAlleyTriggers + 0], 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 - -HandleSecondaryRightAlleyTrigger_BlueField: ; 0x1d047 -; Ball passed over the secondary right alley trigger point in the Blue Field. - xor a - ld [wCollidedAlleyTriggers + 1], 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 - -HandleLeftAlleyTrigger_BlueField: ; 0x1d080 -; Ball passed over the left alley trigger point in the Blue Field. - xor a - ld [wCollidedAlleyTriggers + 2], a - ld [wRightAlleyTrigger], a - ld [wSecondaryLeftAlleyTrigger], a - ld a, $1 - ld [wLeftAlleyTrigger], a - ret c - ret - -HandleRightAlleyTrigger_BlueField: ; 0x1d091 -; Ball passed over the right alley trigger point in the Blue Field. - xor a - ld [wCollidedAlleyTriggers + 3], 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, wPikachuSaverAnimation - call InitAnimation - 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 [wEnableBallGravityAndTilt], a - call FillBottomMessageBufferWithBlackTile - jr .asm_1d110 - -.asm_1d0fc - ld hl, PikachuSaverAnimation2DataRedStage - ld de, wPikachuSaverAnimation - call InitAnimation - 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, wPikachuSaverAnimation - call UpdateAnimation - ret nc - ld a, [wPikachuSaverAnimationIndex] - 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, wNumPikachuSaves - call Increment_Max100 - jr nc, .asm_1d185 - ld c, $a - call Modulo_C - callba z, IncrementBonusMultiplierFromFieldEvent -.asm_1d185 - lb de, $16, $10 - call PlaySoundEffect - ret - -.asm_1d18c - ld a, [wPikachuSaverAnimationIndex] - cp $11 - ret nz - ld a, $fc - ld [wBallYVelocity + 1], a - ld a, $1 - ld [wEnableBallGravityAndTilt], 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, wPikachuSaverAnimation - call UpdateAnimation - ret nc - ld a, [wPikachuSaverAnimationIndex] - 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, wSlowpokeAnimation - call InitAnimation - 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 [wEnableBallGravityAndTilt], a -.asm_1d253 - ld hl, SlowpokeCollisionAnimationData ; 0x1d312 - ld de, wSlowpokeAnimation - call UpdateAnimation - push af - ld a, [wSlowpokeAnimation] - and a - jr nz, .asm_1d271 - ld a, $19 - ld [wSlowpokeAnimationFrameCounter], a - xor a - ld [wSlowpokeAnimationFrame], a - ld a, $6 - ld [wSlowpokeAnimationIndex], a -.asm_1d271 - pop af - ret nc - ld a, [wSlowpokeAnimationIndex] - cp $1 - jr nz, .asm_1d2b6 - xor a - ld [wPinballIsVisible], a - ld a, [wLeftAlleyCount] - cp $3 - jr nz, .asm_1d299 - callba StartEvolutionMode - ld a, [wd643] - and a - ret z - ld a, $1 - ld [wd642], a -.asm_1d299 - ld hl, wNumSlowpokeEntries - call Increment_Max100 - ld hl, wNumBellsproutEntries ; This is an oversight. No need to tally bellsprout. - call Increment_Max100 - ret nc - ld c, $19 - call Modulo_C - callba z, IncrementBonusMultiplierFromFieldEvent - ret - -.asm_1d2b6 - ld a, [wSlowpokeAnimationIndex] - cp $4 - jr nz, .asm_1d2c3 - ld a, $1 - ld [wPinballIsVisible], a - ret - -.asm_1d2c3 - ld a, [wSlowpokeAnimationIndex] - cp $5 - ret nz - ld a, $1 - ld [wEnableBallGravityAndTilt], 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 [wBlueFieldForceFieldFrameCounter], a - ld [wBlueFieldForceFieldSecondsCounter], a - ld a, $1 - ld [wBlueStageForceFieldFlippedDown], a - ld a, $2 ; down direction - ld [wBlueStageForceFieldDirection], a - ld a, $1 - ld [wBlueStageForceFieldGfxNeedsLoading], 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, wCloysterAnimation - call InitAnimation - 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 [wEnableBallGravityAndTilt], a -.asm_1d36a - ld hl, CloysterCollisionAnimationData - ld de, wCloysterAnimation - call UpdateAnimation - push af - ld a, [wCloysterAnimationFrameCounter] - and a - jr nz, .asm_1d388 - ld a, $19 - ld [wCloysterAnimationFrameCounter], a - xor a - ld [wCloysterAnimationFrame], a - ld a, $6 - ld [wCloysterAnimationIndex], a -.asm_1d388 - pop af - ret nc - ld a, [wCloysterAnimationIndex] - cp $1 - jr nz, .asm_1d3cb - xor a - ld [wPinballIsVisible], 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, wNumCloysterEntries - call Increment_Max100 - ld hl, wNumBellsproutEntries - call Increment_Max100 - ret nc - ld c, $19 - call Modulo_C - callba z, IncrementBonusMultiplierFromFieldEvent - ret - -.asm_1d3cb - ld a, [wCloysterAnimationIndex] - cp $4 - jr nz, .asm_1d3d8 - ld a, $1 - ld [wPinballIsVisible], a - ret - -.asm_1d3d8 - ld a, [wCloysterAnimationIndex] - cp $5 - ret nz - ld a, $1 - ld [wEnableBallGravityAndTilt], 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 [wBlueFieldForceFieldFrameCounter], a - ld [wBlueFieldForceFieldSecondsCounter], a - ld a, $1 - ld [wBlueStageForceFieldFlippedDown], a - ld a, $2 ; down direction - ld [wBlueStageForceFieldDirection], a - ld a, $1 - ld [wBlueStageForceFieldGfxNeedsLoading], 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, UpdateBonusMultiplierRailing_BlueField - xor a - ld [wWhichBonusMultiplierRailing], a - lb de, $00, $0d - call PlaySoundEffect - ld a, [wWhichBonusMultiplierRailingId] - sub $f - jr nz, .hitRightRailing - ld a, [hGameBoyColorFlag] - and a - jr nz, .asm_1d45c - ld a, $1f - jr .asm_1d45e - -.asm_1d45c - ld a, $29 -.asm_1d45e - call LoadBonusMultiplierRailingGraphics_BlueField - 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, [wBonusMultiplierTensDigit] - set 7, a - ld [wBonusMultiplierTensDigit], a - jr asm_1d4fa - -.hitRightRailing - ld a, [hGameBoyColorFlag] - and a - jr nz, .asm_1d497 - ld a, $21 - jr .asm_1d499 - -.asm_1d497 - ld a, $2b -.asm_1d499 - call LoadBonusMultiplierRailingGraphics_BlueField - 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, [wBonusMultiplierOnesDigit] - set 7, a - ld [wBonusMultiplierOnesDigit], a - ld a, [wCurBonusMultiplier] - inc a - cp MAX_BONUS_MULTIPLIER + 1 - jr c, .setNewBonusMultplier - ld a, MAX_BONUS_MULTIPLIER -.setNewBonusMultplier - ld [wCurBonusMultiplier], a - jr nc, .asm_1d4e9 - ld c, $19 - call Modulo_C - callba z, IncrementBonusMultiplierFromFieldEvent -.asm_1d4e9 - ld a, [wBonusMultiplierTensDigit] - ld [wd614], a - ld a, [wBonusMultiplierOnesDigit] - ld [wd615], a - ld a, $1 - ld [wd613], a -asm_1d4fa: ; 0x1d4fa - ld bc, TenPoints - callba AddBigBCD6FromQueueWithBallMultiplier - ld a, [wBonusMultiplierTensDigit] - call LoadBonusMultiplierRailingGraphics_BlueField - ld a, [wBonusMultiplierOnesDigit] - add $14 - call LoadBonusMultiplierRailingGraphics_BlueField - ld a, $3c - ld [wd647], a - ret - -UpdateBonusMultiplierRailing_BlueField: ; 0x1d51b - call ShowBonusMultiplierMessage_BlueField ; only shows the scrolling message when appropriate - 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, [wCurBonusMultiplier] - call GetBCDForNextBonusMultiplier_BlueField - ld a, [wBonusMultiplierTensDigit] - call LoadBonusMultiplierRailingGraphics_BlueField - ld a, [wBonusMultiplierOnesDigit] - add $14 - call LoadBonusMultiplierRailingGraphics_BlueField - 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, [wBonusMultiplierTensDigit] - res 7, a - ld [wBonusMultiplierTensDigit], a - call LoadBonusMultiplierRailingGraphics_BlueField - jr .asm_1d58b - -.asm_1d580 - ld a, [wBonusMultiplierTensDigit] - set 7, a - ld [wBonusMultiplierTensDigit], a - call LoadBonusMultiplierRailingGraphics_BlueField -.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, [wBonusMultiplierOnesDigit] - res 7, a - ld [wBonusMultiplierOnesDigit], a - add $14 - call LoadBonusMultiplierRailingGraphics_BlueField - ret - -.asm_1d5b1 - ld a, [wBonusMultiplierOnesDigit] - set 7, a - ld [wBonusMultiplierOnesDigit], a - add $14 - call LoadBonusMultiplierRailingGraphics_BlueField - ret - -ShowBonusMultiplierMessage_BlueField: ; 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 - -LoadBonusMultiplierRailingGraphics_BlueField: ; 0x1d5f2 - push af - ld a, [hGameBoyColorFlag] - and a - jr nz, .gameboyColor - pop af - call LoadBonusMultiplierRailingGraphics_BlueField_Gameboy - ret - -.gameboyColor - pop af - call LoadBonusMultiplierRailingGraphics_BlueField_GameboyColor - ret - -LoadBonusMultiplierRailingGraphics_BlueField_Gameboy: ; 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, BonusMultiplierRailingTileDataPointers_1d6be - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, Bank(BonusMultiplierRailingTileDataPointers_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, BonusMultiplierRailingTileDataPointers_1d946 - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, Bank(BonusMultiplierRailingTileDataPointers_1d946) - call Func_10aa - ret - -LoadBonusMultiplierRailingGraphics_BlueField_GameboyColor: ; 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, BonusMultiplierRailingTileDataPointers_1d97a - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, Bank(BonusMultiplierRailingTileDataPointers_1d97a) - call Func_10aa - ret - -GetBCDForNextBonusMultiplier_BlueField: ; 0x1d65f -; Gets the BCD representation of the next bonus multplier value. -; Output: [wBonusMultiplierTensDigit] = the tens digit -; [wBonusMultiplierOnesDigit] = the ones digit - ld a, [wCurBonusMultiplier] - inc a - cp MAX_BONUS_MULTIPLIER + 1 - jr c, .max99 - ld a, MAX_BONUS_MULTIPLIER -.max99 - ld b, a - xor a - ld hl, Data_1d68b - ld c, $7 -.loop - bit 0, b - jr z, .evenNumber - add [hl] - daa -.evenNumber - srl b - inc hl - dec c - jr nz, .loop - push af - swap a - and $f - ld [wBonusMultiplierTensDigit], a - pop af - and $f - ld [wBonusMultiplierOnesDigit], 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 LoadBonusMultiplierRailingGraphics_BlueField - ld a, $20 - call LoadBonusMultiplierRailingGraphics_BlueField - ret - -.asm_1d6b3 - ld a, $2a - call LoadBonusMultiplierRailingGraphics_BlueField - ld a, $28 - call LoadBonusMultiplierRailingGraphics_BlueField - ret - -INCLUDE "data/queued_tiledata/blue_field/bonus_multiplier_railings.asm" - -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 [wStageCollisionMap + $e3], a - ld a, $55 - ld [wStageCollisionMap + $103], 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 [wStageCollisionMap + $f0], a - ld a, $53 - ld [wStageCollisionMap + $110], 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 [wStageCollisionMap + $e3], a - ld a, $5f - ld [wStageCollisionMap + $103], 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 [wStageCollisionMap + $f0], a - ld a, $25 - ld [wStageCollisionMap + $110], 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, wNumPoliwagTriples - call Increment_Max100 - ld hl, wNumDugtrioTriples - call Increment_Max100 - jr nc, .asm_1dde4 - ld c, $a - call Modulo_C - callba z, IncrementBonusMultiplierFromFieldEvent -.asm_1dde4 - xor a - ld [wd55a], a - callba StartMapMoveMode - scf - ret - -Func_1ddf4: ; 0x1ddf4 - ld hl, wNumPsyduckTriples - call Increment_Max100 - ld hl, wNumDugtrioTriples - call Increment_Max100 - jr nc, .asm_1de11 - ld c, $a - call Modulo_C - callba z, IncrementBonusMultiplierFromFieldEvent -.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 +.asm_1d0fc + ld hl, PikachuSaverAnimation2DataRedStage + ld de, wPikachuSaverAnimation + call InitAnimation + 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 -TileData_1e19a: ; 0x1e19a - dw Func_11d2 - db $30, $03 - dw vTilesBG tile $5A - dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2210 - db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) - db $00 +Func_1d133: ; 0x1d133 + ld a, [wd51c] + cp $1 + jr nz, .asm_1d1ae + ld hl, PikachuSaverAnimationDataRedStage + ld de, wPikachuSaverAnimation + call UpdateAnimation + ret nc + ld a, [wPikachuSaverAnimationIndex] + 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, wNumPikachuSaves + call Increment_Max100 + jr nc, .asm_1d185 + ld c, $a + call Modulo_C + callba z, IncrementBonusMultiplierFromFieldEvent +.asm_1d185 + lb de, $16, $10 + call PlaySoundEffect + ret -TileData_1e1a4: ; 0x1e1a4 - dw Func_11d2 - db $20, $02 - dw vTilesBG tile $58 - dw StageRedFieldBottomIndicatorsGfx_Gameboy + $21C0 - db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) - db $00 +.asm_1d18c + ld a, [wPikachuSaverAnimationIndex] + cp $11 + ret nz + ld a, $fc + ld [wBallYVelocity + 1], a + ld a, $1 + ld [wEnableBallGravityAndTilt], a + ld bc, FiveThousandPoints + callba AddBigBCD6FromQueueWithBallMultiplier + xor a + ld [wd51c], a + ret -TileData_1e1ae: ; 0x1e1ae - dw Func_11d2 - db $30, $03 - dw vTilesBG tile $5A - dw StageRedFieldBottomIndicatorsGfx_Gameboy + $2240 - db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) - db $00 +.asm_1d1ae + cp $2 + jr nz, .asm_1d1c7 + ld hl, PikachuSaverAnimation2DataRedStage + ld de, wPikachuSaverAnimation + call UpdateAnimation + ret nc + ld a, [wPikachuSaverAnimationIndex] + cp $1 + ret nz + xor a + ld [wd51c], a + ret -TileData_1e1b8: ; 0x1e1b8 - dw Func_11d2 - db $30, $03 - dw vTilesBG tile $44 - dw StageBlueFieldBottomBaseGameBoyGfx + $C40 - db Bank(StageBlueFieldBottomBaseGameBoyGfx) - db $00 +.asm_1d1c7 + ld a, [hNumFramesDropped] + swap a + and $1 + ld [wPikachuSaverAnimationFrame], a + ret -TileData_1e1c2: ; 0x1e1c2 - dw Func_11d2 - db $30, $03 - dw vTilesBG tile $47 - dw StageBlueFieldBottomBaseGameBoyGfx + $C70 - db Bank(StageBlueFieldBottomBaseGameBoyGfx) +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 -TileData_1e1cc: ; 0x1e1cc - dw Func_11d2 - db $20, $02 - dw vTilesBG tile $58 - dw StageBlueFieldBottomBaseGameBoyGfx + $D80 - db Bank(StageBlueFieldBottomBaseGameBoyGfx) +PikachuSaverAnimation2DataRedStage: ; 0x1d1f6 +; Each entry is [duration][OAM id] + db $0C, $02 + db $01, $00 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 +Func_1d1fb: ; 0x1d1fb + ld hl, wKeyConfigLeftFlipper + call IsKeyPressed2 + jr z, .asm_1d209 + ld hl, wd518 + ld [hl], $0 + ret - db $03 ; number of tiles - dw vBGMap + $80 - db $42, $43, $3B +.asm_1d209 + ld hl, wKeyConfigRightFlipper + call IsKeyPressed2 + ret z + ld hl, wd518 + ld [hl], $1 + ret - db $03 ; number of tiles - dw vBGMap + $A0 - db $52, $53, $54 +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, wSlowpokeAnimation + call InitAnimation + 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 [wEnableBallGravityAndTilt], a +.asm_1d253 + ld hl, SlowpokeCollisionAnimationData ; 0x1d312 + ld de, wSlowpokeAnimation + call UpdateAnimation + push af + ld a, [wSlowpokeAnimation] + and a + jr nz, .asm_1d271 + ld a, $19 + ld [wSlowpokeAnimationFrameCounter], a + xor a + ld [wSlowpokeAnimationFrame], a + ld a, $6 + ld [wSlowpokeAnimationIndex], a +.asm_1d271 + pop af + ret nc + ld a, [wSlowpokeAnimationIndex] + cp $1 + jr nz, .asm_1d2b6 + xor a + ld [wPinballIsVisible], a + ld a, [wLeftAlleyCount] + cp $3 + jr nz, .asm_1d299 + callba StartEvolutionMode + ld a, [wd643] + and a + ret z + ld a, $1 + ld [wd642], a +.asm_1d299 + ld hl, wNumSlowpokeEntries + call Increment_Max100 + ld hl, wNumBellsproutEntries ; This is an oversight. No need to tally bellsprout. + call Increment_Max100 + ret nc + ld c, $19 + call Modulo_C + callba z, IncrementBonusMultiplierFromFieldEvent + ret - db $03 ; number of tiles - dw vBGMap + $C0 - db $55, $56, $57 +.asm_1d2b6 + ld a, [wSlowpokeAnimationIndex] + cp $4 + jr nz, .asm_1d2c3 + ld a, $1 + ld [wPinballIsVisible], a + ret - db $00 ; terminator +.asm_1d2c3 + ld a, [wSlowpokeAnimationIndex] + cp $5 + ret nz + ld a, $1 + ld [wEnableBallGravityAndTilt], 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 [wBlueFieldForceFieldFrameCounter], a + ld [wBlueFieldForceFieldSecondsCounter], a + ld a, $1 + ld [wBlueStageForceFieldFlippedDown], a + ld a, $2 ; down direction + ld [wBlueStageForceFieldDirection], a + ld a, $1 + ld [wBlueStageForceFieldGfxNeedsLoading], a + ret -TileData_1e270: ; 0x1e270 - dw LoadTileLists - db $0C ; total number of tiles +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 - db $03 ; number of tiles - dw vBGMap + $60 - db $36, $46, $47 +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, wCloysterAnimation + call InitAnimation + 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 [wEnableBallGravityAndTilt], a +.asm_1d36a + ld hl, CloysterCollisionAnimationData + ld de, wCloysterAnimation + call UpdateAnimation + push af + ld a, [wCloysterAnimationFrameCounter] + and a + jr nz, .asm_1d388 + ld a, $19 + ld [wCloysterAnimationFrameCounter], a + xor a + ld [wCloysterAnimationFrame], a + ld a, $6 + ld [wCloysterAnimationIndex], a +.asm_1d388 + pop af + ret nc + ld a, [wCloysterAnimationIndex] + cp $1 + jr nz, .asm_1d3cb + xor a + ld [wPinballIsVisible], 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, wNumCloysterEntries + call Increment_Max100 + ld hl, wNumBellsproutEntries + call Increment_Max100 + ret nc + ld c, $19 + call Modulo_C + callba z, IncrementBonusMultiplierFromFieldEvent + ret - db $03 ; number of tiles - dw vBGMap + $80 - db $48, $49, $4A +.asm_1d3cb + ld a, [wCloysterAnimationIndex] + cp $4 + jr nz, .asm_1d3d8 + ld a, $1 + ld [wPinballIsVisible], a + ret - db $03 ; number of tiles - dw vBGMap + $A0 - db $52, $53, $54 +.asm_1d3d8 + ld a, [wCloysterAnimationIndex] + cp $5 + ret nz + ld a, $1 + ld [wEnableBallGravityAndTilt], 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 [wBlueFieldForceFieldFrameCounter], a + ld [wBlueFieldForceFieldSecondsCounter], a + ld a, $1 + ld [wBlueStageForceFieldFlippedDown], a + ld a, $2 ; down direction + ld [wBlueStageForceFieldDirection], a + ld a, $1 + ld [wBlueStageForceFieldGfxNeedsLoading], a + ret - db $03 ; number of tiles - dw vBGMap + $C0 - db $55, $56, $57 +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 - db $00 ; terminator +ResolveBlueStageBonusMultiplierCollision: ; 0x1d438 + call Func_1d692 + ld a, [wWhichBonusMultiplierRailing] + and a + jp z, UpdateBonusMultiplierRailing_BlueField + xor a + ld [wWhichBonusMultiplierRailing], a + lb de, $00, $0d + call PlaySoundEffect + ld a, [wWhichBonusMultiplierRailingId] + sub $f + jr nz, .hitRightRailing + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1d45c + ld a, $1f + jr .asm_1d45e -TileData_1e28c: ; 0x1e28c - dw LoadTileLists - db $09 ; total number of tiles +.asm_1d45c + ld a, $29 +.asm_1d45e + call LoadBonusMultiplierRailingGraphics_BlueField + 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, [wBonusMultiplierTensDigit] + set 7, a + ld [wBonusMultiplierTensDigit], a + jr asm_1d4fa - db $03 ; number of tiles - dw vBGMap + $91 - db $4D, $65, $4E +.hitRightRailing + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1d497 + ld a, $21 + jr .asm_1d499 - db $03 ; number of tiles - dw vBGMap + $B1 - db $66, $67, $68 +.asm_1d497 + ld a, $2b +.asm_1d499 + call LoadBonusMultiplierRailingGraphics_BlueField + 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, [wBonusMultiplierOnesDigit] + set 7, a + ld [wBonusMultiplierOnesDigit], a + ld a, [wCurBonusMultiplier] + inc a + cp MAX_BONUS_MULTIPLIER + 1 + jr c, .setNewBonusMultplier + ld a, MAX_BONUS_MULTIPLIER +.setNewBonusMultplier + ld [wCurBonusMultiplier], a + jr nc, .asm_1d4e9 + ld c, $19 + call Modulo_C + callba z, IncrementBonusMultiplierFromFieldEvent +.asm_1d4e9 + ld a, [wBonusMultiplierTensDigit] + ld [wd614], a + ld a, [wBonusMultiplierOnesDigit] + ld [wd615], a + ld a, $1 + ld [wd613], a +asm_1d4fa: ; 0x1d4fa + ld bc, TenPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ld a, [wBonusMultiplierTensDigit] + call LoadBonusMultiplierRailingGraphics_BlueField + ld a, [wBonusMultiplierOnesDigit] + add $14 + call LoadBonusMultiplierRailingGraphics_BlueField + ld a, $3c + ld [wd647], a + ret - db $03 ; number of tiles - dw vBGMap + $D1 - db $69, $6A, $6B +UpdateBonusMultiplierRailing_BlueField: ; 0x1d51b + call ShowBonusMultiplierMessage_BlueField ; only shows the scrolling message when appropriate + 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 - db $00 ; terminator +.asm_1d538 + and a + jr nz, .asm_1d559 + ld a, $3 + ld [wd610], a + xor a + ld [wd611], a + ld a, [wCurBonusMultiplier] + call GetBCDForNextBonusMultiplier_BlueField + ld a, [wBonusMultiplierTensDigit] + call LoadBonusMultiplierRailingGraphics_BlueField + ld a, [wBonusMultiplierOnesDigit] + add $14 + call LoadBonusMultiplierRailingGraphics_BlueField + ret -TileData_1e2a2: ; 0x1e2a2 - dw LoadTileLists - db $09 ; total number of tiles +.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, [wBonusMultiplierTensDigit] + res 7, a + ld [wBonusMultiplierTensDigit], a + call LoadBonusMultiplierRailingGraphics_BlueField + jr .asm_1d58b - db $03 ; number of tiles - dw vBGMap + $91 - db $4D, $6C, $4E +.asm_1d580 + ld a, [wBonusMultiplierTensDigit] + set 7, a + ld [wBonusMultiplierTensDigit], a + call LoadBonusMultiplierRailingGraphics_BlueField +.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, [wBonusMultiplierOnesDigit] + res 7, a + ld [wBonusMultiplierOnesDigit], a + add $14 + call LoadBonusMultiplierRailingGraphics_BlueField + ret - db $03 ; number of tiles - dw vBGMap + $B1 - db $6D, $6E, $68 +.asm_1d5b1 + ld a, [wBonusMultiplierOnesDigit] + set 7, a + ld [wBonusMultiplierOnesDigit], a + add $14 + call LoadBonusMultiplierRailingGraphics_BlueField + ret - db $03 ; number of tiles - dw vBGMap + $D1 - db $6F, $70, $6B +ShowBonusMultiplierMessage_BlueField: ; 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 - db $00 ; terminator +LoadBonusMultiplierRailingGraphics_BlueField: ; 0x1d5f2 + push af + ld a, [hGameBoyColorFlag] + and a + jr nz, .gameboyColor + pop af + call LoadBonusMultiplierRailingGraphics_BlueField_Gameboy + ret -TileData_1e2b8: ; 0x1e2b8 - dw LoadTileLists - db $09 ; total number of tiles +.gameboyColor + pop af + call LoadBonusMultiplierRailingGraphics_BlueField_GameboyColor + ret - db $03 ; number of tiles - dw vBGMap + $91 - db $4D, $6C, $4E +LoadBonusMultiplierRailingGraphics_BlueField_Gameboy: ; 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, BonusMultiplierRailingTileDataPointers_1d6be + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(BonusMultiplierRailingTileDataPointers_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, BonusMultiplierRailingTileDataPointers_1d946 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(BonusMultiplierRailingTileDataPointers_1d946) + call Func_10aa + ret - db $03 ; number of tiles - dw vBGMap + $B1 - db $66, $72, $68 +LoadBonusMultiplierRailingGraphics_BlueField_GameboyColor: ; 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, BonusMultiplierRailingTileDataPointers_1d97a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, Bank(BonusMultiplierRailingTileDataPointers_1d97a) + call Func_10aa + ret - db $03 ; number of tiles - dw vBGMap + $D1 - db $69, $73, $6B +GetBCDForNextBonusMultiplier_BlueField: ; 0x1d65f +; Gets the BCD representation of the next bonus multplier value. +; Output: [wBonusMultiplierTensDigit] = the tens digit +; [wBonusMultiplierOnesDigit] = the ones digit + ld a, [wCurBonusMultiplier] + inc a + cp MAX_BONUS_MULTIPLIER + 1 + jr c, .max99 + ld a, MAX_BONUS_MULTIPLIER +.max99 + ld b, a + xor a + ld hl, Data_1d68b + ld c, $7 +.loop + bit 0, b + jr z, .evenNumber + add [hl] + daa +.evenNumber + srl b + inc hl + dec c + jr nz, .loop + push af + swap a + and $f + ld [wBonusMultiplierTensDigit], a + pop af + and $f + ld [wBonusMultiplierOnesDigit], a + ret - db $00 ; terminator +Data_1d68b: +; BCD powers of 2 + db $01, $02, $04, $08, $16, $32, $64 -TileData_1e2ce: ; 0x1e2ce - dw LoadTileLists - db $09 ; total number of tiles +Func_1d692: ; 0x1d692 + ld a, [wd647] + cp $1 + jr z, .asm_1d69e + dec a + ld [wd647], a + ret - db $03 ; number of tiles - dw vBGMap + $91 - db $4D, $75, $4E +.asm_1d69e + ld a, $0 + ld [wd647], a + ld a, [hGameBoyColorFlag] + and a + jr nz, .asm_1d6b3 + ld a, $1e + call LoadBonusMultiplierRailingGraphics_BlueField + ld a, $20 + call LoadBonusMultiplierRailingGraphics_BlueField + ret - db $03 ; number of tiles - dw vBGMap + $B1 - db $66, $76, $77 +.asm_1d6b3 + ld a, $2a + call LoadBonusMultiplierRailingGraphics_BlueField + ld a, $28 + call LoadBonusMultiplierRailingGraphics_BlueField + ret - db $03 ; number of tiles - dw vBGMap + $D1 - db $69, $78, $79 +INCLUDE "data/queued_tiledata/blue_field/bonus_multiplier_railings.asm" - db $00 ; terminator +ResolvePsyduckPoliwagCollision: ; 0x1dbd2 + ld a, [wWhichPsyduckPoliwag] + and a + jp z, UpdatePsyduckAndPoliwag + cp $2 + jr z, .hitPsyduck + ; hit poliwag + xor a + ld [wWhichPsyduckPoliwag], a + ld hl, wLeftMapMoveCounter + ld a, [hl] + cp $3 + jp z, UpdatePsyduckAndPoliwag + inc a + ld [hl], a + ; Set 8 seconds until the counter will decrease by 1 + ld hl, wLeftMapMoveCounterFramesUntilDecrease + ld a, MAP_MOVE_FRAMES_COUNTER & $ff + ld [hli], a + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 + ld [hl], a + ld a, [wCurrentStage] + bit 0, a + jr z, .skipCollisionMapChange + ld a, $54 + ld [wStageCollisionMap + $e3], a + ld a, $55 + ld [wStageCollisionMap + $103], a +.skipCollisionMapChange + ld a, $1 + call LoadPsyduckOrPoliwagGraphics + ld a, [wLeftMapMoveCounter] + call LoadPsyduckOrPoliwagNumberGraphics + ld a, [wLeftMapMoveCounter] + cp $3 + ld a, $7 + callba Func_10000 + ld a, $2 + ld [wd646], a + ld a, $78 + ld [wLeftMapMovePoliwagAnimationCounter], a + ld a, $14 + ld [wLeftMapMovePoliwagFrame], a + jr .asm_1dc8a -TileData_1e2e4: ; 0x1e2e4 - dw LoadTileLists - db $09 ; total number of tiles +.hitPsyduck + xor a + ld [wWhichPsyduckPoliwag], a + ld hl, wRightMapMoveCounter + ld a, [hl] + cp $3 + jp z, UpdatePsyduckAndPoliwag + inc a + ld [hl], a + ; Set 8 seconds until the counter will decrease by 1 + ld hl, wRightMapMoveCounterFramesUntilDecrease + ld a, MAP_MOVE_FRAMES_COUNTER & $ff + ld [hli], a + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 + ld [hl], a + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1dc5c + ld a, $52 + ld [wStageCollisionMap + $f0], a + ld a, $53 + ld [wStageCollisionMap + $110], a +.asm_1dc5c + ld a, $3 + call LoadPsyduckOrPoliwagGraphics + ld a, [wRightMapMoveCounter] + cp $3 + ld a, $8 + callba Func_10000 + ld a, [wRightMapMoveCounter] + cp $3 + ccf + call z, HitPsyduck3Times + ld a, $2 + ld [wd645], a + ld a, $28 + ld [wRightMapMovePsyduckAnimationCounter], a + ld a, $78 + ld [wRightMapMovePsyduckFrame], a +.asm_1dc8a + call AddScorePsyduckOrPoliwag + ret - db $03 ; number of tiles - dw vBGMap + $80 - db $3F, $3A, $3B +UpdatePsyduckAndPoliwag: ; 0x1dc8e + call UpdatePoliwag + call UpdatePsyduck + ret - db $03 ; number of tiles - dw vBGMap + $A0 - db $4C, $4D, $4E +UpdatePoliwag: ; 0x1dc95 + ld a, [wd646] + cp $0 + ret z + ld a, [wLeftMapMovePoliwagAnimationCounter] + and a + jr z, .asm_1dceb + dec a + ld [wLeftMapMovePoliwagAnimationCounter], a + ld a, [wd644] + and a + ret nz + ld a, [wLeftMapMovePoliwagFrame] + cp $1 + jr z, .asm_1dcb9 + cp $0 + ret z + dec a + ld [wLeftMapMovePoliwagFrame], a + ret - db $03 ; number of tiles - dw vBGMap + $C0 - db $4F, $50, $51 +.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 - db $00 ; terminator +.asm_1dcd4 + xor a + jr .asm_1dcd9 -TileData_1e2fa: ; 0x1e2fa - dw LoadTileLists - db $09 ; total number of tiles +.asm_1dcd7 + ld a, $8 +.asm_1dcd9 + call LoadPsyduckOrPoliwagNumberGraphics + ld a, [wLeftMapMoveCounter] + cp $3 + ccf + call z, HitPoliwag3Times + ld a, $1 + ld [wd646], a + ret - db $03 ; number of tiles - dw vBGMap + $80 - db $44, $45, $3B +.asm_1dceb + ld a, [wd646] + cp $1 + ret nz + ld a, [wLeftMapMovePoliwagAnimationCounter] + and a + ret nz + ld a, $0 + call LoadPsyduckOrPoliwagGraphics + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1dd0c + ld a, $5e + ld [wStageCollisionMap + $e3], a + ld a, $5f + ld [wStageCollisionMap + $103], 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 LoadPsyduckOrPoliwagNumberGraphics + ld a, $0 + call LoadPsyduckOrPoliwagGraphics + ld a, $0 + ld [wd646], a + ret - db $03 ; number of tiles - dw vBGMap + $A0 - db $4C, $4D, $4E +; XXX + ret - db $03 ; number of tiles - dw vBGMap + $C0 - db $4F, $50, $51 +UpdatePsyduck: ; 0x1dd2e + ld a, [wd645] + cp $0 + ret z + cp $1 + jr z, .asm_1dd53 + cp $3 + jr z, .asm_1dd69 + ld a, [wRightMapMovePsyduckAnimationCounter] + cp $0 + jr z, .asm_1dd48 + dec a + ld [wRightMapMovePsyduckAnimationCounter], a + ret - db $00 ; terminator +.asm_1dd48 + ld a, $2 + call LoadPsyduckOrPoliwagGraphics + ld a, $1 + ld [wd645], a + ret -TileData_1e310: ; 0x1e310 - dw LoadTileLists - db $09 ; total number of tiles +.asm_1dd53 + ld a, [wRightMapMoveCounter] + add $4 + call LoadPsyduckOrPoliwagNumberGraphics + ld a, [wRightMapMoveCounter] + add $3 + call LoadPsyduckOrPoliwagGraphics + ld a, $3 + ld [wd645], a + ret - db $03 ; number of tiles - dw vBGMap + $80 - db $39, $4B, $4A +.asm_1dd69 + ld a, [wRightMapMovePsyduckFrame] + and a + jr z, .asm_1dd74 + dec a + ld [wRightMapMovePsyduckFrame], a + ret - db $03 ; number of tiles - dw vBGMap + $A0 - db $4C, $4D, $4E +.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 - db $03 ; number of tiles - dw vBGMap + $C0 - db $4F, $50, $51 +.asm_1dd85 + ld a, $4 + jr .asm_1dd8b - db $00 ; terminator +.asm_1dd89 + ld a, $9 +.asm_1dd8b + call LoadPsyduckOrPoliwagNumberGraphics + ld a, $2 + call LoadPsyduckOrPoliwagGraphics + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1dda9 + ld a, $24 + ld [wStageCollisionMap + $f0], a + ld a, $25 + ld [wStageCollisionMap + $110], 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 LoadPsyduckOrPoliwagNumberGraphics + ld a, $2 + call LoadPsyduckOrPoliwagGraphics + ld a, $0 + ld [wd645], a + ret -TileData_1e326: ; 0x1e326 - dw LoadTileLists - db $06 ; total number of tiles +HitPoliwag3Times: ; 0x1ddc7 + ld hl, wNumPoliwagTriples + call Increment_Max100 + ld hl, wNumDugtrioTriples ; developer oversight + call Increment_Max100 + jr nc, .asm_1dde4 + ld c, $a + call Modulo_C + callba z, IncrementBonusMultiplierFromFieldEvent +.asm_1dde4 + xor a + ld [wd55a], a + callba StartMapMoveMode + scf + ret - db $03 ; number of tiles - dw vBGMap + $91 - db $4D, $65, $4E +HitPsyduck3Times: ; 0x1ddf4 + ld hl, wNumPsyduckTriples + call Increment_Max100 + ld hl, wNumDugtrioTriples ; developer oversight + call Increment_Max100 + jr nc, .asm_1de11 + ld c, $a + call Modulo_C + callba z, IncrementBonusMultiplierFromFieldEvent +.asm_1de11 + ld a, $1 + ld [wd55a], a + callba StartMapMoveMode + scf + ret - db $03 ; number of tiles - dw vBGMap + $B1 - db $6D, $71, $68 +AddScorePsyduckOrPoliwag: ; 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 - db $00 ; terminator +LoadPsyduckOrPoliwagGraphics: ; 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, .gameboyColor + ld hl, TileDataPointers_1e00f +.gameboyColor + 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 -TileData_1e336: ; 0x1e336 - dw LoadTileLists - db $06 ; total number of tiles +LoadPsyduckOrPoliwagNumberGraphics: ; 0x1de6f +; This is for the map move numbers that appears next to poliwag and psyduck. + 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 - db $03 ; number of tiles - dw vBGMap + $91 - db $4D, $65, $4E +UpdateMapMoveCounters_BlueFieldBottom: ; 0x1de93 +; Decrements the two counters that cause the map move counters to decrease by one every 8 seconds. +; Also updates the counter graphics if anything changes. +; The map move counters appear next to Poliwag and Psyduck. + ld hl, wLeftMapMoveCounterFramesUntilDecrease + dec [hl] + ld a, [hli] + cp $ff + jr nz, .checkRightMapMoveCounter + dec [hl] + ld a, [hld] + cp $ff + jr nz, .checkRightMapMoveCounter + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff + ld [hli], a + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 + ld [hl], a + ld a, [wLeftMapMoveCounter] + and a + jr z, .checkRightMapMoveCounter + cp $3 + jr z, .checkRightMapMoveCounter + dec a + ld [wLeftMapMoveCounter], a + call LoadPsyduckOrPoliwagNumberGraphics + ld a, [hGameBoyColorFlag] + and a + jr z, .gameboy + ld a, [wLeftMapMoveCounter] + cp $0 + jr z, .asm_1deca + ld b, $7 + add b + jr .asm_1decf - db $03 ; number of tiles - dw vBGMap + $B1 - db $66, $74, $68 +.asm_1deca + xor a + jr .asm_1decf - db $00 ; terminator +.gameboy + ld a, $8 +.asm_1decf + call LoadPsyduckOrPoliwagNumberGraphics +.checkRightMapMoveCounter + ld hl, wRightMapMoveCounterFramesUntilDecrease + dec [hl] + ld a, [hli] + cp $ff + jr nz, .done + dec [hl] + ld a, [hld] + cp $ff + jr nz, .done + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff + ld [hli], a + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 + ld [hl], a + ld a, [wRightMapMoveCounter] + and a + jr z, .done + cp $3 + jr z, .done + dec a + ld [wRightMapMoveCounter], a + add $4 + call LoadPsyduckOrPoliwagNumberGraphics + ld a, [hGameBoyColorFlag] + and a + jr z, .gameboy_2 + ld a, [wRightMapMoveCounter] + cp $0 + jr z, .asm_1df0b + ld b, $a + add b + jr .asm_1df11 -TileData_1e346: ; 0x1e346 - dw LoadTileLists - db $06 ; total number of tiles +.asm_1df0b + ld a, $4 + jr .asm_1df11 - db $03 ; number of tiles - dw vBGMap + $91 - db $4D, $65, $4E +.gameboy_2 + ld a, $9 +.asm_1df11 + call LoadPsyduckOrPoliwagNumberGraphics +.done + ret - db $03 ; number of tiles - dw vBGMap + $B1 - db $66, $67, $77 +UpdateMapMoveCounters_BlueFieldTop: ; 0x1df15 +; This is identical logic to UpdateMapMoveCounters_BlueFieldTop, but it doesn't load +; any graphics, since Poliwag and Psyduck aren't in the Top half of the Blue Field. + ld b, $0 + ld hl, wLeftMapMoveCounterFramesUntilDecrease + 1 + ld a, [hld] + or [hl] + jr z, .checkRightMapMoveCounter + dec [hl] + ld a, [hli] + cp $ff + jr nz, .checkRightMapMoveCounter + dec [hl] + ld a, [hld] + cp $ff + jr nz, .checkRightMapMoveCounter + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff + ld [hli], a + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 + ld [hl], a + ld a, [wLeftMapMoveCounter] + and a + jr z, .checkRightMapMoveCounter + cp $3 + jr z, .checkRightMapMoveCounter + dec a + ld [wLeftMapMoveCounter], a +.checkRightMapMoveCounter + ld hl, wRightMapMoveCounterFramesUntilDecrease + 1 + ld a, [hld] + or [hl] + jr z, .done + dec [hl] + ld a, [hli] + cp $ff + jr nz, .done + dec [hl] + ld a, [hld] + cp $ff + jr nz, .done + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff + ld [hli], a + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 + ld [hl], a + ld a, [wRightMapMoveCounter] + and a + jr z, .done + cp $3 + jr z, .done + dec a + ld [wRightMapMoveCounter], a +.done + ret - db $00 ; terminator +INCLUDE "data/queued_tiledata/blue_field/poliwag_psyduck.asm" ResolveBlueStagePinballUpgradeTriggersCollision: ; 0x1e356 ld a, [wWhichPinballUpgradeTrigger] @@ -6538,177 +4795,7 @@ Func_1f18a: ; 0x1f18a .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 +INCLUDE "data/queued_tiledata/blue_field/force_field.asm" Func_1f261: ; 0x1f261 call Func_1f27b diff --git a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm index 1076c19..12da6fa 100644 --- a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm +++ b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm @@ -15,7 +15,7 @@ ResolveRedFieldTopGameObjectCollisions: ; 0x1460e call Func_164e3 call Func_146a9 call Func_174ea - call Func_148cf + call UpdateMapMoveCounters_RedFieldTop callba HandleExtraBall ld a, $0 callba Func_10000 @@ -25,7 +25,7 @@ ResolveRedFieldBottomGameObjectCollisions: ; 0x14652 call ResolveWildMonCollision_RedField call ResolveRedStageBumperCollision call ResolveDiglettCollision - call Func_14880 + call UpdateMapMoveCounters_RedFieldBottom call UpdateRedStageSpinner call Func_154a9 call HandleRedStageBallTypeUpgradeCounter @@ -238,11 +238,11 @@ ResolveDiglettCollision: ; 0x147aa inc a ld [hld], a ld [hl], $50 - ld hl, wd4f7 + ld hl, wLeftMapMoveCounterFramesUntilDecrease add hl, bc - ld a, $e0 + ld a, MAP_MOVE_FRAMES_COUNTER & $ff ld [hli], a - ld a, $1 + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 ld [hl], a ld a, c and a @@ -252,15 +252,15 @@ ResolveDiglettCollision: ; 0x147aa ld a, $6b ld [wStageCollisionMap + $110], a ld a, $5 - call Func_149d9 + call LoadDiglettGraphics ld a, [wRightMapMoveCounter] add $4 - call Func_149f5 + call LoadDiglettNumberGraphics ld a, $8 callba Func_10000 ld a, [wRightMapMoveCounter] cp $3 - call z, Func_14920 + call z, HitRightDiglett3Times jr .asm_14830 .asm_14807 @@ -269,16 +269,16 @@ ResolveDiglettCollision: ; 0x147aa ld a, $67 ld [wStageCollisionMap + $103], a ld a, $2 - call Func_149d9 + call LoadDiglettGraphics ld a, [wLeftMapMoveCounter] - call Func_149f5 + call LoadDiglettNumberGraphics ld a, $7 callba Func_10000 ld a, [wLeftMapMoveCounter] cp $3 - call z, Func_14947 + call z, HitLeftDiglett3Times .asm_14830 - call Func_1496d + call AddScoreForHittingDiglett ret .asm_14834 @@ -292,7 +292,7 @@ ResolveDiglettCollision: ; 0x147aa sub $3 jr nz, .asm_1484d ld [wLeftMapMoveCounter], a - call Func_149f5 + call LoadDiglettNumberGraphics .asm_1484d ld a, $64 ld [wStageCollisionMap + $e3], a @@ -310,7 +310,7 @@ ResolveDiglettCollision: ; 0x147aa jr nz, .asm_14872 ld [wRightMapMoveCounter], a add $4 - call Func_149f5 + call LoadDiglettNumberGraphics .asm_14872 ld a, $68 ld [wStageCollisionMap + $f0], a @@ -320,107 +320,116 @@ ResolveDiglettCollision: ; 0x147aa call Func_14990 ret -Func_14880: ; 0x14880 - ld hl, wd4f7 +UpdateMapMoveCounters_RedFieldBottom: ; 0x14880 +; Decrements the two counters that cause the map move counters to decrease by one every 8 seconds. +; Also updates the counter graphics if anything changes. +; The map move counters appear next to Digletts. + ld hl, wLeftMapMoveCounterFramesUntilDecrease dec [hl] ld a, [hli] cp $ff - jr nz, .asm_148a6 + jr nz, .checkRightMapMoveCounter dec [hl] ld a, [hld] cp $ff - jr nz, .asm_148a6 - ld a, $e0 + jr nz, .checkRightMapMoveCounter + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff ld [hli], a - ld a, $1 + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 ld [hl], a ld a, [wLeftMapMoveCounter] and a - jr z, .asm_148a6 + jr z, .checkRightMapMoveCounter cp $3 - jr z, .asm_148a6 + jr z, .checkRightMapMoveCounter dec a ld [wLeftMapMoveCounter], a - call Func_149f5 -.asm_148a6 - ld hl, wd4f9 + call LoadDiglettNumberGraphics +.checkRightMapMoveCounter + ld hl, wRightMapMoveCounterFramesUntilDecrease dec [hl] ld a, [hli] cp $ff - jr nz, .asm_148ce + jr nz, .done dec [hl] ld a, [hld] cp $ff - jr nz, .asm_148ce - ld a, $e0 + jr nz, .done + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff ld [hli], a - ld a, $1 + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 ld [hl], a ld a, [wRightMapMoveCounter] and a - jr z, .asm_148ce + jr z, .done cp $3 - jr z, .asm_148ce + jr z, .done dec a ld [wRightMapMoveCounter], a add $4 - call Func_149f5 -.asm_148ce + call LoadDiglettNumberGraphics +.done ret -Func_148cf: ; 0x148cf +UpdateMapMoveCounters_RedFieldTop: ; 0x148cf +; This is identical logic to UpdateMapMoveCounters_RedFieldBottom, but it doesn't load +; any graphics, since the Diglett aren't in the Top half of the Red Field. ld b, $0 - ld hl, wd4f8 + ld hl, wLeftMapMoveCounterFramesUntilDecrease + 1 ld a, [hld] or [hl] - jr z, .asm_148f8 + jr z, .checkRightMapMoveCounter dec [hl] ld a, [hli] cp $ff - jr nz, .asm_148f8 + jr nz, .checkRightMapMoveCounter dec [hl] ld a, [hld] cp $ff - jr nz, .asm_148f8 - ld a, $e0 + jr nz, .checkRightMapMoveCounter + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff ld [hli], a - ld a, $1 + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 ld [hl], a ld a, [wLeftMapMoveCounter] and a - jr z, .asm_148f8 + jr z, .checkRightMapMoveCounter cp $3 - jr z, .asm_148f8 + jr z, .checkRightMapMoveCounter dec a ld [wLeftMapMoveCounter], a -.asm_148f8 - ld hl, wd4fa +.checkRightMapMoveCounter + ld hl, wRightMapMoveCounterFramesUntilDecrease + 1 ld a, [hld] or [hl] - jr z, .asm_1491f + jr z, .done dec [hl] ld a, [hli] cp $ff - jr nz, .asm_1491f + jr nz, .done dec [hl] ld a, [hld] cp $ff - jr nz, .asm_1491f - ld a, $e0 + jr nz, .done + ; Reset the counter back to 8 seconds worth of frames (480 frames) + ld a, MAP_MOVE_FRAMES_COUNTER & $ff ld [hli], a - ld a, $1 + ld a, MAP_MOVE_FRAMES_COUNTER >> 8 ld [hl], a ld a, [wRightMapMoveCounter] and a - jr z, .asm_1491f + jr z, .done cp $3 - jr z, .asm_1491f + jr z, .done dec a ld [wRightMapMoveCounter], a -.asm_1491f +.done ret -Func_14920: ; 0x14920 +HitRightDiglett3Times: ; 0x14920 ld hl, wNumDugtrioTriples call Increment_Max100 jr nc, .asm_14937 @@ -433,7 +442,7 @@ Func_14920: ; 0x14920 callba StartMapMoveMode ret -Func_14947: ; 0x14947 +HitLeftDiglett3Times: ; 0x14947 ld hl, wNumDugtrioTriples call Increment_Max100 jr nc, .asm_1495e @@ -446,7 +455,7 @@ Func_14947: ; 0x14947 callba StartMapMoveMode ret -Func_1496d: ; 0x1496d +AddScoreForHittingDiglett: ; 0x1496d ld a, $55 ld [wd803], a ld a, $4 @@ -478,7 +487,7 @@ Func_14990: ; 0x14990 ld a, [wLeftMapMoveDiglettFrame] xor $1 ld [wLeftMapMoveDiglettFrame], a - call Func_149d9 + call LoadDiglettGraphics .asm_149b6 ld a, [wd4f1] and a @@ -500,7 +509,7 @@ Func_14990: ; 0x14990 ld [wRightMapMoveDiglettFrame], a add $3 ; fall through -Func_149d9: ; 0x149d9 +LoadDiglettGraphics: ; 0x149d9 sla a ld c, a ld b, $0 @@ -520,7 +529,7 @@ Func_149d9: ; 0x149d9 call Func_10aa ret -Func_149f5: ; 0x149f5 +LoadDiglettNumberGraphics: ; 0x149f5 sla a ld c, a ld b, $0 @@ -540,1623 +549,195 @@ Func_149f5: ; 0x149f5 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 +INCLUDE "data/queued_tiledata/red_field/diglett.asm" -Data_14bbb: ; 0x14bbb - dw Func_11d2 - db $10, $01 - dw vTilesBG tile $2F - dw StageRedFieldBottomIndicatorsGfx_Gameboy + $850 - db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) - 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 [wVoltorbHitAnimationDuration], a + ld a, [wWhichVoltorbId] + sub $3 + ld [wWhichAnimatedVoltorb], a + ld a, $4 + callba Func_10000 + ld bc, FiveHundredPoints + callba AddBigBCD6FromQueueWithBallMultiplier + ret -Data_14bc5: ; 0x14bc5 - dw Func_11d2 - db $30, $03 - dw vTilesBG tile $26 - dw StageRedFieldBottomIndicatorsGfx_Gameboy + $860 - db Bank(StageRedFieldBottomIndicatorsGfx_Gameboy) - db $00 ; terminator +.noVoltorbCollision + ld a, [wVoltorbHitAnimationDuration] + and a + ret z + dec a + ld [wVoltorbHitAnimationDuration], a + ret nz + ld a, $ff + ld [wWhichAnimatedVoltorb], a + ret -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 [wVoltorbHitAnimationDuration], a - ld a, [wWhichVoltorbId] - sub $3 - ld [wWhichAnimatedVoltorb], a - ld a, $4 - callba Func_10000 - ld bc, FiveHundredPoints - callba AddBigBCD6FromQueueWithBallMultiplier - ret - -.noVoltorbCollision - ld a, [wVoltorbHitAnimationDuration] - and a - ret z - dec a - ld [wVoltorbHitAnimationDuration], a - ret nz - ld a, $ff - ld [wWhichAnimatedVoltorb], 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 +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, UpdateRedStageSpinner - 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 - -UpdateRedStageSpinner: ; 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, wNumSpinnerTurns - call Increment_Max100 - ld a, [wPikachuSaverCharge] - cp MAX_PIKACHU_SAVER_CHARGE - jr nz, .asm_14e8a - call PlaySpinnerChargingSoundEffect_RedField - ret - -.asm_14e8a - inc a - ld [wPikachuSaverCharge], a - call PlaySpinnerChargingSoundEffect_RedField - 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 UpdateSpinnerChargeGraphics_RedField - ret - -PlaySpinnerChargingSoundEffect_RedField: ; 0x14ea7 - ld a, [wd51e] - and a - ret nz - ld a, [wPikachuSaverCharge] - ld c, a - ld b, $0 - ld hl, SpinnerChargingSoundEffectIds_RedField - add hl, bc - ld a, [hl] - ld e, a - ld d, $0 - call PlaySoundEffect - ret - -SpinnerChargingSoundEffectIds_RedField: - db $12, $13, $14, $15, $16, $17, $18, $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $11 - -UpdateSpinnerChargeGraphics_RedField: ; 0x14ece -; Loads the correct graphics that show the lightning bolt icon for the spinner's current charge. - 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 + and a + jr z, UpdateRedStageSpinner + 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 -TileData_151af: ; 0x151af - dw LoadTileLists - db $04 ; total number of tiles +UpdateRedStageSpinner: ; 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 - db $02 ; number of tiles - dw $990E - db $7A, $7B +.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 - db $02 ; number of tiles - dw $992E - db $6E, $6F +.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, wNumSpinnerTurns + call Increment_Max100 + ld a, [wPikachuSaverCharge] + cp MAX_PIKACHU_SAVER_CHARGE + jr nz, .asm_14e8a + call PlaySpinnerChargingSoundEffect_RedField + ret - db $00 ; terminator +.asm_14e8a + inc a + ld [wPikachuSaverCharge], a + call PlaySpinnerChargingSoundEffect_RedField + 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 UpdateSpinnerChargeGraphics_RedField + ret -TileData_151bd: ; 0x151bd - dw LoadTileLists - db $04 ; total number of tiles +PlaySpinnerChargingSoundEffect_RedField: ; 0x14ea7 + ld a, [wd51e] + and a + ret nz + ld a, [wPikachuSaverCharge] + ld c, a + ld b, $0 + ld hl, SpinnerChargingSoundEffectIds_RedField + add hl, bc + ld a, [hl] + ld e, a + ld d, $0 + call PlaySoundEffect + ret - db $02 ; number of tiles - dw $990E - db $7C, $7D +SpinnerChargingSoundEffectIds_RedField: + db $12, $13, $14, $15, $16, $17, $18, $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $11 - db $02 ; number of tiles - dw $992E - db $7E, $7F +UpdateSpinnerChargeGraphics_RedField: ; 0x14ece +; Loads the correct graphics that show the lightning bolt icon for the spinner's current charge. + 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 - db $00 ; terminator +INCLUDE "data/queued_tiledata/red_field/spinner.asm" Func_151cb: ; 0x151cb ld a, [wWhichCAVELight] @@ -4601,7 +3182,7 @@ asm_15fc0 ld a, [hGameBoyColorFlag] and a jr z, .asm_15fd0 - ld hl, Data_16080 + ld hl, TileData_16080 .asm_15fd0 add hl, bc ld a, [hli] @@ -4639,225 +3220,7 @@ ApplyBumperCollision_RedField: ; 0x15fda BumperCollisionAngleDeltas_RedField: 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 +INCLUDE "data/queued_tiledata/red_field/bumpers.asm" ResolveDittoSlotCollision: ; 0x160f0 ld a, [wDittoSlotCollision] -- cgit v1.2.3