diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-11 23:38:57 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-11 23:38:57 -0500 |
commit | 2ffcb4b49036b8bcd9a37cdc9305f7ee5567fe6c (patch) | |
tree | 0c9fe148771ade8ef1948852722b95b378cbe46f /engine | |
parent | 91068077f05afbbfd6571ceadada2c03ac7c8038 (diff) |
More splits; map setup labels
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/billspc.asm | 2667 | ||||
-rwxr-xr-x | engine/card_flip.asm | 2560 | ||||
-rw-r--r-- | engine/credits.asm | 4 | ||||
-rw-r--r-- | engine/diploma.asm | 2 | ||||
-rwxr-xr-x | engine/dummy_game.asm | 615 | ||||
-rw-r--r-- | engine/events.asm | 38 | ||||
-rwxr-xr-x | engine/events_3.asm | 863 | ||||
-rwxr-xr-x | engine/evolution_animation.asm | 4 | ||||
-rwxr-xr-x | engine/flypoints.asm | 916 | ||||
-rwxr-xr-x | engine/link.asm | 22 | ||||
-rw-r--r-- | engine/map_objects.asm | 101 | ||||
-rw-r--r-- | engine/map_setup.asm | 56 | ||||
-rw-r--r-- | engine/movement.asm | 104 | ||||
-rwxr-xr-x | engine/namingscreen.asm | 2 | ||||
-rw-r--r-- | engine/pack.asm | 6 | ||||
-rw-r--r-- | engine/party_menu.asm | 340 | ||||
-rw-r--r-- | engine/pokedex.asm | 4 | ||||
-rw-r--r-- | engine/scripting.asm | 14 | ||||
-rwxr-xr-x | engine/slot_machine.asm | 2112 | ||||
-rw-r--r-- | engine/specials.asm | 12 | ||||
-rwxr-xr-x | engine/startmenu.asm | 12 | ||||
-rw-r--r-- | engine/std_scripts.asm | 2 | ||||
-rw-r--r-- | engine/timeofdaypals.asm | 4 | ||||
-rw-r--r-- | engine/title.asm | 2 |
24 files changed, 10121 insertions, 341 deletions
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/card_flip.asm b/engine/card_flip.asm new file mode 100755 index 000000000..cf19cdbaf --- /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, Unkn1Pals + 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/credits.asm b/engine/credits.asm index f03950d69..3cee62e13 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 diff --git a/engine/diploma.asm b/engine/diploma.asm index 86a9a6ceb..7699cf930 100644 --- a/engine/diploma.asm +++ b/engine/diploma.asm @@ -6,7 +6,7 @@ Function1dd702: ; 1dd702 ; 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 ff2f55dbe..3a3c2b9be 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 @@ -322,9 +322,9 @@ PlayerEvents: ; 9681f ld [ScriptRunning], a call DoPlayerEvent ld a, [ScriptRunning] - cp PLAYEREVENT_4 + cp PLAYEREVENT_CONNECTION jr z, .ok2 - cp PLAYEREVENT_9 + cp PLAYEREVENT_JOYCHANGEFACING jr z, .ok2 xor a @@ -1050,8 +1050,10 @@ DoPlayerEvent: ; 96beb ld a, [ScriptRunning] and a ret z + cp PLAYEREVENT_MAPSCRIPT ; run script ret z + cp NUM_PLAYER_EVENTS ret nc @@ -1071,24 +1073,24 @@ endr ; 96c0c 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 + 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 @@ -1123,7 +1125,7 @@ LandAfterPitfallScript: ; 96c4a ; 96c4d UnknownScript_0x96c4d: ; 4 - reloadandreturn MAPSETUP_07 + reloadandreturn MAPSETUP_CONNECTION ; 96c4f UnknownScript_0x96c4f: ; 9 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 index 85bc8c5a8..69e7aec4c 100755 --- a/engine/evolution_animation.asm +++ b/engine/evolution_animation.asm @@ -372,7 +372,7 @@ INCBIN "gfx/evo/bubble_large.2bpp" INCBIN "gfx/evo/bubble.2bpp" Function4e881: ; 4e881 - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites call DisableLCD @@ -405,7 +405,7 @@ UnknownText_0x4e8bd: ; 0x4e8bd Function4e8c2: ; 4e8c2 - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites call DisableLCD 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/link.asm b/engine/link.asm index 38ac235fb..a1fa0661b 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -1,6 +1,6 @@ LinkCommunications: ; 28000 - call WhiteBGMap - ld c, $50 + call ClearBGPalettes + ld c, 80 call DelayFrames call ClearScreen call ClearSprites @@ -8,7 +8,7 @@ LinkCommunications: ; 28000 xor a ld [hSCX], a ld [hSCY], a - ld c, $50 + ld c, 80 call DelayFrames call ClearScreen call UpdateSprites @@ -431,7 +431,7 @@ Function28177: ; 28177 ld de, OTName ld bc, NAME_LENGTH call CopyBytes - call Function222a + call ReturnToMapFromSubmenu ld a, [wc2d7] push af ld a, $1 @@ -509,7 +509,7 @@ UnknownText_0x283ed: ; 0x283ed Function283f2: ; 283f2 ld a, $1 - ld [$ffcc], a + ld [hFFCC], a .asm_283f6 ld a, [hl] ld [hSerialSend], a @@ -521,14 +521,14 @@ Function283f2: ; 283f2 .asm_28401 dec a jr nz, .asm_28401 - ld a, [$ffcc] + ld a, [hFFCC] and a ld a, b pop bc jr z, .asm_28411 dec hl xor a - ld [$ffcc], a + ld [hFFCC], a jr .asm_283f6 .asm_28411 @@ -2172,7 +2172,7 @@ Function28fa1: ; 28fa1 Function28fdb: ; 28fdb xor a ld [wJumptableIndex], a - call WhiteBGMap + call ClearBGPalettes call ClearSprites call ClearTileMap call DisableLCD @@ -2495,7 +2495,7 @@ Function29220: ; 29220 ; 29229 Function29229: ; 29229 - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites call DisableLCD @@ -2623,7 +2623,7 @@ Function292ec: ; 292ec Function292f6: ; 292f6 push af - call WhiteBGMap + call ClearBGPalettes call WaitTop ld a, VBGMap1 / $100 ld [hBGMapAddress + 1], a @@ -3902,7 +3902,7 @@ Function29dba: ; 29dba Function29e0c: ; 29e0c xor a - ld [$ffca], a + ld [hFFCA], a ld a, [wcf5b] ld h, a ld a, [wcf5c] diff --git a/engine/map_objects.asm b/engine/map_objects.asm index bc1ce4a67..4c2adc9aa 100644 --- a/engine/map_objects.asm +++ b/engine/map_objects.asm @@ -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 @@ -1043,17 +1043,17 @@ Function47dd: ; 47dd .ObeyDPad: ; 487c ld hl, Function5000 - jp Function5041 + jp HandleMovementData ; 4882 .Movement08: ; 4882 ld hl, Function5015 - jp Function5041 + jp HandleMovementData ; 4888 .Movement09: ; 4888 ld hl, Function5026 - jp Function5041 + jp HandleMovementData ; 488e .Movement0a: ; 488e @@ -1070,7 +1070,7 @@ Function47dd: ; 47dd .Movement0d: ; 4897 ld hl, Function5000 - jp Function5041 + jp HandleMovementData ; 489d .Movement0e: ; 489d @@ -1079,12 +1079,12 @@ Function47dd: ; 47dd .Follow: ; 48a0 ld hl, Function54e6 - jp Function5041 + jp HandleMovementData ; 48a6 .Script: ; 48a6 ld hl, Function500e - jp Function5041 + jp HandleMovementData ; 48ac .Strength: ; 48ac @@ -1149,12 +1149,15 @@ Function47dd: ; 47dd 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 @@ -1162,6 +1165,7 @@ Function47dd: ; 47dd ld a, [hl] cp STANDING jr z, .standing + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] @@ -2400,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 @@ -2416,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] @@ -2431,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] @@ -2446,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 @@ -2484,7 +2491,7 @@ GetMovementByte: ; 505e jp [hl] ; 5065 -Function5065: ; 5065 +ContinueReadingMovement: ; 5065 ld a, 1 ld [wc2ea], a ret @@ -2563,7 +2570,8 @@ Function54e6: ; 54e6 .done call Function550a ret c - ld a, $3e + + ld a, movement_step_sleep_1 ret ; 550a @@ -2585,7 +2593,7 @@ Function550a: ; 550a .nope ld a, $ff ld [wObjectFollow_Follower], a - ld a, $47 + ld a, movement_step_end scf ret ; 5529 @@ -2696,6 +2704,7 @@ Function5582: ; 5582 Function55ac: ; 55ac call FindFirstEmptyObjectStruct ret nc + ld d, h ld e, l callba Function8286 @@ -2703,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 @@ -2716,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 @@ -2726,6 +2740,7 @@ Function55b9: ; 55b9 add hl, bc ld e, [hl] pop hl + ld [hl], d inc hl ld [hl], e @@ -2786,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 @@ -2977,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 @@ -3180,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 @@ -3294,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 @@ -3322,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 @@ -3495,7 +3518,7 @@ Function59f3: ; 59f3 .next ld a, [hli] ld d, a - and %11110000 + and $f0 ret z cp c jr nz, .next @@ -3503,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] @@ -3550,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 @@ -3565,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 @@ -3580,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 @@ -3609,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 @@ -3626,7 +3649,7 @@ Function5a0d: ; 5a0d ld e, [hl] inc hl - ld a, [$ffc1] + ld a, [hFFC1] bit 2, e jr z, .nope1 xor a @@ -3640,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 @@ -3665,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 8ae9838f0..09fc4d155 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 @@ -245,7 +245,7 @@ endr MapSetupCommands: ; 15440 dba EnableLCD ; 00 dba DisableLCD ; 01 - dba SoundRestart ; 02 + dba MapSetup_Sound_Off ; 02 dba PlayMapMusic ; 03 dba RestartMapMusic ; 04 dba FadeToMapMusic ; 05 @@ -271,9 +271,9 @@ MapSetupCommands: ; 15440 dba LoadWarpData ; 19 dba LoadMapAttributes ; 1a dba LoadMapAttributes_IgnoreHidden ; 1b - dba WhiteBGMap ; 1c - dba FadeBlackBGMap ; 1d - dba FadeInBGMap ; 1e + dba ClearBGPalettes ; 1c + dba FadeOutPalettes ; 1d + dba FadeInPalettes ; 1e dba GetCoordOfUpperLeftCorner ; 1f dba RestoreFacingAfterWarp ; 20 dba SpawnInFacingDown ; 21 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 index 4618f4e20..21ec969b4 100755 --- a/engine/namingscreen.asm +++ b/engine/namingscreen.asm @@ -40,7 +40,7 @@ NamingScreen: ; 116c1 ; 116f8 Function116f8: ; 116f8 - call WhiteBGMap + call ClearBGPalettes ld b, $8 call GetSGBLayout call DisableLCD diff --git a/engine/pack.asm b/engine/pack.asm index aa20184b9..2ba9c9d3a 100644 --- a/engine/pack.asm +++ b/engine/pack.asm @@ -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 @@ -922,7 +922,7 @@ Function105dc: ; 105dc (4:45dc) ret .asm_1066c: ; 1066c (4:466c) - call WhiteBGMap + call ClearBGPalettes jr .asm_1067e .BattleOnly: ; 10671 (4:4671) @@ -1401,7 +1401,7 @@ Function108d4: ; 108d4 (4:48d4) Function10955: ; 10955 - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites call DisableLCD diff --git a/engine/party_menu.asm b/engine/party_menu.asm index 6c27cb73e..4d50ee8e4 100644 --- a/engine/party_menu.asm +++ b/engine/party_menu.asm @@ -2,10 +2,10 @@ SelectMonFromParty: ; 50000 call DisableSpriteUpdates xor a ld [PartyMenuActionText], a - call WhiteBGMap + call ClearBGPalettes call Function5003f call WaitBGMap - call Function32f9 + call SetPalettes call DelayFrame call PartyMenuSelect call Function2b74 @@ -17,12 +17,12 @@ Function5001d: ; 5001d ld a, b ld [PartyMenuActionText], a call DisableSpriteUpdates - call WhiteBGMap + call ClearBGPalettes call Function5003f call WaitBGMap ld b, $a call GetSGBLayout - call Function32f9 + call SetPalettes call DelayFrame call PartyMenuSelect call Function2b74 @@ -57,43 +57,42 @@ WritePartyMenuTilemap: ; 0x5005f ld bc, SCREEN_WIDTH * SCREEN_HEIGHT ld a, " " call ByteFill ; blank the tilemap - call Function50396 ; This reads from a pointer table??? + call GetPartyMenuTilemapPointers ; This reads from a pointer table??? .loop ld a, [hli] - cp -1 - jr z, .asm_50084 ; 0x5007a $8 + cp $ff + jr z, .end ; 0x5007a $8 push hl - ld hl, .jumptable + ld hl, .Jumptable rst JumpTable pop hl jr .loop ; 0x50082 $f3 - -.asm_50084 +.end pop af ld [Options], a ret ; 0x50089 -.jumptable: ; 50089 - dw .displaynicks ; 0 - dw .drawhpbars ; 1 - dw Function50138 ; 2 - dw Function50176 ; 3 - dw Function501b2 ; 4 - dw Function501e0 ; 5 - dw Function5022f ; 6 - dw Function502b1 ; 7 - dw Function50307 ; 8 +.Jumptable: ; 50089 + dw PlacePartyNicknames + dw PlacePartyHPBar + dw PlacePartyMenuHPDigits + dw PlacePartyMonLevel + dw PlacePartyMonStatus + dw PlacePartyMonTMHMCompatibility + dw PlacePartyMonEvoStoneCompatibility + dw PlacePartyMonGender + dw PlacePartyMonMobileBattleSelection ; 5009b -.displaynicks: ; 5009b +PlacePartyNicknames: ; 5009b hlcoord 3, 1 ld a, [PartyCount] and a - jr z, .done + jr z, .end ld c, a ld b, $0 -.loop2 +.loop push bc push hl push hl @@ -103,28 +102,28 @@ WritePartyMenuTilemap: ; 0x5005f pop hl call PlaceString pop hl - ld de, $0028 + ld de, 2 * SCREEN_WIDTH add hl, de pop bc inc b dec c - jr nz, .loop2 + jr nz, .loop -.done +.end rept 2 dec hl endr - ld de, .cancelstring + ld de, .CANCEL call PlaceString ret ; 500c8 -.cancelstring: ; 500c8 +.CANCEL: ; 500c8 db "CANCEL@" ; 500cf -.drawhpbars: ; 500cf +PlacePartyHPBar: ; 500cf xor a ld [wcda9], a ld a, [PartyCount] @@ -133,17 +132,17 @@ endr ld c, a ld b, $0 hlcoord 11, 2 -.loop3 +.loop push bc push hl - call Function50389 + call PartyMenuCheckEgg jr z, .skip push hl - call _fillhpbar + call PlacePartymonHPBar pop hl - ld d, 6 - ld b, 0 - call DrawHPBar + ld d, $6 + ld b, $0 + call DrawBattleHPBar ld hl, wcd9b ld a, [wcda9] ld c, a @@ -157,31 +156,31 @@ endr ld hl, wcda9 inc [hl] pop hl - ld de, $0028 + ld de, 2 * SCREEN_WIDTH add hl, de pop bc inc b dec c - jr nz, .loop3 + jr nz, .loop ld b, $a call GetSGBLayout ret ; 50117 -_fillhpbar: ; 50117 +PlacePartymonHPBar: ; 50117 ld a, b - ld bc, PartyMon2 - PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, PartyMon1HP call AddNTimes ld a, [hli] or [hl] - jr nz, .notfainted + jr nz, .not_fainted xor a ld e, a ld c, a ret -.notfainted +.not_fainted dec hl ld a, [hli] ld b, a @@ -191,25 +190,25 @@ _fillhpbar: ; 50117 ld d, a ld a, [hli] ld e, a - predef ComputeHPBarLength + predef DrawPartyMenuHPBar ret ; 50138 -Function50138: ; 50138 +PlacePartyMenuHPDigits: ; 50138 ld a, [PartyCount] and a ret z ld c, a ld b, $0 hlcoord 13, 1 -.asm_50143 +.loop push bc push hl - call Function50389 - jr z, .asm_5016b + call PartyMenuCheckEgg + jr z, .next push hl ld a, b - ld bc, PartyMon2 - PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, PartyMon1HP call AddNTimes ld e, l @@ -219,7 +218,7 @@ Function50138: ; 50138 lb bc, 2, 3 call PrintNum pop de - ld a, $f3 + ld a, "/" ld [hli], a rept 2 inc de @@ -227,32 +226,32 @@ endr lb bc, 2, 3 call PrintNum -.asm_5016b +.next pop hl - ld de, $0028 + ld de, 2 * SCREEN_WIDTH add hl, de pop bc inc b dec c - jr nz, .asm_50143 + jr nz, .loop ret ; 50176 -Function50176: ; 50176 +PlacePartyMonLevel: ; 50176 ld a, [PartyCount] and a ret z ld c, a ld b, 0 hlcoord 8, 2 -.asm_50181 +.loop push bc push hl - call Function50389 - jr z, .asm_501a7 + call PartyMenuCheckEgg + jr z, .next push hl ld a, b - ld bc, PartyMon2 - PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, PartyMon1Level call AddNTimes ld e, l @@ -260,70 +259,72 @@ Function50176: ; 50176 pop hl ld a, [de] cp 100 ; This is distinct from MAX_LEVEL. - jr nc, .asm_501a1 + jr nc, .ThreeDigits ld a, "<LV>" ld [hli], a - ld bc, $4102 -.asm_501a1 + lb bc, PRINTNUM_RIGHTALIGN | 1, 2 + ; jr .okay +.ThreeDigits lb bc, PRINTNUM_RIGHTALIGN | 1, 3 +; .okay call PrintNum -.asm_501a7 +.next pop hl ld de, SCREEN_WIDTH * 2 add hl, de pop bc inc b dec c - jr nz, .asm_50181 + jr nz, .loop ret ; 501b2 -Function501b2: ; 501b2 +PlacePartyMonStatus: ; 501b2 ld a, [PartyCount] and a ret z ld c, a ld b, 0 hlcoord 5, 2 -.asm_501bd +.loop push bc push hl - call Function50389 - jr z, .asm_501d5 + call PartyMenuCheckEgg + jr z, .next push hl ld a, b - ld bc, PartyMon2 - PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, PartyMon1Status call AddNTimes ld e, l ld d, h pop hl - call Function50d0a + call PlaceStatusString -.asm_501d5 +.next pop hl ld de, SCREEN_WIDTH * 2 add hl, de pop bc inc b dec c - jr nz, .asm_501bd + jr nz, .loop ret ; 501e0 -Function501e0: ; 501e0 +PlacePartyMonTMHMCompatibility: ; 501e0 ld a, [PartyCount] and a ret z ld c, a ld b, 0 hlcoord 12, 2 -.asm_501eb +.loop push bc push hl - call Function50389 - jr z, .asm_5020a + call PartyMenuCheckEgg + jr z, .next push hl ld hl, PartySpecies ld e, b @@ -333,56 +334,56 @@ Function501e0: ; 501e0 ld [CurPartySpecies], a predef CanLearnTMHMMove pop hl - call Function50215 + call .PlaceAbleNotAble call PlaceString -.asm_5020a +.next pop hl ld de, SCREEN_WIDTH * 2 add hl, de pop bc inc b dec c - jr nz, .asm_501eb + jr nz, .loop ret ; 50215 -Function50215: ; 50215 +.PlaceAbleNotAble: ; 50215 ld a, c and a - jr nz, .asm_5021d - ld de, String_50226 + jr nz, .able + ld de, .string_not_able ret -.asm_5021d - ld de, String_50221 +.able + ld de, .string_able ret ; 50221 -String_50221: ; 50221 +.string_able: ; 50221 db "ABLE@" ; 50226 -String_50226: ; 50226 +.string_not_able: ; 50226 db "NOT ABLE@" ; 5022f -Function5022f: ; 5022f +PlacePartyMonEvoStoneCompatibility: ; 5022f ld a, [PartyCount] and a ret z ld c, a ld b, 0 hlcoord 12, 2 -.asm_5023a +.loop push bc push hl - call Function50389 - jr z, .asm_5025d + call PartyMenuCheckEgg + jr z, .next push hl ld a, b - ld bc, PartyMon2 - PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, PartyMon1Species call AddNTimes ld a, [hl] @@ -393,22 +394,22 @@ Function5022f: ; 5022f rept 2 add hl, de endr - call Function50268 + call .DetermineCompatibility pop hl call PlaceString -.asm_5025d +.next pop hl - ld de, $0028 + ld de, 2 * SCREEN_WIDTH add hl, de pop bc inc b dec c - jr nz, .asm_5023a + jr nz, .loop ret ; 50268 -Function50268: ; 50268 +.DetermineCompatibility: ; 50268 ld de, StringBuffer1 ld a, BANK(EvosAttacksPointers) ld bc, 2 @@ -422,15 +423,15 @@ Function50268: ; 50268 ld bc, $a call FarCopyBytes ld hl, StringBuffer1 -.asm_50287 +.loop2 ld a, [hli] and a - jr z, .asm_5029f + jr z, .nope rept 2 inc hl endr cp EVOLVE_ITEM - jr nz, .asm_50287 + jr nz, .loop2 rept 2 dec hl endr @@ -439,35 +440,35 @@ endr rept 2 inc hl endr - jr nz, .asm_50287 - ld de, String_502a3 + jr nz, .loop2 + ld de, .string_able ret -.asm_5029f - ld de, String_502a8 +.nope + ld de, .string_not_able ret ; 502a3 -String_502a3: ; 502a3 +.string_able: ; 502a3 db "ABLE@" ; 502a8 -String_502a8: ; 502a8 +.string_not_able: ; 502a8 db "NOT ABLE@" ; 502b1 -Function502b1: ; 502b1 +PlacePartyMonGender: ; 502b1 ld a, [PartyCount] and a ret z ld c, a ld b, 0 hlcoord 12, 2 -.asm_502bc +.loop push bc push hl - call Function50389 - jr z, .asm_502e3 + call PartyMenuCheckEgg + jr z, .next ld [CurPartySpecies], a push hl ld a, b @@ -475,86 +476,86 @@ Function502b1: ; 502b1 xor a ld [MonType], a call GetGender - ld de, String_502fe - jr c, .asm_502df - ld de, String_502ee - jr nz, .asm_502df - ld de, String_502f5 + ld de, .unknown + jr c, .got_gender + ld de, .male + jr nz, .got_gender + ld de, .female -.asm_502df +.got_gender pop hl call PlaceString -.asm_502e3 +.next pop hl - ld de, $0028 + ld de, 2 * SCREEN_WIDTH add hl, de pop bc inc b dec c - jr nz, .asm_502bc + jr nz, .loop ret ; 502ee -String_502ee: ; 502ee +.male: ; 502ee db "♂…MALE@" ; 502f5 -String_502f5: ; 502f5 +.female: ; 502f5 db "♀…FEMALE@" ; 502fe -String_502fe: ; 502fe +.unknown: ; 502fe db "…UNKNOWN@" ; 50307 -Function50307: ; 50307 +PlacePartyMonMobileBattleSelection: ; 50307 ld a, [PartyCount] and a ret z ld c, a ld b, 0 hlcoord 12, 1 -.asm_50312 +.loop push bc push hl - ld de, String_50372 + ld de, .String_Sanka_Shinai call PlaceString pop hl - ld de, $0028 + ld de, 2 * SCREEN_WIDTH add hl, de pop bc inc b dec c - jr nz, .asm_50312 + jr nz, .loop ld a, l - ld e, $b + ld e, PKMN_NAME_LENGTH sub e ld l, a ld a, h sbc $0 ld h, a - ld de, String_50379 + ld de, .String_Kettei_Yameru call PlaceString ld b, $3 ld c, $0 ld hl, wd002 ld a, [hl] -.asm_5033b +.loop2 push hl push bc hlcoord 12, 1 -.asm_50340 +.loop3 and a - jr z, .asm_5034a - ld de, $0028 + jr z, .done + ld de, 2 * SCREEN_WIDTH add hl, de dec a - jr .asm_50340 + jr .loop3 -.asm_5034a - ld de, String_5036b +.done + ld de, .String_Banme push hl call PlaceString pop hl @@ -562,7 +563,7 @@ Function50307: ; 50307 push bc push hl ld a, c - ld hl, Strings_50383 + ld hl, .Strings_1_2_3 call GetNthString ld d, h ld e, l @@ -575,24 +576,24 @@ Function50307: ; 50307 inc c dec b ret z - jr .asm_5033b + jr .loop2 ; 5036b -String_5036b: ; 5036b +.String_Banme: ; 5036b db " ばんめ @" ; Place ; 50372 -String_50372: ; 50372 +.String_Sanka_Shinai: ; 50372 db "さんかしない@" ; Cancel ; 50379 -String_50379: ; 50379 +.String_Kettei_Yameru: ; 50379 db "けってい やめる@" ; Quit ; 50383 -Strings_50383: ; 50383 +.Strings_1_2_3: ; 50383 db "1@", "2@", "3@" ; 1st, 2nd, 3rd ; 50389 -Function50389: ; 50389 +PartyMenuCheckEgg: ; 50389 ld a, PartySpecies % $100 add b ld e, a @@ -604,15 +605,15 @@ Function50389: ; 50389 ret ; 50396 -Function50396: ; 50396 +GetPartyMenuTilemapPointers: ; 50396 ld a, [PartyMenuActionText] and $f0 - jr nz, .override + jr nz, .skip ld a, [PartyMenuActionText] and $f ld e, a ld d, 0 - ld hl, .selectmonmenuoptions + ld hl, .Pointers rept 2 add hl, de endr @@ -621,31 +622,32 @@ endr ld l, a ret -.override - ld hl, .default +.skip + ld hl, .Default ret ; 503b2 -.selectmonmenuoptions: ; 503b2 - dw .default - dw .default - dw .default - dw .unknown1 - dw .default - dw .unknown2 - dw .trade - dw .trade - dw .default - dw .unknown3 +.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, -1 -.unknown1: db 0, 5, 3, 4, -1 -.unknown2: db 0, 6, 3, 4, -1 -.trade: db 0, 7, 3, 4, -1 -.unknown3: db 0, 8, 3, 4, -1 +.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] @@ -653,7 +655,7 @@ Function503e0: ; 503e0 ret z ld c, a xor a - ld [hConnectedMapWidth], a + ld [hObjectStructIndexBuffer], a .asm_503ea push bc push hl @@ -661,9 +663,9 @@ Function503e0: ; 503e0 ld a, BANK(Function8e83f) ld e, $0 rst FarCall - ld a, [hConnectedMapWidth] + ld a, [hObjectStructIndexBuffer] inc a - ld [hConnectedMapWidth], a + ld [hObjectStructIndexBuffer], a pop hl pop bc dec c @@ -671,6 +673,7 @@ Function503e0: ; 503e0 callab Function8cf69 ret ; 50405 + Function50405: ; 50405 xor a ld [wd0e3], a @@ -692,7 +695,7 @@ Function50405: ; 50405 ld a, $1 .asm_50424 - ld [wcfa9], a + ld [MenuSelection2], a ld a, $3 ld [wcfa8], a ret @@ -713,7 +716,7 @@ Function5042d: ; 0x5042d .asm_50444 ld a, $1 .asm_50446 - ld [wcfa9], a + ld [MenuSelection2], a ld a, $3 ld [wcfa8], a ret @@ -738,7 +741,7 @@ PartyMenuSelect: ; 0x50457 ld a, [PartyCount] inc a ld b, a - ld a, [wcfa9] ; menu selection? + ld a, [MenuSelection2] ; menu selection? cp b jr z, .exitmenu ; CANCEL ld [wd0d8], a @@ -746,7 +749,7 @@ PartyMenuSelect: ; 0x50457 ld b, a bit 1, b jr nz, .exitmenu ; B button? - ld a, [wcfa9] + ld a, [MenuSelection2] dec a ld [CurPartyMon], a ld c, a @@ -773,7 +776,7 @@ PartyMenuSelect: ; 0x50457 PrintPartyMenuText: ; 5049a hlcoord 0, 14 - ld bc, $0212 + lb bc, 2, 18 call TextBox ld a, [PartyCount] and a @@ -920,6 +923,7 @@ UnknownText_0x505bc: ; 0x505bc db "@" ; 0x505c1 + Function505c1: ; 505c1 ld e, a ld d, 0 diff --git a/engine/pokedex.asm b/engine/pokedex.asm index 9a9e01f8a..c331f4a2a 100644 --- a/engine/pokedex.asm +++ b/engine/pokedex.asm @@ -60,7 +60,7 @@ Pokedex: ; 40000 ; 40063 InitPokedex: ; 40063 - call WhiteBGMap + call ClearBGPalettes call ClearSprites call ClearTileMap call Function414b7 @@ -487,7 +487,7 @@ Function4034f: ; 4034f ld [wcf64], a pop af ld [wcf65], a - call WhiteBGMap + call ClearBGPalettes call DisableLCD call Function414fb call Function4038d diff --git a/engine/scripting.asm b/engine/scripting.asm index f94436f67..cbc8c0028 100644 --- a/engine/scripting.asm +++ b/engine/scripting.asm @@ -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) @@ -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 @@ -2847,6 +2851,7 @@ Script_warp: ; 0x97a1d call LoadMapStatus call StopScript ret + .not_ok call GetScriptByte call GetScriptByte @@ -3117,6 +3122,7 @@ Script_end: ; 0x97b74 call ExitScriptSubroutine jr c, .resume ret + .resume xor a ld [ScriptRunning], a 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 c1e9ff95b..21d391faa 100644 --- a/engine/specials.asm +++ b/engine/specials.asm @@ -65,14 +65,14 @@ 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 @@ -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/startmenu.asm b/engine/startmenu.asm index b7287be83..1c7768850 100755 --- a/engine/startmenu.asm +++ b/engine/startmenu.asm @@ -139,7 +139,7 @@ endr ; 126b7 .Clear ; 126b7 - call WhiteBGMap + call ClearBGPalettes call Call_ExitMenu call Function2bae call .DrawMenuAccount_ @@ -529,7 +529,7 @@ StartMenu_Pokemon: ; 12976 .choosemenu xor a ld [PartyMenuActionText], a ; Choose a POKéMON. - call WhiteBGMap + call ClearBGPalettes .menu callba Function5004f @@ -1449,7 +1449,7 @@ MonMenu_RockSmash: ; 12f3b ; 12f50 MonMenu_SweetScent: ; 12f50 - callba DoMovementFunctionc + callba SweetScentFromMenu ld b, $4 ld a, $2 ret @@ -1466,7 +1466,7 @@ Function12f5b: ; 12f5b ld a, b ld [Options], a push af - call WhiteBGMap + call ClearBGPalettes pop af ret ; 12f73 @@ -1527,7 +1527,7 @@ ManagePokemonMoves: ; 12fba call MoveScreenLoop pop af ld [Options], a - call WhiteBGMap + call ClearBGPalettes .egg ld a, $0 @@ -1753,7 +1753,7 @@ String_1316b: ; 1316b ; 13172 SetUpMoveScreenBG: ; 13172 - call WhiteBGMap + call ClearBGPalettes call ClearTileMap call ClearSprites xor a diff --git a/engine/std_scripts.asm b/engine/std_scripts.asm index c898eae14..a886dbbf3 100644 --- a/engine/std_scripts.asm +++ b/engine/std_scripts.asm @@ -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 diff --git a/engine/timeofdaypals.asm b/engine/timeofdaypals.asm index bdfcc8b05..1dbd9b2ee 100644 --- a/engine/timeofdaypals.asm +++ b/engine/timeofdaypals.asm @@ -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 diff --git a/engine/title.asm b/engine/title.asm index d29c90a23..a9b991e6b 100644 --- a/engine/title.asm +++ b/engine/title.asm @@ -1,6 +1,6 @@ _TitleScreen: ; 10ed67 - call WhiteBGMap + call ClearBGPalettes call ClearSprites call ClearTileMap |