diff options
| author | U-Daniel-PC\Daniel <corrnondacqb@yahoo.com> | 2014-07-25 00:50:46 -0500 | 
|---|---|---|
| committer | U-Daniel-PC\Daniel <corrnondacqb@yahoo.com> | 2014-07-25 00:50:46 -0500 | 
| commit | ba5c5e4e62c68bef335685d15d967ff3044eb82f (patch) | |
| tree | c86fe152c9e8d9af8792e59df4ac88c359d25b6b | |
| parent | 75db414ec3e4fa24e418e3e5bcd7f913388a4890 (diff) | |
Start duel engine disassembly, add duelist constants
| -rwxr-xr-x | constants.asm | 1 | ||||
| -rwxr-xr-x | constants/card_constants.asm | 2 | ||||
| -rwxr-xr-x | constants/deck_constants.asm | 4 | ||||
| -rwxr-xr-x | constants/duelist_constants.asm | 41 | ||||
| -rwxr-xr-x | data/cards.asm | 2 | ||||
| -rwxr-xr-x | data/decks.asm | 4 | ||||
| -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 | ||||
| -rwxr-xr-x | wram.asm | 17 | 
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) @@ -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 | 
