From edbefc01a6b62ef8a2bf8037a863a39d97aabf7e Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 30 Jun 2017 18:57:42 -0700 Subject: Move Pokedex routines into their own file --- engine/ball_gfx.asm | 91 --- engine/pinball_game/ball_gfx.asm | 91 +++ engine/pokedex.asm | 1189 +++++++++++++++++++++++++++++++++++++ main.asm | 1190 +------------------------------------- 4 files changed, 1281 insertions(+), 1280 deletions(-) delete mode 100755 engine/ball_gfx.asm create mode 100755 engine/pinball_game/ball_gfx.asm create mode 100755 engine/pokedex.asm diff --git a/engine/ball_gfx.asm b/engine/ball_gfx.asm deleted file mode 100755 index 2aff0d3..0000000 --- a/engine/ball_gfx.asm +++ /dev/null @@ -1,91 +0,0 @@ -LoadBallGfx: ; 0xdcc3 - xor a - ld [wd4c8], a - ld a, [wBallType] - cp GREAT_BALL - jr nc, .notPokeBall - ld a, Bank(PinballPokeballGfx) - ld hl, PinballPokeballGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -.notPokeBall - cp ULTRA_BALL - jr nc, .notGreatBall - ld a, Bank(PinballGreatballGfx) - ld hl, PinballGreatballGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -.notGreatBall - cp MASTER_BALL - jr nc, .notUltraBall - ld a, Bank(PinballUltraballGfx) - ld hl, PinballUltraballGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -.notUltraBall - ld a, Bank(PinballMasterballGfx) - ld hl, PinballMasterballGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -LoadMiniBallGfx: ; 0xdd12 - ld a, $1 - ld [wd4c8], a - ld a, [wBallType] - cp GREAT_BALL - jr nc, .notPokeBall - ld a, Bank(PinballPokeballMiniGfx) - ld hl, PinballPokeballMiniGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -.notPokeBall - cp ULTRA_BALL - jr nc, .notGreatBall - ld a, Bank(PinballGreatballMiniGfx) - ld hl, PinballGreatballMiniGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -.notGreatBall - cp MASTER_BALL - jr nc, .notUltraBall - ld a, Bank(PinballUltraballMiniGfx) - ld hl, PinballUltraballMiniGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -.notUltraBall - ld a, Bank(PinballMasterballMiniGfx) - ld hl, PinballMasterballMiniGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret - -Func_dd62: ; 0xdd62 - ld a, $2 - ld [wd4c8], a - ld a, $2a - ld hl, PinballBallMiniGfx - ld de, vTilesOB tile $40 - ld bc, $0200 - call LoadOrCopyVRAMData - ret diff --git a/engine/pinball_game/ball_gfx.asm b/engine/pinball_game/ball_gfx.asm new file mode 100755 index 0000000..2aff0d3 --- /dev/null +++ b/engine/pinball_game/ball_gfx.asm @@ -0,0 +1,91 @@ +LoadBallGfx: ; 0xdcc3 + xor a + ld [wd4c8], a + ld a, [wBallType] + cp GREAT_BALL + jr nc, .notPokeBall + ld a, Bank(PinballPokeballGfx) + ld hl, PinballPokeballGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +.notPokeBall + cp ULTRA_BALL + jr nc, .notGreatBall + ld a, Bank(PinballGreatballGfx) + ld hl, PinballGreatballGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +.notGreatBall + cp MASTER_BALL + jr nc, .notUltraBall + ld a, Bank(PinballUltraballGfx) + ld hl, PinballUltraballGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +.notUltraBall + ld a, Bank(PinballMasterballGfx) + ld hl, PinballMasterballGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +LoadMiniBallGfx: ; 0xdd12 + ld a, $1 + ld [wd4c8], a + ld a, [wBallType] + cp GREAT_BALL + jr nc, .notPokeBall + ld a, Bank(PinballPokeballMiniGfx) + ld hl, PinballPokeballMiniGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +.notPokeBall + cp ULTRA_BALL + jr nc, .notGreatBall + ld a, Bank(PinballGreatballMiniGfx) + ld hl, PinballGreatballMiniGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +.notGreatBall + cp MASTER_BALL + jr nc, .notUltraBall + ld a, Bank(PinballUltraballMiniGfx) + ld hl, PinballUltraballMiniGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +.notUltraBall + ld a, Bank(PinballMasterballMiniGfx) + ld hl, PinballMasterballMiniGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret + +Func_dd62: ; 0xdd62 + ld a, $2 + ld [wd4c8], a + ld a, $2a + ld hl, PinballBallMiniGfx + ld de, vTilesOB tile $40 + ld bc, $0200 + call LoadOrCopyVRAMData + ret diff --git a/engine/pokedex.asm b/engine/pokedex.asm new file mode 100755 index 0000000..0ff6819 --- /dev/null +++ b/engine/pokedex.asm @@ -0,0 +1,1189 @@ +HandlePokedexScreen: ; 0x28000 + ld a, [wScreenState] + rst JumpTable ; calls JumpToFuncInTable +PointerTable_28004: ; 0x28004 + dw LoadPokedexScreen + dw MainPokedexScreen + dw MonInfoPokedexScreen + dw Func_282e9 ; not sure if this is used ever... + dw ExitPokedexScreen + +LoadPokedexScreen: ; 0x2800e + ld a, $23 + ld [hLCDC], a + ld a, $e4 + ld [wBGP], a + ld a, $93 + ld [wOBP0], a + ld a, $e4 + ld [wOBP1], a + xor a + ld [hSCX], a + ld a, $8 + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $8c + ld [hWY], a + ld a, $3b + ld [hLYC], a + ld [hLastLYC], a + ld [hNextLYCSub], a + ld [hLYCSub], a + ld hl, hSTAT + set 6, [hl] + ld hl, rIE + set 1, [hl] + ld a, $2 + ld [hHBlankRoutine], a + ld hl, PointerTable_280a2 + ld a, [hGameBoyColorFlag] + call LoadVideoData + xor a + ld [wCurPokedexIndex], a + ld [wPokedexOffset], a + ld [wd95b], a + ld [wd95c], a + ld [wd960], a + ld [wd961], a + ld [wd95e], a + ld a, $1 + ld [wd862], a + call ClearOAMBuffer + call Func_285db + call Func_28931 + call Func_289c8 + call Func_28a15 + call Func_28972 + call Func_28a8a + call Func_28ad1 + call Func_28add + call CountNumSeenOwnedMons + call Func_b66 + ld a, $f + call SetSongBank + ld de, $0004 + call PlaySong + call Func_588 + call Func_bbe + ld hl, wScreenState + inc [hl] + ret + +PointerTable_280a2: ; 0x280a2 + dw Data_280a6 + dw Data_280c4 + +Data_280a6: ; 0x280a6 + dab PokedexInitialGfx + dw vTilesOB + dw $6000 + dab PokedexTilemap2 + dw $9800 + dw $1000 + dab PokedexTilemap + dw vBGWin + dw $800 + dab PokedexTilemap + dw $9e00 + dw $800 + dw $FFFF ; terminators + +Data_280c4: ; 0x280c4 + dab PokedexInitialGfx + dw vTilesOB + dw $6000 + dab PokedexTilemap2 + dw $9800 + dw $1000 + dab PokedexBGAttributes2 + dw $9800 + dw $1002 + dab PokedexTilemap + dw vBGWin + dw $800 + dab PokedexTilemap + dw $9e00 + dw $800 + dab PokedexBGAttributes + dw vBGWin + dw $802 + dab PokedexBGAttributes + dw $9e00 + dw $802 + dab PokedexPalettes + dw $0000 + dw $101 + dw $FFFF ; terminators + +MainPokedexScreen: ; 0x280fe + call Func_28513 + ld a, [hNewlyPressedButtons] + bit BIT_A_BUTTON, a + jr z, .asm_28142 + ld a, [wd95f] + and a + jp nz, .asm_28174 + ld a, [wCurPokedexIndex] + ld c, a + ld b, $0 + ld hl, wPokedexFlags + add hl, bc + ld a, [hl] + and a + jp z, .asm_28174 + push hl + ld a, [wCurPokedexIndex] + inc a + ld e, a + ld d, $0 + call PlayCry + pop hl + bit 1, [hl] + jp z, .asm_28174 + call Func_288c6 + call Func_2885c + call CleanOAMBuffer + call Func_2887c + call Func_2885c + ld hl, wScreenState + inc [hl] + ret + +.asm_28142 + bit BIT_B_BUTTON, a + jr z, .asm_2814f + call Func_285db + ld a, $4 + ld [wScreenState], a + ret + +.asm_2814f + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_28174 + ld a, [hJoypadState] + bit BIT_START, a + jr z, .asm_28168 + ld a, [wd960] + and a + ld a, $ff + ld [wd960], a + call z, Func_28add + jr .asm_28174 + +.asm_28168 + ld a, [wd960] + and a + ld a, $0 + ld [wd960], a + call nz, Func_28add +.asm_28174 + call Func_285db + ret + +MonInfoPokedexScreen: ; 0x28178 + ld a, [wd956] + bit 0, a + jr z, .asm_28190 + ld a, [hNewlyPressedButtons] + bit BIT_A_BUTTON, a + jr z, .asm_2818a + call Func_28912 + jr .asm_281a2 + +.asm_2818a + bit 1, a + jr z, .asm_281a2 + jr .asm_28196 + +.asm_28190 + ld a, [hNewlyPressedButtons] + and $3 + jr z, .asm_281a2 +.asm_28196 + call Func_288a2 + call Func_285db + ld a, $1 + ld [wScreenState], a + ret + +.asm_281a2 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_281c7 + ld a, [hJoypadState] + bit BIT_START, a + jr z, .asm_281bb + ld a, [wd960] + and a + ld a, $ff + ld [wd960], a + call z, Func_28add + jr .asm_281c7 + +.asm_281bb + ld a, [wd960] + and a + ld a, $0 + ld [wd960], a + call nz, Func_28add +.asm_281c7 + call Func_2885c + ret + +Func_281cb: + ld a, [wCurPokedexIndex] + ld c, a + ld b, $0 + sla c + rl b + add c + ld c, a + jr nc, .asm_281da + inc b +.asm_281da + ld a, [wd960] + and a + jr nz, .asm_281fb + ld hl, MonBillboardPalettePointers + add hl, bc + ld a, BANK(MonBillboardPalettePointers) + call ReadByteFromBank + inc hl + ld e, a + ld a, BANK(MonBillboardPalettePointers) + call ReadByteFromBank + inc hl + ld d, a + ld a, BANK(MonBillboardPalettePointers) + call ReadByteFromBank + ld [$ff8c], a + jr .asm_28214 + +.asm_281fb + ld hl, MonAnimatedPalettePointers + add hl, bc + ld a, BANK(MonAnimatedPalettePointers) + call ReadByteFromBank + inc hl + ld e, a + ld a, BANK(MonAnimatedPalettePointers) + call ReadByteFromBank + inc hl + ld d, a + ld a, BANK(MonAnimatedPalettePointers) + call ReadByteFromBank + ld [$ff8c], a +.asm_28214 + ld h, d + ld l, e + ld de, wda8a + ld b, $8 +.asm_2821b + push bc + ld a, [$ff8c] + call ReadByteFromBank + inc hl + ld c, a + ld a, [$ff8c] + call ReadByteFromBank + inc hl + ld b, a + ld a, c + and $1f + ld [de], a + inc de + srl b + rr c + srl b + rr c + srl b + rr c + srl b + rr c + srl b + rr c + ld a, c + and $1f + ld [de], a + inc de + srl b + rr c + srl b + rr c + srl b + rr c + srl b + rr c + srl b + rr c + ld a, c + and $1f + ld [de], a + inc de + pop bc + dec b + jr nz, .asm_2821b + ld hl, VRAMAddresses_28289 + ld de, wda8a + ld b, $18 +.asm_2826d + push hl + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [de] + inc de + push af + swap a + and $f + call PutTileInVRAM + inc hl + pop af + and $f + call PutTileInVRAM + pop hl + inc hl + inc hl + dec b + jr nz, .asm_2826d + ret + +VRAMAddresses_28289: + dw vBGWin + $26 + dw vBGWin + $2B + dw vBGWin + $30 + dw vBGWin + $46 + dw vBGWin + $4B + dw vBGWin + $50 + dw vBGWin + $66 + dw vBGWin + $6B + dw vBGWin + $70 + dw vBGWin + $86 + dw vBGWin + $8B + dw vBGWin + $90 + dw vBGWin + $C6 + dw vBGWin + $CB + dw vBGWin + $D0 + dw vBGWin + $E6 + dw vBGWin + $EB + dw vBGWin + $F0 + dw vBGWin + $106 + dw vBGWin + $10B + dw vBGWin + $110 + dw vBGWin + $126 + dw vBGWin + $12B + dw vBGWin + $130 + +OAMOffsetsTable_282b9: +; y, x coordinates + db $40, $18 + db $40, $40 + db $40, $68 + db $48, $18 + db $48, $40 + db $48, $68 + db $50, $18 + db $50, $40 + db $50, $68 + db $58, $18 + db $58, $40 + db $58, $68 + db $68, $18 + db $68, $40 + db $68, $68 + db $70, $18 + db $70, $40 + db $70, $68 + db $78, $18 + db $78, $40 + db $78, $68 + db $80, $18 + db $80, $40 + db $80, $68 + +Func_282e9: ; 0x282e9 + ld a, [wd960] + and a + jr z, .asm_28318 + ld a, [wCurPokedexIndex] + ld c, a + ld b, $0 + ld hl, MonAnimatedSpriteTypes + add hl, bc + ld a, Bank(MonAnimatedSpriteTypes) + call ReadByteFromBank + ld c, a + ld a, [hNumFramesDropped] + swap a + and $7 + cp $7 + jr z, .asm_2830d + and $1 + jr .asm_2830f + +.asm_2830d + ld a, $2 +.asm_2830f + add c + add $a5 + ld bc, $2030 + call LoadOAMData +.asm_28318 + ld a, [wdaa2] + sla a + ld c, a + ld b, $0 + ld hl, OAMOffsetsTable_282b9 + add hl, bc + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, $63 + call LoadOAMData + call Func_28368 + ld a, [hNewlyPressedButtons] + and $6 + jr z, .asm_28367 + ld a, BANK(PokedexTilemap) + ld hl, PokedexTilemap + ld de, vBGWin + ld bc, $0200 + call LoadVRAMData + ld a, $1 + ld [rVBK], a + ld a, BANK(PokedexBGAttributes) + ld hl, PokedexBGAttributes + ld de, vBGWin + ld bc, $0200 + call LoadVRAMData + xor a + ld [rVBK], a + call Func_28972 + call Func_28a8a + call Func_28ad1 + ld a, $1 + ld [wScreenState], a +.asm_28367 + ret + +Func_28368: ; 0x28368 + ld a, [hJoypadState] + bit BIT_A_BUTTON, a + jr nz, .asm_28371 + jp Func_284bc + +.asm_28371 + ld a, [hPressedButtons] + ld b, a + ld a, [wdaa2] + ld e, a + ld d, $0 + ld hl, wda8a + add hl, de + ld a, [hl] + bit 5, b + jr z, .asm_28386 + dec a + jr .asm_2838a + +.asm_28386 + bit 4, b + ret z + inc a +.asm_2838a + and $1f + ld [hl], a + push af + sla e + rl d + ld hl, VRAMAddresses_28289 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop af + push af + swap a + and $f + call PutTileInVRAM + inc hl + pop af + and $f + call PutTileInVRAM + ld hl, Data_2842c + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hld] + ld c, a + ld b, $0 + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b + ld a, [hld] + or c + ld c, a + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b + ld a, [hl] + or c + ld c, a + ld a, [wd960] + and a + jr nz, .asm_283ff + ld hl, BGPaletteIndices_2845c + add hl, de + ld a, [hl] + ld hl, rBGPI + call PutTileInVRAM + ld hl, rBGPD + ld a, c + call PutTileInVRAM + ld a, b + call PutTileInVRAM + ret + +.asm_283ff + ld hl, BGPaletteIndices_2845c + add hl, de + ld a, [hl] + ld hl, rBGPI + call PutTileInVRAM + ld hl, rBGPD + ld a, c + call PutTileInVRAM + ld a, b + call PutTileInVRAM + ld hl, SpritePaletteIndices_2848c + add hl, de + ld a, [hl] + ld hl, rOBPI + call PutTileInVRAM + ld hl, rOBPD + ld a, c + call PutTileInVRAM + ld a, b + call PutTileInVRAM + ret + +Data_2842c: + dw wda8c + dw wda8c + dw wda8c + dw wda8f + dw wda8f + dw wda8f + dw wda92 + dw wda92 + dw wda92 + dw wda95 + dw wda95 + dw wda95 + dw wda98 + dw wda98 + dw wda98 + dw wda9b + dw wda9b + dw wda9b + dw wda9e + dw wda9e + dw wda9e + dw wdaa1 + dw wdaa1 + dw wdaa1 + +BGPaletteIndices_2845c: +; second byte is unused + db $30 | $80, $00 + db $30 | $80, $00 + db $30 | $80, $00 + db $32 | $80, $00 + db $32 | $80, $00 + db $32 | $80, $00 + db $34 | $80, $00 + db $34 | $80, $00 + db $34 | $80, $00 + db $36 | $80, $00 + db $36 | $80, $00 + db $36 | $80, $00 + db $38 | $80, $00 + db $38 | $80, $00 + db $38 | $80, $00 + db $3A | $80, $00 + db $3A | $80, $00 + db $3A | $80, $00 + db $3C | $80, $00 + db $3C | $80, $00 + db $3C | $80, $00 + db $3E | $80, $00 + db $3E | $80, $00 + db $3E | $80, $00 + +SpritePaletteIndices_2848c: + db $D8, $00 + db $D8, $00 + db $D8, $00 + db $DA, $00 + db $DA, $00 + db $DA, $00 + db $DC, $00 + db $DC, $00 + db $DC, $00 + db $DE, $00 + db $DE, $00 + db $DE, $00 + db $E8, $00 + db $E8, $00 + db $E8, $00 + db $EA, $00 + db $EA, $00 + db $EA, $00 + db $EC, $00 + db $EC, $00 + db $EC, $00 + db $EE, $00 + db $EE, $00 + db $EE, $00 + +Func_284bc: ; 0x284bc + ld a, [hPressedButtons] + ld b, a + ld a, [wdaa2] + bit 5, b + jr z, .asm_284cd + dec a + bit 7, a + jr nz, .asm_284ef + jr .asm_284f5 + +.asm_284cd + bit 4, b + jr z, .asm_284d8 + inc a + cp $18 + jr nc, .asm_284f3 + jr .asm_284f5 + +.asm_284d8 + bit 6, b + jr z, .asm_284e4 + sub $3 + bit 7, a + jr nz, .asm_284ef + jr .asm_284f5 + +.asm_284e4 + bit 7, b + ret z + add $3 + cp $18 + jr nc, .asm_284f3 + jr .asm_284f5 + +.asm_284ef + add $18 + jr .asm_284f5 + +.asm_284f3 + sub $18 +.asm_284f5 + ld [wdaa2], a + ret + +ExitPokedexScreen: ; 0x284f9 + call Func_cb5 + call Func_576 + ld hl, hSTAT + res 6, [hl] + ld hl, rIE + res 1, [hl] + ld a, SCREEN_TITLESCREEN + ld [wCurrentScreen], a + xor a + ld [wScreenState], a + ret + +Func_28513: ; 0x28513 + ld a, [hPressedButtons] + ld hl, wd95e + or [hl] + ld [hl], a + ld a, [wd95c] + and a + ret nz + ld a, [wd95e] + ld b, a + ld a, [wd9f8] + and a + ld a, NUM_POKEMON - 1 + jr z, .asm_2852d + ld a, NUM_POKEMON +.asm_2852d + ld d, a + ld a, [wCurPokedexIndex] + bit 6, b + jr z, .asm_28548 + and a + jr z, .asm_285a9 + dec a + ld [wCurPokedexIndex], a + ld a, $4 + ld [wd95c], a + ld a, $1 + ld [wd95f], a + jr .asm_285a9 + +.asm_28548 + bit 7, b + jr z, .asm_2855f + inc a + cp d + jr z, .asm_285a9 + ld [wCurPokedexIndex], a + ld a, $4 + ld [wd95c], a + ld a, $1 + ld [wd95f], a + jr .asm_285a9 + +.asm_2855f + ld a, d + sub $9 + ld d, a + ld a, [wPokedexOffset] + ld c, $5 + bit 5, b + jr z, .asm_28586 + cp $5 + jr nc, .asm_28571 + ld c, a +.asm_28571 + sub c + ld [wPokedexOffset], a + ld a, [wCurPokedexIndex] + sub c + ld [wCurPokedexIndex], a + ld a, $1 + ld [wd95f], a + call Func_285ca + jr .asm_285aa + +.asm_28586 + bit 4, b + jr z, .asm_285ae + cp d + jr c, .asm_28594 + push af + cpl + add d + add $5 + ld c, a + pop af +.asm_28594 + add c + ld [wPokedexOffset], a + ld a, [wCurPokedexIndex] + add c + ld [wCurPokedexIndex], a + ld a, $1 + ld [wd95f], a + call Func_285ca + jr .asm_285aa + +.asm_285a9 + xor a +.asm_285aa + ld [wd95e], a + ret + +.asm_285ae + ld a, [wd95f] + and a + ret z + lb de, $00, $03 + call PlaySoundEffect + call Func_28931 + call Func_289c8 + call Func_28a15 + call Func_28add + xor a + ld [wd95f], a + ret + +Func_285ca: ; 0x285ca + xor a + ld [wd80a], a + call Func_28972 + call Func_28a8a + call Func_28ad1 + ld a, [wd80a] + ret + +Func_285db: ; 0x285db + ld a, [wCurPokedexIndex] + ld c, a + ld b, $0 + ld hl, wPokedexFlags + add hl, bc + bit 1, [hl] ; has pokemon been seen or captured? + call nz, Func_287e7 + ld bc, $8c38 + ld a, $64 + call LoadOAMData + ld bc, vTilesSH tile $04 + ld a, $65 + call LoadOAMData + ld bc, $8888 + ld a, $66 + call LoadOAMData + call DrawCornerInfoPokedexScreen + ld a, [wCurPokedexIndex] + ld c, a + ld b, $0 + ld hl, DexScrollBarOffsets + add hl, bc + ld a, [hl] + add $49 + ld c, a + ld b, $90 + ld a, [wd95b] + srl a + srl a + and $3 + ld e, a + ld d, $0 + ld hl, DexScrollBarOAMIds + add hl, de + ld a, [hl] + call LoadOAMData + ld a, [wCurPokedexIndex] + ld hl, wPokedexOffset + sub [hl] + jr nc, .asm_2863b + dec [hl] + ld a, $1 + ld [wd95d], a + xor a + jr .asm_28647 + +.asm_2863b + cp $5 + jr c, .asm_28647 + ld a, $1 + ld [wd95d], a + inc [hl] + ld a, $4 +.asm_28647 + ld c, a + push bc + ld a, [hJoypadState] + and a + ld a, [wd95b] + jr z, .asm_28652 + xor a +.asm_28652 + inc a + ld [wd95b], a + bit 3, a + jr nz, .asm_28667 + swap c + ld a, c + add $40 + ld c, a + ld b, $10 + ld a, $63 + call LoadOAMData +.asm_28667 + pop bc + ld a, [wd95c] + and a + ret z + dec a + ld [wd95c], a + sla a + ld e, a + ld d, $0 + push hl + ld hl, PointerTable_2867f + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +PointerTable_2867f: ; 0x2867f + dw Func_286dd + dw Func_28721 + dw Func_286dd + dw Func_28765 + +DexScrollBarOAMIds: + db $67, $68, $69, $68 + +DrawCornerInfoPokedexScreen: ; 0x2868b +; If player is holding SELECT button, it draws the seen/own count in the top-right corner. +; Otherwise, it draws the word "POKeDEX". + ld a, [hJoypadState] + bit BIT_SELECT, a + jr z, .asm_286c8 + ld bc, $6d03 + ld a, [wNumPokemonSeen + 1] + call LoadSeenOwnDigitOAM + ld a, [wNumPokemonSeen] + swap a + call LoadSeenOwnDigitOAM + ld a, [wNumPokemonSeen] + call LoadSeenOwnDigitOAM + ld bc, $8202 + ld a, $76 + call LoadOAMData ; draws the "/" between the seen/owned numbers + ld bc, $8703 + ld a, [wNumPokemonOwned + 1] + call LoadSeenOwnDigitOAM + ld a, [wNumPokemonOwned] + swap a + call LoadSeenOwnDigitOAM + ld a, [wNumPokemonOwned] + call LoadSeenOwnDigitOAM + ret + +.asm_286c8 + ld bc, $6800 + ld a, $6a + call LoadOAMData + ret + +LoadSeenOwnDigitOAM: ; 0x286d1 + and $f + add $6c + call LoadOAMData + ld a, b + add $7 ; adds 7 pixels to the next digit's x position on screen + ld b, a + ret + +Func_286dd: ; 0x286dd + pop hl + ld a, [wd862] + and a + jr nz, .asm_286ff + push bc + push hl + ld a, [wd863] + ld e, a + ld a, [wd864] + ld d, a + ld hl, wc010 + xor a + ld bc, $00a0 + call LoadOrCopyVRAMData + ld a, $1 + ld [wd862], a + pop hl + pop bc +.asm_286ff + ld a, [wd95d] + and a + ret z + ld a, [wd95c] + and a + jr nz, .asm_2870d + ld [wd95d], a +.asm_2870d + ld a, c + and a + jr nz, .asm_28719 + ld hl, hNextFrameHBlankSCX + dec [hl] + dec [hl] + dec [hl] + dec [hl] + ret + +.asm_28719 + ld hl, hNextFrameHBlankSCX + inc [hl] + inc [hl] + inc [hl] + inc [hl] + ret + +Func_28721: ; 0x28721 + pop hl + ld a, [wd95d] + and a + ret z + ld a, c + and a + jr nz, .asm_28747 + ld a, [hl] + push af + sla a + and $1e + ld c, a + ld b, $0 + ld hl, BGMapLocations_287c7 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + pop af + call Func_28aaa + ld hl, hNextFrameHBlankSCX + dec [hl] + dec [hl] + dec [hl] + dec [hl] + ret + +.asm_28747 + ld a, [hl] + add $5 + push af + sla a + and $1e + ld c, a + ld b, $0 + ld hl, BGMapLocations_287c7 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + pop af + call Func_28aaa + ld hl, hNextFrameHBlankSCX + inc [hl] + inc [hl] + inc [hl] + inc [hl] + ret + +Func_28765: ; 0x28765 + pop hl + ld a, [wd95d] + and a + ret z + ld a, c + and a + jr nz, .asm_28791 + push hl + ld a, [hl] + sla a + and $e + ld c, a + ld b, $0 + ld hl, TileLocations_287b7 + add hl, bc + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld hl, hNextFrameHBlankSCX + dec [hl] + dec [hl] + dec [hl] + dec [hl] + pop hl + xor a + ld [wd862], a + ld a, [hl] + call Func_28993 + ret + +.asm_28791 + push hl + ld a, [hl] + add $5 + sla a + and $e + ld c, a + ld b, $0 + ld hl, TileLocations_287b7 + add hl, bc + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld hl, hNextFrameHBlankSCX + inc [hl] + inc [hl] + inc [hl] + inc [hl] + pop hl + xor a + ld [wd862], a + ld a, [hl] + add $5 + call Func_28993 + ret + +TileLocations_287b7: + dw vTilesOB tile $0 + dw vTilesOB tile $A + dw vTilesOB tile $14 + dw vTilesOB tile $1E + dw vTilesOB tile $28 + dw vTilesOB tile $32 + dw vTilesOB tile $3C + dw vTilesOB tile $46 + +BGMapLocations_287c7: + dw vBGWin + $7 + dw vBGWin + $47 + dw vBGWin + $87 + dw vBGWin + $C7 + dw vBGWin + $107 + dw vBGWin + $147 + dw vBGWin + $187 + dw vBGWin + $1C7 + dw vBGWin + $207 + dw vBGWin + $247 + dw vBGWin + $287 + dw vBGWin + $2C7 + dw vBGWin + $307 + dw vBGWin + $347 + dw vBGWin + $387 + dw vBGWin + $3C7 + +Func_287e7: ; 0x287e7 + ld a, [wd960] + and a + ret z + ld a, [wd95f] + and a + ret nz + ld a, [wCurPokedexIndex] + ld c, a + ld b, $0 + ld hl, MonAnimatedSpriteTypes + add hl, bc + ld a, Bank(MonAnimatedSpriteTypes) + call ReadByteFromBank + bit 7, a + ret nz + ld [wd5bc], a + call Func_28815 + ld a, [wd5bd] + add $a5 + ld bc, $2030 + call LoadOAMData + ret diff --git a/main.asm b/main.asm index 3bc7ec3..39461d4 100755 --- a/main.asm +++ b/main.asm @@ -33942,1195 +33942,7 @@ INCLUDE "engine/pinball_game/draw_sprites/draw_seel_bonus_sprites.asm" SECTION "banka", ROMX, BANK[$a] -HandlePokedexScreen: ; 0x28000 - ld a, [wScreenState] - rst JumpTable ; calls JumpToFuncInTable -PointerTable_28004: ; 0x28004 - dw LoadPokedexScreen - dw MainPokedexScreen - dw MonInfoPokedexScreen - dw Func_282e9 ; not sure if this is used ever... - dw ExitPokedexScreen - -LoadPokedexScreen: ; 0x2800e - ld a, $23 - ld [hLCDC], a - ld a, $e4 - ld [wBGP], a - ld a, $93 - ld [wOBP0], a - ld a, $e4 - ld [wOBP1], a - xor a - ld [hSCX], a - ld a, $8 - ld [hSCY], a - ld a, $7 - ld [hWX], a - ld a, $8c - ld [hWY], a - ld a, $3b - ld [hLYC], a - ld [hLastLYC], a - ld [hNextLYCSub], a - ld [hLYCSub], a - ld hl, hSTAT - set 6, [hl] - ld hl, rIE - set 1, [hl] - ld a, $2 - ld [hHBlankRoutine], a - ld hl, PointerTable_280a2 - ld a, [hGameBoyColorFlag] - call LoadVideoData - xor a - ld [wCurPokedexIndex], a - ld [wPokedexOffset], a - ld [wd95b], a - ld [wd95c], a - ld [wd960], a - ld [wd961], a - ld [wd95e], a - ld a, $1 - ld [wd862], a - call ClearOAMBuffer - call Func_285db - call Func_28931 - call Func_289c8 - call Func_28a15 - call Func_28972 - call Func_28a8a - call Func_28ad1 - call Func_28add - call CountNumSeenOwnedMons - call Func_b66 - ld a, $f - call SetSongBank - ld de, $0004 - call PlaySong - call Func_588 - call Func_bbe - ld hl, wScreenState - inc [hl] - ret - -PointerTable_280a2: ; 0x280a2 - dw Data_280a6 - dw Data_280c4 - -Data_280a6: ; 0x280a6 - dab PokedexInitialGfx - dw vTilesOB - dw $6000 - dab PokedexTilemap2 - dw $9800 - dw $1000 - dab PokedexTilemap - dw vBGWin - dw $800 - dab PokedexTilemap - dw $9e00 - dw $800 - dw $FFFF ; terminators - -Data_280c4: ; 0x280c4 - dab PokedexInitialGfx - dw vTilesOB - dw $6000 - dab PokedexTilemap2 - dw $9800 - dw $1000 - dab PokedexBGAttributes2 - dw $9800 - dw $1002 - dab PokedexTilemap - dw vBGWin - dw $800 - dab PokedexTilemap - dw $9e00 - dw $800 - dab PokedexBGAttributes - dw vBGWin - dw $802 - dab PokedexBGAttributes - dw $9e00 - dw $802 - dab PokedexPalettes - dw $0000 - dw $101 - dw $FFFF ; terminators - -MainPokedexScreen: ; 0x280fe - call Func_28513 - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - jr z, .asm_28142 - ld a, [wd95f] - and a - jp nz, .asm_28174 - ld a, [wCurPokedexIndex] - ld c, a - ld b, $0 - ld hl, wPokedexFlags - add hl, bc - ld a, [hl] - and a - jp z, .asm_28174 - push hl - ld a, [wCurPokedexIndex] - inc a - ld e, a - ld d, $0 - call PlayCry - pop hl - bit 1, [hl] - jp z, .asm_28174 - call Func_288c6 - call Func_2885c - call CleanOAMBuffer - call Func_2887c - call Func_2885c - ld hl, wScreenState - inc [hl] - ret - -.asm_28142 - bit BIT_B_BUTTON, a - jr z, .asm_2814f - call Func_285db - ld a, $4 - ld [wScreenState], a - ret - -.asm_2814f - ld a, [hGameBoyColorFlag] - and a - jr z, .asm_28174 - ld a, [hJoypadState] - bit BIT_START, a - jr z, .asm_28168 - ld a, [wd960] - and a - ld a, $ff - ld [wd960], a - call z, Func_28add - jr .asm_28174 - -.asm_28168 - ld a, [wd960] - and a - ld a, $0 - ld [wd960], a - call nz, Func_28add -.asm_28174 - call Func_285db - ret - -MonInfoPokedexScreen: ; 0x28178 - ld a, [wd956] - bit 0, a - jr z, .asm_28190 - ld a, [hNewlyPressedButtons] - bit BIT_A_BUTTON, a - jr z, .asm_2818a - call Func_28912 - jr .asm_281a2 - -.asm_2818a - bit 1, a - jr z, .asm_281a2 - jr .asm_28196 - -.asm_28190 - ld a, [hNewlyPressedButtons] - and $3 - jr z, .asm_281a2 -.asm_28196 - call Func_288a2 - call Func_285db - ld a, $1 - ld [wScreenState], a - ret - -.asm_281a2 - ld a, [hGameBoyColorFlag] - and a - jr z, .asm_281c7 - ld a, [hJoypadState] - bit BIT_START, a - jr z, .asm_281bb - ld a, [wd960] - and a - ld a, $ff - ld [wd960], a - call z, Func_28add - jr .asm_281c7 - -.asm_281bb - ld a, [wd960] - and a - ld a, $0 - ld [wd960], a - call nz, Func_28add -.asm_281c7 - call Func_2885c - ret - -Func_281cb: - ld a, [wCurPokedexIndex] - ld c, a - ld b, $0 - sla c - rl b - add c - ld c, a - jr nc, .asm_281da - inc b -.asm_281da - ld a, [wd960] - and a - jr nz, .asm_281fb - ld hl, MonBillboardPalettePointers - add hl, bc - ld a, BANK(MonBillboardPalettePointers) - call ReadByteFromBank - inc hl - ld e, a - ld a, BANK(MonBillboardPalettePointers) - call ReadByteFromBank - inc hl - ld d, a - ld a, BANK(MonBillboardPalettePointers) - call ReadByteFromBank - ld [$ff8c], a - jr .asm_28214 - -.asm_281fb - ld hl, MonAnimatedPalettePointers - add hl, bc - ld a, BANK(MonAnimatedPalettePointers) - call ReadByteFromBank - inc hl - ld e, a - ld a, BANK(MonAnimatedPalettePointers) - call ReadByteFromBank - inc hl - ld d, a - ld a, BANK(MonAnimatedPalettePointers) - call ReadByteFromBank - ld [$ff8c], a -.asm_28214 - ld h, d - ld l, e - ld de, wda8a - ld b, $8 -.asm_2821b - push bc - ld a, [$ff8c] - call ReadByteFromBank - inc hl - ld c, a - ld a, [$ff8c] - call ReadByteFromBank - inc hl - ld b, a - ld a, c - and $1f - ld [de], a - inc de - srl b - rr c - srl b - rr c - srl b - rr c - srl b - rr c - srl b - rr c - ld a, c - and $1f - ld [de], a - inc de - srl b - rr c - srl b - rr c - srl b - rr c - srl b - rr c - srl b - rr c - ld a, c - and $1f - ld [de], a - inc de - pop bc - dec b - jr nz, .asm_2821b - ld hl, VRAMAddresses_28289 - ld de, wda8a - ld b, $18 -.asm_2826d - push hl - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [de] - inc de - push af - swap a - and $f - call PutTileInVRAM - inc hl - pop af - and $f - call PutTileInVRAM - pop hl - inc hl - inc hl - dec b - jr nz, .asm_2826d - ret - -VRAMAddresses_28289: - dw vBGWin + $26 - dw vBGWin + $2B - dw vBGWin + $30 - dw vBGWin + $46 - dw vBGWin + $4B - dw vBGWin + $50 - dw vBGWin + $66 - dw vBGWin + $6B - dw vBGWin + $70 - dw vBGWin + $86 - dw vBGWin + $8B - dw vBGWin + $90 - dw vBGWin + $C6 - dw vBGWin + $CB - dw vBGWin + $D0 - dw vBGWin + $E6 - dw vBGWin + $EB - dw vBGWin + $F0 - dw vBGWin + $106 - dw vBGWin + $10B - dw vBGWin + $110 - dw vBGWin + $126 - dw vBGWin + $12B - dw vBGWin + $130 - -OAMOffsetsTable_282b9: -; y, x coordinates - db $40, $18 - db $40, $40 - db $40, $68 - db $48, $18 - db $48, $40 - db $48, $68 - db $50, $18 - db $50, $40 - db $50, $68 - db $58, $18 - db $58, $40 - db $58, $68 - db $68, $18 - db $68, $40 - db $68, $68 - db $70, $18 - db $70, $40 - db $70, $68 - db $78, $18 - db $78, $40 - db $78, $68 - db $80, $18 - db $80, $40 - db $80, $68 - -Func_282e9: ; 0x282e9 - ld a, [wd960] - and a - jr z, .asm_28318 - ld a, [wCurPokedexIndex] - ld c, a - ld b, $0 - ld hl, MonAnimatedSpriteTypes - add hl, bc - ld a, Bank(MonAnimatedSpriteTypes) - call ReadByteFromBank - ld c, a - ld a, [hNumFramesDropped] - swap a - and $7 - cp $7 - jr z, .asm_2830d - and $1 - jr .asm_2830f - -.asm_2830d - ld a, $2 -.asm_2830f - add c - add $a5 - ld bc, $2030 - call LoadOAMData -.asm_28318 - ld a, [wdaa2] - sla a - ld c, a - ld b, $0 - ld hl, OAMOffsetsTable_282b9 - add hl, bc - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, $63 - call LoadOAMData - call Func_28368 - ld a, [hNewlyPressedButtons] - and $6 - jr z, .asm_28367 - ld a, BANK(PokedexTilemap) - ld hl, PokedexTilemap - ld de, vBGWin - ld bc, $0200 - call LoadVRAMData - ld a, $1 - ld [rVBK], a - ld a, BANK(PokedexBGAttributes) - ld hl, PokedexBGAttributes - ld de, vBGWin - ld bc, $0200 - call LoadVRAMData - xor a - ld [rVBK], a - call Func_28972 - call Func_28a8a - call Func_28ad1 - ld a, $1 - ld [wScreenState], a -.asm_28367 - ret - -Func_28368: ; 0x28368 - ld a, [hJoypadState] - bit BIT_A_BUTTON, a - jr nz, .asm_28371 - jp Func_284bc - -.asm_28371 - ld a, [hPressedButtons] - ld b, a - ld a, [wdaa2] - ld e, a - ld d, $0 - ld hl, wda8a - add hl, de - ld a, [hl] - bit 5, b - jr z, .asm_28386 - dec a - jr .asm_2838a - -.asm_28386 - bit 4, b - ret z - inc a -.asm_2838a - and $1f - ld [hl], a - push af - sla e - rl d - ld hl, VRAMAddresses_28289 - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - pop af - push af - swap a - and $f - call PutTileInVRAM - inc hl - pop af - and $f - call PutTileInVRAM - ld hl, Data_2842c - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [hld] - ld c, a - ld b, $0 - sla c - rl b - sla c - rl b - sla c - rl b - sla c - rl b - sla c - rl b - ld a, [hld] - or c - ld c, a - sla c - rl b - sla c - rl b - sla c - rl b - sla c - rl b - sla c - rl b - ld a, [hl] - or c - ld c, a - ld a, [wd960] - and a - jr nz, .asm_283ff - ld hl, BGPaletteIndices_2845c - add hl, de - ld a, [hl] - ld hl, rBGPI - call PutTileInVRAM - ld hl, rBGPD - ld a, c - call PutTileInVRAM - ld a, b - call PutTileInVRAM - ret - -.asm_283ff - ld hl, BGPaletteIndices_2845c - add hl, de - ld a, [hl] - ld hl, rBGPI - call PutTileInVRAM - ld hl, rBGPD - ld a, c - call PutTileInVRAM - ld a, b - call PutTileInVRAM - ld hl, SpritePaletteIndices_2848c - add hl, de - ld a, [hl] - ld hl, rOBPI - call PutTileInVRAM - ld hl, rOBPD - ld a, c - call PutTileInVRAM - ld a, b - call PutTileInVRAM - ret - -Data_2842c: - dw wda8c - dw wda8c - dw wda8c - dw wda8f - dw wda8f - dw wda8f - dw wda92 - dw wda92 - dw wda92 - dw wda95 - dw wda95 - dw wda95 - dw wda98 - dw wda98 - dw wda98 - dw wda9b - dw wda9b - dw wda9b - dw wda9e - dw wda9e - dw wda9e - dw wdaa1 - dw wdaa1 - dw wdaa1 - -BGPaletteIndices_2845c: -; second byte is unused - db $30 | $80, $00 - db $30 | $80, $00 - db $30 | $80, $00 - db $32 | $80, $00 - db $32 | $80, $00 - db $32 | $80, $00 - db $34 | $80, $00 - db $34 | $80, $00 - db $34 | $80, $00 - db $36 | $80, $00 - db $36 | $80, $00 - db $36 | $80, $00 - db $38 | $80, $00 - db $38 | $80, $00 - db $38 | $80, $00 - db $3A | $80, $00 - db $3A | $80, $00 - db $3A | $80, $00 - db $3C | $80, $00 - db $3C | $80, $00 - db $3C | $80, $00 - db $3E | $80, $00 - db $3E | $80, $00 - db $3E | $80, $00 - -SpritePaletteIndices_2848c: - db $D8, $00 - db $D8, $00 - db $D8, $00 - db $DA, $00 - db $DA, $00 - db $DA, $00 - db $DC, $00 - db $DC, $00 - db $DC, $00 - db $DE, $00 - db $DE, $00 - db $DE, $00 - db $E8, $00 - db $E8, $00 - db $E8, $00 - db $EA, $00 - db $EA, $00 - db $EA, $00 - db $EC, $00 - db $EC, $00 - db $EC, $00 - db $EE, $00 - db $EE, $00 - db $EE, $00 - -Func_284bc: ; 0x284bc - ld a, [hPressedButtons] - ld b, a - ld a, [wdaa2] - bit 5, b - jr z, .asm_284cd - dec a - bit 7, a - jr nz, .asm_284ef - jr .asm_284f5 - -.asm_284cd - bit 4, b - jr z, .asm_284d8 - inc a - cp $18 - jr nc, .asm_284f3 - jr .asm_284f5 - -.asm_284d8 - bit 6, b - jr z, .asm_284e4 - sub $3 - bit 7, a - jr nz, .asm_284ef - jr .asm_284f5 - -.asm_284e4 - bit 7, b - ret z - add $3 - cp $18 - jr nc, .asm_284f3 - jr .asm_284f5 - -.asm_284ef - add $18 - jr .asm_284f5 - -.asm_284f3 - sub $18 -.asm_284f5 - ld [wdaa2], a - ret - -ExitPokedexScreen: ; 0x284f9 - call Func_cb5 - call Func_576 - ld hl, hSTAT - res 6, [hl] - ld hl, rIE - res 1, [hl] - ld a, SCREEN_TITLESCREEN - ld [wCurrentScreen], a - xor a - ld [wScreenState], a - ret - -Func_28513: ; 0x28513 - ld a, [hPressedButtons] - ld hl, wd95e - or [hl] - ld [hl], a - ld a, [wd95c] - and a - ret nz - ld a, [wd95e] - ld b, a - ld a, [wd9f8] - and a - ld a, NUM_POKEMON - 1 - jr z, .asm_2852d - ld a, NUM_POKEMON -.asm_2852d - ld d, a - ld a, [wCurPokedexIndex] - bit 6, b - jr z, .asm_28548 - and a - jr z, .asm_285a9 - dec a - ld [wCurPokedexIndex], a - ld a, $4 - ld [wd95c], a - ld a, $1 - ld [wd95f], a - jr .asm_285a9 - -.asm_28548 - bit 7, b - jr z, .asm_2855f - inc a - cp d - jr z, .asm_285a9 - ld [wCurPokedexIndex], a - ld a, $4 - ld [wd95c], a - ld a, $1 - ld [wd95f], a - jr .asm_285a9 - -.asm_2855f - ld a, d - sub $9 - ld d, a - ld a, [wPokedexOffset] - ld c, $5 - bit 5, b - jr z, .asm_28586 - cp $5 - jr nc, .asm_28571 - ld c, a -.asm_28571 - sub c - ld [wPokedexOffset], a - ld a, [wCurPokedexIndex] - sub c - ld [wCurPokedexIndex], a - ld a, $1 - ld [wd95f], a - call Func_285ca - jr .asm_285aa - -.asm_28586 - bit 4, b - jr z, .asm_285ae - cp d - jr c, .asm_28594 - push af - cpl - add d - add $5 - ld c, a - pop af -.asm_28594 - add c - ld [wPokedexOffset], a - ld a, [wCurPokedexIndex] - add c - ld [wCurPokedexIndex], a - ld a, $1 - ld [wd95f], a - call Func_285ca - jr .asm_285aa - -.asm_285a9 - xor a -.asm_285aa - ld [wd95e], a - ret - -.asm_285ae - ld a, [wd95f] - and a - ret z - lb de, $00, $03 - call PlaySoundEffect - call Func_28931 - call Func_289c8 - call Func_28a15 - call Func_28add - xor a - ld [wd95f], a - ret - -Func_285ca: ; 0x285ca - xor a - ld [wd80a], a - call Func_28972 - call Func_28a8a - call Func_28ad1 - ld a, [wd80a] - ret - -Func_285db: ; 0x285db - ld a, [wCurPokedexIndex] - ld c, a - ld b, $0 - ld hl, wPokedexFlags - add hl, bc - bit 1, [hl] ; has pokemon been seen or captured? - call nz, Func_287e7 - ld bc, $8c38 - ld a, $64 - call LoadOAMData - ld bc, vTilesSH tile $04 - ld a, $65 - call LoadOAMData - ld bc, $8888 - ld a, $66 - call LoadOAMData - call DrawCornerInfoPokedexScreen - ld a, [wCurPokedexIndex] - ld c, a - ld b, $0 - ld hl, DexScrollBarOffsets - add hl, bc - ld a, [hl] - add $49 - ld c, a - ld b, $90 - ld a, [wd95b] - srl a - srl a - and $3 - ld e, a - ld d, $0 - ld hl, DexScrollBarOAMIds - add hl, de - ld a, [hl] - call LoadOAMData - ld a, [wCurPokedexIndex] - ld hl, wPokedexOffset - sub [hl] - jr nc, .asm_2863b - dec [hl] - ld a, $1 - ld [wd95d], a - xor a - jr .asm_28647 - -.asm_2863b - cp $5 - jr c, .asm_28647 - ld a, $1 - ld [wd95d], a - inc [hl] - ld a, $4 -.asm_28647 - ld c, a - push bc - ld a, [hJoypadState] - and a - ld a, [wd95b] - jr z, .asm_28652 - xor a -.asm_28652 - inc a - ld [wd95b], a - bit 3, a - jr nz, .asm_28667 - swap c - ld a, c - add $40 - ld c, a - ld b, $10 - ld a, $63 - call LoadOAMData -.asm_28667 - pop bc - ld a, [wd95c] - and a - ret z - dec a - ld [wd95c], a - sla a - ld e, a - ld d, $0 - push hl - ld hl, PointerTable_2867f - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] - -PointerTable_2867f: ; 0x2867f - dw Func_286dd - dw Func_28721 - dw Func_286dd - dw Func_28765 - -DexScrollBarOAMIds: - db $67, $68, $69, $68 - -DrawCornerInfoPokedexScreen: ; 0x2868b -; If player is holding SELECT button, it draws the seen/own count in the top-right corner. -; Otherwise, it draws the word "POKeDEX". - ld a, [hJoypadState] - bit BIT_SELECT, a - jr z, .asm_286c8 - ld bc, $6d03 - ld a, [wNumPokemonSeen + 1] - call LoadSeenOwnDigitOAM - ld a, [wNumPokemonSeen] - swap a - call LoadSeenOwnDigitOAM - ld a, [wNumPokemonSeen] - call LoadSeenOwnDigitOAM - ld bc, $8202 - ld a, $76 - call LoadOAMData ; draws the "/" between the seen/owned numbers - ld bc, $8703 - ld a, [wNumPokemonOwned + 1] - call LoadSeenOwnDigitOAM - ld a, [wNumPokemonOwned] - swap a - call LoadSeenOwnDigitOAM - ld a, [wNumPokemonOwned] - call LoadSeenOwnDigitOAM - ret - -.asm_286c8 - ld bc, $6800 - ld a, $6a - call LoadOAMData - ret - -LoadSeenOwnDigitOAM: ; 0x286d1 - and $f - add $6c - call LoadOAMData - ld a, b - add $7 ; adds 7 pixels to the next digit's x position on screen - ld b, a - ret - -Func_286dd: ; 0x286dd - pop hl - ld a, [wd862] - and a - jr nz, .asm_286ff - push bc - push hl - ld a, [wd863] - ld e, a - ld a, [wd864] - ld d, a - ld hl, wc010 - xor a - ld bc, $00a0 - call LoadOrCopyVRAMData - ld a, $1 - ld [wd862], a - pop hl - pop bc -.asm_286ff - ld a, [wd95d] - and a - ret z - ld a, [wd95c] - and a - jr nz, .asm_2870d - ld [wd95d], a -.asm_2870d - ld a, c - and a - jr nz, .asm_28719 - ld hl, hNextFrameHBlankSCX - dec [hl] - dec [hl] - dec [hl] - dec [hl] - ret - -.asm_28719 - ld hl, hNextFrameHBlankSCX - inc [hl] - inc [hl] - inc [hl] - inc [hl] - ret - -Func_28721: ; 0x28721 - pop hl - ld a, [wd95d] - and a - ret z - ld a, c - and a - jr nz, .asm_28747 - ld a, [hl] - push af - sla a - and $1e - ld c, a - ld b, $0 - ld hl, BGMapLocations_287c7 - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - pop af - call Func_28aaa - ld hl, hNextFrameHBlankSCX - dec [hl] - dec [hl] - dec [hl] - dec [hl] - ret - -.asm_28747 - ld a, [hl] - add $5 - push af - sla a - and $1e - ld c, a - ld b, $0 - ld hl, BGMapLocations_287c7 - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - pop af - call Func_28aaa - ld hl, hNextFrameHBlankSCX - inc [hl] - inc [hl] - inc [hl] - inc [hl] - ret - -Func_28765: ; 0x28765 - pop hl - ld a, [wd95d] - and a - ret z - ld a, c - and a - jr nz, .asm_28791 - push hl - ld a, [hl] - sla a - and $e - ld c, a - ld b, $0 - ld hl, TileLocations_287b7 - add hl, bc - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld hl, hNextFrameHBlankSCX - dec [hl] - dec [hl] - dec [hl] - dec [hl] - pop hl - xor a - ld [wd862], a - ld a, [hl] - call Func_28993 - ret - -.asm_28791 - push hl - ld a, [hl] - add $5 - sla a - and $e - ld c, a - ld b, $0 - ld hl, TileLocations_287b7 - add hl, bc - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld hl, hNextFrameHBlankSCX - inc [hl] - inc [hl] - inc [hl] - inc [hl] - pop hl - xor a - ld [wd862], a - ld a, [hl] - add $5 - call Func_28993 - ret - -TileLocations_287b7: - dw vTilesOB tile $0 - dw vTilesOB tile $A - dw vTilesOB tile $14 - dw vTilesOB tile $1E - dw vTilesOB tile $28 - dw vTilesOB tile $32 - dw vTilesOB tile $3C - dw vTilesOB tile $46 - -BGMapLocations_287c7: - dw vBGWin + $7 - dw vBGWin + $47 - dw vBGWin + $87 - dw vBGWin + $C7 - dw vBGWin + $107 - dw vBGWin + $147 - dw vBGWin + $187 - dw vBGWin + $1C7 - dw vBGWin + $207 - dw vBGWin + $247 - dw vBGWin + $287 - dw vBGWin + $2C7 - dw vBGWin + $307 - dw vBGWin + $347 - dw vBGWin + $387 - dw vBGWin + $3C7 - -Func_287e7: ; 0x287e7 - ld a, [wd960] - and a - ret z - ld a, [wd95f] - and a - ret nz - ld a, [wCurPokedexIndex] - ld c, a - ld b, $0 - ld hl, MonAnimatedSpriteTypes - add hl, bc - ld a, Bank(MonAnimatedSpriteTypes) - call ReadByteFromBank - bit 7, a - ret nz - ld [wd5bc], a - call Func_28815 - ld a, [wd5bd] - add $a5 - ld bc, $2030 - call LoadOAMData - ret +INCLUDE "engine/pokedex.asm" Func_28815: ; 0x28815 ld a, [wd5be] -- cgit v1.2.3