summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rwxr-xr-xengine/bank1.asm190
-rwxr-xr-xengine/bank3.asm2
-rwxr-xr-xengine/bank4.asm61
-rwxr-xr-xengine/home.asm109
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)