summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorU-Daniel-PC\Daniel <corrnondacqb@yahoo.com>2014-07-25 00:50:46 -0500
committerU-Daniel-PC\Daniel <corrnondacqb@yahoo.com>2014-07-25 00:50:46 -0500
commitba5c5e4e62c68bef335685d15d967ff3044eb82f (patch)
treec86fe152c9e8d9af8792e59df4ac88c359d25b6b
parent75db414ec3e4fa24e418e3e5bcd7f913388a4890 (diff)
Start duel engine disassembly, add duelist constants
-rwxr-xr-xconstants.asm1
-rwxr-xr-xconstants/card_constants.asm2
-rwxr-xr-xconstants/deck_constants.asm4
-rwxr-xr-xconstants/duelist_constants.asm41
-rwxr-xr-xdata/cards.asm2
-rwxr-xr-xdata/decks.asm4
-rwxr-xr-xengine/bank1.asm190
-rwxr-xr-xengine/bank3.asm2
-rwxr-xr-xengine/bank4.asm61
-rwxr-xr-xengine/home.asm109
-rwxr-xr-xwram.asm17
11 files changed, 418 insertions, 15 deletions
diff --git a/constants.asm b/constants.asm
index bb678d8..5985ff1 100755
--- a/constants.asm
+++ b/constants.asm
@@ -1,6 +1,7 @@
INCLUDE "constants/map_constants.asm"
INCLUDE "constants/music_constants.asm"
INCLUDE "constants/text_constants.asm"
+INCLUDE "constants/duelist_constants.asm"
INCLUDE "constants/card_constants.asm"
INCLUDE "constants/deck_constants.asm"
INCLUDE "constants/type_constants.asm"
diff --git a/constants/card_constants.asm b/constants/card_constants.asm
index f56b45c..bef5f3f 100755
--- a/constants/card_constants.asm
+++ b/constants/card_constants.asm
@@ -197,7 +197,7 @@ IMPOSTER_PROFESSOR_OAK EQU $C4
BILL EQU $C5
MR_FUJI EQU $C6
LASS EQU $C7
-IMAKUNI EQU $C8
+IMAKUNI_CARD EQU $C8
POKEMON_TRADER EQU $C9
POKEMON_BREEDER EQU $CA
CLEFAIRY_DOLL EQU $CB
diff --git a/constants/deck_constants.asm b/constants/deck_constants.asm
index 5eab054..9f2198b 100755
--- a/constants/deck_constants.asm
+++ b/constants/deck_constants.asm
@@ -2,7 +2,7 @@ UNNAMED_DECK_DECK EQU $00
UNNAMED_DECK_DECK2 EQU $01
SAMS_PRACTICE_DECK EQU $02
PRACTICE_PLAYER_DECK EQU $03
-SAMS_PRACTICE_DECK2 EQU $04
+SAMS_NORMAL_DECK EQU $04
CHARMANDER_AND_FRIENDS_DECK EQU $05
CHARMANDER_EXTRA_DECK EQU $06
SQUIRTLE_AND_FRIENDS_DECK EQU $07
@@ -53,3 +53,5 @@ ANGER_DECK EQU $33
FLAMETHROWER_DECK EQU $34
RESHUFFLE_DECK EQU $35
IMAKUNI_DECK EQU $36
+
+NUMBER_OF_DECKS EQU $36
diff --git a/constants/duelist_constants.asm b/constants/duelist_constants.asm
new file mode 100755
index 0000000..2fbb190
--- /dev/null
+++ b/constants/duelist_constants.asm
@@ -0,0 +1,41 @@
+PLAYER EQU $01
+RONALD EQU $02
+SAM EQU $03
+IMAKUNI EQU $04
+NIKKI EQU $05
+RICK EQU $06
+KEN EQU $07
+AMY EQU $08
+ISAAC EQU $09
+MITCH EQU $0A
+GENE EQU $0B
+MURRAY EQU $0C
+COURTNEY EQU $0D
+STEVE EQU $0E
+JACK EQU $0F
+ROD EQU $10
+JOSEPH EQU $11
+DAVID EQU $12
+ERIK EQU $13
+JOHN EQU $14
+ADAM EQU $15
+JONATHAN EQU $16
+JOSHUA EQU $17
+NICHOLAS EQU $18
+BRANDON EQU $19
+MATTHEW EQU $1A
+RYAN EQU $1B
+ANDREW EQU $1C
+CHRIS EQU $1D
+MICHAEL EQU $1E
+DANIEL EQU $1F
+ROBERT EQU $20
+BRITTANY EQU $21
+KRISTIN EQU $22
+HEATHER EQU $23
+SARA EQU $24
+AMANDA EQU $25
+JENNIFER EQU $26
+JESSICA EQU $27
+STEPHANIE EQU $28
+AARON EQU $29
diff --git a/data/cards.asm b/data/cards.asm
index 9653ad7..23450a8 100755
--- a/data/cards.asm
+++ b/data/cards.asm
@@ -10653,7 +10653,7 @@ ImakuniCard: ; 33e4b (c:7e4b)
dw $b72 ; name
db PROMOSTAR ; rarity
db PROMOTIONAL | PRO ; set
- db IMAKUNI
+ db IMAKUNI_CARD
dw $4e7c ; function
dw $b73 ; description
dw 0
diff --git a/data/decks.asm b/data/decks.asm
index 696d75c..cb29df4 100755
--- a/data/decks.asm
+++ b/data/decks.asm
@@ -64,7 +64,7 @@ UnnamedDeck: ; 30070 (c:4070)
db 2, PIDGEOT2
db 2, PIDGEOTTO
db 4, PIDGEY
- db 2, IMAKUNI
+ db 2, IMAKUNI_CARD
db 2, GAMBLER
db 2, PROFESSOR_OAK
db 2, ENERGY_REMOVAL
@@ -1823,7 +1823,7 @@ ImakuniDeck: ; 30c3d (c:4c3d)
db 4, DROWZEE
db 3, HYPNO
db 4, FARFETCHD
- db 4, IMAKUNI
+ db 4, IMAKUNI_CARD
db 2, MAINTENANCE
db 2, POKEMON_FLUTE
db 1, GAMBLER
diff --git a/engine/bank1.asm b/engine/bank1.asm
index a9dd0a5..be626fb 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, [wBufSerial]
+ 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 e212969..64bf841 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 79c52f7..33c72c2 100755
--- a/engine/home.asm
+++ b/engine/home.asm
@@ -1837,7 +1837,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
@@ -3098,7 +3130,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]
@@ -3754,7 +3836,7 @@ Func_38c0: ; 38c0 (0:38c0)
ld [$ba44], a
call DisableExtRAM
call Func_3a3b
- bank1call Func_409f
+ bank1call Duel_Start
scf
ret
@@ -4295,7 +4377,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)
diff --git a/wram.asm b/wram.asm
index 12f66a7..5e186cd 100755
--- a/wram.asm
+++ b/wram.asm
@@ -51,12 +51,27 @@ wBufPalette: ; caf0
ds $84
wBufSerial: ; cb74
+ ds $9a
+
+; this seems to hold the current opponent's deck id - 2,
+; perhaps to account for the two unused pointers at the
+; beginning of DeckPointers
+wOpponentDeck: ; cc0e
+ ds $5
+
+wIsPracticeDuel: ; cc13
+ ds $7
+
+wDuelTheme: ; cc1a
ds $1
;--- Bank 1: $Dxxx ----------------------------------------
SECTION "WRAM1", WRAMX, BANK[1]
- ds $32f
+ ds $113
+
+wMatchStartTheme: ; d113
+ ds $21c
wCurMap: ; d32f
ds $1