From 30c5ce5c2093eea360842b4701b36f1bf46c83be Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 2 Jul 2017 15:19:00 -0500 Subject: Move Catch'Em mode logic to separate file --- engine/pinball_game/catchem_mode.asm | 1455 +++++++++++++++++++++++++++++++++ main.asm | 1456 +--------------------------------- 2 files changed, 1456 insertions(+), 1455 deletions(-) create mode 100755 engine/pinball_game/catchem_mode.asm diff --git a/engine/pinball_game/catchem_mode.asm b/engine/pinball_game/catchem_mode.asm new file mode 100755 index 0000000..9be8ab0 --- /dev/null +++ b/engine/pinball_game/catchem_mode.asm @@ -0,0 +1,1455 @@ +StartCatchEmMode: ; 0x1003f + ld a, [wInSpecialMode] ; current game mode? + and a + ret nz ; don't start catch 'em mode if we're already doing something like Map Move mode + ld a, $1 + ld [wInSpecialMode], a ; set special mode flag + xor a + ld [wSpecialMode], a + ld [wd54d], a + ld a, [wCurrentStage] + sla a + ld c, a + ld b, $0 + push bc + ld hl, WildMonOffsetsPointers + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wCurrentMap] + sla a + ld c, a + add hl, bc + ld a, [hli] + ld c, a + ld a, [hl] + ld b, a + pop de + ld hl, WildMonPointers + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + add hl, bc + call GenRandom + and $f + call CheckForMew + ld c, a + ld b, $0 + add hl, bc + ld a, [wRareMonsFlag] ; this gets set to $08 when the rare mons should be used. + sla a + ld c, a + add hl, bc + ld a, [hl] ; a contains mon id + dec a + ld [wCurrentCatchEmMon], a + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + ld hl, EvolutionLineIds + add hl, bc + ld c, [hl] + ld h, b + ld l, c + add hl, bc + add hl, bc ; multiply the evolution line id by 3 + ld bc, Data_13685 + add hl, bc + ld a, [hli] + ld [wd5c1], a + ld [wd5be], a + ld a, [hli] + ld [wd5c2], a + ld a, [hli] + ld [wd5c3], a + ld hl, wd586 + ld a, [wd5b6] + ld c, a + and a + ld b, $18 + jr z, .asm_100c7 +.asm_100ba + ld a, $1 + ld [hli], a + xor a + ld [hli], a + dec b + dec c + jr nz, .asm_100ba + ld a, b + and a + jr z, .asm_100ce +.asm_100c7 + xor a + ld [hli], a + inc a + ld [hli], a + dec b + jr nz, .asm_100c7 +.asm_100ce + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + sla c + rl b + ld hl, CatchEmTimerData + add hl, bc + ld a, [hli] + ld c, a + ld a, [hl] + ld b, a + callba StartTimer + callba InitBallSaverForCatchEmMode + call Func_10696 + call Func_3579 + ld a, [wCurrentStage] + bit 0, a + jr z, .asm_1011d + ld a, BANK(StageRedFieldBottomBaseGameBoyColorGfx) + ld hl, StageRedFieldBottomBaseGameBoyColorGfx + $300 + ld de, vTilesSH tile $2e + ld bc, $0020 + call LoadOrCopyVRAMData + ld a, $0 + ld hl, CatchBarTiles + deCoord 6, 8, vBGMap + ld bc, (CatchBarTilesEnd - CatchBarTiles) + call LoadOrCopyVRAMData +.asm_1011d + call SetPokemonSeenFlag + ld a, [wCurrentStage] + rst JumpTable ; calls JumpToFuncInTable +CallTable_10124: ; 0x10124 + ; STAGE_RED_FIELD_TOP + dw Func_10871 + ; STAGE_RED_FIELD_BOTTOM + dw Func_10871 + dw DoNothing_1098a + dw DoNothing_1098a + ; STAGE_BLUE_FIELD_TOP + dw Func_1098c + ; STAGE_BLUE_FIELD_BOTTOM + dw Func_1098c + +CheckForMew: +; Sets the encountered mon to Mew if the following conditions are met: +; 1. Random number in register a equals $f +; 2. The current map is Indigo Plateau (it does a roundabout way of checking this) +; 3. The right alley has been hit three times +; 4. The Mewtwo Bonus Stage completion counter equals 2. + push af + cp $f ; random number equals $f + jr nz, .asm_10155 + ld a, c + cp (BlueStageIndigoPlateauWildMons - BlueStageWildMons) & $ff ; check if low-byte of map mons offset is Indigo Plateau + jr nz, .asm_10155 + ld a, b + cp (BlueStageIndigoPlateauWildMons - BlueStageWildMons) >> 8 ; check if high-byte of map mons offset is Indigo Plateau + jr nz, .asm_10155 + ld a, [wRareMonsFlag] + cp $8 + jr nz, .asm_10155 + ld a, [wNumMewtwoBonusCompletions] + cp NUM_MEWTWO_COMPLETIONS_FOR_MEW + jr nz, .asm_10155 + pop af + xor a + ld [wNumMewtwoBonusCompletions], a + ld a, $10 + ret + +.asm_10155 + pop af + ret + +ConcludeCatchEmMode: ; 0x10157 + xor a + ld [wInSpecialMode], a + ld [wWildMonIsHittable], a + ld [wd5c6], a + ld [wd5b6], a + ld [wNumMonHits], a + call ClearWildMonCollisionMask + callba StopTimer + ld a, [wCurrentStage] + rst JumpTable ; calls JumpToFuncInTable +CallTable_10178: ; 0x10178 + ; STAGE_RED_FIELD_TOP + dw Func_108f5 + ; STAGE_RED_FIELD_BOTTOM + dw Func_108f5 + dw DoNothing_1098b + dw DoNothing_1098b + ; STAGE_BLUE_FIELD_TOP + dw Func_109fc + ; STAGE_BLUE_FIELD_BOTTOM + dw Func_109fc + +Func_10184: ; 0x10184 + ld a, [wCurrentStage] + bit 0, a + ret z + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + sla c + rl b + add c + ld c, a + jr nc, .asm_10199 + inc b +.asm_10199 + ld hl, MonBillboardPicPointers + add hl, bc + ld a, [hli] + ld [$ff8c], a + ld a, [hli] + ld [$ff8d], a + ld a, [hl] + ld [$ff8e], a + ld hl, MonBillboardPaletteMapPointers + add hl, bc + ld a, [hli] + ld [$ff8f], a + ld a, [hli] + ld [$ff90], a + ld a, [hli] + ld [$ff91], a + ld de, wc000 + ld hl, wd586 + ld c, $0 +.asm_101bb + ld a, [hli] + cp [hl] + ld [hli], a + jr z, .asm_101d2 + ld b, a + call nz, Func_101d9 + ld a, [hGameBoyColorFlag] + and a + jr z, .asm_101d2 + ld a, [wCurrentStage] + bit 0, a + ld a, b + call nz, Func_10230 +.asm_101d2 + inc c + ld a, c + cp $18 + jr nz, .asm_101bb + ret + +Func_101d9: ; 0x101d9 + push bc + push hl + push de + push af + ld a, $10 + ld [de], a + inc de + ld a, $1 + ld [de], a + inc de + ld b, $0 + ld hl, Data_102a4 + add hl, bc + ld c, [hl] + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b + ld hl, vTilesSH tile $10 + add hl, bc + ld a, l + ld [de], a + inc de + ld a, h + ld [de], a + inc de + ld a, [$ff8c] + ld l, a + ld a, [$ff8d] + ld h, a + add hl, bc + pop af + and a + jr nz, .asm_10215 + ld bc, $0180 + add hl, bc +.asm_10215 + ld a, l + ld [de], a + inc de + ld a, h + ld [de], a + inc de + ld a, [$ff8e] + ld [de], a + inc de + ld a, $0 + ld [de], a + inc de + pop bc + push de + xor a + ld de, Func_11d2 + call Func_10c5 + pop de + pop hl + pop bc + ret + +Func_10230: ; 0x10230 + push bc + push hl + push de + push af + ld a, $1 + ld [de], a + inc de + ld [de], a + inc de + ld b, $0 + ld hl, Data_102a4 + add hl, bc + ld c, [hl] + sla c + ld hl, PointerTable_10274 + add hl, bc + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + srl c + ld a, [$ff8f] + ld l, a + ld a, [$ff90] + ld h, a + add hl, bc + pop af + and a + ld a, [$ff91] + call ReadByteFromBank + jr nz, .asm_10261 + ld a, $5 +.asm_10261 + ld [de], a + inc de + ld a, $0 + ld [de], a + inc de + pop bc + push de + xor a + ld de, LoadTileListsBank1 + call Func_10c5 + pop de + pop hl + pop bc + ret + +PointerTable_10274: ; 0x10274 + dw $9887 + dw $9888 + dw $9889 + dw $988A + dw $988B + dw $988C + dw $98A7 + dw $98A8 + dw $98A9 + dw $98AA + dw $98AB + dw $98AC + dw $98C7 + dw $98C8 + dw $98C9 + dw $98CA + dw $98CB + dw $98CC + dw $98E7 + dw $98E8 + dw $98E9 + dw $98EA + dw $98EB + dw $98EC + +Data_102a4: ; 0x102a4 + db $00, $07, $06, $01, $0E, $15, $14, $0F, $04, $0B, $0A, $05, $0C, $13, $12, $0D, $02, $09, $08, $03, $10, $17, $16, $11 + +Func_102bc: ; 0x102bc + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + sla c + rl b + add c + ld c, a + jr nc, .asm_102cb + inc b +.asm_102cb + ld hl, MonBillboardPalettePointers + add hl, bc + ld a, [hli] + ld [$ff8c], a + ld a, [hli] + ld [$ff8d], a + ld a, [hl] + ld [$ff8e], a + ld de, wc1b8 + ld a, $10 + ld [de], a + inc de + ld a, $8 + ld [de], a + inc de + ld a, $30 + ld [de], a + inc de + ld a, [$ff8c] + ld [de], a + inc de + ld a, [$ff8d] + ld [de], a + inc de + ld a, [$ff8e] + ld [de], a + inc de + ld a, $0 + ld [de], a + xor a + ld bc, wc1b8 + ld de, LoadPalettes + call Func_10c5 + ret + +Func_10301: ; 0x10301 + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + sla c + rl b + add c + ld c, a + jr nc, .asm_10310 + inc b +.asm_10310 + ld hl, MonAnimatedPalettePointers + add hl, bc + ld a, [hli] + ld [$ff8c], a + ld a, [hli] + ld [$ff8d], a + ld a, [hl] + ld [$ff8e], a + ld de, wc1b8 + ld a, $10 + ld [de], a + inc de + ld a, $4 + ld [de], a + inc de + ld a, $58 + ld [de], a + inc de + ld a, [$ff8c] + ld [de], a + inc de + ld a, [$ff8d] + ld [de], a + inc de + ld a, [$ff8e] + ld [de], a + inc de + ld a, $4 + ld [de], a + inc de + ld a, $68 + ld [de], a + inc de + ld a, [$ff8c] + ld l, a + ld a, [$ff8d] + ld h, a + ld bc, $0008 + add hl, bc + ld a, l + ld [de], a + inc de + ld a, h + ld [de], a + inc de + ld a, [$ff8e] + ld [de], a + inc de + ld a, $0 + ld [de], a + xor a + ld bc, wc1b8 + ld de, LoadPalettes + call Func_10c5 + ret + +Func_10362: ; 0x10362 + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + sla c + rl b + add c + ld c, a + jr nc, .asm_10371 + inc b +.asm_10371 + ld hl, MonAnimatedPicPointers + add hl, bc + ld a, [hli] + ld [$ff8c], a + ld a, [hli] + ld [$ff8d], a + ld a, [hl] + ld [$ff8e], a + ld de, wc150 + ld bc, $0000 +.asm_10384 + call Func_1038e + inc c + ld a, c + cp $d + jr nz, .asm_10384 + ret + +Func_1038e: ; 0x1038e + push bc + push de + ld a, c + sla a + add c + ld c, a + sla c + ld hl, Data_103c6 + add hl, bc + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [$ff8c] + add [hl] + ld [de], a + inc hl + inc de + ld a, [$ff8d] + adc [hl] + ld [de], a + inc de + ld a, [$ff8e] + ld [de], a + inc de + ld a, $0 + ld [de], a + inc de + pop bc + push de + xor a + ld de, Func_11d2 + call Func_10c5 + pop de + pop bc + ret + +Data_103c6: ; 0x103c6 +; TODO: this might have pointers in it + db $40, $04, $00, $89, $00, $00 + db $40, $04, $40, $89, $40, $00 + db $40, $04, $80, $89, $80, $00 + db $40, $04, $C0, $89, $C0, $00 + db $40, $04, $00, $8A, $00, $01 + db $40, $04, $40, $8A, $40, $01 + db $20, $02, $80, $8A, $80, $01 + db $20, $02, $A0, $81, $A0, $01 + db $40, $04, $C0, $81, $C0, $01 + db $40, $04, $00, $82, $00, $02 + db $40, $04, $40, $82, $40, $02 + db $40, $04, $80, $82, $80, $02 + db $40, $04, $C0, $82, $C0, $02 + +Func_10414: ; 0x10414 + ld a, BANK(Data_10420) + ld bc, Data_10420 + ld de, Func_11b5 + call Func_10c5 + ret + +Data_10420: + db $18 + db $06 + dw $9887 + db $80 + db $06 + dw $98a7 + db $80 + db $06 + dw $98c7 + db $80 + db $06 + dw $98e7 + db $80 + db $00 + +Func_10432: ; 0x10432 + ld a, BANK(Data_1043e) + ld bc, Data_1043e + ld de, LoadTileLists + call Func_10c5 + ret + +Data_1043e: + db $18 + db $06 + dw $9887 + db $90, $91, $92, $93, $94, $95 + db $06 + dw $98a7 + db $96, $97, $98, $99, $9a, $9b + db $06 + dw $98c7 + db $9c, $9d, $9e, $9f, $a0, $a1 + db $06 + dw $98e7 + db $a2, $a3, $a4, $a5, $a6, $a7 + db $00 + +LoadWildMonCollisionMask: ; 0x10464 + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + sla c + rl b + add c + ld c, a + jr nc, .noCarry + inc b +.noCarry + ld hl, MonAnimatedCollisionMaskPointers + add hl, bc + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hl] + ld h, b + ld l, c + ld de, wMonAnimatedCollisionMask + ld bc, $0080 + call FarCopyData + ret + +ClearWildMonCollisionMask: ; 0x10488 + xor a + ld hl, wMonAnimatedCollisionMask + ld b, $20 +.asm_1048e + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + dec b + jr nz, .asm_1048e + ret + +BallCaptureInit: ; 0x10496 + xor a + ld [wd5c6], a + ld a, BANK(PikachuSaverGfx) + ld hl, PikachuSaverGfx + $c0 + ld de, vTilesOB tile $7e + ld bc, $0020 + call LoadVRAMData + ld a, BANK(BallCaptureSmokeGfx) + ld hl, BallCaptureSmokeGfx + ld de, vTilesSH tile $10 + ld bc, $0180 + call LoadVRAMData + call LoadShakeBallGfx + ld hl, BallCaptureAnimationData + ld de, wBallCaptureAnimationFrameCounter + call CopyHLToDE + ld a, $1 + ld [wCapturingMon], a + xor a + ld [wBallXVelocity], a + ld [wBallXVelocity + 1], a + ld [wBallYVelocity], a + ld [wBallYVelocity + 1], a + xor a + ld [wd548], a + ld [wd549], a + lb de, $00, $0b + call PlaySoundEffect + ret + +LoadShakeBallGfx: ; 0x104e2 +; Loads the graphics for the ball shaking after a pokemon is caught. + ld a, [wBallType] + cp GREAT_BALL + jr nc, .notPokeball + ld a, Bank(PinballPokeballShakeGfx) + ld hl, PinballPokeballShakeGfx + ld de, vTilesOB tile $38 + ld bc, $0040 + call LoadVRAMData + ret + +.notPokeball + cp ULTRA_BALL + jr nc, .notGreatball + ld a, Bank(PinballGreatballShakeGfx) + ld hl, PinballGreatballShakeGfx + ld de, vTilesOB tile $38 + ld bc, $0040 + call LoadVRAMData + ret + +.notGreatball + cp MASTER_BALL + jr nc, .notUltraBall + ld a, Bank(PinballUltraballShakeGfx) + ld hl, PinballUltraballShakeGfx + ld de, vTilesOB tile $38 + ld bc, $0040 + call LoadVRAMData + ret + +.notUltraBall + ld a, Bank(PinballMasterballShakeGfx) + ld hl, PinballMasterballShakeGfx + ld de, vTilesOB tile $38 + ld bc, $0040 + call LoadVRAMData + ret + +CapturePokemon: ; 0x1052d + ld a, [wBallCaptureAnimationFrame] + cp $c + jr nz, .asm_10541 + ld a, [wBallCaptureAnimationFrameCounter] + cp $1 + jr nz, .asm_10541 + lb de, $00, $41 + call PlaySoundEffect +.asm_10541 + ld hl, BallCaptureAnimationData + ld de, wBallCaptureAnimationFrameCounter + call UpdateAnimation + ld a, [wBallCaptureAnimationFrameIndex] + cp $1 + jr nz, .asm_1055d + ld a, [wBallCaptureAnimationFrameCounter] + cp $1 + jr nz, .asm_1055d + xor a + ld [wWildMonIsHittable], a + ret + +.asm_1055d + ld a, [wBallCaptureAnimationFrameIndex] + cp $15 + ret nz + ld a, [wBallCaptureAnimationFrameCounter] + cp $1 + ret nz + call Func_3475 + ld de, $0000 + call PlaySong + rst AdvanceFrame + lb de, $23, $29 + call PlaySoundEffect + call Func_10825 + call Func_3475 + ld a, [wNumPartyMons] + and a + call z, Func_10848 + ld a, $50 + ld [wd4b4], a + ld a, $40 + ld [wd4b6], a + ld a, $80 + ld [wBallXVelocity], a + xor a + ld [wBallXPos], a + ld [wBallYPos], a + ld [wCapturingMon], a + ld a, $1 + ld [wd548], a + ld [wd549], a + callba RestoreBallSaverAfterCatchEmMode + call ConcludeCatchEmMode + ld de, $0001 + call PlaySong + ld hl, wd628 + call Func_e4a + jr nc, .asm_105d1 + ld c, $a + call Func_e55 + callba z, Func_30164 +.asm_105d1 + call SetPokemonOwnedFlag + ld a, [wd624] + cp $3 + ret z + inc a + ld [wd625], a + ld a, $80 + ld [wd626], a + ret + +BallCaptureAnimationData: ; 0x105e4 +; Each entry is [OAM id][duration] + db $05, $00 + db $05, $01 + db $05, $02 + db $04, $03 + db $06, $04 + db $08, $05 + db $07, $06 + db $05, $07 + db $04, $08 + db $04, $09 + db $04, $0A + db $04, $0B + db $24, $0A + db $09, $0C + db $09, $0A + db $09, $0C + db $27, $0A + db $09, $0C + db $09, $0A + db $09, $0C + db $24, $0A + db $01, $0A + db $00 ; terminator + +Func_10611: ; 0x10611 + and a + ret z + dec a + sla a + ld c, a + ld b, $0 + ld hl, Data_1062a + add hl, bc + ld a, [hli] + ld c, a + ld a, [hl] + ld b, a + ld a, BANK(Data_1062a) + ld de, Func_11d2 + call Func_10c5 + ret + +Data_1062a: + dw Data_10630 + dw Data_10638 + dw Data_10640 + +Data_10630: + db $20 + db $02 + dw $8ae0 + dw CatchTextGfx + $00 + db BANK(CatchTextGfx) + db $00 + +Data_10638: + db $20 + db $02 + dw $8b00 + dw CatchTextGfx + $20 + db BANK(CatchTextGfx) + db $00 + +Data_10640: + db $20 + db $02 + dw $8b20 + dw CatchTextGfx + $40 + db BANK(CatchTextGfx) + db $00 + +Func_10648: ; 0x10648 + call Func_10184 + ld a, [wd54e] + dec a + ld [wd54e], a + jr nz, .asm_10677 + ld a, $14 + ld [wd54e], a + ld hl, wd586 + ld b, $18 +.asm_1065e + ld a, [wd54f] + and $1 + ld [hli], a + xor $1 + ld [hli], a + dec b + jr nz, .asm_1065e + ld a, [wd54f] + dec a + ld [wd54f], a + jr nz, .asm_10677 + ld hl, wd54d + inc [hl] +.asm_10677 + ret + +ShowAnimatedWildMon: ; 0x10678 + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + ld hl, MonAnimatedSpriteTypes + add hl, bc + ld a, [hl] + ld [wd5bc], a + ld [wd5bd], a + ld a, $1 + ld [wWildMonIsHittable], a + xor a + ld [wBallHitWildMon], a + ld [wNumMonHits], a + ret + +Func_10696: ; 0x10696 + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5cc + ld de, LetsGetPokemonText + call LoadTextHeader + ret + +Func_106a6: ; 0x106a6 + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5cc + ld de, PokemonRanAwayText + call LoadTextHeader + ret + +Func_106b6: ; 0x106b6 + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + sla c + rl b + sla c + rl b + sla c + rl b + sla c + rl b ; bc was just multiplied by 16 + ld hl, PokemonNames + 1 + add hl, bc + ld de, YouGotAnText ; "You got an" + ld bc, Data_2a91 + ld a, [hl] + ; check if mon's name starts with a vowel, so it can print "an", instead of "a" + cp "A" + jr z, .asm_106f1 + cp "I" + jr z, .asm_106f1 + cp "U" + jr z, .asm_106f1 + cp "E" + jr z, .asm_106f1 + cp "O" + jr z, .asm_106f1 + ld de, YouGotAText ; "You got a" + ld bc, Data_2a79 +.asm_106f1 + push hl + push bc + push de + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5cc + pop de + call LoadTextHeader + ld hl, wd5d4 + pop de + call LoadTextHeader + pop hl + ld de, wBottomMessageText + $20 + ld b, $0 ; count the number of letters in mon's name in register b +.readLetter + ld a, [hli] + and a + jr z, .endOfName + ld [de], a + inc de + inc b + jr .readLetter + +.endOfName + ld a, $20 + ld [de], a + inc de + xor a + ld [de], a + ld a, [wd5db] + add b + ld [wd5db], a + ld a, $14 + sub b + srl a + ld b, a + ld a, [wd5d8] + add b + ld [wd5d8], a + ret + +Func_10732: ; 0x10732 + ld a, [wCurrentCatchEmMon] + inc a + ld e, a + ld d, $0 + call PlayCry + ret + +AddCaughtPokemonToParty: ; 0x1073d + ld a, [wNumPartyMons] + ld c, a + ld b, $0 + ld hl, wPartyMons + add hl, bc + ld a, [wCurrentCatchEmMon] + ld [hl], a + ld a, [wNumPartyMons] + inc a + ld [wNumPartyMons], a + ret + +SetPokemonSeenFlag: ; 0x10753 + ld a, [wSpecialMode] + and a + ld a, [wCurrentCatchEmMon] + jr z, .asm_10766 + ld a, [wCurrentEvolutionMon] + cp $ff + jr nz, .asm_10766 + ld a, [wCurrentCatchEmMon] +.asm_10766 + ld c, a + ld b, $0 + ld hl, wPokedexFlags + add hl, bc + set 0, [hl] + ld hl, wPokedexFlags + ld de, sPokedexFlags + ld bc, $0098 + call SaveData + ret + +SetPokemonOwnedFlag: ; 0x1077c + ld a, [wSpecialMode] + and a + ld a, [wCurrentCatchEmMon] + jr z, .asm_1078f + ld a, [wCurrentEvolutionMon] + cp $ff + jr nz, .asm_1078f + ld a, [wCurrentCatchEmMon] +.asm_1078f + ld c, a + ld b, $0 + ld hl, wPokedexFlags + add hl, bc + set 1, [hl] + ld hl, wPokedexFlags + ld de, sPokedexFlags + ld bc, $0098 + call SaveData + ret + +Func_107a5: ; 0x107a5 + xor a + ld hl, wIndicatorStates + ld b, $13 +.asm_107ab + ld [hli], a + dec b + jr nz, .asm_107ab + ret + +Func_107b0: ; 0x107b0 + xor a + ld [wd604], a + ld [wIndicatorStates + 4], a + callba Func_16425 + ret + +Func_107c2: ; 0x107c2 + ld a, $1e + ld [wd607], a + ret + +Func_107c8: ; 0x107c8 + ld a, [wRightAlleyCount] + cp $3 + jr z, .asm_107d1 + set 7, a +.asm_107d1 + ld [wIndicatorStates + 1], a + ld a, [wRightAlleyCount] + cp $2 + jr c, .asm_107e0 + ld a, $80 + ld [wIndicatorStates + 3], a +.asm_107e0 + ld a, [wLeftAlleyCount] + set 7, a + ld [wIndicatorStates], a + ret + +Func_107e9: ; 0x107e9 + ld a, [wLeftAlleyCount] + cp $3 + ld a, $4 + jr nz, .asm_107f4 + ld a, $6 +.asm_107f4 + ld [wd7ad], a + ret + +Func_107f8: ; 0x107f8 + ld a, [wTimerFrames] + and a + ret nz + ld a, [wTimerMinutes] + and a + ret nz + ld a, [wTimerSeconds] + cp $20 + jr nz, .asm_10810 + lb de, $07, $49 + call PlaySoundEffect + ret + +.asm_10810 + cp $10 + jr nz, .asm_1081b + lb de, $0a, $4a + call PlaySoundEffect + ret + +.asm_1081b + cp $5 + ret nz + lb de, $0d, $4b + call PlaySoundEffect + ret + +Func_10825: ; 0x10825 + call Retrieve8DigitBCDValueAtwd47a + push bc + push de + call AddBCDEToCurBufferValue + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5e9 + ld de, Data_2a50 + call Func_3372 + pop de + pop bc + ld hl, wd5e4 + ld de, JackpotText + call Func_3357 + ret + +Func_10848: ; 0x10848 + ld bc, OneHundredMillionPoints + callba AddBigBCD6FromQueue + call FillBottomMessageBufferWithBlackTile + call Func_30db + ld hl, wd5d4 + ld de, OneBillionText + call LoadTextHeader + ld hl, wd5cc + ld de, PokemonCaughtSpecialBonusText + call LoadTextHeader + call Func_3475 + ret + +Func_10871: ; 0x10871 + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + ld hl, EvolutionLineIds + add hl, bc + ld a, [hl] ; a contains evolution line id + ld c, a + ld b, $0 + ld l, c + ld h, b + sla l + rl h + sla l + rl h + sla l + rl h + sla l + rl h + add hl, bc + add hl, bc + add hl, bc + ld c, l + ld b, h + ld hl, CatchEmModeInitialIndicatorStates + add hl, bc + ld de, wIndicatorStates + ld b, $13 ; number of indicators +.loop + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .loop + xor a + ld [wRightAlleyCount], a + call Func_107b0 + ld a, $4 + ld [wd7ad], a + ld de, $0002 + call PlaySong + ld a, [wCurrentStage] + bit 0, a + jr nz, .asm_108d3 + callba LoadStageCollisionAttributes + callba Func_159f4 + ret + +.asm_108d3 + callba Func_14135 + callba Func_10184 + ld a, [hGameBoyColorFlag] + and a + callba nz, Func_102bc + ret + +Func_108f5: ; 0x108f5 + call Func_107a5 + call Func_107c2 + call Func_107c8 + call Func_107e9 + ld a, [wCurrentStage] + bit 0, a + ret z + callba Func_14135 + call Func_10432 + callba Func_30253 + ld a, Bank(StageSharedBonusSlotGlowGfx) + ld hl, StageSharedBonusSlotGlowGfx + ld de, vTilesOB tile $1a + ld bc, $0160 + call LoadVRAMData + ld a, BANK(StageSharedBonusSlotGlow2Gfx) + ld hl, StageSharedBonusSlotGlow2Gfx + ld de, vTilesOB tile $38 + ld bc, $0020 + call LoadVRAMData + ld hl, BlankSaverSpaceTileDataRedField + ld a, BANK(BlankSaverSpaceTileDataRedField) + call Func_10aa + ld a, [wd624] + callba Func_174d4 + ld hl, CaughtPokeballTileDataPointers + ld a, BANK(CaughtPokeballTileDataPointers) + call Func_10aa + ret + +BlankSaverSpaceTileDataRedField: + db 3 + dw BlankSaverSpaceTileDataRedField1 + dw BlankSaverSpaceTileDataRedField2 + dw BlankSaverSpaceTileDataRedField3 + +BlankSaverSpaceTileDataRedField1: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $2e + dw StageRedFieldBottomBaseGameBoyColorGfx + $2e0 + db Bank(StageRedFieldBottomBaseGameBoyColorGfx) + db $00 + +BlankSaverSpaceTileDataRedField2: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $30 + dw StageRedFieldBottomBaseGameBoyColorGfx + $300 + db Bank(StageRedFieldBottomBaseGameBoyColorGfx) + db $00 + +BlankSaverSpaceTileDataRedField3: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $32 + dw StageRedFieldBottomBaseGameBoyColorGfx + $320 + db Bank(StageRedFieldBottomBaseGameBoyColorGfx) + db $00 + +CaughtPokeballTileDataPointers: + db 1 + dw CaughtPokeballTileData + +CaughtPokeballTileData: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $2e + dw CaughtPokeballGfx + db Bank(CaughtPokeballGfx) + db $00 + +DoNothing_1098a: ; 0x1098a + ret + +DoNothing_1098b: ; 0x1098b + ret + +Func_1098c: ; 0x1098c + ld a, [wCurrentCatchEmMon] + ld c, a + ld b, $0 + ld hl, EvolutionLineIds + add hl, bc + ld a, [hl] + ld c, a + ld b, $0 + ld l, c + ld h, b + sla l + rl h + sla l + rl h + sla l + rl h + sla l + rl h + add hl, bc + add hl, bc + add hl, bc + ld c, l + ld b, h + ld hl, CatchEmModeInitialIndicatorStates + add hl, bc + ld de, wIndicatorStates + ld b, $13 ; number of indicators +.loop + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .loop + xor a + ld [wRightAlleyCount], a + callba Func_1f2ed + ld de, $0002 + call PlaySong + ld a, [wCurrentStage] + bit 0, a + ret z + callba Func_1c2cb + ld [hFarCallTempA], a + ld a, $4 + ld hl, Func_10184 + call BankSwitch + ld a, [hGameBoyColorFlag] + and a + callba nz, Func_102bc + ret + +Func_109fc: ; 0x109fc + call Func_107a5 + call Func_107c2 + callba Func_1f2ff + ld a, [wCurrentStage] + bit 0, a + ret z + callba Func_1c2cb + call Func_10432 + callba Func_30253 + ld a, BANK(StageSharedBonusSlotGlowGfx) + ld hl, StageSharedBonusSlotGlowGfx + ld de, vTilesOB tile $1a + ld bc, $0160 + call LoadVRAMData + ld a, BANK(StageSharedBonusSlotGlow2Gfx) + ld hl, StageSharedBonusSlotGlow2Gfx + ld de, vTilesOB tile $38 + ld bc, $0020 + call LoadVRAMData + ld hl, BlankSaverSpaceTileDataBlueField + ld a, BANK(BlankSaverSpaceTileDataBlueField) + call Func_10aa + ld a, [wd624] + callba Func_174d4 + ld hl, Data_10a88 + ld a, BANK(Data_10a88) + call Func_10aa + ret + +BlankSaverSpaceTileDataBlueField: + db 3 + dw BlankSaverSpaceTileDataBlueField1 + dw BlankSaverSpaceTileDataBlueField2 + dw BlankSaverSpaceTileDataBlueField3 + +BlankSaverSpaceTileDataBlueField1: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $2e + dw StageBlueFieldBottomBaseGameBoyColorGfx + $2e0 + db Bank(StageBlueFieldBottomBaseGameBoyColorGfx) + db $00 + +BlankSaverSpaceTileDataBlueField2: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $30 + dw StageBlueFieldBottomBaseGameBoyColorGfx + $300 + db Bank(StageBlueFieldBottomBaseGameBoyColorGfx) + db $00 + +BlankSaverSpaceTileDataBlueField3: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $32 + dw StageBlueFieldBottomBaseGameBoyColorGfx + $320 + db Bank(StageBlueFieldBottomBaseGameBoyColorGfx) + db $00 + +Data_10a88: + db 1 + dw Data_10a8b + +Data_10a8b: + dw Func_11d2 + db $20, $02 + dw vTilesSH tile $2e + dw CaughtPokeballGfx + db Bank(CaughtPokeballGfx) + db $00 diff --git a/main.asm b/main.asm index 7e8be32..92d815e 100755 --- a/main.asm +++ b/main.asm @@ -214,1461 +214,7 @@ CallTable_10027: ; 0x10027 ; STAGE_BLUE_FIELD_BOTTOM padded_dab Func_202bc -StartCatchEmMode: ; 0x1003f - ld a, [wInSpecialMode] ; current game mode? - and a - ret nz ; don't start catch 'em mode if we're already doing something like Map Move mode - ld a, $1 - ld [wInSpecialMode], a ; set special mode flag - xor a - ld [wSpecialMode], a - ld [wd54d], a - ld a, [wCurrentStage] - sla a - ld c, a - ld b, $0 - push bc - ld hl, WildMonOffsetsPointers - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [wCurrentMap] - sla a - ld c, a - add hl, bc - ld a, [hli] - ld c, a - ld a, [hl] - ld b, a - pop de - ld hl, WildMonPointers - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - add hl, bc - call GenRandom - and $f - call CheckForMew - ld c, a - ld b, $0 - add hl, bc - ld a, [wRareMonsFlag] ; this gets set to $08 when the rare mons should be used. - sla a - ld c, a - add hl, bc - ld a, [hl] ; a contains mon id - dec a - ld [wCurrentCatchEmMon], a - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - ld hl, EvolutionLineIds - add hl, bc - ld c, [hl] - ld h, b - ld l, c - add hl, bc - add hl, bc ; multiply the evolution line id by 3 - ld bc, Data_13685 - add hl, bc - ld a, [hli] - ld [wd5c1], a - ld [wd5be], a - ld a, [hli] - ld [wd5c2], a - ld a, [hli] - ld [wd5c3], a - ld hl, wd586 - ld a, [wd5b6] - ld c, a - and a - ld b, $18 - jr z, .asm_100c7 -.asm_100ba - ld a, $1 - ld [hli], a - xor a - ld [hli], a - dec b - dec c - jr nz, .asm_100ba - ld a, b - and a - jr z, .asm_100ce -.asm_100c7 - xor a - ld [hli], a - inc a - ld [hli], a - dec b - jr nz, .asm_100c7 -.asm_100ce - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - sla c - rl b - ld hl, CatchEmTimerData - add hl, bc - ld a, [hli] - ld c, a - ld a, [hl] - ld b, a - callba StartTimer - callba InitBallSaverForCatchEmMode - call Func_10696 - call Func_3579 - ld a, [wCurrentStage] - bit 0, a - jr z, .asm_1011d - ld a, BANK(StageRedFieldBottomBaseGameBoyColorGfx) - ld hl, StageRedFieldBottomBaseGameBoyColorGfx + $300 - ld de, vTilesSH tile $2e - ld bc, $0020 - call LoadOrCopyVRAMData - ld a, $0 - ld hl, CatchBarTiles - deCoord 6, 8, vBGMap - ld bc, (CatchBarTilesEnd - CatchBarTiles) - call LoadOrCopyVRAMData -.asm_1011d - call SetPokemonSeenFlag - ld a, [wCurrentStage] - rst JumpTable ; calls JumpToFuncInTable -CallTable_10124: ; 0x10124 - ; STAGE_RED_FIELD_TOP - dw Func_10871 - ; STAGE_RED_FIELD_BOTTOM - dw Func_10871 - dw DoNothing_1098a - dw DoNothing_1098a - ; STAGE_BLUE_FIELD_TOP - dw Func_1098c - ; STAGE_BLUE_FIELD_BOTTOM - dw Func_1098c - -CheckForMew: -; Sets the encountered mon to Mew if the following conditions are met: -; 1. Random number in register a equals $f -; 2. The current map is Indigo Plateau (it does a roundabout way of checking this) -; 3. The right alley has been hit three times -; 4. The Mewtwo Bonus Stage completion counter equals 2. - push af - cp $f ; random number equals $f - jr nz, .asm_10155 - ld a, c - cp (BlueStageIndigoPlateauWildMons - BlueStageWildMons) & $ff ; check if low-byte of map mons offset is Indigo Plateau - jr nz, .asm_10155 - ld a, b - cp (BlueStageIndigoPlateauWildMons - BlueStageWildMons) >> 8 ; check if high-byte of map mons offset is Indigo Plateau - jr nz, .asm_10155 - ld a, [wRareMonsFlag] - cp $8 - jr nz, .asm_10155 - ld a, [wNumMewtwoBonusCompletions] - cp NUM_MEWTWO_COMPLETIONS_FOR_MEW - jr nz, .asm_10155 - pop af - xor a - ld [wNumMewtwoBonusCompletions], a - ld a, $10 - ret - -.asm_10155 - pop af - ret - -ConcludeCatchEmMode: ; 0x10157 - xor a - ld [wInSpecialMode], a - ld [wWildMonIsHittable], a - ld [wd5c6], a - ld [wd5b6], a - ld [wNumMonHits], a - call ClearWildMonCollisionMask - callba StopTimer - ld a, [wCurrentStage] - rst JumpTable ; calls JumpToFuncInTable -CallTable_10178: ; 0x10178 - ; STAGE_RED_FIELD_TOP - dw Func_108f5 - ; STAGE_RED_FIELD_BOTTOM - dw Func_108f5 - dw DoNothing_1098b - dw DoNothing_1098b - ; STAGE_BLUE_FIELD_TOP - dw Func_109fc - ; STAGE_BLUE_FIELD_BOTTOM - dw Func_109fc - -Func_10184: ; 0x10184 - ld a, [wCurrentStage] - bit 0, a - ret z - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - sla c - rl b - add c - ld c, a - jr nc, .asm_10199 - inc b -.asm_10199 - ld hl, MonBillboardPicPointers - add hl, bc - ld a, [hli] - ld [$ff8c], a - ld a, [hli] - ld [$ff8d], a - ld a, [hl] - ld [$ff8e], a - ld hl, MonBillboardPaletteMapPointers - add hl, bc - ld a, [hli] - ld [$ff8f], a - ld a, [hli] - ld [$ff90], a - ld a, [hli] - ld [$ff91], a - ld de, wc000 - ld hl, wd586 - ld c, $0 -.asm_101bb - ld a, [hli] - cp [hl] - ld [hli], a - jr z, .asm_101d2 - ld b, a - call nz, Func_101d9 - ld a, [hGameBoyColorFlag] - and a - jr z, .asm_101d2 - ld a, [wCurrentStage] - bit 0, a - ld a, b - call nz, Func_10230 -.asm_101d2 - inc c - ld a, c - cp $18 - jr nz, .asm_101bb - ret - -Func_101d9: ; 0x101d9 - push bc - push hl - push de - push af - ld a, $10 - ld [de], a - inc de - ld a, $1 - ld [de], a - inc de - ld b, $0 - ld hl, Data_102a4 - add hl, bc - ld c, [hl] - sla c - rl b - sla c - rl b - sla c - rl b - sla c - rl b - ld hl, vTilesSH tile $10 - add hl, bc - ld a, l - ld [de], a - inc de - ld a, h - ld [de], a - inc de - ld a, [$ff8c] - ld l, a - ld a, [$ff8d] - ld h, a - add hl, bc - pop af - and a - jr nz, .asm_10215 - ld bc, $0180 - add hl, bc -.asm_10215 - ld a, l - ld [de], a - inc de - ld a, h - ld [de], a - inc de - ld a, [$ff8e] - ld [de], a - inc de - ld a, $0 - ld [de], a - inc de - pop bc - push de - xor a - ld de, Func_11d2 - call Func_10c5 - pop de - pop hl - pop bc - ret - -Func_10230: ; 0x10230 - push bc - push hl - push de - push af - ld a, $1 - ld [de], a - inc de - ld [de], a - inc de - ld b, $0 - ld hl, Data_102a4 - add hl, bc - ld c, [hl] - sla c - ld hl, PointerTable_10274 - add hl, bc - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - inc de - srl c - ld a, [$ff8f] - ld l, a - ld a, [$ff90] - ld h, a - add hl, bc - pop af - and a - ld a, [$ff91] - call ReadByteFromBank - jr nz, .asm_10261 - ld a, $5 -.asm_10261 - ld [de], a - inc de - ld a, $0 - ld [de], a - inc de - pop bc - push de - xor a - ld de, LoadTileListsBank1 - call Func_10c5 - pop de - pop hl - pop bc - ret - -PointerTable_10274: ; 0x10274 - dw $9887 - dw $9888 - dw $9889 - dw $988A - dw $988B - dw $988C - dw $98A7 - dw $98A8 - dw $98A9 - dw $98AA - dw $98AB - dw $98AC - dw $98C7 - dw $98C8 - dw $98C9 - dw $98CA - dw $98CB - dw $98CC - dw $98E7 - dw $98E8 - dw $98E9 - dw $98EA - dw $98EB - dw $98EC - -Data_102a4: ; 0x102a4 - db $00, $07, $06, $01, $0E, $15, $14, $0F, $04, $0B, $0A, $05, $0C, $13, $12, $0D, $02, $09, $08, $03, $10, $17, $16, $11 - -Func_102bc: ; 0x102bc - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - sla c - rl b - add c - ld c, a - jr nc, .asm_102cb - inc b -.asm_102cb - ld hl, MonBillboardPalettePointers - add hl, bc - ld a, [hli] - ld [$ff8c], a - ld a, [hli] - ld [$ff8d], a - ld a, [hl] - ld [$ff8e], a - ld de, wc1b8 - ld a, $10 - ld [de], a - inc de - ld a, $8 - ld [de], a - inc de - ld a, $30 - ld [de], a - inc de - ld a, [$ff8c] - ld [de], a - inc de - ld a, [$ff8d] - ld [de], a - inc de - ld a, [$ff8e] - ld [de], a - inc de - ld a, $0 - ld [de], a - xor a - ld bc, wc1b8 - ld de, LoadPalettes - call Func_10c5 - ret - -Func_10301: ; 0x10301 - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - sla c - rl b - add c - ld c, a - jr nc, .asm_10310 - inc b -.asm_10310 - ld hl, MonAnimatedPalettePointers - add hl, bc - ld a, [hli] - ld [$ff8c], a - ld a, [hli] - ld [$ff8d], a - ld a, [hl] - ld [$ff8e], a - ld de, wc1b8 - ld a, $10 - ld [de], a - inc de - ld a, $4 - ld [de], a - inc de - ld a, $58 - ld [de], a - inc de - ld a, [$ff8c] - ld [de], a - inc de - ld a, [$ff8d] - ld [de], a - inc de - ld a, [$ff8e] - ld [de], a - inc de - ld a, $4 - ld [de], a - inc de - ld a, $68 - ld [de], a - inc de - ld a, [$ff8c] - ld l, a - ld a, [$ff8d] - ld h, a - ld bc, $0008 - add hl, bc - ld a, l - ld [de], a - inc de - ld a, h - ld [de], a - inc de - ld a, [$ff8e] - ld [de], a - inc de - ld a, $0 - ld [de], a - xor a - ld bc, wc1b8 - ld de, LoadPalettes - call Func_10c5 - ret - -Func_10362: ; 0x10362 - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - sla c - rl b - add c - ld c, a - jr nc, .asm_10371 - inc b -.asm_10371 - ld hl, MonAnimatedPicPointers - add hl, bc - ld a, [hli] - ld [$ff8c], a - ld a, [hli] - ld [$ff8d], a - ld a, [hl] - ld [$ff8e], a - ld de, wc150 - ld bc, $0000 -.asm_10384 - call Func_1038e - inc c - ld a, c - cp $d - jr nz, .asm_10384 - ret - -Func_1038e: ; 0x1038e - push bc - push de - ld a, c - sla a - add c - ld c, a - sla c - ld hl, Data_103c6 - add hl, bc - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [$ff8c] - add [hl] - ld [de], a - inc hl - inc de - ld a, [$ff8d] - adc [hl] - ld [de], a - inc de - ld a, [$ff8e] - ld [de], a - inc de - ld a, $0 - ld [de], a - inc de - pop bc - push de - xor a - ld de, Func_11d2 - call Func_10c5 - pop de - pop bc - ret - -Data_103c6: ; 0x103c6 -; TODO: this might have pointers in it - db $40, $04, $00, $89, $00, $00 - db $40, $04, $40, $89, $40, $00 - db $40, $04, $80, $89, $80, $00 - db $40, $04, $C0, $89, $C0, $00 - db $40, $04, $00, $8A, $00, $01 - db $40, $04, $40, $8A, $40, $01 - db $20, $02, $80, $8A, $80, $01 - db $20, $02, $A0, $81, $A0, $01 - db $40, $04, $C0, $81, $C0, $01 - db $40, $04, $00, $82, $00, $02 - db $40, $04, $40, $82, $40, $02 - db $40, $04, $80, $82, $80, $02 - db $40, $04, $C0, $82, $C0, $02 - -Func_10414: ; 0x10414 - ld a, BANK(Data_10420) - ld bc, Data_10420 - ld de, Func_11b5 - call Func_10c5 - ret - -Data_10420: - db $18 - db $06 - dw $9887 - db $80 - db $06 - dw $98a7 - db $80 - db $06 - dw $98c7 - db $80 - db $06 - dw $98e7 - db $80 - db $00 - -Func_10432: ; 0x10432 - ld a, BANK(Data_1043e) - ld bc, Data_1043e - ld de, LoadTileLists - call Func_10c5 - ret - -Data_1043e: - db $18 - db $06 - dw $9887 - db $90, $91, $92, $93, $94, $95 - db $06 - dw $98a7 - db $96, $97, $98, $99, $9a, $9b - db $06 - dw $98c7 - db $9c, $9d, $9e, $9f, $a0, $a1 - db $06 - dw $98e7 - db $a2, $a3, $a4, $a5, $a6, $a7 - db $00 - -LoadWildMonCollisionMask: ; 0x10464 - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - sla c - rl b - add c - ld c, a - jr nc, .noCarry - inc b -.noCarry - ld hl, MonAnimatedCollisionMaskPointers - add hl, bc - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [hl] - ld h, b - ld l, c - ld de, wMonAnimatedCollisionMask - ld bc, $0080 - call FarCopyData - ret - -ClearWildMonCollisionMask: ; 0x10488 - xor a - ld hl, wMonAnimatedCollisionMask - ld b, $20 -.asm_1048e - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - dec b - jr nz, .asm_1048e - ret - -BallCaptureInit: ; 0x10496 - xor a - ld [wd5c6], a - ld a, BANK(PikachuSaverGfx) - ld hl, PikachuSaverGfx + $c0 - ld de, vTilesOB tile $7e - ld bc, $0020 - call LoadVRAMData - ld a, BANK(BallCaptureSmokeGfx) - ld hl, BallCaptureSmokeGfx - ld de, vTilesSH tile $10 - ld bc, $0180 - call LoadVRAMData - call LoadShakeBallGfx - ld hl, BallCaptureAnimationData - ld de, wBallCaptureAnimationFrameCounter - call CopyHLToDE - ld a, $1 - ld [wCapturingMon], a - xor a - ld [wBallXVelocity], a - ld [wBallXVelocity + 1], a - ld [wBallYVelocity], a - ld [wBallYVelocity + 1], a - xor a - ld [wd548], a - ld [wd549], a - lb de, $00, $0b - call PlaySoundEffect - ret - -LoadShakeBallGfx: ; 0x104e2 -; Loads the graphics for the ball shaking after a pokemon is caught. - ld a, [wBallType] - cp GREAT_BALL - jr nc, .notPokeball - ld a, Bank(PinballPokeballShakeGfx) - ld hl, PinballPokeballShakeGfx - ld de, vTilesOB tile $38 - ld bc, $0040 - call LoadVRAMData - ret - -.notPokeball - cp ULTRA_BALL - jr nc, .notGreatball - ld a, Bank(PinballGreatballShakeGfx) - ld hl, PinballGreatballShakeGfx - ld de, vTilesOB tile $38 - ld bc, $0040 - call LoadVRAMData - ret - -.notGreatball - cp MASTER_BALL - jr nc, .notUltraBall - ld a, Bank(PinballUltraballShakeGfx) - ld hl, PinballUltraballShakeGfx - ld de, vTilesOB tile $38 - ld bc, $0040 - call LoadVRAMData - ret - -.notUltraBall - ld a, Bank(PinballMasterballShakeGfx) - ld hl, PinballMasterballShakeGfx - ld de, vTilesOB tile $38 - ld bc, $0040 - call LoadVRAMData - ret - -CapturePokemon: ; 0x1052d - ld a, [wBallCaptureAnimationFrame] - cp $c - jr nz, .asm_10541 - ld a, [wBallCaptureAnimationFrameCounter] - cp $1 - jr nz, .asm_10541 - lb de, $00, $41 - call PlaySoundEffect -.asm_10541 - ld hl, BallCaptureAnimationData - ld de, wBallCaptureAnimationFrameCounter - call UpdateAnimation - ld a, [wBallCaptureAnimationFrameIndex] - cp $1 - jr nz, .asm_1055d - ld a, [wBallCaptureAnimationFrameCounter] - cp $1 - jr nz, .asm_1055d - xor a - ld [wWildMonIsHittable], a - ret - -.asm_1055d - ld a, [wBallCaptureAnimationFrameIndex] - cp $15 - ret nz - ld a, [wBallCaptureAnimationFrameCounter] - cp $1 - ret nz - call Func_3475 - ld de, $0000 - call PlaySong - rst AdvanceFrame - lb de, $23, $29 - call PlaySoundEffect - call Func_10825 - call Func_3475 - ld a, [wNumPartyMons] - and a - call z, Func_10848 - ld a, $50 - ld [wd4b4], a - ld a, $40 - ld [wd4b6], a - ld a, $80 - ld [wBallXVelocity], a - xor a - ld [wBallXPos], a - ld [wBallYPos], a - ld [wCapturingMon], a - ld a, $1 - ld [wd548], a - ld [wd549], a - callba RestoreBallSaverAfterCatchEmMode - call ConcludeCatchEmMode - ld de, $0001 - call PlaySong - ld hl, wd628 - call Func_e4a - jr nc, .asm_105d1 - ld c, $a - call Func_e55 - callba z, Func_30164 -.asm_105d1 - call SetPokemonOwnedFlag - ld a, [wd624] - cp $3 - ret z - inc a - ld [wd625], a - ld a, $80 - ld [wd626], a - ret - -BallCaptureAnimationData: ; 0x105e4 -; Each entry is [OAM id][duration] - db $05, $00 - db $05, $01 - db $05, $02 - db $04, $03 - db $06, $04 - db $08, $05 - db $07, $06 - db $05, $07 - db $04, $08 - db $04, $09 - db $04, $0A - db $04, $0B - db $24, $0A - db $09, $0C - db $09, $0A - db $09, $0C - db $27, $0A - db $09, $0C - db $09, $0A - db $09, $0C - db $24, $0A - db $01, $0A - db $00 ; terminator - -Func_10611: ; 0x10611 - and a - ret z - dec a - sla a - ld c, a - ld b, $0 - ld hl, Data_1062a - add hl, bc - ld a, [hli] - ld c, a - ld a, [hl] - ld b, a - ld a, BANK(Data_1062a) - ld de, Func_11d2 - call Func_10c5 - ret - -Data_1062a: - dw Data_10630 - dw Data_10638 - dw Data_10640 - -Data_10630: - db $20 - db $02 - dw $8ae0 - dw CatchTextGfx + $00 - db BANK(CatchTextGfx) - db $00 - -Data_10638: - db $20 - db $02 - dw $8b00 - dw CatchTextGfx + $20 - db BANK(CatchTextGfx) - db $00 - -Data_10640: - db $20 - db $02 - dw $8b20 - dw CatchTextGfx + $40 - db BANK(CatchTextGfx) - db $00 - -Func_10648: ; 0x10648 - call Func_10184 - ld a, [wd54e] - dec a - ld [wd54e], a - jr nz, .asm_10677 - ld a, $14 - ld [wd54e], a - ld hl, wd586 - ld b, $18 -.asm_1065e - ld a, [wd54f] - and $1 - ld [hli], a - xor $1 - ld [hli], a - dec b - jr nz, .asm_1065e - ld a, [wd54f] - dec a - ld [wd54f], a - jr nz, .asm_10677 - ld hl, wd54d - inc [hl] -.asm_10677 - ret - -ShowAnimatedWildMon: ; 0x10678 - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - ld hl, MonAnimatedSpriteTypes - add hl, bc - ld a, [hl] - ld [wd5bc], a - ld [wd5bd], a - ld a, $1 - ld [wWildMonIsHittable], a - xor a - ld [wBallHitWildMon], a - ld [wNumMonHits], a - ret - -Func_10696: ; 0x10696 - call FillBottomMessageBufferWithBlackTile - call Func_30db - ld hl, wd5cc - ld de, LetsGetPokemonText - call LoadTextHeader - ret - -Func_106a6: ; 0x106a6 - call FillBottomMessageBufferWithBlackTile - call Func_30db - ld hl, wd5cc - ld de, PokemonRanAwayText - call LoadTextHeader - ret - -Func_106b6: ; 0x106b6 - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - sla c - rl b - sla c - rl b - sla c - rl b - sla c - rl b ; bc was just multiplied by 16 - ld hl, PokemonNames + 1 - add hl, bc - ld de, YouGotAnText ; "You got an" - ld bc, Data_2a91 - ld a, [hl] - ; check if mon's name starts with a vowel, so it can print "an", instead of "a" - cp "A" - jr z, .asm_106f1 - cp "I" - jr z, .asm_106f1 - cp "U" - jr z, .asm_106f1 - cp "E" - jr z, .asm_106f1 - cp "O" - jr z, .asm_106f1 - ld de, YouGotAText ; "You got a" - ld bc, Data_2a79 -.asm_106f1 - push hl - push bc - push de - call FillBottomMessageBufferWithBlackTile - call Func_30db - ld hl, wd5cc - pop de - call LoadTextHeader - ld hl, wd5d4 - pop de - call LoadTextHeader - pop hl - ld de, wBottomMessageText + $20 - ld b, $0 ; count the number of letters in mon's name in register b -.readLetter - ld a, [hli] - and a - jr z, .endOfName - ld [de], a - inc de - inc b - jr .readLetter - -.endOfName - ld a, $20 - ld [de], a - inc de - xor a - ld [de], a - ld a, [wd5db] - add b - ld [wd5db], a - ld a, $14 - sub b - srl a - ld b, a - ld a, [wd5d8] - add b - ld [wd5d8], a - ret - -Func_10732: ; 0x10732 - ld a, [wCurrentCatchEmMon] - inc a - ld e, a - ld d, $0 - call PlayCry - ret - -AddCaughtPokemonToParty: ; 0x1073d - ld a, [wNumPartyMons] - ld c, a - ld b, $0 - ld hl, wPartyMons - add hl, bc - ld a, [wCurrentCatchEmMon] - ld [hl], a - ld a, [wNumPartyMons] - inc a - ld [wNumPartyMons], a - ret - -SetPokemonSeenFlag: ; 0x10753 - ld a, [wSpecialMode] - and a - ld a, [wCurrentCatchEmMon] - jr z, .asm_10766 - ld a, [wCurrentEvolutionMon] - cp $ff - jr nz, .asm_10766 - ld a, [wCurrentCatchEmMon] -.asm_10766 - ld c, a - ld b, $0 - ld hl, wPokedexFlags - add hl, bc - set 0, [hl] - ld hl, wPokedexFlags - ld de, sPokedexFlags - ld bc, $0098 - call SaveData - ret - -SetPokemonOwnedFlag: ; 0x1077c - ld a, [wSpecialMode] - and a - ld a, [wCurrentCatchEmMon] - jr z, .asm_1078f - ld a, [wCurrentEvolutionMon] - cp $ff - jr nz, .asm_1078f - ld a, [wCurrentCatchEmMon] -.asm_1078f - ld c, a - ld b, $0 - ld hl, wPokedexFlags - add hl, bc - set 1, [hl] - ld hl, wPokedexFlags - ld de, sPokedexFlags - ld bc, $0098 - call SaveData - ret - -Func_107a5: ; 0x107a5 - xor a - ld hl, wIndicatorStates - ld b, $13 -.asm_107ab - ld [hli], a - dec b - jr nz, .asm_107ab - ret - -Func_107b0: ; 0x107b0 - xor a - ld [wd604], a - ld [wIndicatorStates + 4], a - callba Func_16425 - ret - -Func_107c2: ; 0x107c2 - ld a, $1e - ld [wd607], a - ret - -Func_107c8: ; 0x107c8 - ld a, [wRightAlleyCount] - cp $3 - jr z, .asm_107d1 - set 7, a -.asm_107d1 - ld [wIndicatorStates + 1], a - ld a, [wRightAlleyCount] - cp $2 - jr c, .asm_107e0 - ld a, $80 - ld [wIndicatorStates + 3], a -.asm_107e0 - ld a, [wLeftAlleyCount] - set 7, a - ld [wIndicatorStates], a - ret - -Func_107e9: ; 0x107e9 - ld a, [wLeftAlleyCount] - cp $3 - ld a, $4 - jr nz, .asm_107f4 - ld a, $6 -.asm_107f4 - ld [wd7ad], a - ret - -Func_107f8: ; 0x107f8 - ld a, [wTimerFrames] - and a - ret nz - ld a, [wTimerMinutes] - and a - ret nz - ld a, [wTimerSeconds] - cp $20 - jr nz, .asm_10810 - lb de, $07, $49 - call PlaySoundEffect - ret - -.asm_10810 - cp $10 - jr nz, .asm_1081b - lb de, $0a, $4a - call PlaySoundEffect - ret - -.asm_1081b - cp $5 - ret nz - lb de, $0d, $4b - call PlaySoundEffect - ret - -Func_10825: ; 0x10825 - call Retrieve8DigitBCDValueAtwd47a - push bc - push de - call AddBCDEToCurBufferValue - call FillBottomMessageBufferWithBlackTile - call Func_30db - ld hl, wd5e9 - ld de, Data_2a50 - call Func_3372 - pop de - pop bc - ld hl, wd5e4 - ld de, JackpotText - call Func_3357 - ret - -Func_10848: ; 0x10848 - ld bc, OneHundredMillionPoints - callba AddBigBCD6FromQueue - call FillBottomMessageBufferWithBlackTile - call Func_30db - ld hl, wd5d4 - ld de, OneBillionText - call LoadTextHeader - ld hl, wd5cc - ld de, PokemonCaughtSpecialBonusText - call LoadTextHeader - call Func_3475 - ret - -Func_10871: ; 0x10871 - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - ld hl, EvolutionLineIds - add hl, bc - ld a, [hl] ; a contains evolution line id - ld c, a - ld b, $0 - ld l, c - ld h, b - sla l - rl h - sla l - rl h - sla l - rl h - sla l - rl h - add hl, bc - add hl, bc - add hl, bc - ld c, l - ld b, h - ld hl, CatchEmModeInitialIndicatorStates - add hl, bc - ld de, wIndicatorStates - ld b, $13 ; number of indicators -.loop - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .loop - xor a - ld [wRightAlleyCount], a - call Func_107b0 - ld a, $4 - ld [wd7ad], a - ld de, $0002 - call PlaySong - ld a, [wCurrentStage] - bit 0, a - jr nz, .asm_108d3 - callba LoadStageCollisionAttributes - callba Func_159f4 - ret - -.asm_108d3 - callba Func_14135 - callba Func_10184 - ld a, [hGameBoyColorFlag] - and a - callba nz, Func_102bc - ret - -Func_108f5: ; 0x108f5 - call Func_107a5 - call Func_107c2 - call Func_107c8 - call Func_107e9 - ld a, [wCurrentStage] - bit 0, a - ret z - callba Func_14135 - call Func_10432 - callba Func_30253 - ld a, Bank(StageSharedBonusSlotGlowGfx) - ld hl, StageSharedBonusSlotGlowGfx - ld de, vTilesOB tile $1a - ld bc, $0160 - call LoadVRAMData - ld a, BANK(StageSharedBonusSlotGlow2Gfx) - ld hl, StageSharedBonusSlotGlow2Gfx - ld de, vTilesOB tile $38 - ld bc, $0020 - call LoadVRAMData - ld hl, BlankSaverSpaceTileDataRedField - ld a, BANK(BlankSaverSpaceTileDataRedField) - call Func_10aa - ld a, [wd624] - callba Func_174d4 - ld hl, CaughtPokeballTileDataPointers - ld a, BANK(CaughtPokeballTileDataPointers) - call Func_10aa - ret - -BlankSaverSpaceTileDataRedField: - db 3 - dw BlankSaverSpaceTileDataRedField1 - dw BlankSaverSpaceTileDataRedField2 - dw BlankSaverSpaceTileDataRedField3 - -BlankSaverSpaceTileDataRedField1: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $2e - dw StageRedFieldBottomBaseGameBoyColorGfx + $2e0 - db Bank(StageRedFieldBottomBaseGameBoyColorGfx) - db $00 - -BlankSaverSpaceTileDataRedField2: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $30 - dw StageRedFieldBottomBaseGameBoyColorGfx + $300 - db Bank(StageRedFieldBottomBaseGameBoyColorGfx) - db $00 - -BlankSaverSpaceTileDataRedField3: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $32 - dw StageRedFieldBottomBaseGameBoyColorGfx + $320 - db Bank(StageRedFieldBottomBaseGameBoyColorGfx) - db $00 - -CaughtPokeballTileDataPointers: - db 1 - dw CaughtPokeballTileData - -CaughtPokeballTileData: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $2e - dw CaughtPokeballGfx - db Bank(CaughtPokeballGfx) - db $00 - -DoNothing_1098a: ; 0x1098a - ret - -DoNothing_1098b: ; 0x1098b - ret - -Func_1098c: ; 0x1098c - ld a, [wCurrentCatchEmMon] - ld c, a - ld b, $0 - ld hl, EvolutionLineIds - add hl, bc - ld a, [hl] - ld c, a - ld b, $0 - ld l, c - ld h, b - sla l - rl h - sla l - rl h - sla l - rl h - sla l - rl h - add hl, bc - add hl, bc - add hl, bc - ld c, l - ld b, h - ld hl, CatchEmModeInitialIndicatorStates - add hl, bc - ld de, wIndicatorStates - ld b, $13 ; number of indicators -.loop - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .loop - xor a - ld [wRightAlleyCount], a - callba Func_1f2ed - ld de, $0002 - call PlaySong - ld a, [wCurrentStage] - bit 0, a - ret z - callba Func_1c2cb - ld [hFarCallTempA], a - ld a, $4 - ld hl, Func_10184 - call BankSwitch - ld a, [hGameBoyColorFlag] - and a - callba nz, Func_102bc - ret - -Func_109fc: ; 0x109fc - call Func_107a5 - call Func_107c2 - callba Func_1f2ff - ld a, [wCurrentStage] - bit 0, a - ret z - callba Func_1c2cb - call Func_10432 - callba Func_30253 - ld a, BANK(StageSharedBonusSlotGlowGfx) - ld hl, StageSharedBonusSlotGlowGfx - ld de, vTilesOB tile $1a - ld bc, $0160 - call LoadVRAMData - ld a, BANK(StageSharedBonusSlotGlow2Gfx) - ld hl, StageSharedBonusSlotGlow2Gfx - ld de, vTilesOB tile $38 - ld bc, $0020 - call LoadVRAMData - ld hl, BlankSaverSpaceTileDataBlueField - ld a, BANK(BlankSaverSpaceTileDataBlueField) - call Func_10aa - ld a, [wd624] - callba Func_174d4 - ld hl, Data_10a88 - ld a, BANK(Data_10a88) - call Func_10aa - ret - -BlankSaverSpaceTileDataBlueField: - db 3 - dw BlankSaverSpaceTileDataBlueField1 - dw BlankSaverSpaceTileDataBlueField2 - dw BlankSaverSpaceTileDataBlueField3 - -BlankSaverSpaceTileDataBlueField1: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $2e - dw StageBlueFieldBottomBaseGameBoyColorGfx + $2e0 - db Bank(StageBlueFieldBottomBaseGameBoyColorGfx) - db $00 - -BlankSaverSpaceTileDataBlueField2: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $30 - dw StageBlueFieldBottomBaseGameBoyColorGfx + $300 - db Bank(StageBlueFieldBottomBaseGameBoyColorGfx) - db $00 - -BlankSaverSpaceTileDataBlueField3: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $32 - dw StageBlueFieldBottomBaseGameBoyColorGfx + $320 - db Bank(StageBlueFieldBottomBaseGameBoyColorGfx) - db $00 - -Data_10a88: - db 1 - dw Data_10a8b - -Data_10a8b: - dw Func_11d2 - db $20, $02 - dw vTilesSH tile $2e - dw CaughtPokeballGfx - db Bank(CaughtPokeballGfx) - db $00 +INCLUDE "engine/pinball_game/catchem_mode.asm" Func_10a95: ; 0x19a95 ld a, [wCurrentStage] -- cgit v1.2.3