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 |