diff options
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/bank1.asm | 190 | ||||
-rwxr-xr-x | engine/bank3.asm | 2 | ||||
-rwxr-xr-x | engine/bank4.asm | 61 | ||||
-rwxr-xr-x | engine/home.asm | 109 |
4 files changed, 353 insertions, 9 deletions
diff --git a/engine/bank1.asm b/engine/bank1.asm index a9dd0a5..c29a4c4 100755 --- a/engine/bank1.asm +++ b/engine/bank1.asm @@ -44,8 +44,194 @@ INCBIN "baserom.gbc",$405a,$406f - $405a Func_406f: ; 406f (1:406f) INCBIN "baserom.gbc",$406f,$409f - $406f -Func_409f: ; 409f (1:409f) -INCBIN "baserom.gbc",$409f,$5aeb - $409f +; this function begins the duel after the opponent's +; graphics, name and deck have been introduced +Duel_Start: ; 409f (1:409f) + ld a, $c2 + ld [$ff97], a + ld a, $0 + ld [$c2f1], a + ld a, [$cc19] + ld [wOpponentDeck], a + call $6793 + call Func_1c72 + call Duel_LoadDecks + call Func_1c72 + jr .asm_40ca + + ld a, MUSIC_DUELTHEME1 + ld [wDuelTheme], a + ld hl, $cc16 + xor a + ld [hli], a + ld [hl], a + ld [wIsPracticeDuel], a + +.asm_40ca + ld hl, [sp+$0] + ld a, l + ld [$cbe5], a + ld a, h + ld [$cbe6], a + xor a + ld [$cbc6], a + call $420b + ld a, [$cc18] + ld [$cc08], a + call $70aa + ld a, [wDuelTheme] + call PlaySong + call $4b60 + ret c + +; the loop returns here after every turn switch +.mainDuelLoop + xor a + ld [$cbc6], a + call $35e6 + call $54c8 + call $4225 + call $0f58 + ld a, [$cc07] + or a + jr nz, .asm_4136 + call $35fa + call $6baf + call $3b31 + call $0f58 + ld a, [$cc07] + or a + jr nz, .asm_4136 + ld hl, $cc06 + inc [hl] + ld a, [$cc09] + cp $80 + jr z, .asm_4126 +.asm_4121 + call Func_1c72 + jr .mainDuelLoop + +.asm_4126 + ld a, [wIsPracticeDuel] + or a + jr z, .asm_4121 + ld a, [hl] + cp $f + jr c, .asm_4121 + xor a + ld [$d0c3], a + ret + +.asm_4136 + call $5990 + call Func_04a2 + ld a, $3 + call $2167 + ld hl, $0076 + call Func_2aab + call Func_04a2 + ld a, [$ff97] + push af + ld a, $c2 + ld [$ff97], a + call $4a97 + call $4ad6 + pop af + ld [$ff97], a + call $3b21 + ld a, [$cc07] + cp $1 + jr z, .asm_4171 + cp $2 + jr z, .asm_4184 + ld a, $5f + ld c, $1a + ld hl, $0077 + jr .asm_4196 + +.asm_4171 + ld a, [$ff97] + cp $c2 + jr nz, .asm_418a +.asm_4177 + xor a + ld [$d0c3], a + ld a, $5d + ld c, $18 + ld hl, $0078 + jr .asm_4196 + +.asm_4184 + ld a, [$ff97] + cp $c2 + jr nz, .asm_4177 + +.asm_418a + ld a, $1 + ld [$d0c3], a + ld a, $5e + ld c, $19 + ld hl, $0079 + +.asm_4196 + call $3b6a + ld a, c + call PlaySong + ld a, $c3 + ld [$ff97], a + call Func_2a59 + call EnableLCD +.asm_41a7 + call Func_053f + call Func_378a + or a + jr nz, .asm_41a7 + ld a, [$cc07] + cp $3 + jr z, .asm_41c8 + call Func_39fc + call $2aae + call $3b31 + call ResetSerial + ld a, $c2 + ld [$ff97], a + ret + +.asm_41c8 + call $2aae + call $3b31 + ld a, [wDuelTheme] + call PlaySong + ld hl, $007a + call Func_2aab + ld a, $1 + ld [$cc08], a + call $70aa + ld a, [$cc09] + cp $1 + jr z, .asm_41f3 + ld a, $c2 + ld [$ff97], a + call $4b60 + jp $40ee + +.asm_41f3 + call $0f58 + ld h, $c2 + ld a, [wSerialOp] + cp $29 + jr z, .asm_4201 + ld h, $c3 + +.asm_4201 + ld a, h + ld [$ff97], a + call $4b60 + jp nc, $40ee + ret +; 0x420b + +INCBIN "baserom.gbc",$420b,$5aeb - $420b Func_5aeb: ; 5aeb (1:5aeb) INCBIN "baserom.gbc",$5aeb,$6785 - $5aeb diff --git a/engine/bank3.asm b/engine/bank3.asm index 9170b96..38a56cd 100755 --- a/engine/bank3.asm +++ b/engine/bank3.asm @@ -74,7 +74,7 @@ LoadMap: ; c000 (3:4000) or a jr z, .asm_c0ca call Func_c280 - farcall Func_103d3 + farcall Duel_Init .asm_c0ca call Func_c280 ret diff --git a/engine/bank4.asm b/engine/bank4.asm index 8b4bd0d..f144aa6 100755 --- a/engine/bank4.asm +++ b/engine/bank4.asm @@ -132,8 +132,65 @@ INCBIN "baserom.gbc",$103a5,$103d2 - $103a5 Func_103d2: ; 103d2 (4:43d2) INCBIN "baserom.gbc",$103d2,$103d3 - $103d2 -Func_103d3: ; 103d3 (4:43d3) -INCBIN "baserom.gbc",$103d3,$10548 - $103d3 +Duel_Init: ; 103d3 (4:43d3) + ld a, [$d291] + push af + call DisableLCD + call $4000 + ld a, $4 + ld [$ccf3], a + ld de, $000c + ld bc, $1406 + call Func_1e7c ; LoadTextBoxBorder + ld a, [$cc19] + add a + add a + ld c, a + ld b, $0 + ld hl, $445b + add hl, bc + ld a, [hli] + ld [$ce3f], a + ld a, [hli] + ld [$ce40], a + push hl + ld a, [$cc16] + ld [$ce41], a + ld a, [$cc17] + ld [$ce42], a + ld hl, $4451 + call $51b3 ; LoadDuelistName + pop hl + ld a, [hli] + ld [$ce3f], a + ld c, a + ld a, [hli] + ld [$ce40], a + or c + jr z, .asm_10425 + ld hl, $4456 + call $51b3 ; LoadDeckName + +.asm_10425 + ld bc, $0703 + ld a, [$cc15] + call Func_3e2a ; LoadDuelistPortrait + ld a, [wMatchStartTheme] + call PlaySong + call $4031 + call Func_3c48 + ld bc, $2f1d + ld de, $1211 + call Func_2a1a + call $2a00 ; wait for the user to press a or b + call $3c96 + call Func_10ab4 ; fade out + pop af + ld [$d291], a + ret +; 0x10451 + +INCBIN "baserom.gbc",$10451,$10548 - $10451 Func_10548: ; 10548 (4:4548) INCBIN "baserom.gbc",$10548,$10756 - $10548 diff --git a/engine/home.asm b/engine/home.asm index 4ac478b..51a6e1c 100755 --- a/engine/home.asm +++ b/engine/home.asm @@ -1873,7 +1873,39 @@ CopyDeckData: ; 1072 (0:1072) ret ; 0x10aa -INCBIN "baserom.gbc",$10aa,$1c7d - $10aa +INCBIN "baserom.gbc",$10aa,$160b - $10aa + +Func_160b: ; 160b (0:160b) + ld l, a + ld a, [$ff97] + ld h, a + ld a, [hl] + ret + +Func_1611: ; 1611 (0:1611) + ld l, a + ld a, [$ff97] + ld h, $c3 + cp $c2 + jr z, .asm_161c + ld h, $c2 + +.asm_161c + ld a, [hl] + ret +; 0x161e + +INCBIN "baserom.gbc",$161e,$1c72 - $161e + +Func_1c72: ; 1c72 (0:1c72) + push af + push hl + call Func_1611 + ld a, h + ld [$ff97], a + pop hl + pop af + ret Func_1c7d: ; 1c7d (0:1c7d) call EnableExtRAM @@ -3134,7 +3166,57 @@ Func_2b66: ; 2b66 (0:2b66) ret ; 0x2b70 -INCBIN "baserom.gbc",$2b70,$2c08 - $2b70 +INCBIN "baserom.gbc",$2b70,$2b78 - $2b70 + +Duel_LoadDecks: ; 2b78 (0:2b78) + xor a + ld [wIsPracticeDuel], a + ld a, [wOpponentDeck] + cp SAMS_NORMAL_DECK - 2 + jr z, .normalSamDuel + or a ; cp SAMS_PRACTICE_DECK - 2 + jr nz, .notPracticeDuel + +; only practice duels will display help messages, but +; any duel with Sam will force the PRACTICE_PLAYER_DECK +;.practiceSamDuel + inc a + ld [wIsPracticeDuel], a + +.normalSamDuel + xor a + ld [wOpponentDeck], a + call Func_1c72 + ld a, PRACTICE_PLAYER_DECK + call LoadDeck + call Func_1c72 + ld hl, $caca + ld a, $57 + ld [hli], a + ld [hli], a + ld [hl], a + xor a + +.notPracticeDuel + inc a + inc a + call LoadDeck + ld a, [wOpponentDeck] + cp NUMBER_OF_DECKS + jr c, .validDeck + ld a, PRACTICE_PLAYER_DECK - 2 + ld [wOpponentDeck], a + +.validDeck + ld a, $f1 + call Func_160b + ld a, [wOpponentDeck] + or $80 + ld [hl], a + ret +; 0x2bbf + +INCBIN "baserom.gbc",$2bbf,$2c08 - $2bbf Func_2c08: ; 2c08 (0:2c08) ld d, [hl] @@ -3998,7 +4080,7 @@ Func_38c0: ; 38c0 (0:38c0) ld [$ba44], a call DisableExtRAM call Func_3a3b - bank1call Func_409f + bank1call Duel_Start scf ret @@ -4539,7 +4621,26 @@ Func_3df3: ; 3df3 (0:3df3) ret ; 0x3e10 -INCBIN "baserom.gbc",$3e10,$3fe0 - $3e10 +INCBIN "baserom.gbc",$3e10,$3e17 - $3e10 + +Func_3e17: ; 3e17 (0:3e17) + ld [$d131], a + ld a, [hBankROM] + push af + ld a, $4 + call BankswitchHome + call $6fc6 + pop af + call BankswitchHome + ret + +Func_3e2a: ; 3e2a (0:3e2a) + ld [$d61e], a + ld a, $63 + jr Func_3e17 +; 0x3e31 + +INCBIN "baserom.gbc",$3e31,$3fe0 - $3e31 ; jumps to 3f:hl Bankswitch3dTo3f: ; 3fe0 (0:3fe0) |