diff options
author | anmart <andrewrmartinek@gmail.com> | 2016-02-19 23:41:44 -0500 |
---|---|---|
committer | anmart <andrewrmartinek@gmail.com> | 2016-02-19 23:41:44 -0500 |
commit | 595988d101d7c7264099ee3b9f559214bfda436c (patch) | |
tree | 7acf01ef7fa41e056f98dda982f47fccaf3eddab /src/engine/home.asm | |
parent | dc06e764c0d0a4f56d01474c5397a8e47aa0aa13 (diff) | |
parent | 6fb06a07dace26443a064d56be25972c2cddd8ae (diff) |
Merge remote-tracking branch 'refs/remotes/pret/master'
Diffstat (limited to 'src/engine/home.asm')
-rwxr-xr-x | src/engine/home.asm | 2111 |
1 files changed, 1928 insertions, 183 deletions
diff --git a/src/engine/home.asm b/src/engine/home.asm index bf26b1c..296ca2b 100755 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -332,9 +332,9 @@ SetupLCD: ; 030b (0:030b) ld [rSCX], a ld [rWY], a ld [rWX], a - ld [$cab0], a - ld [$cab1], a - ld [$cab2], a + ld [wcab0], a + ld [wcab1], a + ld [wcab2], a ldh [hSCX], a ldh [hSCY], a ldh [hWX], a @@ -615,7 +615,7 @@ Func_04a2: ; 04a2 (0:04a2) call DisableLCD call FillTileMap xor a - ld [$cac2], a + ld [wcac2], a ld a, [wConsole] cp CONSOLE_SGB ret nz @@ -717,7 +717,7 @@ DoAFrames: ; 0536 (0:0536) ret ; updates background, sprites and other game variables, halts until vblank, and reads user input -; if $cad5 is not 0, the game can be paused (and resumed) by pressing the select button +; if wcad5 is not 0, the game can be paused (and resumed) by pressing the select button DoFrame: ; 053f (0:053f) push af push hl @@ -728,7 +728,7 @@ DoFrame: ; 053f (0:053f) call WaitForVBlank call ReadJoypad call HandleDPadRepeat - ld a, [$cad5] + ld a, [wcad5] or a jr z, .done ldh a, [hButtonsPressed] @@ -1362,7 +1362,7 @@ Func_08ef: ; 08ef (0:08ef) ld [bc], a ret .asm_92a - ld [$cade], a + ld [wcade], a ld hl, $cada bit 0, [hl] jr nz, .asm_94a @@ -1394,7 +1394,7 @@ INCBIN "baserom.gbc",$0950,$099c - $0950 Func_099c: ; 099c (0:099c) xor a - ld [$cab5], a + ld [wcab5], a ld hl, $ca00 ld c, $28 xor a @@ -1770,15 +1770,15 @@ SerialHandler: ; 0d26 (0:0d26) push hl push de push bc - ld a, [$ce63] ; + ld a, [wce63] ; or a ; - jr z, .asm_d35 ; if [$ce63] nonzero: + jr z, .asm_d35 ; if [wce63] nonzero: call Func_3189 ; ? jr .done ; return .asm_d35 ld a, [wSerialOp] ; or a ; - jr z, .asm_d55 ; skip ahead if [$cb74] zero + jr z, .asm_d55 ; skip ahead if [wcb74] zero ; send/receive a byte ld a, [rSB] call SerialHandleRecv @@ -1793,7 +1793,7 @@ SerialHandler: ; 0d26 (0:0d26) ld [rSB], a ; prepare sending byte (from Func_0dc8?) ld a, [wSerialOp] cp $29 - jr z, .done ; if [$cb74] != $29, use external clock + jr z, .done ; if [wcb74] != $29, use external clock jr .asm_d6a ; and prepare for next byte. either way, return .asm_d55 ld a, $1 @@ -1803,7 +1803,7 @@ SerialHandler: ; 0d26 (0:0d26) ld a, $ac ld [rSB], a ld a, [wSerialRecvBuf] - cp $12 ; if [$cba5] != $12, use external clock + cp $12 ; if [wSerialRecvBuf] != $12, use external clock jr z, .done ; and prepare for next byte. either way, return .asm_d6a ld a, $80 ; @@ -1851,7 +1851,7 @@ SerialHandleRecv: ; 0d77 (0:0d77) push af ld a, [wSerialRecvIndex] ld e, a - ld a, [$cba3] + ld a, [wcba3] dec a and $1f cp e @@ -1866,7 +1866,7 @@ SerialHandleRecv: ; 0d77 (0:0d77) ld a, e inc a and $1f - ld [$cba4], a + ld [wSerialRecvIndex], a ; increment received bytes counter & clear flags ld hl, wSerialRecvCounter inc [hl] @@ -1937,7 +1937,7 @@ Func_0e0a: ; 0e0a (0:0e0a) push bc push af .asm_e0e - ld a, [$cb80] + ld a, [wcb80] ld e, a ld a, [wSerialSendBufIndex] dec a @@ -1948,7 +1948,7 @@ Func_0e0a: ; 0e0a (0:0e0a) ld a, e inc a and $1f - ld [$cb80], a + ld [wcb80], a ld hl, wSerialSendBuf add hl, de pop af @@ -1983,7 +1983,7 @@ Func_0e39: ; 0e39 (0:0e39) .asm_e49 push de dec [hl] - ld a, [$cba3] + ld a, [wcba3] ld e, a ld d, $0 ld hl, wSerialRecvBuf @@ -1993,7 +1993,7 @@ Func_0e39: ; 0e39 (0:0e39) ld a, e inc a and $1f - ld [$cba3], a + ld [wcba3], a pop af pop de pop hl @@ -2070,9 +2070,142 @@ ClearSerialData: ; 0eb1 (0:0eb1) or b jr nz, .loop ret -; 0xebf -INCBIN "baserom.gbc",$0ebf,$1072 - $0ebf +Func_0ebf: ; 0ebf (0:0ebf) + push bc +.asm_ec0 + ld a, [hli] + call Func_0e0a + ld a, [wSerialFlags] + or a + jr nz, .asm_ed2 + dec bc + ld a, c + or b + jr nz, .asm_ec0 + pop bc + or a + ret +.asm_ed2 + pop bc + scf + ret +; 0xed5 + +INCBIN "baserom.gbc",$0ed5,$0f35 - $0ed5 + +Func_0f35: ; 0f35 (0:0f35) + ld a, [wSerialFlags] + ld l, a + ld h, $0 + call Func_2ec4 + ld hl, $0055 + call DrawWideTextBox_WaitForInput + ld a, $ff + ld [wd0c3], a + ld hl, $cbe5 + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + xor a + call PlaySong + call ResetSerial + ret + +Func_0f58: ; 0f58 (0:0f58) + ld a, [wcc09] + cp $1 + jr z, .asm_f60 + ret +.asm_f60 + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + or a + jr z, .asm_f70 + ld hl, $cbe2 + ld de, wRNG1 + jr .asm_f76 +.asm_f70 + ld hl, wRNG1 + ld de, $cbe2 +.asm_f76 + ld c, $3 + call Func_0e63 + jp c, Func_0f35 + ret + +Func_0f7f: ; 0f7f (0:0f7f) + push hl + push bc + ld [$ff9e], a + ld a, $f1 + call GetOpposingTurnDuelistVariable + cp $1 + jr nz, .asm_f98 + ld hl, $ff9e + ld bc, $000a + call Func_0ebf + call Func_0f58 +.asm_f98 + pop bc + pop hl + ret +; 0xf9b + +INCBIN "baserom.gbc",$0f9b,$100b - $0f9b + +Func_100b: ; 100b (0:100b) + ld a, $2 + call BankswitchRAM + call $669d + xor a + call BankswitchRAM + call EnableExtRAM + ld hl, $a008 + ld a, [hl] + inc [hl] + call DisableExtRAM + and $3 + add $28 + ld l, $0 + ld h, a + add hl, hl + add hl, hl + ld a, $3 + call BankswitchRAM + push hl + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + call Func_1324 + ld a, e + ld [wccc3], a + call GetOpposingTurnDuelistVariable_SwapTurn + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + call Func_1324 + ld a, e + ld [wccc4], a + call GetOpposingTurnDuelistVariable_SwapTurn + pop hl + push hl + call EnableExtRAM + ld a, [wcc06] + ld [hli], a + ld a, [wccc4] + ld [hli], a + ld a, [wccc3] + ld [hli], a + pop hl + ld de, $0010 + add hl, de + ld e, l + ld d, h + call DisableExtRAM + bank1call $66a4 + xor a + call BankswitchRAM + ret ; copies the deck pointed to by de to wPlayerDeck or wOpponentDeck CopyDeckData: ; 1072 (0:1072) @@ -2131,22 +2264,21 @@ ShuffleDeck: ; 10bc (0:10bc) ld h, a ld d, a ld a, DECK_SIZE - ld l, wPlayerNumberOfCardsNotInDeck & $ff + ld l, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK sub [hl] ld b, a - ld a, wPlayerDeckCards & $ff + ld a, DUELVARS_DECK_CARDS add [hl] ld l, a ; hl = position in the wPlayerDeckCards or wOpponentDeckCards array of the first (top) card in the deck ld a, b ; a = number of cards in the deck call ShuffleCards ret -; 0x10cf ; draw a card from the deck, saving its location as $40 ; returns c if deck is empty, nc if a card was succesfully drawn DrawCardFromDeck: ; 10cf (0:10cf) push hl - ld a, wPlayerNumberOfCardsNotInDeck & $ff + ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK call GetTurnDuelistVariable cp DECK_SIZE jr nc, .emptyDeck @@ -2154,7 +2286,7 @@ DrawCardFromDeck: ; 10cf (0:10cf) inc a ld [hl], a ; point to top card in the deck - add (wPlayerDeckCards - 1) & $ff + add DUELVARS_DECK_CARDS - 1 ld l, a ; grab card number (0-59) from wPlayerDeckCards or wOpponentDeckCards array ld a, [hl] @@ -2186,10 +2318,10 @@ AddCardToHand: ; 1123 (0:1123) ; write $1 (hand) into the location of this card ld [hl], $1 ; increment number of cards in hand - ld l, wPlayerNumberOfCardsInHand & $ff + ld l, DUELVARS_NUMBER_OF_CARDS_IN_HAND inc [hl] ; add card to hand - ld a, (wPlayerHand - 1) & $ff + ld a, DUELVARS_HAND - 1 add [hl] ld l, a ld [hl], e @@ -2241,7 +2373,94 @@ ShuffleCards: ; 127f (0:127f) ret ; 0x12a3 -INCBIN "baserom.gbc",$12a3,$160b - $12a3 +INCBIN "baserom.gbc",$12a3,$1324 - $12a3 + +Func_1324: ; 1324 (0:1324) + push af + push hl + call Func_1362 + ld e, a + ld d, $0 + pop hl + pop af + ret +; 0x132f + +INCBIN "baserom.gbc",$132f,$1362 - $132f + +Func_1362: ; 1362 (0:1362) + push de + ld e, a + ld d, $0 + ld hl, wPlayerDeck + ld a, [$ff97] + cp $c2 + jr z, .asm_1372 + ld hl, wOpponentDeck +.asm_1372 + add hl, de + ld a, [hl] + pop de + ret + +Func_1376: ; 1376 (0:1376) + push hl + push de + push bc + push af + call Func_1324 + call LoadCardDataToRAM + pop af + ld hl, wCardBuffer1 + bank1call $6d84 + ld a, e + pop bc + pop de + pop hl + ret + +Func_138c: ; 138c (0:138c) + push hl + push de + push bc + push af + call Func_1324 + call Func_2f0a + pop af + ld hl, wCardBuffer2 + bank1call $6d84 + ld a, e + pop bc + pop de + pop hl + ret +; 0x13a2 + +INCBIN "baserom.gbc",$13a2,$15ef - $13a2 + +Func_15ef: ; 15ef (0:15ef) + push bc + ld l, $0 + ld c, $0 +.asm_15f4 + ld a, [hl] + cp b + jr nz, .asm_1602 + ld a, l + push hl + call Func_1362 + cp e + pop hl + jr nz, .asm_1602 + inc c +.asm_1602 + inc l + ld a, l + cp $3c + jr c, .asm_15f4 + ld a, c + pop bc + ret ; returns [[hWhoseTurn] << 8 + a] in a ; i.e. variable a of the player whose turn it is @@ -2266,7 +2485,616 @@ GetOpposingTurnDuelistVariable: ; 1611 (0:1611) ret ; 0x161e -INCBIN "baserom.gbc",$161e,$1c72 - $161e +INCBIN "baserom.gbc",$161e,$16c0 - $161e + +Func_16c0: ; 16c0 (0:16c0) + ld a, e + ld [wccc6], a + ld a, d + ld [$ff9f], a + call Func_1376 + ld a, [$cc2b] + ld [wccc2], a + ld hl, $cc30 + dec e + jr nz, .asm_16d9 + ld hl, $cc43 +.asm_16d9 + ld de, $cca6 + ld c, $13 +.asm_16de + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_16de + ld a, [wccb0] + ld hl, $ccb9 + ld [hli], a + xor a + ld [hl], a + ld [wccc7], a + ld hl, $ccbf + ld [hli], a + ld [hl], a + ret + +Func_16f6: ; 16f6 (0:16f6) + ld a, $bb + call GetTurnDuelistVariable + ld [$ff9f], a + call Func_1324 + ld a, e + ld [wccc3], a + call GetOpposingTurnDuelistVariable_SwapTurn + ld a, $bb + call GetTurnDuelistVariable + call Func_1324 + ld a, e + ld [wccc4], a + call GetOpposingTurnDuelistVariable_SwapTurn + xor a + ld [wccec], a + ld [wcccd], a + ld [wcced], a + ld [wcce6], a + ld [wccef], a + ld [wccf0], a + ld [wccf1], a + bank1call $7189 + ret + +Func_1730: ; 1730 (0:1730) + ld a, [wccc6] + ld [wcc10], a + ld a, [$ff9f] + ld [wcc11], a + ld a, [wccc2] + ld [wcc12], a + ld a, [wccb1] + cp $4 + jp z, Func_184b + call Func_16f6 + ld a, $1 + call TryExecuteEffectCommandFunction + jp c, Func_181e + call Func_3414 + jr c, .asm_1766 + ld a, $2 + call TryExecuteEffectCommandFunction + jp c, Func_1821 + call Func_1874 + jr .asm_1777 +.asm_1766 + call Func_1874 + call Func_3400 + jp c, Func_1823 + ld a, $2 + call TryExecuteEffectCommandFunction + jp c, Func_1821 +.asm_1777 + ld a, $9 + call Func_0f7f + ld a, $6 + call TryExecuteEffectCommandFunction + call Func_18d7 + jp c, Func_1828 + call Func_1b8d + call WaitForWideTextBoxInput + call Func_0f58 + ld a, $5 + call TryExecuteEffectCommandFunction + ld a, $a + call Func_0f7f + call $7415 + ld a, [wccb1] + and $80 + jr nz, .asm_17ad + call GetOpposingTurnDuelistVariable_SwapTurn + call Func_3432 + call GetOpposingTurnDuelistVariable_SwapTurn +.asm_17ad + xor a + ld [$ff9d], a + ld a, $3 + call TryExecuteEffectCommandFunction + call Func_1994 + call Func_189d + ld hl, $ccbf + ld [hl], e + inc hl + ld [hl], d + ld b, $0 + ld a, [wccc1] + ld c, a + ld a, $c8 + call GetOpposingTurnDuelistVariable + push de + push hl + call $7494 + call $741a + call $7484 + pop hl + pop de + call Func_1a96 + ld a, [wcac2] + cp $1 + jr nz, .asm_17e8 + push hl + bank1call $503a + pop hl +.asm_17e8 + call Func_1ad0 + jr Func_17fb + +Func_17ed: ; 17ed (0:17ed) + call DrawWideTextBox_WaitForInput + xor a + ld hl, $ccb9 + ld [hli], a + ld [hl], a + ld a, $1 + ld [wccc7], a +Func_17fb: ; 17fb (0:17fb) + ld a, [wccc4] + push af + ld a, $4 + call TryExecuteEffectCommandFunction + pop af + ld [wccc4], a + call Func_367b + bank1call $6df1 + call Func_1bb4 + bank1call $7195 + call $6e49 + or a + ret + +Func_1819: ; 1819 (0:1819) + push hl + call $6510 + pop hl + +Func_181e: ; 181e (0:181e) + call DrawWideTextBox_WaitForInput + +Func_1821: ; 1821 (0:1821) + scf + ret + +Func_1823: ; 1823 (0:1823) + bank1call $717a + or a + ret + +Func_1828: ; 1828 (0:1828) + bank1call $4f9d + ld a, $1 + ld [wcce6], a + ld hl, $004f + call DrawWideTextBox_PrintText + ld a, $75 + ld [wccb8], a + ld a, $14 + call Func_195c + call Func_1bb4 + call $6e49 + bank1call $717a + or a + ret + +Func_184b: ; 184b (0:184b) + call $7415 + ld a, $2 + call TryExecuteEffectCommandFunction + jr c, Func_1819 + ld a, $5 + call TryExecuteEffectCommandFunction + jr c, Func_1821 + ld a, $c + call Func_0f7f + call Func_0f58 + ld a, $d + call Func_0f7f + ld a, $3 + call TryExecuteEffectCommandFunction + ld a, $16 + call Func_0f7f + ret + +Func_1874: ; 1874 (0:1874) + ld a, [wccec] + or a + ret nz + ld a, [$ffa0] + push af + ld a, [$ff9f] + push af + ld a, $1 + ld [wccec], a + ld a, [wcc11] + ld [$ff9f], a + ld a, [wcc10] + ld [$ffa0], a + ld a, $8 + call Func_0f7f + call Func_0f58 + pop af + ld [$ff9f], a + pop af + ld [$ffa0], a + ret + +Func_189d: ; 189d (0:189d) + ld a, [wccb1] + bit 7, a + ret nz + ld a, [wccc7] + or a + ret nz + ld a, e + or d + jr nz, .asm_18b9 + ld a, $e8 + call GetOpposingTurnDuelistVariable + or a + jr nz, .asm_18b9 + ld a, [wcccd] + or a + ret z +.asm_18b9 + push de + call GetOpposingTurnDuelistVariable_SwapTurn + xor a + ld [wcceb], a + call Func_348a + call GetOpposingTurnDuelistVariable_SwapTurn + pop de + ret nc + bank1call $4f9d + ld a, $e8 + call GetOpposingTurnDuelistVariable + ld [hl], $0 + ld de, $0000 + ret + +Func_18d7: ; 18d7 (0:18d7) + xor a + ld [wccc9], a + ld a, $f0 + call GetTurnDuelistVariable + and $f + cp $1 + jr z, .asm_18e8 + or a + ret +.asm_18e8 + ld de, $00f7 + call Func_307d + jr c, .asm_18f7 + ld a, $1 + ld [wccc9], a + scf + ret +.asm_18f7 + or a + ret +; 0x18f9 + +INCBIN "baserom.gbc",$18f9,$195c - $18f9 + +Func_195c: ; 195c (0:195c) + ld hl, $ccb9 + ld [hli], a + ld [hl], $0 + ld a, [wccc7] + push af + xor a + ld [wccc7], a + bank1call $7415 + ld a, [wccc4] + push af + ld a, [wccc3] + ld [wccc4], a + bank1call Func_1a22 ; switch to bank 1, but call a home func + ld a, [wccc1] + ld c, a + ld b, $0 + ld a, $c8 + call GetTurnDuelistVariable + bank1call $7469 + call Func_1ad0 + pop af + ld [wccc4], a + pop af + ld [wccc7], a + ret + +Func_1994: ; 1994 (0:1994) + xor a + ld [wccc1], a + ld hl, $ccb9 + ld a, [hli] + or [hl] + jr nz, .asm_19a3 + ld de, $0000 + ret +.asm_19a3 + xor a + ld [$ff9d], a + ld d, [hl] + dec hl + ld e, [hl] + bit 7, d + jr z, .asm_19b8 + res 7, d + xor a + ld [wccc1], a + call Func_321d + jr .asm_19f3 +.asm_19b8 + call Func_321d + ld a, e + or d + ret z + ld a, [$ff9d] + call Func_36f7 + call Func_1a0e + ld b, a + call GetOpposingTurnDuelistVariable_SwapTurn + call Func_3730 + call GetOpposingTurnDuelistVariable_SwapTurn + and b + jr z, .asm_19dc + sla e + rl d + ld hl, $ccc1 + set 1, [hl] +.asm_19dc + call GetOpposingTurnDuelistVariable_SwapTurn + call Func_374a + call GetOpposingTurnDuelistVariable_SwapTurn + and b + jr z, .asm_19f3 + ld hl, $ffe2 + add hl, de + ld e, l + ld d, h + ld hl, $ccc1 + set 2, [hl] +.asm_19f3 + ld b, $10 + call Func_1a69 + call GetOpposingTurnDuelistVariable_SwapTurn + ld b, $10 + call Func_1a7e + call Func_3244 + bit 7, d + jr z, .asm_1a0a + ld de, $0000 +.asm_1a0a + call GetOpposingTurnDuelistVariable_SwapTurn + ret + +Func_1a0e: ; 1a0e (0:1a0e) + push hl + add $1a + ld l, a + ld a, $1a + adc $0 + ld h, a + ld a, [hl] + pop hl + ret +; 0x1a1a + +INCBIN "baserom.gbc",$1a1a,$1a22 - $1a1a + +Func_1a22: ; 1a22 (0:1a22) + xor a + ld [wccc1], a + ld hl, $ccb9 + ld a, [hli] + or [hl] + or a + jr z, .asm_1a65 + ld d, [hl] + dec hl + ld e, [hl] + call Func_36f6 + call Func_1a0e + ld b, a + call Func_3730 + and b + jr z, .asm_1a47 + sla e + rl d + ld hl, $ccc1 + set 1, [hl] +.asm_1a47 + call Func_374a + and b + jr z, .asm_1a58 + ld hl, $ffe2 + add hl, de + ld e, l + ld d, h + ld hl, $ccc1 + set 2, [hl] +.asm_1a58 + ld b, $10 + call Func_1a69 + ld b, $10 + call Func_1a7e + bit 7, d + ret z +.asm_1a65 + ld de, $0000 + ret + +Func_1a69: ; 1a69 (0:1a69) + push de + call GetTurnDuelistVariable + ld de, $00d8 + call Func_15ef + ld l, a + ld h, $a + call HtimesL + pop de + add hl, de + ld e, l + ld d, h + ret + +Func_1a7e: ; 1a7e (0:1a7e) + push de + call GetTurnDuelistVariable + ld de, $00d9 + call Func_15ef + ld l, a + ld h, $14 + call HtimesL + pop de + ld a, e + sub l + ld e, a + ld a, d + sbc h + ld d, a + ret + +Func_1a96: ; 1a96 (0:1a96) + push hl + push de + ld a, [hl] + sub e + ld [hl], a + ld a, $0 + sbc d + and $80 + jr z, .asm_1aa4 + ld [hl], $0 +.asm_1aa4 + ld a, [hl] + or a + jr z, .asm_1aa9 + scf +.asm_1aa9 + pop de + pop hl + ret + +Func_1aac: ; 1aac (0:1aac) + ld e, a + add $c8 + call GetTurnDuelistVariable + or a + ret nz + ld a, [wccc4] + push af + ld a, e + add $bb + call GetTurnDuelistVariable + call Func_1376 + ld a, [wCardBuffer1 + $7] + ld [wccc4], a + call Func_1ad3 + pop af + ld [wccc4], a + scf + ret + +Func_1ad0: ; 1ad0 (0:1ad0) + ld a, [hl] + or a + ret nz +Func_1ad3: ; 1ad3 (0:1ad3) + ld a, [wccc4] + ld e, a + call LoadCardDataToRAM + ld hl, $cc27 + ld a, [hli] + ld h, [hl] + ld l, a + call Func_2ebb + ld hl, $0081 + call DrawWideTextBox_PrintText + ld a, $28 +.asm_1aeb + call DoFrame + dec a + jr nz, .asm_1aeb + scf + ret +; 0x1af3 + +INCBIN "baserom.gbc",$1af3,$1b8d - $1af3 + +Func_1b8d: ; 1b8d (0:1b8d) + bank1call $4f9d + ld a, $bb + call GetTurnDuelistVariable + call Func_1376 + ld a, $12 + call Func_29f5 + ld [hl], $0 + ld hl, $ce3f + xor a + ld [hli], a + ld [hli], a + ld a, [wccaa] + ld [hli], a + ld a, [wccab] + ld [hli], a + ld hl, $0035 + call DrawWideTextBox_PrintText + ret + +Func_1bb4: ; 1bb4 (0:1bb4) + call Func_3b31 + bank1call $4f9d + call $503a + xor a + ld [$ff9d], a + call Func_1bca + call WaitForWideTextBoxInput + call Func_0f58 + ret + +Func_1bca: ; 1bca (0:1bca) + ld a, [wcced] + or a + ret z + cp $1 + jr z, .asm_1bfd + ld a, [$ff9d] + add $bb + call GetTurnDuelistVariable + call Func_1376 + ld a, $12 + call Func_29f5 + ld [hl], $0 + ld hl, $0000 + call Func_2ebb + ld hl, $ccaa + ld de, $ce41 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld hl, $014a + call DrawWideTextBox_PrintText + scf + ret +.asm_1bfd + call $700a + call DrawWideTextBox_PrintText + scf + ret +; 0x1c05 + +INCBIN "baserom.gbc",$1c05,$1c72 - $1c05 ; returns [([hWhoseTurn] ^ $1) << 8 + a] in a ; i.e. variable a of the player whose turn it is not @@ -2318,7 +3146,7 @@ INCBIN "baserom.gbc",$1caa,$1dca - $1caa ; memcpy(HL, DE, C) Memcpy: ; 1dca (0:1dca) - ld a, [$cabb] ; + ld a, [wLCDC] ; bit 7, a ; jr nz, .asm_1dd8 ; assert that LCD is on .asm_1dd1 @@ -2368,7 +3196,6 @@ AdjustCoordinatesForWindow: ; 1deb (0:1deb) ld e, a pop af ret -; 0x1e00 ; Draws a bxc text box at de printing a name in the left side of the top border. ; The name's text offset must be at hl when this function is called. @@ -2616,7 +3443,7 @@ ColorizeTextBoxSGB and $80 jr z, .asm_1f48 ld a, $2 - ld [$cae2], a + ld [wcae2], a .asm_1f48 ld hl, $cae0 call SendSGB @@ -2744,7 +3571,27 @@ asm_2121 ret ; 0x212f -INCBIN "baserom.gbc",$212f,$21c5 - $212f +INCBIN "baserom.gbc",$212f,$2167 - $212f + +Func_2167: ; 2167 (0:2167) + ld l, a + ld h, $a0 + call HtimesL + add hl, hl + add hl, hl + ld de, $4318 + add hl, de + ld de, $8a00 + ld b, $28 + call asm_2121 + ld a, $a0 + ld hl, $010a + ld bc, $0a04 + ld de, $0504 + jp Func_1f5f +; 0x2189 + +INCBIN "baserom.gbc",$2189,$21c5 - $2189 Func_21c5: ; 21c5 (0:21c5) push de @@ -2796,12 +3643,12 @@ Func_21f2: ; 21f2 (0:21f2) ret .asm_220f ld a, $1 - ld [$cd0a], a + ld [wcd0a], a ret .asm_2215 call Func_230f xor a - ld [$cd0a], a + ld [wcd0a], a ld a, $f ldh [hffaf], a ret @@ -2810,13 +3657,13 @@ Func_21f2: ; 21f2 (0:21f2) xor a ret .asm_2225 - ld a, [$cd0a] + ld a, [wcd0a] push af ld a, $1 - ld [$cd0a], a + ld [wcd0a], a call Func_230f pop af - ld [$cd0a], a + ld [wcd0a], a ldh a, [$ffb0] or a jr nz, .asm_2240 @@ -2838,7 +3685,7 @@ Func_21f2: ; 21f2 (0:21f2) ret .asm_224d call Func_230f - ld a, [$cd08] + ld a, [wcd08] or a call z, .asm_2257 .asm_2257 @@ -2854,16 +3701,16 @@ Func_21f2: ; 21f2 (0:21f2) ldh a, [$ffab] adc $0 ldh [$ffab], a - ld a, [$cd09] + ld a, [wcd09] inc a - ld [$cd09], a + ld [wcd09], a xor a ret Func_2275: ; 2275 (0:2275) ld a, d dec a - ld [$cd04], a + ld [wcd04], a ld a, e ldh [$ffa8], a call Func_2298 @@ -2871,9 +3718,9 @@ Func_2275: ; 2275 (0:2275) ldh [$ffb0], a ldh [$ffa9], a ld a, $88 - ld [$cd06], a + ld [wcd06], a ld a, $80 - ld [$cd07], a + ld [wcd07], a ld hl, $c600 .asm_2292 xor a @@ -2884,9 +3731,9 @@ Func_2275: ; 2275 (0:2275) Func_2298: ; 2298 (0:2298) xor a - ld [$cd0a], a + ld [wcd0a], a ldh [$ffac], a - ld [$cd0b], a + ld [wcd0b], a ld a, $f ldh [hffaf], a ret @@ -2904,7 +3751,7 @@ Func_22ae: ; 22ae (0:22ae) ldh [$ffad], a xor a ldh [$ffae], a - ld [$cd09], a + ld [wcd09], a call CalculateBGMap0Address ld a, l ldh [$ffaa], a @@ -2912,7 +3759,7 @@ Func_22ae: ; 22ae (0:22ae) ldh [$ffab], a call Func_2298 xor a - ld [$cd0b], a + ld [wcd0b], a pop hl ret @@ -2944,7 +3791,7 @@ Func_22ca: ; 22ca (0:22ca) jr .asm_22e9 Func_22f2: ; 22f2 (0:22f2) - ld [$cd05], a + ld [wcd05], a ld hl, $ffaa ld e, [hl] inc hl @@ -2964,10 +3811,10 @@ Func_22f2: ; 22f2 (0:22f2) ret Func_230f: ; 230f (0:230f) - ld a, [$cd0a] + ld a, [wcd0a] or a ret z - ld a, [$cd0b] + ld a, [wcd0b] or a ret z push hl @@ -3028,22 +3875,22 @@ Func_2325: ; 2325 (0:2325) ; search linked-list for letters e/d (regisers), if found hoist the result to ; head of list and return it. carry flag denotes success. Func_235e: ; 235e (0:235e) - ld a, [$cd0a] ; + ld a, [wcd0a] ; or a ; - jr z, .asm_2376 ; if [$cd0a] nonzero: + jr z, .asm_2376 ; if [wcd0a] nonzero: call Uppercase ; uppercase e - ld a, [$cd0b] + ld a, [wcd0b] ld d, a or a - jr nz, .asm_2376 ; if [$cd0b] is zero: + jr nz, .asm_2376 ; if [wcd0b] is zero: ld a, e ; - ld [$cd0b], a ; [$cd0b] ← e + ld [wcd0b], a ; [wcd0b] ← e ld a, $1 ; or a ; return a = 1 ret .asm_2376 xor a - ld [$cd0b], a ; [$cd0b] ← 0 + ld [wcd0b], a ; [wcd0b] ← 0 ldh a, [$ffa9] ld l, a ; l ← [$ffa9]; index to to linked-list head .asm_237d @@ -3115,7 +3962,7 @@ Func_23c1: ; 23c1 (0:23c1) ret .asm_23cf xor a - ld [$cd0a], a + ld [wcd0a], a Func_23d3: ; 23d3 (0:23d3) push hl push de @@ -3212,7 +4059,7 @@ Func_24ac: ; 24ac (0:24ac) push hl push de push bc - ld a, [$cd0a] + ld a, [wcd0a] or a jr nz, .asm_24bf call Func_2510 @@ -3292,7 +4139,7 @@ Func_2518: ; 2518 (0:2518) add hl, hl add hl, hl add hl, hl - ld a, [$cd06] + ld a, [wcd06] ld b, a ld c, $0 add hl, bc @@ -3318,7 +4165,7 @@ Func_252e: ; 252e (0:252e) ret Func_2546: ; 2546 (0:2546) - ld a, [$cd0a] + ld a, [wcd0a] or a jr nz, .asm_255f ld a, e @@ -3391,7 +4238,7 @@ InitializeCursorParameters: ; 2636 (0:2636) Func_264b: ; 264b (0:264b) xor a - ld [$cd99], a + ld [wcd99], a ldh a, [hButtonsPressed2] or a jr z, .asm_2685 @@ -3417,7 +4264,7 @@ Func_264b: ; 264b (0:264b) .asm_2674 push af ld a, $1 - ld [$cd99], a + ld [wcd99], a call EraseCursor pop af ld [wCurMenuItem], a @@ -3429,27 +4276,29 @@ Func_264b: ; 264b (0:264b) ld hl, $cd17 ld a, [hli] or [hl] - jr z, .asm_26a9 + jr z, asm_26a9 ld a, [hld] ld l, [hl] ld h, a ldh a, [hCurrentMenuItem] call CallHL jr nc, HandleMenuInput -.asm_269b +asm_269b: call Func_270b + +Func_269e: ; 269e (0:269e) call Func_26c0 ld a, [wCurMenuItem] ld e, a ldh a, [hCurrentMenuItem] scf ret -.asm_26a9 +asm_26a9: ldh a, [hButtonsPressed] and $3 jr z, HandleMenuInput and $1 - jr nz, .asm_269b + jr nz, asm_269b ld a, [wCurMenuItem] ld e, a ld a, $ff @@ -3472,8 +4321,8 @@ Func_26c0: ; 26c0 (0:26c0) pop af ret -HandleMenuInput: ; 2d61 (0:2d61) - ld a, [$cd99] +HandleMenuInput: ; 26d1 (0:26d1) + ld a, [wcd99] or a jr z, HandleTextBoxInput call Func_3796 @@ -3487,10 +4336,10 @@ HandleTextBoxInput: ; 26da (0:26da) ret nz ld a, [wCursorTileNumber] bit 4, [hl] - jr z, drawCursor + jr z, DrawCursor EraseCursor: ; 26e9 (0:26e9) ld a, [wTileBehindCursor] -drawCursor +DrawCursor: ld c, a ld a, [wYDisplacementBetweenMenuItems] ld l, a @@ -3513,10 +4362,112 @@ drawCursor Func_270b: ; 270b (0:270b) ld a, [wCursorTileNumber] - jr drawCursor -; 0x2710 + jr DrawCursor -INCBIN "baserom.gbc",$2710,$2a1a - $2710 +Func_2710: ; 2710 (0:2710) + ld [wCurMenuItem], a + ld [$ffb1], a + xor a + ld [wCursorBlinkCounter], a + ret + +Func_271a: ; 271a (0:271a) + ld a, [$ff8f] + or a + jr z, .asm_2764 + ld b, a + ld hl, wCurMenuItem + and $c0 + jr z, .asm_272c + ld a, [hl] + xor $1 + jr .asm_2748 +.asm_272c + bit 5, b + jr z, .asm_273b + ld a, [hl] + sub $2 + jr nc, .asm_2748 + and $1 + add $4 + jr .asm_2748 +.asm_273b + bit 4, b + jr z, .asm_275d + ld a, [hl] + add $2 + cp $6 + jr c, .asm_2748 + and $1 +.asm_2748 + push af + ld a, $1 + call Func_3796 + call .asm_2772 + pop af + ld [wCurMenuItem], a + ld [$ffb1], a + xor a + ld [wCursorBlinkCounter], a + jr .asm_2764 +.asm_275d + ld a, [$ff8f] + and $1 + jp nz, Func_269e +.asm_2764 + ld hl, wCursorBlinkCounter + ld a, [hl] + inc [hl] + and $f + ret nz + ld a, $f + bit 4, [hl] + jr z, .asm_2774 +.asm_2772 + ld a, $0 +.asm_2774 + ld e, a + ld a, [wCurMenuItem] + add a + ld c, a + ld b, $0 + ld hl, $278d + add hl, bc + ld b, [hl] + inc hl + ld c, [hl] + ld a, e + call Func_06c3 + ld a, [wCurMenuItem] + ld e, a + or a + ret +; 0x278d + +INCBIN "baserom.gbc",$278d,$29f5 - $278d + +Func_29f5: ; 29f5 (0:29f5) + farcallx $6, $4000 + ret +; 0x29fa + +INCBIN "baserom.gbc",$29fa,$2a00 - $29fa + +Func_2a00: ; 2a00 (0:2a00) + call DoFrame + call HandleTextBoxInput + ld a, [$ff91] + bit 0, a + jr nz, .asm_2a15 + bit 1, a + jr z, Func_2a00 + call EraseCursor + scf + ret +.asm_2a15 + call EraseCursor + or a + ret Func_2a1a: ; 2a1a (0:2a1a) xor a @@ -3537,12 +4488,19 @@ Func_2a1a: ; 2a1a (0:2a1a) ret ; 0x2a30 -INCBIN "baserom.gbc",$2a30,$2a3e - $2a30 +INCBIN "baserom.gbc",$2a30,$2a36 - $2a30 + +Func_2a36: ; 2a36 (0:2a36) + push hl + call DrawWideTextBox + ld a, $13 + jr Func_2a44 DrawNarrowTextBox_PrintText: ; 2a3e (0:2a3e) push hl call DrawNarrowTextBox ld a, $b +Func_2a44: ; 2a44 (0:2a44) ld de, $010e call AdjustCoordinatesForWindow call Func_22a6 @@ -3571,7 +4529,6 @@ DrawNarrowTextBox: ; 2a6f (0:2a6f) call AdjustCoordinatesForWindow call DrawRegularTextBox ret -; 0x2a7c DrawNarrowTextBox_WaitForInput: ; 2a7c (0:2a7c) call DrawNarrowTextBox_PrintText @@ -3586,7 +4543,6 @@ DrawNarrowTextBox_WaitForInput: ; 2a7c (0:2a7c) and $3 jr z, .waitAorBLoop ret -; 0x2a96 NarrowTextBoxPromptCursorData: ; 2a96 (0:2a96) db $a, $11, $1, $1, $2f, $1d, $0, $0 @@ -3633,10 +4589,10 @@ Func_2af0: ; 2af0 (0:2af0) ld de, $0210 .asm_2b0a ld a, d - ld [$cd98], a + ld [wcd98], a ld bc, $0f00 call Func_2a1a - ld a, [$cd9a] + ld a, [wcd9a] ld [wCurMenuItem], a call EnableLCD jr .asm_2b39 @@ -3653,7 +4609,7 @@ Func_2af0: ; 2af0 (0:2af0) call Func_3796 call EraseCursor .asm_2b39 - ld a, [$cd98] + ld a, [wcd98] ld c, a ld hl, wCurMenuItem ld a, [hl] @@ -3671,11 +4627,11 @@ Func_2af0: ; 2af0 (0:2af0) ldh [hCurrentMenuItem], a or a jr nz, .asm_2b5c - ld [$cd9a], a + ld [wcd9a], a ret .asm_2b5c xor a - ld [$cd9a], a + ld [wcd9a], a ld a, $1 ldh [hCurrentMenuItem], a scf @@ -3732,15 +4688,67 @@ LoadOpponentDeck: ; 2b78 (0:2b78) .validDeck ; set opponent as controlled by AI - ld a, wOpponentDuelistType & $ff + ld a, DUELVARS_DUELIST_TYPE call GetTurnDuelistVariable ld a, [wOpponentDeckId] or $80 ld [hl], a ret -; 0x2bbf -INCBIN "baserom.gbc",$2bbf,$2c08 - $2bbf +Func_2bbf: ; 2bbf (0:2bbf) + ld a, $1 + jr Func_2bdb + +Func_2bc3: ; 2bc3 (0:2bc3) + ld a, $2 + jr Func_2bdb + +Func_2bc7: ; 2bc7 (0:2bc7) + ld a, $3 + call Func_2bdb + ld [$ff9d], a + ret + +Func_2bcf: ; 2bcf (0:2bcf) + ld a, $4 + call Func_2bdb + ld [$ffa0], a + ret + +Func_2bd7: ; 2bd7 (0:2bd7) + ld a, $5 + jr Func_2bdb +Func_2bdb: ; 2bdb (0:2bdb) + ld c, a + ld a, [$ff80] + push af + ld a, $5 + call BankswitchHome + ld a, [wOpponentDeckId] + ld l, a + ld h, $0 + add hl, hl + ld de, $4000 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + or a + jr nz, .asm_2bfe + ld e, [hl] + inc hl + ld d, [hl] + call CopyDeckData + jr .asm_2c01 +.asm_2bfe + call JumpToFunctionInTable +.asm_2c01 + ld c, a + pop af + call BankswitchHome + ld a, c + ret Func_2c08: ; 2c08 (0:2c08) ld d, [hl] @@ -3780,13 +4788,64 @@ Func_2c29: ; 2c29 (0:2c29) ret ; 0x2c37 -INCBIN "baserom.gbc",$2c37,$2cc8 - $2c37 +INCBIN "baserom.gbc",$2c37,$2c73 - $2c37 + +Func_2c73: ; 2c73 (0:2c73) + xor a + call Func_2c84 + +Func_2c77: ; 2c77 (0:2c77) + ld bc, $2f1d + ld de, $1211 + call Func_2a1a + call Func_2a00 + ret + +Func_2c84: ; 2c84 (0:2c84) + ld [wce4b], a + ld a, [$ff80] + push af + call ReadTextOffset + call Func_2d15 + call Func_2cc8 +.asm_2c93 + ld a, [wce47] + ld c, a + inc c + jr .asm_2cac +.asm_2c9a + ld a, [wce47] + cp $2 + jr nc, .asm_2ca7 + ld a, [$ff90] + and $2 + jr nz, .asm_2caf +.asm_2ca7 + push bc + call DoFrame + pop bc +.asm_2cac + dec c + jr nz, .asm_2c9a +.asm_2caf + call Func_2d43 + jr c, .asm_2cc3 + ld a, [wcd09] + cp $3 + jr c, .asm_2c93 + call Func_2c77 + call Func_2d15 + jr .asm_2c93 +.asm_2cc3 + pop af + call BankswitchHome + ret Func_2cc8: ; 2cc8 (0:2cc8) xor a - ld [$ce48], a - ld [$ce49], a - ld [$ce4a], a + ld [wce48], a + ld [wce49], a + ld [wce4a], a ld a, $f ld [hffaf], a Func_2cd7: ; 2cd7 (0:2cd7) @@ -3795,7 +4854,7 @@ Func_2cd7: ; 2cd7 (0:2cd7) pop bc ld a, [hffaf] ld [hli], a - ld a, [$cd0a] + ld a, [wcd0a] ld [hli], a ldh a, [hBankROM] ld [hli], a @@ -3815,7 +4874,7 @@ Func_2cf3: ; 2cf3 (0:2cf3) ld a, [hli] ld [hffaf], a ld a, [hli] - ld [$cd0a], a + ld [wcd0a], a ld a, [hli] call BankswitchHome ld a, [hli] @@ -3824,7 +4883,7 @@ Func_2cf3: ; 2cf3 (0:2cf3) ret Func_2d06: ; 2d06 (0:2d06) - ld a, [$ce48] + ld a, [wce48] ld e, a add a add a @@ -3834,9 +4893,31 @@ Func_2d06: ; 2d06 (0:2d06) ld hl, $ce2b add hl, de ret -; 0x2d15 -INCBIN "baserom.gbc",$2d15,$2d43 - $2d15 +Func_2d15: ; 2d15 (0:2d15) + push hl + ld de, $000c + ld bc, $1406 + call AdjustCoordinatesForWindow + ld a, [wce4b] + or a + jr nz, .asm_2d2d + call DrawRegularTextBox + call EnableLCD + jr .asm_2d36 +.asm_2d2d + ld hl, $ce4c + ld a, [hli] + ld h, [hl] + ld l, a + call DrawLabeledTextBox +.asm_2d36 + ld de, $010e + call AdjustCoordinatesForWindow + ld a, $13 + call Func_22a6 + pop hl + ret Func_2d43: ; 2d43 (0:2d43) call Func_2cf3 @@ -3871,11 +4952,11 @@ Func_2d43: ; 2d43 (0:2d43) or a ret .asm_2d79 - ld a, [$ce48] + ld a, [wce48] or a jr z, .asm_2d85 dec a - ld [$ce48], a + ld [wce48], a jr Func_2d43 .asm_2d85 call Func_230f @@ -3886,7 +4967,7 @@ Func_2d43: ; 2d43 (0:2d43) ld a, $f ld [hffaf], a xor a - ld [$cd0a], a + ld [wcd0a], a ld de, $ce3f ld hl, $ce49 call Func_2de0 @@ -3911,7 +4992,7 @@ Func_2d43: ; 2d43 (0:2d43) .asm_2dc8 call Func_2ceb call Func_2e2c - ld a, [$caa0] + ld a, [wcaa0] cp $6 jr z, .asm_2dda ld a, $7 @@ -3965,7 +5046,7 @@ ReadTextOffset: ; 2ded (0:2ded) ret Func_2e12: ; 2e12 (0:2e12) - ld a, [$cd0a] + ld a, [wcd0a] or a jp z, Func_245d ld de, $caa0 @@ -4014,7 +5095,7 @@ Func_2e41: ; 2e41 (0:2e41) .asm_2e59 ldh a, [hButtonsHeld] ld b, a - ld a, [$ce47] + ld a, [wce47] inc a cp $3 jr nc, .asm_2e6d @@ -4071,12 +5152,35 @@ PrintTextBoxBorderLabel: ; 2e89 (0:2e89) jp PrintPlayerName ; 0x2ea9 -INCBIN "baserom.gbc",$2ea9,$2f10 - $2ea9 +INCBIN "baserom.gbc",$2ea9,$2ebb - $2ea9 + +Func_2ebb: ; 2ebb (0:2ebb) + ld a, l + ld [wce3f], a + ld a, h + ld [wce40], a + ret + +Func_2ec4: ; 2ec4 (0:2ec4) + ld a, l + ld [wce43], a + ld a, h + ld [wce44], a + ret +; 0x2ecd + +INCBIN "baserom.gbc",$2ecd,$2f0a - $2ecd + +Func_2f0a: ; 2f0a (0:2f0a) + push hl + ld hl, wCardBuffer2 + jr Func_2f14 ; load data of card with id at e to wCardBuffer1 LoadCardDataToRAM: ; 2f10 (0:2f10) push hl ld hl, wCardBuffer1 +Func_2f14: ; 2f14 (0:2f14) push de push bc push hl @@ -4100,9 +5204,23 @@ LoadCardDataToRAM: ; 2f10 (0:2f10) pop de pop hl ret -; 0x2f32 -INCBIN "baserom.gbc",$2f32,$2f7c - $2f32 +Func_2f32: ; 2f32 (0:2f32) + push hl + call GetCardPointer + jr c, .asm_2f43 + ld a, $c + call BankpushHome2 + ld l, [hl] + call BankpopHome + ld a, l + or a +.asm_2f43 + pop hl + ret +; 0x2f45 + +INCBIN "baserom.gbc",$2f45,$2f7c - $2f45 ; return at hl the pointer to the data of the card with id at e ; return carry if e was out of bounds, so no pointer was returned @@ -4133,7 +5251,6 @@ GetCardPointer: ; 2f7c (0:2f7c) pop bc pop de ret -; 0x2fa0 LoadCardGfx: ; 2fa0 (0:2fa0) ldh a, [hBankROM] @@ -4163,7 +5280,6 @@ LoadCardGfx: ; 2fa0 (0:2fa0) pop af call BankswitchHome ret -; 0x2fcb Func_2fcb: ; 2fcb (0:2fcb) ld a, $1d @@ -4172,7 +5288,6 @@ Func_2fcb: ; 2fcb (0:2fcb) call CopyGfxData call BankpopHome ret -; 0x2fd9 ; Checks if the command ID at a is one of the commands of the move or card effect currently in use, ; and executes its associated function if so. @@ -4207,7 +5322,6 @@ TryExecuteEffectCommandFunction: ; 2fd9 (0:2fd9) push bc pop af ret -; 0x2ffe ; input: ; a = command ID to check @@ -4257,7 +5371,6 @@ CheckMatchingCommand: ; 2ffe (0:2ffe) call BankswitchHome scf ret -; 0x302c ; loads the deck id in a from DeckPointers ; sets carry flag if an invalid deck id is used @@ -4290,7 +5403,6 @@ LoadDeck: ; 302c (0:302c) pop hl scf ret -; 0x3055 Func_3055: ; 3055 (0:3055) push hl @@ -4369,7 +5481,7 @@ Func_30a6: ; 30a6 (0:30a6) ld a, $6 call BankswitchHome ld a, $1 - ld [$ce60], a + ld [wce60], a call $40d5 pop bc ld a, b @@ -4378,9 +5490,9 @@ Func_30a6: ; 30a6 (0:30a6) Func_30bc: ; 30bc (0:30bc) ld a, h - ld [$ce50], a + ld [wce50], a ld a, l - ld [$ce51], a + ld [wce51], a ldh a, [hBankROM] push af ld a, $2 @@ -4425,7 +5537,7 @@ Func_30f9: ; 30f9 (0:30f9) ret Func_310a: ; 310a (0:310a) - ld [$ce59], a + ld [wce59], a ldh a, [hBankROM] push af ld a, $2 @@ -4449,37 +5561,37 @@ Func_312d: ; 312d (0:312d) ; serial transfer-related push hl ld hl, $ce64 ld a, $88 - ld [hli], a ; [$ce64] ← $88 + ld [hli], a ; [wce64] ← $88 ld a, $33 - ld [hli], a ; [$ce65] ← $33 - ld [hl], d ; [$ce66] ← d + ld [hli], a ; [wce65] ← $33 + ld [hl], d ; [wce66] ← d inc hl - ld [hl], e ; [$ce67] ← e + ld [hl], e ; [wce67] ← e inc hl - ld [hl], c ; [$ce68] ← c + ld [hl], c ; [wce68] ← c inc hl - ld [hl], b ; [$ce69] ← b + ld [hl], b ; [wce69] ← b inc hl pop de - ld [hl], e ; [$ce6a] ← l + ld [hl], e ; [wce6a] ← l inc hl - ld [hl], d ; [$ce6b] ← h + ld [hl], d ; [wce6b] ← h inc hl ld de, $ff45 - ld [hl], e ; [$ce6c] ← $45 + ld [hl], e ; [wce6c] ← $45 inc hl - ld [hl], d ; [$ce6d] ← $ff + ld [hl], d ; [wce6d] ← $ff ld hl, $ce70 - ld [hl], $64 ; [$ce70] ← $64 + ld [hl], $64 ; [wce70] ← $64 inc hl - ld [hl], $ce ; [$ce71] ← $ce + ld [hl], $ce ; [wce71] ← $ce call Func_0e8e ld a, $1 - ld [$ce63], a ; [$ce63] ← 1 + ld [wce63], a ; [wce63] ← 1 call Func_31fc .asm_315d call DoFrame - ld a, [$ce63] + ld a, [wce63] or a jr nz, .asm_315d call ResetSerial @@ -4489,10 +5601,10 @@ Func_312d: ; 312d (0:312d) ; serial transfer-related ld a, b or c jr nz, .asm_316c - ld a, [$ce6e] + ld a, [wce6e] cp $81 jr nz, .asm_3182 - ld a, [$ce6f] + ld a, [wce6f] ld l, a and $f1 ld a, l @@ -4501,7 +5613,7 @@ Func_312d: ; 312d (0:312d) ; serial transfer-related ret .asm_3182 ld a, $ff - ld [$ce6f], a + ld [wce6f], a scf ret @@ -4565,27 +5677,27 @@ Func_31ca: ; 31ca (0:31ca) ret Func_31dd: ; 31dd (0:31dd) - ld a, [$ce6c] + ld a, [wce6c] Func_31e0: ; 31e0 (0:31e0) call Func_3212 jr Func_31ab Func_31e5: ; 31e5 (0:31e5) - ld a, [$ce6d] + ld a, [wce6d] jr Func_31e0 Func_31ea: ; 31ea (0:31ea) ld a, [rSB] - ld [$ce6e], a + ld [wce6e], a Func_31ef: ; 31ef (0:31ef) xor a jr Func_31e0 Func_31f2: ; 31f2 (0:31f2) ld a, [rSB] - ld [$ce6f], a + ld [wce6f], a xor a - ld [$ce63], a + ld [wce63], a ret Func_31fc: ; 31fc (0:31fc) @@ -4614,9 +5726,551 @@ Func_3212: ; 3212 (0:3212) ld a, $81 ld [rSC], a ret -; 0x321d -INCBIN "baserom.gbc",$321d,$377f - $321d +Func_321d: ; 321d (0:321d) + ld a, $eb + call GetTurnDuelistVariable + bit 0, [hl] + call nz, Func_323b + ld a, $e7 + call GetTurnDuelistVariable + or a + call nz, Func_323a + ld a, $e8 + call GetTurnDuelistVariable + or a + call nz, Func_3243 + ret + +Func_323a: ; 323a (0:323a) + ret + +Func_323b: ; 323b (0:323b) + ld a, e + or d + ret z + sla e + rl d + ret + +Func_3243: ; 3243 (0:3243) + ret + +Func_3244: ; 3244 (0:3244) + call Func_3269 + ld a, $e8 + call GetOpposingTurnDuelistVariable + or a + ret z + cp $3 + jr z, .asm_325b + cp $7 + jr z, .asm_3262 + cp $12 + jr z, .asm_3262 + ret +.asm_325b + ld hl, $ffec + add hl, de + ld e, l + ld d, h + ret +.asm_3262 + ld hl, $fff6 + add hl, de + ld e, l + ld d, h + ret + +Func_3269: ; 3269 (0:3269) + ld a, [wccc7] + or a + jr nz, .asm_32ad + ld a, $e7 + call GetTurnDuelistVariable + or a + jr z, .asm_3297 + cp $f + jr z, .asm_32ad + cp $10 + jr z, .asm_32ad + cp $11 + jr z, .asm_32ad + cp $17 + jr z, .asm_32ad + cp $1e + jr z, .asm_32b1 + cp $13 + jr z, .asm_32b8 + cp $e + jr z, .asm_32bf + cp $15 + jr z, .asm_32ca +.asm_3297 + call Func_34ef + ret c + ld a, [wccb1] + cp $4 + ret z + ld a, [wccc4] + cp $9b + jr z, .asm_32d8 + cp $8b + jr z, .asm_32e9 + ret +.asm_32ad + ld de, $0000 + ret +.asm_32b1 + ld hl, $fff6 + add hl, de + ld e, l + ld d, h + ret +.asm_32b8 + ld hl, $ffec + add hl, de + ld e, l + ld d, h + ret +.asm_32bf + ld bc, $0028 + call Func_3090 + ret nc + ld de, $0000 + ret +.asm_32ca + sla d + rr e + bit 0, e + ret z + ld hl, $fffb + add hl, de + ld e, l + ld d, h + ret +.asm_32d8 + ld a, [wccb1] + cp $4 + ret z + ld bc, $001e + call Func_3090 + ret c + ld de, $0000 + ret +.asm_32e9 + sla d + rr e + bit 0, e + ret z + ld hl, $fffb + add hl, de + ld e, l + ld d, h + ret +; 0x32f7 + +INCBIN "baserom.gbc",$32f7,$33c1 - $32f7 + +Func_33c1: ; 33c1 (0:33c1) + ld a, $e8 + call GetTurnDuelistVariable + or a + ret z + ld hl, $0100 + cp $5 + jr z, .asm_33df + ld hl, $0101 + cp $6 + jr z, .asm_33df + ld hl, $0102 + cp $b + jr z, .asm_33df + or a + ret +.asm_33df + scf + ret + +Func_33e1: ; 33e1 (0:33e1) + ld a, $e8 + call GetTurnDuelistVariable + or a + jr nz, .asm_33ea + ret +.asm_33ea + cp $4 + jr z, .asm_33f0 +.asm_33ee + or a + ret +.asm_33f0 + ld a, $f2 + call GetTurnDuelistVariable + ld a, [wccc6] + cp [hl] + jr nz, .asm_33ee + ld hl, $0103 + scf + ret + +Func_3400: ; 3400 (0:3400) + call Func_3414 + ret nc + call Func_307d + ld [wcc0a], a + ccf + ret nc + ld hl, $00fd + call DrawWideTextBox_WaitForInput + scf + ret + +Func_3414: ; 3414 (0:3414) + ld a, $e8 + call GetTurnDuelistVariable + or a + ret z + ld de, $00de + cp $2 + jr z, .asm_342b + ld de, $00df + cp $1 + jr z, .asm_342b + or a + ret +.asm_342b + ld a, [wcc0a] + or a + ret nz + scf + ret + +Func_3432: ; 3432 (0:3432) + xor a + ld [wccc7], a + ld a, [wccb1] + cp $4 + ret z + ld a, $e7 + call GetTurnDuelistVariable + ld e, $3 + ld hl, $0107 + cp $d + jr z, .asm_346a + ld e, $2 + ld hl, $0108 + cp $14 + jr z, .asm_346a + ld e, $1 + ld hl, $0109 + cp $c + jr z, .asm_346a + call Func_34ef + ccf + ret nc + ld a, [wccc4] + cp $a0 + jr z, .asm_3470 + or a + ret +.asm_346a + ld a, e + ld [wccc7], a + scf + ret +.asm_3470 + ld a, [wcce6] + or a + ret nz + ld a, [wccc3] + ld e, a + ld d, $0 + call Func_2f0a + ld a, [wCardBuffer2 + $9] + or a + ret z + ld e, $5 + ld hl, $010b + jr .asm_346a + +Func_348a: ; 348a (0:348a) + ld a, [wccc4] + cp $96 + jr z, .asm_3493 +.asm_3491 + or a + ret +.asm_3493 + ld a, [wccb1] + cp $4 + jr z, .asm_3491 + ld a, [wcceb] + call Func_34f0 + jr c, .asm_3491 + xor a + ld [wcac2], a + ld de, $00f6 + call Func_307d + ret nc + ld a, $4 + ld [wccc7], a + ld hl, $010c + scf + ret +; 0x34b7 + +INCBIN "baserom.gbc",$34b7,$34e2 - $34b7 + +Func_34e2: ; 34e2 (0:34e2) + ld a, $27 + call Func_3509 + ccf + ret nc + ld a, $5c + call Func_3525 + ret + +Func_34ef: ; 34ef (0:34ef) + xor a + +Func_34f0: ; 34f0 (0:34f0) + or a + jr nz, .asm_3500 + ld a, $f0 + call GetTurnDuelistVariable + and $f + ld hl, $00cb + scf + jr nz, .asm_3508 +.asm_3500 + ld a, $27 + call Func_3509 + ld hl, $00d4 +.asm_3508 + ret + +Func_3509: ; 3509 (0:3509) + push bc + ld [wce7c], a + call Func_3525 + ld c, a + call GetOpposingTurnDuelistVariable_SwapTurn + ld a, [wce7c] + call Func_3525 + call GetOpposingTurnDuelistVariable_SwapTurn + add c + or a + scf + jr nz, .asm_3523 + or a +.asm_3523 + pop bc + ret + +Func_3525: ; 3525 (0:3525) + push hl + push de + push bc + ld [wce7c], a + ld c, $0 + ld a, $bb + call GetTurnDuelistVariable + cp $ff + jr z, .asm_3549 + call Func_1324 + ld a, [wce7c] + cp e + jr nz, .asm_3549 + ld a, $f0 + call GetTurnDuelistVariable + and $f + jr nz, .asm_3549 + inc c +.asm_3549 + ld a, $bc + call GetTurnDuelistVariable +.asm_354e + ld a, [hli] + cp $ff + jr z, .asm_3560 + call Func_1324 + ld a, [wce7c] + cp e + jr nz, .asm_355d + inc c +.asm_355d + inc b + jr .asm_354e +.asm_3560 + ld a, c + or a + scf + jr nz, .asm_3566 + or a +.asm_3566 + pop bc + pop de + pop hl + ret +; 0x356a + +INCBIN "baserom.gbc",$356a,$35e6 - $356a + +Func_35e6: ; 35e6 (0:35e6) + ld a, $e7 + call GetTurnDuelistVariable + ld [hl], $0 + or a + ret z + cp $19 + ret nz + ld a, $eb + call GetTurnDuelistVariable + set 0, [hl] + ret + +Func_35fa: ; 35fa (0:35fa) + ld a, $eb + call GetTurnDuelistVariable + res 1, [hl] + push hl + ld a, $e8 + call GetTurnDuelistVariable + xor a + ld [hl], a + ld a, $e7 + call GetTurnDuelistVariable + pop hl + cp $19 + ret z + res 0, [hl] + ret +; 0x3615 + +INCBIN "baserom.gbc",$3615,$367b - $3615 + +Func_367b: ; 367b (0:367b) + ld a, [wccc4] + cp $7f + jr z, .asm_3683 + ret +.asm_3683 + ld a, [wccb1] + and $80 + ret nz + ld a, [wccbf] + or a + ret z + call GetOpposingTurnDuelistVariable_SwapTurn + call Func_34ef + call GetOpposingTurnDuelistVariable_SwapTurn + ret c + ld hl, $000a + call Func_36a2 + call nc, WaitForWideTextBoxInput + ret + +Func_36a2: ; 36a2 (0:36a2) + push hl + call Func_2ec4 + ld a, [wccc3] + ld e, a + ld d, $0 + call Func_2f0a + ld hl, $cc68 + ld a, [hli] + ld h, [hl] + ld l, a + call Func_2ebb + ld a, $c8 + call GetTurnDuelistVariable + pop de + push af + push hl + call Func_1a96 + ld hl, $0105 + call DrawWideTextBox_PrintText + pop hl + pop af + or a + ret z + call WaitForWideTextBoxInput + xor a + call Func_1aac + call $503a + scf + ret +; 0x36d9 + +INCBIN "baserom.gbc",$36d9,$36f6 - $36d9 + +Func_36f6: ; 36f6 (0:36f6) + xor a + +Func_36f7: ; 36f7 (0:36f7) + push hl + push de + ld e, a + add $d4 + call GetTurnDuelistVariable + bit 7, a + jr nz, .asm_3718 +.asm_3703 + ld a, e + add $bb + call GetTurnDuelistVariable + call Func_1324 + call Func_2f32 + cp $10 + jr nz, .asm_3715 + ld a, $6 +.asm_3715 + pop de + pop hl + ret +.asm_3718 + ld a, e + call Func_34f0 + jr c, .asm_3703 + ld a, e + add $d4 + call GetTurnDuelistVariable + pop de + pop hl + and $f + ret +; 0x3729 + +INCBIN "baserom.gbc",$3729,$3730 - $3729 + +Func_3730: ; 3730 (0:3730) + ld a, $e9 + call GetTurnDuelistVariable + or a + ret nz + ld a, $bb + call GetTurnDuelistVariable + call Func_138c + ld a, [wCardBuffer2 + $33] + ret +; 0x3743 + +INCBIN "baserom.gbc",$3743,$374a - $3743 + +Func_374a: ; 374a (0:374a) + ld a, $ea + call GetTurnDuelistVariable + or a + ret nz + ld a, $bb + call GetTurnDuelistVariable + call Func_138c + ld a, [wCardBuffer2 + $34] + ret +; 0x375d + +INCBIN "baserom.gbc",$375d,$377f - $375d SetupSound_T: ; 377f (0:377f) farcall SetupSound_Ext @@ -4654,7 +6308,7 @@ Func_37a0: ; 37a0 (0:37a0) INCBIN "baserom.gbc",$37a5,$380e - $37a5 Func_380e: ; 380e (0:380e) - ld a, [$d0c1] + ld a, [wd0c1] bit 7, a ret nz ldh a, [hBankROM] @@ -4691,7 +6345,7 @@ Func_383d: ; 383d (0:383d) ret Func_3855: ; 3855 (0:3855) - ld a, [$d0b5] + ld a, [wd0b5] cp $7 jr c, .asm_385e ld a, $6 @@ -4720,14 +6374,14 @@ Func_3876: ; 3876 (0:3876) ld a, MUSIC_CARDPOP call PlaySong ld a, $3 - ld [$d0c2], a - ld a, [$d10e] + ld [wd0c2], a + ld a, [wd10e] or $10 - ld [$d10e], a + ld [wd10e], a farcall Func_b177 - ld a, [$d10e] + ld a, [wd10e] and $ef - ld [$d10e], a + ld [wd10e], a call Func_37a0 pop af call BankswitchHome @@ -4736,11 +6390,11 @@ Func_3876: ; 3876 (0:3876) Func_38a3: ; 38a3 (0:38a3) ld a, $2 - ld [$d0c2], a + ld [wd0c2], a xor a - ld [$d112], a + ld [wd112], a ld a, $ff - ld [$d0c3], a + ld [wd0c3], a ld a, $2 ld [wDuelTheme], a ld a, MUSIC_CARDPOP @@ -4751,9 +6405,9 @@ Func_38a3: ; 38a3 (0:38a3) Func_38c0: ; 38c0 (0:38c0) ld a, $1 - ld [$d0c2], a + ld [wd0c2], a xor a - ld [$d112], a + ld [wd112], a call EnableExtRAM xor a ld [$ba44], a @@ -4765,7 +6419,7 @@ Func_38c0: ; 38c0 (0:38c0) Func_38db: ; 38db (0:38db) ld a, $6 - ld [$d111], a + ld [wd111], a call Func_39fc call EnableExtRAM xor a @@ -4774,14 +6428,14 @@ Func_38db: ; 38db (0:38db) asm_38ed farcall Func_131d3 ld a, $9 - ld [$d111], a + ld [wd111], a call Func_39fc scf ret Func_38fb: ; 38fb (0:38fb) xor a - ld [$d112], a + ld [wd112], a bank1call Func_406f call EnableExtRAM ld a, [$ba44] @@ -4827,7 +6481,7 @@ Func_3946: ; 3946 (0:3946) Func_395a: ; 395a (0:395a) ldh a, [hBankROM] push af - ld a, [$d4c6] + ld a, [wd4c6] call BankswitchHome call CopyGfxData pop af @@ -4881,12 +6535,12 @@ Func_39c3: ; 39c3 (0:39c3) push bc push de xor a - ld [$d3aa], a + ld [wd3aa], a ld b, a ld c, $8 ld de, $000c ld hl, $d34a - ld a, [$d3ab] + ld a, [wd3ab] .asm_39d6 cp [hl] jr z, .asm_39e1 @@ -4898,7 +6552,7 @@ Func_39c3: ; 39c3 (0:39c3) jr z, .asm_39e6 .asm_39e1 ld a, b - ld [$d3aa], a + ld [wd3aa], a or a .asm_39e6 pop de @@ -4927,7 +6581,7 @@ Func_39fc: ; 39fc (0:39fc) ld a, c cp $1f jr nc, .asm_3a1c - ld [$d112], a + ld [wd112], a call PlaySong .asm_3a1c pop bc @@ -4935,10 +6589,10 @@ Func_39fc: ; 39fc (0:39fc) ret Func_3a1f: ; 3a1f (0:3a1f) - ld a, [$d3b8] + ld a, [wd3b8] or a jr z, .asm_3a37 - ld a, [$d32e] + ld a, [wd32e] cp $2 jr z, .asm_3a37 cp $b @@ -4948,7 +6602,7 @@ Func_3a1f: ; 3a1f (0:3a1f) ld a, MUSIC_RONALD ret .asm_3a37 - ld a, [$d111] + ld a, [wd111] ret Func_3a3b: ; 3a3b (0:3a3b) @@ -4973,7 +6627,7 @@ Func_3a5e: ; 3a5e (0:3a5e) call Func_c653 ld a, $4 call BankswitchHome - ld a, [$d334] + ld a, [wd334] ld d, a .asm_3a79 ld a, [hli] @@ -4990,17 +6644,17 @@ Func_3a5e: ; 3a5e (0:3a5e) cp c jr nz, .asm_3aab ld a, [hli] - ld [$d0c6], a + ld [wd0c6], a ld a, [hli] - ld [$d0c7], a + ld [wd0c7], a ld a, [hli] - ld [$d0ca], a + ld [wd0ca], a ld a, [hli] - ld [$d0cb], a + ld [wd0cb], a ld a, [hli] - ld [$d0c8], a + ld [wd0c8], a ld a, [hli] - ld [$d0c9], a + ld [wd0c9], a pop hl pop bc pop af @@ -5084,7 +6738,89 @@ Func_3aed: ; 3aed (0:3aed) jp [hl] ; 0x3b11 -INCBIN "baserom.gbc",$3b11,$3bd2 - $3b11 +INCBIN "baserom.gbc",$3b11,$3b21 - $3b11 + +Func_3b21: ; 3b21 (0:3b21) + ld a, [$ff80] + push af + ld a, $7 + call BankswitchHome + call $48bc + pop af + call BankswitchHome + ret + +Func_3b31: ; 3b31 (0:3b31) + ld a, [$ff80] + push af + ld a, $7 + call BankswitchHome + call $4b18 + jr c, .asm_3b45 + xor a + ld [wDoFrameFunction], a + ld [wcad4], a +.asm_3b45 + call Func_099c + ld a, $1 + ld [wVBlankOAMCopyToggle], a + pop af + call BankswitchHome + ret + +Func_3b52: ; 3b52 (0:3b52) + push hl + push bc + ld a, [wd42a] + ld hl, $d4c0 + and [hl] + ld hl, $d423 + ld c, $7 +.asm_3b60 + and [hl] + inc hl + dec c + jr nz, .asm_3b60 + cp $ff + pop bc + pop hl + ret + +Func_3b6a: ; 3b6a (0:3b6a) + ld [wd422], a + ld a, [$ff80] + push af + ld [wd4be], a + push hl + push bc + push de + ld a, $7 + call BankswitchHome + ld a, [wd422] + cp $61 + jr nc, .asm_3b90 + ld hl, $d4ad + ld a, [wd4ac] + cp [hl] + jr nz, .asm_3b90 + call Func_3b52 + jr nc, .asm_3b95 +.asm_3b90 + call $4a31 + jr .asm_3b9a +.asm_3b95 + call $48ef + jr .asm_3b9a +.asm_3b9a + pop de + pop bc + pop hl + pop af + call BankswitchHome + ret +; 0x3ba2 + +INCBIN "baserom.gbc",$3ba2,$3bd2 - $3ba2 ; writes from hl the pointer to the function to be called by DoFrame SetDoFrameFunction: ; 3bd2 (0:3bd2) @@ -5108,11 +6844,11 @@ Func_3bf5: ; 3bf5 (0:3bf5) ldh a, [hBankROM] push af push hl - ld a, [$d4c6] + ld a, [wd4c6] call BankswitchHome - ld a, [$d4c4] + ld a, [wd4c4] ld l, a - ld a, [$d4c5] + ld a, [wd4c5] ld h, a call CopyData_SaveRegisters pop hl @@ -5177,11 +6913,20 @@ Func_3c5a: ; 3c5a (0:3c5a) ret ; 0x3c83 -INCBIN "baserom.gbc",$3c83,$3ca0 - $3c83 +INCBIN "baserom.gbc",$3c83,$3c96 - $3c83 + +Func_3c96: ; 3c96 (0:3c96) + call DoFrameIfLCDEnabled + call Func_378a + or a + jr nz, Func_3c96 + ret Func_3ca0: ; 3ca0 (0:3ca0) xor a - ld [$d5d7], a + ld [wd5d7], a + +Func_3ca4: ; 3ca4 (0:3ca4) ldh a, [hBankROM] push af ld a, BANK(Func_1296e) @@ -5209,22 +6954,22 @@ Func_3d72: ; 3d72 (0:3d72) push af push hl push hl - ld a, [$d4ca] + ld a, [wd4ca] cp $ff jr nz, .asm_3d84 ld de, Unknown_80e5a xor a jr .asm_3da1 .asm_3d84 - ld a, [$d4c4] + ld a, [wd4c4] ld l, a - ld a, [$d4c5] + ld a, [wd4c5] ld h, a - ld a, [$d4c6] + ld a, [wd4c6] call BankswitchHome ld a, [hli] push af - ld a, [$d4ca] + ld a, [wd4ca] rlca ld e, [hl] add e @@ -5259,7 +7004,7 @@ Func_3db7: ; 3db7 (0:3db7) ret Func_3dbf: ; 3dbf (0:3dbf) - ld a, [$d4cf] + ld a, [wd4cf] cp $10 jr c, .asm_3dc9 rst $38 @@ -5297,14 +7042,14 @@ Func_3df3: ; 3df3 (0:3df3) pop af call BankswitchHome pop af - ld a, [$d61b] + ld a, [wd61b] ret ; 0x3e10 INCBIN "baserom.gbc",$3e10,$3e17 - $3e10 Func_3e17: ; 3e17 (0:3e17) - ld [$d131], a + ld [wd131], a ldh a, [hBankROM] push af ld a, $4 @@ -5315,7 +7060,7 @@ Func_3e17: ; 3e17 (0:3e17) ret Func_3e2a: ; 3e2a (0:3e2a) - ld [$d61e], a + ld [wd61e], a ld a, $63 jr Func_3e17 ; 0x3e31 |