diff options
Diffstat (limited to 'engine')
42 files changed, 23851 insertions, 794 deletions
diff --git a/engine/battle_start.asm b/engine/battle_start.asm index 4b12bb632..0897b8a4a 100644 --- a/engine/battle_start.asm +++ b/engine/battle_start.asm @@ -26,7 +26,7 @@ Predef_StartBattle: ; 8c20f ld a, $5 ld [rSVBK], a - ld hl, Unkn1Pals + ld hl, wMapPals ld bc, $0040 xor a call ByteFill @@ -254,7 +254,7 @@ StartTrainerBattle_SetUpBGMap: ; 8c3a1 (23:43a1) call StartTrainerBattle_NextScene xor a ld [wcf64], a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ret StartTrainerBattle_Flash: ; 8c3ab (23:43ab) @@ -309,10 +309,10 @@ StartTrainerBattle_Flash: ; 8c3ab (23:43ab) StartTrainerBattle_SetUpForWavyOutro: ; 8c3e8 (23:43e8) callba Function5602 ld a, $5 - ld [rSVBK], a ; $ff00+$70 + ld [rSVBK], a call StartTrainerBattle_NextScene ld a, $43 - ld [hLCDStatCustom], a ; $ff00+$c6 + ld [hLCDStatCustom], a xor a ld [hLCDStatCustom + 1], a ld a, $90 @@ -365,7 +365,7 @@ StartTrainerBattle_SineWave: ; 8c408 (23:4408) StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d) callba Function5602 ld a, $5 - ld [rSVBK], a ; $ff00+$70 + ld [rSVBK], a call StartTrainerBattle_NextScene xor a ld [wcf64], a @@ -386,7 +386,7 @@ ENDM StartTrainerBattle_SpinToBlack: ; 8c44f (23:444f) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld a, [wcf64] ld e, a ld d, 0 @@ -400,7 +400,7 @@ endr ld [wcf65], a call .load ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call DelayFrame call DelayFrame ld hl, wcf64 @@ -409,12 +409,12 @@ endr .end ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call DelayFrame call DelayFrame call DelayFrame xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld a, $20 ld [wJumptableIndex], a ret @@ -508,12 +508,12 @@ endr StartTrainerBattle_SetUpForRandomScatterOutro: ; 8c578 (23:4578) callba Function5602 ld a, $5 - ld [rSVBK], a ; $ff00+$70 + ld [rSVBK], a call StartTrainerBattle_NextScene ld a, $10 ld [wcf64], a ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ret StartTrainerBattle_SpeckleToBlack: ; 8c58f (23:458f) @@ -533,12 +533,12 @@ StartTrainerBattle_SpeckleToBlack: ; 8c58f (23:458f) .done ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call DelayFrame call DelayFrame call DelayFrame xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld a, $20 ld [wJumptableIndex], a ret @@ -580,7 +580,7 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) jp z, .nextscene xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a hlcoord 0, 0, AttrMap ld bc, SCREEN_HEIGHT * SCREEN_WIDTH inc b @@ -636,11 +636,11 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) dec b jr nz, .loop2 - ld a, [hCGB] ; $ff00+$e6 + ld a, [hCGB] and a jr nz, .cgb ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call DelayFrame call DelayFrame jr .nextscene @@ -653,13 +653,13 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) jr nz, .daytime ld hl, .nightpals .daytime - ld a, [rSVBK] ; $ff00+$70 + ld a, [rSVBK] push af ld a, $5 ; WRAM5 = palettes - ld [rSVBK], a ; $ff00+$70 + ld [rSVBK], a call .copypals push hl - ld de, Unkn1Pals + 8 * 7 + ld de, wMapPals + 8 * 7 ld bc, $8 call CopyBytes pop hl @@ -667,9 +667,9 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) ld bc, $8 call CopyBytes pop af - ld [rSVBK], a ; $ff00+$70 + ld [rSVBK], a ld a, $1 - ld [hCGBPalUpdate], a ; $ff00+$e5 + ld [hCGBPalUpdate], a call DelayFrame call Function8cf4f @@ -678,7 +678,7 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) ret .copypals: ; 8c677 (23:4677) - ld de, Unkn1Pals + 8 * 7 + ld de, wMapPals + 8 * 7 call .copy ld de, BGPals + 8 * 7 call .copy @@ -829,7 +829,7 @@ StartTrainerBattle_ZoomToBlack: ; 8c768 (23:4768) inc de ld h, a xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call .Copy call WaitBGMap jr .loop diff --git a/engine/billspc.asm b/engine/billspc.asm new file mode 100755 index 000000000..03a7592ca --- /dev/null +++ b/engine/billspc.asm @@ -0,0 +1,2667 @@ +_DepositPKMN: ; e2391 (38:6391) + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + ld a, [VramState] + push af + xor a + ld [VramState], a + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + xor a + ld [hMapAnims], a + call Functione2963 + xor a + ld [wcb2e], a + call DelayFrame +.asm_e23b4 + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_e23c6 + call Functione23d5 + call DelayFrame + jr .asm_e23b4 +.asm_e23c6 + call ClearSprites + pop af + ld [hInMenu], a + pop af + ld [VramState], a + pop af + ld [Options], a + ret + +Functione23d5: ; e23d5 (38:63d5) + ld a, [wJumptableIndex] + ld hl, Jumptable_e23df + call Functione33df + jp [hl] + +Jumptable_e23df: ; e23df (38:63df) + dw Functione23e9 + dw Functione241a + dw Functione245d + dw Functione247d + dw Functione2992 + + +Functione23e9: ; e23e9 (38:63e9) + xor a + ld [hBGMapMode], a + call ClearSprites + call Functione2d30 + call Functione2a8e + ld de, PCString_ChooseaPKMN + call Functione2a6e + ld a, $5 + ld [wcb2d], a + call Functione2c2c + call PCMonInfo + ld a, $ff + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + call WaitBGMap + call Functione2e01 + call Functione298d + ret + +Functione241a: ; e241a (38:641a) + ld hl, hJoyPressed ; $ffa7 + ld a, [hl] + and B_BUTTON + jr nz, .asm_e2457 + ld a, [hl] + and A_BUTTON + jr nz, .asm_e2443 + call Functione29b5 + and a + ret z + call Functione2e01 + xor a + ld [hBGMapMode], a + call Functione2c2c + call PCMonInfo + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + ret +.asm_e2443 + call Functione2def + and a + ret z + cp $ff + jr z, .asm_e2457 + ld a, $2 + ld [wJumptableIndex], a + ret +; e2452 (38:6452) + +.asm_e2452 + ld hl, wJumptableIndex + dec [hl] + ret + +.asm_e2457 + ld a, $4 + ld [wJumptableIndex], a + ret + +Functione245d: ; e245d (38:645d) + xor a + ld [hBGMapMode], a + call ClearSprites + call Functione2def + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + ld de, PCString_WhatsUp + call Functione2a6e + ld a, $1 + ld [MenuSelection2], a + call Functione298d + ret + +Functione247d: ; e247d (38:647d) + ld hl, BillsPCDepositMenuDataHeader + call CopyMenuDataHeader + ld a, [MenuSelection2] + call Function1d4b + call InterpretMenu2 + jp c, BillsPCDepositFuncCancel + ld a, [MenuSelection2] + dec a + and $3 + ld e, a + ld d, 0 + ld hl, BillsPCDepositJumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +BillsPCDepositJumptable: ; e24a1 (38:64a1) + dw BillsPCDepositFuncDeposit ; Deposit Pokemon + dw BillsPCDepositFuncStats ; Pokemon Stats + dw BillsPCDepositFuncRelease ; Release Pokemon + dw BillsPCDepositFuncCancel ; Cancel + + +BillsPCDepositFuncDeposit: ; e24a9 (38:64a9) + call Functione2f18 + jp c, BillsPCDepositFuncCancel + call Functione307c + jr c, .no_overflow_31 + ld a, $0 + ld [wJumptableIndex], a + xor a + ld [wcb2b], a + ld [wcb2a], a + ret +.no_overflow_31 + ld de, PCString_WhatsUp + call Functione2a6e + ret + +BillsPCDepositFuncStats: ; e24c8 (38:64c8) + call LoadStandardMenuDataHeader + call Functione2f7e + call ExitMenu + call PCMonInfo + call Functione2def + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + ret + +BillsPCDepositFuncRelease: ; e24e0 (38:64e0) + call Functione2f18 + jr c, BillsPCDepositFuncCancel + call Functione2f5f + jr c, BillsPCDepositFuncCancel + ld a, [MenuSelection2] + push af + ld de, PCString_ReleasePKMN + call Functione2a6e + call LoadStandardMenuDataHeader + lb bc, 14, 11 + call PlaceYesNoBox + ld a, [MenuSelection2] + dec a + call ExitMenu + and a + jr nz, .asm_e252c + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + xor a + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + call Functione3180 + ld a, $0 + ld [wJumptableIndex], a + xor a + ld [wcb2b], a + ld [wcb2a], a + pop af + ret +.asm_e252c + ld de, PCString_WhatsUp + call Functione2a6e + pop af + ld [MenuSelection2], a + ret + +BillsPCDepositFuncCancel: ; e2537 (38:6537) + ld a, $0 + ld [wJumptableIndex], a + ret +; e253d (38:653d) + +BillsPCDepositMenuDataHeader: ; 0xe253d (38:653d) + db $40 ; flags + db 04, 09 ; start coords + db 13, 19 ; end coords + dw BillsPCDepositMenuData + db 1 ; default option +; 0xe2545 + +BillsPCDepositMenuData: ; 0xe2545 (38:6545) + db $80 ; flags + db 4 ; items + db "DEPOSIT@" + db "STATS@" + db "RELEASE@" + db "CANCEL@" +; 0xe2564 (38:6564) + +Functione2564: ; e2564 + hlcoord 0, 0 + ld b, $4 + ld c, $8 + call ClearBox + hlcoord 0, 4 + ld b, $a + ld c, $9 + call ClearBox + hlcoord 0, 14 + ld b, $2 + ld c, $8 + call ClearBox + ret +; e2583 + +_WithdrawPKMN: ; e2583 (38:6583) + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + ld a, [VramState] + push af + xor a + ld [VramState], a + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + xor a + ld [hMapAnims], a + call Functione2963 + ld a, $f + ld [wcb2e], a + call DelayFrame +.asm_e25a7 + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .no_overflow_49 + call Functione25c8 + call DelayFrame + jr .asm_e25a7 +.no_overflow_49 + call ClearSprites + pop af + ld [hInMenu], a + pop af + ld [VramState], a + pop af + ld [Options], a + ret + +Functione25c8: ; e25c8 (38:65c8) + ld a, [wJumptableIndex] + ld hl, .jumptable + call Functione33df + jp [hl] + +.jumptable: ; e25d2 (38:65d2) + dw Functione25dc + dw Functione2612 + dw Functione2655 + dw BillsPC_Withdraw + dw Functione2992 + + +Functione25dc: ; e25dc (38:65dc) + ld a, $f + ld [wcb2e], a + xor a + ld [hBGMapMode], a + call ClearSprites + call Functione2d30 + call Functione2a8e + ld de, PCString_ChooseaPKMN + call Functione2a6e + ld a, $5 + ld [wcb2d], a + call Functione2c2c + call PCMonInfo + ld a, $ff + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + call WaitBGMap + call Functione2e01 + call Functione298d + ret + +Functione2612: ; e2612 (38:6612) + ld hl, hJoyPressed ; $ffa7 + ld a, [hl] + and B_BUTTON + jr nz, .asm_e264f + ld a, [hl] + and A_BUTTON + jr nz, .asm_e263b + call Functione29b5 + and a + ret z + call Functione2e01 + xor a + ld [hBGMapMode], a + call Functione2c2c + call PCMonInfo + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + ret +.asm_e263b + call Functione2def + and a + ret z + cp $ff + jr z, .asm_e264f + ld a, $2 + ld [wJumptableIndex], a + ret +; e264a (38:664a) + +.asm_e264a + ld hl, wJumptableIndex + dec [hl] + ret + +.asm_e264f + ld a, $4 + ld [wJumptableIndex], a + ret +; e2655 + +Functione2655: ; e2655 (38:6655) + xor a + ld [hBGMapMode], a + call ClearSprites + call Functione2def + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + ld de, PCString_WhatsUp + call Functione2a6e + ld a, $1 + ld [MenuSelection2], a + call Functione298d + ret + +BillsPC_Withdraw: ; e2675 (38:6675) + ld hl, .MenuDataHeader + call CopyMenuDataHeader + ld a, [MenuSelection2] + call Function1d4b + call InterpretMenu2 + jp c, .cancel + ld a, [MenuSelection2] + dec a + and 3 + ld e, a + ld d, 0 + ld hl, .jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.jumptable: ; e2699 (38:6699) #mark + dw .withdraw ; Withdraw + dw .stats ; Stats + dw .release ; Release + dw .cancel ; Cancel + + +.withdraw: ; e26a1 (38:66a1) + call Functione2f18 + jp c, .cancel + call TryWithdrawPokemon + jr c, .FailedWithdraw + ld a, $0 + ld [wJumptableIndex], a + xor a + ld [wcb2b], a + ld [wcb2a], a + ret +.FailedWithdraw + ld de, PCString_WhatsUp + call Functione2a6e + ret + +.stats: ; e26c0 (38:66c0) + call LoadStandardMenuDataHeader + call Functione2f7e + call ExitMenu + call PCMonInfo + call Functione2def + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + ret + +.release: ; e26d8 (38:66d8) + ld a, [MenuSelection2] + push af + call Functione2f5f + jr c, .FailedRelease + ld de, PCString_ReleasePKMN + call Functione2a6e + call LoadStandardMenuDataHeader + lb bc, 14, 11 + call PlaceYesNoBox + ld a, [MenuSelection2] + dec a + call ExitMenu + and a + jr nz, .FailedRelease + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + ld a, PC_DEPOSIT + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + call Functione3180 + ld a, $0 + ld [wJumptableIndex], a + xor a + ld [wcb2b], a + ld [wcb2a], a + pop af + ret +.FailedRelease + ld de, PCString_WhatsUp + call Functione2a6e + pop af + ld [MenuSelection2], a + ret + +.cancel: ; e272b (38:672b) + ld a, $0 + ld [wJumptableIndex], a + ret +; e2731 (38:6731) + +.MenuDataHeader: ; 0xe2731 + db $40 ; flags + db 04, 09 ; start coords + db 13, 19 ; end coords + dw .MenuData + db 1 ; default option +; 0xe2739 + +.MenuData: ; 0xe2739 + db $80 ; flags + db 4 ; items + db "WITHDRAW@" + db "STATS@" + db "RELEASE@" + db "CANCEL@" +; 0xe2759 + +_MovePKMNWithoutMail: ; e2759 + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + ld a, [VramState] + push af + xor a + ld [VramState], a + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + xor a + ld [hMapAnims], a + call Functione2963 + ld a, [wCurBox] + and $f + inc a + ld [wcb2e], a + call DelayFrame +.asm_e2781 + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_e2793 + call Functione27a2 + call DelayFrame + jr .asm_e2781 + +.asm_e2793 + call ClearSprites + pop af + ld [hInMenu], a + pop af + ld [VramState], a + pop af + ld [Options], a + ret +; e27a2 + +Functione27a2: ; e27a2 + ld a, [wJumptableIndex] + ld hl, Jumptable_e27ac + call Functione33df + jp [hl] +; e27ac + +Jumptable_e27ac: ; e27ac + dw Functione27ba + dw Functione27eb + dw Functione283d + dw Functione285d + dw Functione28df + dw Functione2903 + dw Functione2992 +; e27ba + +Functione27ba: ; e27ba + xor a + ld [hBGMapMode], a + call ClearSprites + call Functione2d30 + ld de, PCString_ChooseaPKMN + call Functione2a6e + ld a, $5 + ld [wcb2d], a + call Functione2c2c + call Functione2a80 + call PCMonInfo + ld a, $ff + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + call WaitBGMap + call Functione2e01 + call Functione298d + ret +; e27eb + +Functione27eb: ; e27eb + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .asm_e2837 + ld a, [hl] + and A_BUTTON + jr nz, .asm_e2823 + call Functione29d0 + jr c, .asm_e2816 + and a + ret z + call Functione2e01 + xor a + ld [hBGMapMode], a + call Functione2c2c + call PCMonInfo + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + ret + +.asm_e2816 + xor a + ld [wcb2b], a + ld [wcb2a], a + ld a, $0 + ld [wJumptableIndex], a + ret + +.asm_e2823 + call Functione2def + and a + ret z + cp $ff + jr z, .asm_e2837 + ld a, $2 + ld [wJumptableIndex], a + ret + + ld hl, wJumptableIndex + dec [hl] + ret + +.asm_e2837 + ld a, $6 + ld [wJumptableIndex], a + ret +; e283d + +Functione283d: ; e283d + xor a + ld [hBGMapMode], a + call ClearSprites + call Functione2def + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + ld de, PCString_WhatsUp + call Functione2a6e + ld a, $1 + ld [MenuSelection2], a + call Functione298d + ret +; e285d + +Functione285d: ; e285d + ld hl, MenuDataHeader_0xe28c3 + call CopyMenuDataHeader + ld a, [MenuSelection2] + call Function1d4b + call InterpretMenu2 + jp c, Functione28bd + ld a, [MenuSelection2] + dec a + and 3 + ld e, a + ld d, 0 + ld hl, Jumptable_e2881 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e2881 + +Jumptable_e2881: ; e2881 + dw Functione2887 + dw Functione28a5 + dw Functione28bd +; e2887 + +Functione2887: ; e2887 + call Functione2f18 + jp c, Functione28bd + ld a, [wcb2a] + ld [wcb2f], a + ld a, [wcb2b] + ld [wcb30], a + ld a, [wcb2e] + ld [wcb31], a + ld a, $4 + ld [wJumptableIndex], a + ret +; e28a5 + +Functione28a5: ; e28a5 + call LoadStandardMenuDataHeader + call Functione2f7e + call ExitMenu + call PCMonInfo + call Functione2def + ld [CurPartySpecies], a + ld a, $17 + call Functione33d0 + ret +; e28bd + +Functione28bd: ; e28bd + ld a, $0 + ld [wJumptableIndex], a + ret +; e28c3 + +MenuDataHeader_0xe28c3: ; 0xe28c3 + db $40 ; flags + db 04, 09 ; start coords + db 13, 19 ; end coords + dw MenuData2_0xe28cb + db 1 ; default option +; 0xe28cb + +MenuData2_0xe28cb: ; 0xe28cb + db $80 ; flags + db 3 ; items + db "MOVE@" + db "STATS@" + db "CANCEL@" +; 0xe28df + +Functione28df: ; e28df + xor a + ld [hBGMapMode], a + call Functione2d30 + ld de, PCString_MoveToWhere + call Functione2a6e + ld a, $5 + ld [wcb2d], a + call Functione2c2c + call Functione2a80 + call ClearSprites + call Functione2e8c + call WaitBGMap + call Functione298d + ret +; e2903 + +Functione2903: ; e2903 + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .asm_e294b + ld a, [hl] + and A_BUTTON + jr nz, .asm_e2938 + call Functione29f4 + jr c, .asm_e292b + and a + ret z + call Functione2e8c + xor a + ld [hBGMapMode], a + call Functione2c2c + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + ret + +.asm_e292b + xor a + ld [wcb2b], a + ld [wcb2a], a + ld a, $4 + ld [wJumptableIndex], a + ret + +.asm_e2938 + call Functione2ee5 + jr c, .asm_e2946 + call Functione31e7 + ld a, $0 + ld [wJumptableIndex], a + ret + +.asm_e2946 + ld hl, wJumptableIndex + dec [hl] + ret + +.asm_e294b + ld a, [wcb2f] + ld [wcb2a], a + ld a, [wcb30] + ld [wcb2b], a + ld a, [wcb31] + ld [wcb2e], a + ld a, $0 + ld [wJumptableIndex], a + ret +; e2963 + +Functione2963: ; e2963 (38:6963) + call ClearBGPalettes + call ClearSprites + call ClearTileMap + call Functione33e8 + ld hl, OverworldMap + ld bc, $338 + xor a + call ByteFill + xor a + ld [wJumptableIndex], a + ld [wcf64], a + ld [wcf65], a + ld [wcf66], a + ld [wcb2b], a + ld [wcb2a], a + ret + +Functione298d: ; e298d (38:698d) + ld hl, wJumptableIndex + inc [hl] + ret + +Functione2992: ; e2992 (38:6992) + ld hl, wJumptableIndex + set 7, [hl] + ret + +Functione2998: ; e2998 (38:6998) + ld a, [wcb2d] + ld d, a + ld a, [wcb2c] + and a + jr z, .asm_e29b2 + dec a + cp $1 + jr z, .asm_e29b2 + ld e, a + ld a, [hl] + and D_UP + jr nz, Functione2a18 + ld a, [hl] + and D_DOWN + jr nz, Functione2a2c +.asm_e29b2 + jp Functione2a65 + +Functione29b5: ; e29b5 (38:69b5) + ld hl, hJoyLast + ld a, [wcb2d] + ld d, a + ld a, [wcb2c] + ld e, a + and a + jr z, .asm_e29cd + ld a, [hl] + and D_UP + jr nz, Functione2a18 + ld a, [hl] + and D_DOWN + jr nz, Functione2a2c +.asm_e29cd + jp Functione2a65 +; e29d0 (38:69d0) + +Functione29d0: ; e29d0 + ld hl, hJoyLast + ld a, [wcb2d] + ld d, a + ld a, [wcb2c] + ld e, a + and a + jr z, .asm_e29e8 + ld a, [hl] + and D_UP + jr nz, Functione2a18 + ld a, [hl] + and D_DOWN + jr nz, Functione2a2c + +.asm_e29e8 + ld a, [hl] + and D_LEFT + jr nz, Functione2a48 + ld a, [hl] + and D_RIGHT + jr nz, Functione2a56 + jr Functione2a65 + +Functione29f4: ; e29f4 + ld hl, hJoyLast + ld a, [wcb2d] + ld d, a + ld a, [wcb2c] + ld e, a + and a + jr z, .asm_e2a0c + + ld a, [hl] + and D_UP + jr nz, Functione2a18 + ld a, [hl] + and D_DOWN + jr nz, Functione2a2c + +.asm_e2a0c + ld a, [hl] + and D_LEFT + jr nz, Functione2a48 + ld a, [hl] + and D_RIGHT + jr nz, Functione2a56 + jr Functione2a65 + +Functione2a18: ; e2a18 (38:6a18) + ld hl, wcb2b + ld a, [hl] + and a + jr z, .asm_e2a22 + dec [hl] + jr Functione2a68 + +.asm_e2a22 + ld hl, wcb2a + ld a, [hl] + and a + jr z, Functione2a65 + dec [hl] + jr Functione2a68 + +Functione2a2c: ; e2a2c (38:6a2c) + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + inc a + cp e + jr nc, Functione2a65 + + ld hl, wcb2b + ld a, [hl] + inc a + cp d + jr nc, .asm_e2a42 + inc [hl] + jr Functione2a68 + +.asm_e2a42 + ld hl, wcb2a + inc [hl] + jr Functione2a68 +; e2a48 (38:6a48) + +Functione2a48: ; e2a48 + ld hl, wcb2e + ld a, [hl] + and a + jr z, .asm_e2a52 + dec [hl] + jr Functione2a6c + +.asm_e2a52 + ld [hl], $e + jr Functione2a6c + +Functione2a56: ; e2a56 + ld hl, wcb2e + ld a, [hl] + cp $e + jr z, .asm_e2a61 + inc [hl] + jr Functione2a6c + +.asm_e2a61 + ld [hl], $0 + jr Functione2a6c + +Functione2a65: ; e2a65 (38:6a65) + xor a + and a + ret + +Functione2a68: ; e2a68 (38:6a68) + ld a, $1 + and a + ret +; e2a6c (38:6a6c) + +Functione2a6c: ; e2a6c + scf + ret +; e2a6e + +Functione2a6e: ; e2a6e (38:6a6e) + push de + hlcoord 0, 15 + lb bc, 1, 18 + call TextBox + pop de + hlcoord 1, 16 + call PlaceString + ret +; e2a80 (38:6a80) + +Functione2a80: ; e2a80 + call Functione2a8e + hlcoord 8, 1 + ld [hl], $5f + hlcoord 19, 1 + ld [hl], $5e + ret +; e2a8e + +Functione2a8e: ; e2a8e (38:6a8e) + hlcoord 8, 0 + lb bc, 1, 10 + call TextBox + + ld a, [wcb2e] + and a + jr z, .party + + cp NUM_BOXES + 1 + jr nz, .gotbox + + ld a, [wCurBox] + inc a +.gotbox + dec a + ld hl, wBoxNames + ld bc, BOX_NAME_LENGTH + call AddNTimes + ld e, l + ld d, h + jr .print + +.party + ld de, String_e2abd +.print + hlcoord 10, 1 + call PlaceString + ret +; e2abd (38:6abd) + +String_e2abd: + db "PARTY <PK><MN>@" +; e2ac6 + +PCMonInfo: ; e2ac6 (38:6ac6) +; Display a monster's pic and +; attributes when highlighting +; it in a PC menu. + +; Includes the neat cascading +; effect when showing the pic. + +; Example: Species, level, gender, +; whether it's holding an item. + + hlcoord 0, 0 + lb bc, 15, 8 + call ClearBox + + hlcoord 8, 14 + lb bc, 1, 3 + call ClearBox + + call Functione2def + and a + ret z + cp $ff + ret z + + ld [wd265], a + hlcoord 1, 4 + xor a + ld b, 7 +.asm_e2ae9 + ld c, 7 + push af + push hl +.asm_e2aed + ld [hli], a + add 7 + dec c + jr nz, .asm_e2aed + pop hl + ld de, 20 + add hl, de + pop af + inc a + dec b + jr nz, .asm_e2ae9 + + call Functione2b6d + ld a, [wd265] + ld [CurPartySpecies], a + ld [CurSpecies], a + ld hl, TempMonDVs + predef GetUnownLetter + call GetBaseData + ld de, VTiles2 tile $00 + predef GetFrontpic + xor a + ld [wcb32], a + ld a, [CurPartySpecies] + ld [wd265], a + + cp EGG + ret z + + call GetBasePokemonName + hlcoord 1, 14 + call PlaceString + + hlcoord 1, 12 + call PrintLevel + + ld a, $3 + ld [MonType], a + callba GetGender + jr c, .asm_e2b4f + ld a, "♂" + jr nz, .printgender + ld a, "♀" +.printgender + hlcoord 5, 12 + ld [hl], a +.asm_e2b4f + + ld a, [TempMonItem] + and a + ret z + + ld d, a + callab ItemIsMail + jr c, .mail + ld a, $5d ; item icon + jr .printitem +.mail + ld a, $1 + ld [wcb32], a + ld a, $5c ; mail icon +.printitem + hlcoord 7, 12 + ld [hl], a + ret + +Functione2b6d: ; e2b6d (38:6b6d) + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld e, a + ld d, $0 + ld hl, wc801 +rept 3 + add hl, de +endr + ld a, [hl] + and a + jr z, .asm_e2bc6 + cp $f + jr z, .asm_e2bf5 + ld b, a + call Functione3396 + ld a, b + call GetSRAMBank + push hl + ld bc, $35 + add hl, bc + ld bc, $20 + ld a, e + call AddNTimes + ld a, [hl] + ld [TempMonLevel], a + pop hl + push hl + ld bc, $17 + add hl, bc + ld bc, $20 + ld a, e + call AddNTimes + ld a, [hl] + ld [TempMonItem], a + pop hl + ld bc, $2b + add hl, bc + ld bc, $20 + ld a, e + call AddNTimes + ld de, TempMonDVs + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + call CloseSRAM + ret +.asm_e2bc6 + ld hl, PartyMon1Level + ld bc, $30 + ld a, e + call AddNTimes + ld a, [hl] + ld [TempMonLevel], a + ld hl, PartyMon1Item + ld bc, $30 + ld a, e + call AddNTimes + ld a, [hl] + ld [TempMonItem], a + ld hl, PartyMon1DVs + ld bc, $30 + ld a, e + call AddNTimes + ld de, TempMonDVs + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ret + +.asm_e2bf5 + ld a, BANK(sBox) + call GetSRAMBank + ld hl, sBoxMon1Level + ld bc, $20 + ld a, e + call AddNTimes + ld a, [hl] + ld [TempMonLevel], a + + ld hl, sBoxMon1Item + ld bc, $20 + ld a, e + call AddNTimes + ld a, [hl] + ld [TempMonItem], a + + ld hl, sBoxMon1DVs + ld bc, $20 + ld a, e + call AddNTimes + ld de, TempMonDVs + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + + call CloseSRAM + ret + +Functione2c2c: ; e2c2c (38:6c2c) + hlcoord 8, 2 + lb bc, 10, 10 + call TextBox + + hlcoord 8, 2 + ld [hl], "└" + hlcoord 19, 2 + ld [hl], "┘" + + ld a, [wcb2a] + ld e, a + ld d, 0 + ld hl, OverworldMap +rept 3 + add hl, de +endr + ld e, l + ld d, h + hlcoord 9, 4 + ld a, [wcb2d] +.asm_e2c53 + push af + push de + push hl + call Functione2c6e + pop hl + ld de, $28 + add hl, de + pop de +rept 3 + inc de +endr + pop af + dec a + jr nz, .asm_e2c53 + ret +; e2c67 (38:6c67) + +String_e2c67: + db "CANCEL@" +; e2c6e + +Functione2c6e: ; e2c6e (38:6c6e) + ld a, [de] + and a + ret z + cp $ff + jr nz, .asm_e2c7c + ld de, String_e2c67 + call PlaceString + ret +.asm_e2c7c + inc de + ld a, [de] + ld b, a + inc de + ld a, [de] + ld e, a + ld a, b + and a + jr z, .asm_e2cc8 + cp $f + jr z, .asm_e2cf1 + push hl + call Functione3396 + ld a, b + call GetSRAMBank + push hl + ld bc, $16 + add hl, bc + ld bc, $20 + ld a, e + call AddNTimes + ld a, [hl] + pop hl + and a + jr z, .asm_e2cc2 + ld bc, $372 + add hl, bc + ld bc, $b + ld a, e + call AddNTimes + ld de, StringBuffer1 + ld bc, $b + call CopyBytes + call CloseSRAM + pop hl + ld de, StringBuffer1 + call PlaceString + ret +.asm_e2cc2 + call CloseSRAM + pop hl + jr .asm_e2d23 +.asm_e2cc8 + push hl + ld hl, PartySpecies + ld d, $0 + add hl, de + ld a, [hl] + and a + jr z, .asm_e2cee + ld hl, PartyMonNicknames + ld bc, $b + ld a, e + call AddNTimes + ld de, StringBuffer1 + ld bc, $b + call CopyBytes + pop hl + ld de, StringBuffer1 + call PlaceString + ret +.asm_e2cee + pop hl + jr .asm_e2d23 +.asm_e2cf1 + push hl + ld a, BANK(sBox) + call GetSRAMBank + ld hl, sBoxSpecies + ld d, $0 + add hl, de + ld a, [hl] + and a + jr z, .asm_e2d1f + ld hl, sBoxMonNicknames + ld bc, PKMN_NAME_LENGTH + ld a, e + call AddNTimes + ld de, StringBuffer1 + ld bc, PKMN_NAME_LENGTH + call CopyBytes + call CloseSRAM + pop hl + ld de, StringBuffer1 + call PlaceString + ret +.asm_e2d1f + call CloseSRAM + pop hl +.asm_e2d23 + ld de, String_e2d2a + call PlaceString + ret +; e2d2a (38:6d2a) + +String_e2d2a: + db "-----@" +; e2d30 + +Functione2d30: ; e2d30 (38:6d30) + xor a + ld hl, OverworldMap + ld bc, $5a + call ByteFill + ld de, OverworldMap + xor a + ld [wd003], a + ld [wd004], a + ld a, [wcb2e] + and a + jr z, .asm_e2d87 + cp $f + jr z, .asm_e2db7 + ld b, a + call Functione3396 + ld a, b + call GetSRAMBank + inc hl +.asm_e2d57 + ld a, [hl] + cp $ff + jr z, .asm_e2d79 + and a + jr z, .asm_e2d79 + ld [de], a + inc de + ld a, [wcb2e] + ld [de], a + inc de + ld a, [wd003] + ld [de], a + inc a + ld [wd003], a + inc de + inc hl + ld a, [wd004] + inc a + ld [wd004], a + jr .asm_e2d57 +.asm_e2d79 + call CloseSRAM + ld a, $ff + ld [de], a + ld a, [wd004] + inc a + ld [wcb2c], a + ret +.asm_e2d87 + ld hl, PartySpecies +.asm_e2d8a + ld a, [hl] + cp $ff + jr z, .asm_e2dac + and a + jr z, .asm_e2dac + ld [de], a + inc de + ld a, [wcb2e] + ld [de], a + inc de + ld a, [wd003] + ld [de], a + inc a + ld [wd003], a + inc de + inc hl + ld a, [wd004] + inc a + ld [wd004], a + jr .asm_e2d8a +.asm_e2dac + ld a, $ff + ld [de], a + ld a, [wd004] + inc a + ld [wcb2c], a + ret +.asm_e2db7 + ld a, BANK(sBox) + call GetSRAMBank + ld hl, sBoxSpecies +.asm_e2dbf + ld a, [hl] + cp $ff + jr z, .asm_e2de1 + and a + jr z, .asm_e2de1 + ld [de], a + inc de + ld a, [wcb2e] + ld [de], a + inc de + ld a, [wd003] + ld [de], a + inc a + ld [wd003], a + inc de + inc hl + ld a, [wd004] + inc a + ld [wd004], a + jr .asm_e2dbf +.asm_e2de1 + call CloseSRAM + ld a, $ff + ld [de], a + ld a, [wd004] + inc a + ld [wcb2c], a + ret + +Functione2def: ; e2def (38:6def) + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld e, a + ld d, $0 + ld hl, OverworldMap +rept 3 + add hl, de +endr + ld a, [hl] + ret + +Functione2e01: ; e2e01 (38:6e01) + ld a, [wcb2c] + and a + jr nz, .asm_e2e0b + call ClearSprites + ret +.asm_e2e0b + ld hl, Unknown_e2e2b + ld de, Sprites +.done1 + ld a, [hl] + cp $ff + ret z + ld a, [wcb2b] + and $7 + swap a + add [hl] + inc hl + 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 + jr .done1 +; e2e2b (38:6e2b) + +Unknown_e2e2b: ; e2e2b + db $26, $50, $00, $00 + db $26, $58, $00, $00 + db $26, $60, $00, $00 + db $26, $68, $00, $00 + db $26, $70, $00, $00 + db $26, $78, $00, $00 + db $26, $80, $00, $00 + db $26, $88, $00, $00 + db $26, $90, $00, $00 + db $26, $97, $00, $00 + db $39, $50, $00, $40 + db $39, $58, $00, $40 + db $39, $60, $00, $40 + db $39, $68, $00, $40 + db $39, $70, $00, $40 + db $39, $78, $00, $40 + db $39, $80, $00, $40 + db $39, $88, $00, $40 + db $39, $90, $00, $40 + db $39, $97, $00, $40 + db $2e, $4e, $01, $00 + db $31, $4e, $01, $40 + db $2e, $99, $01, $20 + db $31, $99, $01, $60 + db $ff +; e2e8c + +Functione2e8c: ; e2e8c + ld hl, Unknown_e2eac + ld de, Sprites +.asm_e2e92 + ld a, [hl] + cp $ff + ret z + ld a, [wcb2b] + and $7 + swap a + add [hl] + inc hl + 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 + jr .asm_e2e92 +; e2eac + +Unknown_e2eac: ; e2eac + db $27, $50, $06, $00 + db $2b, $58, $00, $40 + db $2b, $60, $00, $40 + db $2b, $68, $00, $40 + db $2b, $70, $00, $40 + db $2b, $78, $00, $40 + db $2b, $80, $00, $40 + db $2b, $88, $00, $40 + db $2b, $90, $00, $40 + db $27, $98, $07, $00 + db $ff +; e2ed5 + +Functione2ed5: ; e2ed5 +.asm_e2ed5 + push bc + push hl +.asm_e2ed7 + ld [hli], a + dec c + jr nz, .asm_e2ed7 + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .asm_e2ed5 + ret +; e2ee5 + +Functione2ee5: ; e2ee5 + ld hl, wcb2e + ld a, [wcb31] + cp [hl] + jr z, .asm_e2f00 + ld a, [wcb2e] + and a + jr z, .asm_e2ef8 + ld e, $15 + jr .asm_e2efa + +.asm_e2ef8 + ld e, $7 + +.asm_e2efa + ld a, [wcb2c] + cp e + jr nc, .asm_e2f02 + +.asm_e2f00 + and a + ret + +.asm_e2f02 + ld de, PCString_TheresNoRoom + call Functione2a6e + ld de, SFX_WRONG + call WaitPlaySFX + call WaitSFX + ld c, 50 + call DelayFrames + scf + ret +; e2f18 + +Functione2f18: ; e2f18 (38:6f18) + ld a, [wcb2e] + and a + jr nz, .Okay + ld a, [wcb2c] + cp $3 + jr c, .ItsYourLastPokemon + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + callba CheckCurPartyMonFainted + jr c, .AllOthersFainted + ld a, [wcb32] + and a + jr nz, .HasMail +.Okay + and a + ret +.HasMail + ld de, PCString_RemoveMail + jr .NotOkay +.AllOthersFainted + ld de, PCString_NoMoreUsablePKMN + jr .NotOkay +.ItsYourLastPokemon + ld de, PCString_ItsYourLastPKMN +.NotOkay + call Functione2a6e + ld de, SFX_WRONG + call WaitPlaySFX + call WaitSFX + ld c, 50 + call DelayFrames + scf + ret + +Functione2f5f: ; e2f5f (38:6f5f) + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_e2f68 + and a + ret +.asm_e2f68 + ld de, PCString_NoReleasingEGGS + call Functione2a6e + ld de, SFX_WRONG + call WaitPlaySFX + call WaitSFX + ld c, 50 + call DelayFrames + scf + ret + +Functione2f7e: ; e2f7e (38:6f7e) + call LowVolume + call Functione2fd6 + ld a, $3 + ld [MonType], a + predef StatsScreenInit + call Functione33e8 + call MaxVolume + ret + +Functione2f95: ; e2f95 (38:6f95) + ld hl, hJoyPressed ; $ffa7 + ld a, [hl] + and A_BUTTON | B_BUTTON | D_RIGHT | D_LEFT + ld [wcf73], a + jr nz, .pressed_a_b_right_left + ld a, [hl] + and D_DOWN | D_UP + ld [wcf73], a + jr nz, .pressed_down_up + jr .pressed_a_b_right_left + +.pressed_down_up + call Functione2998 + and a + jr z, .asm_e2fd1 + call Functione2def + ld [wd265], a + call Functione2b6d + ld a, [wd265] + ld [CurPartySpecies], a + ld [CurSpecies], a + ld hl, TempMonDVs + predef GetUnownLetter + call GetBaseData + call Functione2fd6 +.pressed_a_b_right_left + ret + +.asm_e2fd1 + xor a + ld [wcf73], a + ret + +Functione2fd6: ; e2fd6 (38:6fd6) + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + ld a, [wcb2e] + and a + jr z, .asm_e3020 + cp $f + jr nz, .asm_e3048 + ld a, BANK(sBox) + call GetSRAMBank + ld hl, sBoxSpecies + call Functione3357 + ld hl, sBoxMonNicknames + call Functione3363 + ld hl, sBoxMonOT + call Functione3376 + ld hl, sBoxMons + ld bc, BOXMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld de, wd018_Mon + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + call CloseSRAM + callba Function5088b + ret + +.asm_e3020 + ld hl, PartySpecies + call Functione3357 + ld hl, PartyMonNicknames + call Functione3363 + ld hl, PartyMonOT + call Functione3376 + ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species) + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld de, wd018_Mon + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + ret + +.asm_e3048 + ld b, a + call Functione3396 + ld a, b + call GetSRAMBank + push hl + inc hl + call Functione3357 + pop hl + push hl + ld bc, $372 + add hl, bc + call Functione3363 + pop hl + push hl + ld bc, $296 + add hl, bc + call Functione3376 + pop hl + ld bc, $16 + add hl, bc + ld bc, $20 + call Functione3389 + call CloseSRAM + callba Function5088b + ret + +Functione307c: ; e307c (38:707c) + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + ld hl, PartyMonNicknames + ld a, [CurPartyMon] + call GetNick + ld a, PC_DEPOSIT + ld [wPokemonWithdrawDepositParameter], a + predef SentGetPkmnIntoFromBox + jr c, .asm_boxisfull + xor a + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + ld a, [CurPartySpecies] + call PlayCry + hlcoord 0, 0 + lb bc, 15, 8 + call ClearBox + hlcoord 8, 14 + lb bc, 1, 3 + call ClearBox + hlcoord 0, 15 + lb bc, 1, 18 + call TextBox + call WaitBGMap + hlcoord 1, 16 + ld de, PCString_Stored + call PlaceString + ld l, c + ld h, b + ld de, StringBuffer1 + call PlaceString + ld a, "!" + ld [bc], a + ld c, 50 + call DelayFrames + and a + ret + +.asm_boxisfull + ld de, PCString_BoxFull + call Functione2a6e + ld de, SFX_WRONG + call WaitPlaySFX + call WaitSFX + ld c, 50 + call DelayFrames + scf + ret + +TryWithdrawPokemon: ; e30fa (38:70fa) + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + ld a, BANK(sBoxMonNicknames) + call GetSRAMBank + ld a, [CurPartyMon] + ld hl, sBoxMonNicknames + call GetNick + call CloseSRAM + xor a + ld [wPokemonWithdrawDepositParameter], a + predef SentGetPkmnIntoFromBox + jr c, .PartyFull + ld a, PC_DEPOSIT + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + ld a, [CurPartySpecies] + call PlayCry + hlcoord 0, 0 + lb bc, 15, 8 + call ClearBox + hlcoord 8, 14 + lb bc, 1, 3 + call ClearBox + hlcoord 0, 15 + lb bc, 1, 18 + call TextBox + call WaitBGMap + hlcoord 1, 16 + ld de, PCString_Got + call PlaceString + ld l, c + ld h, b + ld de, StringBuffer1 + call PlaceString + ld a, $e7 + ld [bc], a + ld c, 50 + call DelayFrames + and a + ret + +.PartyFull + ld de, PCString_PartyFull + call Functione2a6e + ld de, SFX_WRONG + call WaitPlaySFX + call WaitSFX + ld c, 50 + call DelayFrames + scf + ret + + +Functione3180: ; e3180 (38:7180) + hlcoord 0, 0 + lb bc, 15, 8 + call ClearBox + hlcoord 8, 14 + lb bc, 1, 3 + call ClearBox + hlcoord 0, 15 + lb bc, 1, 18 + call TextBox + + call WaitBGMap + ld a, [CurPartySpecies] + call GetCryIndex + jr c, .asm_e31ab + ld e, c + ld d, b + call PlayCryHeader +.asm_e31ab + + ld a, [CurPartySpecies] + ld [wd265], a + call GetPokemonName + hlcoord 1, 16 + ld de, PCString_ReleasedPKMN + call PlaceString + ld c, 80 + call DelayFrames + hlcoord 0, 15 + lb bc, 1, 18 + call TextBox + hlcoord 1, 16 + ld de, PCString_Bye + call PlaceString + ld l, c + ld h, b + inc hl + ld de, StringBuffer1 + call PlaceString + ld l, c + ld h, b + ld [hl], $e7 + ld c, 50 + call DelayFrames + ret +; e31e7 (38:71e7) + +Functione31e7: ; e31e7 + push hl + push de + push bc + push af + hlcoord 0, 15 + lb bc, 1, 18 + call TextBox + hlcoord 1, 16 + ld de, String_e3233 + call PlaceString + ld c, 20 + call DelayFrames + pop af + pop bc + pop de + pop hl + ld a, [wCurBox] + push af + ld bc, 0 + ld a, [wcb31] + and a + jr nz, .asm_e3215 + set 0, c + +.asm_e3215 + ld a, [wcb2e] + and a + jr nz, .asm_e321d + set 1, c + +.asm_e321d + ld hl, Jumptable_e3245 +rept 2 + add hl, bc +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld de, Functione322a + push de + jp [hl] +; e322a + +Functione322a: ; e322a + pop af + ld e, a + callba Function14ad5 + ret +; e3233 + +String_e3233: + db "Saving… Leave ON!@" +; e3245 + +Jumptable_e3245: ; e3245 + dw Functione324d + dw Functione3267 + dw Functione327d + dw Functione3284 +; e324d + +Functione324d: ; e324d + ld hl, wcb31 + ld a, [wcb2e] + cp [hl] + jr z, .asm_e325d + call Functione32b0 + call Functione32fa + ret + +.asm_e325d + call Functione32b0 + call Functione328e + call Functione32fa + ret +; e3267 + +Functione3267: ; e3267 + call Functione3316 + ld a, $1 + ld [wc2cd], a + callba SaveGameData + xor a + ld [wc2cd], a + call Functione32fa + ret +; e327d + +Functione327d: ; e327d + call Functione32b0 + call Functione3346 + ret +; e3284 + +Functione3284: ; e3284 + call Functione3316 + call Functione328e + call Functione3346 + ret +; e328e + +Functione328e: ; e328e + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld e, a + ld a, [wcb30] + ld hl, wcb2f + add [hl] + cp e + ret nc + ld hl, wcb2b + ld a, [hl] + and a + jr z, .asm_e32a8 + dec [hl] + ret + +.asm_e32a8 + ld hl, wcb2a + ld a, [hl] + and a + ret z + dec [hl] + ret +; e32b0 + +Functione32b0: ; e32b0 + ld a, [wcb31] + dec a + ld e, a + callba Function14ac2 + ld a, [wcb30] + ld hl, wcb2f + add [hl] + ld [CurPartyMon], a + ld a, $1 + call GetSRAMBank + ld hl, sBoxSpecies + call Functione3357 + ld hl, sBoxMonNicknames + call Functione3363 + ld hl, sBoxMonOT + call Functione3376 + ld hl, sBoxMons + ld bc, BOXMON_STRUCT_LENGTH + call Functione3389 + call CloseSRAM + callba Function5088b + ld a, PC_DEPOSIT + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + ret +; e32fa + +Functione32fa: ; e32fa + ld a, [wcb2e] + dec a + ld e, a + callba Function14ac2 + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + callba Function51322 + ret +; e3316 + +Functione3316: ; e3316 + ld a, [wcb30] + ld hl, wcb2f + add [hl] + ld [CurPartyMon], a + ld hl, PartySpecies + call Functione3357 + ld hl, PartyMonNicknames + call Functione3363 + ld hl, PartyMonOT + call Functione3376 + ld hl, PartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + call Functione3389 + xor a + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + ret +; e3346 + +Functione3346: ; e3346 + ld a, [wcb2b] + ld hl, wcb2a + add [hl] + ld [CurPartyMon], a + callba Function5138b + ret +; e3357 + +Functione3357: ; e3357 (38:7357) + ld a, [CurPartyMon] + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [CurPartySpecies], a + ret + +Functione3363: ; e3363 (38:7363) + ld bc, $b + ld a, [CurPartyMon] + call AddNTimes + ld de, wd002 + ld bc, $b + call CopyBytes + ret + +Functione3376: ; e3376 (38:7376) + ld bc, $b + ld a, [CurPartyMon] + call AddNTimes + ld de, wd00d + ld bc, $b + call CopyBytes + ret + +Functione3389: ; e3389 (38:7389) + ld a, [CurPartyMon] + call AddNTimes + ld de, wd018 + call CopyBytes + ret + +Functione3396: ; e3396 (38:7396) + dec b + ld c, b + ld b, 0 + ld hl, Unknown_e33a6 +rept 3 + add hl, bc +endr + ld a, [hli] + ld b, a + ld a, [hli] + ld h, [hl] + ld l, a + ret +; e33a6 (38:73a6) + +Unknown_e33a6: ; e33a6 + ; bank, address + dba sBox1 + dba sBox2 + dba sBox3 + dba sBox4 + dba sBox5 + dba sBox6 + dba sBox7 + dba sBox8 + dba sBox9 + dba sBox10 + dba sBox11 + dba sBox12 + dba sBox13 + dba sBox14 +; e33d0 + +Functione33d0: ; e33d0 (38:73d0) + ld b, a + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + ld a, $fc + call Functioncf8 + ret + +Functione33df: ; e33df (38:73df) + ld e, a + ld d, $0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ret + +Functione33e8: ; e33e8 (38:73e8) + call DisableLCD + ld hl, VTiles2 tile $00 + ld bc, $310 + xor a + call ByteFill + call LoadStandardFont + call LoadFontsBattleExtra + ld hl, PCMailGFX + ld de, VTiles2 tile $5c + ld bc, $40 + call CopyBytes + ld hl, PCSelectLZ + ld de, VTiles0 tile $00 + call Decompress + ld a, 6 + call SkipMusic + call EnableLCD + ret +; e3419 (38:7419) + +PCSelectLZ: INCBIN "gfx/pc.2bpp.lz" +PCMailGFX: INCBIN "gfx/pc_mail.2bpp" +; e34dd + +PCString_ChooseaPKMN: db "Choose a <PK><MN>.@" +PCString_WhatsUp: db "What's up?@" +PCString_ReleasePKMN: db "Release <PK><MN>?@" +PCString_MoveToWhere: db "Move to where?@" +PCString_ItsYourLastPKMN: db "It's your last <PK><MN>!@" +PCString_TheresNoRoom: db "There's no room!@" +PCString_NoMoreUsablePKMN: db "No more usable <PK><MN>!@" +PCString_RemoveMail: db "Remove MAIL.@" +PCString_ReleasedPKMN: db "Released <PK><MN>.@" +PCString_Bye: db "Bye,@" +PCString_Stored: db "Stored @" +PCString_Got: db "Got @" +PCString_Non: db "Non.@" +PCString_BoxFull: db "The BOX is full.@" +PCString_PartyFull: db "The party's full!@" +PCString_NoReleasingEGGS: db "No releasing EGGS!@" +; e35aa + + +_ChangeBox: ; e35aa (38:75aa) + call LoadStandardMenuDataHeader + call Functione35e2 +.loop + xor a + ld [hBGMapMode], a + call Functione36cf + call Functione379c + ld hl, _ChangeBox_menudataheader + call CopyMenuDataHeader + xor a + ld [wd0e4], a + hlcoord 0, 4 + lb bc, 8, 9 + call TextBox + call HandleScrollingMenu + ld a, [wcf73] + cp $2 + jr z, .done + call Functione37af + call Functione36f9 + jr .loop +.done + call WriteBackup + ret + +Functione35e2: ; e35e2 (38:75e2) + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, " " + call ByteFill + ret +; e35f1 (38:75f1) + +_ChangeBox_menudataheader: ; 0xe35f1 + db $40 ; flags + db 05, 01 ; start coords + db 12, 09 ; end coords + dw .menudata2 + db 1 ; default option +; 0xe35f9 + +.menudata2: ; 0xe35f9 + db $22 ; flags + db 4, 0 + db 1 + dba .boxes + dba .boxnames + dba NULL + dba Functione3632 +; e3609 + +.boxes: ; e3609 + db NUM_BOXES +x = 1 +rept NUM_BOXES + db x +x = x + 1 +endr + db -1 +; e3619 + +.boxnames: ; e3619 + push de + ld a, [MenuSelection] + dec a + call GetBoxName + pop hl + call PlaceString + ret +; e3626 + +GetBoxName: ; e3626 (38:7626) + ld bc, BOX_NAME_LENGTH + ld hl, wBoxNames + call AddNTimes + ld d, h + ld e, l + ret +; e3632 (38:7632) + +Functione3632: ; e3632 + hlcoord 11, 7 + lb bc, 5, 7 + call TextBox + ld a, [MenuSelection] + cp -1 + ret z + hlcoord 12, 9 + ld de, String_e3663 + call PlaceString + call GetBoxCount + ld [wd265], a + hlcoord 13, 11 + ld de, wd265 + lb bc, 1, 2 + call PrintNum + ld de, String_e3668 + call PlaceString + ret +; e3663 + +String_e3663: ; e3663 + db "#MON@" +; e3668 + +String_e3668: ; e3668 + ; db "/20@" + db "/" + db "0" + MONS_PER_BOX / 10 ; "2" + db "0" + MONS_PER_BOX % 10 ; "0" + db "@" +; e366c + +GetBoxCount: ; e366c (38:766c) + ld a, [wCurBox] + ld c, a + ld a, [MenuSelection] + dec a + cp c + jr z, .activebox + ld c, a + ld b, 0 + ld hl, .boxbanks +rept 3 + add hl, bc +endr + ld a, [hli] + ld b, a + call GetSRAMBank + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hl] + call CloseSRAM + ld c, a + ld a, [wSavedAtLeastOnce] + and a + jr z, .newfile + ld a, c + ret + +.newfile + xor a + ret + +.activebox + ld a, BANK(sBoxCount) + ld b, a + call GetSRAMBank + ld hl, sBoxCount + ld a, [hl] + call CloseSRAM + ret +; e36a5 (38:76a5) + +.boxbanks: ; e36a5 + dba sBox1 + dba sBox2 + dba sBox3 + dba sBox4 + dba sBox5 + dba sBox6 + dba sBox7 + dba sBox8 + dba sBox9 + dba sBox10 + dba sBox11 + dba sBox12 + dba sBox13 + dba sBox14 +; e36cf + +Functione36cf: ; e36cf (38:76cf) + hlcoord 0, 0 + ld b, 2 + ld c, 18 + call TextBox + hlcoord 1, 2 + ld de, String_e36f1 + call PlaceString + ld a, [wCurBox] + and $f + call GetBoxName + hlcoord 11, 2 + call PlaceString + ret +; e36f1 (38:76f1) + +String_e36f1: ; e36f1 + db "CURRENT@" +; e36f9 + +Functione36f9: ; e36f9 (38:76f9) + ld hl, MenuDataHeader_0xe377b + call LoadMenuDataHeader + call InterpretMenu2 + call ExitMenu + ret c + ld a, [MenuSelection2] + cp $1 + jr z, .asm_e3734 + cp $2 + jr z, .asm_e3745 + cp $3 + jr z, .asm_e3717 + and a + ret + +.asm_e3717 + call GetBoxCount + and a + jr z, .asm_e372f + ld e, l + ld d, h + ld a, [MenuSelection] + dec a + ld c, a + callba Function844bc + call Functione35e2 + and a + ret + +.asm_e372f + call Functione37be + and a + ret + +.asm_e3734 + ld a, [MenuSelection] + dec a + ld e, a + ld a, [wCurBox] + cp e + ret z + callba Function14a83 + ret + +.asm_e3745 + ld b, $4 + ld de, wd002 + callba NamingScreen + call ClearTileMap + call LoadStandardFont + call LoadFontsBattleExtra + ld a, [MenuSelection] + dec a + call GetBoxName + ld e, l + ld d, h + ld hl, wd002 + ld c, $8 + call InitString + ld a, [MenuSelection] + dec a + call GetBoxName + ld de, wd002 + call CopyName2 + ret +; e3778 (38:7778) + + hlcoord 11, 7 ; XXX + +MenuDataHeader_0xe377b: ; 0xe377b + db $40 ; flags + db 04, 11 ; start coords + db 13, 19 ; end coords + dw MenuData2_0xe3783 + db 1 ; default option +; 0xe3783 + +MenuData2_0xe3783: ; 0xe3783 + db $80 ; flags + db 4 ; items + db "SWITCH@" + db "NAME@" + db "PRINT@" + db "QUIT@" +; 0xe379c + +Functione379c: ; e379c (38:779c) + ld de, String_e37a1 + jr Functione37e3 +; e37a1 (38:77a1) + +String_e37a1: ; e37a1 + db "Choose a BOX.@" +; e37af + +Functione37af: ; e37af (38:77af) + ld de, String_e37b4 + jr Functione37e3 +; e37b4 (38:77b4) + +String_e37b4: ; e37b4 + db "What's up?@" +; e37be + +Functione37be: ; e37be (38:77be) + ld de, String_e37d3 + call Functione37e3 + ld de, SFX_WRONG + call WaitPlaySFX + call WaitSFX + ld c, 50 + call DelayFrames + ret +; e37d3 (38:77d3) + +String_e37d3: ; e37d3 + db "There's no #MON.@" +; e37e3 + +Functione37e3: ; e37e3 (38:77e3) + push de + hlcoord 0, 14 + lb bc, 2, 18 + call TextBox + pop de + hlcoord 1, 16 + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret diff --git a/engine/breeding/egg.asm b/engine/breeding/egg.asm new file mode 100755 index 000000000..7c4d8ba62 --- /dev/null +++ b/engine/breeding/egg.asm @@ -0,0 +1,976 @@ +Function16e1d: ; 16e1d + call Function16ed6 + ld c, $0 + jp nc, .asm_16eb7 + ld a, [wBreedMon1Species] + ld [CurPartySpecies], a + ld a, [wBreedMon1DVs] + ld [TempMonDVs], a + ld a, [wBreedMon1DVs + 1] + ld [TempMonDVs + 1], a + ld a, $3 + ld [MonType], a + predef GetGender + jr c, .asm_16e70 + ld b, $1 + jr nz, .asm_16e48 + inc b + +.asm_16e48 + push bc + ld a, [wBreedMon2Species] + ld [CurPartySpecies], a + ld a, [wBreedMon2DVs] + ld [TempMonDVs], a + ld a, [wBreedMon2DVs + 1] + ld [TempMonDVs + 1], a + ld a, $3 + ld [MonType], a + predef GetGender + pop bc + jr c, .asm_16e70 + ld a, $1 + jr nz, .asm_16e6d + inc a + +.asm_16e6d + cp b + jr nz, .asm_16e89 + +.asm_16e70 + ld c, $0 + ld a, [wBreedMon1Species] + cp DITTO + jr z, .asm_16e82 + ld a, [wBreedMon2Species] + cp DITTO + jr nz, .asm_16eb7 + jr .asm_16e89 + +.asm_16e82 + ld a, [wBreedMon2Species] + cp DITTO + jr z, .asm_16eb7 + +.asm_16e89 + call Function16ebc + ld c, $ff + jp z, .asm_16eb7 + ld a, [wBreedMon2Species] + ld b, a + ld a, [wBreedMon1Species] + cp b + ld c, $fe + jr z, .asm_16e9f + ld c, $80 +.asm_16e9f + ld a, [wBreedMon1ID] + ld b, a + ld a, [wBreedMon2ID] + cp b + jr nz, .asm_16eb7 + ld a, [wBreedMon1ID + 1] + ld b, a + ld a, [wBreedMon2ID + 1] + cp b + jr nz, .asm_16eb7 + ld a, c + sub $4d + ld c, a + +.asm_16eb7 + ld a, c + ld [wd265], a + ret +; 16ebc + + +Function16ebc: ; 16ebc (5:6ebc) + ld a, [wBreedMon1DVs] + and $f + ld b, a + ld a, [wBreedMon2DVs] + and $f + cp b + ret nz + ld a, [wBreedMon1DVs + 1] + and $7 + ld b, a + ld a, [wBreedMon2DVs + 1] + and $7 + cp b + ret +; 16ed6 + +Function16ed6: ; 16ed6 + ld a, [wBreedMon2Species] + ld [CurSpecies], a + call GetBaseData + ld a, [BaseEggGroups] + cp $ff + jr z, .asm_16f3a + ld a, [wBreedMon1Species] + ld [CurSpecies], a + call GetBaseData + ld a, [BaseEggGroups] + cp $ff + jr z, .asm_16f3a + ld a, [wBreedMon2Species] + cp DITTO + jr z, .asm_16f3c + ld [CurSpecies], a + call GetBaseData + ld a, [BaseEggGroups] + push af + and $f + ld b, a + pop af + and $f0 + swap a + ld c, a + ld a, [wBreedMon1Species] + cp DITTO + jr z, .asm_16f3c + ld [CurSpecies], a + push bc + call GetBaseData + pop bc + ld a, [BaseEggGroups] + push af + and $f + ld d, a + pop af + and $f0 + swap a + ld e, a + ld a, d + cp b + jr z, .asm_16f3c + cp c + jr z, .asm_16f3c + ld a, e + cp b + jr z, .asm_16f3c + cp c + jr z, .asm_16f3c + +.asm_16f3a + and a + ret + +.asm_16f3c + scf + ret +; 16f3e + +DoEggStep:: ; 16f3e + ld de, PartySpecies + ld hl, PartyMon1Happiness + ld c, 0 +.loop + ld a, [de] + inc de + cp -1 + ret z + cp EGG + jr nz, .next + dec [hl] + jr nz, .next + ld a, 1 + and a + ret + +.next + push de + ld de, PARTYMON_STRUCT_LENGTH + add hl, de + pop de + jr .loop +; 16f5e + +OverworldHatchEgg:: ; 16f5e + call ResetWindow + call LoadStandardMenuDataHeader + call Function16f70 + call Function2b4d + call RestartMapMusic + jp LoadMoveSprites +; 16f70 + +Function16f70: ; 16f70 (5:6f70) + ld de, PartySpecies + ld hl, PartyMon1Happiness + xor a + ld [CurPartyMon], a + +Function16f7a: ; 16f7a (5:6f7a) + ld a, [de] + inc de + cp -1 + jp z, Function1708a + push de + push hl + cp EGG + jp nz, Function1707d + ld a, [hl] + and a + jp nz, Function1707d + ld [hl], $78 + + push de + + callba Function4dbb8 + callba MobileFn_10608d + ld a, [CurPartyMon] + ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species) + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + ld [CurPartySpecies], a + dec a + call SetSeenAndCaughtMon + + ld a, [CurPartySpecies] + cp TOGEPI + jr nz, .nottogepi + ; set the event flag for hatching togepi + ld de, EVENT_TOGEPI_HATCHED + ld b, SET_FLAG + call EventFlagAction +.nottogepi + + pop de + + ld a, [CurPartySpecies] + dec de + ld [de], a + ld [wd265], a + ld [CurSpecies], a + call GetPokemonName + xor a + ld [wd26b], a + call GetBaseData + ld a, [CurPartyMon] + ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species) + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + push hl + ld bc, MON_MAXHP + add hl, bc + ld d, h + ld e, l + pop hl + push hl + ld bc, MON_LEVEL + add hl, bc + ld a, [hl] + ld [CurPartyLevel], a + pop hl + push hl + ld bc, MON_STATUS + add hl, bc + xor a + ld [hli], a + ld [hl], a + pop hl + push hl + ld bc, MON_EXP + 2 + add hl, bc + ld b, $0 + predef CalcPkmnStats + pop bc + ld hl, MON_MAXHP + add hl, bc + ld d, h + ld e, l + ld hl, MON_HP + add hl, bc + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + ld hl, MON_ID + add hl, bc + ld a, [PlayerID] + ld [hli], a + ld a, [PlayerID + 1] + ld [hl], a + ld a, [CurPartyMon] + ld hl, PartyMonOT ; wddff (aliases: PartyMonOT) + ld bc, NAME_LENGTH + call AddNTimes + ld d, h + ld e, l + ld hl, PlayerName + call CopyBytes + ld hl, UnknownText_0x1708b + call PrintText + ld a, [CurPartyMon] + ld hl, PartyMonNicknames + ld bc, PKMN_NAME_LENGTH + call AddNTimes + ld d, h + ld e, l + push de + ld hl, UnknownText_0x170ba + call PrintText + call YesNoBox + pop de + jr c, .nonickname + ld a, $1 + ld [wd26b], a + xor a + ld [MonType], a + push de + ld b, $0 + callba NamingScreen + pop hl + ld de, StringBuffer1 + call InitName + jr Function1707d +.nonickname + ld hl, StringBuffer1 + ld bc, PKMN_NAME_LENGTH + call CopyBytes + +Function1707d: ; 1707d (5:707d) + ld hl, CurPartyMon + inc [hl] + pop hl + ld de, PARTYMON_STRUCT_LENGTH + add hl, de + pop de + jp Function16f7a + +Function1708a: ; 1708a (5:708a) + ret +; 1708b (5:708b) + +UnknownText_0x1708b: ; 0x1708b + ; Huh? @ @ + text_jump UnknownText_0x1c0db0 + start_asm +; 0x17090 + +Function17090: ; 17090 + ld hl, VramState + res 0, [hl] + push hl + push de + push bc + ld a, [CurPartySpecies] + push af + call Function1728f + ld hl, UnknownText_0x170b0 + call PrintText + pop af + ld [CurPartySpecies], a + pop bc + pop de + pop hl + ld hl, UnknownText_0x170b5 + ret +; 170b0 (5:70b0) + +UnknownText_0x170b0: ; 0x170b0 + ; + text_jump UnknownText_0x1c0db8 + db "@" +; 0x170b5 + +UnknownText_0x170b5: ; 0x170b5 + ; came out of its EGG!@ @ + text_jump UnknownText_0x1c0dba + db "@" +; 0x170ba + +UnknownText_0x170ba: ; 0x170ba + ; Give a nickname to @ ? + text_jump UnknownText_0x1c0dd8 + db "@" +; 0x170bf + +Function170bf: ; 170bf + call Function17197 + ld d, h + ld e, l + ld b, NUM_MOVES +.loop + ld a, [de] + and a + jr z, .done + ld hl, wEggMonMoves + ld c, NUM_MOVES +.next + ld a, [de] + cp [hl] + jr z, .skip + inc hl + dec c + jr nz, .next + call Function170e4 + jr nc, .skip + call Function17169 + +.skip + inc de + dec b + jr nz, .loop + +.done + ret +; 170e4 + +Function170e4: ; 170e4 +GLOBAL EggMoves + + push bc + ld a, [wEggMonSpecies] + dec a + ld c, a + ld b, 0 + ld hl, EggMovePointers +rept 2 + add hl, bc +endr + ld a, BANK(EggMovePointers) + call GetFarHalfword +.loop + ld a, BANK(EggMoves) + call GetFarByte + cp -1 + jr z, .found_mon + ld b, a + ld a, [de] + cp b + jr z, .done_carry + inc hl + jr .loop + +.found_mon + call Function1720b + ld b, NUM_MOVES +.loop2 + ld a, [de] + cp [hl] + jr z, .found_eggmove + inc hl + dec b + jr z, .inherit_tmhm + jr .loop2 + +.found_eggmove + ld a, [wEggMonSpecies] + dec a + ld c, a + ld b, 0 + ld hl, EvosAttacksPointers +rept 2 + add hl, bc +endr + ld a, BANK(EvosAttacksPointers) + call GetFarHalfword +.loop3 + ld a, BANK(EvosAttacks) + call GetFarByte + inc hl + and a + jr nz, .loop3 +.loop4 + ld a, BANK(EvosAttacks) + call GetFarByte + and a + jr z, .inherit_tmhm + inc hl + ld a, BANK(EvosAttacks) + call GetFarByte + ld b, a + ld a, [de] + cp b + jr z, .done_carry + inc hl + jr .loop4 + +.inherit_tmhm + ld hl, TMHMMoves +.loop5 + ld a, BANK(TMHMMoves) + call GetFarByte + inc hl + and a + jr z, .done + ld b, a + ld a, [de] + cp b + jr nz, .loop5 + ld [wd262], a + predef CanLearnTMHMMove + ld a, c + and a + jr z, .done + +.done_carry + pop bc + scf + ret + +.done + pop bc + and a + ret +; 17169 + +Function17169: ; 17169 + push de + push bc + ld a, [de] + ld b, a + ld hl, wEggMonMoves + ld c, NUM_MOVES +.loop + ld a, [hli] + and a + jr z, .done + dec c + jr nz, .loop + ld de, wEggMonMoves + ld hl, wEggMonMoves + 1 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + +.done + dec hl + ld [hl], b + ld hl, wEggMonMoves + ld de, wEggMonPP + predef FillPP + pop bc + pop de + ret +; 17197 + +Function17197: ; 17197 + ld hl, wBreedMon2Moves + ld a, [wBreedMon1Species] + cp DITTO + jr z, .ditto1 + ld a, [wBreedMon2Species] + cp DITTO + jr z, .ditto2 + ld a, [wDittoInDaycare] + and a + ret z + ld hl, wBreedMon1Moves + ret + +.ditto1 + ld a, [CurPartySpecies] + push af + ld a, [wBreedMon2Species] + ld [CurPartySpecies], a + ld a, [wBreedMon2DVs] + ld [TempMonDVs], a + ld a, [wBreedMon2DVs + 1] + ld [TempMonDVs + 1], a + ld a, $3 + ld [MonType], a + predef GetGender + jr c, .inherit_mon2_moves + jr nz, .inherit_mon2_moves + jr .inherit_mon1_moves + +.ditto2 + ld a, [CurPartySpecies] + push af + ld a, [wBreedMon1Species] + ld [CurPartySpecies], a + ld a, [wBreedMon1DVs] + ld [TempMonDVs], a + ld a, [wBreedMon1DVs + 1] + ld [TempMonDVs + 1], a + ld a, $3 + ld [MonType], a + predef GetGender + jr c, .inherit_mon1_moves + jr nz, .inherit_mon1_moves + +.inherit_mon2_moves + ld hl, wBreedMon2Moves + pop af + ld [CurPartySpecies], a + ret + +.inherit_mon1_moves + ld hl, wBreedMon1Moves + pop af + ld [CurPartySpecies], a + ret +; 1720b + +Function1720b: ; 1720b + ld hl, wBreedMon1Moves + ld a, [wBreedMon1Species] + cp DITTO + ret z + ld a, [wBreedMon2Species] + cp DITTO + jr z, .ditto + ld a, [wDittoInDaycare] + and a + ret z + +.ditto + ld hl, wBreedMon2Moves + ret +; 17224 + + +Function17224: ; 17224 (5:7224) + push de + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + ld hl, BattleMonDVs + predef GetUnownLetter + pop de + predef_jump GetFrontpic + +Function1723c: ; 1723c (5:723c) + push de + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + ld hl, BattleMonDVs + predef GetUnownLetter + pop de + predef_jump Function5108b + +Function17254: ; 17254 (5:7254) + push af + call WaitTop + push hl + push bc + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + pop bc + pop hl + ld a, b + ld [hBGMapAddress + 1], a + ld a, c + ld [hFillBox], a + lb bc, 7, 7 + predef FillBox + pop af + call Function17363 + call SetPalettes + jp WaitBGMap + +Function1727f: ; 1727f (5:727f) + push hl + push de + push bc + callab Function8cf69 + call DelayFrame + pop bc + pop de + pop hl + ret + +Function1728f: ; 1728f (5:728f) + ld a, [wd265] + ld [wJumptableIndex], a + ld a, [CurSpecies] + push af + ld de, MUSIC_NONE + call PlayMusic + callba Function8000 + call DisableLCD + ld hl, EggHatchGFX + ld de, VTiles0 tile $00 + ld bc, $20 + ld a, BANK(EggHatchGFX) + call FarCopyBytes + callba Function8cf53 + ld de, VTiles2 tile $00 + ld a, [wJumptableIndex] + call Function1723c + ld de, VTiles2 tile $31 + ld a, EGG + call Function17224 + ld de, MUSIC_EVOLUTION + call PlayMusic + call EnableLCD + hlcoord 7, 4 + ld b, $98 + ld c, $31 + ld a, EGG + call Function17254 + ld c, $50 + call DelayFrames + xor a + ld [wcf64], a + ld a, [hSCX] + ld b, a +.asm_172ee + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $8 + jr nc, .asm_17327 + ld e, [hl] +.asm_172f8 + ld a, $2 + ld [hSCX], a + ld a, $fe + ld [wc3c0], a + call Function1727f + ld c, $2 + call DelayFrames + ld a, $fe + ld [hSCX], a + ld a, $2 + ld [wc3c0], a + call Function1727f + ld c, $2 + call DelayFrames + dec e + jr nz, .asm_172f8 + ld c, $10 + call DelayFrames + call Function1736d + jr .asm_172ee +.asm_17327 + ld de, SFX_EGG_HATCH + call PlaySFX + xor a + ld [hSCX], a + ld [wc3c0], a + call ClearSprites + call Function173b3 + hlcoord 6, 3 + ld b, $98 + ld c, $0 + ld a, [wJumptableIndex] + call Function17254 + call Function17418 + call WaitSFX + ld a, [wJumptableIndex] + ld [CurPartySpecies], a + hlcoord 6, 3 + ld d, $0 + ld e, ANIM_MON_HATCH + predef AnimateFrontpic + pop af + ld [CurSpecies], a + ret + +Function17363: ; 17363 (5:7363) + ld [PlayerHPPal], a + ld b, $b + ld c, $0 + jp GetSGBLayout + +Function1736d: ; 1736d (5:736d) + ld a, [wcf64] + dec a + and $7 + cp $7 + ret z + srl a + ret nc + swap a + srl a + add $4c + ld d, a + ld e, $58 + ld a, $19 + call Function3b2a + ld hl, $3 + add hl, bc + ld [hl], $0 + ld de, SFX_EGG_CRACK + jp PlaySFX +; 17393 (5:7393) + +EggHatchGFX: ; 17393 +INCBIN "gfx/unknown/017393.2bpp" +; 173b3 + +Function173b3: ; 173b3 (5:73b3) + callba Function8cf53 + ld hl, Unknown_173ef +.loop + ld a, [hli] + cp $ff + jr z, .done + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + push hl + push bc + ld a, $1c + call Function3b2a + ld hl, $3 + add hl, bc + ld [hl], $0 + pop de + ld a, e + ld hl, $1 + add hl, bc + add [hl] + ld [hl], a + ld hl, $b + add hl, bc + ld [hl], d + pop hl + jr .loop +.done + ld de, SFX_EGG_HATCH + call PlaySFX + call Function1727f + ret +; 173ef (5:73ef) + +Unknown_173ef: ; 173ef +; Probably OAM. + db $54, $48, $00, $3c + db $5c, $48, $01, $04 + db $54, $50, $00, $30 + db $5c, $50, $01, $10 + db $54, $58, $02, $24 + db $5c, $58, $03, $1c + db $50, $4c, $00, $36 + db $60, $4c, $01, $0a + db $50, $54, $02, $2a + db $60, $54, $03, $16 + db $ff +; 17418 + +Function17418: ; 17418 (5:7418) + ld c, $81 +.asm_1741a + call Function1727f + dec c + jr nz, .asm_1741a + ret + +Special_DayCareMon1: ; 17421 + ld hl, UnknownText_0x17467 + call PrintText + ld a, [wBreedMon1Species] + call PlayCry + ld a, [wDaycareLady] + bit 0, a + jr z, Function1745f + call KeepTextOpen + ld hl, wBreedMon2Nick + call Function1746c + jp PrintText + +Special_DayCareMon2: ; 17440 + ld hl, UnknownText_0x17462 + call PrintText + ld a, [wBreedMon2Species] + call PlayCry + ld a, [wDaycareMan] + bit 0, a + jr z, Function1745f + call KeepTextOpen + ld hl, wBreedMon1Nick + call Function1746c + jp PrintText + +Function1745f: ; 1745f + jp WaitPressAorB_BlinkCursor +; 17462 + +UnknownText_0x17462: ; 0x17462 + ; It's @ that was left with the DAY-CARE LADY. + text_jump UnknownText_0x1c0df3 + db "@" +; 0x17467 + +UnknownText_0x17467: ; 0x17467 + ; It's @ that was left with the DAY-CARE MAN. + text_jump UnknownText_0x1c0e24 + db "@" +; 0x1746c + +Function1746c: ; 1746c + push bc + ld de, StringBuffer1 + ld bc, NAME_LENGTH + call CopyBytes + call Function16e1d + pop bc + ld a, [wd265] + ld hl, UnknownText_0x1749c + cp $ff + jr z, .asm_1749b + ld hl, UnknownText_0x174a1 + and a + jr z, .asm_1749b + ld hl, UnknownText_0x174a6 + cp 230 + jr nc, .asm_1749b + cp 70 + ld hl, UnknownText_0x174ab + jr nc, .asm_1749b + ld hl, UnknownText_0x174b0 + +.asm_1749b + ret +; 1749c + +UnknownText_0x1749c: ; 0x1749c + ; It's brimming with energy. + text_jump UnknownText_0x1c0e54 + db "@" +; 0x174a1 + +UnknownText_0x174a1: ; 0x174a1 + ; It has no interest in @ . + text_jump UnknownText_0x1c0e6f + db "@" +; 0x174a6 + +UnknownText_0x174a6: ; 0x174a6 + ; It appears to care for @ . + text_jump UnknownText_0x1c0e8d + db "@" +; 0x174ab + +UnknownText_0x174ab: ; 0x174ab + ; It's friendly with @ . + text_jump UnknownText_0x1c0eac + db "@" +; 0x174b0 + +UnknownText_0x174b0: ; 0x174b0 + ; It shows interest in @ . + text_jump UnknownText_0x1c0ec6 + db "@" +; 0x174b5 + +Function_174b5: ; 174b5 + ld hl, String_174b9 + ret +; 174b9 + +String_174b9: ; 174b9 + db "@" +; 174ba + diff --git a/engine/card_flip.asm b/engine/card_flip.asm new file mode 100755 index 000000000..8ee1e5cd9 --- /dev/null +++ b/engine/card_flip.asm @@ -0,0 +1,2560 @@ +_CardFlip: ; e00ee (38:40ee) + ld hl, Options + set 4, [hl] + call ClearBGPalettes + call ClearTileMap + call ClearSprites + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + call DisableLCD + call LoadStandardFont + call LoadFontsExtra + ld hl, LZ_e0d16 + ld de, VTiles2 tile $00 + call Decompress + ld hl, LZ_e0ea8 + ld de, VTiles2 tile $3e + call Decompress + ld hl, LZ_e0cdb + ld de, VTiles0 tile $00 + call Decompress + ld hl, GFX_e0cf6 + ld de, VTiles1 tile $6f + ld bc, $10 + call CopyBytes + ld hl, GFX_e0d06 + ld de, VTiles1 tile $75 + ld bc, $10 + call CopyBytes + call Functione0521 + call Functione04c1 + call Functione0c37 + call EnableLCD + call Function3200 + ld a, $e4 + call DmgToCgbBGPals + ld de, $e4e4 + call DmgToCgbObjPals + call DelayFrame + xor a + ld [wJumptableIndex], a + ld a, $2 + ld [wcf64], a + ld [wcf65], a + ld de, MUSIC_GAME_CORNER + call PlayMusic +.MasterLoop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .leavethegame + call .CardFlip + jr .MasterLoop +.leavethegame + call WaitSFX + ld de, SFX_QUIT_SLOTS + call PlaySFX + call WaitSFX + call ClearBGPalettes + ld hl, Options + res 4, [hl] + ret + +.CardFlip: ; e0191 (38:4191) + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .Jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e01a0 (38:41a0) + +.Jumptable: ; e01a0 + dw .AskPlayWithThree + dw .DeductCoins + dw .ChooseACard + dw .PlaceYourBet + dw .CheckTheCard + dw .TabulateTheResult + dw .PlayAgain + dw .Quit +; e01b0 + +.Increment: ; e01b0 + ld hl, wJumptableIndex + inc [hl] + ret +; e01b5 + +.AskPlayWithThree: ; e01b5 + ld hl, .PlayWithThreeCoinsText + call Functione0489 + call YesNoBox + jr c, .SaidNo + call Functione0366 + call .Increment + ret + +.SaidNo + ld a, $7 + ld [wJumptableIndex], a + ret +; e01cd + +.PlayWithThreeCoinsText: ; 0xe01cd + ; Play with three coins? + text_jump UnknownText_0x1c5793 + db "@" +; 0xe01d2 + +.DeductCoins: ; e01d2 + ld a, [Coins] + ld h, a + ld a, [Coins + 1] + ld l, a + ld a, h + and a + jr nz, .deduct ; You have at least 256 coins. + ld a, l + cp 3 + jr nc, .deduct ; You have at least 3 coins. + ld hl, .NotEnoughCoinsText + call Functione0489 + ld a, $7 + ld [wJumptableIndex], a + ret + +.deduct + ld de, -3 + add hl, de + ld a, h + ld [Coins], a + ld a, l + ld [Coins + 1], a + ld de, SFX_TRANSACTION + call PlaySFX + xor a + ld [hBGMapMode], a + call Functione049c + ld a, $1 + ld [hBGMapMode], a + call WaitSFX + call .Increment + ret +; e0212 + +.NotEnoughCoinsText: ; 0xe0212 + ; Not enough coins… + text_jump UnknownText_0x1c57ab + db "@" +; 0xe0217 + +.ChooseACard: ; e0217 + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + lb bc, 12, 9 + call Functione04e5 + hlcoord 9, 0 + ld bc, SCREEN_WIDTH + ld a, [wc6e8] + call AddNTimes + ld [hl], $f5 + ld a, $1 + ld [hBGMapMode], a + ld c, 20 + call DelayFrames + hlcoord 2, 0 + call Functione03c1 + ld a, $1 + ld [hBGMapMode], a + ld c, 20 + call DelayFrames + hlcoord 2, 6 + call Functione03c1 + call WaitBGMap + ld hl, .ChooseACardText + call Functione0489 + xor a + ld [wcf66], a +.loop + call JoyTextDelay + ld a, [hJoyLast] + and A_BUTTON + jr nz, .next + ld de, SFX_KINESIS + call PlaySFX + call Functione0849 + ld c, 4 + call DelayFrames + ld hl, wcf66 + ld a, [hl] + xor $1 + ld [hl], a + jr .loop + +.next + ld de, SFX_SLOT_MACHINE_START + call PlaySFX + ld a, $3 +.loop2 + push af + call Functione0849 + ld c, 4 + call DelayFrames + call ClearSprites + ld c, 4 + call DelayFrames + pop af + dec a + jr nz, .loop2 + ld hl, wcf66 + ld a, [hl] + push af + xor $1 + ld [hl], a + call Functione03ac + lb bc, 6, 5 + call Functione04e5 + pop af + ld [wcf66], a + call .Increment + ret +; e02b2 + +.ChooseACardText: ; 0xe02b2 + ; Choose a card. + text_jump UnknownText_0x1c57be + db "@" +; 0xe02b7 + +.PlaceYourBet: ; e02b7 + ld hl, .PlaceYourBetText + call Functione0489 +.betloop + call JoyTextDelay + ld a, [hJoyLast] + and A_BUTTON + jr nz, .betdone + call Functione089c + call Functione0960 + call DelayFrame + jr .betloop + +.betdone + call .Increment + ret +; e02d5 + +.PlaceYourBetText: ; 0xe02d5 + ; Place your bet. + text_jump UnknownText_0x1c57ce + db "@" +; 0xe02da + +.CheckTheCard: ; e02da + xor a + ld [hVBlankCounter], a + call Functione0960 + call WaitSFX + ld de, SFX_CHOOSE_A_CARD + call PlaySFX + call WaitSFX + ld a, [wc6e8] + ld e, a + ld d, 0 + ld hl, wc6d0 +rept 2 + add hl, de +endr + ld a, [wcf66] + ld e, a + add hl, de + ld a, [hl] + ld [CurEnemyMoveNum], a + ld e, a + ld hl, wc6ea + add hl, de + ld [hl], $1 + call Functione03ac + call Functione03ec + call Function3200 + call .Increment + ret +; e0314 + +.TabulateTheResult: ; e0314 + call Functione0637 + call WaitPressAorB_BlinkCursor + call .Increment + ret +; e031e + +.PlayAgain: ; e031e + call ClearSprites + ld hl, .PlayAgainText + call Functione0489 + call YesNoBox + jr nc, .Continue + call .Increment + ret + +.Continue + ld a, [wc6e8] + inc a + ld [wc6e8], a + cp $c + jr c, .KeepTheCurrentDeck + call Functione04c1 + ld a, $1 + ld [hBGMapMode], a + call Functione0366 + ld hl, .CardsShuffledText + call PrintText + jr .LoopAround + +.KeepTheCurrentDeck + call Functione0534 + +.LoopAround + ld a, $1 + ld [wJumptableIndex], a + ret +; e0356 + +.PlayAgainText: ; 0xe0356 + ; Want to play again? + text_jump UnknownText_0x1c57df + db "@" +; 0xe035b + +.CardsShuffledText: ; 0xe035b + ; The cards have been shuffled. + text_jump UnknownText_0x1c57f4 + db "@" +; 0xe0360 + +.Quit: ; e0360 + ld hl, wJumptableIndex + set 7, [hl] + ret +; e0366 + +Functione0366: ; e0366 + ld hl, wc6d0 + ld bc, $18 + xor a + call ByteFill + ld de, wc6d0 + ld c, $17 +.asm_e0375 + call Random + and $1f + cp $18 + jr nc, .asm_e0375 + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e0375 + ld [hl], c + dec c + jr nz, .asm_e0375 + xor a + ld [wc6e8], a + ld hl, wc6ea + ld bc, $18 + call ByteFill + ret +; e0398 + +Functione0398: ; e0398 + ld hl, 0 + ld bc, 6 + ld a, [wcf64] + call AddNTimes + ld b, $0 + ld a, [wcf65] + ld c, a + add hl, bc + ret +; e03ac + +Functione03ac: ; e03ac + ld a, [wcf66] + and a + jr nz, .asm_e03ba + hlcoord 2, 0 + ld bc, $1018 + jr .asm_e03c0 + +.asm_e03ba + hlcoord 2, 6 + ld bc, $4018 + +.asm_e03c0 + ret +; e03c1 + +Functione03c1: ; e03c1 + xor a + ld [hBGMapMode], a + ld de, Unknown_e03ce + lb bc, 6, 5 + call Functione04f7 + ret +; e03ce + +Unknown_e03ce: ; e03ce + db $08, $09, $09, $09, $0a + db $0b, $28, $2b, $28, $0c + db $0b, $2c, $2d, $2e, $0c + db $0b, $2f, $30, $31, $0c + db $0b, $32, $33, $34, $0c + db $0d, $0e, $0e, $0e, $0f +; e03ec + +Functione03ec: ; e03ec + xor a + ld [hBGMapMode], a + push hl + push hl + ld de, Unknown_e043b + lb bc, 6, 5 + call Functione04f7 + ld a, [CurEnemyMoveNum] + ld e, a + ld d, 0 + ld hl, Unknown_e0459 +rept 2 + add hl, de +endr + ld a, [hli] + ld e, a + ld d, [hl] + pop hl + ld bc, $17 + add hl, bc + ld [hl], e + ld bc, SCREEN_HEIGHT + add hl, bc + ld a, d + ld de, SCREEN_WIDTH + ld b, $3 +.asm_e0418 + push hl + ld c, $3 +.asm_e041b + ld [hli], a + inc a + dec c + jr nz, .asm_e041b + pop hl + add hl, de + dec b + jr nz, .asm_e0418 + pop hl + ld a, [hCGB] + and a + ret z + ld de, AttrMap - TileMap + add hl, de + ld a, [CurEnemyMoveNum] + and 3 + inc a + lb bc, 6, 5 + call Functione04e7 + ret +; e043b + +Unknown_e043b: ; e043b + db $18, $19, $19, $19, $1a + db $1b, $35, $7f, $7f, $1c + db $0b, $28, $28, $28, $0c + db $0b, $28, $28, $28, $0c + db $0b, $28, $28, $28, $0c + db $1d, $1e, $1e, $1e, $1f +; e0459 + +Unknown_e0459: ; e0459 + db $f7,$4e, $f7,$57, $f7,$69, $f7,$60 + db $f8,$4e, $f8,$57, $f8,$69, $f8,$60 + db $f9,$4e, $f9,$57, $f9,$69, $f9,$60 + db $fa,$4e, $fa,$57, $fa,$69, $fa,$60 + db $fb,$4e, $fb,$57, $fb,$69, $fb,$60 + db $fc,$4e, $fc,$57, $fc,$69, $fc,$60 +; e0489 + +Functione0489: ; e0489 + push hl + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call TextBox + pop hl + call PrintTextBoxText + call Functione049c + ret +; e049c + +Functione049c: ; e049c + hlcoord 9, 15 + ld b, $1 + ld c, $9 + call TextBox + hlcoord 10, 16 + ld de, String_e04bc + call PlaceString + hlcoord 15, 16 + ld de, Coins + lb bc, PRINTNUM_LEADINGZEROS | 2, 4 + call PrintNum + ret +; e04bc + +String_e04bc: + db "COIN@" +; e04c1 + +Functione04c1: ; e04c1 (38:44c1) + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, $29 + call ByteFill + hlcoord 9, 0 + ld de, Unknown_e110c + lb bc, 12, 11 + call Functione04f7 + hlcoord 0, 12 + lb bc, 4, 18 + call TextBox + ret +; e04e5 (38:44e5) + +Functione04e5: ; e04e5 + ld a, $29 + +Functione04e7: ; e04e7 (38:44e7) + push bc + push hl +.asm_e04e9 + ld [hli], a + dec c + jr nz, .asm_e04e9 + pop hl + ld bc, $14 + add hl, bc + pop bc + dec b + jr nz, Functione04e7 + ret + +Functione04f7: ; e04f7 (38:44f7) + push bc + push hl +.asm_e04f9 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_e04f9 + pop hl + ld bc, $14 + add hl, bc + pop bc + dec b + jr nz, Functione04f7 + ret +; e0509 (38:4509) + +Functione0509: ; e0509 + ld de, Sprites + ld a, [hli] +.asm_e050d + push af + ld a, [hli] + add b + ld [de], a + inc de + ld a, [hli] + add c + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + pop af + dec a + jr nz, .asm_e050d + ret +; e0521 + +Functione0521: ; e0521 (38:4521) + ld de, VTiles1 tile $76 + ld hl, $8f62 + ld bc, $9e + call CopyBytes + ld hl, $8ffe + xor a + ld [hli], a + ld [hl], a + ret +; e0534 (38:4534) + +Functione0534: ; e0534 + xor a + ld [hBGMapMode], a + ld a, [CurEnemyMoveNum] + ld e, a + ld d, 0 + and 3 + ld c, a + ld b, 0 + ld a, e + and $1c + srl a + add Jumptable_e0553 % $100 + ld l, a + ld a, 0 + adc Jumptable_e0553 / $100 + ld h, a + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e0553 + +Jumptable_e0553: ; e0553 + dw Functione055f + dw Functione0583 + dw Functione05a7 + dw Functione05cb + dw Functione05ef + dw Functione0613 +; e055f + +Functione055f: ; e055f + ld hl, wc6e6 + 8 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e0575 + hlcoord 13, 3 +rept 2 + add hl, bc +endr + ld [hl], $36 + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $37 + ret + +.asm_e0575 + hlcoord 13, 3 +rept 2 + add hl, bc +endr + ld [hl], $36 + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3d + ret +; e0583 + +Functione0583: ; e0583 + ld hl, wc6e6 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e0599 + hlcoord 13, 4 +rept 2 + add hl, bc +endr + ld [hl], $3b + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3a + ret + +.asm_e0599 + hlcoord 13, 4 +rept 2 + add hl, bc +endr + ld [hl], $3d + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3a + ret +; e05a7 + +Functione05a7: ; e05a7 + ld hl, wc6e6 + 8 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e05bd + hlcoord 13, 6 +rept 2 + add hl, bc +endr + ld [hl], $36 + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $38 + ret + +.asm_e05bd + hlcoord 13, 6 +rept 2 + add hl, bc +endr + ld [hl], $36 + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3d + ret +; e05cb + +Functione05cb: ; e05cb + ld hl, wc6e6 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e05e1 + hlcoord 13, 7 +rept 2 + add hl, bc +endr + ld [hl], $3c + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3a + ret + +.asm_e05e1 + hlcoord 13, 7 +rept 2 + add hl, bc +endr + ld [hl], $3d + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3a + ret +; e05ef + +Functione05ef: ; e05ef + ld hl, wc6e6 + 8 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e0605 + hlcoord 13, 9 +rept 2 + add hl, bc +endr + ld [hl], $36 + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $39 + ret + +.asm_e0605 + hlcoord 13, 9 +rept 2 + add hl, bc +endr + ld [hl], $36 + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3d + ret +; e0613 + +Functione0613: ; e0613 + ld hl, wc6e6 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e0629 + hlcoord 13, 10 +rept 2 + add hl, bc +endr + ld [hl], $3c + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3a + ret + +.asm_e0629 + hlcoord 13, 10 +rept 2 + add hl, bc +endr + ld [hl], $3d + ld bc, SCREEN_WIDTH + add hl, bc + ld [hl], $3a + ret +; e0637 + +Functione0637: ; e0637 + call Functione0398 + add hl, hl + ld de, Jumptable_e0643 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e0643 + +Jumptable_e0643: ; e0643 + dw Functione06a3 + dw Functione06a3 + dw Functione06a6 + dw Functione06a6 + dw Functione06b0 + dw Functione06b0 + dw Functione06a3 + dw Functione06a3 + dw Functione06ec + dw Functione06f6 + dw Functione0702 + dw Functione070e + dw Functione06c2 + dw Functione0722 + dw Functione0770 + dw Functione0774 + dw Functione0778 + dw Functione077c + dw Functione06c2 + dw Functione072c + dw Functione0780 + dw Functione0784 + dw Functione0788 + dw Functione078c + dw Functione06cc + dw Functione0738 + dw Functione0790 + dw Functione0794 + dw Functione0798 + dw Functione079c + dw Functione06cc + dw Functione0744 + dw Functione07a0 + dw Functione07a4 + dw Functione07a8 + dw Functione07ac + dw Functione06d8 + dw Functione0750 + dw Functione07b0 + dw Functione07b4 + dw Functione07b8 + dw Functione07bc + dw Functione06d8 + dw Functione075c + dw Functione07c0 + dw Functione07c4 + dw Functione07c8 + dw Functione07cc +; e06a3 + +Functione06a3: ; e06a3 + jp Functione07db +; e06a6 + +Functione06a6: ; e06a6 + ld a, [CurEnemyMoveNum] + and $2 + jp nz, Functione07db + jr Functione06ba + +Functione06b0: ; e06b0 + ld a, [CurEnemyMoveNum] + and $2 + jr nz, Functione06ba + jp Functione07db + +Functione06ba: ; e06ba + ld c, $6 + ld de, SFX_2ND_PLACE + jp Functione07eb +; e06c2 + +Functione06c2: ; e06c2 + ld a, [CurEnemyMoveNum] + and $18 + jr z, Functione06e4 + jp Functione07db + +Functione06cc: ; e06cc + ld a, [CurEnemyMoveNum] + and $18 + cp $8 + jr z, Functione06e4 + jp Functione07db + +Functione06d8: ; e06d8 + ld a, [CurEnemyMoveNum] + and $18 + cp $10 + jr z, Functione06e4 + jp Functione07db + +Functione06e4: ; e06e4 + ld c, $9 + ld de, SFX_2ND_PLACE + jp Functione07eb +; e06ec + +Functione06ec: ; e06ec + ld a, [CurEnemyMoveNum] + and $3 + jr z, Functione071a + jp Functione07db + +Functione06f6: ; e06f6 + ld a, [CurEnemyMoveNum] + and $3 + cp $1 + jr z, Functione071a + jp Functione07db + +Functione0702: ; e0702 + ld a, [CurEnemyMoveNum] + and $3 + cp $2 + jr z, Functione071a + jp Functione07db + +Functione070e: ; e070e + ld a, [CurEnemyMoveNum] + and $3 + cp $3 + jr z, Functione071a + jp Functione07db + +Functione071a: ; e071a + ld c, $c + ld de, SFX_2ND_PLACE + jp Functione07eb +; e0722 + +Functione0722: ; e0722 + ld a, [CurEnemyMoveNum] + and $1c + jr z, Functione0768 + jp Functione07db + +Functione072c: ; e072c + ld a, [CurEnemyMoveNum] + and $1c + cp $4 + jr z, Functione0768 + jp Functione07db + +Functione0738: ; e0738 + ld a, [CurEnemyMoveNum] + and $1c + cp $8 + jr z, Functione0768 + jp Functione07db + +Functione0744: ; e0744 + ld a, [CurEnemyMoveNum] + and $1c + cp $c + jr z, Functione0768 + jp Functione07db + +Functione0750: ; e0750 + ld a, [CurEnemyMoveNum] + and $1c + cp $10 + jr z, Functione0768 + jp Functione07db + +Functione075c: ; e075c + ld a, [CurEnemyMoveNum] + and $1c + cp $14 + jr z, Functione0768 + jp Functione07db + +Functione0768: ; e0768 + ld c, $12 + ld de, SFX_2ND_PLACE + jp Functione07eb +; e0770 + + +Functione0770: ; e0770 + ld e, $0 + jr Functione07ce + +Functione0774: ; e0774 + ld e, $1 + jr Functione07ce + +Functione0778: ; e0778 + ld e, $2 + jr Functione07ce + +Functione077c: ; e077c + ld e, $3 + jr Functione07ce + +Functione0780: ; e0780 + ld e, $4 + jr Functione07ce + +Functione0784: ; e0784 + ld e, $5 + jr Functione07ce + +Functione0788: ; e0788 + ld e, $6 + jr Functione07ce + +Functione078c: ; e078c + ld e, $7 + jr Functione07ce + +Functione0790: ; e0790 + ld e, $8 + jr Functione07ce + +Functione0794: ; e0794 + ld e, $9 + jr Functione07ce + +Functione0798: ; e0798 + ld e, $a + jr Functione07ce + +Functione079c: ; e079c + ld e, $b + jr Functione07ce + +Functione07a0: ; e07a0 + ld e, $c + jr Functione07ce + +Functione07a4: ; e07a4 + ld e, $d + jr Functione07ce + +Functione07a8: ; e07a8 + ld e, $e + jr Functione07ce + +Functione07ac: ; e07ac + ld e, $f + jr Functione07ce + +Functione07b0: ; e07b0 + ld e, $10 + jr Functione07ce + +Functione07b4: ; e07b4 + ld e, $11 + jr Functione07ce + +Functione07b8: ; e07b8 + ld e, $12 + jr Functione07ce + +Functione07bc: ; e07bc + ld e, $13 + jr Functione07ce + +Functione07c0: ; e07c0 + ld e, $14 + jr Functione07ce + +Functione07c4: ; e07c4 + ld e, $15 + jr Functione07ce + +Functione07c8: ; e07c8 + ld e, $16 + jr Functione07ce + +Functione07cc: ; e07cc + ld e, $17 + +Functione07ce: ; e07ce + ld a, [CurEnemyMoveNum] + cp e + jr nz, Functione07db + ld c, $48 + ld de, SFX_2ND_PLACE + jr Functione07eb + +Functione07db: ; e07db + ld de, SFX_WRONG + call PlaySFX + ld hl, UnknownText_0xe0816 + call Functione0489 + call WaitSFX + ret + +Functione07eb: ; e07eb + push bc + push de + ld hl, UnknownText_0xe0811 + call Functione0489 + pop de + call PlaySFX + call WaitSFX + pop bc +.asm_e07fb + push bc + call Functione0833 + jr c, .asm_e0804 + call Functione081b + +.asm_e0804 + call Functione049c + ld c, 2 + call DelayFrames + pop bc + dec c + jr nz, .asm_e07fb + ret +; e0811 + +UnknownText_0xe0811: ; 0xe0811 + ; Yeah! + text_jump UnknownText_0x1c5813 + db "@" +; 0xe0816 + +UnknownText_0xe0816: ; 0xe0816 + ; Darn… + text_jump UnknownText_0x1c581a + db "@" +; 0xe081b + +Functione081b: ; e081b + ld a, [Coins] + ld h, a + ld a, [Coins + 1] + ld l, a + inc hl + ld a, h + ld [Coins], a + ld a, l + ld [Coins + 1], a + ld de, SFX_PAY_DAY + call PlaySFX + ret +; e0833 + +Functione0833: ; e0833 + ld a, [Coins] + cp 9999 / $100 + jr c, .asm_e0847 + jr z, .asm_e083e + jr .asm_e0845 + +.asm_e083e + ld a, [Coins + 1] + cp 9999 % $100 + jr c, .asm_e0847 + +.asm_e0845 + scf + ret + +.asm_e0847 + and a + ret +; e0849 + +Functione0849: ; e0849 + call Functione03ac + ld hl, Unknown_e0853 + call Functione0509 + ret +; e0853 + +Unknown_e0853: ; e0853 + db 18 + db $00, $00, $04, $00 + db $00, $08, $06, $00 + db $00, $10, $06, $00 + db $00, $18, $06, $00 + db $00, $20, $04, $20 + db $08, $00, $05, $00 + db $08, $20, $05, $20 + db $10, $00, $05, $00 + db $10, $20, $05, $20 + db $18, $00, $05, $00 + db $18, $20, $05, $20 + db $20, $00, $05, $00 + db $20, $20, $05, $20 + db $28, $00, $04, $40 + db $28, $08, $06, $40 + db $28, $10, $06, $40 + db $28, $18, $06, $40 + db $28, $20, $04, $60 +; e089c + +Functione089c: ; e089c + ld hl, hJoyLast + ld a, [hl] + and D_LEFT + jp nz, Functione08b8 + ld a, [hl] + and D_RIGHT + jp nz, Functione08ef + ld a, [hl] + and D_UP + jp nz, Functione090a + ld a, [hl] + and D_DOWN + jp nz, Functione093d + ret +; e08b8 + +Functione08b8: ; e08b8 + ld hl, wcf65 + ld a, [wcf64] + and a + jr z, .asm_e08d5 + cp $1 + jr z, .asm_e08cc + ld a, [hl] + and a + ret z + dec [hl] + jp Functione0959 + +.asm_e08cc + ld a, [hl] + cp $3 + jr c, .asm_e08e2 + dec [hl] + jp Functione0959 + +.asm_e08d5 + ld a, [hl] + and $e + ld [hl], a + cp $3 + jr c, .asm_e08e2 +rept 2 + dec [hl] +endr + jp Functione0959 + +.asm_e08e2 + ld a, $2 + ld [wcf64], a + ld a, $1 + ld [wcf65], a + jp Functione0959 +; e08ef + +Functione08ef: ; e08ef + ld hl, wcf65 + ld a, [wcf64] + and a + jr z, .asm_e08ff + ld a, [hl] + cp $5 + ret nc + inc [hl] + jr Functione0959 + +.asm_e08ff + ld a, [hl] + and $e + ld [hl], a + cp $4 + ret nc +rept 2 + inc [hl] +endr + jr Functione0959 + +Functione090a: ; e090a + ld hl, wcf64 + ld a, [wcf65] + and a + jr z, .asm_e0925 + cp $1 + jr z, .asm_e091d + ld a, [hl] + and a + ret z + dec [hl] + jr Functione0959 + +.asm_e091d + ld a, [hl] + cp $3 + jr c, .asm_e0931 + dec [hl] + jr Functione0959 + +.asm_e0925 + ld a, [hl] + and $e + ld [hl], a + cp $3 + jr c, .asm_e0931 +rept 2 + dec [hl] +endr + jr Functione0959 + +.asm_e0931 + ld a, $1 + ld [wcf64], a + ld a, $2 + ld [wcf65], a + jr Functione0959 + +Functione093d: ; e093d + ld hl, wcf64 + ld a, [wcf65] + and a + jr z, .asm_e0950 + ld hl, wcf64 + ld a, [hl] + cp $7 + ret nc + inc [hl] + jr Functione0959 + +.asm_e0950 + ld a, [hl] + and $e + ld [hl], a + cp $6 + ret nc +rept 2 + inc [hl] +endr + +Functione0959: ; e0959 + ld de, SFX_POKEBALLS_PLACED_ON_TABLE + call PlaySFX + ret +; e0960 + +Functione0960: ; e0960 + call ClearSprites + ld a, [hCGB] + and a + jr nz, .asm_e096d + ld a, [hVBlankCounter] + and $4 + ret nz + +.asm_e096d + call Functione0398 +rept 2 + add hl, hl +endr + ld de, Unknown_e0981 + add hl, de + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld h, [hl] + ld l, a + call Functione0509 + ret +; e0981 + +Unknown_e0981: ; e0981 + dbbw $58, $10, Unknown_e0c26 + dbbw $60, $10, Unknown_e0c26 + dbbw $68, $10, Unknown_e0b8d + dbbw $68, $10, Unknown_e0b8d + dbbw $88, $10, Unknown_e0b8d + dbbw $88, $10, Unknown_e0b8d + + dbbw $58, $18, Unknown_e0c26 + dbbw $60, $18, Unknown_e0c26 + dbbw $68, $18, Unknown_e0a5a + dbbw $78, $18, Unknown_e0a5a + dbbw $88, $18, Unknown_e0a5a + dbbw $98, $18, Unknown_e0a5a + + dbbw $58, $28, Unknown_e0b14 + dbbw $60, $28, Unknown_e0ac3 + dbbw $68, $28, Unknown_e0a41 + dbbw $78, $28, Unknown_e0a41 + dbbw $88, $28, Unknown_e0a41 + dbbw $98, $28, Unknown_e0a41 + dbbw $58, $28, Unknown_e0b14 + + dbbw $60, $34, Unknown_e0ac3 + dbbw $68, $34, Unknown_e0a41 + dbbw $78, $34, Unknown_e0a41 + dbbw $88, $34, Unknown_e0a41 + dbbw $98, $34, Unknown_e0a41 + + dbbw $58, $40, Unknown_e0b14 + dbbw $60, $40, Unknown_e0ac3 + dbbw $68, $40, Unknown_e0a41 + dbbw $78, $40, Unknown_e0a41 + dbbw $88, $40, Unknown_e0a41 + dbbw $98, $40, Unknown_e0a41 + dbbw $58, $40, Unknown_e0b14 + + dbbw $60, $4c, Unknown_e0ac3 + dbbw $68, $4c, Unknown_e0a41 + dbbw $78, $4c, Unknown_e0a41 + dbbw $88, $4c, Unknown_e0a41 + dbbw $98, $4c, Unknown_e0a41 + + dbbw $58, $58, Unknown_e0b14 + dbbw $60, $58, Unknown_e0ac3 + dbbw $68, $58, Unknown_e0a41 + dbbw $78, $58, Unknown_e0a41 + dbbw $88, $58, Unknown_e0a41 + dbbw $98, $58, Unknown_e0a41 + dbbw $58, $58, Unknown_e0b14 + + dbbw $60, $64, Unknown_e0ac3 + dbbw $68, $64, Unknown_e0a41 + dbbw $78, $64, Unknown_e0a41 + dbbw $88, $64, Unknown_e0a41 + dbbw $98, $64, Unknown_e0a41 +; e0a41 + +Unknown_e0a41: ; e0a41 + db 6 + db $00, $ff, $00, $80 + db $00, $00, $02, $80 + db $00, $08, $03, $80 + db $05, $ff, $00, $c0 + db $05, $00, $02, $c0 + db $05, $08, $03, $80 + +Unknown_e0a5a: ; e0a5a + db 26 + db $00, $ff, $00, $80 + db $00, $00, $02, $80 + db $00, $08, $00, $a0 + db $08, $ff, $01, $80 + db $08, $08, $01, $a0 + db $10, $ff, $01, $80 + db $10, $08, $03, $80 + db $18, $ff, $01, $80 + db $18, $08, $03, $80 + db $20, $ff, $01, $80 + db $20, $08, $03, $80 + db $28, $ff, $01, $80 + db $28, $08, $03, $80 + db $30, $ff, $01, $80 + db $30, $08, $03, $80 + db $38, $ff, $01, $80 + db $38, $08, $03, $80 + db $40, $ff, $01, $80 + db $40, $08, $03, $80 + db $48, $ff, $01, $80 + db $48, $08, $03, $80 + db $50, $ff, $01, $80 + db $50, $08, $03, $80 + db $51, $ff, $00, $c0 + db $51, $00, $02, $c0 + db $51, $08, $03, $80 + +Unknown_e0ac3: ; e0ac3 + db 20 + db $00, $ff, $00, $80 + db $00, $00, $02, $80 + db $00, $08, $02, $80 + db $00, $10, $03, $80 + db $00, $18, $02, $80 + db $00, $20, $03, $80 + db $00, $28, $02, $80 + db $00, $30, $03, $80 + db $00, $38, $02, $80 + db $00, $40, $03, $80 + db $05, $ff, $00, $c0 + db $05, $00, $02, $c0 + db $05, $08, $02, $c0 + db $05, $10, $03, $80 + db $05, $18, $02, $c0 + db $05, $20, $03, $80 + db $05, $28, $02, $c0 + db $05, $30, $03, $80 + db $05, $38, $02, $c0 + db $05, $40, $03, $80 + +Unknown_e0b14: ; e0b14 + db 30 + db $00, $00, $00, $80 + db $00, $08, $02, $80 + db $00, $10, $02, $80 + db $00, $18, $03, $80 + db $00, $20, $02, $80 + db $00, $28, $03, $80 + db $00, $30, $02, $80 + db $00, $38, $03, $80 + db $00, $40, $02, $80 + db $00, $48, $03, $80 + db $08, $00, $01, $80 + db $08, $18, $03, $80 + db $08, $28, $03, $80 + db $08, $38, $03, $80 + db $08, $48, $03, $80 + db $10, $00, $01, $80 + db $10, $18, $03, $80 + db $10, $28, $03, $80 + db $10, $38, $03, $80 + db $10, $48, $03, $80 + db $11, $00, $00, $c0 + db $11, $08, $02, $c0 + db $11, $10, $02, $c0 + db $11, $18, $03, $80 + db $11, $20, $03, $80 + db $11, $28, $03, $80 + db $11, $30, $03, $80 + db $11, $38, $03, $80 + db $11, $40, $03, $80 + db $11, $48, $03, $80 + +Unknown_e0b8d: ; e0b8d + db 38 + db $00, $ff, $00, $80 + db $00, $18, $00, $a0 + db $08, $ff, $01, $80 + db $08, $18, $01, $a0 + db $10, $ff, $01, $80 + db $10, $18, $01, $a0 + db $18, $ff, $01, $80 + db $18, $08, $03, $80 + db $18, $18, $03, $80 + db $20, $ff, $01, $80 + db $20, $08, $03, $80 + db $20, $18, $03, $80 + db $28, $ff, $01, $80 + db $28, $08, $03, $80 + db $28, $18, $03, $80 + db $30, $ff, $01, $80 + db $30, $08, $03, $80 + db $30, $18, $03, $80 + db $38, $ff, $01, $80 + db $38, $08, $03, $80 + db $38, $18, $03, $80 + db $40, $ff, $01, $80 + db $40, $08, $03, $80 + db $40, $18, $03, $80 + db $48, $ff, $01, $80 + db $48, $08, $03, $80 + db $48, $18, $03, $80 + db $50, $ff, $01, $80 + db $50, $08, $03, $80 + db $50, $18, $03, $80 + db $58, $ff, $01, $80 + db $58, $08, $03, $80 + db $58, $18, $03, $80 + db $59, $ff, $00, $c0 + db $59, $00, $02, $c0 + db $59, $08, $03, $c0 + db $59, $10, $02, $c0 + db $59, $18, $03, $e0 + +Unknown_e0c26: ; e0c26 + db 4 + db $00, $00, $00, $80 + db $00, $08, $00, $a0 + db $08, $00, $00, $c0 + db $08, $08, $00, $e0 +; e0c37 + +Functione0c37: ; e0c37 (38:4c37) + ld a, [hCGB] + and a + ret z + hlcoord 0, 0, AttrMap + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + xor a + call ByteFill + hlcoord 12, 1, AttrMap + lb bc, 2, 2 + ld a, $1 + call Functione04e7 + hlcoord 14, 1, AttrMap + lb bc, 2, 2 + ld a, $2 + call Functione04e7 + hlcoord 16, 1, AttrMap + lb bc, 2, 2 + ld a, $3 + call Functione04e7 + hlcoord 18, 1, AttrMap + lb bc, 2, 2 + ld a, $4 + call Functione04e7 + hlcoord 9, 0, AttrMap + lb bc, 12, 1 + ld a, $1 + call Functione04e7 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e0c93 + ld de, wMapPals + ld bc, $48 + call CopyBytes + pop af + ld [rSVBK], a + ret +; e0c93 (38:4c93) + +Palette_e0c93: ; e0c93 + RGB 31, 31, 31 + RGB 17, 07, 31 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 29, 25, 00 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 13, 30 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 08, 17, 30 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 08, 31, 08 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 17, 07, 31 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 17, 07, 31 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 17, 07, 31 + RGB 06, 19, 08 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 00, 00 + RGB 31, 00, 00 +; e0cdb + +LZ_e0cdb: ; e0cdb +INCBIN "gfx/unknown/0e0cdb.2bpp.lz" + +GFX_e0cf6: ; e0cf6 +INCBIN "gfx/unknown/0e0cf6.2bpp" + +GFX_e0d06: ; e0d06 +INCBIN "gfx/unknown/0e0d06.2bpp" + +LZ_e0d16: ; e0d16 +INCBIN "gfx/unknown/0e0d16.2bpp.lz" + +LZ_e0ea8: ; e0ea8 +INCBIN "gfx/unknown/0e0ea8.2bpp.lz" + +Unknown_e110c: ; e110c + db $ef, $15, $27, $2a, $2a, $06, $27, $2a, $2a, $06, $27 + db $ef, $07, $27, $3e, $3f, $42, $43, $46, $47, $4a, $4b + db $ef, $17, $26, $40, $41, $44, $45, $48, $49, $4c, $4d + db $ef, $25, $04, $00, $01, $00, $01, $00, $01, $00, $01 + db $ef, $05, $14, $10, $11, $10, $11, $10, $11, $10, $11 + db $ef, $16, $24, $20, $21, $20, $21, $20, $21, $20, $21 + db $ef, $25, $04, $00, $02, $00, $02, $00, $02, $00, $02 + db $ef, $05, $14, $10, $12, $10, $12, $10, $12, $10, $12 + db $ef, $16, $24, $20, $22, $20, $22, $20, $22, $20, $22 + db $ef, $25, $04, $00, $03, $00, $03, $00, $03, $00, $03 + db $ef, $05, $14, $10, $13, $10, $13, $10, $13, $10, $13 + db $ef, $16, $24, $20, $23, $20, $23, $20, $23, $20, $23 +; e1190 + +Functione1190: ; e1190 + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + call ClearBGPalettes + call ClearTileMap + call ClearSprites + xor a + ld [hBGMapMode], a + call DisableLCD + ld hl, wc608 + ld bc, $1e0 + xor a + call ByteFill + ld hl, GFX_e17c5 + ld de, VTiles1 tile $60 + ld bc, $40 + call CopyBytes + ld hl, LZ_e1805 + ld de, VTiles1 tile $6d + call Decompress + call Functione17a3 + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $ee + call ByteFill + hlcoord 4, 3 + lb bc, 12, 12 + ld a, $ef + call Functione13ee + call Functione124e + call Functione13fe + call Functione127d + xor a + ld [hSCY], a + ld [hSCX], a + ld [rWY], a + ld [wJumptableIndex], a + ld [wcf64], a + ld [wcf65], a + ld [wcf66], a + ld a, $93 + ld [rLCDC], a + call WaitBGMap + ld b, $18 + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + ld a, $24 + call Functioncf8 + xor a + ld [wd0ec], a + call DelayFrame +.asm_e1217 + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_e123d + call Functione12ca + ld a, [wcf64] + and a + jr nz, .asm_e1230 + ld a, [hVBlankCounter] + and $10 + jr z, .asm_e1235 + +.asm_e1230 + call Functione14d9 + jr .asm_e1238 + +.asm_e1235 + call ClearSprites + +.asm_e1238 + call DelayFrame + jr .asm_e1217 + +.asm_e123d + pop af + ld [hInMenu], a + call ClearBGPalettes + call ClearTileMap + call ClearSprites + ld a, $e3 + ld [rLCDC], a + ret +; e124e + +Functione124e: ; e124e + ld c, $1 + ld b, $10 +.asm_e1252 + call Random + and $f + ld hl, Unknown_e126d + ld e, a + ld d, $0 + add hl, de + ld e, [hl] + ld hl, wc6d0 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e1252 + ld [hl], c + inc c + dec b + jr nz, .asm_e1252 + ret +; e126d + +Unknown_e126d: ; e126d + db $00, $01, $02, $03 + db $04, $05, $06, $0b + db $0c, $11, $12, $17 + db $18, $1d, $1e, $23 +; e127d + +Functione127d: ; e127d + call Functione128d + hlcoord 5, 16 + ld a, $f6 + ld c, $a +.asm_e1287 + ld [hli], a + inc a + dec c + jr nz, .asm_e1287 + ret +; e128d + +Functione128d: ; e128d + hlcoord 4, 15 + ld a, $f0 + ld [hli], a + ld bc, $a + ld a, $f1 + call ByteFill + hlcoord 15, 15 + ld a, $f2 + ld [hli], a + hlcoord 4, 16 + ld a, $f3 + ld [hli], a + ld bc, $a + ld a, $ef + call ByteFill + hlcoord 15, 16 + ld a, $f3 + ld [hli], a + hlcoord 4, 17 + ld a, $f4 + ld [hli], a + ld bc, $a + ld a, $f1 + call ByteFill + hlcoord 15, 17 + ld a, $f5 + ld [hl], a + ret +; e12ca + +Functione12ca: ; e12ca + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, Jumptable_e12d9 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e12d9 + +Jumptable_e12d9: ; e12d9 + dw Functione12db +; e12db + +Functione12db: ; e12db + ld a, [hJoyPressed] + and START + jp nz, Functione13de + ld a, [hJoyPressed] + and A_BUTTON + jp nz, Functione1376 + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .asm_e1301 + ld a, [hl] + and D_DOWN + jr nz, .asm_e130d + ld a, [hl] + and D_LEFT + jr nz, .asm_e1325 + ld a, [hl] + and D_RIGHT + jr nz, .asm_e1345 + ret + +.asm_e1301 + ld hl, wcf65 + ld a, [hl] + cp $6 + ret c + sub $6 + ld [hl], a + jr .asm_e1364 + +.asm_e130d + ld hl, wcf65 + ld a, [hl] + cp $19 + ret z + cp $1a + ret z + cp $1b + ret z + cp $1c + ret z + cp $1e + ret nc + add $6 + ld [hl], a + jr .asm_e1364 + +.asm_e1325 + ld hl, wcf65 + ld a, [hl] + and a + ret z + cp $6 + ret z + cp $c + ret z + cp $12 + ret z + cp $18 + ret z + cp $1e + ret z + cp $23 + jr z, .asm_e1341 + dec [hl] + jr .asm_e1364 + +.asm_e1341 + ld [hl], $1e + jr .asm_e1364 + +.asm_e1345 + ld hl, wcf65 + ld a, [hl] + cp $5 + ret z + cp $b + ret z + cp $11 + ret z + cp $17 + ret z + cp $1d + ret z + cp $23 + ret z + cp $1e + jr z, .asm_e1362 + inc [hl] + jr .asm_e1364 + +.asm_e1362 + ld [hl], $23 + +.asm_e1364 + ld a, [wcf64] + and a + jr nz, .asm_e136f + ld de, SFX_POUND + jr .asm_e1372 + +.asm_e136f + ld de, SFX_MOVE_PUZZLE_PIECE + +.asm_e1372 + call PlaySFX + ret +; e1376 + +Functione1376: ; e1376 + ld a, [wcf64] + and a + jr nz, .asm_e139f + call Functione1475 + and a + jr z, Functione13e4 + ld de, SFX_MEGA_KICK + call PlaySFX + ld [hl], $0 + ld [wcf66], a + call Functione14d9 + call Functione1441 + call WaitBGMap + call WaitSFX + ld a, $1 + ld [wcf64], a + ret + +.asm_e139f + call Functione1475 + and a + jr nz, Functione13e4 + ld de, SFX_PLACE_PUZZLE_PIECE_DOWN + call PlaySFX + ld a, [wcf66] + ld [hl], a + call Functione141f + call WaitBGMap + xor a + ld [wcf66], a + call Functione14d9 + xor a + ld [wcf64], a + call WaitSFX + call Functione14a0 + ret nc + call Functione128d + call ClearSprites + ld de, SFX_1ST_PLACE + call PlaySFX + call WaitSFX + call SimpleWaitPressAorB + ld a, $1 + ld [wd0ec], a + +Functione13de: ; e13de + ld hl, wJumptableIndex + set 7, [hl] + ret + +Functione13e4: ; e13e4 + ld de, SFX_WRONG + call PlaySFX + call WaitSFX + ret +; e13ee + +Functione13ee: ; e13ee + ld de, SCREEN_WIDTH +.asm_e13f1 + push bc + push hl +.asm_e13f3 + ld [hli], a + dec c + jr nz, .asm_e13f3 + pop hl + add hl, de + pop bc + dec b + jr nz, .asm_e13f1 + ret +; e13fe + +Functione13fe: ; e13fe + xor a + ld [wcf65], a + ld c, $24 +.asm_e1404 + push bc + call Functione1475 + ld [wcf66], a + and a + jr z, .asm_e1413 + call Functione141f + jr .asm_e1416 + +.asm_e1413 + call Functione1441 + +.asm_e1416 + ld hl, wcf65 + inc [hl] + pop bc + dec c + jr nz, .asm_e1404 + ret +; e141f + +Functione141f: ; e141f + ld a, $2 + call Functione1463 + ld a, [hli] + ld h, [hl] + ld l, a + push hl + call Functione1481 + pop hl + ld de, SCREEN_WIDTH + ld b, $3 +.asm_e1431 + ld c, $3 + push hl +.asm_e1434 + ld [hli], a + inc a + dec c + jr nz, .asm_e1434 + add $9 + pop hl + add hl, de + dec b + jr nz, .asm_e1431 + ret +; e1441 + +Functione1441: ; e1441 + ld a, $2 + call Functione1463 + ld a, [hli] + ld h, [hl] + ld l, a + push hl + ld a, $4 + call Functione1463 + ld a, [hl] + pop hl + ld de, SCREEN_WIDTH + ld b, $3 +.asm_e1456 + ld c, $3 + push hl +.asm_e1459 + ld [hli], a + dec c + jr nz, .asm_e1459 + pop hl + add hl, de + dec b + jr nz, .asm_e1456 + ret +; e1463 + +Functione1463: ; e1463 + ld e, a + ld d, 0 + ld hl, Unknown_e1559 + add hl, de + ld a, [wcf65] + ld e, a +rept 4 + add hl, de +endr +rept 2 + add hl, de +endr + ret +; e1475 + +Functione1475: ; e1475 + ld hl, wc6d0 + ld a, [wcf65] + ld e, a + ld d, $0 + add hl, de + ld a, [hl] + ret +; e1481 + +Functione1481: ; e1481 + ld a, [wcf66] + ld hl, Unknown_e148f + add l + ld l, a + ld a, $0 + adc h + ld h, a + ld a, [hl] + ret +; e148f + +Unknown_e148f: ; e148f + db $e0 + db $00, $03, $06, $09 + db $24, $27, $2a, $2d + db $48, $4b, $4e, $51 + db $6c, $6f, $72, $75 +; e14a0 + +Functione14a0: ; e14a0 + ld hl, Unknown_e14b5 + ld de, wc6d0 + ld c, $24 +.asm_e14a8 + ld a, [de] + cp [hl] + jr nz, .asm_e14b3 + inc de + inc hl + dec c + jr nz, .asm_e14a8 + scf + ret + +.asm_e14b3 + and a + ret +; e14b5 + +Unknown_e14b5: ; e14b5 + db $00, $00, $00, $00, $00, $00 + db $00, $01, $02, $03, $04, $00 + db $00, $05, $06, $07, $08, $00 + db $00, $09, $0a, $0b, $0c, $00 + db $00, $0d, $0e, $0f, $10, $00 + db $00, $00, $00, $00, $00, $00 +; e14d9 + +Functione14d9: ; e14d9 + call Functione1481 + ld [wd002], a + xor a + call Functione1463 + ld a, [hli] + ld b, [hl] + ld c, a + ld a, [wd002] + cp $e0 + jr z, .asm_e14f2 + ld hl, Unknown_e150f + jr .asm_e14f5 + +.asm_e14f2 + ld hl, Unknown_e1534 + +.asm_e14f5 + ld de, Sprites +.asm_e14f8 + ld a, [hli] + cp $ff + ret z + add b + ld [de], a + inc de + ld a, [hli] + add c + ld [de], a + inc de + ld a, [wd002] + add [hl] + ld [de], a + inc hl + inc de + ld a, [hli] + ld [de], a + inc de + jr .asm_e14f8 +; e150f + +Unknown_e150f: ; e150f + db $f4, $f4, $00, $00 + db $f4, $fc, $01, $00 + db $f4, $04, $02, $00 + db $fc, $f4, $0c, $00 + db $fc, $fc, $0d, $00 + db $fc, $04, $0e, $00 + db $04, $f4, $18, $00 + db $04, $fc, $19, $00 + db $04, $04, $1a, $00 + db $ff + +Unknown_e1534: ; e1534 + db $f4, $f4, $00, $00 + db $f4, $fc, $01, $00 + db $f4, $04, $00, $20 + db $fc, $f4, $02, $00 + db $fc, $fc, $03, $00 + db $fc, $04, $02, $20 + db $04, $f4, $00, $40 + db $04, $fc, $01, $40 + db $04, $04, $00, $60 + db $ff + +Unknown_e1559: ; e1559 + +macro_e1559: macro + db \1, \2 + dwcoord \3, \4 + db \5, \6 +endm + + macro_e1559 $1c, $1c, 1, 0, $ee, $00 + macro_e1559 $34, $1c, 4, 0, $ee, $00 + macro_e1559 $4c, $1c, 7, 0, $ee, $00 + macro_e1559 $64, $1c, 10, 0, $ee, $00 + macro_e1559 $7c, $1c, 13, 0, $ee, $00 + macro_e1559 $94, $1c, 16, 0, $ee, $00 + macro_e1559 $1c, $34, 1, 3, $ee, $00 + macro_e1559 $34, $34, 4, 3, $ef, $00 + macro_e1559 $4c, $34, 7, 3, $ef, $00 + macro_e1559 $64, $34, 10, 3, $ef, $00 + macro_e1559 $7c, $34, 13, 3, $ef, $00 + macro_e1559 $94, $34, 16, 3, $ee, $00 + macro_e1559 $1c, $4c, 1, 6, $ee, $00 + macro_e1559 $34, $4c, 4, 6, $ef, $00 + macro_e1559 $4c, $4c, 7, 6, $ef, $00 + macro_e1559 $64, $4c, 10, 6, $ef, $00 + macro_e1559 $7c, $4c, 13, 6, $ef, $00 + macro_e1559 $94, $4c, 16, 6, $ee, $00 + macro_e1559 $1c, $64, 1, 9, $ee, $00 + macro_e1559 $34, $64, 4, 9, $ef, $00 + macro_e1559 $4c, $64, 7, 9, $ef, $00 + macro_e1559 $64, $64, 10, 9, $ef, $00 + macro_e1559 $7c, $64, 13, 9, $ef, $00 + macro_e1559 $94, $64, 16, 9, $ee, $00 + macro_e1559 $1c, $7c, 1, 12, $ee, $00 + macro_e1559 $34, $7c, 4, 12, $ef, $00 + macro_e1559 $4c, $7c, 7, 12, $ef, $00 + macro_e1559 $64, $7c, 10, 12, $ef, $00 + macro_e1559 $7c, $7c, 13, 12, $ef, $00 + macro_e1559 $94, $7c, 16, 12, $ee, $00 + macro_e1559 $1c, $94, 1, 15, $ee, $00 + macro_e1559 $34, $94, 4, 15, $ee, $00 + macro_e1559 $4c, $94, 7, 15, $ee, $00 + macro_e1559 $64, $94, 10, 15, $ee, $00 + macro_e1559 $7c, $94, 13, 15, $ee, $00 + macro_e1559 $94, $94, 16, 15, $ee, $00 + +Functione1631: ; e1631 + ld hl, VTiles2 + ld de, VTiles0 + ld b, $6 +.asm_e1639 + push bc + push hl + push hl + call Functione1654 + pop hl + ld bc, 8 + add hl, bc + call Functione1654 + pop hl + ld bc, $60 + add hl, bc + pop bc + dec b + jr nz, .asm_e1639 + call Functione16c7 + ret +; e1654 + +Functione1654: ; e1654 + ld c, $6 +.asm_e1656 + push bc + push hl + push hl + ld c, $4 +.asm_e165b + push bc + ld a, [hli] + and $f0 + swap a + call Functione16aa + ld c, a + ld a, [hli] + and $f0 + swap a + call Functione16aa + ld b, a + ld a, c + ld [de], a + inc de + ld a, b + ld [de], a + inc de + ld a, c + ld [de], a + inc de + ld a, b + ld [de], a + inc de + pop bc + dec c + jr nz, .asm_e165b + pop hl + ld c, $4 +.asm_e1681 + push bc + ld a, [hli] + and $f + call Functione16aa + ld c, a + ld a, [hli] + and $f + call Functione16aa + ld b, a + ld a, c + ld [de], a + inc de + ld a, b + ld [de], a + inc de + ld a, c + ld [de], a + inc de + ld a, b + ld [de], a + inc de + pop bc + dec c + jr nz, .asm_e1681 + pop hl + ld bc, $10 + add hl, bc + pop bc + dec c + jr nz, .asm_e1656 + ret +; e16aa + +Functione16aa: ; e16aa + push hl + ld hl, Unknown_e16b7 + add l + ld l, a + ld a, 0 + adc h + ld h, a + ld a, [hl] + pop hl + ret +; e16b7 + +Unknown_e16b7: ; e16b7 + db $00, $03, $0c, $0f + db $30, $33, $3c, $3f + db $c0, $c3, $cc, $cf + db $f0, $f3, $fc, $ff +; e16c7 + +Functione16c7: ; e16c7 + ld hl, Unknown_e1703 + ld a, $8 +.asm_e16cc + push af + push hl + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld h, [hl] + ld l, a + call Functione16e2 + pop hl +rept 4 + inc hl +endr + pop af + dec a + jr nz, .asm_e16cc + ret +; e16e2 + +Functione16e2: ; e16e2 + lb bc, 4, 4 +.asm_e16e5 + push bc +.asm_e16e6 + push de + push hl + ld b, $10 +.asm_e16ea + ld a, [de] + or [hl] + ld [hli], a + inc de + dec b + jr nz, .asm_e16ea + pop hl + ld de, $30 + add hl, de + pop de + dec c + jr nz, .asm_e16e6 + ld bc, $180 + add hl, bc + pop bc + dec b + jr nz, .asm_e16e5 + ret +; e1703 + +Unknown_e1703: ; e1703 + dw GFX_e1723 + $00, $8000 + dw GFX_e1723 + $10, $8010 + dw GFX_e1723 + $20, $8020 + dw GFX_e1723 + $30, $80c0 + dw GFX_e1723 + $40, $80e0 + dw GFX_e1723 + $50, $8180 + dw GFX_e1723 + $60, $8190 + dw GFX_e1723 + $70, $81a0 +; e1723 + +GFX_e1723: ; e1723 +INCBIN "gfx/unknown/0e1723.2bpp" + +Functione17a3: ; e17a3 + ld a, [ScriptVar] + and 3 + ld e, a + ld d, 0 + ld hl, Unknown_e17bd +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld de, VTiles2 + call Decompress + call Functione1631 + ret +; e17bd + +Unknown_e17bd: ; e17bd + dw LZ_e1bab + dw LZ_e1c9b + dw LZ_e19fb + dw LZ_e18ab +; e17c5 + +GFX_e17c5: ; e17c5 +INCBIN "gfx/unknown/0e17c5.2bpp" + +LZ_e1805: ; e1805 +INCBIN "gfx/unknown/0e1805.2bpp.lz" + +LZ_e18ab: ; e18ab +INCBIN "gfx/unknown/0e18ab.2bpp.lz" + +LZ_e19fb: ; e19fb +INCBIN "gfx/unknown/0e19fb.2bpp.lz" + +LZ_e1bab: ; e1bab +INCBIN "gfx/unknown/0e1bab.2bpp.lz" + +LZ_e1c9b: ; e1c9b +INCBIN "gfx/unknown/0e1c9b.2bpp.lz" diff --git a/engine/clock_reset.asm b/engine/clock_reset.asm new file mode 100755 index 000000000..e51db6249 --- /dev/null +++ b/engine/clock_reset.asm @@ -0,0 +1,251 @@ + +ResetClock_GetWraparoundTime: ; 20000 (8:4000) + push hl + dec a + ld e, a + ld d, 0 + ld hl, .WrapAroundTimes +rept 4 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld b, [hl] + inc hl + ld c, [hl] + pop hl + ret +; 20015 (8:4015) + +.WrapAroundTimes: ; 20015 + dw Buffer4 + db 7, 4 + + dw Buffer5 + db 24, 12 + + dw Buffer6 + db 60, 15 +; 20021 + +RestartClock: ; 20021 (8:4021) +; If we're here, we had an RTC overflow. + ld hl, .Text_ClockTimeMayBeWrong + call PrintText + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call LoadStandardMenuDataHeader + call ClearTileMap + ld hl, .Text_SetWithControlPad + call PrintText + call .SetClock + call ExitMenu + pop bc + ld hl, Options + ld [hl], b + ld c, a + ret +; 20047 (8:4047) + +.Text_ClockTimeMayBeWrong: ; 0x20047 + ; The clock's time may be wrong. Please reset the time. + text_jump UnknownText_0x1c40e6 + db "@" +; 0x2004c + +.Text_SetWithControlPad: ; 0x2004c + ; Set with the Control Pad. Confirm: A Button Cancel: B Button + text_jump UnknownText_0x1c411c + db "@" +; 0x20051 + +.SetClock: ; 20051 (8:4051) + ld a, 1 + ld [Buffer1], a ; which digit + ld [Buffer2], a ; wd1eb (aliases: MovementType) + ld a, 8 + ld [Buffer3], a + call UpdateTime + call GetWeekday + ld [Buffer4], a + ld a, [hHours] + ld [Buffer5], a + ld a, [hMinutes] + ld [Buffer6], a + +.loop + call .joy_loop + jr nc, .loop + and a + ret nz + call .PrintTime + ld hl, .Text_IsThisOK + call PrintText + call YesNoBox + jr c, .cancel + ld a, [Buffer4] + ld [StringBuffer2], a + ld a, [Buffer5] + ld [StringBuffer2 + 1], a + ld a, [Buffer6] + ld [StringBuffer2 + 2], a + xor a + ld [StringBuffer2 + 3], a + call Function677 + call .PrintTime + ld hl, .Text_ClockReset + call PrintText + call WaitPressAorB_BlinkCursor + xor a + ret + +.cancel + ld a, $1 + ret +; 200b0 (8:40b0) + +.Text_IsThisOK: ; 0x200b0 + ; Is this OK? + text_jump UnknownText_0x1c415b + db "@" +; 0x200b5 + +.Text_ClockReset: ; 0x200b5 + ; The clock has been reset. + text_jump UnknownText_0x1c4168 + db "@" +; 0x200ba + +.joy_loop + call Function354b + ld c, a + push af + call .PrintTime + pop af + bit 0, a + jr nz, .press_A + bit 1, a + jr nz, .press_B + bit 6, a + jr nz, .pressed_up + bit 7, a + jr nz, .pressed_down + bit 5, a + jr nz, .pressed_left + bit 4, a + jr nz, .pressed_right + jr .joy_loop + +.press_A + ld a, $0 + scf + ret + +.press_B + ld a, $1 + scf + ret + +.pressed_up + ld a, [Buffer1] ; wd1ea (aliases: MagikarpLength) + call ResetClock_GetWraparoundTime + ld a, [de] + inc a + ld [de], a + cp b + jr c, .done_scroll + ld a, $0 + ld [de], a + jr .done_scroll + +.pressed_down + ld a, [Buffer1] ; wd1ea (aliases: MagikarpLength) + call ResetClock_GetWraparoundTime + ld a, [de] + dec a + ld [de], a + cp -1 + jr nz, .done_scroll + ld a, b + dec a + ld [de], a + jr .done_scroll + +.pressed_left + ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength) + dec [hl] + jr nz, .done_scroll + ld [hl], $3 + jr .done_scroll + +.pressed_right + ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength) + inc [hl] + ld a, [hl] + cp $4 + jr c, .done_scroll + ld [hl], $1 + +.done_scroll + xor a + ret + +.PrintTime: ; 2011f (8:411f) + hlcoord 0, 5 + ld b, 5 + ld c, 18 + call TextBox + decoord 1, 8 + ld a, [Buffer4] + ld b, a + callba PrintDayOfWeek + ld a, [Buffer5] + ld b, a + ld a, [Buffer6] + ld c, a + decoord 11, 8 + callba PrintHoursMins + ld a, [Buffer2] ; wd1eb (aliases: MovementType) + lb de, " ", " " + call .PlaceChars + ld a, [Buffer1] ; wd1ea (aliases: MagikarpLength) + lb de, "▲", "▼" + call .PlaceChars + ld a, [Buffer1] ; wd1ea (aliases: MagikarpLength) + ld [Buffer2], a ; wd1eb (aliases: MovementType) + ret +; 20160 (8:4160) + +.unreferenced: ; 20160 + ld a, [Buffer3] + ld b, a + call Coord2Tile + ret +; 20168 + +.PlaceChars: ; 20168 (8:4168) + push de + call ResetClock_GetWraparoundTime + ld a, [Buffer3] + dec a + ld b, a + call Coord2Tile + pop de + ld [hl], d + ld bc, 2 * SCREEN_WIDTH + add hl, bc + ld [hl], e + ret +; 2017c (8:417c) + +String_2017c: ; 2017c + db "じ@" ; HR +; 2017e + +String_2017e: ; 2017e + db "ふん@" ; MIN +; 20181 diff --git a/engine/color.asm b/engine/color.asm index 9fde4d77d..8530c2181 100644 --- a/engine/color.asm +++ b/engine/color.asm @@ -149,7 +149,7 @@ Function8b07: ; 8b07 call CheckCGB ret z ld hl, Palette8b2f - ld de, Unkn1Pals + ld de, wMapPals ld bc, $0008 ld a, $5 call FarCopyWRAM @@ -275,7 +275,7 @@ endr asm_8bd7 push hl - ld hl, Unkn1Pals + ld hl, wMapPals ld de, $0008 .asm_8bde and a @@ -319,7 +319,7 @@ Function8bec: ; 8bec ld a, [EnemySafeguardCount] and $3 call Function9663 - call Function323d + call LoadDETile ret ; 8c1d @@ -338,7 +338,7 @@ Function8c1d: ; 8c1d call Function976b .asm_8c33 - ld de, Unkn1Pals + ld de, wMapPals call Function9643 call Function9699 call Function96b3 @@ -412,11 +412,11 @@ endr ld a, $5 ld [rSVBK], a ld a, [hli] - ld [Unkn1Pals], a - ld [Unkn1Pals + 8 * 2], a + ld [wMapPals], a + ld [wMapPals + 8 * 2], a ld a, [hl] - ld [Unkn1Pals + 1], a - ld [Unkn1Pals + 8 * 2 + 1], a + ld [wMapPals + 1], a + ld [wMapPals + 8 * 2 + 1], a pop af ld [rSVBK], a call Function96a4 @@ -458,7 +458,7 @@ endr ret .asm_8cf0 - ld de, Unkn1Pals + ld de, wMapPals ld bc, $0008 ld a, $5 call FarCopyWRAM @@ -525,7 +525,7 @@ INCLUDE "predef/cgb.asm" Function95f0: ; 95f0 ld hl, Palette_9608 - ld de, Unkn1Pals + ld de, wMapPals ld bc, 8 ld a, $5 call FarCopyWRAM @@ -544,7 +544,7 @@ Palette_9608: ; 9608 CopyFourPalettes: ; 9610 - ld de, Unkn1Pals + ld de, wMapPals ld c, $4 CopyPalettes: ; 9615 @@ -644,7 +644,7 @@ Function9673: ; 9673 push af ld a, $5 ld [rSVBK], a - ld hl, Unkn1Pals + ld hl, wMapPals ld c, $8 .asm_9683 ld a, $ff @@ -676,7 +676,7 @@ Function9699: ; 9699 ; 96a4 Function96a4: ; 96a4 - ld hl, Unkn1Pals + ld hl, wMapPals ld de, BGPals ld bc, $0080 ld a, $5 @@ -768,7 +768,7 @@ Function971a: ; 971a Function9729: ; 9729 push de - callba Function3da85 + callba GetPartyMonDVs ld c, l ld b, h ld a, [TempBattleMonSpecies] @@ -779,7 +779,7 @@ Function9729: ; 9729 Function973a: ; 973a push de - callba Function3da97 + callba GetEnemyMonDVs ld c, l ld b, h ld a, [TempEnemyMonSpecies] @@ -1047,7 +1047,7 @@ Function9890:: ; 9890 push af ld a, $5 ld [rSVBK], a - ld hl, Unkn1Pals + ld hl, wMapPals call Function98df ld hl, BGPals call Function98df @@ -1945,7 +1945,7 @@ INCLUDE "gfx/trainers/palette_pointers.asm" ; b1de Functionb1de: ; b1de - callba Function494ac + callba LoadSpecialMapPalette jr c, .asm_b230 ld a, [wPermission] @@ -1973,7 +1973,7 @@ endr push af ld a, $5 ld [rSVBK], a - ld hl, Unkn1Pals + ld hl, wMapPals ld b, $8 .asm_b210 ld a, [de] @@ -2036,7 +2036,7 @@ rept 4 inc hl endr .asm_b26d - ld de, Unkn1Pals + 8 * 6 + 2 + ld de, wMapPals + 8 * 6 + 2 ld bc, 4 ld a, $5 call FarCopyWRAM diff --git a/engine/credits.asm b/engine/credits.asm index 793891dd2..6b35fbe6a 100644 --- a/engine/credits.asm +++ b/engine/credits.asm @@ -131,7 +131,7 @@ Function109847:: ; 109847 ld a, $5 ld [rSVBK], a - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites @@ -210,7 +210,7 @@ Function109847:: ; 109847 jr .asm_1098de .asm_1098ee - call WhiteBGMap + call ClearBGPalettes xor a ld [hLCDStatCustom], a ld [hBGMapAddress], a @@ -300,7 +300,7 @@ Function109956: ; 109956 (42:5956) Function10995e: ; 10995e (42:595e) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a jp Function109951 Function109964: ; 109964 (42:5964) @@ -317,13 +317,13 @@ Function109964: ; 109964 (42:5964) Function10997b: ; 10997b (42:597b) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld a, $8 ld [Requested2bpp], a jp Function109951 Function109986: ; 109986 (42:5986) - ld a, [rLY] ; $ff00+$44 + ld a, [rLY] cp $30 jr c, Function109986 ld a, [wcf66] @@ -366,7 +366,7 @@ ParseCredits: ; 1099aa ; First, let's clear the current text display, ; starting from line 5. xor a - ld [$ffd4], a + ld [hBGMapMode], a hlcoord 0, 5 ld bc, 20 * 12 ld a, " " @@ -479,9 +479,9 @@ endr ld [CreditsTimer], a xor a - ld [$ffd5], a + ld [hBGMapThird], a ld a, 1 - ld [$ffd4], a + ld [hBGMapMode], a .done jp Function109951 @@ -523,9 +523,9 @@ endr Function109a95: ; 109a95 (42:5a95) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld a, $c - ld [hBGMapAddress], a ; $ff00+$d6 + ld [hBGMapAddress], a ld a, $28 hlcoord 0, 0 ld bc, $168 @@ -558,8 +558,8 @@ Function109a95: ; 109a95 (42:5a95) call ByteFill call Function3200 xor a - ld [hBGMapMode], a ; $ff00+$d4 - ld [hBGMapAddress], a ; $ff00+$d6 + ld [hBGMapMode], a + ld [hBGMapAddress], a hlcoord 0, 0 call Function109aff call Function3200 @@ -637,10 +637,10 @@ GetCreditsPalette: ; 109b2c push af push hl - add Unkn1Pals % $100 + add wMapPals % $100 ld e, a ld a, 0 - adc Unkn1Pals / $100 + adc wMapPals / $100 ld d, a ld bc, 24 call CopyBytes diff --git a/engine/diploma.asm b/engine/diploma.asm index eff2ff5f1..7699cf930 100644 --- a/engine/diploma.asm +++ b/engine/diploma.asm @@ -1,12 +1,12 @@ Function1dd702: ; 1dd702 call Function1dd709 - call Functiona80 + call WaitPressAorB_BlinkCursor ret ; 1dd709 Function1dd709: ; 1dd709 - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites call DisableLCD diff --git a/engine/dummy_game.asm b/engine/dummy_game.asm new file mode 100755 index 000000000..86d505e0e --- /dev/null +++ b/engine/dummy_game.asm @@ -0,0 +1,615 @@ +_DummyGame: ; e1e5b (38:5e5b) + call Functione1e67 + call DelayFrame +.asm_e1e61 + call Functione1ebb + jr nc, .asm_e1e61 + ret + +Functione1e67: ; e1e67 (38:5e67) + call DisableLCD + ld b, $8 + call GetSGBLayout + callab Function8cf53 + ld hl, LZ_e2221 + ld de, VTiles2 tile $00 + call Decompress + ld hl, Unknown_e00ed + ld de, VTiles0 tile $00 + ld bc, $40 + ld a, BANK(Unknown_e00ed) + call FarCopyBytes + ld a, $8 + ld hl, wc300 + ld [hli], a + ld [hl], $0 + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + xor a + call ByteFill + xor a + ld [hSCY], a + ld [hSCX], a + ld [rWY], a + ld [wJumptableIndex], a + ld a, $1 + ld [hBGMapMode], a + ld a, $e3 + ld [rLCDC], a + ld a, $e4 + call DmgToCgbBGPals + ld a, $e0 + call Functioncf8 + ret + +Functione1ebb: ; e1ebb (38:5ebb) + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_e1ed0 + call Functione1ed2 + callab Function8cf69 + call DelayFrame + and a + ret +.asm_e1ed0 + scf + ret + +Functione1ed2: ; e1ed2 (38:5ed2) + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, Jumptable_e1ee1 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e1ee1 (38:5ee1) + +Jumptable_e1ee1: ; e1ee1 + dw Functione1ef3 + dw Functione1efb + dw Functione1f1c + dw Functione1f42 + dw Functione1f61 + dw Functione1f8b + dw Functione1fba + dw Functione1fcc + dw Functione2000 +; e1ef3 + +Functione1ef3: ; e1ef3 + call Functione2152 + ld hl, wJumptableIndex + inc [hl] + ret +; e1efb + +Functione1efb: ; e1efb + call Functione00ed + jr nc, .asm_e1f06 + ld hl, wJumptableIndex + set 7, [hl] + ret + +.asm_e1f06 + call Functione209d + ld hl, wJumptableIndex + inc [hl] + xor a + ld [wc708], a + ld hl, wc703 +rept 4 + ld [hli], a +endr + ld [hl], a + ld [wc709], a + +Functione1f1c: ; e1f1c + ld hl, wc708 + ld a, [hl] + cp $2d + jr nc, .asm_e1f30 + inc [hl] + call Functione2183 + xor a + ld [wc6fd], a + call Functione2128 + ret + +.asm_e1f30 + ld de, $341c + ld a, $c + call Function3b2a + ld a, $5 + ld [wc702], a + ld hl, wJumptableIndex + inc [hl] + ret +; e1f42 + +Functione1f42: ; e1f42 + ld a, [wc702] + hlcoord 17, 0 + add $f6 + ld [hl], a + ld hl, wc702 + ld a, [hl] + and a + jr nz, .asm_e1f58 + ld a, $7 + ld [wJumptableIndex], a + ret + +.asm_e1f58 + dec [hl] + xor a + ld [wcf64], a + ld hl, wJumptableIndex + inc [hl] + +Functione1f61: ; e1f61 + ld a, [wcf64] + and a + ret z + dec a + ld e, a + ld d, $0 + ld hl, wc6d0 + add hl, de + ld a, [hl] + cp $ff + ret z + ld [wc6fd], a + ld [wPlayerMinimized], a + ld a, e + ld [EnemyScreens], a + call Functione2183 + call Functione2128 + xor a + ld [wcf64], a + ld hl, wJumptableIndex + inc [hl] + ret +; e1f8b + +Functione1f8b: ; e1f8b + ld a, [wcf64] + and a + ret z + dec a + ld hl, EnemyScreens + cp [hl] + ret z + ld e, a + ld d, $0 + ld hl, wc6d0 + add hl, de + ld a, [hl] + cp $ff + ret z + ld [wc6fd], a + ld [PlayerScreens], a + ld a, e + ld [wc701], a + call Functione2183 + call Functione2128 + ld a, $40 + ld [wc708], a + ld hl, wJumptableIndex + inc [hl] + +Functione1fba: ; e1fba + ld hl, wc708 + ld a, [hl] + and a + jr z, .asm_e1fc3 + dec [hl] + ret + +.asm_e1fc3 + call Functione2010 + ld a, $3 + ld [wJumptableIndex], a + ret +; e1fcc + +Functione1fcc: ; e1fcc + ld a, [hJoypadPressed] + and A_BUTTON + ret z + xor a + ld [wc708], a +.asm_e1fd5 + ld hl, wc708 + ld a, [hl] + cp $2d + jr nc, .asm_e1ff9 + inc [hl] + push af + call Functione2183 + pop af + push hl + ld e, a + ld d, $0 + ld hl, wc6d0 + add hl, de + ld a, [hl] + pop hl + cp $ff + jr z, .asm_e1fd5 + ld [wc6fd], a + call Functione2128 + jr .asm_e1fd5 + +.asm_e1ff9 + call WaitPressAorB_BlinkCursor + ld hl, wJumptableIndex + inc [hl] + +Functione2000: ; e2000 + call Functione00ed + jr nc, .asm_e200b + ld hl, wJumptableIndex + set 7, [hl] + ret + +.asm_e200b + xor a + ld [wJumptableIndex], a + ret +; e2010 + +Functione2010: ; e2010 + ld hl, wPlayerMinimized + ld a, [hli] + cp [hl] + jr nz, .asm_e2066 + ld a, [EnemyScreens] + call Functione2183 + call Functione2142 + ld a, [wc701] + call Functione2183 + call Functione2142 + ld a, [EnemyScreens] + ld e, a + ld d, $0 + ld hl, wc6d0 + add hl, de + ld [hl], $ff + ld a, [wc701] + ld e, a + ld d, $0 + ld hl, wc6d0 + add hl, de + ld [hl], $ff + ld hl, wc703 +.asm_e2044 + ld a, [hli] + and a + jr nz, .asm_e2044 + dec hl + ld a, [wPlayerMinimized] + ld [hl], a + ld [wc6fd], a + ld hl, wc709 + ld e, [hl] +rept 2 + inc [hl] +endr + ld d, $0 + hlcoord 5, 0 + add hl, de + call Functione2128 + ld hl, UnknownText_0xe2083 + call PrintText + ret + +.asm_e2066 + xor a + ld [wc6fd], a + ld a, [EnemyScreens] + call Functione2183 + call Functione2128 + ld a, [wc701] + call Functione2183 + call Functione2128 + ld hl, UnknownText_0xe2098 + call PrintText + ret +; e2083 + +UnknownText_0xe2083: ; 0xe2083 + start_asm +; 0xe2084 + +Functione2084: ; e2084 + push bc + hlcoord 2, 13 + call Functione2128 + ld hl, UnknownText_0xe2093 + pop bc +rept 3 + inc bc +endr + ret +; e2093 + +UnknownText_0xe2093: ; 0xe2093 + ; , yeah! + text_jump UnknownText_0x1c1a5b + db "@" +; 0xe2098 + +UnknownText_0xe2098: ; 0xe2098 + ; Darn… + text_jump UnknownText_0x1c1a65 + db "@" +; 0xe209d + +Functione209d: ; e209d + ld hl, wc6d0 + ld bc, $2d + xor a + call ByteFill + call Functione2101 + ld c, $2 + ld b, [hl] + call Functione20e5 + ld c, $8 + ld b, [hl] + call Functione20e5 + ld c, $4 + ld b, [hl] + call Functione20e5 + ld c, $7 + ld b, [hl] + call Functione20e5 + ld c, $3 + ld b, [hl] + call Functione20e5 + ld c, $6 + ld b, [hl] + call Functione20e5 + ld c, $1 + ld b, [hl] + call Functione20e5 + ld c, $5 + ld hl, wc6d0 + ld b, $2d +.asm_e20db + ld a, [hl] + and a + jr nz, .asm_e20e0 + ld [hl], c + +.asm_e20e0 + inc hl + dec b + jr nz, .asm_e20db + ret +; e20e5 + +Functione20e5: ; e20e5 + push hl + ld de, wc6d0 +.asm_e20e9 + call Random + and $3f + cp $2d + jr nc, .asm_e20e9 + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + and a + jr nz, .asm_e20e9 + ld [hl], c + dec b + jr nz, .asm_e20e9 + pop hl + inc hl + ret +; e2101 + +Functione2101: ; e2101 + ld a, [MenuSelection2] + dec a + ld l, a + ld h, 0 +rept 3 + add hl, hl +endr + ld de, Unknown_e2110 + add hl, de + ret +; e2110 + +Unknown_e2110: ; e2110 + db $02, $03, $06, $06, $06, $08, $08, $06 + db $02, $02, $04, $06, $06, $08, $08, $09 + db $02, $02, $02, $04, $07, $08, $08, $0c +; e2128 + +Functione2128: ; e2128 + ld a, [wc6fd] + sla a + sla a + add $4 + ld [hli], a + inc a + ld [hld], a + inc a + ld bc, SCREEN_WIDTH + add hl, bc + ld [hli], a + inc a + ld [hl], a + ld c, 3 + call DelayFrames + ret +; e2142 + +Functione2142: ; e2142 + ld a, $1 + ld [hli], a + ld [hld], a + ld bc, SCREEN_WIDTH + add hl, bc + ld [hli], a + ld [hl], a + ld c, 3 + call DelayFrames + ret +; e2152 + +Functione2152: ; e2152 + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $1 + call ByteFill + hlcoord 0, 0 + ld de, String_e2177 + call PlaceString + hlcoord 15, 0 + ld de, String_e217d + call PlaceString + ld hl, UnknownText_0xe2176 + call PrintText + ret +; e2176 + +UnknownText_0xe2176: ; 0xe2176 + db "@" +; 0xe2177 + +String_e2177: db "とったもの@" +String_e217d: db "あと かい@" +; e2183 + +Functione2183: ; e2183 + ld d, $0 +.asm_e2185 + sub $9 + jr c, .asm_e218c + inc d + jr .asm_e2185 + +.asm_e218c + add $9 + ld e, a + hlcoord 1, 2 + ld bc, $28 +.asm_e2195 + ld a, d + and a + jr z, .asm_e219d + add hl, bc + dec d + jr .asm_e2195 + +.asm_e219d + sla e + add hl, de + ret +; e21a1 + +Functione21a1: ; e21a1 (38:61a1) + ld a, [wJumptableIndex] + cp $7 + jr nc, .quit + call JoyTextDelay + ld hl, hJoypadPressed ; $ffa3 + ld a, [hl] + and A_BUTTON + jr nz, .pressed_a + ld a, [hl] + and D_LEFT + jr nz, .pressed_left + ld a, [hl] + and D_RIGHT + jr nz, .pressed_right + ld a, [hl] + and D_UP + jr nz, .pressed_up + ld a, [hl] + and D_DOWN + jr nz, .pressed_down + ret + +.quit + ld hl, 0 + add hl, bc + ld [hl], $0 + ret + +.pressed_a + ld hl, $c + add hl, bc + ld a, [hl] + inc a + ld [wcf64], a + ret + +.pressed_left + ld hl, $6 + add hl, bc + ld a, [hl] + and a + ret z + sub $10 + ld [hl], a + ld hl, $c + add hl, bc + dec [hl] + ret + +.pressed_right + ld hl, $6 + add hl, bc + ld a, [hl] + cp $80 + ret z + add $10 + ld [hl], a + ld hl, $c + add hl, bc + inc [hl] + ret + +.pressed_up + ld hl, $7 + add hl, bc + ld a, [hl] + and a + ret z + sub $10 + ld [hl], a + ld hl, $c + add hl, bc + ld a, [hl] + sub $9 + ld [hl], a + ret + +.pressed_down + ld hl, $7 + add hl, bc + ld a, [hl] + cp $40 + ret z + add $10 + ld [hl], a + ld hl, $c + add hl, bc + ld a, [hl] + add $9 + ld [hl], a + ret +; e2221 (38:6221) + +LZ_e2221: ; e2221 +INCBIN "gfx/unknown/0e2221.2bpp.lz" diff --git a/engine/events.asm b/engine/events.asm index 20e2bc0dd..bd26afffd 100644 --- a/engine/events.asm +++ b/engine/events.asm @@ -138,7 +138,7 @@ EnterMap: ; 9673e call ClearAllScriptFlags3 ld a, [hMapEntryMethod] - cp MAPSETUP_07 + cp MAPSETUP_CONNECTION jr nz, .dontset call SetAll_ScriptFlags3 .dontset @@ -247,7 +247,7 @@ Function967d1: ; 967d1 Function967e1: ; 967e1 callba RefreshMapAppearDisappear callba Functiond4d2 - callba Functionb8098 + callba PlaceMapNameSign ret ; 967f4 @@ -322,13 +322,13 @@ PlayerEvents: ; 9681f ld [ScriptRunning], a call DoPlayerEvent ld a, [ScriptRunning] - cp 4 + cp PLAYEREVENT_CONNECTION jr z, .ok2 - cp 9 + cp PLAYEREVENT_JOYCHANGEFACING jr z, .ok2 xor a - ld [wc2da], a + ld [wLandmarkSignTimer], a .ok2 scf @@ -342,7 +342,7 @@ CheckTrainerBattle3: ; 96867 call CheckTrainerBattle2 jr nc, .nope - ld a, 1 + ld a, PLAYEREVENT_SEENBYTRAINER scf ret @@ -359,10 +359,10 @@ CheckTileEvent: ; 96874 jr z, .bit2 callba CheckMovingOffEdgeOfMap - jr c, .return4 + jr c, .map_connection call CheckWarpTile - jr c, .return6 + jr c, .warp_tile .bit2 call CheckBit1_ScriptFlags3 @@ -390,21 +390,21 @@ CheckTileEvent: ; 96874 xor a ret -.return4 - ld a, 4 +.map_connection + ld a, PLAYEREVENT_CONNECTION scf ret -.return6 +.warp_tile ld a, [PlayerStandingTile] call CheckPitTile - jr nz, .pittile - ld a, 6 + jr nz, .not_pit + ld a, PLAYEREVENT_FALL scf ret -.pittile - ld a, 5 +.not_pit + ld a, PLAYEREVENT_WARP scf ret @@ -711,7 +711,7 @@ TryReadSign: ; 96a38 ret .IsSign - ld a, [wd040] + ld a, [EngineBuffer3] ld hl, .signs rst JumpTable ret @@ -749,7 +749,7 @@ TryReadSign: ; 96a38 .read call PlayTalkObject - ld hl, wd041 + ld hl, EngineBuffer4 ld a, [hli] ld h, [hl] ld l, a @@ -811,7 +811,7 @@ endr CheckSignFlag: ; 96ad8 - ld hl, wd041 + ld hl, EngineBuffer4 ld a, [hli] ld h, [hl] ld l, a @@ -820,7 +820,7 @@ CheckSignFlag: ; 96ad8 call GetFarHalfword ld e, l ld d, h - ld b, $2 ; check + ld b, CHECK_FLAG call EventFlagAction ld a, c and a @@ -899,7 +899,7 @@ PlayerMovement: ; 96af0 CheckMenuOW: ; 96b30 xor a ld [hMenuReturn], a - ld [$ffa1], a + ld [hMenuReturn + 1], a ld a, [hJoyPressed] bit 2, a ; SELECT @@ -1050,14 +1050,16 @@ DoPlayerEvent: ; 96beb ld a, [ScriptRunning] and a ret z - cp -1 ; run script + + cp PLAYEREVENT_MAPSCRIPT ; run script ret z - cp 10 + + cp NUM_PLAYER_EVENTS ret nc ld c, a ld b, 0 - ld hl, ScriptPointers96c0c + ld hl, PlayerEventScriptPointers rept 3 add hl,bc endr @@ -1070,25 +1072,25 @@ endr ret ; 96c0c -ScriptPointers96c0c: ; 96c0c - dba Invalid_0x96c2d - dba SeenByTrainerScript - dba TalkToTrainerScript - dba FindItemInBallScript - dba UnknownScript_0x96c4d - dba WarpToNewMapScript - dba FallIntoMapScript - dba UnknownScript_0x124c8 - dba HatchEggScript - dba UnknownScript_0x96c4f - dba Invalid_0x96c2d +PlayerEventScriptPointers: ; 96c0c + dba Invalid_0x96c2d ; 0 + dba SeenByTrainerScript ; 1 + dba TalkToTrainerScript ; 2 + dba FindItemInBallScript ; 3 + dba UnknownScript_0x96c4d ; 4 + dba WarpToNewMapScript ; 5 + dba FallIntoMapScript ; 6 + dba Script_OverworldWhiteout ; 7 + dba HatchEggScript ; 8 + dba UnknownScript_0x96c4f ; 9 + dba Invalid_0x96c2d ; 10 ; 96c2d Invalid_0x96c2d: ; 96c2d end ; 96c2e -UnknownScript_0x96c2e: ; 96c2e +; unreferenced end ; 96c2f @@ -1099,12 +1101,12 @@ HatchEggScript: ; 96c2f WarpToNewMapScript: ; 96c34 warpsound - newloadmap MAPSETUP_05 + newloadmap MAPSETUP_DOOR end ; 96c38 FallIntoMapScript: ; 96c38 - newloadmap MAPSETUP_06 + newloadmap MAPSETUP_FALL playsound SFX_KINESIS applymovement PLAYER, MovementData_0x96c48 playsound SFX_STRENGTH @@ -1122,11 +1124,11 @@ LandAfterPitfallScript: ; 96c4a end ; 96c4d -UnknownScript_0x96c4d: ; 96c4d - reloadandreturn $f7 +UnknownScript_0x96c4d: ; 4 + reloadandreturn MAPSETUP_CONNECTION ; 96c4f -UnknownScript_0x96c4f: ; 96c4f +UnknownScript_0x96c4f: ; 9 deactivatefacing $3 callasm SetBit4_ScriptFlags3 end diff --git a/engine/events_3.asm b/engine/events_3.asm new file mode 100755 index 000000000..f9f8ffedc --- /dev/null +++ b/engine/events_3.asm @@ -0,0 +1,863 @@ +ReturnFromMapSetupScript:: ; b8000 + xor a + ld [hBGMapMode], a + ; For some reson, GameFreak chose to use a callba here instead of just falling through. + ; No other function in the game references the function at 2E:400A, here labeled + ; ReturnFromMapSetupScript.inefficientcallba. + callba .inefficientcallba ; this is a waste of 6 ROM bytes and 2 stack bytes + ret +; b800a + +.inefficientcallba: ; b800a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + ld [wCurrentLandmark], a + call .CheckNationalParkGate + jr z, .nationalparkgate + + call GetMapPermission + cp GATE + jr nz, .not_gate + +.nationalparkgate + ld a, -1 + ld [wCurrentLandmark], a + +.not_gate + ld hl, wEnteredMapFromContinue + bit 1, [hl] + res 1, [hl] + jr nz, .dont_do_map_sign + + call .CheckMovingWithinLandmark + jr z, .dont_do_map_sign + ld a, [wCurrentLandmark] + ld [wPreviousLandmark], a + + call .CheckSpecialMap + jr z, .dont_do_map_sign + +; Display for 60 frames + ld a, 60 + ld [wLandmarkSignTimer], a + call LoadMapNameSignGFX + call InitMapNameFrame + callba Function104303 + ret + +.dont_do_map_sign + ld a, [wCurrentLandmark] + ld [wPreviousLandmark], a + ld a, $90 + ld [rWY], a + ld [hWY], a + xor a + ld [hLCDStatCustom], a + ret +; b8064 + +.CheckMovingWithinLandmark: ; b8064 + ld a, [wCurrentLandmark] + ld c, a + ld a, [wPreviousLandmark] + cp c + ret z + cp $0 + ret +; b8070 + +.CheckSpecialMap: ; b8070 + cp -1 + ret z + cp SPECIAL_MAP + ret z + cp RADIO_TOWER + ret z + cp LAV_RADIO_TOWER + ret z + cp UNDERGROUND + ret z + cp INDIGO_PLATEAU + ret z + cp POWER_PLANT + ret z + ld a, $1 + and a + ret +; b8089 + +.CheckNationalParkGate: ; b8089 + ld a, [MapGroup] + cp GROUP_ROUTE_35_NATIONAL_PARK_GATE + ret nz + ld a, [MapNumber] + cp MAP_ROUTE_35_NATIONAL_PARK_GATE + ret z + cp MAP_ROUTE_36_NATIONAL_PARK_GATE + ret +; b8098 + + +PlaceMapNameSign:: ; b8098 (2e:4098) + ld hl, wLandmarkSignTimer + ld a, [hl] + and a + jr z, .disappear + dec [hl] + cp 60 + ret z + cp 59 + jr nz, .skip2 + call InitMapNameFrame + call PlaceMapNameCenterAlign + callba Function104303 +.skip2 + ld a, $80 + ld a, $70 + ld [rWY], a + ld [hWY], a + ret + +.disappear + ld a, $90 + ld [rWY], a + ld [hWY], a + xor a + ld [hLCDStatCustom], a + ret + + +LoadMapNameSignGFX: ; b80c6 + ld de, MapEntryFrameGFX + ld hl, VTiles2 tile $60 + lb bc, BANK(MapEntryFrameGFX), $e + call Get2bpp + ret +; b80d3 + +InitMapNameFrame: ; b80d3 + hlcoord 0, 0 + ld b, 2 + ld c, 18 + call InitMapSignAttrMap + call PlaceMapNameFrame + ret +; b80e1 + + +PlaceMapNameCenterAlign: ; b80e1 (2e:40e1) + ld a, [wCurrentLandmark] + ld e, a + callba GetLandmarkName + call .GetNameLength + ld a, SCREEN_WIDTH + sub c + srl a + ld b, $0 + ld c, a + hlcoord 0, 2 + add hl, bc + ld de, StringBuffer1 + call PlaceString + ret + +.GetNameLength: ; b8101 (2e:4101) + ld c, 0 + push hl + ld hl, StringBuffer1 +.loop + ld a, [hli] + cp "@" + jr z, .stop + cp "%" + jr z, .loop + inc c + jr .loop +.stop + pop hl + ret + + +InitMapSignAttrMap: ; b8115 + ld de, AttrMap - TileMap + add hl, de +rept 2 + inc b +endr +rept 2 + inc c +endr + ld a, $87 +.loop + push bc + push hl +.inner_loop + ld [hli], a + dec c + jr nz, .inner_loop + pop hl + ld de, SCREEN_WIDTH + add hl, de + pop bc + dec b + jr nz, .loop + ret +; b812f + +PlaceMapNameFrame: ; b812f + hlcoord 0, 0 + ; top left + ld a, $61 + ld [hli], a + ; top row + ld a, $62 + call .FillTopBottom + ; top right + ld a, $64 + ld [hli], a + ; left, first line + ld a, $65 + ld [hli], a + ; first line + call .FillMiddle + ; right, first line + ld a, $6b + ld [hli], a + ; left, second line + ld a, $66 + ld [hli], a + ; second line + call .FillMiddle + ; right, second line + ld a, $6c + ld [hli], a + ; bottom left + ld a, $67 + ld [hli], a + ; bottom + ld a, $68 + call .FillTopBottom + ; bottom right + ld a, $6a + ld [hl], a + ret +; b815b + +.FillMiddle: ; b815b + ld c, 18 + ld a, $6d +.loop + ld [hli], a + dec c + jr nz, .loop + ret +; b8164 + +.FillTopBottom: ; b8164 + ld c, 5 + jr .enterloop + +.continueloop +rept 2 + ld [hli], a +endr + +.enterloop + inc a +rept 2 + ld [hli], a +endr + dec a + dec c + jr nz, .continueloop + ret +; b8172 + +CheckForSignpostItems: ; b8172 +; Checks to see if there are hidden items on the screen that have not yet been found. If it finds one, returns carry. + call GetMapScriptHeaderBank + ld [Buffer1], a +; Get the coordinate of the bottom right corner of the screen, and load it in wd1ec/wd1ed. + ld a, [XCoord] + add SCREEN_WIDTH / 4 + ld [wd1ed], a + ld a, [YCoord] + add SCREEN_HEIGHT / 4 + ld [wd1ec], a +; Get the pointer for the first signpost header in the map... + ld hl, wdc02 + ld a, [hli] + ld h, [hl] + ld l, a +; ... before even checking to see if there are any signposts on this map. + ld a, [wCurrentMapSignpostCount] + and a + jr z, .nosignpostitems +; For i = 1:wCurrentMapSignpostCount... +.loop +; Store the counter in Buffer2, and store the signpost header pointer in the stack. + ld [Buffer2], a + push hl +; Get the Y coordinate of the signpost. + call .GetFarByte + ld e, a +; Is the Y coordinate of the signpost on the screen? If not, go to the next signpost. + ld a, [wd1ec] + sub e + jr c, .next + cp SCREEN_HEIGHT / 2 + jr nc, .next +; Is the X coordinate of the signpost on the screen? If not, go to the next signpost. + call .GetFarByte + ld d, a + ld a, [wd1ed] + sub d + jr c, .next + cp SCREEN_WIDTH / 2 + jr nc, .next +; Is this signpost a hidden item? If not, go to the next signpost. + call .GetFarByte + cp SIGNPOST_ITEM + jr nz, .next +; Has this item already been found? If not, set off the Itemfinder. + ld a, [Buffer1] + call GetFarHalfword + ld a, [Buffer1] + call GetFarHalfword + ld d, h + ld e, l + ld b, CHECK_FLAG + call EventFlagAction + ld a, c + and a + jr z, .itemnearby + +.next +; Restore the signpost header pointer and increment it by the length of a signpost header. + pop hl + ld bc, 5 + add hl, bc +; Restore the signpost counter and decrement it. If it hits zero, there are no hidden items in range. + ld a, [Buffer2] + dec a + jr nz, .loop + +.nosignpostitems + xor a + ret + +.itemnearby + pop hl + scf + ret +; b81e2 + +.GetFarByte: ; b81e2 + ld a, [Buffer1] + call GetFarByte + inc hl + ret +; b81ea + + +TreeMonEncounter: ; b81ea + callba MobileFn_1060ef + + xor a + ld [TempWildMonSpecies], a + ld [CurPartyLevel], a + + ld hl, TreeMonMaps + call GetTreeMonSet + jr nc, .no_battle + + call GetTreeMons + jr nc, .no_battle + + call GetTreeMon + jr nc, .no_battle + + ld a, BATTLETYPE_TREE + ld [BattleType], a + ld a, 1 + ld [ScriptVar], a + ret + +.no_battle + xor a + ld [ScriptVar], a + ret +; b8219 + +RockMonEncounter: ; b8219 + + xor a + ld [TempWildMonSpecies], a + ld [CurPartyLevel], a + + ld hl, RockMonMaps + call GetTreeMonSet + jr nc, .no_battle + + call GetTreeMons + jr nc, .no_battle + + ld a, 10 + call RandomRange + cp 4 + jr nc, .no_battle + + call SelectTreeMon + jr nc, .no_battle + + ret + +.no_battle + xor a + ret +; b823e + + db $05 ; ???? + +GetTreeMonSet: ; b823f +; Return carry and treemon set in a +; if the current map is in table hl. + ld a, [MapNumber] + ld e, a + ld a, [MapGroup] + ld d, a +.loop + ld a, [hli] + cp -1 + jr z, .not_in_table + + cp d + jr nz, .skip2 + + ld a, [hli] + cp e + jr nz, .skip1 + + jr .in_table + +.skip2 + inc hl +.skip1 + inc hl + jr .loop + +.not_in_table + xor a + ret + +.in_table + ld a, [hl] + scf + ret +; b825e + +TreeMonMaps: ; b825e +treemon_map: macro + map \1 + db \2 ; treemon set +endm + treemon_map ROUTE_26, 4 + treemon_map ROUTE_27, 4 + treemon_map ROUTE_28, 0 + treemon_map ROUTE_29, 3 + treemon_map ROUTE_30, 3 + treemon_map ROUTE_31, 3 + treemon_map ROUTE_32, 4 + treemon_map ROUTE_33, 2 + treemon_map ROUTE_34, 3 + treemon_map ROUTE_35, 3 + treemon_map ROUTE_36, 3 + treemon_map ROUTE_37, 3 + treemon_map ROUTE_38, 3 + treemon_map ROUTE_39, 3 + treemon_map ROUTE_40, 0 + treemon_map ROUTE_41, 0 + treemon_map ROUTE_42, 2 + treemon_map ROUTE_43, 5 + treemon_map ROUTE_44, 1 + treemon_map ROUTE_45, 1 + treemon_map ROUTE_46, 1 + treemon_map NEW_BARK_TOWN, 0 + treemon_map CHERRYGROVE_CITY, 0 + treemon_map VIOLET_CITY, 0 + treemon_map AZALEA_TOWN, 2 + treemon_map CIANWOOD_CITY, 0 + treemon_map GOLDENROD_CITY, 0 + treemon_map OLIVINE_CITY, 0 + treemon_map ECRUTEAK_CITY, 0 + treemon_map MAHOGANY_TOWN, 0 + treemon_map LAKE_OF_RAGE, 5 + treemon_map BLACKTHORN_CITY, 0 + treemon_map SILVER_CAVE_OUTSIDE, 0 + treemon_map ILEX_FOREST, 6 + db -1 +; b82c5 + +RockMonMaps: ; b82c5 + treemon_map CIANWOOD_CITY, 7 + treemon_map ROUTE_40, 7 + treemon_map DARK_CAVE_VIOLET_ENTRANCE, 7 + treemon_map SLOWPOKE_WELL_B1F, 7 + db -1 +; b82d2 + +GetTreeMons: ; b82d2 +; Return the address of TreeMon table a in hl. +; Return nc if table a doesn't exist. + + cp 8 + jr nc, .quit + + and a + jr z, .quit + + ld e, a + ld d, 0 + ld hl, TreeMons +rept 2 + add hl, de +endr + + ld a, [hli] + ld h, [hl] + ld l, a + + scf + ret + +.quit + xor a + ret +; b82e8 + +TreeMons: ; b82e8 + dw TreeMons1 + dw TreeMons1 + dw TreeMons2 + dw TreeMons3 + dw TreeMons4 + dw TreeMons5 + dw TreeMons6 + dw RockMons + dw TreeMons1 + +; Two tables each (normal, rare). +; Structure: +; db %, species, level + +TreeMons1: ; b82fa + db 50, SPEAROW, 10 + db 15, SPEAROW, 10 + db 15, SPEAROW, 10 + db 10, AIPOM, 10 + db 5, AIPOM, 10 + db 5, AIPOM, 10 + db -1 + + db 50, SPEAROW, 10 + db 15, HERACROSS, 10 + db 15, HERACROSS, 10 + db 10, AIPOM, 10 + db 5, AIPOM, 10 + db 5, AIPOM, 10 + db -1 + +TreeMons2: ; b8320 + db 50, SPEAROW, 10 + db 15, EKANS, 10 + db 15, SPEAROW, 10 + db 10, AIPOM, 10 + db 5, AIPOM, 10 + db 5, AIPOM, 10 + db -1 + + db 50, SPEAROW, 10 + db 15, HERACROSS, 10 + db 15, HERACROSS, 10 + db 10, AIPOM, 10 + db 5, AIPOM, 10 + db 5, AIPOM, 10 + db -1 + +TreeMons3: ; b8346 + db 50, HOOTHOOT, 10 + db 15, SPINARAK, 10 + db 15, LEDYBA, 10 + db 10, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db -1 + + db 50, HOOTHOOT, 10 + db 15, PINECO, 10 + db 15, PINECO, 10 + db 10, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db -1 + +TreeMons4: ; b836c + db 50, HOOTHOOT, 10 + db 15, EKANS, 10 + db 15, HOOTHOOT, 10 + db 10, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db -1 + + db 50, HOOTHOOT, 10 + db 15, PINECO, 10 + db 15, PINECO, 10 + db 10, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db -1 + +TreeMons5: ; b8392 + db 50, HOOTHOOT, 10 + db 15, VENONAT, 10 + db 15, HOOTHOOT, 10 + db 10, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db -1 + + db 50, HOOTHOOT, 10 + db 15, PINECO, 10 + db 15, PINECO, 10 + db 10, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db 5, EXEGGCUTE, 10 + db -1 + +TreeMons6: ; b83b8 + db 50, HOOTHOOT, 10 + db 15, PINECO, 10 + db 15, PINECO, 10 + db 10, NOCTOWL, 10 + db 5, BUTTERFREE, 10 + db 5, BEEDRILL, 10 + db -1 + + db 50, HOOTHOOT, 10 + db 15, CATERPIE, 10 + db 15, WEEDLE, 10 + db 10, HOOTHOOT, 10 + db 5, METAPOD, 10 + db 5, KAKUNA, 10 + db -1 + +RockMons: ; b83de + db 90, KRABBY, 15 + db 10, SHUCKLE, 15 + db -1 +; b83e5 + +GetTreeMon: ; b83e5 + push hl + call GetTreeScore + pop hl + and a + jr z, .bad + cp 1 + jr z, .good + cp 2 + jr z, .rare + ret + +.bad + ld a, 10 + call RandomRange + and a + jr nz, NoTreeMon + jr SelectTreeMon + +.good + ld a, 10 + call RandomRange + cp 5 + jr nc, NoTreeMon + jr SelectTreeMon + +.rare + ld a, 10 + call RandomRange + cp 8 + jr nc, NoTreeMon + jr .skip +.skip + ld a, [hli] + cp -1 + jr nz, .skip + call SelectTreeMon + ret +; b841f + +SelectTreeMon: ; b841f +; Read a TreeMons table and pick one monster at random. + + ld a, 100 + call RandomRange +.loop + sub [hl] + jr c, .ok +rept 3 + inc hl +endr + jr .loop + +.ok + ld a, [hli] + cp $ff + jr z, NoTreeMon + + ld a, [hli] + ld [TempWildMonSpecies], a + ld a, [hl] + ld [CurPartyLevel], a + scf + ret + +NoTreeMon: ; b843b + xor a + ld [TempWildMonSpecies], a + ld [CurPartyLevel], a + ret +; b8443 + +GetTreeScore: ; b8443 + call .CoordScore + ld [Buffer1], a + call .OTIDScore + ld [Buffer2], a + ld c, a + ld a, [Buffer1] + sub c + jr z, .rare + jr nc, .ok + add 10 +.ok + cp 5 + jr c, .good + +.bad + xor a + ret + +.good + ld a, 1 + ret + +.rare + ld a, 2 + ret +; b8466 + +.CoordScore: ; b8466 + call GetFacingTileCoord + ld hl, 0 + ld c, e + ld b, 0 + ld a, d + + and a + jr z, .next +.loop + add hl, bc + dec a + jr nz, .loop +.next + + add hl, bc + ld c, d + add hl, bc + + ld a, h + ld [hDividend], a + ld a, l + ld [hDividend + 1], a + ld a, 5 + ld [hDivisor], a + ld b, 2 + call Divide + + ld a, [hQuotient + 1] + ld [hDividend], a + ld a, [hQuotient + 2] + ld [hDividend + 1], a + ld a, 10 + ld [hDivisor], a + ld b, 2 + call Divide + + ld a, [hQuotient + 3] + ret +; b849d + +.OTIDScore: ; b849d + ld a, [PlayerID] + ld [hDividend], a + ld a, [PlayerID + 1] + ld [hDividend + 1], a + ld a, 10 + ld [hDivisor], a + ld b, 2 + call Divide + ld a, [hQuotient + 3] + ret +; b84b3 + +LoadFishingGFX: ; b84b3 + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + + ld de, FishingGFX + ld a, [PlayerGender] + bit 0, a + jr z, .got_gender + ld de, KrisFishingGFX +.got_gender + + ld hl, VTiles0 tile $02 + call .LoadGFX + ld hl, VTiles0 tile $06 + call .LoadGFX + ld hl, VTiles0 tile $0a + call .LoadGFX + ld hl, VTiles1 tile $7c + call .LoadGFX + + pop af + ld [rVBK], a + ret +; b84e3 + +.LoadGFX: ; b84e3 + lb bc, BANK(FishingGFX), 2 + push de + call Get2bpp + pop de + ld hl, 2 tiles + add hl, de + ld d, h + ld e, l + ret +; b84f2 + +FishingGFX: ; b84f2 +INCBIN "gfx/overworld/chris_fish.2bpp" +; b8582 + +KrisFishingGFX: ; b8582 +INCBIN "gfx/overworld/kris_fish.2bpp" +; b8612 diff --git a/engine/evolution_animation.asm b/engine/evolution_animation.asm new file mode 100755 index 000000000..69e7aec4c --- /dev/null +++ b/engine/evolution_animation.asm @@ -0,0 +1,457 @@ +EvolutionAnimation: ; 4e5e1 + push hl + push de + push bc + ld a, [CurSpecies] + push af + ld a, [rOBP0] + push af + ld a, [BaseDexNo] + push af + + call _EvolutionAnimation + + pop af + ld [BaseDexNo], a + pop af + ld [rOBP0], a + pop af + ld [CurSpecies], a + pop bc + pop de + pop hl + + ld a, [wd1ed] + and a + ret z + + scf + ret +; 4e607 + +_EvolutionAnimation: ; 4e607 + ld a, $e4 + ld [rOBP0], a + + ld de, MUSIC_NONE + call PlayMusic + + callba Function8cf53 + + ld de, EvolutionGFX + ld hl, VTiles0 + lb bc, BANK(EvolutionGFX), 8 + call Request2bpp + + xor a + ld [Danger], a + call WaitBGMap + xor a + ld [hBGMapMode], a + ld a, [Buffer1] + ld [PlayerHPPal], a + + ld c, $0 + call Function4e703 + ld a, [Buffer1] + ld [CurPartySpecies], a + ld [CurSpecies], a + call Function4e708 + + ld de, VTiles2 + ld hl, VTiles2 tile $31 + ld bc, $31 + call Request2bpp + + ld a, $31 + ld [wd1ec], a + call Evolution_FlashFrontpics + ld a, [Buffer2] + ld [CurPartySpecies], a + ld [CurSpecies], a + call Function4e711 + ld a, [Buffer1] + ld [CurPartySpecies], a + ld [CurSpecies], a + + ld a, $1 + ld [hBGMapMode], a + call Function4e794 + jr c, .skip_cry + + ld a, [Buffer1] + call PlayCry + +.skip_cry + ld de, MUSIC_EVOLUTION + call PlayMusic + + ld c, 80 + call DelayFrames + + ld c, $1 + call Function4e703 + call Function4e726 + jr c, .pressed_b + + ld a, $cf + ld [wd1ec], a + + call Evolution_FlashFrontpics + xor a + ld [wd1ed], a + + ld a, [Buffer2] + ld [PlayerHPPal], a + + ld c, $0 + call Function4e703 + call Function4e7a6 + callba Function8cf53 + call Function4e794 + jr c, .asm_4e6de + + ld a, [wc2c6] + push af + ld a, $1 + ld [wc2c6], a + ld a, [CurPartySpecies] + push af + + ld a, [PlayerHPPal] + ld [CurPartySpecies], a + hlcoord 7, 2 + ld d, $0 + ld e, ANIM_MON_EVOLVE + predef AnimateFrontpic + + pop af + ld [CurPartySpecies], a + pop af + ld [wc2c6], a + ret + +.asm_4e6de + ret + +.pressed_b + ld a, $1 + ld [wd1ed], a + + ld a, [Buffer1] + ld [PlayerHPPal], a + + ld c, $0 + call Function4e703 + call Function4e7a6 + callba Function8cf53 + call Function4e794 + ret c + + ld a, [PlayerHPPal] + call PlayCry + ret +; 4e703 + +Function4e703: ; 4e703 + ld b, $b + jp GetSGBLayout +; 4e708 + +Function4e708: ; 4e708 + call GetBaseData + hlcoord 7, 2 + jp PrepMonFrontpic +; 4e711 + +Function4e711: ; 4e711 + call GetBaseData + ld a, $1 + ld [wc2c6], a + ld de, VTiles2 + predef Function5108b + xor a + ld [wc2c6], a + ret +; 4e726 + +Function4e726: ; 4e726 + call ClearJoypad + lb bc, 1, 14 +.loop + push bc + call Evolution_CheckPressedB + pop bc + jr c, .pressed_b + push bc + call Evolution_NextFrame + pop bc + inc b +rept 2 + dec c +endr + jr nz, .loop + and a + ret + +.pressed_b + scf + ret +; 4e741 + +Evolution_NextFrame: ; 4e741 +.loop + ld a, -49 + ld [wd1ec], a + call Evolution_FlashFrontpics + ld a, 49 + ld [wd1ec], a + call Evolution_FlashFrontpics + dec b + jr nz, .loop + ret +; 4e755 + +Evolution_FlashFrontpics: ; 4e755 + push bc + xor a + ld [hBGMapMode], a + hlcoord 7, 2 + lb bc, 7, 7 + ld de, $d +.loop1 + push bc +.loop2 + ld a, [wd1ec] + add [hl] + ld [hli], a + dec c + jr nz, .loop2 + pop bc + add hl, de + dec b + jr nz, .loop1 + ld a, $1 + ld [hBGMapMode], a + call WaitBGMap + pop bc + ret +; 4e779 + +Evolution_CheckPressedB: ; 4e779 +.loop + call DelayFrame + push bc + call JoyTextDelay + ld a, [hJoyDown] + pop bc + and B_BUTTON + jr nz, .pressed_b +.loop2 + dec c + jr nz, .loop + and a + ret + +.pressed_b + ld a, [wd1e9] + and a + jr nz, .loop2 + scf + ret +; 4e794 + +Function4e794: ; 4e794 + ld a, [CurPartyMon] + ld hl, PartyMon1Species + call GetPartyLocation + ld b, h + ld c, l + callba CheckFaintedFrzSlp + ret +; 4e7a6 + +Function4e7a6: ; 4e7a6 + ld a, [wd1ed] + and a + ret nz + ld de, SFX_EVOLVED + call PlaySFX + ld hl, wJumptableIndex + ld a, [hl] + push af + ld [hl], $0 +.asm_4e7b8 + call Function4e7cf + jr nc, .asm_4e7c2 + call Function4e80c + jr .asm_4e7b8 + +.asm_4e7c2 + ld c, $20 +.asm_4e7c4 + call Function4e80c + dec c + jr nz, .asm_4e7c4 + pop af + ld [wJumptableIndex], a + ret +; 4e7cf + +Function4e7cf: ; 4e7cf + ld hl, wJumptableIndex + ld a, [hl] + cp $20 + ret nc + ld d, a + inc [hl] + and $1 + jr nz, .asm_4e7e6 + ld e, $0 + call Function4e7e8 + ld e, $10 + call Function4e7e8 + +.asm_4e7e6 + scf + ret +; 4e7e8 + +Function4e7e8: ; 4e7e8 + push de + ld de, $4858 + ld a, $13 + call Function3b2a + ld hl, $b + add hl, bc + ld a, [wJumptableIndex] + and $e + sla a + pop de + add e + ld [hl], a + ld hl, $3 + add hl, bc + ld [hl], $0 + ld hl, $c + add hl, bc + ld [hl], $10 + ret +; 4e80c + +Function4e80c: ; 4e80c + push bc + callab Function8cf69 + ld a, [hVBlankCounter] + and $e + srl a +rept 2 + inc a +endr + and $7 + ld b, a + ld hl, Sprites + 3 + ld c, $28 +.asm_4e823 + ld a, [hl] + or b + ld [hli], a +rept 3 + inc hl +endr + dec c + jr nz, .asm_4e823 + pop bc + call DelayFrame + ret +; 4e831 + + +EvolutionGFX: +INCBIN "gfx/evo/bubble_large.2bpp" +INCBIN "gfx/evo/bubble.2bpp" + +Function4e881: ; 4e881 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + ld hl, VBGMap0 + ld bc, VBGMap1 - VBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + xor a + ld [hSCY], a + ld [hSCX], a + call EnableLCD + ld hl, UnknownText_0x4e8bd + call PrintText + call Function3200 + call SetPalettes + ret +; 4e8bd + +UnknownText_0x4e8bd: ; 0x4e8bd + ; SAVING RECORD… DON'T TURN OFF! + text_jump UnknownText_0x1bd39e + db "@" +; 0x4e8c2 + + +Function4e8c2: ; 4e8c2 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + ld hl, VBGMap0 + ld bc, VBGMap1 - VBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + ld hl, wd000 + ld c, $40 +.asm_4e8ee + ld a, -1 + ld [hli], a + ld a, " " + ld [hli], a + dec c + jr nz, .asm_4e8ee + xor a + ld [hSCY], a + ld [hSCX], a + call EnableLCD + call Function3200 + call SetPalettes + ret +; 4e906 + +Function4e906: ; 4e906 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, w6_d000 + ld bc, w6_d400 - w6_d000 + ld a, " " + call ByteFill + ld hl, VBGMap0 + ld de, w6_d000 + ld b, $0 + ld c, $40 + call Request2bpp + pop af + ld [rSVBK], a + ret +; 4e929 diff --git a/engine/flypoints.asm b/engine/flypoints.asm new file mode 100755 index 000000000..7f6d384aa --- /dev/null +++ b/engine/flypoints.asm @@ -0,0 +1,916 @@ +_FlyMap: ; 91af3 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + ld hl, hInMenu + ld a, [hl] + push af + ld [hl], $1 + xor a + ld [hBGMapMode], a + callba Function8cf53 + call Function91ff2 + ld de, GFX_922e1 + ld hl, VTiles2 tile $30 + lb bc, BANK(GFX_922e1), 6 + call Request1bpp + call FlyMap + call Function91c8f + ld b, $2 + call GetSGBLayout + call SetPalettes +.loop + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .pressedB + ld a, [hl] + and A_BUTTON + jr nz, .pressedA + call FlyMapScroll + call GetMapCursorCoordinates + callba Function8cf69 + call DelayFrame + jr .loop + +.pressedB + ld a, -1 + jr .exit + +.pressedA + ld a, [wd002] + ld l, a + ld h, 0 + add hl, hl + ld de, Flypoints + 1 + add hl, de + ld a, [hl] + +.exit + ld [wd002], a + pop af + ld [hInMenu], a + call ClearBGPalettes + ld a, $90 + ld [hWY], a + xor a + ld [hBGMapAddress], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + ld a, [wd002] + ld e, a + ret +; 91b73 + +FlyMapScroll: ; 91b73 + ld a, [StartFlypoint] + ld e, a + ld a, [EndFlypoint] + ld d, a + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .ScrollNext + ld a, [hl] + and D_DOWN + jr nz, .ScrollPrev + ret + +.ScrollNext + ld hl, wd002 + ld a, [hl] + cp d + jr nz, .NotAtEndYet + ld a, e + dec a + ld [hl], a + +.NotAtEndYet + inc [hl] + call CheckIfVisitedFlypoint + jr z, .ScrollNext + jr .Finally + +.ScrollPrev + ld hl, wd002 + ld a, [hl] + cp e + jr nz, .NotAtStartYet + ld a, d + inc a + ld [hl], a + +.NotAtStartYet + dec [hl] + call CheckIfVisitedFlypoint + jr z, .ScrollPrev + +.Finally + call TownMapBubble + call WaitBGMap + xor a + ld [hBGMapMode], a + ret +; 91bb5 + +TownMapBubble: ; 91bb5 +; Draw the bubble containing the location text in the town map HUD + +; Top-left corner + hlcoord 1, 0 + ld a, $30 + ld [hli], a + +; Top row + ld bc, 16 + ld a, " " + call ByteFill + +; Top-right corner + ld a, $31 + ld [hl], a + hlcoord 1, 1 + + +; Middle row + ld bc, 18 + ld a, " " + call ByteFill + + +; Bottom-left corner + hlcoord 1, 2 + ld a, $32 + ld [hli], a + +; Bottom row + ld bc, 16 + ld a, " " + call ByteFill + +; Bottom-right corner + ld a, $33 + ld [hl], a + + +; Print "Where?" + hlcoord 2, 0 + ld de, .Where + call PlaceString + +; Print the name of the default flypoint + call .Name + +; Up/down arrows + hlcoord 18, 1 + ld [hl], $34 + ret + +.Where + db "Where?@" + +.Name +; We need the map location of the default flypoint + ld a, [wd002] + ld l, a + ld h, 0 + add hl, hl ; two bytes per flypoint + ld de, Flypoints + add hl, de + ld e, [hl] + + callba GetLandmarkName + + hlcoord 2, 1 + ld de, StringBuffer1 + call PlaceString + ret +; 91c17 + +GetMapCursorCoordinates: ; 91c17 + ld a, [wd002] + ld l, a + ld h, $0 + add hl, hl + ld de, Flypoints + add hl, de + ld e, [hl] + callba GetLandmarkCoords + ld a, [wd003] + ld c, a + ld a, [wd004] + ld b, a + ld hl, $4 + add hl, bc + ld [hl], e + ld hl, $5 + add hl, bc + ld [hl], d + ret +; 91c3c + +CheckIfVisitedFlypoint: ; 91c3c +; Check if the flypoint loaded in [hl] has been visited yet. + push bc + push de + push hl + ld l, [hl] + ld h, 0 + add hl, hl + ld de, Flypoints + 1 + add hl, de + ld c, [hl] + call HasVisitedSpawn + pop hl + pop de + pop bc + and a + ret +; 91c50 + +HasVisitedSpawn: ; 91c50 +; Check if spawn point c has been visited. + ld hl, VisitedSpawns + ld b, CHECK_FLAG + ld d, 0 + predef FlagPredef + ld a, c + ret +; 91c5e + +Flypoints: ; 91c5e +; landmark, spawn point + + const_def + +flypoint: MACRO +; \1\@FLY EQUS "FLY_\1" +; \1\@SPAWN EQUS "SPAWN_\1" + ; const \1\@FLY + ; db \2, \1\@SPAWN + const FLY_\1 + db \2, SPAWN_\1 +ENDM + +; Johto + flypoint NEW_BARK, NEW_BARK_TOWN + flypoint CHERRYGROVE, CHERRYGROVE_CITY + flypoint VIOLET, VIOLET_CITY + flypoint AZALEA, AZALEA_TOWN + flypoint GOLDENROD, GOLDENROD_CITY + flypoint ECRUTEAK, ECRUTEAK_CITY + flypoint OLIVINE, OLIVINE_CITY + flypoint CIANWOOD, CIANWOOD_CITY + flypoint MAHOGANY, MAHOGANY_TOWN + flypoint LAKE, LAKE_OF_RAGE + flypoint BLACKTHORN, BLACKTHORN_CITY + flypoint MT_SILVER, SILVER_CAVE + +; Kanto +KANTO_FLYPOINT EQU const_value + + flypoint PALLET, PALLET_TOWN + flypoint VIRIDIAN, VIRIDIAN_CITY + flypoint PEWTER, PEWTER_CITY + flypoint CERULEAN, CERULEAN_CITY + flypoint VERMILION, VERMILION_CITY + flypoint ROCK_TUNNEL, ROCK_TUNNEL + flypoint LAVENDER, LAVENDER_TOWN + flypoint CELADON, CELADON_CITY + flypoint SAFFRON, SAFFRON_CITY + flypoint FUCHSIA, FUCHSIA_CITY + flypoint CINNABAR, CINNABAR_ISLAND + flypoint INDIGO, INDIGO_PLATEAU + + db -1 +; 91c8f + +Function91c8f: ; 91c8f + ret +; 91c90 + +FlyMap: ; 91c90 + + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + +; If we're not in a valid location, i.e. Pokecenter floor 2F, +; the backup map information is used + + cp SPECIAL_MAP + jr nz, .CheckRegion + + ld a, [BackupMapGroup] + ld b, a + ld a, [BackupMapNumber] + ld c, a + call GetWorldMapLocation + +.CheckRegion +; The first 46 locations are part of Johto. The rest are in Kanto + cp KANTO_LANDMARK + jr nc, .KantoFlyMap + +.JohtoFlyMap +; Note that .NoKanto should be modified in tandem with this branch + + push af + +; Start from New Bark Town + ld a, FLY_NEW_BARK + ld [wd002], a + +; Flypoints begin at New Bark Town... + ld [StartFlypoint], a +; ..and end at Silver Cave + ld a, FLY_MT_SILVER + ld [EndFlypoint], a + +; Fill out the map + call FillJohtoMap + call .MapHud + pop af + call TownMapPlayerIcon + ret + +.KantoFlyMap + +; The event that there are no flypoints enabled in a map is not +; accounted for. As a result, if you attempt to select a flypoint +; when there are none enabled, the game will crash. Additionally, +; the flypoint selection has a default starting point that +; can be flown to even if none are enabled + +; To prevent both of these things from happening when the player +; enters Kanto, fly access is restricted until Indigo Plateau is +; visited and its flypoint enabled + + push af + ld c, SPAWN_INDIGO + call HasVisitedSpawn + and a + jr z, .NoKanto + +; Kanto's map is only loaded if we've visited Indigo Plateau + +; Flypoints begin at Pallet Town... + ld a, FLY_PALLET + ld [StartFlypoint], a +; ...and end at Indigo Plateau + ld a, FLY_INDIGO + ld [EndFlypoint], a + +; Because Indigo Plateau is the first flypoint the player +; visits, it's made the default flypoint + ld [wd002], a + +; Fill out the map + call FillKantoMap + call .MapHud + pop af + call TownMapPlayerIcon + ret + +.NoKanto +; If Indigo Plateau hasn't been visited, we use Johto's map instead + +; Start from New Bark Town + ld a, FLY_NEW_BARK + ld [wd002], a + +; Flypoints begin at New Bark Town... + ld [StartFlypoint], a +; ..and end at Silver Cave + ld a, FLY_MT_SILVER + ld [EndFlypoint], a + + call FillJohtoMap + + pop af + +.MapHud + call TownMapBubble + call TownMapPals + + ld hl, VBGMap0 ; BG Map 0 + call TownMapBGUpdate + + call TownMapMon + ld a, c + ld [wd003], a + ld a, b + ld [wd004], a + ret +; 91d11 + +Function91d11: ; 91d11 + ld a, [wd002] + push af + ld a, [wd003] + push af + ld a, e + ld [wd002], a + call ClearSprites + xor a + ld [hBGMapMode], a + ld a, $1 + ld [hInMenu], a + ld de, GFX_922d1 + ld hl, VTiles0 tile $7f + lb bc, BANK(GFX_922d1), 1 + call Request2bpp ; actually 1bpp + call Function91ed0 + ld hl, VTiles0 tile $78 + ld c, $4 + call Request2bpp + call Function91ff2 + call FillKantoMap + call Function91de9 + call TownMapPals + ld hl, VBGMap1 + call TownMapBGUpdate + call FillJohtoMap + call Function91de9 + call TownMapPals + ld hl, VBGMap0 + call TownMapBGUpdate + ld b, $2 + call GetSGBLayout + call SetPalettes + xor a + ld [hBGMapMode], a + xor a + call Function91e1e +.asm_91d6e + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and A_BUTTON | B_BUTTON + jr nz, .asm_91d8f + ld a, [hJoypadDown] + and SELECT + jr nz, .asm_91d87 + call Function91d9b + call Function91dcd + jr .asm_91d8a + +.asm_91d87 + call Function91e5a + +.asm_91d8a + call DelayFrame + jr .asm_91d6e + +.asm_91d8f + call ClearSprites + pop af + ld [wd003], a + pop af + ld [wd002], a + ret +; 91d9b + +Function91d9b: ; 91d9b + ld a, [hl] + and $20 + jr nz, .asm_91da6 + ld a, [hl] + and $10 + jr nz, .asm_91db7 + ret + +.asm_91da6 + ld a, [hWY] + cp $90 + ret z + call ClearSprites + ld a, $90 + ld [hWY], a + xor a + call Function91e1e + ret + +.asm_91db7 + ld a, [StatusFlags] + bit 6, a + ret z + ld a, [hWY] + and a + ret z + call ClearSprites + xor a + ld [hWY], a + ld a, $1 + call Function91e1e + ret +; 91dcd + +Function91dcd: ; 91dcd + ld a, [hVBlankCounter] + ld e, a + and $f + ret nz + ld a, e + and $10 + jr nz, .asm_91ddc + call ClearSprites + ret + +.asm_91ddc + hlcoord 0, 0 + ld de, Sprites + ld bc, $a0 + call CopyBytes + ret +; 91de9 + +Function91de9: ; 91de9 + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + ld a, $7f + call ByteFill + hlcoord 0, 1 + ld a, $6 + ld [hli], a + ld bc, SCREEN_HEIGHT + ld a, $7 + call ByteFill + ld [hl], $17 + call GetPokemonName + hlcoord 2, 0 + call PlaceString + ld h, b + ld l, c + ld de, String_91e16 + call PlaceString + ret +; 91e16 + +String_91e16: + db "'S NEST@" +; 91e1e + +Function91e1e: ; 91e1e + ld [wd003], a + ld e, a + callba Function2a01f + decoord 0, 0 + ld hl, Sprites +.asm_91e2e + ld a, [de] + and a + jr z, .asm_91e4d + push de + ld e, a + push hl + callba GetLandmarkCoords + pop hl + ld a, d + sub $4 + ld [hli], a + ld a, e + sub $4 + ld [hli], a + ld a, $7f + ld [hli], a + xor a + ld [hli], a + pop de + inc de + jr .asm_91e2e + +.asm_91e4d + ld hl, Sprites + decoord 0, 0 + ld bc, $a0 + call CopyBytes + ret +; 91e5a + +Function91e5a: ; 91e5a + call Function91ea9 + ret c + + ld a, [wd002] + ld e, a + callba GetLandmarkCoords + ld c, e + ld b, d + ld de, Unknown_91e9c + ld hl, Sprites +.asm_91e70 + ld a, [de] + cp $80 + jr z, .asm_91e91 + + add b + ld [hli], a + inc de + + ld a, [de] + add c + ld [hli], a + inc de + + ld a, [de] + add $78 + ld [hli], a + inc de + + push bc + ld c, 0 + ld a, [PlayerGender] + bit 0, a + jr z, .asm_91e8c + inc c +.asm_91e8c + ld a, c + ld [hli], a + pop bc + + jr .asm_91e70 + +.asm_91e91 + ld hl, Sprites + $10 + ld bc, SpritesEnd - (Sprites + $10) + xor a + call ByteFill + ret +; 91e9c + +Unknown_91e9c: ; 91e9c + db -8, -8, 0 + db -8, 0, 1 + db 0, -8, 2 + db 0, 0, 3 + db $80 ; terminator +; 91ea9 + +Function91ea9: ; 91ea9 + ld a, [wd002] + cp FAST_SHIP + jr z, .johto + cp KANTO_LANDMARK + jr c, .johto + +.kanto + ld a, [wd003] + and a + jr z, .clear + jr .ok + +.johto + ld a, [wd003] + and a + jr nz, .clear + +.ok + and a + ret + +.clear + ld hl, Sprites + ld bc, SpritesEnd - Sprites + xor a + call ByteFill + scf + ret +; 91ed0 + +Function91ed0: ; 91ed0 + ld a, [wd002] + cp FAST_SHIP + jr z, .asm_91ede + callba GetPlayerIcon + ret + +.asm_91ede + ld de, FastShipGFX + ld b, BANK(FastShipGFX) + ret +; 91ee4 + +TownMapBGUpdate: ; 91ee4 +; Update BG Map tiles and attributes + +; BG Map address + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + +; Only update palettes on CGB + ld a, [hCGB] + and a + jr z, .tiles + +; BG Map mode 2 (palettes) + ld a, 2 + ld [hBGMapMode], a + +; The BG Map is updated in thirds, so we wait +; 3 frames to update the whole screen's palettes. + ld c, 3 + call DelayFrames + +.tiles +; Update BG Map tiles + call WaitBGMap + +; Turn off BG Map update + xor a + ld [hBGMapMode], a + ret +; 91eff + +FillJohtoMap: ; 91eff + ld de, JohtoMap + jr FillTownMap + +FillKantoMap: ; 91f04 + ld de, KantoMap + +FillTownMap: ; 91f07 + hlcoord 0, 0 +.loop + ld a, [de] + cp $ff + ret z + ld a, [de] + ld [hli], a + inc de + jr .loop +; 91f13 + +TownMapPals: ; 91f13 +; Assign palettes based on tile ids + + hlcoord 0, 0 + decoord 0, 0, AttrMap + ld bc, 360 +.loop +; Current tile + ld a, [hli] + push hl + +; HP/borders use palette 0 + cp $60 + jr nc, .pal0 + +; The palette data is condensed to nybbles, +; least-significant first. + ld hl, TownMapPalMap + srl a + jr c, .odd + +; Even-numbered tile ids take the bottom nybble... + add l + ld l, a + ld a, h + adc 0 + ld h, a + ld a, [hl] + and %111 + jr .update + +.odd +; ...and odd ids take the top. + add l + ld l, a + ld a, h + adc 0 + ld h, a + ld a, [hl] + swap a + and %111 + jr .update + +.pal0 + xor a + +.update + pop hl + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .loop + ret + +TownMapPalMap: + db $11, $21, $22, $00, $11, $13, $54, $54, $11, $21, $22, $00 + db $11, $10, $01, $00, $11, $21, $22, $00, $00, $00, $00, $00 + db $00, $00, $44, $04, $00, $00, $00, $00, $33, $33, $33, $33 + db $33, $33, $33, $03, $33, $33, $33, $33, $00, $00, $00, $00 +; 91f7b + +TownMapMon: ; 91f7b +; Draw the FlyMon icon at town map location in + +; Get FlyMon species + ld a, [CurPartyMon] + ld hl, PartySpecies + ld e, a + ld d, $0 + add hl, de + ld a, [hl] + ld [wd265], a + +; Get FlyMon icon + ld e, 8 ; starting tile in VRAM + callba GetSpeciesIcon + +; Animation/palette + ld de, 0 + ld a, $0 + call Function3b2a + + ld hl, 3 + add hl, bc + ld [hl], 8 + ld hl, 2 + add hl, bc + ld [hl], 0 + ret +; 91fa6 + +TownMapPlayerIcon: ; 91fa6 +; Draw the player icon at town map location in a + push af + + callba GetPlayerIcon + +; Standing icon + ld hl, VTiles0 tile $10 + ld c, 4 ; # tiles + call Request2bpp + +; Walking icon + ld hl, $c0 + add hl, de + ld d, h + ld e, l + ld hl, VTiles0 tile $14 + ld c, 4 ; # tiles + ld a, BANK(ChrisSpriteGFX) ; does nothing + call Request2bpp + +; Animation/palette + ld de, 0 + ld b, $0a ; Male + ld a, [PlayerGender] + bit 0, a + jr z, .asm_91fd3 + ld b, $1e ; Female +.asm_91fd3 + ld a, b + call Function3b2a + + ld hl, $3 + add hl, bc + ld [hl], $10 + + pop af + ld e, a + push bc + callba GetLandmarkCoords + pop bc + + ld hl, 4 + add hl, bc + ld [hl], e + ld hl, 5 + add hl, bc + ld [hl], d + ret +; 0x91ff2 + +Function91ff2: ; 91ff2 + ld hl, TownMapGFX + ld de, VTiles2 + lb bc, BANK(TownMapGFX), $30 + call DecompressRequest2bpp + ret +; 91fff + + +JohtoMap: ; 91fff +INCBIN "gfx/misc/johto.bin" +; 92168 + +KantoMap: ; 92168 +INCBIN "gfx/misc/kanto.bin" +; 922d1 + + +GFX_922d1: ; 922d1 +INCBIN "gfx/unknown/0922d1.2bpp" +GFX_922e1: ; 922e1 +INCBIN "gfx/unknown/0922e1.2bpp" +GFX_92301: ; 92301 +INCBIN "gfx/unknown/092301.2bpp" diff --git a/engine/fruit_trees.asm b/engine/fruit_trees.asm index 9002404fd..28e6e8cec 100644 --- a/engine/fruit_trees.asm +++ b/engine/fruit_trees.asm @@ -15,7 +15,7 @@ FruitTreeScript:: ; 44000 .fruit writetext HeyItsFruitText copybytetovar CurFruit - giveitem $ff, 1 + giveitem ITEM_FROM_MEM iffalse .packisfull keeptextopen writetext ObtainedFruitText diff --git a/engine/healmachineanim.asm b/engine/healmachineanim.asm new file mode 100755 index 000000000..174d1ae5a --- /dev/null +++ b/engine/healmachineanim.asm @@ -0,0 +1,266 @@ +HealMachineAnim: ; 12324 + ; If you have no Pokemon, don't change the buffer. This can lead to some glitchy effects if you have no Pokemon. + ld a, [PartyCount] + and a + ret z + ; The location of the healing machine relative to the player is stored in ScriptVar. + ; 0: Up and left (Pokemon Center) + ; 1: Left (Elm's Lab) + ; 2: Up (Hall of Fame) + ld a, [ScriptVar] + ld [Buffer1], a + ld a, [rOBP1] + ld [Buffer2], a + call .DoJumptableFunctions + ld a, [Buffer2] + call Functiond24 + ret +; 1233e + +.DoJumptableFunctions: ; 1233e + xor a + ld [wd1ec], a +.jumpable_loop + ld a, [Buffer1] + ld e, a + ld d, 0 + ld hl, .Pointers +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wd1ec] + ld e, a + inc a + ld [wd1ec], a + add hl, de + ld a, [hl] + cp 5 + jr z, .finish + ld hl, .Jumptable + rst JumpTable + jr .jumpable_loop + +.finish + ret +; 12365 + +.Pointers: ; 12365 + dw .Pokecenter + dw .ElmLab + dw .HallOfFame +; 1236b + +.Pokecenter: ; 1236b + db 0, 1, 3, 5 +.ElmLab: ; 1236f + db 0, 1, 3, 5 +.HallOfFame: ; 12373 + db 0, 2, 4, 5 +; 12377 + +.Jumptable: ; 12377 + dw .LoadGFX + dw .PC_LoadBallsOntoMachine + dw .HOF_LoadBallsOntoMachine + dw .PlayHealMusic + dw .HOF_PlaySFX + dw .dummy_5 ; never encountered +; 12383 + +.LoadGFX: ; 12383 + call .LoadPalettes + ld de, .HealMachineGFX + ld hl, VTiles0 tile $7c + lb bc, BANK(.HealMachineGFX), $2 + call Request2bpp + ret +; 12393 + +.PC_LoadBallsOntoMachine: ; 12393 + ld hl, Sprites + $80 + ld de, .PC_ElmsLab_TileMap + call .PlaceHealingMachineTile + call .PlaceHealingMachineTile + jr .LoadBallsOntoMachine + +.HOF_LoadBallsOntoMachine: ; 123a1 + ld hl, Sprites + $80 + ld de, .HOF_TileMap + +.LoadBallsOntoMachine: ; 123a7 + ld a, [PartyCount] + ld b, a +.party_loop + call .PlaceHealingMachineTile + push de + ld de, SFX_SECOND_PART_OF_ITEMFINDER + call PlaySFX + pop de + ld c, 30 + call DelayFrames + dec b + jr nz, .party_loop + ret +; 123bf + +.PlayHealMusic: ; 123bf + ld de, MUSIC_HEAL + call PlayMusic + jp .FlashPalettes8Times +; 123c8 + +.HOF_PlaySFX: ; 123c8 + ld de, SFX_GAME_FREAK_LOGO_GS + call PlaySFX + call .FlashPalettes8Times + call WaitSFX + ld de, SFX_BOOT_PC + call PlaySFX + ret +; 123db + +.dummy_5: ; 123db + ret +; 123dc + +.PC_ElmsLab_TileMap: ; 123dc + db $20, $22, $7c, $16 + db $20, $26, $7c, $16 + db $26, $20, $7d, $16 + db $26, $28, $7d, $36 + db $2b, $20, $7d, $16 + db $2b, $28, $7d, $36 + db $30, $20, $7d, $16 + db $30, $28, $7d, $36 +; 123fc + +.HealMachineGFX: ; 123fc +INCBIN "gfx/unknown/0123fc.2bpp" +; 1241c + +.HOF_TileMap: ; 1241c + db $3c, $51, $7d, $16 + db $3c, $56, $7d, $16 + db $3b, $4d, $7d, $16 + db $3b, $5a, $7d, $16 + db $39, $49, $7d, $16 + db $39, $5d, $7d, $16 +; 12434 + +.LoadPalettes: ; 12434 + call IsCGB + jr nz, .cgb + ld a, %11100000 + ld [rOBP1], a + ret + +.cgb + ld hl, .palettes + ld de, OBPals + 8 * 6 + ld bc, 8 + ld a, $5 + call FarCopyWRAM + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 12451 + +.palettes: ; 12451 + RGB 31, 31, 31 + RGB 31, 19, 10 + RGB 31, 07, 01 + RGB 00, 00, 00 +; 12459 + +.FlashPalettes8Times: ; 12459 + ld c, $8 +.palette_loop + push bc + call .FlashPalettes + ld c, 10 + call DelayFrames + pop bc + dec c + jr nz, .palette_loop + ret +; 12469 + +.FlashPalettes: ; 12469 + call IsCGB + jr nz, .go + ld a, [rOBP1] + xor %00101000 + ld [rOBP1], a + ret + +.go + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + + ld hl, OBPals + 8 * 6 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push de + ld c, $3 +.palette_loop_2 + ld a, [hli] + ld e, a + ld a, [hld] + ld d, a + dec hl + ld a, d + ld [hld], a + ld a, e + ld [hli], a +rept 3 + inc hl +endr + dec c + jr nz, .palette_loop_2 + pop de + dec hl + ld a, d + ld [hld], a + ld a, e + ld [hl], a + + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 124a3 + +.PlaceHealingMachineTile: ; 124a3 + push bc + ld a, [Buffer1] + lb bc, $10, $20 + cp $1 ; ElmsLab + jr z, .okay + lb bc, $00, $00 + +.okay + ld a, [de] + add c + inc de + ld [hli], a + ld a, [de] + add b + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + pop bc + ret +; 124c1 diff --git a/engine/landmarks.asm b/engine/landmarks.asm index e9b1c3668..8fb7035f2 100644 --- a/engine/landmarks.asm +++ b/engine/landmarks.asm @@ -154,52 +154,52 @@ ENDM landmark 148, 132, FastShipName -NewBarkTownName: db "NEW BARK", $1f, "TOWN@" -CherrygroveCityName: db "CHERRYGROVE", $1f, "CITY@" +NewBarkTownName: db "NEW BARK¯TOWN@" +CherrygroveCityName: db "CHERRYGROVE¯CITY@" VioletCityName: db "VIOLET CITY@" AzaleaTownName: db "AZALEA TOWN@" -GoldenrodCityName: db "GOLDENROD", $1f, "CITY@" -EcruteakCityName: db "ECRUTEAK", $1f, "CITY@" -OlivineCityName: db "OLIVINE", $1f, "CITY@" -CianwoodCityName: db "CIANWOOD", $1f, "CITY@" -MahoganyTownName: db "MAHOGANY", $1f, "TOWN@" -BlackthornCityName: db "BLACKTHORN", $1f, "CITY@" -LakeOfRageName: db "LAKE OF", $1f, "RAGE@" +GoldenrodCityName: db "GOLDENROD¯CITY@" +EcruteakCityName: db "ECRUTEAK¯CITY@" +OlivineCityName: db "OLIVINE¯CITY@" +CianwoodCityName: db "CIANWOOD¯CITY@" +MahoganyTownName: db "MAHOGANY¯TOWN@" +BlackthornCityName: db "BLACKTHORN¯CITY@" +LakeOfRageName: db "LAKE OF¯RAGE@" SilverCaveName: db "SILVER CAVE@" -SproutTowerName: db "SPROUT", $1f, "TOWER@" -RuinsOfAlphName: db "RUINS", $1f, "OF ALPH@" +SproutTowerName: db "SPROUT¯TOWER@" +RuinsOfAlphName: db "RUINS¯OF ALPH@" UnionCaveName: db "UNION CAVE@" -SlowpokeWellName: db "SLOWPOKE", $1f, "WELL@" +SlowpokeWellName: db "SLOWPOKE¯WELL@" RadioTowerName: db "RADIO TOWER@" PowerPlantName: db "POWER PLANT@" -NationalParkName: db "NATIONAL", $1f, "PARK@" +NationalParkName: db "NATIONAL¯PARK@" TinTowerName: db "TIN TOWER@" LighthouseName: db "LIGHTHOUSE@" -WhirlIslandsName: db "WHIRL", $1f, "ISLANDS@" +WhirlIslandsName: db "WHIRL¯ISLANDS@" MtMortarName: db "MT.MORTAR@" -DragonsDenName: db "DRAGON'S", $1f, "DEN@" +DragonsDenName: db "DRAGON'S¯DEN@" IcePathName: db "ICE PATH@" NotApplicableName: db "N/A@" PalletTownName: db "PALLET TOWN@" -ViridianCityName: db "VIRIDIAN", $1f, "CITY@" +ViridianCityName: db "VIRIDIAN¯CITY@" PewterCityName: db "PEWTER CITY@" -CeruleanCityName: db "CERULEAN", $1f, "CITY@" -LavenderTownName: db "LAVENDER", $1f, "TOWN@" -VermilionCityName: db "VERMILION", $1f, "CITY@" -CeladonCityName: db "CELADON", $1f, "CITY@" -SaffronCityName: db "SAFFRON", $1f, "CITY@" -FuchsiaCityName: db "FUCHSIA", $1f, "CITY@" -CinnabarIslandName: db "CINNABAR", $1f, "ISLAND@" -IndigoPlateauName: db "INDIGO", $1f, "PLATEAU@" -VictoryRoadName: db "VICTORY", $1f, "ROAD@" +CeruleanCityName: db "CERULEAN¯CITY@" +LavenderTownName: db "LAVENDER¯TOWN@" +VermilionCityName: db "VERMILION¯CITY@" +CeladonCityName: db "CELADON¯CITY@" +SaffronCityName: db "SAFFRON¯CITY@" +FuchsiaCityName: db "FUCHSIA¯CITY@" +CinnabarIslandName: db "CINNABAR¯ISLAND@" +IndigoPlateauName: db "INDIGO¯PLATEAU@" +VictoryRoadName: db "VICTORY¯ROAD@" MtMoonName: db "MT.MOON@" RockTunnelName: db "ROCK TUNNEL@" -LavRadioTowerName: db "LAV", $1f, "RADIO TOWER@" +LavRadioTowerName: db "LAV¯RADIO TOWER@" SilphCoName: db "SILPH CO.@" SafariZoneName: db "SAFARI ZONE@" -SeafoamIslandsName: db "SEAFOAM", $1f, "ISLANDS@" -PokemonMansionName: db "#MON", $1f, "MANSION@" -CeruleanCaveNane: db "CERULEAN", $1f, "CAVE@" +SeafoamIslandsName: db "SEAFOAM¯ISLANDS@" +PokemonMansionName: db "#MON¯MANSION@" +CeruleanCaveNane: db "CERULEAN¯CAVE@" Route1Name: db "ROUTE 1@" Route2Name: db "ROUTE 2@" Route3Name: db "ROUTE 3@" @@ -247,14 +247,14 @@ Route44Name: db "ROUTE 44@" Route45Name: db "ROUTE 45@" Route46Name: db "ROUTE 46@" DarkCaveName: db "DARK CAVE@" -IlexForestName: db "ILEX", $1f, "FOREST@" -BurnedTowerName: db "BURNED", $1f, "TOWER@" +IlexForestName: db "ILEX¯FOREST@" +BurnedTowerName: db "BURNED¯TOWER@" FastShipName: db "FAST SHIP@" -ViridianForestName: db "VIRIDIAN", $1f, "FOREST@" -DiglettsCaveName: db "DIGLETT'S", $1f, "CAVE@" +ViridianForestName: db "VIRIDIAN¯FOREST@" +DiglettsCaveName: db "DIGLETT'S¯CAVE@" TohjoFallsName: db "TOHJO FALLS@" UndergroundName: db "UNDERGROUND@" -BattleTowerName: db "BATTLE", $1f, "TOWER@" +BattleTowerName: db "BATTLE¯TOWER@" SpecialMapName: db "SPECIAL@" diff --git a/engine/link.asm b/engine/link.asm new file mode 100755 index 000000000..a1fa0661b --- /dev/null +++ b/engine/link.asm @@ -0,0 +1,4117 @@ +LinkCommunications: ; 28000 + call ClearBGPalettes + ld c, 80 + call DelayFrames + call ClearScreen + call ClearSprites + call UpdateSprites + xor a + ld [hSCX], a + ld [hSCY], a + ld c, 80 + call DelayFrames + call ClearScreen + call UpdateSprites + call LoadStandardFont + call LoadFontsBattleExtra + callba Function16d69a + call Function3200 + hlcoord 3, 8 + ld b, $2 + ld c, $c + ld d, h + ld e, l + callba Function4d35b + hlcoord 4, 10 + ld de, String28419 + call PlaceString + call Function28eff + call Function3200 + ld hl, wcf5d + xor a + ld [hli], a + ld [hl], $50 + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jp nz, Function28177 + +Function2805d: ; 2805d + call Function28426 + call Function28499 + call Function28434 + xor a + ld [wcf56], a + call Function87d + ld a, [hLinkPlayerNumber] + cp $2 + jr nz, .asm_28091 + ld c, $3 + call DelayFrames + xor a + ld [hSerialSend], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + call DelayFrame + xor a + ld [hSerialSend], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_28091 + ld de, MUSIC_NONE + call PlayMusic + ld c, $3 + call DelayFrames + xor a + ld [rIF], a + ld a, $8 + ld [rIE], a + ld hl, wd1f3 + ld de, EnemyMonSpecies + ld bc, $11 + call Function75f + ld a, $fe + ld [de], a + ld hl, OverworldMap + ld de, wd26b + ld bc, $1a8 + call Function75f + ld a, $fe + ld [de], a + ld hl, wc608 + ld de, wc6d0 + ld bc, $c8 + call Function75f + xor a + ld [rIF], a + ld a, $1d + ld [rIE], a + call Function287ab + ld hl, wd26b + call Function287ca + push hl + ld bc, NAME_LENGTH + add hl, bc + ld a, [hl] + pop hl + and a + jp z, Function28b22 + cp $7 + jp nc, Function28b22 + ld de, OverworldMap + ld bc, $1a2 + call Function2879e + ld de, wc6d0 + ld hl, wc813 + ld c, $2 +.asm_280fe + ld a, [de] + inc de + and a + jr z, .asm_280fe + cp $fd + jr z, .asm_280fe + cp $fe + jr z, .asm_280fe + cp $ff + jr z, .asm_2811d + push hl + push bc + ld b, $0 + dec a + ld c, a + add hl, bc + ld a, $fe + ld [hl], a + pop bc + pop hl + jr .asm_280fe + +.asm_2811d + ld hl, wc90f + dec c + jr nz, .asm_280fe + ld hl, OverworldMap + ld de, wd26b + ld bc, NAME_LENGTH + call CopyBytes + ld de, OTPartyCount + ld a, [hli] + ld [de], a + inc de +.asm_28135 + ld a, [hli] + cp $ff + jr z, .asm_2814e + ld [wd265], a + push hl + push de + callab ConvertMon_1to2 + pop de + pop hl + ld a, [wd265] + ld [de], a + inc de + jr .asm_28135 + +.asm_2814e + ld [de], a + ld hl, wc813 + call Function2868a + ld a, OTPartyMonOT % $100 + ld [wd102], a + ld a, OTPartyMonOT / $100 + ld [wd103], a + ld de, MUSIC_NONE + call PlayMusic + ld a, [hLinkPlayerNumber] + cp $2 + ld c, 66 + call z, DelayFrames + ld de, MUSIC_ROUTE_30 + call PlayMusic + jp Function287e3 +; 28177 + +Function28177: ; 28177 + call Function28426 + call Function28595 + call Function28434 + call Function29dba + ld a, [ScriptVar] + and a + jp z, Function283b2 + ld a, [hLinkPlayerNumber] + cp $2 + jr nz, .asm_281ae + ld c, $3 + call DelayFrames + xor a + ld [hSerialSend], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + call DelayFrame + xor a + ld [hSerialSend], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_281ae + ld de, MUSIC_NONE + call PlayMusic + ld c, $3 + call DelayFrames + xor a + ld [rIF], a + ld a, $8 + ld [rIE], a + ld hl, wd1f3 + ld de, EnemyMonSpecies + ld bc, $11 + call Function75f + ld a, $fe + ld [de], a + ld hl, OverworldMap + ld de, wd26b + ld bc, $1c2 + call Function75f + ld a, $fe + ld [de], a + ld hl, wc608 + ld de, wc6d0 + ld bc, $c8 + call Function75f + ld a, [wLinkMode] + cp LINK_TRADECENTER + jr nz, .asm_281fd + ld hl, wc9f4 + ld de, wcb84 + ld bc, $186 + call Function283f2 + +.asm_281fd + xor a + ld [rIF], a + ld a, $1d + ld [rIE], a + ld de, MUSIC_NONE + call PlayMusic + call Function287ab + ld hl, wd26b + call Function287ca + ld de, OverworldMap + ld bc, $1b9 + call Function2879e + ld de, wc6d0 + ld hl, wc813 + ld c, $2 +.asm_28224 + ld a, [de] + inc de + and a + jr z, .asm_28224 + cp $fd + jr z, .asm_28224 + cp $fe + jr z, .asm_28224 + cp $ff + jr z, .asm_28243 + push hl + push bc + ld b, $0 + dec a + ld c, a + add hl, bc + ld a, $fe + ld [hl], a + pop bc + pop hl + jr .asm_28224 + +.asm_28243 + ld hl, wc90f + dec c + jr nz, .asm_28224 + ld a, [wLinkMode] + cp LINK_TRADECENTER + jp nz, .asm_282fe + ld hl, wcb84 +.asm_28254 + ld a, [hli] + cp $20 + jr nz, .asm_28254 +.asm_28259 + ld a, [hli] + cp $fe + jr z, .asm_28259 + cp $20 + jr z, .asm_28259 + dec hl + ld de, wcb84 + ld bc, $190 + call CopyBytes + ld hl, wcb84 + ld bc, $c6 +.asm_28272 + ld a, [hl] + cp $21 + jr nz, .asm_28279 + ld [hl], $fe + +.asm_28279 + inc hl + dec bc + ld a, b + or c + jr nz, .asm_28272 + ld de, wcc9e +.asm_28282 + ld a, [de] + inc de + cp $ff + jr z, .asm_28294 + ld hl, wcc4a + dec a + ld b, $0 + ld c, a + add hl, bc + ld [hl], $fe + jr .asm_28282 + +.asm_28294 + ld hl, wcb84 + ld de, wc9f4 + ld b, $6 +.asm_2829c + push bc + ld bc, $21 + call CopyBytes + ld a, $e + add e + ld e, a + ld a, $0 + adc d + ld d, a + pop bc + dec b + jr nz, .asm_2829c + ld de, wc9f4 + ld b, $6 +.asm_282b4 + push bc + ld a, $21 + add e + ld e, a + ld a, $0 + adc d + ld d, a + ld bc, $e + call CopyBytes + pop bc + dec b + jr nz, .asm_282b4 + ld b, $6 + ld de, wc9f4 +.asm_282cc + push bc + push de + callba Function1de5c8 + ld a, c + or a + jr z, .asm_282ee + sub $3 + jr nc, .asm_282e4 + callba Function1df203 + jr .asm_282ee + +.asm_282e4 + cp $2 + jr nc, .asm_282ee + callba Function1df220 + +.asm_282ee + pop de + ld hl, $2f + add hl, de + ld d, h + ld e, l + pop bc + dec b + jr nz, .asm_282cc + ld de, wcb0e + xor a + ld [de], a + +.asm_282fe + ld hl, OverworldMap + ld de, wd26b + ld bc, NAME_LENGTH + call CopyBytes + ld de, OTPartyCount + ld bc, 8 + call CopyBytes + ld de, wd276 + ld bc, 2 + call CopyBytes + ld de, OTPartyMon1Species + ld bc, $1a4 + call CopyBytes + ld a, OTPartyMonOT % $100 + ld [wd102], a + ld a, OTPartyMonOT / $100 + ld [wd103], a + ld de, MUSIC_NONE + call PlayMusic + ld a, [hLinkPlayerNumber] + cp $2 + ld c, 66 + call z, DelayFrames + ld a, [wLinkMode] + cp LINK_COLOSSEUM + jr nz, .asm_283a9 + ld a, CAL + ld [OtherTrainerClass], a + call ClearScreen + callba Function4d354 + ld hl, Options + ld a, [hl] + push af + and $20 + or $3 + ld [hl], a + ld hl, wd26b + ld de, OTName + ld bc, NAME_LENGTH + call CopyBytes + call ReturnToMapFromSubmenu + ld a, [wc2d7] + push af + ld a, $1 + ld [wc2d7], a + ld a, [rIE] + push af + ld a, [rIF] + push af + xor a + ld [rIF], a + ld a, [rIE] + set 1, a + ld [rIE], a + pop af + ld [rIF], a + predef StartBattle + ld a, [rIF] + ld h, a + xor a + ld [rIF], a + pop af + ld [rIE], a + ld a, h + ld [rIF], a + pop af + ld [wc2d7], a + pop af + ld [Options], a + callba LoadPokemonData + jp Function28b22 + +.asm_283a9 + ld de, MUSIC_ROUTE_30 + call PlayMusic + jp Function287e3 +; 283b2 + +Function283b2: ; 283b2 + ld de, UnknownText_0x283ed + ld b, $a +.asm_283b7 + call DelayFrame + call Function908 + dec b + jr nz, .asm_283b7 + xor a + ld [hld], a + ld [hl], a + ld [hVBlank], a + push de + hlcoord 0, 12 + ld b, $4 + ld c, $12 + push de + ld d, h + ld e, l + callba Function4d35b + pop de + pop hl + bccoord 1, 14 + call PlaceWholeStringInBoxAtOnce + call FadeToWhite + call ClearScreen + ld b, $8 + call GetSGBLayout + call Function3200 + ret +; 283ed + +UnknownText_0x283ed: ; 0x283ed + ; Too much time has elapsed. Please try again. + text_jump UnknownText_0x1c4183 + db "@" +; 0x283f2 + +Function283f2: ; 283f2 + ld a, $1 + ld [hFFCC], a +.asm_283f6 + ld a, [hl] + ld [hSerialSend], a + call Function78a + push bc + ld b, a + inc hl + ld a, $30 +.asm_28401 + dec a + jr nz, .asm_28401 + ld a, [hFFCC] + and a + ld a, b + pop bc + jr z, .asm_28411 + dec hl + xor a + ld [hFFCC], a + jr .asm_283f6 + +.asm_28411 + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .asm_283f6 + ret +; 28419 + +String28419: ; 28419 + db "PLEASE WAIT!@" +; 28426 + +Function28426: ; 28426 + ld hl, OverworldMap + lb bc, 5, SCREEN_WIDTH +.asm_2842c + xor a + ld [hli], a + dec bc + ld a, b + or c + jr nz, .asm_2842c + ret +; 28434 + +Function28434: ; 28434 + ld hl, wd1f3 + ld a, $fd + ld b, $7 +.asm_2843b + ld [hli], a + dec b + jr nz, .asm_2843b + ld b, $a +.asm_28441 + call Random + cp $fd + jr nc, .asm_28441 + ld [hli], a + dec b + jr nz, .asm_28441 + ld hl, wc608 + ld a, $fd +rept 3 + ld [hli], a +endr + ld b, $c8 + xor a +.asm_28457 + ld [hli], a + dec b + jr nz, .asm_28457 + ld hl, wc818 + ld de, wc608 + 10 + ld bc, 0 +.asm_28464 + inc c + ld a, c + cp $fd + jr z, .asm_2848c + ld a, b + dec a + jr nz, .asm_2847f + push bc + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + ld b, $d + jr z, .asm_2847a + ld b, $27 + +.asm_2847a + ld a, c + cp b + pop bc + jr z, .asm_28495 + +.asm_2847f + inc hl + ld a, [hl] + cp $fe + jr nz, .asm_28464 + ld a, c + ld [de], a + inc de + ld [hl], $ff + jr .asm_28464 + +.asm_2848c + ld a, $ff + ld [de], a + inc de + lb bc, 1, 0 + jr .asm_28464 + +.asm_28495 + ld a, $ff + ld [de], a + ret +; 28499 + +Function28499: ; 28499 + ld de, OverworldMap + ld a, $fd + ld b, $6 +.asm_284a0 + ld [de], a + inc de + dec b + jr nz, .asm_284a0 + ld hl, PlayerName + ld bc, NAME_LENGTH + call CopyBytes + push de + ld hl, PartyCount + ld a, [hli] + ld [de], a + inc de +.asm_284b5 + ld a, [hli] + cp $ff + jr z, .asm_284ce + ld [wd265], a + push hl + push de + callab ConvertMon_2to1 + pop de + pop hl + ld a, [wd265] + ld [de], a + inc de + jr .asm_284b5 + +.asm_284ce + ld [de], a + pop de + ld hl, $8 + add hl, de + ld d, h + ld e, l + ld hl, PartyMon1Species + ld c, $6 +.asm_284db + push bc + call Function284f6 + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop bc + dec c + jr nz, .asm_284db + ld hl, PartyMonOT + call .asm_284f0 + ld hl, PartyMonNicknames +.asm_284f0 + ld bc, $42 + jp CopyBytes +; 284f6 + +Function284f6: ; 284f6 + ld b, h + ld c, l + push de + push bc + ld a, [hl] + ld [wd265], a + callab ConvertMon_2to1 + pop bc + pop de + ld a, [wd265] + ld [de], a + inc de + ld hl, $22 + add hl, bc + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + xor a + ld [de], a + inc de + ld hl, $20 + add hl, bc + ld a, [hl] + ld [de], a + inc de + ld a, [bc] + cp $51 + jr z, .asm_28528 + cp $52 + jr nz, .asm_28530 + +.asm_28528 + ld a, $17 + ld [de], a + inc de + ld [de], a + inc de + jr .asm_28544 + +.asm_28530 + push bc + dec a + ld hl, BaseData + 7 ; type + ld bc, BaseData1 - BaseData0 + call AddNTimes + ld bc, 2 + ld a, BANK(BaseData) + call FarCopyBytes + pop bc + +.asm_28544 + push bc + ld hl, $1 + add hl, bc + ld bc, $1a + call CopyBytes + pop bc + + ld hl, $1f + add hl, bc + ld a, [hl] + ld [de], a + ld [CurPartyLevel], a + inc de + + push bc + ld hl, $24 + add hl, bc + ld bc, 8 + call CopyBytes + pop bc + + push de + push bc + + ld a, [bc] + dec a + push bc + ld b, 0 + ld c, a + ld hl, KantoMonSpecials + add hl, bc + ld a, BANK(KantoMonSpecials) + call GetFarByte + ld [BaseSpecialAttack], a + pop bc + + ld hl, $a + add hl, bc + ld c, $5 + ld b, $1 + predef CalcPkmnStatC + + pop bc + pop de + + ld a, [$ffb5] + ld [de], a + inc de + ld a, [$ffb6] + ld [de], a + inc de + ld h, b + ld l, c + ret +; 28595 + +Function28595: ; 28595 + ld de, OverworldMap + ld a, $fd + ld b, $6 +.loop1 + ld [de], a + inc de + dec b + jr nz, .loop1 + ld hl, PlayerName + ld bc, NAME_LENGTH + call CopyBytes + ld hl, PartyCount + ld bc, 8 + call CopyBytes + ld hl, PlayerID + ld bc, 2 + call CopyBytes + ld hl, PartyMon1Species + ld bc, $120 + call CopyBytes + ld hl, PartyMonOT + ld bc, $42 + call CopyBytes + ld hl, PartyMonNicknames + ld bc, $42 + call CopyBytes + ld a, [wLinkMode] + cp LINK_TRADECENTER + ret nz + ld de, wc9f4 + ld a, $20 + call Function28682 + ld a, BANK(sPartyScratch1) + call GetSRAMBank + ld hl, sPartyScratch1 + ld b, PARTY_LENGTH +.loop2 + push bc + ld bc, $21 + call CopyBytes + ld bc, $e + add hl, bc + pop bc + dec b + jr nz, .loop2 + ld hl, sPartyScratch1 + ld b, PARTY_LENGTH +.loop3 + push bc + ld bc, $21 + add hl, bc + ld bc, $e + call CopyBytes + pop bc + dec b + jr nz, .loop3 + ld b, PARTY_LENGTH + ld de, sPartyScratch1 + ld hl, wc9f9 +.loop4 + push bc + push hl + push de + push hl + callba Function1de5c8 + pop de + ld a, c + or a + jr z, .next + sub $3 + jr nc, .skip + callba Function1df1e6 + jr .next + +.skip + cp $2 + jr nc, .next + callba Function1df220 + +.next + pop de + ld hl, SCRATCHMON_STRUCT_LENGTH + add hl, de + ld d, h + ld e, l + pop hl + ld bc, $21 + add hl, bc + pop bc + dec b + jr nz, .loop4 + call CloseSRAM + ld hl, wc9f9 + ld bc, $c6 +.loop5 + ld a, [hl] + cp $fe + jr nz, .skip2 + ld [hl], $21 + +.skip2 + inc hl + dec bc + ld a, b + or c + jr nz, .loop5 + ld hl, wcabf + ld de, wcb13 + ld b, $54 + ld c, $0 +.loop6 + inc c + ld a, [hl] + cp $fe + jr nz, .skip3 + ld [hl], $ff + ld a, c + ld [de], a + inc de + +.skip3 + inc hl + dec b + jr nz, .loop6 + ld a, $ff + ld [de], a + ret +; 28682 + +Function28682: ; 28682 + ld c, $5 +.loop + ld [de], a + inc de + dec c + jr nz, .loop + ret +; 2868a + +Function2868a: ; 2868a + push hl + ld d, h + ld e, l + ld bc, wcbea + ld hl, wcbe8 + ld a, c + ld [hli], a + ld [hl], b + ld hl, OTPartyMon1Species + ld c, $6 +.loop + push bc + call Function286ba + pop bc + dec c + jr nz, .loop + pop hl + lb bc, 1, 8 + add hl, bc + ld de, OTPartyMonOT + ld bc, $42 + call CopyBytes + ld de, OTPartyMonNicknames + ld bc, $42 + jp CopyBytes +; 286ba + +Function286ba: ; 286ba + ld b, h + ld c, l + ld a, [de] + inc de + push bc + push de + ld [wd265], a + callab ConvertMon_1to2 + pop de + pop bc + ld a, [wd265] + ld [bc], a + ld [CurSpecies], a + ld hl, $22 + add hl, bc + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hl], a + inc de + ld hl, $20 + add hl, bc + ld a, [de] + inc de + ld [hl], a + ld hl, wcbe8 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [de] + ld [hli], a + inc de + ld a, [de] + ld [hli], a + inc de + ld a, l + ld [wcbe8], a + ld a, h + ld [wcbe9], a + push bc + ld hl, $1 + add hl, bc + push hl + ld h, d + ld l, e + pop de + push bc + ld a, [hli] + ld b, a + call Function28771 + ld a, b + ld [de], a + inc de + pop bc + ld bc, $19 + call CopyBytes + pop bc + ld d, h + ld e, l + ld hl, $1f + add hl, bc + ld a, [de] + inc de + ld [hl], a + ld [CurPartyLevel], a + push bc + ld hl, $24 + add hl, bc + push hl + ld h, d + ld l, e + pop de + ld bc, 8 + call CopyBytes + pop bc + call GetBaseData + push de + push bc + ld d, h + ld e, l + ld hl, $a + add hl, bc + ld c, $5 + ld b, $1 + predef CalcPkmnStatC + pop bc + pop hl + ld a, [$ffb5] + ld [hli], a + ld a, [$ffb6] + ld [hli], a + push hl + push bc + ld hl, $a + add hl, bc + ld c, $6 + ld b, $1 + predef CalcPkmnStatC + pop bc + pop hl + ld a, [$ffb5] + ld [hli], a + ld a, [$ffb6] + ld [hli], a + push hl + ld hl, $1b + add hl, bc + ld a, $46 + ld [hli], a + xor a +rept 2 + ld [hli], a +endr + ld [hl], a + pop hl +rept 2 + inc de +endr + ret +; 28771 + +Function28771: ; 28771 + ld a, b + and a + ret z + push hl + ld hl, .TimeCapsuleAlt +.loop + ld a, [hli] + and a + jr z, .end + cp b + jr z, .found + inc hl + jr .loop + +.found + ld b, [hl] + +.end + pop hl + ret + +.TimeCapsuleAlt ; 28785 +; Pokémon traded from RBY do not have held items, so GSC usually interprets the +; catch rate as an item. However, if the catch rate appears in this table, the +; item associated with the table entry is used instead. + db ITEM_19, LEFTOVERS + db ITEM_2D, BITTER_BERRY + db ITEM_32, GOLD_BERRY + db ITEM_5A, BERRY + db ITEM_64, BERRY + db ITEM_78, BERRY + db ITEM_87, BERRY + db ITEM_BE, BERRY + db ITEM_C3, BERRY + db ITEM_DC, BERRY + db HM_08, BERRY + db $ff, BERRY + db $00 +; 2879e + +Function2879e: ; 2879e +.asm_2879e + ld a, [hli] + cp $fe + jr z, .asm_2879e + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .asm_2879e + ret +; 287ab + +Function287ab: ; 287ab + ld a, [hLinkPlayerNumber] + cp $2 + ret z + ld hl, EnemyMonSpecies + call Function287d8 + ld de, LinkBattleRNs + ld c, $a +.asm_287bb + ld a, [hli] + cp $fe + jr z, .asm_287bb + cp $fd + jr z, .asm_287bb + ld [de], a + inc de + dec c + jr nz, .asm_287bb + ret +; 287ca + +Function287ca: ; 287ca +.asm_287ca + ld a, [hli] + and a + jr z, .asm_287ca + cp $fd + jr z, .asm_287ca + cp $fe + jr z, .asm_287ca + dec hl + ret +; 287d8 + +Function287d8: ; 287d8 +.asm_287d8 + ld a, [hli] + cp $fd + jr z, .asm_287d8 + cp $fe + jr z, .asm_287d8 + dec hl + ret +; 287e3 + +Function287e3: ; 287e3 + call ClearScreen + call Function28ef8 + callba Function16d673 + xor a + ld hl, wcf51 +rept 3 + ld [hli], a +endr + ld [hl], a + ld a, $1 + ld [MenuSelection2], a + inc a + ld [wcf56], a + jp Function2888b +; 28803 + +Function28803: ; 28803 + ld a, $1 + ld [MonType], a + ld a, $c1 + ld [wcfa8], a + ld a, [OTPartyCount] + ld [wcfa3], a + ld a, $1 + ld [wcfa4], a + ld a, $9 + ld [wcfa1], a + ld a, $6 + ld [wcfa2], a + ld a, $1 + ld [wcfaa], a + ld a, $10 + ld [wcfa7], a + ld a, $20 + ld [wcfa5], a + xor a + ld [wcfa6], a + +Function28835: ; 28835 + callba Function16d70c + ld a, d + and a + jp z, Function2891c + bit 0, a + jr z, .asm_2885b + ld a, $1 + ld [wd263], a + callab Function50db9 + ld hl, OTPartyMon1Species + callba Function4d319 + jp Function2891c + +.asm_2885b + bit 6, a + jr z, .asm_28883 + ld a, [MenuSelection2] + ld b, a + ld a, [OTPartyCount] + cp b + jp nz, Function2891c + xor a + ld [MonType], a + call Function1bf7 + push hl + push bc + ld bc, NAME_LENGTH + add hl, bc + ld [hl], $7f + pop bc + pop hl + ld a, [PartyCount] + ld [MenuSelection2], a + jr Function2888b + +.asm_28883 + bit 7, a + jp z, Function2891c + jp Function28ac9 +; 2888b + +Function2888b: ; 2888b + callba Function49856 + xor a + ld [MonType], a + ld a, $c1 + ld [wcfa8], a + ld a, [PartyCount] + ld [wcfa3], a + ld a, $1 + ld [wcfa4], a + ld a, $1 + ld [wcfa1], a + ld a, $6 + ld [wcfa2], a + ld a, $1 + ld [wcfaa], a + ld a, $10 + ld [wcfa7], a + ld a, $20 + ld [wcfa5], a + xor a + ld [wcfa6], a + call Function3200 + +Function288c5: ; 288c5 + callba Function16d70c + ld a, d + and a + jr nz, .asm_288d2 + jp Function2891c + +.asm_288d2 + bit 0, a + jr z, .asm_288d9 + jp Function28926 + +.asm_288d9 + bit 7, a + jr z, .asm_288fe + ld a, [MenuSelection2] + dec a + jp nz, Function2891c + ld a, $1 + ld [MonType], a + call Function1bf7 + push hl + push bc + ld bc, NAME_LENGTH + add hl, bc + ld [hl], $7f + pop bc + pop hl + ld a, $1 + ld [MenuSelection2], a + jp Function28803 + +.asm_288fe + bit 6, a + jr z, Function2891c + ld a, [MenuSelection2] + ld b, a + ld a, [PartyCount] + cp b + jr nz, Function2891c + call Function1bf7 + push hl + push bc + ld bc, NAME_LENGTH + add hl, bc + ld [hl], $7f + pop bc + pop hl + jp Function28ade +; 2891c + +Function2891c: ; 2891c + ld a, [MonType] + and a + jp z, Function288c5 + jp Function28835 +; 28926 + +Function28926: ; 28926 + call LoadTileMapToTempTileMap + ld a, [MenuSelection2] + push af + hlcoord 0, 15 + ld b, $1 + ld c, $12 + call Function28eef + hlcoord 2, 16 + ld de, String28ab4 + call PlaceString + callba Function4d354 + +.asm_28946 + ld a, $7f + ldcoord_a 11, 16 + ld a, $13 + ld [wcfa8], a + ld a, $1 + ld [wcfa3], a + ld a, $1 + ld [wcfa4], a + ld a, $10 + ld [wcfa1], a + ld a, $1 + ld [wcfa2], a + ld a, $1 + ld [MenuSelection2], a + ld [wcfaa], a + ld a, $20 + ld [wcfa7], a + xor a + ld [wcfa5], a + ld [wcfa6], a + call Function1bd3 + bit 4, a + jr nz, .asm_2898d + bit 1, a + jr z, .asm_289cd +.asm_28983 + pop af + ld [MenuSelection2], a + call Call_LoadTempTileMapToTileMap + jp Function2888b + +.asm_2898d + ld a, $7f + ldcoord_a 1, 16 + ld a, $23 + ld [wcfa8], a + ld a, $1 + ld [wcfa3], a + ld a, $1 + ld [wcfa4], a + ld a, $10 + ld [wcfa1], a + ld a, $b + ld [wcfa2], a + ld a, $1 + ld [MenuSelection2], a + ld [wcfaa], a + ld a, $20 + ld [wcfa7], a + xor a + ld [wcfa5], a + ld [wcfa6], a + call Function1bd3 + bit 5, a + jp nz, .asm_28946 + bit 1, a + jr nz, .asm_28983 + jr .asm_289fe + +.asm_289cd + pop af + ld [MenuSelection2], a + ld a, $4 + ld [wd263], a + callab Function50db9 + callba Function4d319 + call Call_LoadTempTileMapToTileMap + hlcoord 6, 1 + lb bc, 6, 1 + ld a, " " + call Function28b77 + hlcoord 17, 1 + lb bc, 6, 1 + ld a, " " + call Function28b77 + jp Function2888b + +.asm_289fe + call Function1bee + pop af + ld [MenuSelection2], a + dec a + ld [wd002], a + ld [wcf56], a + callba Function16d6ce + ld a, [wcf51] + cp $f + jp z, Function287e3 + ld [wd003], a + call Function28b68 + ld c, $64 + call DelayFrames + callba Functionfb57e + jr c, .asm_28a58 + callba Functionfb5dd + jp nc, Function28b87 + xor a + ld [wcf57], a + ld [wcf52], a + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call Function28eef + callba Function4d354 + ld hl, UnknownText_0x28aaf + bccoord 1, 14 + call PlaceWholeStringInBoxAtOnce + jr .asm_28a89 + +.asm_28a58 + xor a + ld [wcf57], a + ld [wcf52], a + ld a, [wd003] + ld hl, OTPartySpecies + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [wd265], a + call GetPokemonName + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call Function28eef + callba Function4d354 + ld hl, UnknownText_0x28ac4 + bccoord 1, 14 + call PlaceWholeStringInBoxAtOnce + +.asm_28a89 + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call Function28eef + hlcoord 1, 14 + ld de, String28ece + call PlaceString + ld a, $1 + ld [wcf56], a + callba Function16d6ce + ld c, $64 + call DelayFrames + jp Function287e3 +; 28aaf + + +UnknownText_0x28aaf: ; 0x28aaf + ; If you trade that #MON, you won't be able to battle. + text_jump UnknownText_0x1c41b1 + db "@" +; 0x28ab4 + +String28ab4: ; 28ab4 + db "STATS TRADE@" + +UnknownText_0x28ac4: ; 0x28ac4 + ; Your friend's @ appears to be abnormal! + text_jump UnknownText_0x1c41e6 + db "@" +; 0x28ac9 + + +Function28ac9: ; 28ac9 + ld a, [MenuSelection2] + cp $1 + jp nz, Function2891c + call Function1bf7 + push hl + push bc + ld bc, NAME_LENGTH + add hl, bc + ld [hl], $7f + pop bc + pop hl + +Function28ade: ; 28ade +.asm_28ade + ld a, $ed + ldcoord_a 9, 17 +.asm_28ae3 + call JoyTextDelay + ld a, [hJoyLast] + and a + jr z, .asm_28ae3 + bit 0, a + jr nz, .asm_28b0b + push af + ld a, " " + ldcoord_a 9, 17 + pop af + bit 6, a + jr z, .asm_28b03 + ld a, [OTPartyCount] + ld [MenuSelection2], a + jp Function28803 + +.asm_28b03 + ld a, $1 + ld [MenuSelection2], a + jp Function2888b + +.asm_28b0b + ld a, $ec + ldcoord_a 9, 17 + ld a, $f + ld [wcf56], a + callba Function16d6ce + ld a, [wcf51] + cp $f + jr nz, .asm_28ade + +Function28b22: ; 28b22 + call FadeToWhite + call ClearScreen + ld b, $8 + call GetSGBLayout + call Function3200 + xor a + ld [wcfbb], a + xor a + ld [rSB], a + ld [hSerialSend], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret +; 28b42 + +Function28b42: ; 28b42 + hlcoord 0, 16 + ld a, "┘" + ld bc, 2 * SCREEN_WIDTH + call ByteFill + hlcoord 1, 16 + ld a, " " + ld bc, SCREEN_WIDTH - 2 + call ByteFill + hlcoord 2, 16 + ld de, String_28b61 + jp PlaceString +; 28b61 + +String_28b61: ; 28b61 + db "CANCEL@" +; 28b68 + +Function28b68: ; 28b68 + ld a, [wcf51] + hlcoord 6, 9 + ld bc, SCREEN_WIDTH + call AddNTimes + ld [hl], $ec + ret +; 28b77 + +Function28b77: ; 28b77 +.asm_28b77 + push bc + push hl +.asm_28b79 + ld [hli], a + dec c + jr nz, .asm_28b79 + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .asm_28b77 + ret +; 28b87 + +Function28b87: ; 28b87 + xor a + ld [wcf57], a + ld [wcf52], a + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call Function28eef + callba Function4d354 + ld a, [wd002] + ld hl, PartySpecies + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + ld de, wd004 + ld bc, PKMN_NAME_LENGTH + call CopyBytes + ld a, [wd003] + ld hl, OTPartySpecies + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [wd265], a + call GetPokemonName + ld hl, UnknownText_0x28eb8 + bccoord 1, 14 + call PlaceWholeStringInBoxAtOnce + call LoadStandardMenuDataHeader + hlcoord 10, 7 + ld b, $3 + ld c, $7 + call Function28eef + ld de, String28eab + hlcoord 12, 8 + call PlaceString + ld a, $8 + ld [wcfa1], a + ld a, $b + ld [wcfa2], a + ld a, $1 + ld [wcfa4], a + ld a, $2 + ld [wcfa3], a + xor a + ld [wcfa5], a + ld [wcfa6], a + ld a, $20 + ld [wcfa7], a + ld a, $3 + ld [wcfa8], a + ld a, $1 + ld [MenuSelection2], a + ld [wcfaa], a + callba Function4d354 + call Function1bd3 + push af + call Call_ExitMenu + call Function3200 + pop af + bit 1, a + jr nz, .asm_28c33 + ld a, [MenuSelection2] + dec a + jr z, .asm_28c54 + +.asm_28c33 + ld a, $1 + ld [wcf56], a + hlcoord 0, 12 + ld b, 4 + ld c, 18 + call Function28eef + hlcoord 1, 14 + ld de, String28ece + call PlaceString + callba Function16d6ce + jp Function28ea3 + +.asm_28c54 + ld a, $2 + ld [wcf56], a + callba Function16d6ce + ld a, [wcf51] + dec a + jr nz, .asm_28c7b + hlcoord 0, 12 + ld b, 4 + ld c, 18 + call Function28eef + hlcoord 1, 14 + ld de, String28ece + call PlaceString + jp Function28ea3 + +.asm_28c7b + ld hl, sPartyScratch1 + ld a, [wd002] + ld bc, SCRATCHMON_STRUCT_LENGTH + call AddNTimes + ld a, BANK(sPartyScratch1) + call GetSRAMBank + ld d, h + ld e, l + ld bc, SCRATCHMON_STRUCT_LENGTH + add hl, bc + ld a, [wd002] + ld c, a +.asm_28c96 + inc c + ld a, c + cp $6 + jr z, .asm_28ca6 + push bc + ld bc, SCRATCHMON_STRUCT_LENGTH + call CopyBytes + pop bc + jr .asm_28c96 + +.asm_28ca6 + ld hl, sPartyScratch1 + ld a, [PartyCount] + dec a + ld bc, SCRATCHMON_STRUCT_LENGTH + call AddNTimes + push hl + ld hl, wc9f4 + ld a, [wd003] + ld bc, SCRATCHMON_STRUCT_LENGTH + call AddNTimes + pop de + ld bc, SCRATCHMON_STRUCT_LENGTH + call CopyBytes + call CloseSRAM + ld hl, PlayerName + ld de, wc6e7 + ld bc, NAME_LENGTH + call CopyBytes + ld a, [wd002] + ld hl, PartySpecies + ld b, $0 + ld c, a + add hl, bc + ld a, [hl] + ld [wc6d0], a + push af + ld a, [wd002] + ld hl, PartyMonOT + call SkipNames + ld de, wc6f2 + ld bc, NAME_LENGTH + call CopyBytes + ld hl, PartyMon1ID + ld a, [wd002] + call GetPartyLocation + ld a, [hli] + ld [PlayerScreens], a + ld a, [hl] + ld [EnemyScreens], a + ld hl, PartyMon1DVs + ld a, [wd002] + call GetPartyLocation + ld a, [hli] + ld [wc6fd], a + ld a, [hl] + ld [wPlayerMinimized], a + ld a, [wd002] + ld hl, PartyMon1Species + call GetPartyLocation + ld b, h + ld c, l + callba GetCaughtGender + ld a, c + ld [wc701], a + ld hl, wd26b + ld de, wc719 + ld bc, NAME_LENGTH + call CopyBytes + ld a, [wd003] + ld hl, OTPartySpecies + ld b, $0 + ld c, a + add hl, bc + ld a, [hl] + ld [wc702], a + ld a, [wd003] + ld hl, OTPartyMonOT + call SkipNames + ld de, wc724 + ld bc, NAME_LENGTH + call CopyBytes + ld hl, OTPartyMon1ID + ld a, [wd003] + call GetPartyLocation + ld a, [hli] + ld [wEnemyWrapCount], a + ld a, [hl] + ld [wPlayerCharging], a + ld hl, OTPartyMon1DVs + ld a, [wd003] + call GetPartyLocation + ld a, [hli] + ld [wEnemyTrappingMove], a + ld a, [hl] + ld [wPlayerWrapCount], a + ld a, [wd003] + ld hl, OTPartyMon1Species + call GetPartyLocation + ld b, h + ld c, l + callba GetCaughtGender + ld a, c + ld [wEnemyCharging], a + ld a, [wd002] + ld [CurPartyMon], a + ld hl, PartySpecies + ld b, $0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd002], a + xor a + ld [wPokemonWithdrawDepositParameter], a + callab Functione039 + ld a, [PartyCount] + dec a + ld [CurPartyMon], a + ld a, $1 + ld [wd1e9], a + ld a, [wd003] + push af + ld hl, OTPartySpecies + ld b, $0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd003], a + ld c, 100 + call DelayFrames + call ClearTileMap + call LoadFontsBattleExtra + ld b, $8 + call GetSGBLayout + ld a, [hLinkPlayerNumber] + cp $1 + jr z, .asm_28de4 + predef Function28f24 + jr .asm_28de9 + +.asm_28de4 + predef Function28f63 + +.asm_28de9 + pop af + ld c, a + ld [CurPartyMon], a + ld hl, OTPartySpecies + ld d, $0 + ld e, a + add hl, de + ld a, [hl] + ld [CurPartySpecies], a + ld hl, OTPartyMon1Species + ld a, c + call GetPartyLocation + ld de, TempMonSpecies + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + predef Functionda96 + ld a, [PartyCount] + dec a + ld [CurPartyMon], a + callab Function421d8 + call ClearScreen + call Function28ef8 + call Function28eff + callba Function4d354 + ld b, $1 + pop af + ld c, a + cp MEW + jr z, .asm_28e49 + ld a, [CurPartySpecies] + cp MEW + jr z, .asm_28e49 + ld b, $2 + ld a, c + cp CELEBI + jr z, .asm_28e49 + ld a, [CurPartySpecies] + cp CELEBI + jr z, .asm_28e49 + ld b, $0 + +.asm_28e49 + ld a, b + ld [wcf56], a + push bc + call Function862 + pop bc + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .asm_28e63 + ld a, b + and a + jr z, .asm_28e63 + ld a, [wcf52] + cp b + jr nz, .asm_28e49 + +.asm_28e63 + callba Function14a58 + callba MobileFn_1060af + callba BackupMobileEventIndex + ld c, 40 + call DelayFrames + hlcoord 0, 12 + ld b, 4 + ld c, 18 + call Function28eef + hlcoord 1, 14 + ld de, String28ebd + call PlaceString + callba Function4d354 + ld c, 50 + call DelayFrames + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jp z, Function2805d + jp Function28177 +; 28ea3 + +Function28ea3: ; 28ea3 + ld c, 100 + call DelayFrames + jp Function287e3 +; 28eab + +String28eab: ; 28eab + db "TRADE" + next "CANCEL@" + +UnknownText_0x28eb8: ; 0x28eb8 + ; Trade @ for @ ? + text_jump UnknownText_0x1c4212 + db "@" +; 0x28ebd + +String28ebd: ; 28ebd + db "Trade completed!@" + +String28ece: ; 28ece + db "Too bad! The trade" + next "was canceled!@" + + +Function28eef: ; 28eef + ld d, h + ld e, l + callba Function16d6ca + ret +; 28ef8 + +Function28ef8: ; 28ef8 + callba Function16d696 + ret +; 28eff + +Function28eff: ; 28eff + callba Function16d6a7 + call SetPalettes + ret +; 28f09 + +Function28f09: ; 28f09 + hlcoord 0, 0 + ld b, 6 + ld c, 18 + call Function28eef + hlcoord 0, 8 + ld b, 6 + ld c, 18 + call Function28eef + callba Functionfb60d + ret +; 28f24 + +Function28f24: ; 28f24 + xor a + ld [wcf66], a + ld hl, wc6e7 + ld de, wc719 + call Function297ff + ld hl, wc6d0 + ld de, wc702 + call Function29814 + ld de, .data_28f3f + jr Function28fa1 + +.data_28f3f + db $1b + db $1 + db $1c + db $21 + db $2d + db $27 + db $23 + db $3 + db $25 + db $28 + db $25 + db $1e + db $29 + db $6 + db $16 + db $1f + db $19 + db $17 + db $22 + db $1f + db $2a + db $e + db $3 + db $24 + db $5 + db $25 + db $2 + db $27 + db $25 + db $1d + db $2c + db $2e + db $1e + db $18 + db $1f + db $2b + +Function28f63: ; 28f63 + xor a + ld [wcf66], a + ld hl, wc719 + ld de, wc6e7 + call Function297ff + ld hl, wc702 + ld de, wc6d0 + call Function29814 + ld de, .data_28f7e + jr Function28fa1 + +.data_28f7e + db $1a + db $17 + db $22 + db $1f + db $2a + db $6 + db $3 + db $24 + db $5 + db $25 + db $2 + db $27 + db $25 + db $1d + db $2c + db $2f + db $1e + db $18 + db $1f + db $1b + db $1 + db $1c + db $22 + db $27 + db $23 + db $3 + db $25 + db $28 + db $25 + db $1e + db $29 + db $e + db $16 + db $1f + db $2b + +Function28fa1: ; 28fa1 + ld hl, BattleEnded + ld [hl], e + inc hl + ld [hl], d + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + ld hl, VramState + ld a, [hl] + push af + res 0, [hl] + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + call Function28fdb + ld a, [wcf66] + and a + jr nz, .asm_28fca + ld de, MUSIC_EVOLUTION + call PlayMusic2 +.asm_28fca + call Function29082 + jr nc, .asm_28fca + pop af + ld [Options], a + pop af + ld [VramState], a + pop af + ld [hMapAnims], a + ret +; 28fdb + +Function28fdb: ; 28fdb + xor a + ld [wJumptableIndex], a + call ClearBGPalettes + call ClearSprites + call ClearTileMap + call DisableLCD + call LoadFontsBattleExtra + callab Function8cf53 + ld a, [hCGB] + and a + jr z, .asm_2900b + ld a, $1 + ld [rVBK], a + ld hl, VTiles0 + ld bc, sScratch - VTiles0 + xor a + call ByteFill + ld a, $0 + ld [rVBK], a + +.asm_2900b + ld hl, VBGMap0 + ld bc, sScratch - VBGMap0 + ld a, " " + call ByteFill + ld hl, TradeGameBoyLZ + ld de, VTiles2 tile $31 + call Decompress + ld hl, TradeArrowGFX + ld de, VTiles1 tile $6d + ld bc, $10 + ld a, BANK(TradeArrowGFX) + call FarCopyBytes + ld hl, TradeArrowGFX + $10 + ld de, VTiles1 tile $6e + ld bc, $10 + ld a, BANK(TradeArrowGFX) + call FarCopyBytes + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function4d7fd + call EnableLCD + call Function2982b + ld a, [wc6d0] + ld hl, wc6fd + ld de, VTiles0 + call Function29491 + ld a, [wc702] + ld hl, wEnemyTrappingMove + ld de, VTiles0 tile $31 + call Function29491 + ld a, [wc6d0] + ld de, wc6d1 + call Function294a9 + ld a, [wc702] + ld de, wc703 + call Function294a9 + call Function297ed + ret +; 29082 + +Function29082: ; 29082 + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_2909b + call Function290a0 + callab Function8cf69 + ld hl, wcf65 + inc [hl] + call DelayFrame + and a + ret + +.asm_2909b + call LoadStandardFont + scf + ret +; 290a0 + +Function290a0: ; 290a0 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, JumpTable290af +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 290af + +JumpTable290af: ; 290af + dw Function29114 + dw Function2942e + dw Function29461 + dw Function29348 + dw Function2937e + dw Function29391 + dw Function29129 + dw Function291af + dw Function291c4 + dw Function291d9 + dw Function2925d + dw Function29220 + dw Function2925d + dw Function29229 + dw Function2913c + dw Function2925d + dw Function291e8 + dw Function291fd + dw Function29211 + dw Function29220 + dw Function2925d + dw Function29229 + dw Function29701 + dw Function2973c + dw Function2975c + dw Function2977f + dw Function297a4 + dw Function293a6 + dw Function293b6 + dw Function293d2 + dw Function293de + dw Function293ea + dw Function2940c + dw Function294e7 + dw Function294f0 + dw Function2961b + dw Function2962c + dw Function29879 + dw Function29886 + dw Function29649 + dw Function29660 + dw Function2926d + dw Function29277 + dw Function29123 + dw Function29487 + dw Function294f9 + dw Function29502 + dw Function2950c +; 2910f + +Function2910f: ; 2910f + ld hl, wJumptableIndex + inc [hl] + ret +; 29114 + +Function29114: ; 29114 + ld hl, BattleEnded + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + ld [wJumptableIndex], a + inc de + ld [hl], d + dec hl + ld [hl], e + ret +; 29123 + +Function29123: ; 29123 + ld hl, wJumptableIndex + set 7, [hl] + ret +; 29129 + +Function29129: ; 29129 + ld a, $ed + call Function292f6 + ld a, [wc74c] + ld [wd265], a + xor a + ld de, $2c58 + ld b, $0 + jr Function2914e + +Function2913c: ; 2913c + ld a, $ee + call Function292f6 + ld a, [wc74d] + ld [wd265], a + ld a, $2 + lb de, $4c, $94 + ld b, $4 + +Function2914e: ; 2914e + push bc + push de + push bc + push de + push af + call DisableLCD + callab Function8cf53 + ld hl, $9874 + ld bc, $c + ld a, $60 + call ByteFill + pop af + call Function29281 + xor a + ld [hSCX], a + ld a, $7 + ld [hWX], a + ld a, $70 + ld [hWY], a + call EnableLCD + call Function2985a + pop de + ld a, $11 + call Function3b2a + ld hl, $b + add hl, bc + pop bc + ld [hl], b + pop de + ld a, $12 + call Function3b2a + ld hl, $b + add hl, bc + pop bc + ld [hl], b + call WaitBGMap + ld b, $1b + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + ld a, $d0 + call Functioncf8 + call Function2910f + ld a, $5c + ld [wcf64], a + ret +; 291af + +Function291af: ; 291af + call Function2981d + ld a, [hSCX] + add $2 + ld [hSCX], a + cp $50 + ret nz + ld a, $1 + call Function29281 + call Function2910f + ret +; 291c4 + +Function291c4: ; 291c4 + call Function2981d + ld a, [hSCX] + add $2 + ld [hSCX], a + cp $a0 + ret nz + ld a, $2 + call Function29281 + call Function2910f + ret +; 291d9 + +Function291d9: ; 291d9 + call Function2981d + ld a, [hSCX] + add $2 + ld [hSCX], a + and a + ret nz + call Function2910f + ret +; 291e8 + +Function291e8: ; 291e8 + call Function2981d + ld a, [hSCX] + sub $2 + ld [hSCX], a + cp $b0 + ret nz + ld a, $1 + call Function29281 + call Function2910f + ret +; 291fd + +Function291fd: ; 291fd + call Function2981d + ld a, [hSCX] + sub $2 + ld [hSCX], a + cp $60 + ret nz + xor a + call Function29281 + call Function2910f + ret +; 29211 + +Function29211: ; 29211 + call Function2981d + ld a, [hSCX] + sub $2 + ld [hSCX], a + and a + ret nz + call Function2910f + ret +; 29220 + +Function29220: ; 29220 + ld a, $80 + ld [wcf64], a + call Function2910f + ret +; 29229 + +Function29229: ; 29229 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + callab Function8cf53 + ld hl, VBGMap0 + ld bc, sScratch - VBGMap0 + ld a, " " + call ByteFill + xor a + ld [hSCX], a + ld a, $90 + ld [hWY], a + call EnableLCD + call Function2982b + call WaitBGMap + call Function297ed + call Function29114 + ret +; 2925d + +Function2925d: ; 2925d + call Function2981d + ld hl, wcf64 + ld a, [hl] + and a + jr z, .asm_29269 + dec [hl] + ret + +.asm_29269 + call Function2910f + ret +; 2926d + +Function2926d: ; 2926d + call Function29114 + ld de, SFX_GIVE_TRADEMON + call PlaySFX + ret +; 29277 + +Function29277: ; 29277 + call Function29114 + ld de, SFX_GET_TRADEMON + call PlaySFX + ret +; 29281 + +Function29281: ; 29281 + and 3 + ld e, a + ld d, 0 + ld hl, Jumptable_2928f +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 2928f + +Jumptable_2928f: ; 2928f + dw Function29297 + dw Function292af + dw Function292be + dw Function29297 +; 29297 + +Function29297: ; 29297 + call Function297cf + hlcoord 9, 3 + ld [hl], $5b + inc hl + ld bc, $a + ld a, $60 + call ByteFill + hlcoord 3, 2 + call Function292ec + ret +; 292af + +Function292af: ; 292af + call Function297cf + hlcoord 0, 3 + ld bc, SCREEN_WIDTH + ld a, $60 + call ByteFill + ret +; 292be + +Function292be: ; 292be + call Function297cf + hlcoord 0, 3 + ld bc, $11 + ld a, $60 + call ByteFill + hlcoord 17, 3 + ld a, $5d + ld [hl], a + ld a, $61 + ld de, SCREEN_WIDTH + ld c, $3 +.asm_292d9 + add hl, de + ld [hl], a + dec c + jr nz, .asm_292d9 + add hl, de + ld a, $5f + ld [hld], a + ld a, $5b + ld [hl], a + hlcoord 10, 6 + call Function292ec + ret +; 292ec + +Function292ec: ; 292ec + ld de, TradeGameBoyTilemap + lb bc, 8, 6 + call Function297db + ret +; 292f6 + +Function292f6: ; 292f6 + push af + call ClearBGPalettes + call WaitTop + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + ld a, "─" + call ByteFill + hlcoord 0, 1 + ld de, wc736 + call PlaceString + ld hl, wc741 + ld de, 0 +.asm_2931e + ld a, [hli] + cp "@" + jr z, .asm_29326 + dec de + jr .asm_2931e + +.asm_29326 + hlcoord 0, 4 + add hl, de + ld de, wc741 + call PlaceString + hlcoord 7, 2 + ld bc, 6 + pop af + call ByteFill + call WaitBGMap + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + ret +; 29348 + +Function29348: ; 29348 + call ClearTileMap + call WaitTop + ld a, $a0 + ld [hSCX], a + call DelayFrame + hlcoord 8, 2 + ld de, Tilemap_298f7 + lb bc, 3, 12 + call Function297db + call WaitBGMap + ld b, $1b + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + ld de, $e4e4 + call DmgToCgbObjPals + ld de, SFX_POTION + call PlaySFX + call Function2910f + ret +; 2937e + +Function2937e: ; 2937e + ld a, [hSCX] + and a + jr z, .asm_29388 + add $4 + ld [hSCX], a + ret + +.asm_29388 + ld c, $50 + call DelayFrames + call Function29114 + ret +; 29391 + +Function29391: ; 29391 + ld a, [hSCX] + cp $a0 + jr z, .asm_2939c + sub $4 + ld [hSCX], a + ret + +.asm_2939c + call ClearTileMap + xor a + ld [hSCX], a + call Function29114 + ret +; 293a6 + +Function293a6: ; 293a6 + ld a, $8f + ld [hWX], a + ld a, $88 + ld [hSCX], a + ld a, $50 + ld [hWY], a + call Function29114 + ret +; 293b6 + +Function293b6: ; 293b6 + ld a, [hWX] + cp $7 + jr z, .asm_293c7 + sub $4 + ld [hWX], a + ld a, [hSCX] + sub $4 + ld [hSCX], a + ret + +.asm_293c7 + ld a, $7 + ld [hWX], a + xor a + ld [hSCX], a + call Function29114 + ret +; 293d2 + +Function293d2: ; 293d2 + ld a, $7 + ld [hWX], a + ld a, $50 + ld [hWY], a + call Function29114 + ret +; 293de + +Function293de: ; 293de + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + call Function29114 + ret +; 293ea + +Function293ea: ; 293ea + call WaitTop + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ld [hWX], a + xor a + ld [hWY], a + call DelayFrame + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + call Function2910f + ret +; 2940c + +Function2940c: ; 2940c + ld a, [hWX] + cp $a1 + jr nc, .asm_29417 + add $4 + ld [hWX], a + ret + +.asm_29417 + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call Function29114 + ret +; 2942e + +Function2942e: ; 2942e + call Function2951f + ld a, [wc6d0] + ld [CurPartySpecies], a + ld a, [wc6fd] + ld [TempMonDVs], a + ld a, [wPlayerMinimized] + ld [TempMonDVs + 1], a + ld b, $1a + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + call Function294bb + + ld a, [wc6d0] + call GetCryIndex + jr c, .asm_2945d + ld e, c + ld d, b + call PlayCryHeader +.asm_2945d + + call Function29114 + ret +; 29461 + +Function29461: ; 29461 + call Function29549 + ld a, [wc702] + ld [CurPartySpecies], a + ld a, [wEnemyTrappingMove] + ld [TempMonDVs], a + ld a, [wPlayerWrapCount] + ld [TempMonDVs + 1], a + ld b, $1a + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + call Function294c0 + call Function29114 + ret +; 29487 + +Function29487: ; 29487 + callba Function4d81e + call Function29114 + ret +; 29491 + +Function29491: ; 29491 + push de + push af + predef GetUnownLetter + pop af + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + pop de + predef GetFrontpic + ret +; 294a9 + +Function294a9: ; 294a9 + push de + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + pop de + ld bc, NAME_LENGTH + call CopyBytes + ret +; 294bb + +Function294bb: ; 294bb + ld de, VTiles0 + jr Function294c3 + +Function294c0: ; 294c0 + ld de, VTiles0 tile $31 + +Function294c3: ; 294c3 + call DelayFrame + ld hl, VTiles2 + ld bc, $a31 + call Request2bpp + call WaitTop + call Function297cf + hlcoord 7, 2 + xor a + ld [hFillBox], a + lb bc, 7, 7 + predef FillBox + call WaitBGMap + ret +; 294e7 + +Function294e7: ; 294e7 + ld c, $50 + call DelayFrames + call Function29114 + ret +; 294f0 + +Function294f0: ; 294f0 + ld c, $28 + call DelayFrames + call Function29114 + ret +; 294f9 + +Function294f9: ; 294f9 + ld c, $60 + call DelayFrames + call Function29114 + ret +; 29502 + +Function29502: ; 29502 + call Function29516 + ret nz + ld c, $50 + call DelayFrames + ret +; 2950c + +Function2950c: ; 2950c + call Function29516 + ret nz + ld c, $b4 + call DelayFrames + ret +; 29516 + +Function29516: ; 29516 + call Function29114 + ld a, [wc702] + cp $fd + ret +; 2951f + +Function2951f: ; 2951f + ld de, wc6d0 + ld a, [de] + cp $fd + jr z, Function295a1 + call Function29573 + ld de, wc6d0 + call Function295e3 + ld de, wc6d1 + call Function295ef + ld a, [wc701] + ld de, wc6f2 + call Function295f6 + ld de, PlayerScreens + call Function29611 + call Function295d8 + ret +; 29549 + +Function29549: ; 29549 + ld de, wc702 + ld a, [de] + cp $fd + jr z, Function295a1 + call Function29573 + ld de, wc702 + call Function295e3 + ld de, wc703 + call Function295ef + ld a, [wEnemyCharging] + ld de, wc724 + call Function295f6 + ld de, wEnemyWrapCount + call Function29611 + call Function295d8 + ret +; 29573 + +Function29573: ; 29573 + call WaitTop + call Function297cf + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, $6 + ld c, $d + call TextBox + hlcoord 4, 0 + ld de, String29591 + call PlaceString + ret +; 29591 + +String29591: ; 29591 + db "─── №." + next "" + next "OT/" + next $73, "№.@" +; 295a1 + +Function295a1: ; 295a1 + call WaitTop + call Function297cf + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, $6 + ld c, $d + call TextBox + hlcoord 4, 2 + ld de, String295c2 + call PlaceString + call Function295d8 + ret +; 295c2 + +String295c2: ; 295c2 + db "EGG" + next "OT/?????" + next $73, "№.?????@" +; 295d8 + +Function295d8: ; 295d8 + call WaitBGMap + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + ret +; 295e3 + +Function295e3: ; 295e3 + hlcoord 10, 0 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum + ld [hl], $7f + ret +; 295ef + +Function295ef: ; 295ef + hlcoord 4, 2 + call PlaceString + ret +; 295f6 + +Function295f6: ; 295f6 + cp 3 + jr c, .asm_295fb + xor a + +.asm_295fb + push af + hlcoord 7, 4 + call PlaceString + inc bc + pop af + ld hl, Unknown_2960e + ld d, 0 + ld e, a + add hl, de + ld a, [hl] + ld [bc], a + ret +; 2960e + +Unknown_2960e: ; 2960e + db " ", "♂", "♀" +; 29611 + +Function29611: ; 29611 + hlcoord 7, 6 + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + ret +; 2961b + +Function2961b: ; 2961b + lb de, $54, $58 + ld a, $e + call Function3b2a + call Function29114 + ld a, $20 + ld [wcf64], a + ret +; 2962c + +Function2962c: ; 2962c + lb de, $54, $58 + ld a, $e + call Function3b2a + ld hl, $b + add hl, bc + ld [hl], $1 + ld hl, $7 + add hl, bc + ld [hl], $dc + call Function29114 + ld a, $38 + ld [wcf64], a + ret +; 29649 + +Function29649: ; 29649 + lb de, $54, $58 + ld a, $f + call Function3b2a + call Function29114 + ld a, $10 + ld [wcf64], a + ld de, SFX_BALL_POOF + call PlaySFX + ret +; 29660 + +Function29660: ; 29660 + ld a, $e4 + call Functioncf8 + lb de, $28, $58 + ld a, $10 + call Function3b2a + call Function29114 + ld a, $40 + ld [wcf64], a + ret +; 29676 + +Function29676: ; 29676 (a:5676) + ld hl, $b + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, Jumptable_29686 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 29686 + +Jumptable_29686: ; 29686 (a:5686) + dw Function2969a + dw Function296a4 + dw Function296af + dw Function296bd + dw Function296cf + dw Function296dd + dw Function296f2 +; 2969a + +Function29694: ; 29694 (a:5694) + ld hl, $b + add hl, bc + inc [hl] + ret + +Function2969a: ; 2969a (a:569a) + call Function29694 + ld hl, $c + add hl, bc + ld [hl], $80 + ret + +Function296a4: ; 296a4 (a:56a4) + ld hl, $c + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + call Function29694 + +Function296af: ; 296af (a:56af) + ld hl, $4 + add hl, bc + ld a, [hl] + cp $94 + jr nc, .asm_296ba + inc [hl] + ret +.asm_296ba + call Function29694 + +Function296bd: ; 296bd (a:56bd) + ld hl, $5 + add hl, bc + ld a, [hl] + cp $4c + jr nc, .asm_296c8 + inc [hl] + ret +.asm_296c8 + ld hl, $ + add hl, bc + ld [hl], $0 + ret + +Function296cf: ; 296cf (a:56cf) + ld hl, $5 + add hl, bc + ld a, [hl] + cp $2c + jr z, .asm_296da + dec [hl] + ret +.asm_296da + call Function29694 + +Function296dd: ; 296dd (a:56dd) + ld hl, $4 + add hl, bc + ld a, [hl] + cp $58 + jr z, .asm_296e8 + dec [hl] + ret +.asm_296e8 + call Function29694 + ld hl, $c + add hl, bc + ld [hl], $80 + ret + +Function296f2: ; 296f2 (a:56f2) + ld hl, $c + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + ld hl, $ + add hl, bc + ld [hl], $0 + ret +; 29701 (a:5701) + +Function29701: ; 29701 + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .asm_29725 + ld hl, UnknownText_0x29737 + call PrintText + ld c, $bd + call DelayFrames + ld hl, UnknownText_0x29732 + call PrintText + call Function297c9 + ld c, $80 + call DelayFrames + call Function29114 + ret + +.asm_29725 + ld hl, UnknownText_0x29732 + call PrintText + call Function297c9 + call Function29114 + ret +; 29732 + +UnknownText_0x29732: ; 0x29732 + ; was sent to @ . + text_jump UnknownText_0x1bc6e9 + db "@" +; 0x29737 + +UnknownText_0x29737: ; 0x29737 + ; + text_jump UnknownText_0x1bc701 + db "@" +; 0x2973c + +Function2973c: ; 2973c + ld hl, UnknownText_0x29752 + call PrintText + call Function297c9 + ld hl, UnknownText_0x29757 + call PrintText + call Function297c9 + call Function29114 + ret +; 29752 + +UnknownText_0x29752: ; 0x29752 + ; bids farewell to + text_jump UnknownText_0x1bc703 + db "@" +; 0x29757 + +UnknownText_0x29757: ; 0x29757 + ; . + text_jump UnknownText_0x1bc719 + db "@" +; 0x2975c + +Function2975c: ; 2975c + call WaitTop + hlcoord 0, 10 + ld bc, 8 * SCREEN_WIDTH + ld a, " " + call ByteFill + call WaitBGMap + ld hl, UnknownText_0x2977a + call PrintText + call Function297c9 + call Function29114 + ret +; 2977a + +UnknownText_0x2977a: ; 0x2977a + ; Take good care of @ . + text_jump UnknownText_0x1bc71f + db "@" +; 0x2977f + +Function2977f: ; 2977f + ld hl, UnknownText_0x2979a + call PrintText + call Function297c9 + ld hl, UnknownText_0x2979f + call PrintText + call Function297c9 + ld c, $e + call DelayFrames + call Function29114 + ret +; 2979a + +UnknownText_0x2979a: ; 0x2979a + ; For @ 's @ , + text_jump UnknownText_0x1bc739 + db "@" +; 0x2979f + +UnknownText_0x2979f: ; 0x2979f + ; sends @ . + text_jump UnknownText_0x1bc74c + db "@" +; 0x297a4 + +Function297a4: ; 297a4 + ld hl, UnknownText_0x297bf + call PrintText + call Function297c9 + ld hl, UnknownText_0x297c4 + call PrintText + call Function297c9 + ld c, $e + call DelayFrames + call Function29114 + ret +; 297bf + +UnknownText_0x297bf: ; 0x297bf + ; will trade @ @ + text_jump UnknownText_0x1bc75e + db "@" +; 0x297c4 + +UnknownText_0x297c4: ; 0x297c4 + ; for @ 's @ . + text_jump UnknownText_0x1bc774 + db "@" +; 0x297c9 + +Function297c9: ; 297c9 + ld c, $50 + call DelayFrames + ret +; 297cf + +Function297cf: ; 297cf + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, " " + call ByteFill + ret +; 297db + +Function297db: ; 297db +.asm_297db + push bc + push hl +.asm_297dd + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_297dd + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .asm_297db + ret +; 297ed + +Function297ed: ; 297ed + ld a, [hSGB] + and a + ld a, $e4 + jr z, .asm_297f6 + ld a, $f0 + +.asm_297f6 + call Functioncf8 + ld a, $e4 + call DmgToCgbBGPals + ret +; 297ff + +Function297ff: ; 297ff + push de + ld de, wc736 + ld bc, NAME_LENGTH + call CopyBytes + pop hl + ld de, wc741 + ld bc, NAME_LENGTH + call CopyBytes + ret +; 29814 + +Function29814: ; 29814 + ld a, [hl] + ld [wc74c], a + ld a, [de] + ld [wc74d], a + ret +; 2981d + +Function2981d: ; 2981d + ld a, [wcf65] + and $7 + ret nz + ld a, [rBGP] + xor $3c + call DmgToCgbBGPals + ret +; 2982b + +Function2982b: ; 2982b + call DelayFrame + ld de, TradeBallGFX + ld hl, VTiles0 tile $62 + lb bc, BANK(TradeBallGFX), $6 + call Request2bpp + ld de, TradePoofGFX + ld hl, VTiles0 tile $68 + lb bc, BANK(TradePoofGFX), $c + call Request2bpp + ld de, TradeCableGFX + ld hl, VTiles0 tile $74 + lb bc, BANK(TradeCableGFX), $4 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], $62 + ret +; 2985a + +Function2985a: ; 2985a + call DelayFrame + ld e, $3 + callab Function8e83f + ld de, TradeBubbleGFX + ld hl, VTiles0 tile $72 + lb bc, BANK(TradeBubbleGFX), $4 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], $62 + ret +; 29879 + +Function29879: ; 29879 + ld hl, wcf64 + ld a, [hl] + and a + jr z, .asm_29882 + dec [hl] + ret + +.asm_29882 + call Function29114 + ret +; 29886 + +Function29886: ; 29886 + ld hl, wcf64 + ld a, [hl] + and a + jr z, .asm_2988f + dec [hl] + ret + +.asm_2988f + call Function29114 + ret +; 29893 + + +Function29893: ; 29893 +; This function is unreferenced. +; It was meant for use in Japanese versions, so the +; constant used for copy length was changed by accident. + + ld hl, Unknown_298b5 + + ld a, [hli] + ld [wc6d0], a + ld de, wc6e7 + ld c, 13 ; jp: 8 +.asm_2989f + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_2989f + + ld a, [hli] + ld [wc702], a + ld de, wc719 + ld c, 13 ; jp: 8 +.asm_298ae + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_298ae + ret +; 298b5 + +Unknown_298b5: ; 298b5 + db $03, "ゲーフり@@", $23, $01 ; GAME FREAK + db $06, "クりーチャ@", $56, $04 ; Creatures Inc. +; 298c7 + + +TradeGameBoyTilemap: ; 298c7 +; 6x8 + db $31, $32, $32, $32, $32, $33 + db $34, $35, $36, $36, $37, $38 + db $34, $39, $3a, $3a, $3b, $38 + db $3c, $3d, $3e, $3e, $3f, $40 + db $41, $42, $43, $43, $44, $45 + db $46, $47, $43, $48, $49, $4a + db $41, $43, $4b, $4c, $4d, $4e + db $4f, $50, $50, $50, $51, $52 +; 297f7 + +Tilemap_298f7: ; 297f7 +; 12x3 + db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53 + db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54 + db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43 +; 2991b + +TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp" +TradeCableGFX: INCBIN "gfx/trade/cable.2bpp" +TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp" +TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz" +TradeBallGFX: INCBIN "gfx/trade/ball.2bpp" +TradePoofGFX: INCBIN "gfx/trade/poof.2bpp" + +Special_CheckTimeCapsuleCompatibility: ; 29bfb +; Checks to see if your Party is compatible with the generation 1 games. Returns the following in ScriptVar: +; 0: Party is okay +; 1: At least one Pokemon was introduced in GS +; 2: At least one Pokemon has a move that was introduced in GS +; 3: At least one Pokemon is holding mail + +; If any party Pokemon was introduced in the generation 2 games, don't let it in. + ld hl, PartySpecies + ld b, PARTY_LENGTH ; 6 +.loop + ld a, [hli] + cp $ff + jr z, .checkitem + cp CHIKORITA ; MEW + 1 ; 151 + 1 + jr nc, .mon_too_new + dec b + jr nz, .loop + +; If any party Pokemon is holding mail, don't let it in. +.checkitem + ld a, [PartyCount] + ld b, a + ld hl, PartyMon1Item +.itemloop + push hl + push bc + ld d, [hl] + callba ItemIsMail + pop bc + pop hl + jr c, .mon_has_mail + ld de, PARTYMON_STRUCT_LENGTH + add hl, de + dec b + jr nz, .itemloop + +; If any party Pokemon has a move that was introduced in the generation 2 games, don't let it in. + ld hl, PartyMon1Moves + ld a, [PartyCount] + ld b, a +.move_loop + ld c, NUM_MOVES +.move_next + ld a, [hli] + cp STRUGGLE + 1 + jr nc, .move_too_new + dec c + jr nz, .move_next + ld de, PartyMon2 - (PartyMon1 + NUM_MOVES) + add hl, de + dec b + jr nz, .move_loop + xor a + jr .done + +.mon_too_new + ld [wd265], a + call GetPokemonName + ld a, $1 + jr .done + +.move_too_new + push bc + ld [wd265], a + call GetMoveName + call CopyName1 + pop bc + call Function29c67 + ld a, $2 + jr .done + +.mon_has_mail + call Function29c67 + ld a, $3 + +.done + ld [ScriptVar], a + ret +; 29c67 + +Function29c67: ; 29c67 + ld a, [PartyCount] + sub b + ld c, a + inc c + ld b, $0 + ld hl, PartyCount + add hl, bc + ld a, [hl] + ld [wd265], a + call GetPokemonName + ret +; 29c7b + +Special_EnterTimeCapsule: ; 29c7b + ld c, $a + call DelayFrames + ld a, $4 + call Function29f17 + ld c, $28 + call DelayFrames + xor a + ld [hVBlank], a + inc a + ld [wLinkMode], a + ret +; 29c92 + +Special_AbortLink: ; 29c92 + ld c, $3 + call DelayFrames + ld a, -1 + ld [hLinkPlayerNumber], a + xor a + ld [rSB], a + ld [hSerialReceive], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ld c, $3 + call DelayFrames + xor a + ld [rSB], a + ld [hSerialReceive], a + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + ld c, $3 + call DelayFrames + xor a + ld [rSB], a + ld [hSerialReceive], a + ld [rSC], a + ld c, $3 + call DelayFrames + ld a, -1 + ld [hLinkPlayerNumber], a + ld a, [rIF] + push af + xor a + ld [rIF], a + ld a, $f + ld [rIE], a + pop af + ld [rIF], a + ld hl, wcf5b + xor a + ld [hli], a + ld [hl], a + ld [hVBlank], a + ld [wLinkMode], a + ret +; 29ce8 + +Special_SetBitsForLinkTradeRequest: ; 29ce8 + ld a, $1 + ld [wcf56], a + ld [wd265], a + ret +; 29cf1 + +Special_SetBitsForBattleRequest: ; 29cf1 + ld a, $2 + ld [wcf56], a + ld [wd265], a + ret +; 29cfa + +Special_SetBitsForTimeCapsuleRequest: ; 29cfa + ld a, $2 + ld [rSB], a + xor a + ld [hSerialReceive], a + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + xor a + ld [wcf56], a + ld [wd265], a + ret +; 29d11 + +Special_WaitForLinkedFriend: ; 29d11 + ld a, [wcf56] + and a + jr z, .asm_29d2f + ld a, $2 + ld [rSB], a + xor a + ld [hSerialReceive], a + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + call DelayFrame + call DelayFrame + call DelayFrame + +.asm_29d2f + ld a, $2 + ld [wcf5c], a + ld a, $ff + ld [wcf5b], a +.asm_29d39 + ld a, [hLinkPlayerNumber] + cp $2 + jr z, .asm_29d79 + cp $1 + jr z, .asm_29d79 + ld a, -1 + ld [hLinkPlayerNumber], a + ld a, $2 + ld [rSB], a + xor a + ld [hSerialReceive], a + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + ld a, [wcf5b] + dec a + ld [wcf5b], a + jr nz, .asm_29d68 + ld a, [wcf5c] + dec a + ld [wcf5c], a + jr z, .asm_29d8d + +.asm_29d68 + ld a, $1 + ld [rSB], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + call DelayFrame + jr .asm_29d39 + +.asm_29d79 + call Function908 + call DelayFrame + call Function908 + ld c, $32 + call DelayFrames + ld a, $1 + ld [ScriptVar], a + ret + +.asm_29d8d + xor a + ld [ScriptVar], a + ret +; 29d92 + +Special_CheckLinkTimeout: ; 29d92 + ld a, $1 + ld [wcf56], a + ld hl, wcf5b + ld a, $3 + ld [hli], a + xor a + ld [hl], a + call WaitBGMap + ld a, $2 + ld [hVBlank], a + call DelayFrame + call DelayFrame + call Function29e0c + xor a + ld [hVBlank], a + ld a, [ScriptVar] + and a + ret nz + jp Function29f04 +; 29dba + +Function29dba: ; 29dba + ld a, $5 + ld [wcf56], a + ld hl, wcf5b + ld a, $3 + ld [hli], a + xor a + ld [hl], a + call WaitBGMap + ld a, $2 + ld [hVBlank], a + call DelayFrame + call DelayFrame + call Function29e0c + ld a, [ScriptVar] + and a + jr z, .asm_29e08 + ld bc, rIE +.asm_29de0 + dec bc + ld a, b + or c + jr nz, .asm_29de0 + ld a, [wcf51] + cp $5 + jr nz, .asm_29e03 + ld a, $6 + ld [wcf56], a + ld hl, wcf5b + ld a, $1 + ld [hli], a + ld [hl], $32 + call Function29e0c + ld a, [wcf51] + cp $6 + jr z, .asm_29e08 + +.asm_29e03 + xor a + ld [ScriptVar], a + ret + +.asm_29e08 + xor a + ld [hVBlank], a + ret +; 29e0c + +Function29e0c: ; 29e0c + xor a + ld [hFFCA], a + ld a, [wcf5b] + ld h, a + ld a, [wcf5c] + ld l, a + push hl + call Function29e3b + pop hl + jr nz, .asm_29e2f + call Function29e47 + call Function29e53 + call Function29e3b + jr nz, .asm_29e2f + call Function29e47 + xor a + jr .asm_29e31 + +.asm_29e2f + ld a, $1 + +.asm_29e31 + ld [ScriptVar], a + ld hl, wcf5b + xor a + ld [hli], a + ld [hl], a + ret +; 29e3b + +Function29e3b: ; 29e3b + call Function87d + ld hl, wcf5b + ld a, [hli] + inc a + ret nz + ld a, [hl] + inc a + ret +; 29e47 + +Function29e47: ; 29e47 + ld b, $a +.asm_29e49 + call DelayFrame + call Function908 + dec b + jr nz, .asm_29e49 + ret +; 29e53 + +Function29e53: ; 29e53 + dec h + srl h + rr l + srl h + rr l + inc h + ld a, h + ld [wcf5b], a + ld a, l + ld [wcf5c], a + ret +; 29e66 + +Special_TryQuickSave: ; 29e66 + ld a, [wd265] + push af + callba Function14ab2 + ld a, $1 + jr nc, .asm_29e75 + xor a + +.asm_29e75 + ld [ScriptVar], a + ld c, $1e + call DelayFrames + pop af + ld [wd265], a + ret +; 29e82 + +Special_CheckBothSelectedSameRoom: ; 29e82 + ld a, [wd265] + call Function29f17 + push af + call Function908 + call DelayFrame + call Function908 + pop af + ld b, a + ld a, [wd265] + cp b + jr nz, .asm_29eaa + ld a, [wd265] + inc a + ld [wLinkMode], a + xor a + ld [hVBlank], a + ld a, $1 + ld [ScriptVar], a + ret + +.asm_29eaa + xor a + ld [ScriptVar], a + ret +; 29eaf + +Special_TimeCapsule: ; 29eaf + ld a, LINK_TIMECAPSULE + ld [wLinkMode], a + call DisableSpriteUpdates + callab LinkCommunications + call EnableSpriteUpdates + xor a + ld [hVBlank], a + ret +; 29ec4 + +Special_TradeCenter: ; 29ec4 + ld a, LINK_TRADECENTER + ld [wLinkMode], a + call DisableSpriteUpdates + callab LinkCommunications + call EnableSpriteUpdates + xor a + ld [hVBlank], a + ret +; 29ed9 + +Special_Colosseum: ; 29ed9 + ld a, LINK_COLOSSEUM + ld [wLinkMode], a + call DisableSpriteUpdates + callab LinkCommunications + call EnableSpriteUpdates + xor a + ld [hVBlank], a + ret +; 29eee + +Special_CloseLink: ; 29eee + xor a + ld [wLinkMode], a + ld c, $3 + call DelayFrames + jp Function29f04 +; 29efa + +Special_FailedLinkToPast: ; 29efa + ld c, $28 + call DelayFrames + ld a, $e + jp Function29f17 +; 29f04 + +Function29f04: ; 29f04 + ld c, $3 + call DelayFrames + ld a, -1 + ld [hLinkPlayerNumber], a + ld a, $2 + ld [rSB], a + xor a + ld [hSerialReceive], a + ld [rSC], a + ret +; 29f17 + +Function29f17: ; 29f17 + add $d0 + ld [wcf56], a + ld [wcf57], a + ld a, $2 + ld [hVBlank], a + call DelayFrame + call DelayFrame +.asm_29f29 + call Function83b + ld a, [wcf51] + ld b, a + and $f0 + cp $d0 + jr z, .asm_29f40 + ld a, [wcf52] + ld b, a + and $f0 + cp $d0 + jr nz, .asm_29f29 + +.asm_29f40 + xor a + ld [hVBlank], a + ld a, b + and $f + ret +; 29f47 + +Special_CableClubCheckWhichChris: ; 29f47 + ld a, [hLinkPlayerNumber] + cp $1 + ld a, $1 + jr z, .yes + dec a + +.yes + ld [ScriptVar], a + ret +; 29f54 + +GFX_29f54: ; 29f54 +INCBIN "gfx/unknown/029f54.2bpp" +; 29fe4 diff --git a/engine/map_objects.asm b/engine/map_objects.asm index a5d792204..4c2adc9aa 100644 --- a/engine/map_objects.asm +++ b/engine/map_objects.asm @@ -1,20 +1,20 @@ INCLUDE "engine/facings.asm" -ObjectStruct3_Data:: ; 4273 +SpriteMovementData:: ; 4273 ; function, facing, ?, ?, ?, ? db SPRITEMOVEFN_00, DOWN, $01, $02, $00, $00 ; 00 - db SPRITEMOVEFN_06, DOWN, $01, $0c, $00, $00 ; 01 - db SPRITEMOVEFN_03, DOWN, $01, $00, $00, $00 ; 02 - db SPRITEMOVEFN_04, DOWN, $01, $00, $00, $00 ; 03 - db SPRITEMOVEFN_01, DOWN, $01, $00, $00, $00 ; 04 - db SPRITEMOVEFN_02, DOWN, $01, $00, $00, $00 ; 05 - db SPRITEMOVEFN_06, DOWN, $01, $00, $00, $00 ; 06 - db SPRITEMOVEFN_06, UP, $01, $00, $00, $00 ; 07 - db SPRITEMOVEFN_06, LEFT, $01, $00, $00, $00 ; 08 - db SPRITEMOVEFN_06, RIGHT, $01, $00, $00, $00 ; 09 - db SPRITEMOVEFN_05, DOWN, $01, $00, $00, $00 ; 0a - db SPRITEMOVEFN_07, DOWN, $01, $02, $00, $00 ; 0b + db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 01 + db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $00 ; 02 + db SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 03 + db SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, $01, $00, $00, $00 ; 04 + db SPRITEMOVEFN_RANDOM_WALK_X, DOWN, $01, $00, $00, $00 ; 05 + db SPRITEMOVEFN_STANDING, DOWN, $01, $00, $00, $00 ; 06 + db SPRITEMOVEFN_STANDING, UP, $01, $00, $00, $00 ; 07 + db SPRITEMOVEFN_STANDING, LEFT, $01, $00, $00, $00 ; 08 + db SPRITEMOVEFN_STANDING, RIGHT, $01, $00, $00, $00 ; 09 + db SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 0a + db SPRITEMOVEFN_OBEY_DPAD, DOWN, $01, $02, $00, $00 ; 0b db SPRITEMOVEFN_08, DOWN, $01, $00, $00, $00 ; 0c db SPRITEMOVEFN_09, DOWN, $01, $00, $00, $00 ; 0d db SPRITEMOVEFN_0A, DOWN, $01, $00, $00, $00 ; 0e @@ -22,24 +22,24 @@ ObjectStruct3_Data:: ; 4273 db SPRITEMOVEFN_0C, DOWN, $01, $00, $00, $00 ; 10 db SPRITEMOVEFN_0D, DOWN, $01, $00, $00, $00 ; 11 db SPRITEMOVEFN_0E, DOWN, $01, $00, $00, $00 ; 12 - db SPRITEMOVEFN_0F, DOWN, $01, $02, $00, $00 ; 13 - db SPRITEMOVEFN_10, DOWN, $01, $02, $00, $00 ; 14 - db SPRITEMOVEFN_15, DOWN, $09, $2e, $01, $c0 ; 15 - db SPRITEMOVEFN_16, DOWN, $0a, $2e, $00, $00 ; 16 - db SPRITEMOVEFN_06, DOWN, $01, $0c, $00, $00 ; 17 - db SPRITEMOVEFN_06, DOWN, $01, $2e, $10, $00 ; 18 - db SPRITEMOVEFN_11, DOWN, $01, $2e, $00, $40 ; 19 - db SPRITEMOVEFN_12, DOWN, $01, $02, $00, $00 ; 1a + db SPRITEMOVEFN_FOLLOW, DOWN, $01, $02, $00, $00 ; 13 + db SPRITEMOVEFN_SCRIPTED, DOWN, $01, $02, $00, $00 ; 14 + db SPRITEMOVEFN_BIG_SNORLAX, DOWN, $09, $2e, $01, $c0 ; 15 + db SPRITEMOVEFN_BOUNCE, DOWN, $0a, $2e, $00, $00 ; 16 + db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 17 + db SPRITEMOVEFN_STANDING, DOWN, $01, $2e, $10, $00 ; 18 + db SPRITEMOVEFN_STRENGTH, DOWN, $01, $2e, $00, $40 ; 19 + db SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, $01, $02, $00, $00 ; 1a db SPRITEMOVEFN_13, DOWN, $00, $8e, $01, $00 ; 1b db SPRITEMOVEFN_14, DOWN, $08, $8e, $02, $00 ; 1c db SPRITEMOVEFN_17, DOWN, $00, $82, $00, $00 ; 1d - db SPRITEMOVEFN_19, LEFT, $01, $00, $00, $00 ; 1e - db SPRITEMOVEFN_18, RIGHT, $01, $00, $00, $00 ; 1f - db SPRITEMOVEFN_11, DOWN, $0c, $2e, $01, $c0 ; 20 - db SPRITEMOVEFN_11, DOWN, $0d, $2e, $01, $c0 ; 21 + db SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, $01, $00, $00, $00 ; 1e + db SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, $01, $00, $00, $00 ; 1f + db SPRITEMOVEFN_STRENGTH, DOWN, $0c, $2e, $01, $c0 ; 20 + db SPRITEMOVEFN_STRENGTH, DOWN, $0d, $2e, $01, $c0 ; 21 db SPRITEMOVEFN_1A, DOWN, $0e, $8e, $01, $00 ; 22 db SPRITEMOVEFN_1B, DOWN, $0f, $8e, $02, $00 ; 23 - db SPRITEMOVEFN_03, DOWN, $01, $00, $00, $20 ; 24 + db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $20 ; 24 db SPRITEMOVEFN_00, DOWN, $01, $00, $00, $00 ; 25 ; 4357 @@ -655,7 +655,7 @@ Function467b: ; 467b ld hl, OBJECT_12 add hl, bc ld [hl], a - ld hl, OBJECT_27 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc rept 3 ld [hli], a @@ -848,28 +848,28 @@ RestoreDefaultMovement: ; 4769 ; 4780 ClearObjectStructField27: ; 4780 - ld hl, OBJECT_27 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld [hl], 0 ret ; 4787 IncrementObjectStructField27: ; 4787 - ld hl, OBJECT_27 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc inc [hl] ret ; 478d DecrementObjectStructField27: ; 478d - ld hl, OBJECT_27 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc dec [hl] ret ; 4793 JumptoObjectStructField27: ; 4793 - ld hl, OBJECT_27 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld a, [hl] pop hl @@ -937,7 +937,7 @@ Function47bc: ; 47bc Function47dd: ; 47dd call ClearObjectStructField28 - call Function1a2f + call GetSpriteMovementFunction ld a, [hl] ld hl, .Pointers rst JumpTable @@ -945,63 +945,63 @@ Function47dd: ; 47dd ; 47e9 .Pointers ; 47e9 - dw Function4821 ; 00 - dw Function4822 ; 01 - dw Function482c ; 02 - dw Function4838 ; 03 - dw Function4842 ; 04 - dw Function4851 ; 05 - dw Function4869 ; 06 - dw Function487c ; 07 - dw Function4882 ; 08 - dw Function4888 ; 09 - dw Function488e ; 0a - dw Function4891 ; 0b - dw Function4894 ; 0c - dw Function4897 ; 0d - dw Function489d ; 0e - dw Function48a0 ; 0f - dw Function48a6 ; 10 - dw Function48ac ; 11 - dw Function48ff ; 12 - dw Function49e5 ; 13 - dw Function4a21 ; 14 - dw Function4958 ; 15 - dw Function496e ; 16 - dw Function4abc ; 17 - dw Function498d ; 18 - dw Function4984 ; 19 - dw Function4a46 ; 1a - dw Function4a89 ; 1b + dw .Null_00 ; 00 + dw .RandomWalkY ; 01 + dw .RandomWalkX ; 02 + dw .RandomWalkXY ; 03 + dw .RandomSpin1 ; 04 + dw .RandomSpin2 ; 05 + dw .Standing ; 06 + dw .ObeyDPad ; 07 + dw .Movement08 ; 08 + dw .Movement09 ; 09 + dw .Movement0a ; 0a + dw .Movement0b ; 0b + dw .Movement0c ; 0c + dw .Movement0d ; 0d + dw .Movement0e ; 0e + dw .Follow ; 0f + dw .Script ; 10 + dw .Strength ; 11 + dw .FollowNotExact ; 12 + dw .Movement13 ; 13 + dw .Movement14 ; 14 + dw .MovementBigStanding ; 15 + dw .MovementBouncing ; 16 + dw .Movement17 ; 17 + dw .MovementSpinClockwise ; 18 + dw .MovementSpinCounterclockwise ; 19 + dw .Movement1a ; 1a + dw .Movement1b ; 1b ; 4821 -Function4821: ; 4821 +.Null_00: ; 4821 ret ; 4822 -Function4822: ; 4822 +.RandomWalkY: ; 4822 call Random ld a, [hRandomAdd] and %00000001 - jp Function4af0 + jp .RandomWalkContinue ; 482c -Function482c: ; 482c +.RandomWalkX: ; 482c call Random ld a, [hRandomAdd] and %00000001 or %00000010 - jp Function4af0 + jp .RandomWalkContinue ; 4838 -Function4838: ; 4838 +.RandomWalkXY: ; 4838 call Random ld a, [hRandomAdd] and %00000011 - jp Function4af0 + jp .RandomWalkContinue ; 4842 -Function4842: ; 4842 +.RandomSpin1: ; 4842 call Random ld a, [hRandomAdd] and %00001100 @@ -1011,7 +1011,7 @@ Function4842: ; 4842 jp Function4b1d ; 4851 -Function4851: ; 4851 +.RandomSpin2: ; 4851 ld hl, OBJECT_FACING add hl, bc ld a, [hl] @@ -1029,7 +1029,7 @@ Function4851: ; 4851 jp Function4b26 ; 4869 -Function4869: ; standing? +.Standing: ; 4869 call Function462a call Function467b ld hl, OBJECT_11 @@ -1041,69 +1041,71 @@ Function4869: ; standing? ret ; 487c -Function487c: ; 487c +.ObeyDPad: ; 487c ld hl, Function5000 - jp Function5041 + jp HandleMovementData ; 4882 -Function4882: ; 4882 +.Movement08: ; 4882 ld hl, Function5015 - jp Function5041 + jp HandleMovementData ; 4888 -Function4888: ; 4888 +.Movement09: ; 4888 ld hl, Function5026 - jp Function5041 + jp HandleMovementData ; 488e -Function488e: ; 488e +.Movement0a: ; 488e jp Function5037 ; 4891 -Function4891: ; 4891 +.Movement0b: ; 4891 jp Function5037 ; 4894 -Function4894: ; 4894 +.Movement0c: ; 4894 jp Function5037 ; 4897 -Function4897: ; 4897 +.Movement0d: ; 4897 ld hl, Function5000 - jp Function5041 + jp HandleMovementData ; 489d -Function489d: ; 489d +.Movement0e: ; 489d jp Function5037 ; 48a0 -Function48a0: ; 48a0 +.Follow: ; 48a0 ld hl, Function54e6 - jp Function5041 + jp HandleMovementData ; 48a6 -Function48a6: ; 48a6 - ld hl, Function500e ; scripted - jp Function5041 +.Script: ; 48a6 + ld hl, Function500e + jp HandleMovementData ; 48ac -Function48ac: ; 48ac +.Strength: ; 48ac call JumptoObjectStructField27 - dw Function48b3 - dw Function48f8 + dw .Strength_Start + dw .Strength_Stop ; 48b3 -Function48b3: ; 48b3 +.Strength_Start: ; 48b3 ld hl, OBJECT_STANDING_TILE add hl, bc ld a, [hl] call CheckPitTile jr z, .on_pit + ld hl, OBJECT_FLAGS2 add hl, bc bit 2, [hl] res 2, [hl] jr z, .ok + ld hl, OBJECT_32 add hl, bc ld a, [hl] @@ -1112,6 +1114,7 @@ Function48b3: ; 48b3 call Function4690 call Function6ec1 jr c, .ok2 + ld de, SFX_STRENGTH call PlaySFX call Function5538 @@ -1135,23 +1138,26 @@ Function48b3: ; 48b3 ; fallthrough ; 48f8 -Function48f8: ; 48f8 +.Strength_Stop: ; 48f8 ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING ret ; 48ff -Function48ff: ; 48ff +.FollowNotExact: ; 48ff ld hl, OBJECT_MAP_X add hl, bc ld d, [hl] + ld hl, OBJECT_MAP_Y add hl, bc ld e, [hl] + ld hl, OBJECT_32 add hl, bc ld a, [hl] + push bc call GetObjectStruct ld hl, OBJECT_DIRECTION_WALKING @@ -1159,6 +1165,7 @@ Function48ff: ; 48ff ld a, [hl] cp STANDING jr z, .standing + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] @@ -1206,7 +1213,7 @@ Function48ff: ; 48ff ret ; 4958 -Function4958: ; 4958 +.MovementBigStanding: ; 4958 call Function467b ld hl, OBJECT_DIRECTION_WALKING add hl, bc @@ -1220,7 +1227,7 @@ Function4958: ; 4958 ret ; 496e -Function496e: ; 496e +.MovementBouncing: ; 496e call Function467b ld hl, OBJECT_DIRECTION_WALKING add hl, bc @@ -1234,27 +1241,27 @@ Function496e: ; 496e ret ; 4984 -Function4984: ; 4984 +.MovementSpinCounterclockwise: ; 4984 call JumptoObjectStructField27 - dw Function4996 - dw Function499c - dw Function49b8 + dw .MovementSpinInit + dw .MovementSpinRepeat + dw .MovementSpinTurnLeft ; 498d -Function498d: ; 498d +.MovementSpinClockwise: ; 498d call JumptoObjectStructField27 - dw Function4996 - dw Function499c - dw Function49c4 + dw .MovementSpinInit + dw .MovementSpinRepeat + dw .MovementSpinTurnRight ; 4996 -Function4996: ; 4996 +.MovementSpinInit: ; 4996 call Function467b call IncrementObjectStructField27 ; fallthrough ; 499c -Function499c: ; 499c +.MovementSpinRepeat: ; 499c ld hl, OBJECT_11 add hl, bc ld [hl], 1 @@ -1272,27 +1279,27 @@ Function499c: ; 499c ret ; 49b8 -Function49b8: ; 49b8 - ld de, .DirectionData_49c0 - call Function49d0 - jr Function4984 +.MovementSpinTurnLeft: ; 49b8 + ld de, .DirectionData_Counterclockwise + call .MovementSpinNextFacing + jr .MovementSpinCounterclockwise ; 49c0 -.DirectionData_49c0 ; 49c0 +.DirectionData_Counterclockwise ; 49c0 db RIGHT << 2, LEFT << 2, DOWN << 2, UP << 2 ; 49c4 -Function49c4: ; 49c4 - ld de, .DirectionData_49cc - call Function49d0 - jr Function498d +.MovementSpinTurnRight: ; 49c4 + ld de, .DirectionData_Clockwise + call .MovementSpinNextFacing + jr .MovementSpinClockwise ; 49cc -.DirectionData_49cc ; 49cc +.DirectionData_Clockwise ; 49cc db LEFT << 2, RIGHT << 2, UP << 2, DOWN << 2 ; 49d0 -Function49d0: ; 49d0 +.MovementSpinNextFacing: ; 49d0 ld hl, OBJECT_FACING add hl, bc ld a, [hl] @@ -1310,8 +1317,8 @@ Function49d0: ; 49d0 ret ; 49e5 -Function49e5: ; 49e5 - call Function4aa8 +.Movement13: ; 49e5 + call ._Movement13_14_1a_1b ld hl, OBJECT_11 add hl, bc ld [hl], $7 @@ -1330,12 +1337,12 @@ Function49e5: ; 49e5 and 3 ld d, $e cp DOWN - jr z, .ok + jr z, .ok_13 cp UP - jr z, .ok + jr z, .ok_13 ld d, $c -.ok +.ok_13 ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc ld [hl], d @@ -1348,9 +1355,9 @@ Function49e5: ; 49e5 ret ; 4a21 -Function4a21: ; 4a21 +.Movement14: ; 4a21 call Function467b - call Function4aa8 + call ._Movement13_14_1a_1b ld hl, OBJECT_11 add hl, bc ld [hl], 8 @@ -1369,9 +1376,9 @@ Function4a21: ; 4a21 ret ; 4a46 -Function4a46: ; 4a46 +.Movement1a: ; 4a46 call Function467b - call Function4aa8 + call ._Movement13_14_1a_1b ld hl, OBJECT_11 add hl, bc ld [hl], $e @@ -1416,9 +1423,9 @@ endr db -6, 2 ; 4a89 -Function4a89: ; 4a89 +.Movement1b: ; 4a89 call Function467b - call Function4aa8 + call ._Movement13_14_1a_1b ld hl, OBJECT_11 add hl, bc ld [hl], $f @@ -1435,7 +1442,7 @@ Function4a89: ; 4a89 ret ; 4aa8 -Function4aa8: ; 4aa8 +._Movement13_14_1a_1b: ; 4aa8 ld hl, OBJECT_32 add hl, bc ld a, [hl] @@ -1452,7 +1459,7 @@ Function4aa8: ; 4aa8 ret ; 4abc -Function4abc: ; 4abc +.Movement17: ; 4abc call Function467b ld hl, OBJECT_11 add hl, bc @@ -1460,7 +1467,7 @@ Function4abc: ; 4abc ld hl, OBJECT_32 add hl, bc ld a, [hl] - call Function4ade + call ._Movement17 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], e @@ -1473,7 +1480,7 @@ Function4abc: ; 4abc ret ; 4ade -Function4ade: ; 4ade +._Movement17: ; 4ade ld d, a and %00111111 ld e, a @@ -1491,7 +1498,7 @@ Function4ade: ; 4ade jr .loop ; 4af0 -Function4af0: ; 4af0 +.RandomWalkContinue: ; 4af0 call Function4690 call Function6ec1 jr c, Function4b17 @@ -1502,13 +1509,13 @@ Function4af0: ; 4af0 ld hl, wd4cf ld a, [hMapObjectIndexBuffer] cp [hl] - jr z, .ok + jr z, .load_6 ld hl, OBJECT_09 add hl, bc - ld [hl], $7 + ld [hl], 7 ret -.ok +.load_6 ld hl, OBJECT_09 add hl, bc ld [hl], 6 @@ -2397,11 +2404,14 @@ UpdateJumpPosition: ; 4fd5 ; 5000 Function5000: ; unscripted? +; copy [wc3de] to [wc2df] ld a, [wc2de] ld hl, wc2df ld [hl], a - ld a, $3e +; load [wc2de] with movement_step_sleep_1 + ld a, movement_step_sleep_1 ld [wc2de], a +; recover the previous value of [wc2de] ld a, [hl] ret ; 500e @@ -2413,7 +2423,7 @@ Function500e: ; scripted ; 5015 Function5015: ; 5015 - ld hl, OBJECT_27 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld e, [hl] inc [hl] @@ -2428,7 +2438,7 @@ Function5015: ; 5015 ; 5026 Function5026: ; 5026 - ld hl, OBJECT_27 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld e, [hl] inc [hl] @@ -2443,16 +2453,16 @@ Function5026: ; 5026 ; 5037 Function5037: ; 5037 - ld hl, Function503d - jp Function5041 + ld hl, GetMovementPerson + jp HandleMovementData ; 503d -Function503d: ; 503d +GetMovementPerson: ; 503d ld a, [wMovementPerson] ret ; 5041 -Function5041: ; 5041 +HandleMovementData: ; 5041 call CopyMovementPointer .loop xor a @@ -2481,7 +2491,7 @@ GetMovementByte: ; 505e jp [hl] ; 5065 -Function5065: ; 5065 +ContinueReadingMovement: ; 5065 ld a, 1 ld [wc2ea], a ret @@ -2560,7 +2570,8 @@ Function54e6: ; 54e6 .done call Function550a ret c - ld a, $3e + + ld a, movement_step_sleep_1 ret ; 550a @@ -2582,7 +2593,7 @@ Function550a: ; 550a .nope ld a, $ff ld [wObjectFollow_Follower], a - ld a, $47 + ld a, movement_step_end scf ret ; 5529 @@ -2693,6 +2704,7 @@ Function5582: ; 5582 Function55ac: ; 55ac call FindFirstEmptyObjectStruct ret nc + ld d, h ld e, l callba Function8286 @@ -2700,11 +2712,14 @@ Function55ac: ; 55ac ; 55b9 Function55b9: ; 55b9 +; load into wc2f0: +; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [MapX], [MapY], -1 ld hl, wc2f0 ld [hl], -1 inc hl ld [hl], -1 inc hl + ld a, [de] inc de ld [hli], a @@ -2713,8 +2728,10 @@ Function55b9: ; 55b9 ld [hli], a ld a, [de] ld [hli], a + ld a, [hMapObjectIndexBuffer] ld [hli], a + push hl ld hl, OBJECT_MAP_X add hl, bc @@ -2723,6 +2740,7 @@ Function55b9: ; 55b9 add hl, bc ld e, [hl] pop hl + ld [hl], d inc hl ld [hl], e @@ -2783,17 +2801,21 @@ Function561d: ; 561d Function5629: ; 5629 cp NUM_OBJECTS ret nc + call GetMapObject ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] cp -1 ret z + cp NUM_OBJECT_STRUCTS ret nc + call GetObjectStruct call GetObjectSprite ret z + call Function5673 ret ; 5645 @@ -2923,7 +2945,7 @@ Function56cd: ; 56cd srl a srl a srl a - cp $14 + cp SCREEN_WIDTH jr c, .ok3 sub $20 @@ -2974,9 +2996,9 @@ Function56cd: ; 56cd .ok7 ld a, d - ld [$ffbf], a + ld [hFFBF], a .loop - ld a, [$ffbf] + ld a, [hFFBF] ld d, a ld a, [hUsedSpriteTile] add e @@ -2992,7 +3014,7 @@ Function56cd: ; 56cd jr nc, .ok8 ld c, a push bc - call GetTileCoord + call Coord2Tile pop bc ld a, [hl] cp $60 @@ -3163,7 +3185,7 @@ SetFollowerIfVisible: ; 582c ret c ld hl, OBJECT_MOVEMENTTYPE add hl, bc - ld [hl], SPRITEMOVEDATA_13 + ld [hl], SPRITEMOVEDATA_FOLLOWING ld hl, OBJECT_09 add hl, bc ld [hl], 0 @@ -3177,7 +3199,7 @@ ResetFollower: ; 5847 cp -1 ret z call GetObjectStruct - callba Function58e3 + callba Function58e3 ; no need to bankswitch ld a, -1 ld [wObjectFollow_Follower], a ret @@ -3291,16 +3313,19 @@ Function58e3: ; 58e3 add hl, bc ld a, [hl] cp -1 - jp z, Function5903 + jp z, Function5903 ; a jr would have been appropriate here + push bc call GetMapObject ld hl, MAPOBJECT_MOVEMENT add hl, bc ld a, [hl] pop bc + ld hl, OBJECT_MOVEMENTTYPE add hl, bc ld [hl], a + ld hl, OBJECT_09 add hl, bc ld [hl], 0 @@ -3319,6 +3344,7 @@ Function5903: ; 5903 ld hl, OBJECT_MOVEMENTTYPE add hl, bc ld [hl], a + ld hl, OBJECT_09 add hl, bc ld [hl], 0 @@ -3492,7 +3518,7 @@ Function59f3: ; 59f3 .next ld a, [hli] ld d, a - and %11110000 + and $f0 ret z cp c jr nz, .next @@ -3500,20 +3526,20 @@ Function59f3: ; 59f3 push bc push hl ld a, d - and %00001111 - call Function5ac2 - call Function5a0d + and $f + call .GetObjectStructPointer + call .asm_5a0d pop hl pop bc jr .next ; 5a0d -Function5a0d: ; 5a0d +.asm_5a0d: ; 5a0d ld hl, OBJECT_SPRITE_TILE add hl, bc ld a, [hl] and %01111111 - ld [$ffc1], a + ld [hFFC1], a xor a bit 7, [hl] @@ -3547,7 +3573,7 @@ Function5a0d: ; 5a0d jr z, .skip4 or %10000000 .skip4 - ld [$ffc2], a + ld [hFFC2], a ld hl, OBJECT_SPRITE_X add hl, bc @@ -3562,7 +3588,7 @@ Function5a0d: ; 5a0d ld e, a ld a, [wd14c] add e - ld [$ffbf], a + ld [hFFBF], a ld hl, OBJECT_SPRITE_Y add hl, bc @@ -3577,7 +3603,7 @@ Function5a0d: ; 5a0d ld e, a ld a, [wd14d] add e - ld [$ffc0], a + ld [hFFC0], a ld hl, OBJECT_FACING_STEP add hl, bc @@ -3606,14 +3632,14 @@ Function5a0d: ; 5a0d jr nc, .full .addsprite - ld a, [$ffc0] + ld a, [hFFC0] add [hl] inc hl ld [bc], a inc c - ld a, [$ffbf] + ld a, [hFFBF] add [hl] inc hl @@ -3623,7 +3649,7 @@ Function5a0d: ; 5a0d ld e, [hl] inc hl - ld a, [$ffc1] + ld a, [hFFC1] bit 2, e jr z, .nope1 xor a @@ -3637,7 +3663,7 @@ Function5a0d: ; 5a0d ld a, e bit 1, a jr z, .nope2 - ld a, [$ffc2] + ld a, [hFFC2] or e .nope2 and %11110000 @@ -3662,7 +3688,7 @@ Function5a0d: ; 5a0d ret ; 5ac2 -Function5ac2: ; 5ac2 +.GetObjectStructPointer: ; 5ac2 ld c, a ld b, 0 ld hl, .Addresses diff --git a/engine/map_setup.asm b/engine/map_setup.asm index 0e391b31c..9c99df2f6 100644 --- a/engine/map_setup.asm +++ b/engine/map_setup.asm @@ -17,28 +17,28 @@ endr ; 15377 MapSetupScripts: ; 15377 - dw MapSetupScript1 - dw MapSetupScript2 - dw MapSetupScript3 - dw MapSetupScript4 - dw MapSetupScript5 - dw MapSetupScript6 - dw MapSetupScript7 - dw MapSetupScript8 - dw MapSetupScript9 - dw MapSetupScript10 - dw MapSetupScript11 - dw MapSetupScript12 + dw MapSetupScript_Warp + dw MapSetupScript_Continue + dw MapSetupScript_ReloadMap + dw MapSetupScript_Teleport + dw MapSetupScript_Door + dw MapSetupScript_Fall + dw MapSetupScript_Connection + dw MapSetupScript_LinkReturn + dw MapSetupScript_Train + dw MapSetupScript_Submenu + dw MapSetupScript_BadWarp + dw MapSetupScript_Fly ; 1538f -MapSetupScript4: ; 1538f +MapSetupScript_Teleport: ; 1538f db map_prolong_sprites -MapSetupScript12: ; 15390 +MapSetupScript_Fly: ; 15390 db map_fade_out_palettes db map_keep_roam -MapSetupScript1: ; 15392 +MapSetupScript_Warp: ; 15392 db map_lcd_off db map_sound_off db map_load_spawn @@ -63,7 +63,7 @@ MapSetupScript1: ; 15392 db map_wildmons db map_end_setup_script -MapSetupScript11: ; 153a9 +MapSetupScript_BadWarp: ; 153a9 db map_load_spawn db map_attributes db map_change_callback @@ -87,7 +87,7 @@ MapSetupScript11: ; 153a9 db map_wildmons db map_end_setup_script -MapSetupScript7: ; 153bf +MapSetupScript_Connection: ; 153bf db map_animations_off db map_load_connection db map_attributes @@ -106,13 +106,13 @@ MapSetupScript7: ; 153bf db map_animations_on db map_end_setup_script -MapSetupScript6: ; 153d0 +MapSetupScript_Fall: ; 153d0 db map_prolong_sprites -MapSetupScript5: ; 153d1 +MapSetupScript_Door: ; 153d1 db map_fade_out_palettes -MapSetupScript9: ; 153d2 +MapSetupScript_Train: ; 153d2 db map_load_warp db map_attributes db map_warp_face @@ -135,7 +135,7 @@ MapSetupScript9: ; 153d2 db map_update_roam db map_end_setup_script -MapSetupScript3: ; 153e7 +MapSetupScript_ReloadMap: ; 153e7 db map_fade db map_clear_bg_palettes db map_lcd_off @@ -153,7 +153,7 @@ MapSetupScript3: ; 153e7 db map_wildmons db map_end_setup_script -MapSetupScript8: ; 153f7 +MapSetupScript_LinkReturn: ; 153f7 db map_fade db map_lcd_off db map_sound_off @@ -172,7 +172,7 @@ MapSetupScript8: ; 153f7 db map_text_scroll_off db map_end_setup_script -MapSetupScript2: ; 15408 +MapSetupScript_Continue: ; 15408 db map_lcd_off db map_sound_off db map_attributes_2 @@ -192,7 +192,7 @@ MapSetupScript2: ; 15408 db map_wildmons db map_end_setup_script -MapSetupScript10: ; 1541a +MapSetupScript_Submenu: ; 1541a db map_load_blocks db map_connection_blocks db map_end_setup_script @@ -243,52 +243,52 @@ endr ; 15440 MapSetupCommands: ; 15440 - dbw BANK(EnableLCD), EnableLCD ; 00 - dbw BANK(DisableLCD), DisableLCD ; 01 - dbw BANK(SoundRestart), SoundRestart ; 02 - dbw BANK(PlayMapMusic), PlayMapMusic ; 03 - dbw BANK(RestartMapMusic), RestartMapMusic ; 04 - dbw BANK(FadeToMapMusic), FadeToMapMusic ; 05 - dbw BANK(FadeOutMapAndMusic), FadeOutMapAndMusic ; 06 - dbw BANK(EnterMapMusic), EnterMapMusic ; 07 - dbw BANK(ForceMapMusic), ForceMapMusic ; 08 - dbw BANK(CrankUpTheVolume), CrankUpTheVolume ; 09 - dbw BANK(LoadBlockData), LoadBlockData ; 0a - dbw BANK(LoadNeighboringBlockData), LoadNeighboringBlockData ; 0b - dbw BANK(SaveScreen), SaveScreen ; 0c - dbw BANK(BufferScreen), BufferScreen ; 0d - dbw BANK(LoadGraphics), LoadGraphics ; 0e - dbw BANK(LoadTilesetHeader), LoadTilesetHeader ; 0f - dbw BANK(LoadMapTimeOfDay), LoadMapTimeOfDay ; 10 - dbw BANK(LoadMapPalettes), LoadMapPalettes ; 11 - dbw BANK(LoadWildMonData), LoadWildMonData ; 12 - dbw BANK(RefreshMapSprites), RefreshMapSprites ; 13 - dbw BANK(RunCallback_05_03), RunCallback_05_03 ; 14 - dbw BANK(RunCallback_03), RunCallback_03 ; 15 - dbw BANK(LoadObjectsRunCallback_02), LoadObjectsRunCallback_02 ; 16 - dbw BANK(LoadSpawnPoint), LoadSpawnPoint ; 17 - dbw BANK(EnterMapConnection), EnterMapConnection ; 18 - dbw BANK(LoadWarpData), LoadWarpData ; 19 - dbw BANK(LoadMapAttributes), LoadMapAttributes ; 1a - dbw BANK(LoadMapAttributes_IgnoreHidden), LoadMapAttributes_IgnoreHidden ; 1b - dbw BANK(WhiteBGMap), WhiteBGMap ; 1c - dbw BANK(FadeBlackBGMap), FadeBlackBGMap ; 1d - dbw BANK(FadeInBGMap), FadeInBGMap ; 1e - dbw BANK(GetCoordOfUpperLeftCorner), GetCoordOfUpperLeftCorner ; 1f - dbw BANK(RestoreFacingAfterWarp), RestoreFacingAfterWarp ; 20 - dbw BANK(SpawnInFacingDown), SpawnInFacingDown ; 21 - dbw BANK(GetSpawnCoord), GetSpawnCoord ; 22 - dbw BANK(RefreshPlayerCoords), RefreshPlayerCoords ; 23 - dbw BANK(DelayClearingOldSprites), DelayClearingOldSprites ; 24 - dbw BANK(DelayLoadingNewSprites), DelayLoadingNewSprites ; 25 - dbw BANK(UpdateRoamMons), UpdateRoamMons ; 26 - dbw BANK(JumpRoamMons), JumpRoamMons ; 27 - dbw BANK(FadeOldMapMusic), FadeOldMapMusic ; 28 - dbw BANK(ActivateMapAnims), ActivateMapAnims ; 29 - dbw BANK(SuspendMapAnims), SuspendMapAnims ; 2a - dbw BANK(RetainOldPalettes), RetainOldPalettes ; 2b - dbw BANK(DontScrollText), DontScrollText ; 2c - dbw BANK(ReturnFromMapSetupScript), ReturnFromMapSetupScript ; 2d + dba EnableLCD ; 00 + dba DisableLCD ; 01 + dba MapSetup_Sound_Off ; 02 + dba PlayMapMusic ; 03 + dba RestartMapMusic ; 04 + dba FadeToMapMusic ; 05 + dba FadeOutMapAndMusic ; 06 + dba EnterMapMusic ; 07 + dba ForceMapMusic ; 08 + dba FadeInMusic ; 09 + dba LoadBlockData ; 0a + dba LoadNeighboringBlockData ; 0b + dba SaveScreen ; 0c + dba BufferScreen ; 0d + dba LoadGraphics ; 0e + dba LoadTilesetHeader ; 0f + dba LoadMapTimeOfDay ; 10 + dba LoadMapPalettes ; 11 + dba LoadWildMonData ; 12 + dba RefreshMapSprites ; 13 + dba RunCallback_05_03 ; 14 + dba RunCallback_03 ; 15 + dba LoadObjectsRunCallback_02 ; 16 + dba LoadSpawnPoint ; 17 + dba EnterMapConnection ; 18 + dba LoadWarpData ; 19 + dba LoadMapAttributes ; 1a + dba LoadMapAttributes_SkipPeople ; 1b + dba ClearBGPalettes ; 1c + dba FadeOutPalettes ; 1d + dba FadeInPalettes ; 1e + dba GetCoordOfUpperLeftCorner ; 1f + dba RestoreFacingAfterWarp ; 20 + dba SpawnInFacingDown ; 21 + dba GetSpawnCoord ; 22 + dba RefreshPlayerCoords ; 23 + dba DelayClearingOldSprites ; 24 + dba DelayLoadingNewSprites ; 25 + dba UpdateRoamMons ; 26 + dba JumpRoamMons ; 27 + dba FadeOldMapMusic ; 28 + dba ActivateMapAnims ; 29 + dba SuspendMapAnims ; 2a + dba RetainOldPalettes ; 2b + dba DontScrollText ; 2c + dba ReturnFromMapSetupScript ; 2d ; 154ca @@ -300,13 +300,13 @@ DontScrollText: ; 154ca ActivateMapAnims: ; 154cf ld a, $1 - ld [$ffde], a + ld [hMapAnims], a ret ; 154d3 SuspendMapAnims: ; 154d3 xor a - ld [$ffde], a + ld [hMapAnims], a ret ; 154d7 @@ -318,7 +318,7 @@ LoadObjectsRunCallback_02: ; 154d7 ret ; 154ea (5:54ea) -Function154ea: ; 154ea +; unreferenced ret ; 154eb @@ -333,20 +333,21 @@ DelayLoadingNewSprites: ; 154f1 set 6, [hl] ret -Function154f7: ; 154f7 +CheckReplaceKrisSprite: ; 154f7 nop - call Function1550c + call .CheckBiking jr c, .ok - call Function1554e + call .CheckSurfing jr c, .ok - call Function1551a + call .CheckSurfing2 jr c, .ok ret + .ok - call Special_ReplaceKrisSprite + call ReplaceKrisSprite ret -Function1550c: ; 1550c (5:550c) +.CheckBiking: ; 1550c (5:550c) and a ld hl, BikeFlags bit 1, [hl] @@ -356,7 +357,7 @@ Function1550c: ; 1550c (5:550c) scf ret -Function1551a: ; 1551a (5:551a) +.CheckSurfing2: ; 1551a (5:551a) ld a, [PlayerState] cp PLAYER_NORMAL jr z, .nope @@ -367,11 +368,11 @@ Function1551a: ; 1551a (5:551a) cp PLAYER_SURF_PIKA jr z, .surfing call GetMapPermission - cp $3 + cp INDOOR jr z, .checkbiking - cp $5 + cp PERM_5 jr z, .checkbiking - cp $7 + cp DUNGEON jr z, .checkbiking jr .nope .checkbiking @@ -383,21 +384,22 @@ Function1551a: ; 1551a (5:551a) ld [PlayerState], a scf ret + .nope and a ret -Function1554e: ; 1554e (5:554e) +.CheckSurfing: ; 1554e (5:554e) call CheckOnWater jr nz, .ret_nc ld a, [PlayerState] cp PLAYER_SURF - jr z, .surfing + jr z, ._surfing cp PLAYER_SURF_PIKA - jr z, .surfing + jr z, ._surfing ld a, PLAYER_SURF ld [PlayerState], a -.surfing +._surfing scf ret .ret_nc diff --git a/engine/mart.asm b/engine/mart.asm new file mode 100755 index 000000000..2c3dac0e7 --- /dev/null +++ b/engine/mart.asm @@ -0,0 +1,1000 @@ + const_def + const MARTTEXT_HOW_MANY + const MARTTEXT_COSTS_THIS_MUCH + const MARTTEXT_NOT_ENOUGH_MONEY + const MARTTEXT_BAG_FULL + const MARTTEXT_HERE_YOU_GO + const MARTTEXT_SOLD_OUT + +OpenMartDialog:: ; 15a45 + call GetMart + ld a, c + ld [EngineBuffer1], a + call LoadMartPointer + ld a, [EngineBuffer1] + ld hl, .dialogs + rst JumpTable + ret +; 15a57 + +.dialogs + dw MartDialog + dw HerbShop + dw BargainShop + dw Pharmacist + dw RooftopSale +; 15a61 + +MartDialog: ; 15a61 + ld a, 0 + ld [EngineBuffer1], a + xor a + ld [MovementAnimation], a + call StandardMart + ret +; 15a6e + +HerbShop: ; 15a6e + call FarReadMart + call LoadStandardMenuDataHeader + ld hl, Text_HerbShop_Intro + call MartTextBox + call BuyMenu + ld hl, Text_HerbShop_ComeAgain + call MartTextBox + ret +; 15a84 + +BargainShop: ; 15a84 + ld b, BANK(BargainShopData) + ld de, BargainShopData + call LoadMartPointer + call ReadMart + call LoadStandardMenuDataHeader + ld hl, Text_BargainShop_Intro + call MartTextBox + call BuyMenu + ld hl, wBargainShopFlags + ld a, [hli] + or [hl] + jr z, .skip_set + ld hl, DailyFlags + set 6, [hl] + +.skip_set + ld hl, Text_BargainShop_ComeAgain + call MartTextBox + ret +; 15aae + +Pharmacist: ; 15aae + call FarReadMart + call LoadStandardMenuDataHeader + ld hl, UnknownText_0x15e90 + call MartTextBox + call BuyMenu + ld hl, UnknownText_0x15eae + call MartTextBox + ret +; 15ac4 + +RooftopSale: ; 15ac4 + ld b, BANK(RooftopSaleData1) + ld de, RooftopSaleData1 + ld hl, StatusFlags + bit 6, [hl] ; hall of fame + jr z, .ok + ld b, BANK(RooftopSaleData2) + ld de, RooftopSaleData2 + +.ok + call LoadMartPointer + call ReadMart + call LoadStandardMenuDataHeader + ld hl, Text_Mart_HowMayIHelpYou + call MartTextBox + call BuyMenu + ld hl, Text_Mart_ComeAgain + call MartTextBox + ret +; 15aee + +RooftopSaleData1: ; 15aee + db 5 + dbw POKE_BALL, 150 + dbw GREAT_BALL, 500 + dbw SUPER_POTION, 500 + dbw FULL_HEAL, 500 + dbw REVIVE, 1200 + db -1 +RooftopSaleData2: ; 15aff + db 5 + dbw HYPER_POTION, 1000 + dbw FULL_RESTORE, 2000 + dbw FULL_HEAL, 500 + dbw ULTRA_BALL, 1000 + dbw PROTEIN, 7800 + db -1 +; 15b10 + +LoadMartPointer: ; 15b10 + ld a, b + ld [MartPointerBank], a + ld a, e + ld [MartPointer], a + ld a, d + ld [MartPointer + 1], a + ld hl, CurMart + xor a + ld bc, 16 + call ByteFill + xor a + ld [MovementAnimation], a + ld [wBargainShopFlags], a + ld [FacingDirection], a + ret +; 15b31 + +GetMart: ; 15b31 + ld a, e + cp (MartsEnd - Marts) / 2 + jr c, .IsAMart + ld b, $5 + ld de, DefaultMart + ret + +.IsAMart + ld hl, Marts +rept 2 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + ld b, $5 + ret +; 15b47 + +StandardMart: ; 15b47 +.loop + ld a, [MovementAnimation] + ld hl, .MartFunctions + rst JumpTable + ld [MovementAnimation], a + cp $ff + jr nz, .loop + ret + +.MartFunctions + dw .HowMayIHelpYou + dw .TopMenu + dw .Buy + dw .Sell + dw .Quit + dw .AnythingElse +; 15b62 + +.HowMayIHelpYou: ; 15b62 + call LoadStandardMenuDataHeader + ld hl, Text_Mart_HowMayIHelpYou + call PrintText + ld a, $1 ; top menu + ret +; 15b6e + +.TopMenu: ; 15b6e + ld hl, MenuDataHeader_BuySell + call CopyMenuDataHeader + call InterpretMenu2 + jr c, .quit + ld a, [MenuSelection2] + cp $1 + jr z, .buy + cp $2 + jr z, .sell +.quit + ld a, $4 ; Come again! + ret +.buy + ld a, $2 ; buy + ret +.sell + ld a, $3 ; sell + ret +; 15b8d + +.Buy: ; 15b8d + call ExitMenu + call FarReadMart + call BuyMenu + and a + ld a, $5 ; Anything else? + ret +; 15b9a + +.Sell: ; 15b9a + call ExitMenu + call SellMenu + ld a, $5 ; Anything else? + ret +; 15ba3 + +.Quit: ; 15ba3 + call ExitMenu + ld hl, Text_Mart_ComeAgain + call MartTextBox + ld a, $ff ; exit + ret +; 15baf + +.AnythingElse: ; 15baf + call LoadStandardMenuDataHeader + ld hl, Text_Mart_AnythingElse + call PrintText + ld a, $1 ; top menu + ret +; 15bbb + +FarReadMart: ; 15bbb + ld hl, MartPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld de, CurMart +.CopyMart + ld a, [MartPointerBank] + call GetFarByte + ld [de], a + inc hl + inc de + cp -1 + jr nz, .CopyMart + ld hl, wMartItem1BCD + ld de, CurMart + 1 +.ReadMartItem + ld a, [de] + inc de + cp -1 + jr z, .done + push de + call GetMartItemPrice + pop de + jr .ReadMartItem + +.done + ret +; 15be5 + +GetMartItemPrice: ; 15be5 +; Return the price of item a in BCD at hl and in tiles at StringBuffer1. + push hl + ld [CurItem], a + callba GetItemPrice + pop hl + +GetMartPrice: ; 15bf0 +; Return price de in BCD at hl and in tiles at StringBuffer1. + push hl + ld a, d + ld [StringBuffer2], a + ld a, e + ld [StringBuffer2 + 1], a + ld hl, StringBuffer1 + ld de, StringBuffer2 + lb bc, PRINTNUM_LEADINGZEROS | 2, 6 ; 6 digits + call PrintNum + pop hl + + ld de, StringBuffer1 + ld c, 6 / 2 ; 6 digits +.loop + call .CharToNybble + swap a + ld b, a + call .CharToNybble + or b + ld [hli], a + dec c + jr nz, .loop + ret +; 15c1a + +.CharToNybble ; 15c1a + ld a, [de] + inc de + cp " " + jr nz, .not_space + ld a, "0" + +.not_space + sub "0" + ret +; 15c25 + +ReadMart: ; 15c25 +; Load the mart pointer. Mart data is local (no need for bank). + ld hl, MartPointer + ld a, [hli] + ld h, [hl] + ld l, a + push hl +; set hl to the first item + inc hl + ld bc, wMartItem1BCD + ld de, CurMart + 1 +.loop +; copy the item to CurMart + (ItemIndex) + ld a, [hli] + ld [de], a + inc de +; -1 is the terminator + cp -1 + jr z, .done + + push de +; copy the price to de + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a +; convert the price to 3-byte BCD at [bc] + push hl + ld h, b + ld l, c + call GetMartPrice + ld b, h + ld c, l + pop hl + + pop de + jr .loop + +.done + pop hl + ld a, [hl] + ld [CurMart], a + ret +; 15c51 + +BargainShopData: ; 15c51 + db 5 + dbw NUGGET, 4500 + dbw PEARL, 650 + dbw BIG_PEARL, 3500 + dbw STARDUST, 900 + dbw STAR_PIECE, 4600 + db -1 +; 15c62 + + +BuyMenu: ; 15c62 + call FadeToMenu + callba Function8000 + xor a + ld [wd045 + 1], a + ld a, 1 + ld [wd045], a +.loop + call BuyMenuLoop ; menu loop + jr nc, .loop + call Function2b3c + ret +; 15c7d + +LoadBuyMenuText: ; 15c7d +; load text from a nested table +; which table is in EngineBuffer1 +; which entry is in register a + push af + call GetMartDialogGroup ; gets a pointer from GetMartDialogGroup.MartTextFunctionPointers + ld a, [hli] + ld h, [hl] + ld l, a + pop af + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ret +; 15c91 + +MartAskPurchaseQuantity: ; 15c91 + call GetMartDialogGroup ; gets a pointer from GetMartDialogGroup.MartTextFunctionPointers +rept 2 + inc hl +endr + ld a, [hl] + and a + jp z, StandardMartAskPurchaseQuantity + cp 1 + jp z, BargainShopAskPurchaseQuantity + jp RooftopSaleAskPurchaseQuantity +; 15ca3 + +GetMartDialogGroup: ; 15ca3 + ld a, [EngineBuffer1] + ld e, a + ld d, 0 + ld hl, .MartTextFunctionPointers +rept 3 + add hl, de +endr + ret +; 15cb0 + +.MartTextFunctionPointers ; 15cb0 + dwb .StandardMartPointers, 0 + dwb .HerbShopPointers, 0 + dwb .BargainShopPointers, 1 + dwb .PharmacyPointers, 0 + dwb .StandardMartPointers, 2 +; 15cbf + +.StandardMartPointers: ; 15cbf + dw Text_Mart_HowMany + dw Text_Mart_CostsThisMuch + dw Text_Mart_InsufficientFunds + dw Text_Mart_BagFull + dw Text_Mart_HereYouGo + dw BuyMenuLoop + +.HerbShopPointers: ; 15ccb + dw Text_HerbShop_HowMany + dw Text_HerbShop_CostsThisMuch + dw Text_HerbShop_InsufficientFunds + dw Text_HerbShop_BagFull + dw Text_HerbShop_HereYouGo + dw BuyMenuLoop + +.BargainShopPointers: ; 15cd7 + dw BuyMenuLoop + dw Text_BargainShop_CostsThisMuch + dw Text_BargainShop_InsufficientFunds + dw Text_BargainShop_BagFull + dw Text_BargainShop_HereYouGo + dw Text_BargainShop_SoldOut + +.PharmacyPointers: ; 15ce3 + dw Text_Pharmacy_HowMany + dw Text_Pharmacy_CostsThisMuch + dw Text_Pharmacy_InsufficientFunds + dw Text_Pharmacy_BagFull + dw Text_Pharmacy_HereYouGo + dw BuyMenuLoop +; 15cef + + +BuyMenuLoop: ; 15cef + callba Function24ae8 + call UpdateSprites + ld hl, MenuDataHeader_Buy + call CopyMenuDataHeader + ld a, [wd045] + ld [wMenuCursorBuffer], a + ld a, [wd045 + 1] + ld [wd0e4], a + call HandleScrollingMenu + ld a, [wd0e4] + ld [wd045 + 1], a + ld a, [MenuSelection2] + ld [wd045], a + call SpeechTextBox + ld a, [wcf73] + cp B_BUTTON + jr z, .set_carry + cp A_BUTTON + jr z, .useless_pointer + +.useless_pointer + call MartAskPurchaseQuantity + jr c, .cancel + call Function15d97 + jr c, .cancel + ld de, Money + ld bc, hMoneyTemp + ld a, $3 ; useless load + call CompareMoney + jr c, .insufficient_funds + ld hl, NumItems + call ReceiveItem + jr nc, .insufficient_bag_space + ld a, [wMartItemID] + ld e, a + ld d, $0 + ld b, SET_FLAG + ld hl, wBargainShopFlags + call FlagAction + call PlayTransactionSound + ld de, Money + ld bc, hMoneyTemp + call TakeMoney + ld a, MARTTEXT_HERE_YOU_GO + call LoadBuyMenuText + call JoyWaitAorB + +.cancel + call SpeechTextBox + and a + ret + +.set_carry + scf + ret + +.insufficient_bag_space + ld a, MARTTEXT_BAG_FULL + call LoadBuyMenuText + call JoyWaitAorB + and a + ret + +.insufficient_funds + ld a, MARTTEXT_NOT_ENOUGH_MONEY + call LoadBuyMenuText + call JoyWaitAorB + and a + ret +; 15d83 + +StandardMartAskPurchaseQuantity: + ld a, 99 + ld [wItemQuantityBuffer], a + ld a, MARTTEXT_HOW_MANY + call LoadBuyMenuText + callba Function24fc9 + call ExitMenu + ret +; 15d97 + +Function15d97: ; 15d97 + predef PartyMonItemName + ld a, MARTTEXT_COSTS_THIS_MUCH + call LoadBuyMenuText + call YesNoBox + ret +; 15da5 + +BargainShopAskPurchaseQuantity: + ld a, 1 + ld [wItemQuantityChangeBuffer], a + ld a, [wMartItemID] + ld e, a + ld d, $0 + ld b, CHECK_FLAG + ld hl, wBargainShopFlags + call FlagAction + ld a, c + and a + jr nz, .SoldOut + ld a, [wMartItemID] + ld e, a + ld d, $0 + ld hl, MartPointer + ld a, [hli] + ld h, [hl] + ld l, a + inc hl +rept 3 + add hl, de +endr + inc hl + ld a, [hli] + ld [hMoneyTemp + 2], a + ld a, [hl] + ld [hMoneyTemp + 1], a + xor a + ld [hMoneyTemp], a + and a + ret + +.SoldOut + ld a, MARTTEXT_SOLD_OUT + call LoadBuyMenuText + call JoyWaitAorB + scf + ret +; 15de2 + +RooftopSaleAskPurchaseQuantity: + ld a, MARTTEXT_HOW_MANY + call LoadBuyMenuText + call .GetSalePrice + ld a, 99 + ld [wItemQuantityBuffer], a + callba Function24fcf + call ExitMenu + ret +; 15df9 + +.GetSalePrice: ; 15df9 + ld a, [wMartItemID] + ld e, a + ld d, 0 + ld hl, MartPointer + ld a, [hli] + ld h, [hl] + ld l, a + inc hl +rept 3 + add hl, de +endr + inc hl + ld e, [hl] + inc hl + ld d, [hl] + ret +; 15e0e + + +Text_Mart_HowMany: ; 0x15e0e + ; How many? + text_jump UnknownText_0x1c4bfd + db "@" +; 0x15e13 + +Text_Mart_CostsThisMuch: ; 0x15e13 + ; @ (S) will be ¥@ . + text_jump UnknownText_0x1c4c08 + db "@" +; 0x15e18 + +MenuDataHeader_Buy: ; 0x15e18 + db $40 ; flags + db 03, 01 ; start coords + db 11, 19 ; end coords + dw .menudata2 + db 1 ; default option +; 0x15e20 + +.menudata2: ; 0x15e20 + db $30 ; pointers + db 4, 8 ; rows, columns + db 1 ; horizontal spacing + dbw 0, CurMart + dba PlaceMenuItemName + dba .PrintBCDPrices + dba Function244c3 +; 15e30 + +.PrintBCDPrices: ; 15e30 + ld a, [wcf77] + ld c, a + ld b, 0 + ld hl, wMartItem1BCD +rept 3 + add hl, bc +endr + push de + ld d, h + ld e, l + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + ld c, PRINTNUM_LEADINGZEROS | PRINTNUM_MONEY | 3 + call PrintBCDNumber + ret +; 15e4a (5:5e4a) + +Text_HerbShop_Intro: ; 0x15e4a + ; Hello, dear. I sell inexpensive herbal medicine. They're good, but a trifle bitter. Your #MON may not like them. Hehehehe… + text_jump UnknownText_0x1c4c28 + db "@" +; 0x15e4f + +Text_HerbShop_HowMany: ; 0x15e4f + ; How many? + text_jump UnknownText_0x1c4ca3 + db "@" +; 0x15e54 + +Text_HerbShop_CostsThisMuch: ; 0x15e54 + ; @ (S) will be ¥@ . + text_jump UnknownText_0x1c4cae + db "@" +; 0x15e59 + +Text_HerbShop_HereYouGo: ; 0x15e59 + ; Thank you, dear. Hehehehe… + text_jump UnknownText_0x1c4cce + db "@" +; 0x15e5e + +Text_HerbShop_BagFull: ; 0x15e5e + ; Oh? Your PACK is full, dear. + text_jump UnknownText_0x1c4cea + db "@" +; 0x15e63 + +Text_HerbShop_InsufficientFunds: ; 0x15e63 + ; Hehehe… You don't have the money. + text_jump UnknownText_0x1c4d08 + db "@" +; 0x15e68 + +Text_HerbShop_ComeAgain: ; 0x15e68 + ; Come again, dear. Hehehehe… + text_jump UnknownText_0x1c4d2a + db "@" +; 0x15e6d + +Text_BargainShop_Intro: ; 0x15e6d + ; Hiya! Care to see some bargains? I sell rare items that nobody else carries--but only one of each item. + text_jump UnknownText_0x1c4d47 + db "@" +; 0x15e72 + +Text_BargainShop_CostsThisMuch: ; 0x15e72 + ; costs ¥@ . Want it? + text_jump UnknownText_0x1c4db0 + db "@" +; 0x15e77 + +Text_BargainShop_HereYouGo: ; 0x15e77 + ; Thanks. + text_jump UnknownText_0x1c4dcd + db "@" +; 0x15e7c + +Text_BargainShop_BagFull: ; 0x15e7c + ; Uh-oh, your PACK is chock-full. + text_jump UnknownText_0x1c4dd6 + db "@" +; 0x15e81 + +Text_BargainShop_SoldOut: ; 0x15e81 + ; You bought that already. I'm all sold out of it. + text_jump UnknownText_0x1c4df7 + db "@" +; 0x15e86 + +Text_BargainShop_InsufficientFunds: ; 0x15e86 + ; Uh-oh, you're short on funds. + text_jump UnknownText_0x1c4e28 + db "@" +; 0x15e8b + +Text_BargainShop_ComeAgain: ; 0x15e8b + ; Come by again sometime. + text_jump UnknownText_0x1c4e46 + db "@" +; 0x15e90 + +UnknownText_0x15e90: ; 0x15e90 + ; What's up? Need some medicine? + text_jump UnknownText_0x1c4e5f + db "@" +; 0x15e95 + +Text_Pharmacy_HowMany: ; 0x15e95 + ; How many? + text_jump UnknownText_0x1c4e7e + db "@" +; 0x15e9a + +Text_Pharmacy_CostsThisMuch: ; 0x15e9a + ; @ (S) will cost ¥@ . + text_jump UnknownText_0x1c4e89 + db "@" +; 0x15e9f + +Text_Pharmacy_HereYouGo: ; 0x15e9f + ; Thanks much! + text_jump UnknownText_0x1c4eab + db "@" +; 0x15ea4 + +Text_Pharmacy_BagFull: ; 0x15ea4 + ; You don't have any more space. + text_jump UnknownText_0x1c4eb9 + db "@" +; 0x15ea9 + +Text_Pharmacy_InsufficientFunds: ; 0x15ea9 + ; Huh? That's not enough money. + text_jump UnknownText_0x1c4ed8 + db "@" +; 0x15eae + +UnknownText_0x15eae: ; 0x15eae + ; All right. See you around. + text_jump UnknownText_0x1c4ef6 + db "@" +; 0x15eb3 + + +SellMenu: ; 15eb3 + call DisableSpriteUpdates + callba Function106a5 +.asm_15ebc + callba Function106be + ld a, [wcf66] + and a + jp z, Function15ece + call Function15ee0 + jr .asm_15ebc +; 15ece + +Function15ece: ; 15ece + call Function2b74 + and a + ret +; 15ed3 + +Function15ed3: ; unreferenced + ld hl, UnknownText_0x15edb + call MenuTextBoxBackup + and a + ret +; 15edb + +UnknownText_0x15edb: ; 0x15edb + ; You don't have anything to sell. + text_jump UnknownText_0x1c4f12 + db "@" +; 0x15ee0 + + +Function15ee0: ; 15ee0 + callba CheckItemMenu + ld a, [wItemAttributeParamBuffer] + ld hl, .jumptable + rst JumpTable + ret +; 15eee + +.jumptable: ; 15eee + dw .try_sell + dw .cant_buy + dw .cant_buy + dw .cant_buy + dw .try_sell + dw .try_sell + dw .try_sell +; 15efc + +.cant_buy: ; 15efc + ret +; 15efd + + +.try_sell: ; 15efd + callba _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr z, .okay_to_sell + ld hl, TextMart_CantBuyFromYou + call PrintText + and a + ret + +.okay_to_sell + ld hl, Text_Mart_SellHowMany + call PrintText + callba Function24af8 + callba Function24fe1 + call ExitMenu + jr c, .declined + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, Text_Mart_ICanPayThisMuch + call PrintTextBoxText + call YesNoBox + jr c, .declined + ld de, Money + ld bc, hMoneyTemp + call GiveMoney + ld a, [wMartItemID] + ld hl, NumItems + call TossItem + predef PartyMonItemName + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, Text_Mart_SoldForAmount + call PrintTextBoxText + call PlayTransactionSound + callba Function24af0 + call JoyWaitAorB + +.declined + call ExitMenu + and a + ret +; 15f73 + +Text_Mart_SellHowMany: ; 0x15f73 + ; How many? + text_jump UnknownText_0x1c4f33 + db "@" +; 0x15f78 + +Text_Mart_ICanPayThisMuch: ; 0x15f78 + ; I can pay you ¥@ . Is that OK? + text_jump UnknownText_0x1c4f3e + db "@" +; 0x15f7d + +DummyString ; 15f7d + db "!ダミー!@" + +Text_Mart_HowMayIHelpYou: ; 0x15f83 + ; Welcome! How may I help you? + text_jump UnknownText_0x1c4f62 + db "@" +; 0x15f88 + +MenuDataHeader_BuySell: ; 0x15f88 + db $40 ; flags + db 00, 00 ; start coords + db 08, 07 ; end coords + dw .menudata2 + db 1 ; default option +; 0x15f90 + +.menudata2: ; 0x15f90 + db $80 ; strings + db 3 ; items + db "BUY@" + db "SELL@" + db "QUIT@" +; 0x15f96 + +Text_Mart_HereYouGo: ; 0x15fa0 + ; Here you are. Thank you! + text_jump UnknownText_0x1c4f80 + db "@" +; 0x15fa5 + +Text_Mart_InsufficientFunds: ; 0x15fa5 + ; You don't have enough money. + text_jump UnknownText_0x1c4f9a + db "@" +; 0x15faa + +Text_Mart_BagFull: ; 0x15faa + ; You can't carry any more items. + text_jump UnknownText_0x1c4fb7 + db "@" +; 0x15faf + +TextMart_CantBuyFromYou: ; 0x15faf + ; Sorry, I can't buy that from you. + text_jump UnknownText_0x1c4fd7 + db "@" +; 0x15fb4 + +Text_Mart_ComeAgain: ; 0x15fb4 + ; Please come again! + text_jump UnknownText_0x1c4ff9 + db "@" +; 0x15fb9 + +Text_Mart_AnythingElse: ; 0x15fb9 + text_jump UnknownText_0x1c500d + db "@" +; 0x15fbe + +Text_Mart_SoldForAmount: ; 0x15fbe + text_jump UnknownText_0x1c502e + db "@" +; 0x15fc3 + +PlayTransactionSound: ; 15fc3 + call WaitSFX + ld de, SFX_TRANSACTION + call PlaySFX + ret +; 15fcd + +MartTextBox: ; 15fcd + call MenuTextBox + call JoyWaitAorB + call ExitMenu + ret +; 15fd7 diff --git a/engine/menu.asm b/engine/menu.asm new file mode 100755 index 000000000..a1ec30b7a --- /dev/null +++ b/engine/menu.asm @@ -0,0 +1,587 @@ +Function2400e:: ; 2400e + ld hl, CopyMenuData2 + ld a, [wcf94] + rst FarCall + call Function24085 + call UpdateSprites + call Function321c + call Function2408f + ret +; 24022 + +Function24022:: ; 24022 + ld hl, CopyMenuData2 + ld a, [wcf94] + rst FarCall + call Function24085 + callba MobileTextBorder + call UpdateSprites + call Function321c + call Function2408f + ret +; 2403c + +Function2403c:: ; 2403c + ld hl, CopyMenuData2 + ld a, [wcf94] + rst FarCall + call Function24085 + callba MobileTextBorder + call UpdateSprites + call Function321c + call Function2411a + ld hl, wcfa5 + set 7, [hl] +.asm_2405a + call DelayFrame + callba Function10032e + ld a, [wcd2b] + and a + jr nz, .asm_24076 + call Function241ba + ld a, [wcfa8] + and c + jr z, .asm_2405a + call Function24098 + ret + +.asm_24076 + ld a, [wcfa4] + ld c, a + ld a, [wcfa3] + call SimpleMultiply + ld [wMenuCursorBuffer], a + and a + ret +; 24085 + + + +Function24085: ; 24085 + xor a + ld [hBGMapMode], a + call MenuBox + call Function240db + ret +; 2408f + +Function2408f: ; 2408f + call Function2411a + call Function1bc9 + call Function1ff8 + +Function24098: ; 24098 + ld a, [wMenuData2Flags] + bit 1, a + jr z, .asm_240a6 + call Function1bdd + bit 2, a + jr nz, .asm_240c9 + +.asm_240a6 + ld a, [wMenuData2Flags] + bit 0, a + jr nz, .asm_240b4 + call Function1bdd + bit 1, a + jr nz, .asm_240cb + +.asm_240b4 + ld a, [wcfa4] + ld c, a + ld a, [MenuSelection2] + dec a + call SimpleMultiply + ld c, a + ld a, [wcfaa] + add c + ld [wMenuCursorBuffer], a + and a + ret + +.asm_240c9 + scf + ret + +.asm_240cb + scf + ret +; 240cd + +Function240cd: ; 240cd + ld a, [wMenuData2Items] + and $f + ret +; 240d3 + +Function240d3: ; 240d3 + ld a, [wMenuData2Items] + swap a + and $f + ret +; 240db + +Function240db: ; 240db + ld hl, wcf95 + ld e, [hl] + inc hl + ld d, [hl] + call GetMenuTextStartCoord + call Coord2Tile + call Function240d3 + ld b, a +.asm_240eb + push bc + push hl + call Function240cd + ld c, a +.asm_240f1 + push bc + ld a, [wcf94] + call Function201c + inc de + ld a, [wcf93] + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_240f1 + pop hl + ld bc, $28 + add hl, bc + pop bc + dec b + jr nz, .asm_240eb + ld hl, wcf98 + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld a, [wcf97] + rst FarCall + ret +; 2411a + + +Function2411a: ; 2411a (9:411a) + call GetMenuTextStartCoord + ld a, b + ld [wcfa1], a + dec c + ld a, c + ld [wcfa2], a + call Function240d3 + ld [wcfa3], a + call Function240cd + ld [wcfa4], a + call Function24179 + call Function2418a + call Function24193 + ld a, [wcfa4] + ld e, a + ld a, [wMenuCursorBuffer] + ld b, a + xor a + ld d, $0 +.asm_24146 + inc d + add e + cp b + jr c, .asm_24146 + sub e + ld c, a + ld a, b + sub c + and a + jr z, .asm_24157 + cp e + jr z, .asm_24159 + jr c, .asm_24159 +.asm_24157 + ld a, $1 +.asm_24159 + ld [wcfaa], a + ld a, [wcfa3] + ld e, a + ld a, d + and a + jr z, .asm_24169 + cp e + jr z, .asm_2416b + jr c, .asm_2416b +.asm_24169 + ld a, $1 +.asm_2416b + ld [MenuSelection2], a + xor a + ld [wcfab], a + ld [wcfac], a + ld [wcfad], a + ret +; 24179 + +Function24179: ; 24179 + xor a + ld hl, wcfa5 + ld [hli], a + ld [hld], a + ld a, [wMenuData2Flags] + bit 5, a + ret z + set 5, [hl] + set 4, [hl] + ret +; 2418a + +Function2418a: ; 2418a + ld a, [wcf93] + or $20 + ld [wcfa7], a + ret +; 24193 + +Function24193: ; 24193 + ld hl, wMenuData2Flags + ld a, $1 + bit 0, [hl] + jr nz, .asm_2419e + or $2 + +.asm_2419e + bit 1, [hl] + jr z, .asm_241a4 + or $4 + +.asm_241a4 + ld [wcfa8], a + ret +; 241a8 + + +Function241a8:: ; 241a8 + call Function24329 +Function241ab:: ; 241ab + ld hl, wcfa6 + res 7, [hl] + ld a, [hBGMapMode] + push af + call Function24216 + pop af + ld [hBGMapMode], a + ret +; 241ba + +Function241ba: ; 241ba + ld hl, wcfa6 + res 7, [hl] + ld a, [hBGMapMode] + push af + call Function2431a + call Function24249 + jr nc, .asm_241cd + call Function24270 + +.asm_241cd + pop af + ld [hBGMapMode], a + call Function1bdd + ld c, a + ret +; 241d5 + + +Function241d5: ; 241d5 + call Function24329 +.loop + call Function2431a + call Function10402d ; BUG: This function is in another bank. + ; Pointer in current bank (9) is bogus. + call Function241fa + jr nc, .done + call Function24270 + jr c, .done + ld a, [wcfa5] + bit 7, a + jr nz, .done + call Function1bdd + ld c, a + ld a, [wcfa8] + and c + jr z, .loop + +.done + ret +; 241fa + +Function241fa: ; 241fa +.loop + call Function24259 + ret c + ld c, 1 + ld b, 3 + call Function10062d ; BUG: This function is in another bank. + ; Pointer in current bank (9) is bogus. + ret c + callba Function100337 + ret c + ld a, [wcfa5] + bit 7, a + jr z, .loop + and a + ret +; 24216 + + +Function24216: ; 24216 +.asm_24216 + call Function2431a + call Function24238 + call Function24249 + jr nc, .asm_24237 + call Function24270 + jr c, .asm_24237 + ld a, [wcfa5] + bit 7, a + jr nz, .asm_24237 + call Function1bdd + ld b, a + ld a, [wcfa8] + and b + jr z, .asm_24216 + +.asm_24237 + ret +; 24238 + +Function24238: ; 24238 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call WaitBGMap + pop af + ld [hOAMUpdate], a + xor a + ld [hBGMapMode], a + ret +; 24249 + +Function24249: ; 24249 +.asm_24249 + call RTC + call Function24259 + ret c + ld a, [wcfa5] + bit 7, a + jr z, .asm_24249 + and a + ret +; 24259 + +Function24259: ; 24259 + ld a, [wcfa5] + bit 6, a + jr z, .asm_24266 + callab Function8cf62 + +.asm_24266 + call JoyTextDelay + call Function1bdd + and a + ret z + scf + ret +; 24270 + +Function24270: ; 24270 + call Function1bdd + bit 0, a + jp nz, Function24318 + bit 1, a + jp nz, Function24318 + bit 2, a + jp nz, Function24318 + bit 3, a + jp nz, Function24318 + bit 4, a + jr nz, .asm_242fa + bit 5, a + jr nz, .asm_242dc + bit 6, a + jr nz, .asm_242be + bit 7, a + jr nz, .asm_242a0 + and a + ret + +.asm_24299: ; 24299 + ld hl, wcfa6 + set 7, [hl] + scf + ret + +.asm_242a0 + ld hl, MenuSelection2 + ld a, [wcfa3] + cp [hl] + jr z, .asm_242ac + inc [hl] + xor a + ret + +.asm_242ac + ld a, [wcfa5] + bit 5, a + jr nz, .asm_242ba + bit 3, a + jp nz, .asm_24299 + xor a + ret + +.asm_242ba + ld [hl], $1 + xor a + ret + +.asm_242be + ld hl, MenuSelection2 + ld a, [hl] + dec a + jr z, .asm_242c8 + ld [hl], a + xor a + ret + +.asm_242c8 + ld a, [wcfa5] + bit 5, a + jr nz, .asm_242d6 + bit 2, a + jp nz, .asm_24299 + xor a + ret + +.asm_242d6 + ld a, [wcfa3] + ld [hl], a + xor a + ret + +.asm_242dc + ld hl, wcfaa + ld a, [hl] + dec a + jr z, .asm_242e6 + ld [hl], a + xor a + ret + +.asm_242e6 + ld a, [wcfa5] + bit 4, a + jr nz, .asm_242f4 + bit 1, a + jp nz, .asm_24299 + xor a + ret + +.asm_242f4 + ld a, [wcfa4] + ld [hl], a + xor a + ret + +.asm_242fa + ld hl, wcfaa + ld a, [wcfa4] + cp [hl] + jr z, .asm_24306 + inc [hl] + xor a + ret + +.asm_24306 + ld a, [wcfa5] + bit 4, a + jr nz, .asm_24314 + bit 0, a + jp nz, .asm_24299 + xor a + ret + +.asm_24314 + ld [hl], $1 + xor a + ret +; 24318 + +Function24318: ; 24318 + xor a + ret +; 2431a + +Function2431a: ; 2431a + ld hl, wcfac + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hl] + cp $ed + jr nz, Function24329 + ld a, [wcfab] + ld [hl], a + +Function24329: ; 24329 + ld a, [wcfa1] + ld b, a + ld a, [wcfa2] + ld c, a + call Coord2Tile + ld a, [wcfa7] + swap a + and $f + ld c, a + ld a, [MenuSelection2] + ld b, a + xor a + dec b + jr z, .asm_24348 +.asm_24344 + add c + dec b + jr nz, .asm_24344 + +.asm_24348 + ld c, $14 + call AddNTimes + ld a, [wcfa7] + and $f + ld c, a + ld a, [wcfaa] + ld b, a + xor a + dec b + jr z, .asm_2435f +.asm_2435b + add c + dec b + jr nz, .asm_2435b + +.asm_2435f + ld c, a + add hl, bc + ld a, [hl] + cp $ed + jr z, .asm_2436b + ld [wcfab], a + ld [hl], $ed + +.asm_2436b + ld a, l + ld [wcfac], a + ld a, h + ld [wcfad], a + ret +; 24374 diff --git a/engine/movement.asm b/engine/movement.asm index 0a6851ed4..21dd89e9f 100644 --- a/engine/movement.asm +++ b/engine/movement.asm @@ -61,32 +61,32 @@ MovementPointers: ; 5075 dw Movement_fix_facing ; 3b dw Movement_3c ; 3c dw Movement_hide_person ; 3d - dw Movement_show_person ; 3e - dw Movement_3f ; 3f - dw Movement_40 ; 40 - dw Movement_41 ; 41 - dw Movement_42 ; 42 - dw Movement_43 ; 43 - dw Movement_44 ; 44 - dw Movement_accelerate_last ; 45 + dw Movement_step_sleep_1 ; 3e + dw Movement_step_sleep_2 ; 3f + dw Movement_step_sleep_3 ; 40 + dw Movement_step_sleep_4 ; 41 + dw Movement_step_sleep_5 ; 42 + dw Movement_step_sleep_6 ; 43 + dw Movement_step_sleep_7 ; 44 + dw Movement_step_sleep_8 ; 45 dw Movement_step_sleep ; 46 dw Movement_step_end ; 47 dw Movement_48 ; 48 dw Movement_remove_person ; 49 - dw Movement_4a ; 4a + dw Movement_step_loop ; 4a dw Movement_4b ; 4b dw Movement_teleport_from ; 4c dw Movement_teleport_to ; 4d dw Movement_skyfall ; 4e dw Movement_step_wait5 ; 4f dw Movement_50 ; 50 - dw Movement_51 ; 51 - dw Movement_52 ; 52 + dw Movement_fish_got_bite ; 51 + dw Movement_fish_cast_rod ; 52 dw Movement_hide_emote ; 53 dw Movement_show_emote ; 54 dw Movement_step_shake ; 55 dw Movement_56 ; 56 - dw Movement_57 ; 57 + dw Movement_rock_smash ; 57 dw Movement_58 ; 58 dw Movement_59 ; 59 ; 5129 @@ -139,7 +139,7 @@ Movement_step_wait5: ; 5145 ld [hl], $3 ld hl, OBJECT_DIRECTION_WALKING add hl, bc - ld [hl], $ff + ld [hl], STANDING ret ; 516a @@ -156,14 +156,14 @@ Movement_58: ; 516a ld [hl], a ld hl, OBJECT_DIRECTION_WALKING add hl, bc - ld [hl], $ff + ld [hl], STANDING ld hl, OBJECT_09 add hl, bc ld [hl], $12 ret ; 5189 -Movement_51: ; 5189 +Movement_fish_got_bite: ; 5189 ld hl, OBJECT_11 add hl, bc ld [hl], $6 @@ -173,7 +173,7 @@ Movement_51: ; 5189 ret ; 5196 -Movement_57: ; 5196 +Movement_rock_smash: ; 5196 call GetMovementByte ld hl, OBJECT_STEP_DURATION add hl, bc @@ -187,7 +187,7 @@ Movement_57: ; 5196 ret ; 51ab -Movement_52: ; 51ab +Movement_fish_cast_rod: ; 51ab ld hl, OBJECT_11 add hl, bc ld [hl], $6 @@ -197,11 +197,11 @@ Movement_52: ; 51ab ret ; 51b8 -Movement_4a: ; 51b8 - ld hl, OBJECT_27 +Movement_step_loop: ; 51b8 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld [hl], $0 - jp Function5065 + jp ContinueReadingMovement ; 51c1 Movement_step_end: ; 51c1 @@ -209,11 +209,14 @@ Movement_step_end: ; 51c1 ld hl, OBJECT_MOVEMENTTYPE add hl, bc ld [hl], a - ld hl, OBJECT_27 + + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld [hl], $0 + ld hl, VramState res 7, [hl] + ld hl, OBJECT_09 add hl, bc ld [hl], $1 @@ -225,16 +228,20 @@ Movement_48: ; 51db ld hl, OBJECT_MOVEMENTTYPE add hl, bc ld [hl], a - ld hl, OBJECT_27 + + ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld [hl], $0 + call GetMovementByte ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a + ld hl, OBJECT_09 add hl, bc ld [hl], $3 + ld hl, VramState res 7, [hl] ret @@ -245,10 +252,10 @@ Movement_remove_person: ; 51fd ld hl, wObjectFollow_Leader ld a, [hMapObjectIndexBuffer] cp [hl] - jr nz, .asm_520a - ld [hl], $ff + jr nz, .not_leading + ld [hl], -1 -.asm_520a +.not_leading ld hl, VramState res 7, [hl] ret @@ -258,43 +265,45 @@ Movement_4b: ; 5210 ld hl, OBJECT_11 add hl, bc ld [hl], $1 + ld hl, OBJECT_09 add hl, bc ld [hl], $4 + ld hl, VramState res 7, [hl] ret ; 5222 -Movement_show_person: ; 5222 +Movement_step_sleep_1: ; 5222 ld a, $1 jr Function5247 -Movement_3f: ; 5226 +Movement_step_sleep_2: ; 5226 ld a, $2 jr Function5247 -Movement_40: ; 522a +Movement_step_sleep_3: ; 522a ld a, $3 jr Function5247 -Movement_41: ; 522e +Movement_step_sleep_4: ; 522e ld a, $4 jr Function5247 -Movement_42: ; 5232 +Movement_step_sleep_5: ; 5232 ld a, $5 jr Function5247 -Movement_43: ; 5236 +Movement_step_sleep_6: ; 5236 ld a, $6 jr Function5247 -Movement_44: ; 523a +Movement_step_sleep_7: ; 523a ld a, $7 jr Function5247 -Movement_accelerate_last: ; 523e +Movement_step_sleep_8: ; 523e ld a, $8 jr Function5247 @@ -309,15 +318,18 @@ Function5247: ; 5247 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a + ld hl, OBJECT_09 add hl, bc ld [hl], $3 + ld hl, OBJECT_11 add hl, bc ld [hl], $1 + ld hl, OBJECT_DIRECTION_WALKING add hl, bc - ld [hl], $ff + ld [hl], STANDING ret ; 525f @@ -334,7 +346,7 @@ Movement_50: ; 525f ld [hl], $3 ld hl, OBJECT_DIRECTION_WALKING add hl, bc - ld [hl], $ff + ld [hl], STANDING ret ; 5279 @@ -351,7 +363,7 @@ Movement_56: ; 5279 ld [hl], $b ld hl, OBJECT_DIRECTION_WALKING add hl, bc - ld [hl], $ff + ld [hl], STANDING ret ; 5293 @@ -359,52 +371,52 @@ Movement_38: ; 5293 ld hl, OBJECT_FLAGS1 add hl, bc res 3, [hl] - jp Function5065 + jp ContinueReadingMovement ; 529c Movement_39: ; 529c ld hl, OBJECT_FLAGS1 add hl, bc set 3, [hl] - jp Function5065 + jp ContinueReadingMovement ; 52a5 Movement_remove_fixed_facing: ; 52a5 ld hl, OBJECT_FLAGS1 add hl, bc res 2, [hl] - jp Function5065 + jp ContinueReadingMovement ; 52ae Movement_fix_facing: ; 52ae ld hl, OBJECT_FLAGS1 add hl, bc set 2, [hl] - jp Function5065 + jp ContinueReadingMovement ; 52b7 Movement_3c: ; 52b7 ld hl, OBJECT_FLAGS1 add hl, bc res 0, [hl] - jp Function5065 + jp ContinueReadingMovement ; 52c0 Movement_hide_person: ; 52c0 ld hl, OBJECT_FLAGS1 add hl, bc set 0, [hl] - jp Function5065 + jp ContinueReadingMovement ; 52c9 Movement_hide_emote: ; 52c9 call Function5579 - jp Function5065 + jp ContinueReadingMovement ; 52cf Movement_show_emote: ; 52cf call Function5547 - jp Function5065 + jp ContinueReadingMovement ; 52d5 Movement_step_shake: ; 52d5 @@ -413,7 +425,7 @@ Movement_step_shake: ; 52d5 call GetMovementByte call Function5565 - jp Function5065 + jp ContinueReadingMovement ; 52de Movement_turn_head_down: ; 52de @@ -441,7 +453,7 @@ TurnHead: ; 52ee ld [hl], $1 ld hl, OBJECT_DIRECTION_WALKING add hl, bc - ld [hl], $ff + ld [hl], STANDING ret ; 5300 diff --git a/engine/namingscreen.asm b/engine/namingscreen.asm new file mode 100755 index 000000000..21ec969b4 --- /dev/null +++ b/engine/namingscreen.asm @@ -0,0 +1,959 @@ +_NamingScreen: ; 0x116b7 + call DisableSpriteUpdates + call NamingScreen + call Function2b74 + ret +; 0x116c1 + +NamingScreen: ; 116c1 + ld hl, wc6d0 + ld [hl], e + inc hl + ld [hl], d + ld hl, wc6d4 + ld [hl], b + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + call Function116f8 + call DelayFrame +.asm_116e5 + call Function11915 + jr nc, .asm_116e5 + pop af + ld [hInMenu], a + pop af + ld [hMapAnims], a + pop af + ld [Options], a + call ClearJoypad + ret +; 116f8 + +Function116f8: ; 116f8 + call ClearBGPalettes + ld b, $8 + call GetSGBLayout + call DisableLCD + call Function11c51 + call Function118a8 + ld a, $e3 + ld [rLCDC], a + call Function1171d + call WaitBGMap + call WaitTop + call SetPalettes + call Function11be0 + ret +; 1171d + +Function1171d: ; 1171d + ld a, [wc6d4] + and 7 + ld e, a + ld d, 0 + ld hl, Jumptable_1172e +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 1172e + + +Jumptable_1172e: ; 1172e (4:572e) + dw Function1173e + dw Function1178d + dw Function117ae + dw Function117d1 + dw Function117f5 + dw Function1182c + dw Function1173e + dw Function1173e + + +Function1173e: ; 1173e (4:573e) + ld a, [CurPartySpecies] + ld [wd265], a + ld hl, Function8e83f + ld a, BANK(Function8e83f) + ld e, $1 + rst FarCall ; ; indirect jump to Function8e83f (8e83f (23:683f)) + ld a, [CurPartySpecies] + ld [wd265], a + call GetPokemonName + hlcoord 5, 2 + call PlaceString + ld l, c + ld h, b + ld de, Strings_11780 + call PlaceString + inc de + hlcoord 5, 4 + call PlaceString + callba GetGender + jr c, .asm_1177c + ld a, $ef + jr nz, .asm_11778 + ld a, $f5 +.asm_11778 + hlcoord 1, 2 + ld [hl], a +.asm_1177c + call Function1187b + ret +; 11780 (4:5780) + +Strings_11780: ; 11780 + db "'S@" + db "NICKNAME?@" +; 1178d + +Function1178d: ; 1178d (4:578d) + callba GetPlayerIcon + call Function11847 + hlcoord 5, 2 + ld de, String_117a3 + call PlaceString + call Function11882 + ret +; 117a3 (4:57a3) + +String_117a3: ; 117a3 + db "YOUR NAME?@" +; 117ae + +Function117ae: ; 117ae (4:57ae) + ld de, SilverSpriteGFX + ld b, BANK(SilverSpriteGFX) + call Function11847 + hlcoord 5, 2 + ld de, String_117c3 + call PlaceString + call Function11882 + ret +; 117c3 (4:57c3) + +String_117c3: ; 117c3 + db "RIVAL'S NAME?@" +; 117d1 + +Function117d1: ; 117d1 (4:57d1) + ld de, MomSpriteGFX + ld b, BANK(MomSpriteGFX) + call Function11847 + hlcoord 5, 2 + ld de, String_117e6 + call PlaceString + call Function11882 + ret +; 117e6 (4:57e6) + +String_117e6: ; 117e6 + db "MOTHER'S NAME?@" +; 117f5 + +Function117f5: ; 117f5 (4:57f5) + ld de, PokeBallSpriteGFX + ld hl, VTiles0 tile $00 + lb bc, BANK(PokeBallSpriteGFX), $4 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], a + ld de, $2420 + ld a, $a + call Function3b2a + ld hl, $1 + add hl, bc + ld [hl], $0 + hlcoord 5, 2 + ld de, String_11822 + call PlaceString + call Function11889 + ret +; 11822 (4:5822) + +String_11822: ; 11822 + db "BOX NAME?@" +; 1182c + +Function1182c: ; 1182c (4:582c) + hlcoord 3, 2 + ld de, String_11839 + call PlaceString + call Function11882 + ret +; 11839 (4:5839) + +String_11839: ; 11839 + db "おともだち の なまえは?@" +; 11847 + +Function11847: ; 11847 (4:5847) + push de + ld hl, VTiles0 tile $00 + ld c, $4 + push bc + call Request2bpp + pop bc + ld hl, $c0 + add hl, de + ld e, l + ld d, h + ld hl, VTiles0 tile $04 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], a + pop de + ld b, $a + ld a, d + cp $7a + jr nz, .asm_11873 + ld a, e + cp $40 + jr nz, .asm_11873 + ld b, $1e +.asm_11873 + ld a, b + ld de, $2420 + call Function3b2a + ret + +Function1187b: ; 1187b (4:587b) + ld a, $a + hlcoord 5, 6 + jr Function11890 + +Function11882: ; 11882 (4:5882) + ld a, $7 + hlcoord 5, 6 + jr Function11890 + +Function11889: ; 11889 (4:5889) + ld a, $8 + hlcoord 5, 4 + jr Function11890 + +Function11890: ; 11890 (4:5890) + ld [wc6d3], a + ld a, l + ld [wc6d8], a + ld a, h + ld [wc6d9], a + ret + + +Function1189c: ; 1189c + push bc + push af + ld a, [wc6d4] + sub $3 + ld b, a + pop af + dec b + pop bc + ret +; 118a8 + +Function118a8: ; 118a8 + call WaitTop + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $60 + call ByteFill + hlcoord 1, 1 + lb bc, 6, 18 + call Function1189c + jr nz, .asm_118c4 + lb bc, 4, 18 + +.asm_118c4 + call ClearBox + ld de, NameInputUpper +Function118ca: ; 118ca + call Function1189c + jr nz, .asm_118d5 + ld hl, BoxNameInputLower - NameInputLower + add hl, de + ld d, h + ld e, l + +.asm_118d5 + push de + hlcoord 1, 8 + lb bc, 7, 18 + call Function1189c + jr nz, .asm_118e7 + hlcoord 1, 6 + lb bc, 9, 18 + +.asm_118e7 + call ClearBox + hlcoord 1, 16 + lb bc, 1, 18 + call ClearBox + pop de + hlcoord 2, 8 + ld b, $5 + call Function1189c + jr nz, .asm_11903 + hlcoord 2, 6 + ld b, $6 + +.asm_11903 + ld c, $11 +.asm_11905 + ld a, [de] + ld [hli], a + inc de + dec c + jr nz, .asm_11905 + push de + ld de, $17 + add hl, de + pop de + dec b + jr nz, .asm_11903 + ret +; 11915 + +Function11915: ; 11915 + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_11930 + call Function11968 + callba Function8cf62 + call Function11940 + call DelayFrame + and a + ret + +.asm_11930 + callab Function8cf53 + call ClearSprites + xor a + ld [hSCX], a + ld [hSCY], a + scf + ret +; 11940 + +Function11940: ; 11940 + xor a + ld [hBGMapMode], a + hlcoord 1, 5 + call Function1189c + jr nz, .asm_1194e + hlcoord 1, 3 + +.asm_1194e + lb bc, 1, 18 + call ClearBox + ld hl, wc6d0 + ld e, [hl] + inc hl + ld d, [hl] + ld hl, wc6d8 + ld a, [hli] + ld h, [hl] + ld l, a + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret +; 11968 + +Function11968: ; 11968 + ld a, [wJumptableIndex] + ld e, a + ld d, $0 + ld hl, Jumptable_11977 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 11977 + + +Jumptable_11977: ; 11977 (4:5977) + dw Function1197b + dw Function119a1 + + +Function1197b: ; 1197b (4:597b) + lb de, $50, $18 + call Function1189c + jr nz, .asm_11985 + ld d, $40 +.asm_11985 + ld a, $2 + call Function3b2a + ld a, c + ld [wc6d5], a + ld a, b + ld [wc6d6], a + ld hl, $1 + add hl, bc + ld a, [hl] + ld hl, $e + add hl, bc + ld [hl], a + ld hl, wJumptableIndex + inc [hl] + ret + +Function119a1: ; 119a1 (4:59a1) + ld hl, hJoyPressed ; $ffa7 + ld a, [hl] + and A_BUTTON + jr nz, .a + ld a, [hl] + and B_BUTTON + jr nz, .b + ld a, [hl] + and START + jr nz, .start + ld a, [hl] + and SELECT + jr nz, .select + ret + +.a + call Function11a0b + cp $1 + jr z, .select + cp $2 + jr z, .b + cp $3 + jr z, .asm_119eb + call Function11c11 + call Function11b14 + ret nc + +.start + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + ld hl, $c + add hl, bc + ld [hl], $8 + ld hl, $d + add hl, bc + ld [hl], $4 + call Function1189c + ret nz + inc [hl] + ret + +.b + call Function11bbc + ret + +.asm_119eb + call Function11bf7 + ld hl, wJumptableIndex + set 7, [hl] + ret + +.select + ld hl, wcf64 + ld a, [hl] + xor 1 + ld [hl], a + jr z, .asm_11a04 + ld de, NameInputLower + call Function118ca + ret + +.asm_11a04 + ld de, NameInputUpper + call Function118ca + ret + +Function11a0b: ; 11a0b (4:5a0b) + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + +Function11a11: ; 11a11 (4:5a11) + ld hl, $d + add hl, bc + ld a, [hl] + push bc + ld b, $4 + call Function1189c + jr nz, .asm_11a1f + inc b +.asm_11a1f + cp b + pop bc + jr nz, .asm_11a39 + ld hl, $c + add hl, bc + ld a, [hl] + cp $3 + jr c, .asm_11a33 + cp $6 + jr c, .asm_11a36 + ld a, $3 + ret +.asm_11a33 + ld a, $1 + ret +.asm_11a36 + ld a, $2 + ret +.asm_11a39 + xor a + ret + +Function11a3b: ; 11a3b (4:5a3b) + call Function11a8b + ld hl, $d + add hl, bc + ld a, [hl] + ld e, a + swap e + ld hl, $7 + add hl, bc + ld [hl], e + ld d, $4 + call Function1189c + jr nz, .asm_11a53 + inc d +.asm_11a53 + cp d + ld de, Unknown_11a79 + ld a, $0 + jr nz, .asm_11a60 + ld de, Unknown_11a82 + ld a, $1 +.asm_11a60 + ld hl, $e + add hl, bc + add [hl] + ld hl, $1 + add hl, bc + ld [hl], a + ld hl, $c + add hl, bc + ld l, [hl] + ld h, $0 + add hl, de + ld a, [hl] + ld hl, $6 + add hl, bc + ld [hl], a + ret +; 11a79 (4:5a79) + +Unknown_11a79: ; 11a79 + db $00, $10, $20, $30, $40, $50, $60, $70, $80 +Unknown_11a82: ; 11a82 + db $00, $00, $00, $30, $30, $30, $60, $60, $60 +; 11a8b + +Function11a8b: ; 11a8b (4:5a8b) + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up + ld a, [hl] + and D_DOWN + jr nz, .down + ld a, [hl] + and D_LEFT + jr nz, .left + ld a, [hl] + and D_RIGHT + jr nz, .right + ret +.right + call Function11a11 + and a + jr nz, .asm_11ab7 + ld hl, $c + add hl, bc + ld a, [hl] + cp $8 + jr nc, .asm_11ab4 + inc [hl] + ret +.asm_11ab4 + ld [hl], $0 + ret +.asm_11ab7 + cp $3 + jr nz, .asm_11abc + xor a +.asm_11abc + ld e, a + add a + add e + ld hl, $c + add hl, bc + ld [hl], a + ret +.left + call Function11a11 + and a + jr nz, .asm_11ad8 + ld hl, $c + add hl, bc + ld a, [hl] + and a + jr z, .asm_11ad5 + dec [hl] + ret +.asm_11ad5 + ld [hl], $8 + ret +.asm_11ad8 + cp $1 + jr nz, .asm_11ade + ld a, $4 +.asm_11ade +rept 2 + dec a +endr + ld e, a + add a + add e + ld hl, $c + add hl, bc + ld [hl], a + ret +.down + ld hl, $d + add hl, bc + ld a, [hl] + call Function1189c + jr nz, .asm_11af9 + cp $5 + jr nc, .asm_11aff + inc [hl] + ret +.asm_11af9 + cp $4 + jr nc, .asm_11aff + inc [hl] + ret +.asm_11aff + ld [hl], $0 + ret +.up + ld hl, $d + add hl, bc + ld a, [hl] + and a + jr z, .asm_11b0c + dec [hl] + ret +.asm_11b0c + ld [hl], $4 + call Function1189c + ret nz + inc [hl] + ret + +Function11b14: ; 11b14 (4:5b14) + ld a, [wc6d7] + +Function11b17: ; 11b17 (4:5b17) + ld a, [wc6d3] + ld c, a + ld a, [wc6d2] + cp c + ret nc + + ld a, [wc6d7] + +Function11b23: ; 11b23 + call Function11bd0 + ld [hl], a + +Function11b27: ; 11b27 + ld hl, wc6d2 + inc [hl] + call Function11bd0 + ld a, [hl] + cp $50 + jr z, .asm_11b37 + ld [hl], $f2 + and a + ret +.asm_11b37 + scf + ret +; 11b39 (4:5b39) + +Function11b39: ; 11b39 + ld a, [wc6d2] + and a + ret z + push hl + ld hl, wc6d2 + dec [hl] + call Function11bd0 + ld c, [hl] + pop hl + +.asm_11b48 + ld a, [hli] + cp $ff + jr z, Function11b27 + cp c + jr z, .asm_11b53 + inc hl + jr .asm_11b48 + +.asm_11b53 + ld a, [hl] + jr Function11b23 +; 11b56 + +Dakutens: ; Dummied out + db "かが", "きぎ", "くぐ", "けげ", "こご" + db "さざ", "しじ", "すず", "せぜ", "そぞ" + db "ただ", "ちぢ", "つづ", "てで", "とど" + db "はば", "ひび", "ふぶ", "へべ", "ほぼ" + db "カガ", "キギ", "クグ", "ケゲ", "コゴ" + db "サザ", "シジ", "スズ", "セゼ", "ソゾ" + db "タダ", "チヂ", "ツヅ", "テデ", "トド" + db "ハバ", "ヒビ", "フブ", "へべ", "ホボ" + db $ff + +Handakutens: ; Dummied out + db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ" + db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ" + db $ff +; 11bbc + +Function11bbc: ; 11bbc (4:5bbc) + ld hl, wc6d2 + ld a, [hl] + and a + ret z + dec [hl] + call Function11bd0 + ld [hl], $f2 + inc hl + ld a, [hl] + cp $f2 + ret nz + ld [hl], $eb + ret + +Function11bd0: ; 11bd0 (4:5bd0) + push af + ld hl, wc6d0 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wc6d2] + ld e, a + ld d, 0 + add hl, de + pop af + ret +; 11be0 + +Function11be0: ; 11be0 +; load $f2, ($eb * [wc6d3]), $50 into the dw address at wc6d0 + ld hl, wc6d0 + ld a, [hli] + ld h, [hl] + ld l, a + ld [hl], "·" + inc hl + ld a, [wc6d3] + dec a + ld c, a + ld a, "→" +.loop + ld [hli], a + dec c + jr nz, .loop + ld [hl], "@" + ret +; 11bf7 + + +Function11bf7: ; 11bf7 (4:5bf7) + ld hl, wc6d0 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wc6d3] + ld c, a +.asm_11c01 + ld a, [hl] + cp $eb + jr z, .asm_11c0a + cp $f2 + jr nz, .asm_11c0c +.asm_11c0a + ld [hl], $50 +.asm_11c0c + inc hl + dec c + jr nz, .asm_11c01 + ret + +Function11c11: ; 11c11 (4:5c11) + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + ld hl, $6 + add hl, bc + ld a, [hl] + ld hl, $4 + add hl, bc + add [hl] + sub $8 + srl a + srl a + srl a + ld e, a + ld hl, $7 + add hl, bc + ld a, [hl] + ld hl, $5 + add hl, bc + add [hl] + sub $10 + srl a + srl a + srl a + ld d, a + hlcoord 0, 0 + ld bc, $14 +.asm_11c43 + ld a, d + and a + jr z, .asm_11c4b + add hl, bc + dec d + jr .asm_11c43 +.asm_11c4b + add hl, de + ld a, [hl] + ld [wc6d7], a + ret + + +Function11c51: ; 11c51 + call ClearSprites + callab Function8cf53 + call LoadStandardFont + call LoadFontsExtra + + ld de, GFX_11e65 + ld hl, VTiles1 tile $6b + lb bc, BANK(GFX_11e65), 1 + call Get1bpp + + ld de, GFX_11e6d + ld hl, VTiles1 tile $72 + lb bc, BANK(GFX_11e6d), 1 + call Get1bpp + + ld de, VTiles2 tile $60 + ld hl, GFX_11cb7 + ld bc, $10 + ld a, BANK(GFX_11cb7) + call FarCopyBytes + + ld de, VTiles0 tile $7e + ld hl, GFX_11cc7 + ld bc, $20 + ld a, BANK(GFX_11cc7) + call FarCopyBytes + + ld a, $5 + ld hl, wc312 + ld [hli], a + ld [hl], $7e + xor a + ld [hSCY], a + ld [wc3bf], a + ld [hSCX], a + ld [wc3c0], a + ld [wJumptableIndex], a + ld [wcf64], a + ld [hBGMapMode], a + ld [wc6d2], a + ld a, $7 + ld [hWX], a + ret +; 11cb7 + +GFX_11cb7: ; 11cb7 +INCBIN "gfx/unknown/011cb7.2bpp" +; 11cc7 + +GFX_11cc7: ; 11cc7 +INCBIN "gfx/unknown/011cc7.2bpp" +; 11ce7 + +NameInputLower: + db "a b c d e f g h i" + db "j k l m n o p q r" + db "s t u v w x y z " + db "× ( ) : ; [ ] <PK> <MN>" + db "UPPER DEL END " +BoxNameInputLower: + db "a b c d e f g h i" + db "j k l m n o p q r" + db "s t u v w x y z " + db "é 'd 'l 'm 'r 's 't 'v 0" + db "1 2 3 4 5 6 7 8 9" + db "UPPER DEL END " +NameInputUpper: ; Unreferenced? + db "A B C D E F G H I" + db "J K L M N O P Q R" + db "S T U V W X Y Z " + db "- ? ! / . , " + db "lower DEL END " +BoxNameInputUpper: + db "A B C D E F G H I" + db "J K L M N O P Q R" + db "S T U V W X Y Z " + db "× ( ) : ; [ ] <PK> <MN>" + db "- ? ! ♂ ♀ / . , &" + db "lower DEL END " +; 11e5d + +GFX_11e5d: ; ???? +INCBIN "gfx/unknown/011e5d.2bpp" +; 11e6d + +GFX_11e65: +INCBIN "gfx/unknown/011e65.2bpp" +; 11e6d + +GFX_11e6d: ; 11e6d +INCBIN "gfx/unknown/011e6d.2bpp" +; 11e75 diff --git a/engine/pack.asm b/engine/pack.asm index b753d6ade..2ba9c9d3a 100644 --- a/engine/pack.asm +++ b/engine/pack.asm @@ -44,7 +44,7 @@ Jumptable_10030: ; 10030 (4:4030) Function10046: ; 10046 (4:4046) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function10955 ld a, [wcf64] ld [wJumptableIndex], a @@ -67,10 +67,10 @@ Function10067: ; 10067 (4:4067) ld [wMenuCursorBuffer], a ld a, [wd0df] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0df], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wItemsPocketCursor], a ld b, $7 ld c, $3 @@ -95,10 +95,10 @@ Function100a6: ; 100a6 (4:40a6) ld [wMenuCursorBuffer], a ld a, [wd0e0] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0e0], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wKeyItemsPocketCursor], a ld b, $3 ld c, $7 @@ -113,7 +113,7 @@ Function100d3: ; 100d3 (4:40d3) call ClearPocketList call DrawPocketName xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call WaitBGMap_DrawPackGFX call Function10866 ret @@ -141,7 +141,7 @@ Function100e8: ; 100e8 (4:40e8) call ExitMenu pop hl ret c - ld a, [wcfa9] + ld a, [MenuSelection2] dec a call Function1086b jp [hl] @@ -203,7 +203,7 @@ Function10159: ; 10159 ld [Options], a .asm_10179 xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function10955 call WaitBGMap_DrawPackGFX call Function10a40 @@ -225,10 +225,10 @@ Function10198: ; 10198 (4:4198) ld [wMenuCursorBuffer], a ld a, [wd0e1] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0e1], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wBallsPocketCursor], a ld b, $1 ld c, $5 @@ -301,7 +301,7 @@ Function101c5: ; 101c5 (4:41c5) call ExitMenu pop hl ret c - ld a, [wcfa9] + ld a, [MenuSelection2] dec a call Function1086b jp [hl] @@ -478,7 +478,7 @@ Function10311: ; 10311 jr z, .NoPokemon call DoItemEffect xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function10955 call WaitBGMap_DrawPackGFX call Function10a40 @@ -594,7 +594,7 @@ Function103fd: ; 103fd ld [Options], a ld a, $8 ld [PartyMenuActionText], a - call WhiteBGMap + call ClearBGPalettes callba Function5004f callba Function50405 callba Function503e0 @@ -634,7 +634,7 @@ Function103fd: ; 103fd pop af ld [Options], a xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function10955 call WaitBGMap_DrawPackGFX call Function10a40 @@ -702,7 +702,7 @@ Jumptable_104c3: ; 104c3 (4:44c3) Function104d9: ; 104d9 (4:44d9) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function10955 ld a, [wcf64] ld [wJumptableIndex], a @@ -725,10 +725,10 @@ Function104fa: ; 104fa (4:44fa) ld [wMenuCursorBuffer], a ld a, [wd0df] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0df], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wItemsPocketCursor], a ld b, $7 ld c, $3 @@ -753,10 +753,10 @@ Function10539: ; 10539 (4:4539) ld [wMenuCursorBuffer], a ld a, [wd0e0] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0e0], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wKeyItemsPocketCursor], a ld b, $3 ld c, $7 @@ -771,7 +771,7 @@ Function10566: ; 10566 (4:4566) call ClearPocketList call DrawPocketName xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call WaitBGMap_DrawPackGFX ld hl, UnknownText_0x10b0c call Function10889 @@ -804,10 +804,10 @@ Function105a6: ; 105a6 (4:45a6) ld [wMenuCursorBuffer], a ld a, [wd0e1] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0e1], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wBallsPocketCursor], a ld b, $1 ld c, $5 @@ -836,7 +836,7 @@ Function105dc: ; 105dc (4:45dc) call ExitMenu pop hl ret c - ld a, [wcfa9] + ld a, [MenuSelection2] dec a call Function1086b jp [hl] @@ -915,14 +915,14 @@ Function105dc: ; 105dc (4:45dc) and a jr nz, .asm_1067e xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function10955 call WaitBGMap_DrawPackGFX call Function10a40 ret .asm_1066c: ; 1066c (4:466c) - call WhiteBGMap + call ClearBGPalettes jr .asm_1067e .BattleOnly: ; 10671 (4:4671) @@ -1010,10 +1010,10 @@ Jumptable_106d1: ; 106d1 (4:46d1) ld [wMenuCursorBuffer], a ld a, [wd0df] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0df], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wItemsPocketCursor], a ret @@ -1026,10 +1026,10 @@ Jumptable_106d1: ; 106d1 (4:46d1) ld [wMenuCursorBuffer], a ld a, [wd0e0] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0e0], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wKeyItemsPocketCursor], a ret @@ -1051,10 +1051,10 @@ Jumptable_106d1: ; 106d1 (4:46d1) ld [wMenuCursorBuffer], a ld a, [wd0e1] ld [wd0e4], a - call Function350c + call HandleScrollingMenu ld a, [wd0e4] ld [wd0e1], a - ld a, [wcfa9] + ld a, [MenuSelection2] ld [wBallsPocketCursor], a ret @@ -1170,9 +1170,9 @@ MenuData2_0x107f7: ; 0x107f7 db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, OTPartyMons - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10807 Function10807: ; 10807 (4:4807) @@ -1194,9 +1194,9 @@ MenuData2_0x10816: ; 0x10816 db 5, 8 ; rows, columns db 1 ; horizontal spacing dbw 0, OTPartyMon1Exp + 2 - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10826 Function10826: ; 10826 (4:4826) @@ -1227,9 +1227,9 @@ MenuData2_0x1084a: ; 0x1084a db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, OTPartyMon1CaughtGender - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 1085a Function1085a: ; 1085a (4:485a) @@ -1237,7 +1237,7 @@ Function1085a: ; 1085a (4:485a) call InitPocket pop hl call CopyMenuDataHeader - call Function350c + call HandleScrollingMenu ret Function10866: ; 10866 (4:4866) @@ -1401,17 +1401,17 @@ Function108d4: ; 108d4 (4:48d4) Function10955: ; 10955 - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites call DisableLCD ld hl, PackMenuGFX ld de, VTiles2 - ld bc, $0600 + ld bc, $60 tiles ld a, BANK(PackMenuGFX) call FarCopyBytes hlcoord 0, 1 - ld bc, 220 + ld bc, 11 * SCREEN_WIDTH ld a, $24 call ByteFill hlcoord 5, 1 @@ -1419,12 +1419,12 @@ Function10955: ; 10955 call ClearBox hlcoord 0, 0 ld a, $28 - ld c, $14 -.asm_1098a + ld c, SCREEN_WIDTH +.loop ld [hli], a inc a dec c - jr nz, .asm_1098a + jr nz, .loop call DrawPocketName call Function109a5 hlcoord 0, 12 @@ -1538,9 +1538,9 @@ MenuData2_0x10a57: ; 0x10a57 db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, NumItems - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10a67 MenuDataHeader_0x10a67: ; 0x10a67 @@ -1556,9 +1556,9 @@ MenuData2_0x10a6f: ; 0x10a6f db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, NumItems - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10a7f MenuDataHeader_0x10a7f: ; 0x10a7f @@ -1574,9 +1574,9 @@ MenuData2_0x10a87: ; 0x10a87 db 5, 8 ; rows, columns db 1 ; horizontal spacing dbw 0, NumKeyItems - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10a97 MenuDataHeader_0x10a97: ; 0x10a97 @@ -1592,9 +1592,9 @@ MenuData2_0x10a9f: ; 0x10a9f db 5, 8 ; rows, columns db 1 ; horizontal spacing dbw 0, NumKeyItems - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10aaf MenuDataHeader_0x10aaf: ; 0x10aaf @@ -1610,9 +1610,9 @@ MenuData2_0x10ab7: ; 0x10ab7 db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, NumBalls - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10ac7 MenuDataHeader_0x10ac7: ; 0x10ac7 @@ -1628,9 +1628,9 @@ MenuData2_0x10acf: ; 0x10acf db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, NumBalls - dbw BANK(PlaceMenuItemName), PlaceMenuItemName - dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity - dbw BANK(Function244c3), Function244c3 + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba Function244c3 ; 10adf UnknownText_0x10adf: ; 0x10adf diff --git a/engine/party_menu.asm b/engine/party_menu.asm new file mode 100644 index 000000000..4d50ee8e4 --- /dev/null +++ b/engine/party_menu.asm @@ -0,0 +1,944 @@ +SelectMonFromParty: ; 50000 + call DisableSpriteUpdates + xor a + ld [PartyMenuActionText], a + call ClearBGPalettes + call Function5003f + call WaitBGMap + call SetPalettes + call DelayFrame + call PartyMenuSelect + call Function2b74 + ret +; 5001d + + +Function5001d: ; 5001d + ld a, b + ld [PartyMenuActionText], a + call DisableSpriteUpdates + call ClearBGPalettes + call Function5003f + call WaitBGMap + ld b, $a + call GetSGBLayout + call SetPalettes + call DelayFrame + call PartyMenuSelect + call Function2b74 + ret +; 5003f + +Function5003f: ; 5003f + call Function5004f + call Function50405 + call Function503e0 + call WritePartyMenuTilemap + call PrintPartyMenuText + ret +; 5004f + +Function5004f: ; 5004f + call LoadFontsBattleExtra + callab Function8ad1 ; engine/color.asm + callab InefficientlyClear121BytesAtwc300 + ret +; 5005f + + +WritePartyMenuTilemap: ; 0x5005f + ld hl, Options + ld a, [hl] + push af + set 4, [hl] ; Disable text delay + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, " " + call ByteFill ; blank the tilemap + call GetPartyMenuTilemapPointers ; This reads from a pointer table??? +.loop + ld a, [hli] + cp $ff + jr z, .end ; 0x5007a $8 + push hl + ld hl, .Jumptable + rst JumpTable + pop hl + jr .loop ; 0x50082 $f3 +.end + pop af + ld [Options], a + ret +; 0x50089 + +.Jumptable: ; 50089 + dw PlacePartyNicknames + dw PlacePartyHPBar + dw PlacePartyMenuHPDigits + dw PlacePartyMonLevel + dw PlacePartyMonStatus + dw PlacePartyMonTMHMCompatibility + dw PlacePartyMonEvoStoneCompatibility + dw PlacePartyMonGender + dw PlacePartyMonMobileBattleSelection +; 5009b + +PlacePartyNicknames: ; 5009b + hlcoord 3, 1 + ld a, [PartyCount] + and a + jr z, .end + ld c, a + ld b, $0 +.loop + push bc + push hl + push hl + ld hl, PartyMonNicknames + ld a, b + call GetNick + pop hl + call PlaceString + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + +.end +rept 2 + dec hl +endr + ld de, .CANCEL + call PlaceString + ret +; 500c8 + +.CANCEL: ; 500c8 + db "CANCEL@" +; 500cf + + +PlacePartyHPBar: ; 500cf + xor a + ld [wcda9], a + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + hlcoord 11, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .skip + push hl + call PlacePartymonHPBar + pop hl + ld d, $6 + ld b, $0 + call DrawBattleHPBar + ld hl, wcd9b + ld a, [wcda9] + ld c, a + ld b, $0 + add hl, bc + call SetHPPal + ld b, $fc + call GetSGBLayout + +.skip + ld hl, wcda9 + inc [hl] + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ld b, $a + call GetSGBLayout + ret +; 50117 + +PlacePartymonHPBar: ; 50117 + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1HP + call AddNTimes + ld a, [hli] + or [hl] + jr nz, .not_fainted + xor a + ld e, a + ld c, a + ret + +.not_fainted + dec hl + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + ld a, [hli] + ld d, a + ld a, [hli] + ld e, a + predef DrawPartyMenuHPBar + ret +; 50138 + +PlacePartyMenuHPDigits: ; 50138 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + hlcoord 13, 1 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1HP + call AddNTimes + ld e, l + ld d, h + pop hl + push de + lb bc, 2, 3 + call PrintNum + pop de + ld a, "/" + ld [hli], a +rept 2 + inc de +endr + lb bc, 2, 3 + call PrintNum + +.next + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 50176 + +PlacePartyMonLevel: ; 50176 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 8, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1Level + call AddNTimes + ld e, l + ld d, h + pop hl + ld a, [de] + cp 100 ; This is distinct from MAX_LEVEL. + jr nc, .ThreeDigits + ld a, "<LV>" + ld [hli], a + lb bc, PRINTNUM_RIGHTALIGN | 1, 2 + ; jr .okay +.ThreeDigits + lb bc, PRINTNUM_RIGHTALIGN | 1, 3 +; .okay + call PrintNum + +.next + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 501b2 + +PlacePartyMonStatus: ; 501b2 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 5, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1Status + call AddNTimes + ld e, l + ld d, h + pop hl + call PlaceStatusString + +.next + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 501e0 + +PlacePartyMonTMHMCompatibility: ; 501e0 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld hl, PartySpecies + ld e, b + ld d, 0 + add hl, de + ld a, [hl] + ld [CurPartySpecies], a + predef CanLearnTMHMMove + pop hl + call .PlaceAbleNotAble + call PlaceString + +.next + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 50215 + +.PlaceAbleNotAble: ; 50215 + ld a, c + and a + jr nz, .able + ld de, .string_not_able + ret + +.able + ld de, .string_able + ret +; 50221 + +.string_able: ; 50221 + db "ABLE@" +; 50226 + +.string_not_able: ; 50226 + db "NOT ABLE@" +; 5022f + + +PlacePartyMonEvoStoneCompatibility: ; 5022f + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1Species + call AddNTimes + ld a, [hl] + dec a + ld e, a + ld d, 0 + ld hl, EvosAttacksPointers +rept 2 + add hl, de +endr + call .DetermineCompatibility + pop hl + call PlaceString + +.next + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 50268 + +.DetermineCompatibility: ; 50268 + ld de, StringBuffer1 + ld a, BANK(EvosAttacksPointers) + ld bc, 2 + call FarCopyBytes + ld hl, StringBuffer1 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, StringBuffer1 + ld a, BANK(EvosAttacks) + ld bc, $a + call FarCopyBytes + ld hl, StringBuffer1 +.loop2 + ld a, [hli] + and a + jr z, .nope +rept 2 + inc hl +endr + cp EVOLVE_ITEM + jr nz, .loop2 +rept 2 + dec hl +endr + ld a, [CurItem] + cp [hl] +rept 2 + inc hl +endr + jr nz, .loop2 + ld de, .string_able + ret + +.nope + ld de, .string_not_able + ret +; 502a3 + +.string_able: ; 502a3 + db "ABLE@" +; 502a8 +.string_not_able: ; 502a8 + db "NOT ABLE@" +; 502b1 + + +PlacePartyMonGender: ; 502b1 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + ld [CurPartySpecies], a + push hl + ld a, b + ld [CurPartyMon], a + xor a + ld [MonType], a + call GetGender + ld de, .unknown + jr c, .got_gender + ld de, .male + jr nz, .got_gender + ld de, .female + +.got_gender + pop hl + call PlaceString + +.next + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 502ee + +.male: ; 502ee + db "♂…MALE@" +; 502f5 + +.female: ; 502f5 + db "♀…FEMALE@" +; 502fe + +.unknown: ; 502fe + db "…UNKNOWN@" +; 50307 + + +PlacePartyMonMobileBattleSelection: ; 50307 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 1 +.loop + push bc + push hl + ld de, .String_Sanka_Shinai + call PlaceString + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ld a, l + ld e, PKMN_NAME_LENGTH + sub e + ld l, a + ld a, h + sbc $0 + ld h, a + ld de, .String_Kettei_Yameru + call PlaceString + ld b, $3 + ld c, $0 + ld hl, wd002 + ld a, [hl] +.loop2 + push hl + push bc + hlcoord 12, 1 +.loop3 + and a + jr z, .done + ld de, 2 * SCREEN_WIDTH + add hl, de + dec a + jr .loop3 + +.done + ld de, .String_Banme + push hl + call PlaceString + pop hl + pop bc + push bc + push hl + ld a, c + ld hl, .Strings_1_2_3 + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + pop bc + pop hl + inc hl + ld a, [hl] + inc c + dec b + ret z + jr .loop2 +; 5036b + +.String_Banme: ; 5036b + db " ばんめ @" ; Place +; 50372 +.String_Sanka_Shinai: ; 50372 + db "さんかしない@" ; Cancel +; 50379 +.String_Kettei_Yameru: ; 50379 + db "けってい やめる@" ; Quit +; 50383 +.Strings_1_2_3: ; 50383 + db "1@", "2@", "3@" ; 1st, 2nd, 3rd +; 50389 + + +PartyMenuCheckEgg: ; 50389 + ld a, PartySpecies % $100 + add b + ld e, a + ld a, PartySpecies / $100 + adc 0 + ld d, a + ld a, [de] + cp EGG + ret +; 50396 + +GetPartyMenuTilemapPointers: ; 50396 + ld a, [PartyMenuActionText] + and $f0 + jr nz, .skip + ld a, [PartyMenuActionText] + and $f + ld e, a + ld d, 0 + ld hl, .Pointers +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.skip + ld hl, .Default + ret +; 503b2 + +.Pointers: ; 503b2 + dw .Default + dw .Default + dw .Default + dw .TMHM + dw .Default + dw .EvoStone + dw .Gender + dw .Gender + dw .Default + dw .Mobile +; 503c6 + +.Default: db 0, 1, 2, 3, 4, $ff +.TMHM: db 0, 5, 3, 4, $ff +.EvoStone: db 0, 6, 3, 4, $ff +.Gender: db 0, 7, 3, 4, $ff +.Mobile: db 0, 8, 3, 4, $ff +; 503e0 + + +Function503e0: ; 503e0 + ld hl, PartyCount + ld a, [hli] + and a + ret z + ld c, a + xor a + ld [hObjectStructIndexBuffer], a +.asm_503ea + push bc + push hl + ld hl, Function8e83f + ld a, BANK(Function8e83f) + ld e, $0 + rst FarCall + ld a, [hObjectStructIndexBuffer] + inc a + ld [hObjectStructIndexBuffer], a + pop hl + pop bc + dec c + jr nz, .asm_503ea + callab Function8cf69 + ret +; 50405 + +Function50405: ; 50405 + xor a + ld [wd0e3], a + ld de, Unknown_5044f + call Function1bb1 + ld a, [PartyCount] + inc a + ld [wcfa3], a + dec a + ld b, a + ld a, [wd0d8] + and a + jr z, .asm_50422 + inc b + cp b + jr c, .asm_50424 + +.asm_50422 + ld a, $1 + +.asm_50424 + ld [MenuSelection2], a + ld a, $3 + ld [wcfa8], a + ret +; 5042d + +Function5042d: ; 0x5042d + ld de, Unknown_5044f + call Function1bb1 + ld a, [PartyCount] + ld [wcfa3], a + ld b, a + ld a, [wd0d8] + and a + jr z, .asm_50444 + inc b + cp b + jr c, .asm_50446 +.asm_50444 + ld a, $1 +.asm_50446 + ld [MenuSelection2], a + ld a, $3 + ld [wcfa8], a + ret +; 5044f (14:444f) + +Unknown_5044f: ; 5044f +; cursor y +; cursor x +; list length +; ? +; bit 6: animate sprites bit 5: wrap around +; ? +; distance between items (hi: y, lo: x) +; allowed buttons (mask) + db $01, $00, $00, $01, $60, $00, $20, $00 +; 50457 + +PartyMenuSelect: ; 0x50457 +; sets carry if exitted menu. + call Function1bc9 + call Function1bee + ld a, [PartyCount] + inc a + ld b, a + ld a, [MenuSelection2] ; menu selection? + cp b + jr z, .exitmenu ; CANCEL + ld [wd0d8], a + ld a, [hJoyLast] + ld b, a + bit 1, b + jr nz, .exitmenu ; B button? + ld a, [MenuSelection2] + dec a + ld [CurPartyMon], a + ld c, a + ld b, $0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + ld [CurPartySpecies], a + + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + and a + ret + +.exitmenu + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + scf + ret +; 0x5049a + + +PrintPartyMenuText: ; 5049a + hlcoord 0, 14 + lb bc, 2, 18 + call TextBox + ld a, [PartyCount] + and a + jr nz, .haspokemon + ld de, YouHaveNoPKMNString + jr .gotstring +.haspokemon ; 504ae + ld a, [PartyMenuActionText] + and $f ; drop high nibble + ld hl, PartyMenuStrings + ld e, a + ld d, $0 +rept 2 + add hl, de +endr + ld a, [hli] + ld d, [hl] + ld e, a +.gotstring ; 504be + ld a, [Options] + push af + set 4, a ; disable text delay + ld [Options], a + hlcoord 1, 16 ; Coord + call PlaceString + pop af + ld [Options], a + ret +; 0x504d2 + +PartyMenuStrings: ; 0x504d2 + dw ChooseAMonString + dw UseOnWhichPKMNString + dw WhichPKMNString + dw TeachWhichPKMNString + dw MoveToWhereString + dw UseOnWhichPKMNString + dw ChooseAMonString ; Probably used to be ChooseAFemalePKMNString + dw ChooseAMonString ; Probably used to be ChooseAMalePKMNString + dw ToWhichPKMNString + +ChooseAMonString: ; 0x504e4 + db "Choose a #MON.@" +UseOnWhichPKMNString: ; 0x504f3 + db "Use on which <PK><MN>?@" +WhichPKMNString: ; 0x50504 + db "Which <PK><MN>?@" +TeachWhichPKMNString: ; 0x5050e + db "Teach which <PK><MN>?@" +MoveToWhereString: ; 0x5051e + db "Move to where?@" +ChooseAFemalePKMNString: ; 0x5052d ; UNUSED + db "Choose a ♀<PK><MN>.@" +ChooseAMalePKMNString: ; 0x5053b ; UNUSED + db "Choose a ♂<PK><MN>.@" +ToWhichPKMNString: ; 0x50549 + db "To which <PK><MN>?@" + +YouHaveNoPKMNString: ; 0x50556 + db "You have no <PK><MN>!@" + + +Function50566: ; 50566 + ld a, [CurPartyMon] + ld hl, PartyMonNicknames + call GetNick + ld a, [PartyMenuActionText] + and $f + ld hl, Unknown_5057b + call Function505c1 + ret +; 5057b + +Unknown_5057b: ; 5057b + dw UnknownText_0x50594 + dw UnknownText_0x5059e + dw UnknownText_0x505a3 + dw UnknownText_0x505a8 + dw UnknownText_0x50599 + dw UnknownText_0x5058f + dw UnknownText_0x505ad + dw UnknownText_0x505b2 + dw UnknownText_0x505b7 + dw UnknownText_0x505bc +; 5058f + +UnknownText_0x5058f: ; 0x5058f + ; recovered @ HP! + text_jump UnknownText_0x1bc0a2 + db "@" +; 0x50594 + +UnknownText_0x50594: ; 0x50594 + ; 's cured of poison. + text_jump UnknownText_0x1bc0bb + db "@" +; 0x50599 + +UnknownText_0x50599: ; 0x50599 + ; 's rid of paralysis. + text_jump UnknownText_0x1bc0d2 + db "@" +; 0x5059e + +UnknownText_0x5059e: ; 0x5059e + ; 's burn was healed. + text_jump UnknownText_0x1bc0ea + db "@" +; 0x505a3 + +UnknownText_0x505a3: ; 0x505a3 + ; was defrosted. + text_jump UnknownText_0x1bc101 + db "@" +; 0x505a8 + +UnknownText_0x505a8: ; 0x505a8 + ; woke up. + text_jump UnknownText_0x1bc115 + db "@" +; 0x505ad + +UnknownText_0x505ad: ; 0x505ad + ; 's health returned. + text_jump UnknownText_0x1bc123 + db "@" +; 0x505b2 + +UnknownText_0x505b2: ; 0x505b2 + ; is revitalized. + text_jump UnknownText_0x1bc13a + db "@" +; 0x505b7 + +UnknownText_0x505b7: ; 0x505b7 + ; grew to level @ !@ @ + text_jump UnknownText_0x1bc14f + db "@" +; 0x505bc + +UnknownText_0x505bc: ; 0x505bc + ; came to its senses. + text_jump UnknownText_0x1bc16e + db "@" +; 0x505c1 + + +Function505c1: ; 505c1 + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [Options] + push af + set 4, a + ld [Options], a + call PrintText + pop af + ld [Options], a + ret +; 505da diff --git a/engine/phone.asm b/engine/phone.asm index 0ba5cf6e1..32481deaa 100644 --- a/engine/phone.asm +++ b/engine/phone.asm @@ -182,7 +182,7 @@ ChooseRandomCaller: ; 900bf (24:40bf) ; Sample a random number between 0 and 31. ld c, a call Random - ld a, [hRandomAdd] ; $ff00+$e1 + ld a, [hRandomAdd] swap a and $1f ; Compute that number modulo the number of available callers. diff --git a/engine/phone_scripts.asm b/engine/phone_scripts.asm index 5d8afd028..33541e224 100644 --- a/engine/phone_scripts.asm +++ b/engine/phone_scripts.asm @@ -3154,38 +3154,3 @@ String_be657: db "Dad@" String_be65b: db "Sister@" String_be662: db "Brother@" - -TalkToTrainerScript:: ; 0xbe66a - faceplayer - trainerstatus $2 - iftrue AlreadyBeatenTrainerScript - loadtrainerdata - playrammusic - jump StartBattleWithMapTrainerScript -; 0xbe675 - -SeenByTrainerScript:: ; 0xbe675 - loadtrainerdata - playrammusic - showemote EMOTE_SHOCK, LAST_TALKED, 30 - callasm Function831e - applymovement2 MovementBuffer - writepersonxy LAST_TALKED - faceperson PLAYER, LAST_TALKED - jump StartBattleWithMapTrainerScript -; 0xbe68a - -StartBattleWithMapTrainerScript: ; 0xbe68a - loadfont - trainertext $0 - closetext - loadmovesprites - loadtrainerdata - startbattle - returnafterbattle - trainerstatus 1 - loadvar wd04d, -1 - -AlreadyBeatenTrainerScript: - scripttalkafter -; 0xbe699 diff --git a/engine/pokedex.asm b/engine/pokedex.asm index dd58e940d..8d5680ded 100644 --- a/engine/pokedex.asm +++ b/engine/pokedex.asm @@ -22,7 +22,7 @@ Pokedex: ; 40000 ld [hInMenu], a xor a - ld [$ffde], a + ld [hMapAnims], a call InitPokedex call DelayFrame @@ -60,7 +60,7 @@ Pokedex: ; 40000 ; 40063 InitPokedex: ; 40063 - call WhiteBGMap + call ClearBGPalettes call ClearSprites call ClearTileMap call Function414b7 @@ -209,7 +209,7 @@ Function40136: ; 40136 (10:4136) Function4013c: ; 4013c (10:413c) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call ClearSprites xor a hlcoord 0, 0, AttrMap @@ -226,7 +226,7 @@ Function4013c: ; 4013c (10:413c) call Function41af7 call Function4074c ld a, $5 - ld [hSCX], a ; $ff00+$cf + ld [hSCX], a ld a, [wc7d4] cp $1 ld a, $4a @@ -234,9 +234,9 @@ Function4013c: ; 4013c (10:413c) ld a, $47 .asm_4017b - ld [hWX], a ; $ff00+$d1 + ld [hWX], a xor a - ld [hWY], a ; $ff00+$d2 + ld [hWY], a call WaitBGMap call Function41af7 ld a, $ff @@ -272,7 +272,7 @@ Function401ae: ; 401ae (10:41ae) ret nc call Function41148 xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function40b0f call Function41ad7 call Function41af7 @@ -293,9 +293,9 @@ Function401ae: ; 401ae (10:41ae) ld a, $7 ld [wJumptableIndex], a xor a - ld [hSCX], a ; $ff00+$cf + ld [hSCX], a ld a, $a7 - ld [hWX], a ; $ff00+$d1 + ld [hWX], a call DelayFrame ret @@ -304,9 +304,9 @@ Function401ae: ; 401ae (10:41ae) ld a, $5 ld [wJumptableIndex], a xor a - ld [hSCX], a ; $ff00+$cf + ld [hSCX], a ld a, $a7 - ld [hWX], a ; $ff00+$d1 + ld [hWX], a call DelayFrame ret @@ -320,7 +320,7 @@ Function40217: ; 40217 (10:4217) xor a ld [wPokedexStatus], a xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call ClearSprites call Function41478 call Function407fd @@ -331,7 +331,7 @@ Function40217: ; 40217 (10:4217) call Function40ba0 call WaitBGMap ld a, $a7 - ld [hWX], a ; $ff00+$d1 + ld [hWX], a call Function40bb1 ld [CurPartySpecies], a ld a, $4 @@ -392,7 +392,7 @@ Function402aa: ; 402aa (10:42aa) xor a ld [wPokedexStatus], a xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function407fd call Function4134f call Function41478 @@ -487,7 +487,7 @@ Function4034f: ; 4034f ld [wcf64], a pop af ld [wcf65], a - call WhiteBGMap + call ClearBGPalettes call DisableLCD call Function414fb call Function4038d @@ -509,7 +509,7 @@ Function4038d: ; 4038d Function4039d: ; 4039d (10:439d) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call ClearSprites call Function4087c call Function4134f @@ -615,7 +615,7 @@ Function4043a: ; 4043a (10:443a) Function40443: ; 40443 (10:4443) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call ClearSprites call Function408f0 call Function4134f @@ -723,7 +723,7 @@ Function40501: ; 40501 Function4050a: ; 4050a (10:450a) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a xor a hlcoord 0, 0, AttrMap ld bc, $168 @@ -739,11 +739,11 @@ Function4050a: ; 4050a (10:450a) call Function41af7 call Function40962 ld a, $5 - ld [hSCX], a ; $ff00+$cf + ld [hSCX], a ld a, $4a - ld [hWX], a ; $ff00+$d1 + ld [hWX], a xor a - ld [hWY], a ; $ff00+$d2 + ld [hWY], a call WaitBGMap call Function41af7 callba Function1de1d1 @@ -768,7 +768,7 @@ Function40562: ; 40562 (10:4562) ret nc call Function41281 xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call Function40b0f call Function41ad7 call Function41af7 @@ -797,9 +797,9 @@ Function40562: ; 40562 (10:4562) ld a, $5 ld [wJumptableIndex], a xor a - ld [hSCX], a ; $ff00+$cf + ld [hSCX], a ld a, $a7 - ld [hWX], a ; $ff00+$d1 + ld [hWX], a ret Function405bd: ; 405bd (10:45bd) @@ -838,7 +838,7 @@ Function405df: ; 405df (10:45df) ld hl, PokedexLZ ld de, VTiles2 tile $31 lb bc, BANK(PokedexLZ), $3a - call Functione73 + call DecompressRequest2bpp .asm_4060f ret @@ -876,14 +876,14 @@ Function40610: ; 40610 (10:4610) .asm_40635 push af xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a pop af call Function40654 call Function41a58 call Function40658 callba Functionfba2e ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a call DelayFrame call DelayFrame ret @@ -1773,7 +1773,7 @@ String_40ee4: ; 40ee4 Function40f08: ; 40f08 (10:4f08) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a hlcoord 0, 12 ld bc, $412 call Function40ad5 @@ -1781,7 +1781,7 @@ Function40f08: ; 40f08 (10:4f08) hlcoord 1, 14 call PlaceString ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld c, $40 call DelayFrames ld de, SFX_CHANGE_DEX_MODE @@ -1861,7 +1861,7 @@ Function40f84: ; 40f84 Function40fa8: ; 40fa8 (10:4fa8) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a hlcoord 9, 3 ld bc, $408 ld a, $7f @@ -1873,7 +1873,7 @@ Function40fa8: ; 40fa8 (10:4fa8) hlcoord 9, 6 call Function40fcd ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ret Function40fcd: ; 40fcd (10:4fcd) @@ -2363,16 +2363,16 @@ Function413fe: ; 413fe (10:53fe) jp FillBoxWithByte Function41401: ; 41401 (10:5401) - ld a, [rSVBK] ; $ff00+$70 + ld a, [rSVBK] push af ld a, $5 - ld [rSVBK], a ; $ff00+$70 - ld hl, Unkn1Pals + ld [rSVBK], a + ld hl, wMapPals ld bc, $40 xor a call ByteFill pop af - ld [rSVBK], a ; $ff00+$70 + ld [rSVBK], a Function41415: ; 41415 ld a, $ff @@ -2487,7 +2487,7 @@ Function414b7: ; 414b7 xor a call ByteFill call Function414fb - call Functione5f + call LoadFontsExtra ld hl, VTiles2 tile $60 ld bc, $0200 call Function41504 @@ -2511,7 +2511,7 @@ Function414b7: ; 414b7 ret Function414fb: ; 414fb - call Functione51 + call LoadStandardFont ld hl, VTiles1 ld bc, $0800 diff --git a/engine/predef.asm b/engine/predef.asm index 9fa26875a..6079b48a4 100644 --- a/engine/predef.asm +++ b/engine/predef.asm @@ -34,16 +34,16 @@ PredefPointers:: ; 856b add_predef Predef1 add_predef HealParty add_predef FlagPredef - add_predef Functionc699 + add_predef DrawPartyMenuHPBar add_predef FillPP add_predef TryAddMonToParty add_predef Functionda96 add_predef SentGetPkmnIntoFromBox add_predef SentPkmnIntoBox add_predef GiveEgg - add_predef Functionc6e0 + add_predef AnimateHPBar add_predef CalcPkmnStats - add_predef Functione17b + add_predef CalcPkmnStatC add_predef CanLearnTMHMMove add_predef GetTMHMMove add_predef Function28eef ; $ 10 @@ -54,8 +54,8 @@ PredefPointers:: ; 856b add_predef UpdateEnemyHUD add_predef StartBattle add_predef FillInExpBar - add_predef Function3f43d ; $18 - add_predef Function3f47c + add_predef GetMonBackpic ; $18 + add_predef GetMonFrontpic add_predef LearnLevelMoves add_predef FillMoves add_predef Function421e6 @@ -63,7 +63,7 @@ PredefPointers:: ; 856b add_predef Function28f24 add_predef CopyPkmnToTempMon add_predef ListMoves ; $20 - add_predef Function50d2e + add_predef PlaceNonFaintStatus add_predef Function50cdb add_predef Function50c50 add_predef GetGender @@ -95,13 +95,13 @@ PredefPointers:: ; 856b add_predef Function5108b add_predef GetTrainerPic add_predef DecompressPredef ; $40 - add_predef Function347d3 + add_predef CheckTypeMatchup add_predef ConvertMon_1to2 add_predef Functionfb877 - add_predef Functiond0000 - add_predef Function50d0a - add_predef Functiond00a3 - add_predef Functiond008e + add_predef AnimateMon_Slow_Normal + add_predef PlaceStatusString + add_predef LoadMonAnimation + add_predef AnimateFrontpic add_predef Functiond0669 ; $48 add_predef Functiond066e dbw $ff, Function2d43 ; ???? diff --git a/engine/radio.asm b/engine/radio.asm index d833b66f5..2ee550197 100644 --- a/engine/radio.asm +++ b/engine/radio.asm @@ -1,7 +1,7 @@ PlayRadioShow: ; b8612 ; If we're already in the radio program proper, we don't need to be here. - ld a, [wd002] - cp 8 + ld a, [wCurrentRadioLine] + cp POKE_FLUTE_RADIO jr nc, .ok ; If Team Rocket is not occupying the radio tower, we don't need to be here. ld a, [StatusFlags2] @@ -12,11 +12,11 @@ PlayRadioShow: ; b8612 and a jr nz, .ok ; Team Rocket broadcasts on all stations. - ld a, 7 - ld [wd002], a + ld a, ROCKET_RADIO + ld [wCurrentRadioLine], a .ok -; Jump to the currently loaded station. The index to which we need to jump is in wd002. - ld a, [wd002] +; Jump to the currently loaded station. The index to which we need to jump is in wCurrentRadioLine. + ld a, [wCurrentRadioLine] ld e, a ld d, 0 ld hl, RadioJumptable @@ -128,16 +128,16 @@ RadioJumptable: ; b863a (2e:463a) PrintRadioLine: ; b86ea (2e:46ea) - ld [wd003], a - ld hl, wd00c - ld a, [wd005] - cp $2 + ld [wNextRadioLine], a + ld hl, wRadioText + ld a, [wNumRadioLinesPrinted] + cp 2 jr nc, .print inc hl - ld [hl], $0 + ld [hl], "<START>" inc a - ld [wd005], a - cp $2 + ld [wNumRadioLinesPrinted], a + cp 2 jr nz, .print bccoord 1, 16 call PlaceWholeStringInBoxAtOnce @@ -146,9 +146,9 @@ PrintRadioLine: ; b86ea (2e:46ea) call PrintTextBoxText .skip ld a, RADIO_SCROLL - ld [wd002], a + ld [wCurrentRadioLine], a ld a, 100 - ld [wd004], a + ld [wRadioTextDelay], a ret ; b8718 (2e:4718) @@ -170,23 +170,23 @@ ReplacePeriodsWithSpaces: ; b8718 ; b8728 RadioScroll: ; b8728 (2e:4728) - ld hl, wd004 + ld hl, wRadioTextDelay ld a, [hl] and a jr z, .proceed dec [hl] ret .proceed - ld a, [wd003] - ld [wd002], a - ld a, [wd005] + ld a, [wNextRadioLine] + ld [wCurrentRadioLine], a + ld a, [wNumRadioLinesPrinted] cp 1 call nz, CopyBottomLineToTopLine jp ClearBottomLine OaksPkmnTalk1: ; b8742 (2e:4742) - ld a, $5 - ld [wd006], a + ld a, 5 + ld [wOaksPkmnTalkSegmentCounter], a call StartRadioStation ld hl, UnknownText_0xb8820 ld a, OAKS_POKEMON_TALK_2 @@ -274,7 +274,7 @@ endr ld [CurPartySpecies], a call GetPokemonName ld hl, StringBuffer1 - ld de, wd050 + ld de, wOaksPkmnTalkPkmnNameBuffer ld bc, PKMN_NAME_LENGTH call CopyBytes ; Now that we've chosen our wild Pokemon, @@ -290,7 +290,7 @@ endr .overflow pop bc - ld a, $0 + ld a, OAKS_POKEMON_TALK jp PrintRadioLine ; b87f2 (2e:47f2) @@ -361,7 +361,7 @@ UnknownText_0xb8839: ; 0xb8839 OaksPkmnTalk7: ; b883e (2e:483e) ld a, [CurPartySpecies] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName ld hl, UnknownText_0xb884f ld a, OAKS_POKEMON_TALK_8 @@ -517,13 +517,13 @@ endr ld a, [hli] ld h, [hl] ld l, a - ld a, [wd006] + ld a, [wOaksPkmnTalkSegmentCounter] dec a - ld [wd006], a + ld [wOaksPkmnTalkSegmentCounter], a ld a, OAKS_POKEMON_TALK_4 jr nz, .ok - ld a, $5 - ld [wd006], a + ld a, 5 + ld [wOaksPkmnTalkSegmentCounter], a ld a, OAKS_POKEMON_TALK_10 .ok jp NextRadioLine @@ -652,9 +652,9 @@ OaksPkmnTalk10: ; b896e (2e:496e) ld hl, UnknownText_0xb898e call PrintText ld a, OAKS_POKEMON_TALK_11 - ld [wd002], a + ld [wCurrentRadioLine], a ld a, 100 - ld [wd004], a + ld [wRadioTextDelay], a ret ; b898e (2e:498e) @@ -669,7 +669,7 @@ UnknownText_0xb8993: ; 0xb8993 ; 0xb8994 OaksPkmnTalk11: ; b8994 (2e:4994) - ld hl, wd004 + ld hl, wRadioTextDelay dec [hl] ret nz hlcoord 9, 14 @@ -683,7 +683,7 @@ OaksPkmnTalk11: ; b8994 (2e:4994) ; b89a9 OaksPkmnTalk12: ; b89a9 (2e:49a9) - ld hl, wd004 + ld hl, wRadioTextDelay dec [hl] ret nz hlcoord 1, 16 @@ -697,7 +697,7 @@ OaksPkmnTalk12: ; b89a9 (2e:49a9) ; b89c6 OaksPkmnTalk13: ; b89c6 (2e:49c6) - ld hl, wd004 + ld hl, wRadioTextDelay dec [hl] ret nz hlcoord 12, 16 @@ -711,7 +711,7 @@ OaksPkmnTalk13: ; b89c6 (2e:49c6) ; b89d7 OaksPkmnTalk14: ; b89d7 (2e:49d7) - ld hl, wd004 + ld hl, wRadioTextDelay dec [hl] ret nz ld de, $1d @@ -719,13 +719,13 @@ OaksPkmnTalk14: ; b89d7 (2e:49d7) ld hl, .terminator call PrintText ld a, OAKS_POKEMON_TALK_4 - ld [wd003], a + ld [wNextRadioLine], a xor a - ld [wd005], a + ld [wNumRadioLinesPrinted], a ld a, RADIO_SCROLL - ld [wd002], a + ld [wCurrentRadioLine], a ld a, 10 - ld [wd004], a + ld [wRadioTextDelay], a ret ; b89ff (2e:49ff) @@ -734,9 +734,9 @@ OaksPkmnTalk14: ; b89d7 (2e:49d7) ; 0xb8a00 PlaceRadioString: ; b8a00 (2e:4a00) - ld [wd002], a + ld [wCurrentRadioLine], a ld a, 100 - ld [wd004], a + ld [wRadioTextDelay], a jp PlaceString CopyBottomLineToTopLine: ; b8a0b (2e:4a0b) @@ -747,11 +747,11 @@ CopyBottomLineToTopLine: ; b8a0b (2e:4a0b) ClearBottomLine: ; b8a17 (2e:4a17) hlcoord 1, 15 - ld bc, $12 + ld bc, SCREEN_WIDTH - 2 ld a, " " call ByteFill hlcoord 1, 16 - ld bc, $12 + ld bc, SCREEN_WIDTH - 2 ld a, " " jp ByteFill @@ -784,7 +784,7 @@ PokedexShow1: ; b8a46 (2e:4a46) call StartRadioStation .loop call Random - cp CELEBI + cp NUM_POKEMON jr nc, .loop ld c, a push bc @@ -795,7 +795,7 @@ PokedexShow1: ; b8a46 (2e:4a46) inc c ld a, c ld [CurPartySpecies], a - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName ld hl, UnknownText_0xb8b30 ld a, POKEDEX_SHOW_2 @@ -817,8 +817,8 @@ endr push hl call CopyDexEntryPart1 dec hl - ld [hl], $57 - ld hl, wd26b + ld [hl], "<DONE>" + ld hl, wPokedexShowPointerAddr call CopyRadioTextToRAM pop hl pop af @@ -827,9 +827,9 @@ rept 4 inc hl endr ld a, l - ld [wd26b], a + ld [wPokedexShowPointerAddr], a ld a, h - ld [wd26c], a + ld [wPokedexShowPointerAddr + 1], a ld a, POKEDEX_SHOW_3 jp PrintRadioLine @@ -864,17 +864,17 @@ PokedexShow8: ; b8acc (2e:4acc) jp PrintRadioLine CopyDexEntry: ; b8ad4 (2e:4ad4) - ld a, [wd26b] + ld a, [wPokedexShowPointerAddr] ld l, a - ld a, [wd26c] + ld a, [wPokedexShowPointerAddr + 1] ld h, a - ld a, [wd26d] + ld a, [wPokedexShowPointerBank] push af push hl call CopyDexEntryPart1 dec hl ld [hl], "<DONE>" - ld hl, wd26b + ld hl, wPokedexShowPointerAddr call CopyRadioTextToRAM pop hl pop af @@ -882,10 +882,10 @@ CopyDexEntry: ; b8ad4 (2e:4ad4) ret CopyDexEntryPart1: ; b8af3 (2e:4af3) - ld de, wd26d + ld de, wPokedexShowPointerBank ld bc, SCREEN_WIDTH - 1 call FarCopyBytes - ld hl, wd26b + ld hl, wPokedexShowPointerAddr ld [hl], "<START>" inc hl ld [hl], "<LINE>" @@ -914,11 +914,11 @@ CopyDexEntryPart2: ; b8b11 (2e:4b11) jr nz, .loop .okay ld a, l - ld [wd26b], a + ld [wPokedexShowPointerAddr], a ld a, h - ld [wd26c], a + ld [wPokedexShowPointerAddr + 1], a ld a, d - ld [wd26d], a + ld [wPokedexShowPointerBank], a ret ; b8b30 (2e:4b30) @@ -1302,9 +1302,9 @@ PeoplePlaces4: ; People jp NextRadioLine ; b8d3e (2e:4d3e) -.E4Names: db WILL, BRUNO, KAREN, KOGA, CHAMPION ; $0b, $0d, $0e, $0f, $10 -.KantoLeaderNames: db BROCK, MISTY, LT_SURGE, ERIKA, JANINE, SABRINA, BLAINE, BLUE ; $11, $12, $13, $15, $1a, $23, $2e, $40 -.MiscNames: db RIVAL1, POKEMON_PROF, CAL, RIVAL2, RED ; $09, $0a, $0c, $2a, $3f +.E4Names: db WILL, BRUNO, KAREN, KOGA, CHAMPION +.KantoLeaderNames: db BROCK, MISTY, LT_SURGE, ERIKA, JANINE, SABRINA, BLAINE, BLUE +.MiscNames: db RIVAL1, POKEMON_PROF, CAL, RIVAL2, RED db -1 ; b8d51 @@ -1507,11 +1507,11 @@ endr ld l, a call CopyRadioTextToRAM call Random - cp $a ; 6.25 percent + cp 4 percent ld a, PLACES_AND_PEOPLE jr c, .ok call Random - cp $7b ; 48 percent + cp 1 + 48 percent ld a, PLACES_AND_PEOPLE_4 ; People jr c, .ok ld a, PLACES_AND_PEOPLE_6 ; Places @@ -1653,41 +1653,41 @@ UnknownText_0xb8ef2: ; 0xb8ef2 PokeFluteRadio: ; b8ef7 (2e:4ef7) call StartRadioStation ld a, 1 - ld [wd005], a + ld [wNumRadioLinesPrinted], a ret UnownRadio: ; b8f00 (2e:4f00) call StartRadioStation ld a, 1 - ld [wd005], a + ld [wNumRadioLinesPrinted], a ret EvolutionRadio: ; b8f09 (2e:4f09) call StartRadioStation ld a, 1 - ld [wd005], a + ld [wNumRadioLinesPrinted], a ret BuenasPassword1: ; b8f12 (2e:4f12) ; Determine if we need to be here - call BuenasPasswordCheckMidnight + call BuenasPasswordCheckTime jp nc, .PlayPassword - ld a, [wd005] + ld a, [wNumRadioLinesPrinted] and a jp z, BuenasPassword20 jp BuenasPassword8 .PlayPassword: ; b8f22 (2e:4f22) call StartRadioStation - ld a, [hBGMapMode] ; $ff00+$d4 + ld a, [hBGMapMode] push af xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld de, String_b9171 hlcoord 2, 9 call PlaceString pop af - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld hl, UnknownText_0xb9182 ld a, BUENAS_PASSWORD_2 jp NextRadioLine @@ -1698,14 +1698,14 @@ BuenasPassword2: ; b8f3f (2e:4f3f) jp NextRadioLine BuenasPassword3: ; b8f47 (2e:4f47) - call BuenasPasswordCheckMidnight + call BuenasPasswordCheckTime ld hl, UnknownText_0xb918c jp c, BuenasPasswordAfterMidnight ld a, BUENAS_PASSWORD_4 jp NextRadioLine BuenasPassword4: ; b8f55 (2e:4f55) - call BuenasPasswordCheckMidnight + call BuenasPasswordCheckTime jp c, BuenasPassword8 ld a, [wBuenasPassword] ; If we already generated the password today, we don't need to generate a new one. @@ -1716,7 +1716,7 @@ BuenasPassword4: ; b8f55 (2e:4f55) .greater_than_11 call Random and $f - cp $b + cp NUM_PASSWORD_CATEGORIES jr nc, .greater_than_11 ; Store it in the high nybble of e. swap a @@ -1725,7 +1725,7 @@ BuenasPassword4: ; b8f55 (2e:4f55) .greater_than_three call Random and $3 - cp $3 + cp NUM_PASSWORDS_PER_CATEGORY jr nc, .greater_than_three ; The high nybble of wBuenasPassword will now contain the password group index, and the low nybble contains the actual password. add e @@ -1808,7 +1808,7 @@ endr ld l, c add hl, de ld a, [hl] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a ret .RawString: ; b8fde (2e:4fde) @@ -1874,7 +1874,7 @@ BuenasPassword6: ; b90a4 (2e:50a4) jp NextRadioLine BuenasPassword7: ; b90ac (2e:50ac) - call BuenasPasswordCheckMidnight + call BuenasPasswordCheckTime ld hl, UnknownText_0xb91a0 jr c, BuenasPasswordAfterMidnight ld a, BUENAS_PASSWORD @@ -1951,37 +1951,37 @@ BuenasPassword19: ; b9122 (2e:5122) jp NextRadioLine BuenasPassword20: ; b912a (2e:512a) - ld a, [hBGMapMode] ; $ff00+$d4 + ld a, [hBGMapMode] push af callba NoRadioMusic callba NoRadioName pop af - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ld hl, WeeklyFlags res 7, [hl] - ld a, $4 - ld [wd002], a + ld a, BUENAS_PASSWORD + ld [wCurrentRadioLine], a xor a - ld [wd005], a + ld [wNumRadioLinesPrinted], a ld hl, UnknownText_0xb91d7 ld a, BUENAS_PASSWORD_21 jp NextRadioLine BuenasPassword21: ; b9152 (2e:5152) - ld a, $4 - ld [wd002], a + ld a, BUENAS_PASSWORD + ld [wCurrentRadioLine], a xor a - ld [wd005], a - call BuenasPasswordCheckMidnight + ld [wNumRadioLinesPrinted], a + call BuenasPasswordCheckTime jp nc, BuenasPassword1 ld hl, UnknownText_0xb91d7 ld a, BUENAS_PASSWORD_21 jp NextRadioLine -BuenasPasswordCheckMidnight: ; b9169 (2e:5169) +BuenasPasswordCheckTime: ; b9169 (2e:5169) call UpdateTime - ld a, [hHours] ; $ff00+$94 - cp $12 + ld a, [hHours] + cp 18 ; 6 PM ret ; b9171 (2e:5171) @@ -2100,19 +2100,19 @@ UnknownText_0xb91d7: ; 0xb91d7 CopyRadioTextToRAM: ; b91dc (2e:51dc) ld a, [hl] cp TX_FAR - jp z, FarJumpText - ld de, wd00c + jp z, FarCopyRadioText + ld de, wRadioText ld bc, SCREEN_WIDTH * 2 jp CopyBytes StartRadioStation: ; b91eb (2e:51eb) - ld a, [wd005] + ld a, [wNumRadioLinesPrinted] and a ret nz call RadioTerminator call PrintText ld hl, RadioChannelSongs - ld a, [wd002] + ld a, [wCurrentRadioLine] ld c, a ld b, 0 rept 2 diff --git a/engine/radio2.asm b/engine/radio2.asm index 039631130..1d07c904c 100644 --- a/engine/radio2.asm +++ b/engine/radio2.asm @@ -371,7 +371,7 @@ NoRadioStation: ; 91888 (24:5888) ld [wc6da], a ld [wc6db], a ld a, $1 - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a ret NoRadioMusic: ; 9189d (24:589d) @@ -383,7 +383,7 @@ NoRadioMusic: ; 9189d (24:589d) NoRadioName: ; 918a9 (24:58a9) xor a - ld [hBGMapMode], a ; $ff00+$d4 + ld [hBGMapMode], a hlcoord 1, 8 lb bc, 3, 18 call ClearBox diff --git a/engine/save.asm b/engine/save.asm index fa9aeda12..de11a8133 100644 --- a/engine/save.asm +++ b/engine/save.asm @@ -1,5 +1,5 @@ Function14a1a: ; 14a1a - call LoadMenuDataHeader_0x1d75 + call LoadStandardMenuDataHeader callba Function5e9a call SpeechTextBox call UpdateSprites @@ -30,7 +30,7 @@ Function14a58: ; 14a58 call Function14e13 call SaveBackupPokemonData call SaveBackupChecksum - callba Function44725 + callba BackupScratchmons callba Function1406a call ClearWRAMStateAfterSave ret @@ -106,8 +106,8 @@ Function14ad5: ; 14ad5 call SaveBackupPlayerData call SaveBackupPokemonData call SaveBackupChecksum - callba Function44725 - callba Function106187 + callba BackupScratchmons + callba BackupMobileEventIndex callba Function1406a call LoadBox call ClearWRAMStateAfterSave @@ -212,7 +212,7 @@ SaveTheGame_yesorno: ; 14baf call LoadMenuTextBox lb bc, 0, 7 call PlaceYesNoBox - ld a, [wcfa9] + ld a, [MenuSelection2] dec a call WriteBackup push af @@ -284,8 +284,8 @@ SaveGameData_: ; 14c10 call SaveBackupPokemonData call SaveBackupChecksum call UpdateStackTop - callba Function44725 - callba Function106187 + callba BackupScratchmons + callba BackupMobileEventIndex callba Function1406a ld a, BANK(s1_be45) call GetSRAMBank @@ -630,8 +630,8 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5) call LoadPlayerData call LoadPokemonData call LoadBox - callba Function44745 - callba Function10619d + callba RestoreScratchmons + callba RestoreMobileEventIndex callba Function1050ea call ValidateBackupSave call SaveBackupOptions @@ -647,8 +647,8 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5) call LoadBackupPlayerData call LoadBackupPokemonData call LoadBox - callba Function44745 - callba Function10619d + callba RestoreScratchmons + callba RestoreMobileEventIndex callba Function1050ea call ValidateSave call SaveOptions diff --git a/engine/scripting.asm b/engine/scripting.asm index 5a3895038..ae5041bc2 100644 --- a/engine/scripting.asm +++ b/engine/scripting.asm @@ -236,7 +236,7 @@ ENDC dw Script_halloffame dw Script_credits dw Script_warpfacing - dw Script_storetext + dw Script_battletowertext dw Script_displaylocation dw Script_trainerclassname dw Script_name @@ -440,14 +440,14 @@ Script_closetext: ; 0x96ed9 Script_keeptextopen: ; 0x96edc ; script command 0x55 - ld a, [$ffd8] + ld a, [hOAMUpdate] push af ld a, $1 - ld [$ffd8], a + ld [hOAMUpdate], a call WaitBGMap call KeepTextOpen pop af - ld [$ffd8], a + ld [hOAMUpdate], a ret ; 0x96eed @@ -515,7 +515,7 @@ Script_interpretmenu2: ; 0x96f30 ld a, [ScriptBank] ld hl, InterpretMenu2 rst FarCall - ld a, [wcfa9] + ld a, [MenuSelection2] jr nc, .ok xor a .ok @@ -537,7 +537,7 @@ Script_interpretmenu: ; 0x96f41 ret ; 0x96f52 -Script_storetext: ; 0x96f52 +Script_battletowertext: ; 0x96f52 ; script command 0xa4 ; parameters: ; pointer (PointerLabelBeforeBank) @@ -546,7 +546,7 @@ Script_storetext: ; 0x96f52 call SetUpTextBox call GetScriptByte ld c, a - callba StoreText + callba BattleTowerText ret ; 0x96f60 @@ -1079,9 +1079,11 @@ ApplyMovement: ; 971fa ld a, c callba SetFlagsForMovement_1 pop bc + push bc call SetFlagsForMovement_2 pop bc + call GetScriptByte ld l, a call GetScriptByte @@ -1090,6 +1092,7 @@ ApplyMovement: ; 971fa ld b, a call GetMovementData ret c + ld a, SCRIPT_WAIT_MOVEMENT ld [ScriptMode], a call StopScript @@ -1102,6 +1105,7 @@ SetFlagsForMovement_2: ; 0x97221 ; 0x97228 Script_applymovement2: ; 0x97228 +; apply movement to last talked ; script command 0x6a ; parameters: ; data (MovementPointerLabelParam) @@ -1197,9 +1201,9 @@ ApplyPersonFacing: ; 0x9728b add hl, bc ld a, [hl] push bc - call Function1836 + call DoesSpriteHaveFacings pop bc - jr c, .not_visible ; 0x9729c $1b + jr c, .not_visible ; STILL_SPRITE ld hl, OBJECT_FLAGS1 add hl, bc bit 2, [hl] @@ -1222,7 +1226,7 @@ ApplyPersonFacing: ; 0x9728b ; 0x972bc .DisableTextTiles: ; 0x972bc - call Function217a + call LoadMapPart hlcoord 0, 0 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT .loop @@ -1360,7 +1364,7 @@ Script_writepersonxy: ; 0x9735b ld a, [hLastTalked] .ok ld b, a - callba Function80a1 + callba WritePersonXY ret ; 0x9736f @@ -1376,7 +1380,7 @@ Script_follownotexact: ; 0x9736f call GetScriptByte call GetScriptPerson ld c, a - callba Function839e + callba FollowNotExact ret ; 0x97384 @@ -1426,12 +1430,12 @@ ShowEmoteScript: ; 973b6 .Show show_emote - show_person + step_sleep_1 step_end .Hide hide_emote - show_person + step_sleep_1 step_end ; 973c7 @@ -1460,8 +1464,8 @@ Script_earthquake: ; 0x973c7 ; 973eb EarthquakeMovement: ; 973eb - step_shake 16 - step_sleep 16 + step_shake 16 ; the 16 gets overwritten with the script byte + step_sleep 16 ; the 16 gets overwritten with the lower 6 bits of the script byte step_end EarthquakeMovementEnd ; 973f0 @@ -1546,7 +1550,7 @@ Script_catchtutorial: ; 0x97447 call GetScriptByte ld [BattleType], a call BufferScreen - callba Function4e554 + callba CatchTutorial jp Script_reloadmap ; 0x97459 @@ -1560,8 +1564,8 @@ Script_returnafterbattle: ; 0x97459 and $3f cp $1 jr nz, .notblackedout ; 0x97466 $8 - ld b, BANK(UnknownScript_0x124c1) - ld hl, UnknownScript_0x124c1 + ld b, BANK(Script_BattleWhiteout) + ld hl, Script_BattleWhiteout jp ScriptJump .notblackedout @@ -1664,7 +1668,7 @@ endr ret ; 0x974f3 -Function974f3:: ; 0x974f3 +CallCallback:: ; 0x974f3 ld a, [ScriptBank] or $80 ld [ScriptBank], a @@ -2339,7 +2343,7 @@ Script_giveitem: ; 0x977ca ; quantity (SingleByteParam) call GetScriptByte - cp -1 + cp ITEM_FROM_MEM jr nz, .ok ; 0x977cf $3 ld a, [ScriptVar] .ok @@ -2370,8 +2374,8 @@ Script_takeitem: ; 0x977f0 ld [CurItem], a call GetScriptByte ld [wItemQuantityChangeBuffer], a - ld a, $ff - ld [wd107], a + ld a, -1 + ld [ItemCountBuffer], a ld hl, NumItems call TossItem ret nc @@ -2847,6 +2851,7 @@ Script_warp: ; 0x97a1d call LoadMapStatus call StopScript ret + .not_ok call GetScriptByte call GetScriptByte @@ -2869,7 +2874,7 @@ Script_warpmod: ; 0x97a65 ; map_id (MapIdParam) call GetScriptByte - ld [wdcac], a + ld [BackupWarpNumber], a call GetScriptByte ld [BackupMapGroup], a call GetScriptByte @@ -2884,9 +2889,9 @@ Script_blackoutmod: ; 0x97a78 ; map_id (MapIdParam) call GetScriptByte - ld [wdcb2], a + ld [wLastSpawnMapGroup], a call GetScriptByte - ld [wdcb3], a + ld [wLastSpawnMapNumber], a ret ; 0x97a85 @@ -2970,7 +2975,7 @@ Script_reloadmappart:: ; 0x97ae3 xor a ld [hBGMapMode], a - call Function2173 + call OverworldTextModeSwitch call Function2914 callba Function104061 call UpdateSprites @@ -2980,7 +2985,7 @@ Script_reloadmappart:: ; 0x97ae3 Script_warpcheck: ; 0x97af6 ; script command 0x8e - call Function224a + call WarpCheck ret nc callba SetAll_ScriptFlags3 ret @@ -3117,6 +3122,7 @@ Script_end: ; 0x97b74 call ExitScriptSubroutine jr c, .resume ret + .resume xor a ld [ScriptRunning], a diff --git a/engine/selectmenu.asm b/engine/selectmenu.asm new file mode 100755 index 000000000..e73f397a5 --- /dev/null +++ b/engine/selectmenu.asm @@ -0,0 +1,191 @@ +SelectMenu:: ; 13327 + + call CheckRegisteredItem + jr c, .NotRegistered + jp UseRegisteredItem + +.NotRegistered + call LoadFont + ld b, BANK(ItemMayBeRegisteredText) + ld hl, ItemMayBeRegisteredText + call MapTextbox + call CloseText + jp LoadMoveSprites +; 13340 + + +ItemMayBeRegisteredText: ; 13340 + text_jump UnknownText_0x1c1cf3 + db "@" +; 13345 + + +CheckRegisteredItem: ; 13345 + + ld a, [WhichRegisteredItem] + and a + jr z, .NoRegisteredItem + and REGISTERED_POCKET + rlca + rlca + ld hl, .Pockets + rst JumpTable + ret + +.Pockets + dw .CheckItem + dw .CheckBall + dw .CheckKeyItem + dw .CheckTMHM + +.CheckItem + ld hl, NumItems + call .CheckRegisteredNo + jr c, .NoRegisteredItem + inc hl + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + call .IsSameItem + jr c, .NoRegisteredItem + and a + ret + +.CheckKeyItem + ld a, [RegisteredItem] + ld hl, KeyItems + ld de, 1 + call IsInArray + jr nc, .NoRegisteredItem + ld a, [RegisteredItem] + ld [CurItem], a + and a + ret + +.CheckBall + ld hl, NumBalls + call .CheckRegisteredNo + jr nc, .NoRegisteredItem + inc hl + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + call .IsSameItem + jr c, .NoRegisteredItem + ret + +.CheckTMHM + jr .NoRegisteredItem + +.NoRegisteredItem + xor a + ld [WhichRegisteredItem], a + ld [RegisteredItem], a + scf + ret +; 133a6 + + +.CheckRegisteredNo ; 133a6 + ld a, [WhichRegisteredItem] + and REGISTERED_NUMBER + dec a + cp [hl] + jr nc, .NotEnoughItems + ld [wd107], a + and a + ret + +.NotEnoughItems + scf + ret +; 133b6 + + +.IsSameItem ; 133b6 + ld a, [RegisteredItem] + cp [hl] + jr nz, .NotSameItem + ld [CurItem], a + and a + ret + +.NotSameItem + scf + ret +; 133c3 + + +UseRegisteredItem: ; 133c3 + + callba CheckItemMenu + ld a, [wItemAttributeParamBuffer] + ld hl, .SwitchTo + rst JumpTable + ret + +.SwitchTo + dw .CantUse + dw .NoFunction + dw .NoFunction + dw .NoFunction + dw .Current + dw .Party + dw .Overworld +; 133df + +.NoFunction ; 133df + call LoadFont + call CantUseItem + call LoadMoveSprites + and a + ret +; 133ea + +.Current ; 133ea + call LoadFont + call DoItemEffect + call LoadMoveSprites + and a + ret +; 133f5 + +.Party ; 133f5 + call ResetWindow + call FadeToMenu + call DoItemEffect + call Function2b3c + call LoadMoveSprites + and a + ret +; 13406 + +.Overworld ; 13406 + call ResetWindow + ld a, 1 + ld [wd0ef], a + call DoItemEffect + xor a + ld [wd0ef], a + ld a, [wd0ec] + cp 1 + jr nz, ._cantuse + scf + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + ret +; 13422 + +.CantUse ; 13422 + call ResetWindow + +._cantuse + call CantUseItem + call LoadMoveSprites + and a + ret +; 1342d diff --git a/engine/slot_machine.asm b/engine/slot_machine.asm new file mode 100755 index 000000000..075b1ba78 --- /dev/null +++ b/engine/slot_machine.asm @@ -0,0 +1,2112 @@ +_SlotMachine: + ld hl, Options + set 4, [hl] + call Function926f7 + call DelayFrame +.asm_926d2 + call Function927af + jr nc, .asm_926d2 + call WaitSFX + ld de, SFX_QUIT_SLOTS + call PlaySFX + call WaitSFX + call ClearBGPalettes + callba MobileFn_105fd0 + ld hl, Options + res 4, [hl] + ld hl, rLCDC ; $ff40 + res 2, [hl] + ret + +Function926f7: ; 926f7 (24:66f7) + call ClearBGPalettes + call ClearTileMap + call ClearSprites + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + call DisableLCD + ld hl, VBGMap0 tile $00 + lb bc, 4, 0 + ld a, $7f + call ByteFill + ld b, $5 + call GetSGBLayout + callab Function8cf53 + ld hl, wc6d0 + ld bc, $48 + xor a + call ByteFill + ld hl, Slots2LZ + ld de, VTiles0 tile $00 + call Decompress + ld hl, Slots3LZ + ld de, VTiles0 tile $40 + call Decompress + ld hl, Slots1LZ + ld de, VTiles2 tile $00 + call Decompress + ld hl, Slots2LZ + ld de, VTiles2 tile $25 + call Decompress + ld hl, SlotsTilemap + decoord 0, 0 + ld bc, 20 * 12 + call CopyBytes + ld hl, rLCDC ; $ff40 + set 2, [hl] + call EnableLCD + ld hl, wc6d0 + ld bc, $64 + xor a + call ByteFill + call Function92a98 + call Function9279b + ld a, $7 + ld hl, wc300 + ld [hli], a + ld [hl], $40 + xor a + ld [wJumptableIndex], a + ld a, $ff + ld [wc709], a + ld de, MUSIC_GAME_CORNER + call PlayMusic + xor a + ld [wd002], a + call Random + and $2a + ret nz + ld a, $1 + ld [wd002], a + ret + +Function9279b: ; 9279b (24:679b) + ld a, $e4 + call DmgToCgbBGPals + lb de, $e4, $e4 + ld a, [hCGB] + and a + jr nz, .asm_927ab + lb de, $c0, $e4 +.asm_927ab + call DmgToCgbObjPals + ret + +Function927af: ; 927af (24:67af) + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_927d1 + call Function92844 + call Function92b0f + xor a + ld [wc3b5], a + callab Function8cfa8 + call Function927f8 + call Function927d3 + call DelayFrame + and a + ret +.asm_927d1 + scf + ret + +Function927d3: ; 927d3 (24:67d3) + ret +; 927d4 (24:67d4) + +Function927d4: ; 927d4 + ld a, [wc6d0] + and a + ret nz + ld a, [wc6e0] + and a + ret nz + ld a, [wc70c] + and a + jr nz, .asm_927ea + ld a, $e4 + call DmgToCgbBGPals + ret + +.asm_927ea + ld a, [TextDelayFrames] + and $7 + ret nz + ld a, [rBGP] + xor %1100 + call DmgToCgbBGPals + ret +; 927f8 + +Function927f8: ; 927f8 (24:67f8) + hlcoord 5, 1 + ld de, Coins + lb bc, PRINTNUM_LEADINGZEROS | 2, 4 + call PrintNum + hlcoord 11, 1 + ld de, wc711 + lb bc, PRINTNUM_LEADINGZEROS | 2, 4 + call PrintNum + ret +; 92811 (24:6811) + +Function92811: ; 92811 + ld a, [wc709] + add 0 + daa + ld e, a + and $f + add "0" + hlcoord 1, 0 + ld [hl], a + ld a, e + swap a + and $f + add "0" + hlcoord 0, 0 + ld [hl], a + ret +; 9282c + +Function9282c: ; 9282c + ld hl, wcf66 + ld a, [hl] + inc [hl] + and $7 + ret nz + ld hl, Sprites + $42 + ld c, $18 +.asm_92839 + ld a, [hl] + xor $20 + ld [hli], a +rept 3 + inc hl +endr + dec c + jr nz, .asm_92839 + ret +; 92844 + +Function92844: ; 92844 (24:6844) + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, Jumptable_92853 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 92853 (24:6853) + + +Jumptable_92853: ; 92853 (24:6853) + dw Function9287e + dw Function9288e + dw Function928c6 + dw Function928d6 + dw Function928e6 + dw Function92900 + dw Function92910 + dw Function9292a + dw Function9293a + dw Function92879 + dw Function92879 + dw Function92879 + dw Function92955 + dw Function9296b + dw Function92987 + dw Function9299e + dw Function929a4 + dw Function929d9 + dw Function929f0 + + +Function92879: ; 92879 (24:6879) + ld hl, wJumptableIndex + inc [hl] + ret + +Function9287e: ; 9287e (24:687e) + call Function92879 + xor a + ld [wc70b], a + ld [wc70c], a + ld a, $ff + ld [wc70d], a + ret + +Function9288e: ; 9288e (24:688e) + call Function9307c + jr nc, .asm_92899 + ld a, $12 + ld [wJumptableIndex], a + ret +.asm_92899 + call Function92879 + call Function9303f + call Function93002 + ld a, $20 + ld [wcf64], a + ld a, $4 + ld [wc6d0], a + ld [wc6e0], a + ld [wc6f0], a + ld a, $4 + ld [wc6d9], a + ld [wc6e9], a + ld [wc6f9], a + call WaitSFX + ld a, SFX_SLOT_MACHINE_START + call Function9331e + ret + +Function928c6: ; 928c6 (24:68c6) + ld hl, wcf64 + ld a, [hl] + and a + jr z, .asm_928cf + dec [hl] + ret +.asm_928cf + call Function92879 + xor a + ld [hJoypadSum], a + ret + +Function928d6: ; 928d6 (24:68d6) + ld hl, hJoypadSum ; $ffa5 + ld a, [hl] + and A_BUTTON + ret z + call Function92879 + call Function92a2b + ld [wc6d0], a + +Function928e6: ; 928e6 (24:68e6) + ld a, [wc6d0] + cp $0 + ret nz + ld a, SFX_STOP_SLOT + call Function9331e + ld bc, wc6d0 + ld de, wc700 + call Function929f6 + call Function92879 + xor a + ld [hJoypadSum], a + +Function92900: ; 92900 (24:6900) + ld hl, hJoypadSum ; $ffa5 + ld a, [hl] + and A_BUTTON + ret z + call Function92879 + call Function92a2e + ld [wc6e0], a + +Function92910: ; 92910 (24:6910) + ld a, [wc6e0] + cp $0 + ret nz + ld a, SFX_STOP_SLOT + call Function9331e + ld bc, wc6e0 + ld de, wc703 + call Function929f6 + call Function92879 + xor a + ld [hJoypadSum], a + +Function9292a: ; 9292a (24:692a) + ld hl, hJoypadSum ; $ffa5 + ld a, [hl] + and A_BUTTON + ret z + call Function92879 + call Function92a60 + ld [wc6f0], a + +Function9293a: ; 9293a (24:693a) + ld a, [wc6f0] + cp $0 + ret nz + ld a, SFX_STOP_SLOT + call Function9331e + ld bc, wc6f0 + ld de, wc706 + call Function929f6 + call Function92879 + xor a + ld [hJoypadSum], a + ret + +Function92955: ; 92955 (24:6955) + ld a, [wc70d] + cp $ff + jr nz, .asm_92963 + call Function92879 + call Function92879 + ret +.asm_92963 + call Function92879 + ld a, $10 + ld [wcf64], a + +Function9296b: ; 9296b (24:696b) + ld hl, wcf64 + ld a, [hl] + and a + jr z, .asm_92980 + dec [hl] + srl a + ret z + ld a, [rOBP0] + xor $ff + ld e, a + ld d, a + call DmgToCgbObjPals + ret +.asm_92980 + call Function9279b + call Function92879 + ret + +Function92987: ; 92987 (24:6987) + xor a + ld [wc70b], a + ld [wc70c], a + ld a, $e4 + call DmgToCgbBGPals + call Function93124 + xor a + ld [wcf64], a + call Function92879 + ret + +Function9299e: ; 9299e (24:699e) + call Function93158 + call Function92879 + +Function929a4: ; 929a4 (24:69a4) + ld hl, wcf64 + ld a, [hl] + inc [hl] + and $1 + ret z + ld hl, wc711 + ld a, [hli] + ld d, a + or [hl] + jr z, .asm_929d5 + ld e, [hl] + dec de + ld [hl], e + dec hl + ld [hl], d + ld hl, Coins + ld d, [hl] + inc hl + ld e, [hl] + call Function92a04 + jr c, .asm_929c5 + inc de +.asm_929c5 + ld [hl], e + dec hl + ld [hl], d + ld a, [wcf64] + and $7 + ret z + ld de, SFX_GET_COIN_FROM_SLOTS + call PlaySFX + ret +.asm_929d5 + call Function92879 + ret + +Function929d9: ; 929d9 (24:69d9) + call Function9304c + call WaitPressAorB_BlinkCursor + call Function930e9 + jr c, .asm_929ea + ld a, $0 + ld [wJumptableIndex], a + ret +.asm_929ea + ld a, $12 + ld [wJumptableIndex], a + ret + +Function929f0: ; 929f0 (24:69f0) + ld hl, wJumptableIndex + set 7, [hl] + ret + +Function929f6: ; 929f6 (24:69f6) + push de + call Function92a12 + pop de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ret + +Function92a04: ; 92a04 (24:6a04) + ld a, d + cp 9999 / $100 + jr c, .asm_92a10 + ld a, e + cp 9999 % $100 + jr c, .asm_92a10 + scf + ret +.asm_92a10 + and a + ret + +Function92a12: ; 92a12 (24:6a12) + ld hl, $3 + add hl, bc + ld a, [hl] + and a + jr nz, .asm_92a1c + ld a, $f +.asm_92a1c + dec a + and $f + ld e, a + ld d, $0 + ld hl, $1 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ret + +Function92a2b: ; 92a2b (24:6a2b) + ld a, $7 + ret + +Function92a2e: ; 92a2e (24:6a2e) + ld a, [wc70a] + cp $2 + jr c, .asm_92a4e + ld a, [wc709] + and a + jr z, .asm_92a3f + cp $ff + jr nz, .asm_92a4e +.asm_92a3f + call Function92a51 + jr nz, .asm_92a4e + call Random + cp $50 + jr nc, .asm_92a4e + ld a, $a + ret +.asm_92a4e + ld a, $8 + ret + +Function92a51: ; 92a51 (24:6a51) + ld a, [wc700] + and a + ret z + ld a, [wc701] + and a + ret z + ld a, [wc702] + and a + ret + +Function92a60: ; 92a60 (24:6a60) + ld a, [wc70b] + and a + jr z, .asm_92a95 + ld a, [wc70c] + and a + jr z, .asm_92a95 + ld a, [wc709] + and a + jr nz, .asm_92a84 + call Random + cp 180 + jr nc, .asm_92a95 + cp 120 + jr nc, .asm_92a92 + cp 60 + jr nc, .asm_92a8f + ld a, $15 + ret +.asm_92a84 + call Random + cp $a0 + jr nc, .asm_92a95 + cp $50 + jr nc, .asm_92a92 +.asm_92a8f + ld a, $12 + ret +.asm_92a92 + ld a, $10 + ret +.asm_92a95 + ld a, $9 + ret + +Function92a98: ; 92a98 (24:6a98) + ld bc, wc6d0 + ld hl, $6 + add hl, bc + ld de, Sprites + $40 + ld [hl], e + inc hl + ld [hl], d + ld hl, $1 + add hl, bc + ld de, Unknown_93327 + ld [hl], e + inc hl + ld [hl], d + ld hl, $8 + add hl, bc + ld [hl], $30 + call Function92af9 + ld bc, wc6e0 + ld hl, $6 + add hl, bc + ld de, Sprites + $60 + ld [hl], e + inc hl + ld [hl], d + ld hl, $1 + add hl, bc + ld de, Unknown_93339 + ld [hl], e + inc hl + ld [hl], d + ld hl, $8 + add hl, bc + ld [hl], $50 + call Function92af9 + ld bc, wc6f0 + ld hl, $6 + add hl, bc + ld de, Sprites + $80 + ld [hl], e + inc hl + ld [hl], d + ld hl, $1 + add hl, bc + ld de, Unknown_9334b + ld [hl], e + inc hl + ld [hl], d + ld hl, $8 + add hl, bc + ld [hl], $70 + call Function92af9 + ret + +Function92af9: ; 92af9 (24:6af9) + ld hl, 0 + add hl, bc + ld [hl], $0 + ld hl, $3 + add hl, bc + ld [hl], $e + ld hl, $4 + add hl, bc + ld [hl], $0 + call Function92b53 + ret + +Function92b0f: ; 92b0f (24:6b0f) + ld bc, wc6d0 + call Function92b22 + ld bc, wc6e0 + call Function92b22 + ld bc, wc6f0 + call Function92b22 + ret + +Function92b22: ; 92b22 (24:6b22) + ld hl, $4 + add hl, bc + ld a, [hl] + and $f + jr nz, .asm_92b2e + call Function92bd4 +.asm_92b2e + ld hl, $5 + add hl, bc + ld a, [hl] + and a + ret z + ld d, a + ld hl, $4 + add hl, bc + add [hl] + ld [hl], a + and $f + jr z, Function92b53 + ld hl, $6 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld e, $8 +.asm_92b49 + ld a, [hl] + add d + ld [hli], a +rept 3 + inc hl +endr + dec e + jr nz, .asm_92b49 + ret + +Function92b53: ; 92b53 (24:6b53) + ld hl, $8 + add hl, bc + ld a, [hl] + ld [wc712 + 1], a + ld a, $50 + ld [wc712 + 2], a + ld hl, $3 + add hl, bc + ld e, [hl] + ld d, $0 + ld hl, $1 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + call Function92b83 + ld hl, $3 + add hl, bc + ld a, [hl] + inc a + and $f + cp $f + jr nz, .asm_92b81 + xor a +.asm_92b81 + ld [hl], a + ret + +Function92b83: ; 92b83 (24:6b83) + ld hl, $6 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.asm_92b8a + ld a, [wc712 + 2] + ld [hli], a + ld a, [wc712 + 1] + ld [hli], a + ld a, [de] + ld [hli], a + srl a + srl a + set 7, a + ld [hli], a + ld a, [wc712 + 2] + ld [hli], a + ld a, [wc712 + 1] + add $8 + ld [hli], a + ld a, [de] +rept 2 + inc a +endr + ld [hli], a + srl a + srl a + set 7, a + ld [hli], a + inc de + ld a, [wc712 + 2] + sub $10 + ld [wc712 + 2], a + cp $10 + jr nz, .asm_92b8a + ret +; 92bbe (24:6bbe) + +Function92bbe: ; 92bbe + push hl + srl a + srl a + add Unknown_92bce % $100 + ld l, a + ld a, 0 + adc Unknown_92bce / $100 + ld h, a + ld a, [hl] + pop hl + ret +; 92bce + +Unknown_92bce: ; 92bce + db 0, 1, 2, 3, 4, 5 +; 92bd4 + +Function92bd4: ; 92bd4 (24:6bd4) + ld hl, 0 + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, Jumptable_92be4 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 92be4 (24:6be4) + +Jumptable_92be4: ; 92be4 + dw Function92c16 + dw Function92c4c + dw Function92c17 + dw Function92c1e + dw Function92c25 + dw Function92c2c + dw Function92c33 + dw Function92c5e + dw Function92c86 + dw Function92ca9 + dw Function92cd2 + dw Function92cf8 + dw Function92d13 + dw Function92df7 + dw Function92e10 + dw Function92e31 + dw Function92e47 + dw Function92e64 + dw Function92d20 + dw Function92d4f + dw Function92d6e + dw Function92d7e + dw Function92da4 + dw Function92db3 + dw Function92dca +; 92c16 + +Function92c16: ; 92c16 + ret +; 92c17 + +Function92c17: ; 92c17 + ld hl, $5 + add hl, bc + ld [hl], $10 + ret +; 92c1e + +Function92c1e: ; 92c1e + ld hl, $5 + add hl, bc + ld [hl], $8 + ret +; 92c25 + +Function92c25: ; 92c25 + ld hl, $5 + add hl, bc + ld [hl], $4 + ret +; 92c2c + +Function92c2c: ; 92c2c + ld hl, $5 + add hl, bc + ld [hl], $2 + ret +; 92c33 + +Function92c33: ; 92c33 + ld hl, $5 + add hl, bc + ld [hl], $1 + ret +; 92c3a + +Function92c3a: ; 92c3a + ld hl, $5 + add hl, bc + ld [hl], $0 + ld hl, 0 + add hl, bc + ld [hl], $1 + ld hl, $f + add hl, bc + ld [hl], $3 + +Function92c4c: ; 92c4c + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_92c56 + dec [hl] + ret + +.asm_92c56 + ld hl, 0 + add hl, bc + ld a, $0 + ld [hl], a + ret +; 92c5e + +Function92c5e: ; 92c5e + ld a, [wc709] + cp $ff + jr z, .asm_92c72 + ld hl, $9 + add hl, bc + ld a, [hl] + and a + jr z, .asm_92c72 + dec [hl] + call Function92c76 + ret nz + +.asm_92c72 + call Function92c3a + ret +; 92c76 + +Function92c76: ; 92c76 + call Function92a12 + ld a, [wc709] + ld e, a + ld a, [hli] + cp e + ret z + ld a, [hli] + cp e + ret z + ld a, [hl] + cp e + ret +; 92c86 + +Function92c86: ; 92c86 + call Function92e94 + jr nc, .asm_92c94 + ld a, [wc717] + ld hl, wc709 + cp [hl] + jr z, .asm_92ca5 + +.asm_92c94 + ld a, [wc709] + cp $ff + jr z, .asm_92ca5 + ld hl, $9 + add hl, bc + ld a, [hl] + and a + jr z, .asm_92ca5 + dec [hl] + ret + +.asm_92ca5 + call Function92c3a + ret +; 92ca9 + +Function92ca9: ; 92ca9 + call Function92f1d + jr nc, .asm_92cbd + ld hl, wc709 + cp [hl] + jr z, .asm_92cce + ld hl, $9 + add hl, bc + ld a, [hl] + and a + ret z + dec [hl] + ret + +.asm_92cbd + ld a, [wc709] + cp $ff + jr z, .asm_92cce + ld hl, $9 + add hl, bc + ld a, [hl] + and a + jr z, .asm_92cce + dec [hl] + ret + +.asm_92cce + call Function92c3a + ret +; 92cd2 + +Function92cd2: ; 92cd2 + call Function92e94 + jr nc, .asm_92ce1 + ld a, [wc70c] + and a + jr z, .asm_92ce1 + call Function92c3a + ret + +.asm_92ce1 + ld a, SFX_STOP_SLOT + call Function9331e + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $a + add hl, bc + ld [hl], $20 + ld hl, $5 + add hl, bc + ld [hl], $0 + ret +; 92cf8 + +Function92cf8: ; 92cf8 + ld hl, $a + add hl, bc + ld a, [hl] + and a + jr z, .asm_92d02 + dec [hl] + ret + +.asm_92d02 + ld a, SFX_THROW_BALL + call Function9331e + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $5 + add hl, bc + ld [hl], $8 + ret +; 92d13 + +Function92d13: ; 92d13 + call Function92e94 + ret nc + ld a, [wc70c] + and a + ret z + call Function92c3a + ret +; 92d20 + +Function92d20: ; 92d20 + call Function92f1d + ret c + ld a, SFX_STOP_SLOT + call Function9331e + call Function93316 + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $5 + add hl, bc + ld [hl], $0 + call Function92fc0 + push bc + push af + ld de, $6068 + ld a, $6 + call Function3b2a + ld hl, $e + add hl, bc + pop af + ld [hl], a + pop bc + xor a + ld [wcf64], a + +Function92d4f: ; 92d4f + ld a, [wcf64] + cp $2 + jr z, .asm_92d5b + cp $1 + jr z, .asm_92d62 + ret + +.asm_92d5b + call Function92f1d + call Function92c3a + ret + +.asm_92d62 + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $5 + add hl, bc + ld [hl], $8 + ret +; 92d6e + +Function92d6e: ; 92d6e + xor a + ld [wcf64], a + ld hl, 0 + add hl, bc + dec [hl] + ld hl, $5 + add hl, bc + ld [hl], $0 + ret +; 92d7e + +Function92d7e: ; 92d7e + call Function92f1d + ret c + ld a, SFX_STOP_SLOT + call Function9331e + call Function93316 + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $5 + add hl, bc + ld [hl], $0 + push bc + ld de, $6000 + ld a, $7 + call Function3b2a + pop bc + xor a + ld [wcf64], a + ret +; 92da4 + +Function92da4: ; 92da4 + ld a, [wcf64] + and a + ret z + ld hl, 0 + add hl, bc + inc [hl] + ld a, $2 + ld [wcf64], a + +Function92db3: ; 92db3 + ld a, [wcf64] + cp $4 + ret c + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $5 + add hl, bc + ld [hl], $10 + ld hl, $a + add hl, bc + ld [hl], $11 + +Function92dca: ; 92dca + ld hl, $a + add hl, bc + ld a, [hl] + and a + jr z, .asm_92dd4 + dec [hl] + ret + +.asm_92dd4 + call Function92f1d + jr nc, .asm_92de5 + and a + jr nz, .asm_92de5 + ld a, $5 + ld [wcf64], a + call Function92c3a + ret + +.asm_92de5 + ld hl, $5 + add hl, bc + ld [hl], $0 + ld hl, 0 + add hl, bc +rept 2 + dec [hl] +endr + ld a, $1 + ld [wcf64], a + ret +; 92df7 + +Function92df7: ; 92df7 + call Function92f1d + ret c + ld a, SFX_STOP_SLOT + call Function9331e + call Function93316 + ld hl, 0 + add hl, bc + inc [hl] + call Function92fc0 + ld hl, $a + add hl, bc + ld [hl], a + +Function92e10: ; 92e10 + ld hl, $a + add hl, bc + ld a, [hl] + and a + jr nz, .asm_92e1f + call Function92f1d + call Function92c3a + ret + +.asm_92e1f + dec [hl] + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $b + add hl, bc + ld [hl], $20 + ld hl, $5 + add hl, bc + ld [hl], $0 + +Function92e31: ; 92e31 + ld hl, $b + add hl, bc + ld a, [hl] + and a + jr z, .asm_92e3b + dec [hl] + ret + +.asm_92e3b + ld hl, 0 + add hl, bc + dec [hl] + ld hl, $5 + add hl, bc + ld [hl], $8 + ret +; 92e47 + +Function92e47: ; 92e47 + call Function92f1d + ret c + ld a, SFX_STOP_SLOT + call Function9331e + call Function93316 + ld hl, $5 + add hl, bc + ld [hl], $1 + ld hl, 0 + add hl, bc + inc [hl] + ld hl, $a + add hl, bc + ld [hl], $10 + +Function92e64: ; 92e64 + ld hl, $a + add hl, bc + ld a, [hl] + and a + jr z, .asm_92e73 + dec [hl] +.asm_92e6d + ld a, SFX_GOT_SAFARI_BALLS + call Function9331e + ret + +.asm_92e73 + ld a, [wc709] + and a + jr nz, .asm_92e88 + call Function92f1d + jr nc, .asm_92e6d + and a + jr nz, .asm_92e6d + call Function92c3a + call WaitSFX + ret + +.asm_92e88 + call Function92f1d + jr c, .asm_92e6d + call Function92c3a + call WaitSFX + ret +; 92e94 + +Function92e94: ; 92e94 + xor a + ld [wc70b], a + ld [wc70c], a + call Function92a12 + call Function92fb4 + ld a, [wc70a] + and 3 + ld e, a + ld d, 0 + ld hl, Jumptable_92ebd +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .asm_92eb6 + push de + jp [hl] + +.asm_92eb6 + ld a, [wc70b] + and a + ret z + scf + ret +; 92ebd + +Jumptable_92ebd: ; 92ebd + dw Function92ed4 + dw Function92ed1 + dw Function92ecb + dw Function92ec5 +; 92ec5 + +Function92ec5: ; 92ec5 + call Function92ee0 + call Function92ef6 + +Function92ecb: ; 92ecb + call Function92ed5 + call Function92f01 + +Function92ed1: ; 92ed1 + call Function92eeb + +Function92ed4: ; 92ed4 + ret +; 92ed5 + +Function92ed5: ; 92ed5 + ld hl, wc70e + ld a, [EnemyScreens] + cp [hl] + call z, Function92f0c + ret +; 92ee0 + +Function92ee0: ; 92ee0 + ld hl, wEnemyGoesFirst + ld a, [wc700] + cp [hl] + call z, Function92f0c + ret +; 92eeb + +Function92eeb: ; 92eeb + ld hl, wEnemyGoesFirst + ld a, [wc701] + cp [hl] + call z, Function92f0c + ret +; 92ef6 + +Function92ef6: ; 92ef6 + ld hl, wEnemyGoesFirst + ld a, [wc702] + cp [hl] + call z, Function92f0c + ret +; 92f01 + +Function92f01: ; 92f01 + ld hl, wc710 + ld a, [wc702] + cp [hl] + call z, Function92f0c + ret +; 92f0c + +Function92f0c: ; 92f0c + ld [wc717], a + and a + jr nz, .asm_92f17 + ld a, $1 + ld [wc70c], a + +.asm_92f17 + ld a, $1 + ld [wc70b], a + ret +; 92f1d + +Function92f1d: ; 92f1d + ld a, $ff + ld [EffectFailed], a + call Function92a12 + call Function92fb4 + ld a, [wc70a] + and 3 + ld e, a + ld d, 0 + ld hl, Jumptable_92f48 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .asm_92f3d + push de + jp [hl] + +.asm_92f3d + ld a, [wc70d] + cp $ff + jr nz, .asm_92f46 + and a + ret + +.asm_92f46 + scf + ret +; 92f48 + +Jumptable_92f48: ; 92f48 + dw Function92f5f + dw Function92f5c + dw Function92f56 + dw Function92f50 +; 92f50 + +Function92f50: ; 92f50 + call Function92f70 + call Function92f90 + +Function92f56: ; 92f56 + call Function92f60 + call Function92fa0 + +Function92f5c: ; 92f5c + call Function92f80 + +Function92f5f: ; 92f5f + ret +; 92f60 + +Function92f60: ; 92f60 + ld hl, wc70e + ld a, [wc700] + cp [hl] + ret nz + ld hl, wc703 + cp [hl] + call z, Function92fb0 + ret +; 92f70 + +Function92f70: ; 92f70 + ld hl, wc710 + ld a, [wc700] + cp [hl] + ret nz + ld hl, wc704 + cp [hl] + call z, Function92fb0 + ret +; 92f80 + +Function92f80: ; 92f80 + ld hl, wEnemyGoesFirst + ld a, [wc701] + cp [hl] + ret nz + ld hl, wc704 + cp [hl] + call z, Function92fb0 + ret +; 92f90 + +Function92f90: ; 92f90 + ld hl, wc70e + ld a, [wc702] + cp [hl] + ret nz + ld hl, wc704 + cp [hl] + call z, Function92fb0 + ret +; 92fa0 + +Function92fa0: ; 92fa0 + ld hl, wc710 + ld a, [wc702] + cp [hl] + ret nz + ld hl, wc705 + cp [hl] + call z, Function92fb0 + ret +; 92fb0 + +Function92fb0: ; 92fb0 + ld [wc70d], a + ret +; 92fb4 + +Function92fb4: ; 92fb4 + ld de, wc70e + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ret +; 92fc0 + +Function92fc0: ; 92fc0 + ld hl, $3 + add hl, bc + ld a, [hl] + push af + push hl + call Function92fcf + pop hl + pop af + ld [hl], a + ld a, e + ret +; 92fcf + +Function92fcf: ; 92fcf + ld a, [wc709] + and a + jr nz, .asm_92fe8 + ld e, $0 +.asm_92fd7 + ld hl, $3 + add hl, bc + inc [hl] + inc e + push de + call Function92f1d + pop de + jr nc, .asm_92fd7 + and a + jr nz, .asm_92fd7 + ret + +.asm_92fe8 + call Random + and $7 + cp $4 + jr c, .asm_92fe8 + ld e, a +.asm_92ff2 + ld a, e + inc e + ld hl, $3 + add hl, bc + add [hl] + ld [hl], a + push de + call Function92f1d + pop de + jr c, .asm_92ff2 + ret +; 93002 + +Function93002: ; 93002 (24:7002) + ld a, [wc709] + and a + ret z + ld hl, Unknown_93023 + ld a, [ScriptVar] + and a + jr z, .asm_93013 + ld hl, Unknown_93031 +.asm_93013 + call Random + ld c, a +.asm_93017 + ld a, [hli] + cp c + jr nc, .asm_9301e + inc hl + jr .asm_93017 +.asm_9301e + ld a, [hl] + ld [wc709], a + ret +; 93023 (24:7023) + +Unknown_93023: ; 93023 + db $01, $00 + db $03, $04 + db $0a, $14 + db $14, $10 + db $28, $0c + db $30, $08 + db $ff, $ff +; 93031 + +Unknown_93031: ; 93031 + db $02, $00 + db $03, $04 + db $08, $14 + db $10, $10 + db $1e, $0c + db $50, $08 + db $ff, $ff +; 9303f + +Function9303f: ; 9303f (24:703f) + ld b, $14 + ld a, [wc70a] + dec a + jr z, asm_93066 + dec a + jr z, asm_9305a + jr asm_9304e + +Function9304c: ; 9304c (24:704c) + ld b, $23 +asm_9304e: ; 9304e (24:704e) + hlcoord 3, 2 + call Function93069 + hlcoord 3, 10 + call Function93069 +asm_9305a: ; 9305a (24:705a) + hlcoord 3, 4 + call Function93069 + hlcoord 3, 8 + call Function93069 +asm_93066: ; 93066 (24:7066) + hlcoord 3, 6 + +Function93069: ; 93069 (24:7069) + ld a, b + ld [hl], a + ld de, $d + add hl, de + ld [hl], a + ld de, $7 + add hl, de + inc a + ld [hl], a + ld de, $d + add hl, de + ld [hl], a + ret + +Function9307c: ; 9307c (24:707c) + ld hl, UnknownText_0x930c7 + call PrintText + ld hl, MenuDataHeader_0x930d6 + call LoadMenuDataHeader + call InterpretMenu2 + call WriteBackup + ret c + ld a, [MenuSelection2] + ld b, a + ld a, $4 + sub b + ld [wc70a], a + ld hl, Coins + ld c, a + ld a, [hli] + and a + jr nz, .asm_930ad + ld a, [hl] + cp c + jr nc, .asm_930ad + ld hl, UnknownText_0x930d1 + call PrintText + jr Function9307c +.asm_930ad + ld hl, Coins + 1 + ld a, [hl] + sub c + ld [hld], a + jr nc, .asm_930b6 + dec [hl] +.asm_930b6 + call WaitSFX + ld de, SFX_PAY_DAY + call PlaySFX + ld hl, UnknownText_0x930cc + call PrintText + and a + ret +; 930c7 (24:70c7) + +UnknownText_0x930c7: ; 0x930c7 + ; Bet how many coins? + text_jump UnknownText_0x1c5049 + db "@" +; 0x930cc + +UnknownText_0x930cc: ; 0x930cc + ; Start! + text_jump UnknownText_0x1c505e + db "@" +; 0x930d1 + +UnknownText_0x930d1: ; 0x930d1 + ; Not enough coins. + text_jump UnknownText_0x1c5066 + db "@" +; 0x930d6 + +MenuDataHeader_0x930d6: ; 0x930d6 + db $40 ; flags + db 10, 14 ; start coords + db 17, 19 ; end coords + dw MenuData2_0x930de + db 1 ; default option +; 0x930de + +MenuData2_0x930de: ; 0x930de + db $80 ; flags + db 3 ; items + db " 3@" + db " 2@" + db " 1@" +; 0x930e9 + +Function930e9: ; 930e9 (24:70e9) + ld hl, Coins + ld a, [hli] + or [hl] + jr nz, .asm_930fd + ld hl, UnknownText_9311a + call PrintText + ld c, 60 + call DelayFrames + jr .asm_93118 +.asm_930fd + ld hl, UnknownText_9311f + call PrintText + call LoadMenuTextBox + lb bc, 14, 12 + call PlaceYesNoBox + ld a, [MenuSelection2] + dec a + call WriteBackup + and a + jr nz, .asm_93118 + and a + ret +.asm_93118 + scf + ret +; 9311a (24:711a) + +UnknownText_9311a: ; 9311a + text_jump UnknownText_0x1c5079 + db "@" + +UnknownText_9311f: ; 9311f + text_jump UnknownText_0x1c5092 + db "@" + +Function93124: ; 93124 (24:7124) + ld a, [EffectFailed] + cp $ff + jr z, .asm_93151 + srl a + ld e, a + ld d, 0 + ld hl, .data_93145 + add hl, de + ld a, [hli] + ld [PlayerUsedMoves], a + ld e, a + ld a, [hl] + ld [wc711], a + ld d, a + callba MobileFn_105fe3 + ret + +.data_93145 + db $2c, $01 + db $32, $00 + db $06, $00 + db $08, $00 + db $0a, $00 + db $0f, $00 + +.asm_93151 + ld hl, wc711 + xor a + ld [hli], a + ld [hl], a + ret + +Function93158: ; 93158 (24:7158) + ld a, [EffectFailed] + cp $ff + jr nz, .asm_9316c + ld hl, UnknownText_0x931e0 + call PrintText + callba MobileFn_105fd0 + ret +.asm_9316c + srl a + ld e, a + ld d, 0 + ld hl, Unknown_93195 +rept 3 + add hl, de +endr + ld de, StringBuffer2 + ld bc, $4 + call CopyBytes + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .asm_93188 + push de + jp [hl] +.asm_93188 + ld hl, UnknownText_0x931b9 + call PrintText + callba MobileFn_105f9f + ret +; 93195 (24:7195) + +Unknown_93195: ; 93195 + db "300@" + dw Function931e5 + db "50@@" + dw Function9320b + db "6@@@" + dw Function93214 + db "8@@@" + dw Function93214 + db "10@@" + dw Function93214 + db "15@@" + dw Function93214 +; 931b9 + +UnknownText_0x931b9: ; 0x931b9 + start_asm +; 0x931ba + +Function931ba: ; 931ba + ld a, [EffectFailed] + add $25 + ldcoord_a 2, 13 + inc a + ldcoord_a 2, 14 + inc a + ldcoord_a 3, 13 + inc a + ldcoord_a 3, 14 + hlcoord 18, 17 + ld [hl], $ee + ld hl, UnknownText_0x931db +rept 4 + inc bc +endr + ret +; 931db + +UnknownText_0x931db: ; 0x931db + ; lined up! Won @ coins! + text_jump UnknownText_0x1c509f + db "@" +; 0x931e0 + +UnknownText_0x931e0: ; 0x931e0 + ; Darn! + text_jump UnknownText_0x1c50bb + db "@" +; 0x931e5 + +Function931e5: ; 931e5 + ld a, SFX_2ND_PLACE + call Function9331e + call WaitSFX + ld a, [wd002] + and a + jr nz, .asm_931ff + call Random + and $14 + ret z + ld a, $ff + ld [wc709], a + ret + +.asm_931ff + call Random + and $1c + ret z + ld a, $ff + ld [wc709], a + ret +; 9320b + +Function9320b: ; 9320b + ld a, SFX_3RD_PLACE + call Function9331e + call WaitSFX + ret +; 93214 + +Function93214: ; 93214 + ld a, SFX_PRESENT + call Function9331e + call WaitSFX + ret +; 9321d + +Function9321d: ; 9321d (24:721d) + ld hl, $b + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, Jumptable_9322d +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +Jumptable_9322d: ; 9322d (24:722d) + dw Function93233 + dw Function93259 + dw Function93289 + + +Function93233: ; 93233 (24:7233) + ld hl, $e + add hl, bc + ld a, [hl] + and a + jr nz, .asm_93247 + ld a, $2 + ld [wcf64], a + ld hl, 0 + add hl, bc + ld [hl], $0 + ret +.asm_93247 + dec [hl] + ld hl, $b + add hl, bc + inc [hl] + ld hl, $c + add hl, bc + ld [hl], $30 + ld hl, $6 + add hl, bc + ld [hl], $0 + +Function93259: ; 93259 (24:7259) + ld hl, $c + add hl, bc + ld a, [hl] + cp $20 + jr c, .asm_93273 + dec [hl] + ld e, a + ld d, $70 + callba Functionce765 + ld a, e + ld hl, $7 + add hl, bc + ld [hl], a + ret +.asm_93273 + ld hl, $b + add hl, bc + inc [hl] + ld hl, $d + add hl, bc + ld [hl], $2 + ld a, $1 + ld [wcf64], a + ld a, SFX_PLACE_PUZZLE_PIECE_DOWN + call Function9331e + ret + +Function93289: ; 93289 (24:7289) + ld hl, $6 + add hl, bc + ld a, [hl] +rept 2 + inc [hl] +endr + cp $48 + jr nc, .asm_932a3 + and $3 + ret nz + ld hl, $d + add hl, bc + ld a, [hl] + xor $ff + inc a + ld [hl], a + ld [hSCY], a + ret +.asm_932a3 + ld hl, $b + add hl, bc + xor a + ld [hl], a + ld [hSCY], a + ret + +Function932ac: ; 932ac (24:72ac) + ld hl, $b + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, Jumptable_932bc +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +Jumptable_932bc: ; 932bc (24:72bc) + dw Function932c2 + dw Function932e0 + dw Function932fc + + +Function932c2: ; 932c2 (24:72c2) + ld hl, $4 + add hl, bc + ld a, [hl] + inc [hl] + cp $68 + jr z, .asm_932d6 + and $f + ret nz + ld de, SFX_JUMP_OVER_LEDGE + call PlaySFX + ret +.asm_932d6 + ld hl, $b + add hl, bc + inc [hl] + ld a, $1 + ld [wcf64], a + +Function932e0: ; 932e0 (24:72e0) + ld a, [wcf64] + cp $2 + jr z, .asm_932f1 + cp $5 + ret nz + ld hl, 0 + add hl, bc + ld [hl], $0 + ret +.asm_932f1 + ld hl, $b + add hl, bc + inc [hl] + ld hl, $c + add hl, bc + ld [hl], $8 + +Function932fc: ; 932fc (24:72fc) + ld hl, $c + add hl, bc + ld a, [hl] + and a + jr z, .asm_93306 + dec [hl] + ret +.asm_93306 + ld hl, $b + add hl, bc + dec [hl] + push bc + ld de, $606c + ld a, $8 + call Function3b2a + pop bc + ret +; 93316 (24:7316) + +Function93316: ; 93316 + push bc + ld c, 16 + call DelayFrames + pop bc + ret +; 9331e + +Function9331e: ; 9331e (24:731e) + push de + ld e, a + ld d, 0 + call PlaySFX + pop de + ret +; 93327 (24:7327) + +Unknown_93327: ; 93327 + db $00, $08, $14, $0c, $10, $00, $08, $14, $0c, $10, $04, $08, $14, $0c, $10, $00, $08, $14 +Unknown_93339: ; 93339 + db $00, $0c, $08, $10, $14, $04, $0c, $08, $10, $14, $04, $0c, $08, $10, $14, $00, $0c, $08 +Unknown_9334b: ; 9334b + db $00, $0c, $08, $10, $14, $0c, $08, $10, $14, $0c, $04, $08, $10, $14, $0c, $00, $0c, $08 +; 9335d + +SlotsTilemap: ; 9335d +INCBIN "gfx/slots.tilemap" +; 9344d + +Slots1LZ: ; 9344d +INCBIN "gfx/slots_1.2bpp.lz" +; 935cd + +Slots2LZ: ; 935cd +INCBIN "gfx/slots_2.2bpp.lz" +; 9382d + +Slots3LZ: ; 9382d +INCBIN "gfx/slots_3.2bpp.lz" +; 93a3d diff --git a/engine/specials.asm b/engine/specials.asm index ef53daedc..21d391faa 100644 --- a/engine/specials.asm +++ b/engine/specials.asm @@ -42,7 +42,7 @@ SpecialsPointers:: ; c029 ; Map Events add_special BugContestJudging add_special CheckPartyFullAfterContest - add_special CheckFirstMonFainted + add_special ContestDropOffMons add_special ContestReturnMons add_special Special_GiveParkBalls add_special Special_CheckMagikarpLength @@ -65,18 +65,18 @@ SpecialsPointers:: ; c029 add_special Special_SlotMachine add_special Special_CardFlip add_special Special_DummyNonfunctionalGameCornerGame - add_special Special_WhiteBGMapBufferScreen - add_special FadeBlackBGMap + add_special Special_ClearBGPalettesBufferScreen + add_special FadeOutPalettes add_special Special_BattleTowerFade add_special Special_FadeBlackQuickly - add_special FadeInBGMap + add_special FadeInPalettes add_special Special_FadeInQuickly add_special Special_ReloadSpritesNoPalettes - add_special WhiteBGMap + add_special ClearBGPalettes add_special UpdateTimePals add_special ClearTileMap add_special UpdateSprites - add_special Special_ReplaceKrisSprite + add_special ReplaceKrisSprite add_special Special_GameCornerPrizeMonCheckDex add_special SpecialSeenMon add_special WaitSFX @@ -124,7 +124,7 @@ SpecialsPointers:: ; c029 add_special ProfOaksPCBoot add_special SpecialGameboyCheck add_special SpecialTrainerHouse - add_special Function16dc7 + add_special PhotoStudio add_special InitRoamMons add_special Functionc48f add_special Functionc49f @@ -139,9 +139,9 @@ SpecialsPointers:: ; c029 add_special Function1700b0 add_special Function1700ba add_special Function170114 - add_special Function170215 + add_special BattleTowerBattle add_special Function1704e1 - add_special Function17021d + add_special EmptySpecial_17021d add_special Function_LoadOpponentTrainerAndPokemonsWithOTSprite add_special Function11ba38 add_special SpecialCheckForBattleTowerRules @@ -154,7 +154,7 @@ SpecialsPointers:: ; c029 add_special Function4925b add_special SpecialOmanyteChamber add_special Function11c1ab - add_special Function170687 + add_special BattleTowerAction add_special Special_DisplayUnownWords add_special Special_Menu_ChallengeExplanationCancel add_special Function17d2b6 @@ -178,7 +178,7 @@ SpecialsPointers:: ; c029 add_special Function1037eb add_special Function10383c add_special Mobile_HealParty - add_special Function14168 + add_special RefreshSprites add_special Function1037c2 add_special Function10630f add_special Function103780 @@ -465,8 +465,8 @@ UnknownText_0xc3d6: ; 0xc3d6 db "@" ; 0xc3db -Special_WhiteBGMapBufferScreen: ; c3db - call WhiteBGMap +Special_ClearBGPalettesBufferScreen: ; c3db + call ClearBGPalettes call BufferScreen ret ; c3e2 diff --git a/engine/sprites.asm b/engine/sprites.asm new file mode 100755 index 000000000..517428007 --- /dev/null +++ b/engine/sprites.asm @@ -0,0 +1,1480 @@ +GetEmote2bpp: ; 1412a + ld a, $1 + ld [rVBK], a + call Get2bpp + xor a + ld [rVBK], a + ret +; 14135 + +_ReplaceKrisSprite:: ; 14135 + call GetPlayerSprite + ld a, [UsedSprites] + ld [hUsedSpriteIndex], a + ld a, [UsedSprites + 1] + ld [hUsedSpriteTile], a + call Function143c8 + ret +; 14146 + +Function14146: ; 14146 + ld hl, wSpriteFlags + ld a, [hl] + push af + res 7, [hl] + set 6, [hl] + call RunCallback_04 + pop af + ld [wSpriteFlags], a + ret +; 14157 + +Function14157: ; 14157 + ld hl, wSpriteFlags + ld a, [hl] + push af + set 7, [hl] + res 6, [hl] + call RunCallback_04 + pop af + ld [wSpriteFlags], a + ret +; 14168 + +RefreshSprites:: ; 14168 + call .Refresh + call RunCallback_04 + ret +; 1416f + +.Refresh: ; 1416f + xor a + ld bc, UsedSpritesEnd - UsedSprites + ld hl, UsedSprites + call ByteFill + call GetPlayerSprite + call AddMapSprites + call LoadAndSortSprites + ret +; 14183 + +GetPlayerSprite: ; 14183 +; Get Chris or Kris's sprite. + ld hl, .Chris + ld a, [wPlayerSpriteSetupFlags] + bit 2, a + jr nz, .go + ld a, [PlayerGender] + bit 0, a + jr z, .go + ld hl, .Kris + +.go + ld a, [PlayerState] + ld c, a +.loop + ld a, [hli] + cp c + jr z, .good + inc hl + cp $ff + jr nz, .loop + +; Any player state not in the array defaults to Chris's sprite. + xor a ; ld a, PLAYER_NORMAL + ld [PlayerState], a + ld a, SPRITE_CHRIS + jr .finish + +.good + ld a, [hl] + +.finish + ld [UsedSprites + 0], a + ld [PlayerSprite], a + ld [PlayerObjectSprite], a + ret + +.Chris + db PLAYER_NORMAL, SPRITE_CHRIS + db PLAYER_BIKE, SPRITE_CHRIS_BIKE + db PLAYER_SURF, SPRITE_SURF + db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU + db $ff + +.Kris + db PLAYER_NORMAL, SPRITE_KRIS + db PLAYER_BIKE, SPRITE_KRIS_BIKE + db PLAYER_SURF, SPRITE_SURF + db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU + db $ff +; 141c9 + + +AddMapSprites: ; 141c9 + call GetMapPermission + call CheckOutdoorMap + jr z, .outdoor + call AddIndoorSprites + ret + +.outdoor + call AddOutdoorSprites + ret +; 141d9 + + +AddIndoorSprites: ; 141d9 + ld hl, Map1ObjectSprite + ld a, 1 +.loop + push af + ld a, [hl] + call AddSpriteGFX + ld de, OBJECT_LENGTH + add hl, de + pop af + inc a + cp NUM_OBJECTS + jr nz, .loop + ret +; 141ee + + +AddOutdoorSprites: ; 141ee + ld a, [MapGroup] + dec a + ld c, a + ld b, 0 + ld hl, OutdoorSprites +rept 2 + add hl, bc +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld c, MAX_OUTDOOR_SPRITES +.loop + push bc + ld a, [hli] + call AddSpriteGFX + pop bc + dec c + jr nz, .loop + ret +; 14209 + + +RunCallback_04: ; 14209 + ld a, $4 + call RunMapCallback + call Function1439b + call Function14215 + ret +; 14215 + +Function14215: ; 14215 + ld a, [wSpriteFlags] + bit 6, a + ret nz + ld c, EMOTE_08 + callba LoadEmote + call GetMapPermission + call CheckOutdoorMap + ld c, EMOTE_0B + jr z, .outdoor + ld c, EMOTE_0A + +.outdoor + callba LoadEmote + ret +; 14236 + + + +SafeGetSprite: ; 14236 + push hl + call GetSprite + pop hl + ret +; 1423c + +GetSprite: ; 1423c + call GetMonSprite + ret c + + ld hl, SpriteHeaders ; address + dec a + ld c, a + ld b, 0 + ld a, 6 + call AddNTimes + ; load the address into de + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ; load the length into c + ld a, [hli] + swap a + ld c, a + ; load the sprite bank into both b and h + ld b, [hl] + ld a, [hli] + ; load the sprite type into l + ld l, [hl] + ld h, a + ret +; 14259 + + +GetMonSprite: ; 14259 +; Return carry if a monster sprite was loaded. + + cp SPRITE_POKEMON + jr c, .Normal + cp SPRITE_DAYCARE_MON_1 + jr z, .wBreedMon1 + cp SPRITE_DAYCARE_MON_2 + jr z, .wBreedMon2 + cp SPRITE_VARS + jr nc, .Variable + jr .Icon + +.Normal + and a + ret + +.Icon + sub SPRITE_POKEMON + ld e, a + ld d, 0 + ld hl, SpriteMons + add hl, de + ld a, [hl] + jr .Mon + +.wBreedMon1 + ld a, [wBreedMon1Species] + jr .Mon + +.wBreedMon2 + ld a, [wBreedMon2Species] + +.Mon + ld e, a + and a + jr z, .NoBreedmon + + callba Function8e82b + + ld l, 1 + ld h, 0 + scf + ret + +.Variable + sub SPRITE_VARS + ld e, a + ld d, 0 + ld hl, VariableSprites + add hl, de + ld a, [hl] + and a + jp nz, GetMonSprite + +.NoBreedmon + ld a, 1 + ld l, 1 + ld h, 0 + and a + ret +; 142a7 + + +_DoesSpriteHaveFacings:: ; 142a7 +; Checks to see whether we can apply a facing to a sprite. +; Returns carry unless the sprite is a Pokemon or a Still Sprite. + cp SPRITE_POKEMON + jr nc, .only_down + + push hl + push bc + ld hl, SpriteHeaders + SPRITEHEADER_TYPE ; type + dec a + ld c, a + ld b, 0 + ld a, NUM_SPRITEHEADER_FIELDS + call AddNTimes + ld a, [hl] + pop bc + pop hl + cp STILL_SPRITE + jr nz, .only_down + scf + ret + +.only_down + and a + ret +; 142c4 + + +_GetSpritePalette:: ; 142c4 + ld a, c + call GetMonSprite + jr c, .is_pokemon + + ld hl, SpriteHeaders + 5 ; palette + dec a + ld c, a + ld b, 0 + ld a, 6 + call AddNTimes + ld c, [hl] + ret + +.is_pokemon + xor a + ld c, a + ret +; 142db + + +LoadAndSortSprites: ; 142db + call LoadSpriteGFX + call SortUsedSprites + call ArrangeUsedSprites + ret +; 142e5 + + +AddSpriteGFX: ; 142e5 +; Add any new sprite ids to a list of graphics to be loaded. +; Return carry if the list is full. + + push hl + push bc + ld b, a + ld hl, UsedSprites + 2 + ld c, SPRITE_GFX_LIST_CAPACITY - 1 +.loop + ld a, [hl] + cp b + jr z, .exists + and a + jr z, .new +rept 2 + inc hl +endr + dec c + jr nz, .loop + + pop bc + pop hl + scf + ret + +.exists + pop bc + pop hl + and a + ret + +.new + ld [hl], b + pop bc + pop hl + and a + ret +; 14306 + + +LoadSpriteGFX: ; 14306 +; Bug: b is not preserved, so +; it's useless as a next count. + + ld hl, UsedSprites + ld b, SPRITE_GFX_LIST_CAPACITY +.loop + ld a, [hli] + and a + jr z, .done + push hl + call .LoadSprite + pop hl + ld [hli], a + dec b + jr nz, .loop + +.done + ret + +.LoadSprite + call GetSprite + ld a, l + ret +; 1431e + + +SortUsedSprites: ; 1431e +; Bubble-sort sprites by type. + +; Run backwards through UsedSprites to find the last one. + + ld c, SPRITE_GFX_LIST_CAPACITY + ld de, UsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2 +.FindLastSprite + ld a, [de] + and a + jr nz, .FoundLastSprite +rept 2 + dec de +endr + dec c + jr nz, .FindLastSprite +.FoundLastSprite + dec c + jr z, .quit + +; If the length of the current sprite is +; higher than a later one, swap them. + + inc de + ld hl, UsedSprites + 1 + +.CheckSprite + push bc + push de + push hl + +.CheckFollowing + ld a, [de] + cp [hl] + jr nc, .loop + +; Swap the two sprites. + + ld b, a + ld a, [hl] + ld [hl], b + ld [de], a + dec de + dec hl + ld a, [de] + ld b, a + ld a, [hl] + ld [hl], b + ld [de], a + inc de + inc hl + +; Keep doing this until everything's in order. + +.loop +rept 2 + dec de +endr + dec c + jr nz, .CheckFollowing + + pop hl +rept 2 + inc hl +endr + pop de + pop bc + dec c + jr nz, .CheckSprite + +.quit + ret +; 14355 + + +ArrangeUsedSprites: ; 14355 +; Get the length of each sprite and space them out in VRAM. +; Crystal introduces a second table in VRAM bank 0. + + ld hl, UsedSprites + ld c, SPRITE_GFX_LIST_CAPACITY + ld b, 0 +.FirstTableLength +; Keep going until the end of the list. + ld a, [hli] + and a + jr z, .quit + + ld a, [hl] + call GetSpriteLength + +; Spill over into the second table after $80 tiles. + add b + cp $80 + jr z, .loop + jr nc, .SecondTable + +.loop + ld [hl], b + inc hl + ld b, a + +; Assumes the next table will be reached before c hits 0. + dec c + jr nz, .FirstTableLength + +.SecondTable +; The second tile table starts at tile $80. + ld b, $80 + dec hl +.SecondTableLength +; Keep going until the end of the list. + ld a, [hli] + and a + jr z, .quit + + ld a, [hl] + call GetSpriteLength + +; There are only two tables, so don't go any further than that. + add b + jr c, .quit + + ld [hl], b + ld b, a + inc hl + + dec c + jr nz, .SecondTableLength + +.quit + ret +; 14386 + + +GetSpriteLength: ; 14386 +; Return the length of sprite type a in tiles. + + cp WALKING_SPRITE + jr z, .AnyDirection + cp STANDING_SPRITE + jr z, .AnyDirection + cp STILL_SPRITE + jr z, .OneDirection + + ld a, 12 + ret + +.AnyDirection + ld a, 12 + ret + +.OneDirection + ld a, 4 + ret +; 1439b + + +Function1439b: ; 1439b + ld hl, UsedSprites + ld c, SPRITE_GFX_LIST_CAPACITY +.loop + ld a, [wSpriteFlags] + res 5, a + ld [wSpriteFlags], a + ld a, [hli] + and a + jr z, .done + ld [hUsedSpriteIndex], a + ld a, [hli] + ld [hUsedSpriteTile], a + bit 7, a + jr z, .dont_set + ld a, [wSpriteFlags] + set 5, a + ld [wSpriteFlags], a + +.dont_set + push bc + push hl + call Function143c8 + pop hl + pop bc + dec c + jr nz, .loop + +.done + ret +; 143c8 + +Function143c8: ; 143c8 + ld a, [hUsedSpriteIndex] + call SafeGetSprite + ld a, [hUsedSpriteTile] + call .GetTileAddr + push hl + push de + push bc + ld a, [wSpriteFlags] + bit 7, a + jr nz, .skip + call .CopyToVram + +.skip + pop bc + ld l, c + ld h, $0 +rept 4 + add hl, hl +endr + pop de + add hl, de + ld d, h + ld e, l + pop hl + ld a, [wSpriteFlags] + bit 5, a + jr nz, .done + bit 6, a + jr nz, .done + ld a, [hUsedSpriteIndex] + call _DoesSpriteHaveFacings + jr c, .done + ld a, h + add $8 + ld h, a + call .CopyToVram + +.done + ret +; 14406 + +.GetTileAddr: ; 14406 +; Return the address of tile (a) in (hl). + and $7f + ld l, a + ld h, 0 +rept 4 + add hl, hl +endr + ld a, l + add VTiles0 % $100 + ld l, a + ld a, h + adc VTiles0 / $100 + ld h, a + ret +; 14418 + +.CopyToVram: ; 14418 + ld a, [rVBK] + push af + ld a, [wSpriteFlags] + bit 5, a + ld a, $1 + jr z, .bankswitch + ld a, $0 + +.bankswitch + ld [rVBK], a + call Get2bpp + pop af + ld [rVBK], a + ret +; 1442f + +LoadEmote:: ; 1442f +; Get the address of the pointer to emote c. + ld a, c + ld bc, 6 + ld hl, EmotesPointers + call AddNTimes +; Load the emote address into de + ld e, [hl] + inc hl + ld d, [hl] +; load the length of the emote (in tiles) into c + inc hl + ld c, [hl] + swap c +; load the emote pointer bank into b + inc hl + ld b, [hl] +; load the VRAM destination into hl + inc hl + ld a, [hli] + ld h, [hl] + ld l, a +; if the emote has a length of 0, do not proceed (error handling) + ld a, c + and a + ret z + call GetEmote2bpp + ret +; 1444d + +emote_header: MACRO + dw \1 + db \2 tiles, BANK(\1) + dw \3 +ENDM + +EmotesPointers: ; 144d +; dw source address +; db length, bank +; dw dest address + + emote_header ShockEmote, 4, VTiles1 tile $78 + emote_header QuestionEmote, 4, VTiles1 tile $78 + emote_header HappyEmote, 4, VTiles1 tile $78 + emote_header SadEmote, 4, VTiles1 tile $78 + emote_header HeartEmote, 4, VTiles1 tile $78 + emote_header BoltEmote, 4, VTiles1 tile $78 + emote_header SleepEmote, 4, VTiles1 tile $78 + emote_header FishEmote, 4, VTiles1 tile $78 + emote_header FishingRodGFX1, 1, VTiles1 tile $7c + emote_header FishingRodGFX2, 2, VTiles1 tile $7c + emote_header FishingRodGFX3, 2, VTiles1 tile $7e + emote_header FishingRodGFX4, 1, VTiles1 tile $7e +; 14495 + + +SpriteMons: ; 14495 + db UNOWN + db GEODUDE + db GROWLITHE + db WEEDLE + db SHELLDER + db ODDISH + db GENGAR + db ZUBAT + db MAGIKARP + db SQUIRTLE + db TOGEPI + db BUTTERFREE + db DIGLETT + db POLIWAG + db PIKACHU + db CLEFAIRY + db CHARMANDER + db JYNX + db STARMIE + db BULBASAUR + db JIGGLYPUFF + db GRIMER + db EKANS + db PARAS + db TENTACOOL + db TAUROS + db MACHOP + db VOLTORB + db LAPRAS + db RHYDON + db MOLTRES + db SNORLAX + db GYARADOS + db LUGIA + db HO_OH +; 144b8 + + +OutdoorSprites: ; 144b8 +; Valid sprite IDs for each map group. + + dw Group1Sprites + dw Group2Sprites + dw Group3Sprites + dw Group4Sprites + dw Group5Sprites + dw Group6Sprites + dw Group7Sprites + dw Group8Sprites + dw Group9Sprites + dw Group10Sprites + dw Group11Sprites + dw Group12Sprites + dw Group13Sprites + dw Group14Sprites + dw Group15Sprites + dw Group16Sprites + dw Group17Sprites + dw Group18Sprites + dw Group19Sprites + dw Group20Sprites + dw Group21Sprites + dw Group22Sprites + dw Group23Sprites + dw Group24Sprites + dw Group25Sprites + dw Group26Sprites +; 144ec + + +Group13Sprites: ; 144ec + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14503 + +Group23Sprites: ; 14503 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1451a + +Group14Sprites: ; 1451a + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14531 + +Group6Sprites: ; 14531 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14548 + +Group7Sprites: ; 14548 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_COOLTRAINER_M + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_POKEFAN_M + db SPRITE_ROCKET + db SPRITE_MISTY + db SPRITE_POKE_BALL + db SPRITE_SLOWPOKE +; 1455f + +Group25Sprites: ; 1455f + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_COOLTRAINER_M + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_POKEFAN_M + db SPRITE_ROCKET + db SPRITE_MISTY + db SPRITE_POKE_BALL + db SPRITE_SLOWPOKE +; 14576 + +Group21Sprites: ; 14576 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_POLIWAG + db SPRITE_TEACHER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_BIKER + db SPRITE_SILVER + db SPRITE_BLUE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1458d + +Group18Sprites: ; 1458d + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145a4 + +Group12Sprites: ; 145a4 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145bb + +Group17Sprites: ; 145bb + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145d2 + +Group16Sprites: ; 145d2 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_BUENA + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_MACHOP + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_BOULDER +; 145e9 + +Group24Sprites: ; 145e9 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14600 + +Group26Sprites: ; 14600 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14617 + +Group19Sprites: ; 14617 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1462e + +Group10Sprites: ; 1462e + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_LASS + db SPRITE_OFFICER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_COOLTRAINER_M + db SPRITE_BUG_CATCHER + db SPRITE_SUPER_NERD + db SPRITE_WEIRD_TREE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14645 + +Group4Sprites: ; 14645 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_LASS + db SPRITE_OFFICER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_COOLTRAINER_M + db SPRITE_BUG_CATCHER + db SPRITE_SUPER_NERD + db SPRITE_WEIRD_TREE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1465c + +Group8Sprites: ; 1465c + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_KURT_OUTSIDE + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_OFFICER + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_TEACHER + db SPRITE_AZALEA_ROCKET + db SPRITE_LASS + db SPRITE_SILVER + db SPRITE_FRUIT_TREE + db SPRITE_SLOWPOKE +; 14673 + +Group11Sprites: ; 14673 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_POKE_BALL + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_OFFICER + db SPRITE_POKEFAN_M + db SPRITE_DAYCARE_MON_1 + db SPRITE_COOLTRAINER_F + db SPRITE_ROCKET + db SPRITE_LASS + db SPRITE_DAYCARE_MON_2 + db SPRITE_FRUIT_TREE + db SPRITE_SLOWPOKE +; 1468a + +Group22Sprites: ; 1468a + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_STANDING_YOUNGSTER + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_OLIVINE_RIVAL + db SPRITE_POKEFAN_M + db SPRITE_LASS + db SPRITE_BUENA + db SPRITE_SWIMMER_GIRL + db SPRITE_SAILOR + db SPRITE_POKEFAN_F + db SPRITE_SUPER_NERD + db SPRITE_TAUROS + db SPRITE_FRUIT_TREE + db SPRITE_ROCK +; 146a1 + +Group1Sprites: ; 146a1 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_STANDING_YOUNGSTER + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_OLIVINE_RIVAL + db SPRITE_POKEFAN_M + db SPRITE_LASS + db SPRITE_BUENA + db SPRITE_SWIMMER_GIRL + db SPRITE_SAILOR + db SPRITE_POKEFAN_F + db SPRITE_SUPER_NERD + db SPRITE_TAUROS + db SPRITE_FRUIT_TREE + db SPRITE_ROCK +; 146b8 + +Group9Sprites: ; 146b8 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_LANCE + db SPRITE_GRAMPS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_LASS + db SPRITE_YOUNGSTER + db SPRITE_GYARADOS + db SPRITE_FRUIT_TREE + db SPRITE_POKE_BALL +; 146cf + +Group2Sprites: ; 146cf + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_M + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_FRUIT_TREE + db SPRITE_POKE_BALL +; 146e6 + +Group5Sprites: ; 146e6 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_M + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_FRUIT_TREE + db SPRITE_POKE_BALL +; 146fd + +Group3Sprites: ; 146fd + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_GAMEBOY_KID + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_LASS + db SPRITE_POKEFAN_F + db SPRITE_TEACHER + db SPRITE_YOUNGSTER + db SPRITE_GROWLITHE + db SPRITE_POKEFAN_M + db SPRITE_ROCKER + db SPRITE_FISHER + db SPRITE_SCIENTIST + db SPRITE_POKE_BALL + db SPRITE_BOULDER +; 14714 + +Group15Sprites: ; 14714 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SAILOR + db SPRITE_FISHING_GURU + db SPRITE_GENTLEMAN + db SPRITE_SUPER_NERD + db SPRITE_HO_OH + db SPRITE_TEACHER + db SPRITE_COOLTRAINER_F + db SPRITE_YOUNGSTER + db SPRITE_FAIRY + db SPRITE_POKE_BALL + db SPRITE_ROCK +; 1472b + +Group20Sprites: ; 1472b + db SPRITE_OAK + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_TWIN + db SPRITE_POKEFAN_M + db SPRITE_GRAMPS + db SPRITE_FAIRY + db SPRITE_SILVER + db SPRITE_FISHING_GURU + db SPRITE_POKE_BALL + db SPRITE_POKEDEX +; 14736 + + +SpriteHeaders: ; 14736 +INCLUDE "gfx/overworld/sprite_headers.asm" +; 1499a diff --git a/engine/startmenu.asm b/engine/startmenu.asm new file mode 100755 index 000000000..1c7768850 --- /dev/null +++ b/engine/startmenu.asm @@ -0,0 +1,1970 @@ +StartMenu:: ; 125cd + + call ResetTextRelatedRAM + + ld de, SFX_MENU + call PlaySFX + + callba Function6454 + + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ld hl, .MenuDataHeader + jr z, .GotMenuData + ld hl, .ContestMenuDataHeader +.GotMenuData + + call LoadMenuDataHeader + call .SetUpMenuItems + ld a, [wd0d2] + ld [wMenuCursorBuffer], a + call .DrawMenuAccount_ + call MenuFunc_1e7f + call .DrawBugContestStatusBox + call Function2e31 + call Function2e20 + callba Function64bf + call .DrawBugContestStatus + call UpdateTimePals + jr .Select + +.Reopen + call UpdateSprites + call UpdateTimePals + call .SetUpMenuItems + ld a, [wd0d2] + ld [wMenuCursorBuffer], a + +.Select + call .GetInput + jr c, .Exit + call .DrawMenuAccount + ld a, [wMenuCursorBuffer] + ld [wd0d2], a + call PlayClickSFX + call Function1bee + call .OpenMenu + +; Menu items have different return functions. +; For example, saving exits the menu. + ld hl, .MenuReturns + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.MenuReturns + dw .Reopen + dw .Exit + dw .ExitMenuCallFuncLoadMoveSprites + dw .ExitMenuRunScriptLoadMoveSprites + dw .ExitMenuRunScript + dw .ReturnEnd + dw .ReturnRedraw + +.Exit + ld a, [hOAMUpdate] + push af + ld a, 1 + ld [hOAMUpdate], a + call LoadFontsExtra + pop af + ld [hOAMUpdate], a +.ReturnEnd + call ExitMenu +.ReturnEnd2 + call LoadMoveSprites + call UpdateTimePals + ret + +.GetInput +; Return carry on exit, and no-carry on selection. + xor a + ld [hBGMapMode], a + call .DrawMenuAccount + call SetUpMenu + ld a, $ff + ld [MenuSelection], a +.loop + call .PrintMenuAccount + call Function1f1a + ld a, [wcf73] + cp B_BUTTON + jr z, .b + cp A_BUTTON + jr z, .a + jr .loop +.a + call PlayClickSFX + and a + ret +.b + scf + ret +; 12691 + +.ExitMenuRunScript ; 12691 + call ExitMenu + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + ret +; 12699 + +.ExitMenuRunScriptLoadMoveSprites ; 12699 + call ExitMenu + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + jr .ReturnEnd2 +; 126a2 + +.ExitMenuCallFuncLoadMoveSprites ; 126a2 + call ExitMenu + ld hl, wQueuedScriptAddr + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wQueuedScriptBank] + rst FarCall + jr .ReturnEnd2 +; 126b1 + +.ReturnRedraw ; 126b1 + call .Clear + jp .Reopen +; 126b7 + +.Clear ; 126b7 + call ClearBGPalettes + call Call_ExitMenu + call Function2bae + call .DrawMenuAccount_ + call MenuFunc_1e7f + call .DrawBugContestStatus + call UpdateSprites + call Functiond90 + call Function2b5c + ret +; 126d3 + + +.MenuDataHeader + db $40 ; tile backup + db 0, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection + +.ContestMenuDataHeader + db $40 ; tile backup + db 2, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection + +.MenuData + db %10101000 ; x padding, wrap around, start can close + dn 0, 0 ; rows, columns + dw MenuItemsList + dw .MenuString + dw .Items + +.Items + dw StartMenu_Pokedex, .PokedexString, .PokedexDesc + dw StartMenu_Pokemon, .PartyString, .PartyDesc + dw StartMenu_Pack, .PackString, .PackDesc + dw StartMenu_Status, .StatusString, .StatusDesc + dw StartMenu_Save, .SaveString, .SaveDesc + dw StartMenu_Option, .OptionString, .OptionDesc + dw StartMenu_Exit, .ExitString, .ExitDesc + dw StartMenu_Pokegear, .PokegearString, .PokegearDesc + dw StartMenu_Quit, .QuitString, .QuitDesc + +.PokedexString db "#DEX@" +.PartyString db "#MON@" +.PackString db "PACK@" +.StatusString db "<PLAYER>@" +.SaveString db "SAVE@" +.OptionString db "OPTION@" +.ExitString db "EXIT@" +.PokegearString db $24, "GEAR@" +.QuitString db "QUIT@" + +.PokedexDesc db "#MON" + next "database@" + +.PartyDesc db "Party ", $4a + next "status@" + +.PackDesc db "Contains" + next "items@" + +.PokegearDesc db "Trainer's" + next "key device@" + +.StatusDesc db "Your own" + next "status@" + +.SaveDesc db "Save your" + next "progress@" + +.OptionDesc db "Change" + next "settings@" + +.ExitDesc db "Close this" + next "menu@" + +.QuitDesc db "Quit and" + next "be judged.@" + + +.OpenMenu ; 127e5 + ld a, [MenuSelection] + call .GetMenuAccountTextPointer + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 127ef + +.MenuString ; 127ef + push de + ld a, [MenuSelection] + call .GetMenuAccountTextPointer +rept 2 + inc hl +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +; 12800 + +.MenuDesc ; 12800 + push de + ld a, [MenuSelection] + cp $ff + jr z, .none + call .GetMenuAccountTextPointer +rept 4 + inc hl +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +.none + pop de + ret +; 12819 + + +.GetMenuAccountTextPointer ; 12819 + ld e, a + ld d, 0 + ld hl, wcf97 + ld a, [hli] + ld h, [hl] + ld l, a +rept 6 + add hl, de +endr + ret +; 12829 + + +.SetUpMenuItems ; 12829 + xor a + ld [wcf76], a + call .FillMenuList + + ld hl, StatusFlags + bit 0, [hl] + jr z, .no_pokedex + ld a, 0 ; pokedex + call .AppendMenuList +.no_pokedex + + ld a, [PartyCount] + and a + jr z, .no_pokemon + ld a, 1 ; pokemon + call .AppendMenuList +.no_pokemon + + ld a, [wLinkMode] + and a + jr nz, .no_pack + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + jr nz, .no_pack + ld a, 2 ; pack + call .AppendMenuList +.no_pack + + ld hl, wPokegearFlags + bit 7, [hl] + jr z, .no_pokegear + ld a, 7 ; pokegear + call .AppendMenuList +.no_pokegear + + ld a, 3 ; status + call .AppendMenuList + + ld a, [wLinkMode] + and a + jr nz, .no_save + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ld a, 8 ; quit + jr nz, .write + ld a, 4 ; save +.write + call .AppendMenuList +.no_save + + ld a, 5 ; option + call .AppendMenuList + ld a, 6 ; exit + call .AppendMenuList + ld a, c + ld [MenuItemsList], a + ret +; 1288d + + +.FillMenuList ; 1288d + xor a + ld hl, MenuItemsList + ld [hli], a + ld a, -1 + ld bc, MenuItemsListEnd - (MenuItemsList + 1) + call ByteFill + ld de, MenuItemsList + 1 + ld c, 0 + ret +; 128a0 + +.AppendMenuList ; 128a0 + ld [de], a + inc de + inc c + ret +; 128a4 + +.DrawMenuAccount_ ; 128a4 + jp .DrawMenuAccount +; 128a7 + +.PrintMenuAccount ; 128a7 + call .IsMenuAccountOn + ret z + call .DrawMenuAccount + decoord 0, 14 + jp .MenuDesc +; 128b4 + +.DrawMenuAccount ; 128b4 + call .IsMenuAccountOn + ret z + hlcoord 0, 13 + lb bc, 5, 10 + call ClearBox + hlcoord 0, 13 + ld b, 3 + ld c, 8 + jp TextBoxPalette +; 128cb + +.IsMenuAccountOn ; 128cb + ld a, [Options2] + and 1 + ret +; 128d1 + +.DrawBugContestStatusBox ; 128d1 + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ret z + callba Function24bdc + ret +; 128de + +.DrawBugContestStatus ; 128de + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + jr nz, .contest + ret +.contest + callba Function24be7 + ret +; 128ed + + +StartMenu_Exit: ; 128ed +; Exit the menu. + + ld a, 1 + ret +; 128f0 + + +StartMenu_Quit: ; 128f0 +; Retire from the bug catching contest. + + ld hl, .EndTheContestText + call Function12cf5 + jr c, .DontEndContest + ld a, BANK(BugCatchingContestReturnToGateScript) + ld hl, BugCatchingContestReturnToGateScript + call FarQueueScript + ld a, 4 + ret + +.DontEndContest + ld a, 0 + ret + +.EndTheContestText + text_jump UnknownText_0x1c1a6c + db "@" +; 1290b + + +StartMenu_Save: ; 1290b +; Save the game. + + call BufferScreen + callba Function14a1a + jr nc, .asm_12919 + ld a, 0 + ret +.asm_12919 + ld a, 1 + ret +; 1291c + + +StartMenu_Option: ; 1291c +; Game options. + + call FadeToMenu + callba OptionsMenu + ld a, 6 + ret +; 12928 + + +StartMenu_Status: ; 12928 +; Player status. + + call FadeToMenu + callba Function25105 + call Function2b3c + ld a, 0 + ret +; 12937 + + +StartMenu_Pokedex: ; 12937 + + ld a, [PartyCount] + and a + jr z, .asm_12949 + + call FadeToMenu + callba Pokedex + call Function2b3c + +.asm_12949 + ld a, 0 + ret +; 1294c + + +StartMenu_Pokegear: ; 1294c + + call FadeToMenu + callba Function90b8d + call Function2b3c + ld a, 0 + ret +; 1295b + + +StartMenu_Pack: ; 1295b + + call FadeToMenu + callba Pack + ld a, [wcf66] + and a + jr nz, .asm_12970 + call Function2b3c + ld a, 0 + ret +.asm_12970 + call Function2b4d + ld a, 4 + ret +; 12976 + + +StartMenu_Pokemon: ; 12976 + + ld a, [PartyCount] + and a + jr z, .return + + call FadeToMenu + +.choosemenu + xor a + ld [PartyMenuActionText], a ; Choose a POKéMON. + call ClearBGPalettes + +.menu + callba Function5004f + callba Function50405 + callba Function503e0 + +.menunoreload + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call SetPalettes ; load regular palettes? + call DelayFrame + callba PartyMenuSelect + jr c, .return ; if cancelled or pressed B + + call PokemonActionSubmenu + cp 3 + jr z, .menu + cp 0 + jr z, .choosemenu + cp 1 + jr z, .menunoreload + cp 2 + jr z, .quit + +.return + call Function2b3c + ld a, 0 + ret + +.quit + ld a, b + push af + call Function2b4d + pop af + ret +; 129d5 + +Function129d5: ; 129d5 + ld a, [NumItems] + and a + ret nz + ld a, [NumKeyItems] + and a + ret nz + ld a, [NumBalls] + and a + ret nz + ld hl, TMsHMs + ld b, NUM_TMS + NUM_HMS +.asm_129e9 + ld a, [hli] + and a + jr nz, .asm_129f2 + dec b + jr nz, .asm_129e9 + scf + ret +.asm_129f2 + and a + ret + +Function129f4: ; 129f4 + push de + call PartyMonItemName + callba _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .asm_12a3f + ld hl, UnknownText_0x12a45 + call MenuTextBox + callba Function24fbf + push af + call WriteBackup + call ExitMenu + pop af + jr c, .asm_12a42 + ld hl, UnknownText_0x12a4a + call MenuTextBox + call YesNoBox + push af + call ExitMenu + pop af + jr c, .asm_12a42 + pop hl + ld a, [wd107] + call TossItem + call PartyMonItemName + ld hl, UnknownText_0x12a4f + call MenuTextBox + call ExitMenu + and a + ret +.asm_12a3f + call Function12a54 +.asm_12a42 + pop hl + scf + ret +; 12a45 (4:6a45) + +UnknownText_0x12a45: ; 0x12a45 + ; Toss out how many @ (S)? + text_jump UnknownText_0x1c1a90 + db "@" +; 0x12a4a + +UnknownText_0x12a4a: ; 0x12a4a + ; Throw away @ @ (S)? + text_jump UnknownText_0x1c1aad + db "@" +; 0x12a4f + +UnknownText_0x12a4f: ; 0x12a4f + ; Discarded @ (S). + text_jump UnknownText_0x1c1aca + db "@" +; 0x12a54 + +Function12a54: ; 12a54 (4:6a54) + ld hl, UnknownText_0x12a5b + call MenuTextBoxBackup + ret +; 12a5b (4:6a5b) + +UnknownText_0x12a5b: ; 0x12a5b + ; That's too impor- tant to toss out! + text_jump UnknownText_0x1c1adf + db "@" +; 0x12a60 + +CantUseItem: ; 12a60 + ld hl, CantUseItemText + call Function2012 + ret +; 12a67 + +CantUseItemText: ; 12a67 + text_jump UnknownText_0x1c1b03 + db "@" +; 12a6c + + +PartyMonItemName: ; 12a6c + ld a, [CurItem] + ld [wd265], a + call GetItemName + call CopyName1 + ret +; 12a79 + + +CancelPokemonAction: ; 12a79 + callba Function50405 + callba Function8ea71 + ld a, 1 + ret +; 12a88 + + +PokemonActionSubmenu: ; 12a88 + hlcoord 1, 15 + lb bc, 2, 18 + call ClearBox + callba MonSubmenu + call GetCurNick + ld a, [MenuSelection] + ld hl, .Actions + ld de, 3 + call IsInArray + jr nc, .nothing + + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.nothing + ld a, 0 + ret + +.Actions + dbw MONMENU_CUT, MonMenu_Cut ; Cut + dbw MONMENU_FLY, MonMenu_Fly ; Fly + dbw MONMENU_SURF, MonMenu_Surf ; Surf + dbw MONMENU_STRENGTH, MonMenu_Strength ; Strength + dbw MONMENU_FLASH, MonMenu_Flash ; Flash + dbw MONMENU_WHIRLPOOL, MonMenu_Whirlpool ; Whirlpool + dbw MONMENU_DIG, MonMenu_Dig ; Dig + dbw MONMENU_TELEPORT, MonMenu_Teleport ; Teleport + dbw MONMENU_SOFTBOILED, MonMenu_Softboiled_MilkDrink ; Softboiled + dbw MONMENU_MILKDRINK, MonMenu_Softboiled_MilkDrink ; MilkDrink + dbw MONMENU_HEADBUTT, MonMenu_Headbutt ; Headbutt + dbw MONMENU_WATERFALL, MonMenu_Waterfall ; Waterfall + dbw MONMENU_ROCKSMASH, MonMenu_RockSmash ; RockSmash + dbw MONMENU_SWEETSCENT, MonMenu_SweetScent ; SweetScent + dbw MONMENU_STATS, OpenPartyStats + dbw MONMENU_SWITCH, SwitchPartyMons + dbw MONMENU_ITEM, GiveTakePartyMonItem + dbw MONMENU_CANCEL, CancelPokemonAction + dbw MONMENU_MOVE, ManagePokemonMoves ; move + dbw MONMENU_MAIL, MonMailAction ; mail +; 12aec + + +SwitchPartyMons: ; 12aec + +; Don't try if there's nothing to switch! + ld a, [PartyCount] + cp 2 + jr c, .DontSwitch + + ld a, [CurPartyMon] + inc a + ld [wd0e3], a + + callba Function8ea8c + callba Function5042d + + ld a, 4 + ld [PartyMenuActionText], a + callba WritePartyMenuTilemap + callba PrintPartyMenuText + + hlcoord 0, 1 + ld bc, 20 * 2 + ld a, [wd0e3] + dec a + call AddNTimes + ld [hl], "▷" + call WaitBGMap + call SetPalettes + call DelayFrame + + callba PartyMenuSelect + bit 1, b + jr c, .DontSwitch + + callba _SwitchPartyMons + + xor a + ld [PartyMenuActionText], a + + callba Function5004f + callba Function50405 + callba Function503e0 + + ld a, 1 + ret + +.DontSwitch + xor a + ld [PartyMenuActionText], a + call CancelPokemonAction + ret +; 12b60 + + +GiveTakePartyMonItem: ; 12b60 + +; Eggs can't hold items! + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_12ba6 + + ld hl, GiveTakeItemMenuData + call LoadMenuDataHeader + call InterpretMenu2 + call ExitMenu + jr c, .asm_12ba6 + + call GetCurNick + ld hl, StringBuffer1 + ld de, wd050 + ld bc, $b + call CopyBytes + ld a, [MenuSelection2] + cp 1 + jr nz, .asm_12ba0 + + call LoadStandardMenuDataHeader + call ClearPalettes + call Function12ba9 + call ClearPalettes + call LoadFontsBattleExtra + call ExitMenu + ld a, 0 + ret + +.asm_12ba0 + call TakePartyItem + ld a, 3 + ret + +.asm_12ba6 + ld a, 3 + ret +; 12ba9 + + +Function12ba9: ; 12ba9 + + callba Function106a5 + +.loop + callba Function106be + + ld a, [wcf66] + and a + jr z, .quit + + ld a, [wcf65] + cp 2 + jr z, .next + + call CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .next + + call Function12bd9 + jr .quit + +.next + ld hl, CantBeHeldText + call MenuTextBoxBackup + jr .loop + +.quit + ret +; 12bd9 + + +Function12bd9: ; 12bd9 + + call SpeechTextBox + call PartyMonItemName + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12bf4 + + push hl + ld d, a + callba ItemIsMail + pop hl + jr c, .asm_12c01 + ld a, [hl] + jr .asm_12c08 + +.asm_12bf4 + call Function12cea + ld hl, MadeHoldText + call MenuTextBoxBackup + call GivePartyItem + ret + +.asm_12c01 + ld hl, PleaseRemoveMailText + call MenuTextBoxBackup + ret + +.asm_12c08 + ld [wd265], a + call GetItemName + ld hl, SwitchAlreadyHoldingText + call Function12cf5 + jr c, .asm_12c4b + + call Function12cea + ld a, [wd265] + push af + ld a, [CurItem] + ld [wd265], a + pop af + ld [CurItem], a + call Function12cdf + jr nc, .asm_12c3c + + ld hl, TookAndMadeHoldText + call MenuTextBoxBackup + ld a, [wd265] + ld [CurItem], a + call GivePartyItem + ret + +.asm_12c3c + ld a, [wd265] + ld [CurItem], a + call Function12cdf + ld hl, ItemStorageIsFullText + call MenuTextBoxBackup + +.asm_12c4b + ret +; 12c4c + + +GivePartyItem: ; 12c4c + + call GetPartyItemLocation + ld a, [CurItem] + ld [hl], a + ld d, a + callba ItemIsMail + jr nc, .asm_12c5f + call Function12cfe + +.asm_12c5f + ret +; 12c60 + + +TakePartyItem: ; 12c60 + + call SpeechTextBox + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12c8c + + ld [CurItem], a + call Function12cdf + jr nc, .asm_12c94 + + callba ItemIsMail + call GetPartyItemLocation + ld a, [hl] + ld [wd265], a + ld [hl], NO_ITEM + call GetItemName + ld hl, TookFromText + call MenuTextBoxBackup + jr .asm_12c9a + +.asm_12c8c + ld hl, IsntHoldingAnythingText + call MenuTextBoxBackup + jr .asm_12c9a + +.asm_12c94 + ld hl, ItemStorageIsFullText + call MenuTextBoxBackup + +.asm_12c9a + ret +; 12c9b + + +GiveTakeItemMenuData: ; 12c9b + db %01010000 + db 12, 12 ; start coords + db 17, 19 ; end coords + dw .Items + db 1 ; default option + +.Items + db %10000000 ; x padding + db 2 ; # items + db "GIVE@" + db "TAKE@" +; 12caf + + +TookAndMadeHoldText: ; 12caf + text_jump UnknownText_0x1c1b2c + db "@" +; 12cb4 + +MadeHoldText: ; 12cb4 + text_jump UnknownText_0x1c1b57 + db "@" +; 12cb9 + +PleaseRemoveMailText: ; 12cb9 + text_jump UnknownText_0x1c1b6f + db "@" +; 12cbe + +IsntHoldingAnythingText: ; 12cbe + text_jump UnknownText_0x1c1b8e + db "@" +; 12cc3 + +ItemStorageIsFullText: ; 12cc3 + text_jump UnknownText_0x1c1baa + db "@" +; 12cc8 + +TookFromText: ; 12cc8 + text_jump UnknownText_0x1c1bc4 + db "@" +; 12ccd + +SwitchAlreadyHoldingText: ; 12ccd + text_jump UnknownText_0x1c1bdc + db "@" +; 12cd2 + +CantBeHeldText: ; 12cd2 + text_jump UnknownText_0x1c1c09 + db "@" +; 12cd7 + + +GetPartyItemLocation: ; 12cd7 + push af + ld a, MON_ITEM + call GetPartyParamLocation + pop af + ret +; 12cdf + + +Function12cdf: ; 12cdf + ld a, $1 + ld [wItemQuantityChangeBuffer], a + ld hl, NumItems + jp ReceiveItem +; 12cea + + +Function12cea: ; 12cea (4:6cea) + ld a, $1 + ld [wItemQuantityChangeBuffer], a + ld hl, NumItems + jp TossItem + +Function12cf5: ; 12cf5 + call MenuTextBox + call YesNoBox + jp ExitMenu +; 12cfe + + +Function12cfe: ; 12cfe (4:6cfe) + ld de, wd002 + callba Function11e75 + ld hl, PlayerName + ld de, wd023 + ld bc, $a + call CopyBytes + ld hl, PlayerID + ld bc, $2 + call CopyBytes + ld a, [CurPartySpecies] + ld [de], a + inc de + ld a, [CurItem] + ld [de], a + ld a, [CurPartyMon] + ld hl, sPartyScratch1 + ld bc, SCRATCHMON_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + ld hl, wd002 + ld bc, SCRATCHMON_STRUCT_LENGTH + ld a, BANK(sPartyScratch1) + call GetSRAMBank + call CopyBytes + call CloseSRAM + ret + +MonMailAction: ; 12d45 +; If in the time capsule or trade center, +; selecting the mail only allows you to +; read the mail. + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .read + cp LINK_TRADECENTER + jr z, .read + +; Show the READ/TAKE/QUIT menu. + ld hl, .MenuDataHeader + call LoadMenuDataHeader + call InterpretMenu2 + call ExitMenu + +; Interpret the menu. + jp c, .done + ld a, [MenuSelection2] + cp $1 + jr z, .read + cp $2 + jr z, .take + jp .done + +.read + callba ReadPartyMonMail + ld a, $0 + ret + +.take + ld hl, .sendmailtopctext + call Function12cf5 + jr c, .RemoveMailToBag + ld a, [CurPartyMon] + ld b, a + callba Function4456e + jr c, .MailboxFull + ld hl, .sentmailtopctext + call MenuTextBoxBackup + jr .done + +.MailboxFull + ld hl, .mailboxfulltext + call MenuTextBoxBackup + jr .done + +.RemoveMailToBag + ld hl, .mailwilllosemessagetext + call Function12cf5 + jr c, .done + call GetPartyItemLocation + ld a, [hl] + ld [CurItem], a + call Function12cdf + jr nc, .BagIsFull + call GetPartyItemLocation + ld [hl], $0 + call GetCurNick + ld hl, .tookmailfrommontext + call MenuTextBoxBackup + jr .done + +.BagIsFull + ld hl, .bagfulltext + call MenuTextBoxBackup + jr .done + +.done + ld a, $3 + ret +; 12dc9 + + +.MenuDataHeader: ; 0x12dc9 + db $40 ; flags + db 10, 12 ; start coords + db 17, 19 ; end coords + dw .MenuData2 + db 1 ; default option +; 0x12dd1 + +.MenuData2: ; 0x12dd1 + db $80 ; flags + db 3 ; items + db "READ@" + db "TAKE@" + db "QUIT@" +; 0x12de2 + + +.mailwilllosemessagetext: ; 0x12de2 +; The MAIL will lose its message. OK? + text_jump UnknownText_0x1c1c22 + db "@" +; 0x12de7 + +.tookmailfrommontext: ; 0x12de7 +; MAIL detached from <POKEMON>. + text_jump UnknownText_0x1c1c47 + db "@" +; 0x12dec + +.bagfulltext: ; 0x12dec +; There's no space for removing MAIL. + text_jump UnknownText_0x1c1c62 + db "@" +; 0x12df1 + +.sendmailtopctext: ; 0x12df1 +; Send the removed MAIL to your PC? + text_jump UnknownText_0x1c1c86 + db "@" +; 0x12df6 + +.mailboxfulltext: ; 0x12df6 +; Your PC's MAILBOX is full. + text_jump UnknownText_0x1c1ca9 + db "@" +; 0x12dfb + +.sentmailtopctext: ; 0x12dfb +; The MAIL was sent to your PC. + text_jump UnknownText_0x1c1cc4 + db "@" +; 0x12e00 + + +OpenPartyStats: ; 12e00 + call LoadStandardMenuDataHeader + call ClearSprites +; PartyMon + xor a + ld [MonType], a + call LowVolume + predef StatsScreenInit + call MaxVolume + call Call_ExitMenu + ld a, 0 + ret +; 12e1b + + +MonMenu_Cut: ; 12e1b + callba CutFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e2d + ld b, $4 + ld a, $2 + ret + +.asm_12e2d + ld a, $3 + ret +; 12e30 + + +MonMenu_Fly: ; 12e30 + callba FlyFunction + ld a, [wd0ec] + cp $2 + jr z, .asm_12e4c + cp $0 + jr z, .asm_12e4f + callba MobileFn_1060b5 + ld b, $4 + ld a, $2 + ret + +.asm_12e4c + ld a, $3 + ret + +.asm_12e4f + ld a, $0 + ret + +.asm_12e52 + ld a, $1 + ret +; 12e55 + +MonMenu_Flash: ; 12e55 + callba Functionc8ac + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e67 + ld b, $4 + ld a, $2 + ret + +.asm_12e67 + ld a, $3 + ret +; 12e6a + +MonMenu_Strength: ; 12e6a + callba StrengthFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e7c + ld b, $4 + ld a, $2 + ret + +.asm_12e7c + ld a, $3 + ret +; 12e7f + +MonMenu_Whirlpool: ; 12e7f + callba WhirlpoolFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e91 + ld b, $4 + ld a, $2 + ret + +.asm_12e91 + ld a, $3 + ret +; 12e94 + +MonMenu_Waterfall: ; 12e94 + callba Functioncade + ld a, [wd0ec] + cp $1 + jr nz, .asm_12ea6 + ld b, $4 + ld a, $2 + ret + +.asm_12ea6 + ld a, $3 + ret +; 12ea9 + +MonMenu_Teleport: ; 12ea9 + callba TeleportFunction + ld a, [wd0ec] + and a + jr z, .asm_12eba + ld b, $4 + ld a, $2 + ret + +.asm_12eba + ld a, $3 + ret +; 12ebd + +MonMenu_Surf: ; 12ebd + callba SurfFunction + ld a, [wd0ec] + and a + jr z, .asm_12ece + ld b, $4 + ld a, $2 + ret + +.asm_12ece + ld a, $3 + ret +; 12ed1 + +MonMenu_Dig: ; 12ed1 + callba DigFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12ee3 + ld b, $4 + ld a, $2 + ret + +.asm_12ee3 + ld a, $3 + ret +; 12ee6 + +MonMenu_Softboiled_MilkDrink: ; 12ee6 + call Function12f05 + jr nc, .asm_12ef3 + callba Functionf3df + jr .asm_12ef9 + +.asm_12ef3 + ld hl, UnknownText_0x12f00 + call PrintText + +.asm_12ef9 + xor a + ld [PartyMenuActionText], a + ld a, $3 + ret +; 12f00 + +UnknownText_0x12f00: ; 0x12f00 + ; Not enough HP! + text_jump UnknownText_0x1c1ce3 + db "@" +; 0x12f05 + +Function12f05: ; 12f05 + ld a, MON_MAXHP + call GetPartyParamLocation + ld a, [hli] + ld [hDividend + 0], a + ld a, [hl] + ld [hDividend + 1], a + ld a, $5 + ld [hDivisor], a + ld b, $2 + call Divide + ld a, MON_HP + 1 + call GetPartyParamLocation + ld a, [hQuotient + 2] + sub [hl] + dec hl + ld a, [hQuotient + 1] + sbc [hl] + ret +; 12f26 + +MonMenu_Headbutt: ; 12f26 + callba HeadbuttFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12f38 + ld b, $4 + ld a, $2 + ret + +.asm_12f38 + ld a, $3 + ret +; 12f3b + +MonMenu_RockSmash: ; 12f3b + callba RockSmashFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12f4d + ld b, $4 + ld a, $2 + ret + +.asm_12f4d + ld a, $3 + ret +; 12f50 + +MonMenu_SweetScent: ; 12f50 + callba SweetScentFromMenu + ld b, $4 + ld a, $2 + ret +; 12f5b + +Function12f5b: ; 12f5b + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call LoadFontsBattleExtra + call Function12f73 + pop bc + ld a, b + ld [Options], a + push af + call ClearBGPalettes + pop af + ret +; 12f73 + +Function12f73: ; 12f73 + call SetUpMoveScreenBG + ld de, Unknown_12fb2 + call Function1bb1 + call Function131ef + ld hl, wcfa5 + set 6, [hl] + jr Function12f93 + +Function12f86: ; 12f86 + call Function1bd3 + bit 1, a + jp nz, Function12f9f + bit 0, a + jp nz, Function12f9c + +Function12f93: ; 12f93 + call PrepareToPlaceMoveData + call PlaceMoveData + jp Function12f86 +; 12f9c + +Function12f9c: ; 12f9c + and a + jr Function12fa0 + +Function12f9f: ; 12f9f + scf + +Function12fa0: ; 12fa0 + push af + xor a + ld [wd0e3], a + ld hl, wcfa5 + res 6, [hl] + call ClearSprites + call ClearTileMap + pop af + ret +; 12fb2 + +Unknown_12fb2: ; 12fb2 + db $03, $01, $03, $01, $40, $00, $20, $c3 +; 12fba + +ManagePokemonMoves: ; 12fba + ld a, [CurPartySpecies] + cp EGG + jr z, .egg + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call MoveScreenLoop + pop af + ld [Options], a + call ClearBGPalettes + +.egg + ld a, $0 + ret +; 12fd5 + +MoveScreenLoop: ; 12fd5 + ld a, [CurPartyMon] + inc a + ld [wd0d8], a + call SetUpMoveScreenBG + call Function132d3 + ld de, Unknown_13163 + call Function1bb1 +.loop + call Function131ef + ld hl, wcfa5 + set 6, [hl] + jr .skip_joy + +.joy_loop + call Function1bd3 + bit 1, a + jp nz, .b_button + bit 0, a + jp nz, .a_button + bit 4, a + jp nz, .d_right + bit 5, a + jp nz, .d_left + +.skip_joy + call PrepareToPlaceMoveData + ld a, [wMoveSwapBuffer] + and a + jr nz, .moving_move + call PlaceMoveData + jp .joy_loop + +.moving_move + ld a, " " + hlcoord 1, 11 + ld bc, 5 + call ByteFill + hlcoord 1, 12 + lb bc, 5, SCREEN_WIDTH - 2 + call ClearBox + hlcoord 1, 12 + ld de, String_1316b + call PlaceString + jp .joy_loop +.b_button: ; 13038 + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jp z, .exit + + ld a, [wMoveSwapBuffer] + ld [MenuSelection2], a + xor a + ld [wMoveSwapBuffer], a + hlcoord 1, 2 + lb bc, 8, SCREEN_WIDTH - 2 + call ClearBox + jp .loop +; 1305b + +.d_right: ; 1305b + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + + ld a, [CurPartyMon] + ld b, a + push bc + call .cycle_right + pop bc + ld a, [CurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.d_left: ; 13075 + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + ld a, [CurPartyMon] + ld b, a + push bc + call .cycle_left + pop bc + ld a, [CurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.cycle_right + ld a, [CurPartyMon] + inc a + ld [CurPartyMon], a + ld c, a + ld b, 0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + cp -1 + jr z, .cycle_left + cp EGG + ret nz + jr .cycle_right + +.cycle_left + ld a, [CurPartyMon] + and a + ret z +.cycle_left_loop + ld a, [CurPartyMon] + dec a + ld [CurPartyMon], a + ld c, a + ld b, 0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + cp EGG + ret nz + ld a, [CurPartyMon] + and a + jr z, .cycle_right + jr .cycle_left_loop +; 130c6 + +.a_button: ; 130c6 + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jr nz, .place_move + ld a, [MenuSelection2] + ld [wMoveSwapBuffer], a + call Function1bee + jp .moving_move + +.place_move + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + push hl + call .copy_move + pop hl + ld bc, $15 + add hl, bc + call .copy_move + ld a, [wBattleMode] + jr z, .swap_moves + ld hl, BattleMonMoves + ld bc, $20 + ld a, [CurPartyMon] + call AddNTimes + push hl + call .copy_move + pop hl + ld bc, 6 + add hl, bc + call .copy_move + +.swap_moves + ld de, SFX_SWITCH_POKEMON + call PlaySFX + call WaitSFX + ld de, SFX_SWITCH_POKEMON + call PlaySFX + call WaitSFX + hlcoord 1, 2 + lb bc, 8, 18 + call ClearBox + hlcoord 10, 10 + lb bc, 1, 9 + call ClearBox + jp .loop +; 1313a + +.copy_move: ; 1313a + push hl + ld a, [MenuSelection2] + dec a + ld c, a + ld b, $0 + add hl, bc + ld d, h + ld e, l + pop hl + ld a, [wMoveSwapBuffer] + dec a + ld c, a + ld b, $0 + add hl, bc + ld a, [de] + ld b, [hl] + ld [hl], a + ld a, b + ld [de], a + ret +; 13154 + +.exit: ; 13154 + xor a + ld [wMoveSwapBuffer], a + ld hl, wcfa5 + res 6, [hl] + call ClearSprites + jp ClearTileMap +; 13163 + +Unknown_13163: ; 13163 + db $03, $01, $03, $01, $40, $00, $20, $f3 +; 1316b + +String_1316b: ; 1316b + db "Where?@" +; 13172 + +SetUpMoveScreenBG: ; 13172 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + xor a + ld [hBGMapMode], a + callba Functionfb571 + callba InefficientlyClear121BytesAtwc300 + ld a, [CurPartyMon] + ld e, a + ld d, $0 + ld hl, PartySpecies + add hl, de + ld a, [hl] + ld [wd265], a + ld e, $2 + callba Function8e83f + hlcoord 0, 1 + ld b, 9 + ld c, 18 + call TextBox + hlcoord 0, 11 + ld b, 5 + ld c, 18 + call TextBox + hlcoord 2, 0 + lb bc, 2, 3 + call ClearBox + xor a + ld [MonType], a + ld hl, PartyMonNicknames + ld a, [CurPartyMon] + call GetNick + hlcoord 5, 1 + call PlaceString + push bc + callba CopyPkmnToTempMon + pop hl + call PrintLevel + ld hl, PlayerHPPal + call SetHPPal + ld b, $e + call GetSGBLayout + hlcoord 16, 0 + lb bc, 1, 3 + jp ClearBox +; 131ef + +Function131ef: ; 131ef + xor a + ld [hBGMapMode], a + ld [wMoveSwapBuffer], a + ld [MonType], a + predef CopyPkmnToTempMon + ld hl, TempMonMoves + ld de, wListMoves_MoveIndicesBuffer + ld bc, NUM_MOVES + call CopyBytes + ld a, SCREEN_WIDTH * 2 + ld [Buffer1], a + hlcoord 2, 3 + predef ListMoves + hlcoord 10, 4 + predef Function50c50 + call WaitBGMap + call SetPalettes + ld a, [wd0eb] + inc a + ld [wcfa3], a + hlcoord 0, 11 + ld b, 5 + ld c, 18 + jp TextBox +; 13235 + +PrepareToPlaceMoveData: ; 13235 + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld a, [MenuSelection2] + dec a + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [CurMove], a + hlcoord 1, 12 + lb bc, 5, 18 + jp ClearBox +; 13256 + +PlaceMoveData: ; 13256 + xor a + ld [hBGMapMode], a + hlcoord 0, 10 + ld de, String_132ba + call PlaceString + hlcoord 0, 11 + ld de, String_132c2 + call PlaceString + hlcoord 12, 12 + ld de, String_132ca + call PlaceString + ld a, [CurMove] + ld b, a + hlcoord 2, 12 + predef PrintMoveType + ld a, [CurMove] + dec a + ld hl, Moves + MOVE_POWER + ld bc, MOVE_LENGTH + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + hlcoord 16, 12 + cp 2 + jr c, .no_power + ld [wd265], a + ld de, wd265 + lb bc, 1, 3 + call PrintNum + jr .description + +.no_power + ld de, String_132cf + call PlaceString + +.description + hlcoord 1, 14 + predef PrintMoveDesc + ld a, $1 + ld [hBGMapMode], a + ret +; 132ba + +String_132ba: ; 132ba + db "┌─────┐@" +; 132c2 +String_132c2: ; 132c2 + db "│TYPE/└@" +; 132ca +String_132ca: ; 132ca + db "ATK/@" +; 132cf +String_132cf: ; 132cf + db "---@" +; 132d3 + +Function132d3: ; 132d3 + call Function132da + call Function132fe + ret +; 132da + +Function132da: ; 132da + ld a, [CurPartyMon] + and a + ret z + ld c, a + ld e, a + ld d, 0 + ld hl, PartyCount + add hl, de +.loop + ld a, [hl] + and a + jr z, .prev + cp EGG + jr z, .prev + cp NUM_POKEMON + 1 + jr c, .legal + +.prev + dec hl + dec c + jr nz, .loop + ret + +.legal + hlcoord 16, 0 + ld [hl], "◀" + ret +; 132fe + +Function132fe: ; 132fe + ld a, [CurPartyMon] + inc a + ld c, a + ld a, [PartyCount] + cp c + ret z + ld e, c + ld d, 0 + ld hl, PartySpecies + add hl, de +.loop + ld a, [hl] + cp -1 + ret z + and a + jr z, .next + cp EGG + jr z, .next + cp NUM_POKEMON + 1 + jr c, .legal + +.next + inc hl + jr .loop + +.legal + hlcoord 18, 0 + ld [hl], "▶" + ret +; 13327 diff --git a/engine/std_scripts.asm b/engine/std_scripts.asm index 5c0df0355..a886dbbf3 100644 --- a/engine/std_scripts.asm +++ b/engine/std_scripts.asm @@ -1,56 +1,56 @@ StdScripts:: - dbw BANK(PokeCenterNurseScript), PokeCenterNurseScript - dbw BANK(DifficultBookshelfScript), DifficultBookshelfScript - dbw BANK(PictureBookshelfScript), PictureBookshelfScript - dbw BANK(MagazineBookshelfScript), MagazineBookshelfScript - dbw BANK(TeamRocketOathScript), TeamRocketOathScript - dbw BANK(IncenseBurnerScript), IncenseBurnerScript - dbw BANK(MerchandiseShelfScript), MerchandiseShelfScript - dbw BANK(TownMapScript), TownMapScript - dbw BANK(WindowScript), WindowScript - dbw BANK(TVScript), TVScript - dbw BANK(HomepageScript), HomepageScript - dbw BANK(Radio1Script), Radio1Script - dbw BANK(Radio2Script), Radio2Script - dbw BANK(TrashCanScript), TrashCanScript - dbw BANK(StrengthBoulderScript), StrengthBoulderScript - dbw BANK(SmashRockScript), SmashRockScript - dbw BANK(PokeCenterSignScript), PokeCenterSignScript - dbw BANK(MartSignScript), MartSignScript - dbw BANK(GoldenrodRocketsScript), GoldenrodRocketsScript - dbw BANK(RadioTowerRocketsScript), RadioTowerRocketsScript - dbw BANK(ElevatorButtonScript), ElevatorButtonScript - dbw BANK(DayToTextScript), DayToTextScript - dbw BANK(BugContestResultsWarpScript), BugContestResultsWarpScript - dbw BANK(BugContestResultsScript), BugContestResultsScript - dbw BANK(InitializeEventsScript), InitializeEventsScript - dbw BANK(AskNumber1MScript), AskNumber1MScript - dbw BANK(AskNumber2MScript), AskNumber2MScript - dbw BANK(RegisteredNumberMScript), RegisteredNumberMScript - dbw BANK(NumberAcceptedMScript), NumberAcceptedMScript - dbw BANK(NumberDeclinedMScript), NumberDeclinedMScript - dbw BANK(PhoneFullMScript), PhoneFullMScript - dbw BANK(RematchMScript), RematchMScript - dbw BANK(GiftMScript), GiftMScript - dbw BANK(PackFullMScript), PackFullMScript - dbw BANK(RematchGiftMScript), RematchGiftMScript - dbw BANK(AskNumber1FScript), AskNumber1FScript - dbw BANK(AskNumber2FScript), AskNumber2FScript - dbw BANK(RegisteredNumberFScript), RegisteredNumberFScript - dbw BANK(NumberAcceptedFScript), NumberAcceptedFScript - dbw BANK(NumberDeclinedFScript), NumberDeclinedFScript - dbw BANK(PhoneFullFScript), PhoneFullFScript - dbw BANK(RematchFScript), RematchFScript - dbw BANK(GiftFScript), GiftFScript - dbw BANK(PackFullFScript), PackFullFScript - dbw BANK(RematchGiftFScript), RematchGiftFScript - dbw BANK(GymStatue1Script), GymStatue1Script - dbw BANK(GymStatue2Script), GymStatue2Script - dbw BANK(ReceiveItemScript), ReceiveItemScript - dbw BANK(ReceiveTogepiEggScript), ReceiveTogepiEggScript - dbw BANK(PCScript), PCScript - dbw BANK(GameCornerCoinVendorScript), GameCornerCoinVendorScript - dbw BANK(HappinessCheckScript), HappinessCheckScript + dba PokeCenterNurseScript + dba DifficultBookshelfScript + dba PictureBookshelfScript + dba MagazineBookshelfScript + dba TeamRocketOathScript + dba IncenseBurnerScript + dba MerchandiseShelfScript + dba TownMapScript + dba WindowScript + dba TVScript + dba HomepageScript + dba Radio1Script + dba Radio2Script + dba TrashCanScript + dba StrengthBoulderScript + dba SmashRockScript + dba PokeCenterSignScript + dba MartSignScript + dba GoldenrodRocketsScript + dba RadioTowerRocketsScript + dba ElevatorButtonScript + dba DayToTextScript + dba BugContestResultsWarpScript + dba BugContestResultsScript + dba InitializeEventsScript + dba AskNumber1MScript + dba AskNumber2MScript + dba RegisteredNumberMScript + dba NumberAcceptedMScript + dba NumberDeclinedMScript + dba PhoneFullMScript + dba RematchMScript + dba GiftMScript + dba PackFullMScript + dba RematchGiftMScript + dba AskNumber1FScript + dba AskNumber2FScript + dba RegisteredNumberFScript + dba NumberAcceptedFScript + dba NumberDeclinedFScript + dba PhoneFullFScript + dba RematchFScript + dba GiftFScript + dba PackFullFScript + dba RematchGiftFScript + dba GymStatue1Script + dba GymStatue2Script + dba ReceiveItemScript + dba ReceiveTogepiEggScript + dba PCScript + dba GameCornerCoinVendorScript + dba HappinessCheckScript PokeCenterNurseScript: ; EVENT_WELCOMED_TO_POKECOM_CENTER is never set @@ -302,7 +302,7 @@ RadioTowerRocketsScript: end BugContestResultsWarpScript: - special WhiteBGMap + special ClearBGPalettes scall BugContestResults_CopyContestantsToResults setevent EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY clearevent EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_NOT_CONTEST_DAY @@ -328,7 +328,7 @@ BugContestResultsScript: farwritetext ContestResults_ConsolationPrizeText keeptextopen waitbutton - verbosegiveitem BERRY, 1 + verbosegiveitem BERRY iffalse BugContestResults_NoRoomForBerry BugContestResults_DidNotWin @@ -387,7 +387,7 @@ BugContestResults_FirstPlace ; 0xbc31e itemtotext SUN_STONE, $1 farwritetext ContestResults_PlayerWonAPrizeText closetext - verbosegiveitem SUN_STONE, 1 + verbosegiveitem SUN_STONE iffalse BugContestResults_NoRoomForSunStone jump BugContestResults_ReturnAfterWinnersPrize ; 0xbc332 @@ -396,7 +396,7 @@ BugContestResults_SecondPlace ; 0xbc332 itemtotext EVERSTONE, $1 farwritetext ContestResults_PlayerWonAPrizeText closetext - verbosegiveitem EVERSTONE, 1 + verbosegiveitem EVERSTONE iffalse BugContestResults_NoRoomForEverstone jump BugContestResults_ReturnAfterWinnersPrize ; 0xbc343 @@ -405,7 +405,7 @@ BugContestResults_ThirdPlace ; 0xbc343 itemtotext GOLD_BERRY, $1 farwritetext ContestResults_PlayerWonAPrizeText closetext - verbosegiveitem GOLD_BERRY, 1 + verbosegiveitem GOLD_BERRY iffalse BugContestResults_NoRoomForGoldBerry jump BugContestResults_ReturnAfterWinnersPrize ; 0xbc354 diff --git a/engine/timeofdaypals.asm b/engine/timeofdaypals.asm index bdfcc8b05..6ebb2a421 100644 --- a/engine/timeofdaypals.asm +++ b/engine/timeofdaypals.asm @@ -39,7 +39,7 @@ _TimeOfDayPals:: ; 8c011 ; save bg palette 8 - ld hl, Unkn1Pals + 8 * 7 ; Unkn1Pals + 7 pals + ld hl, wMapPals + 8 * 7 ; wMapPals + 7 pals ; save wram bank ld a, [rSVBK] @@ -70,7 +70,7 @@ _TimeOfDayPals:: ; 8c011 ; restore bg palette 8 - ld hl, Unkn2Pals - 1 ; last byte in Unkn1Pals + ld hl, Unkn2Pals - 1 ; last byte in wMapPals ; save wram bank ld a, [rSVBK] @@ -116,7 +116,7 @@ _UpdateTimePals:: ; 8c070 ret ; 8c079 -FadeInBGMap:: ; 8c079 +FadeInPalettes:: ; 8c079 ld c, $12 call GetTimePalFade ld b, $4 @@ -124,7 +124,7 @@ FadeInBGMap:: ; 8c079 ret ; 8c084 -FadeBlackBGMap:: ; 8c084 +FadeOutPalettes:: ; 8c084 call Function8c0c1 ld c, $9 call GetTimePalFade @@ -172,12 +172,12 @@ Function8c0c1: ; 8c0c1 push af ld a, $5 ld [rSVBK], a - ld hl, Unkn1Pals + ld hl, wMapPals ld a, [hli] ld e, a ld a, [hli] ld d, a - ld hl, Unkn1Pals + 8 + ld hl, wMapPals + 8 ld c, $6 .asm_8c0d4 ld a, e diff --git a/engine/title.asm b/engine/title.asm index d29c90a23..0fbf8b42d 100644 --- a/engine/title.asm +++ b/engine/title.asm @@ -1,6 +1,6 @@ _TitleScreen: ; 10ed67 - call WhiteBGMap + call ClearBGPalettes call ClearSprites call ClearTileMap @@ -144,7 +144,7 @@ _TitleScreen: ; 10ed67 ; Update palette colors ld hl, TitleScreenPalettes - ld de, Unkn1Pals + ld de, wMapPals ld bc, 4 * 32 call CopyBytes @@ -220,7 +220,7 @@ _TitleScreen: ; 10ed67 ld [hBGMapMode], a xor a - ld [Unkn1Pals + 2], a + ld [wMapPals + 2], a ; Play starting sound effect call SFXChannelsOff @@ -231,7 +231,7 @@ _TitleScreen: ; 10ed67 ; 10eea7 SuicuneFrameIterator: ; 10eea7 - ld hl, Unkn1Pals + 2 + ld hl, wMapPals + 2 ld a, [hl] ld c, a inc [hl] diff --git a/engine/tmhm.asm b/engine/tmhm.asm new file mode 100755 index 000000000..b66131ac9 --- /dev/null +++ b/engine/tmhm.asm @@ -0,0 +1,113 @@ +CanLearnTMHMMove: ; 11639 + ld a, [CurPartySpecies] + ld [CurSpecies], a + call GetBaseData + ld hl, BaseTMHM + push hl + + ld a, [wd262] + ld b, a + ld c, 0 + ld hl, TMHMMoves +.loop + ld a, [hli] + and a + jr z, .end + cp b + jr z, .asm_11659 + inc c + jr .loop + +.asm_11659 + pop hl + ld b, CHECK_FLAG + push de + ld d, 0 + predef FlagPredef + pop de + ret + +.end + pop hl + ld c, 0 + ret +; 1166a + +GetTMHMMove: ; 1166a + ld a, [wd265] + dec a + ld hl, TMHMMoves + ld b, 0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd265], a + ret +; 1167a + +TMHMMoves: ; 1167a + db DYNAMICPUNCH + db HEADBUTT + db CURSE + db ROLLOUT + db ROAR + db TOXIC + db ZAP_CANNON + db ROCK_SMASH + db PSYCH_UP + db HIDDEN_POWER + db SUNNY_DAY + db SWEET_SCENT + db SNORE + db BLIZZARD + db HYPER_BEAM + db ICY_WIND + db PROTECT + db RAIN_DANCE + db GIGA_DRAIN + db ENDURE + db FRUSTRATION + db SOLARBEAM + db IRON_TAIL + db DRAGONBREATH + db THUNDER + db EARTHQUAKE + db RETURN + db DIG + db PSYCHIC_M + db SHADOW_BALL + db MUD_SLAP + db DOUBLE_TEAM + db ICE_PUNCH + db SWAGGER + db SLEEP_TALK + db SLUDGE_BOMB + db SANDSTORM + db FIRE_BLAST + db SWIFT + db DEFENSE_CURL + db THUNDERPUNCH + db DREAM_EATER + db DETECT + db REST + db ATTRACT + db THIEF + db STEEL_WING + db FIRE_PUNCH + db FURY_CUTTER + db NIGHTMARE + db CUT + db FLY + db SURF + db STRENGTH + db FLASH + db WHIRLPOOL + db WATERFALL + +; Move tutor + db FLAMETHROWER + db THUNDERBOLT + db ICE_BEAM + + db 0 ; end +; 116b7 |