diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/bank1.asm | 241 | ||||
-rw-r--r-- | src/engine/bank1c.asm | 2 | ||||
-rw-r--r-- | src/engine/bank2.asm | 4 | ||||
-rw-r--r-- | src/engine/bank20.asm | 2 | ||||
-rw-r--r-- | src/engine/bank4.asm | 2 | ||||
-rw-r--r-- | src/engine/home.asm | 184 | ||||
-rw-r--r-- | src/vram.asm | 8 |
7 files changed, 335 insertions, 108 deletions
diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm index 7cb6719..c61cb02 100644 --- a/src/engine/bank1.asm +++ b/src/engine/bank1.asm @@ -1306,13 +1306,13 @@ Func_49a8: ; 49a8 (1:49a8) Func_49ca: ; 49ca (1:49ca) call LoadDuelDrawCardsScreenTiles ld hl, $4a35 - call Func_0695 + call WriteDataBlocksToBGMap0 ld a, [wConsole] cp CONSOLE_CGB jr nz, .not_cgb call BankswitchVRAM1 ld hl, $4a6e - call Func_0695 + call WriteDataBlocksToBGMap0 call BankswitchVRAM0 .not_cgb call Func_49ed.player_turn @@ -1367,7 +1367,7 @@ Func_4a97: ; 4a97 (1:4a97) ld de, wDefaultText push de call CopyPlayerName - ld de, $b + lb de, 0, 11 call Func_22ae pop hl call Func_21c5 @@ -1379,16 +1379,16 @@ Func_4a97: ; 4a97 (1:4a97) pop hl call Func_23c1 push hl - add $14 + add SCREEN_WIDTH ld d, a - ld e, $00 + ld e, 0 call Func_22ae pop hl call Func_21c5 ld a, [wOpponentPortrait] ld bc, $d01 call Func_3e2a - call $516f + call Func_516f ret ; 0x4ad6 @@ -1786,15 +1786,192 @@ DrawDuelMainScene: ; 4f9d (1:4f9d) .place_other_elements call SwapTurn ld hl, $5188 - call Func_0695 - call $516f ; draw the vertical separator - call $503a ; draw the HUDs + call WriteDataBlocksToBGMap0 + call Func_516f ; draw the vertical separator + call Func_503a ; draw the HUDs call DrawWideTextBox call EnableLCD ret ; 0x503a - INCROM $503a, $51e7 +Func_503a: ; 503a (1:503a) + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + cp DUELIST_TYPE_PLAYER + jr z, .asm_5051 + ldh a, [hWhoseTurn] + push af + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + call .asm_5051 + pop af + ldh [hWhoseTurn], a + ret +.asm_5051 + ld de, $10b + ld bc, $b08 + call Func_5093 + ld bc, $805 + ld a, DUELVARS_ARENA_CARD_STATUS + call GetTurnDuelistVariable + call $63ce + inc c + call $63bb + inc c + call $63c7 + call SwapTurn + ld de, $700 + ld bc, $301 + call GetNonTurnDuelistVariable + call Func_5093 + ld bc, $b06 + ld a, DUELVARS_ARENA_CARD_STATUS + call GetTurnDuelistVariable + call $63ce + dec c + call $63bb + dec c + call $63c7 + call SwapTurn + ret +; 0x5093 + +Func_5093: ; 5093 (1:5093) + ld hl, wcbc9 + ld [hl], b + inc hl + ld [hl], c + push de + ld d, $01 + ld a, e + or a + jr z, .asm_50a2 + ld d, $0f +.asm_50a2 + push de + pop bc + ld a, $0d + call WriteByteToBGMap0 + inc b + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + add $1f + call WriteByteToBGMap0 + inc b + ld a, $30 + call WriteByteToBGMap0 + inc b + call CountPrizes + add $20 + call WriteByteToBGMap0 + pop de + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + ret z + call LoadCardDataToBuffer1_FromDeckIndex + push de + ld a, 32 + call CopyCardNameAndLevel + ld [hl], TX_END + pop de + ld a, e + or a + jr nz, .asm_50e5 + ld hl, wDefaultText + call Func_23c1 + add $14 + ld d, a +.asm_50e5 + call Func_22ae + ld hl, wDefaultText + call Func_21c5 + push de + pop bc + call GetArenaCardColor + inc a + dec b + call $5b7a + ld hl, wcbc9 + ld b, [hl] + inc hl + ld c, [hl] + ld de, $900 + call $63e6 + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + call LoadCardDataToBuffer1_FromDeckIndex + ld a, [wLoadedCard1HP] + ld d, a ; max HP + ld a, DUELVARS_ARENA_CARD_HP + call GetTurnDuelistVariable + ld e, a ; cur HP + call $6614 + ld hl, wcbc9 + ld b, [hl] + inc hl + ld c, [hl] + inc c + call BCCoordToBGMap0Address + push de + ld hl, wDefaultText + ld b, $06 + call SafeCopyDataHLtoDE + pop de + ld hl, BG_MAP_WIDTH + add hl, de + ld e, l + ld d, h + ld hl, wDefaultText + $06 + ld b, $06 + call SafeCopyDataHLtoDE + ld hl, wcbc9 + ld a, [hli] + add $06 + ld b, a + ld c, [hl] + inc c + ld a, $e0 + call GetTurnDuelistVariable + or a + jr z, .asm_5159 + ld a, $14 + call WriteByteToBGMap0 + inc b + ld a, [hl] + add $20 + call WriteByteToBGMap0 + dec b +.asm_5159 + ld a, $da + call GetTurnDuelistVariable + or a + jr z, .asm_516e + inc c + ld a, $15 + call WriteByteToBGMap0 + inc b + ld a, [hl] + add $20 + call WriteByteToBGMap0 +.asm_516e + ret +; 0x516f + +Func_516f: ; 516f (1:516f) + ld hl, $5199 + call WriteDataBlocksToBGMap0 + ld a, [wConsole] + cp CONSOLE_CGB + ret nz + call BankswitchVRAM1 + ld hl, $51c0 + call WriteDataBlocksToBGMap0 + call BankswitchVRAM0 + ret +; 0x5188 + + INCROM $5188, $51e7 ; if this is a practice duel, execute the practice duel action at wPracticeDuelAction DoPracticeDuelAction: ; 51e7 (1:51e7) @@ -2038,7 +2215,7 @@ DrawCardListScreenLayout: ; 559a (1:559a) Func_55f0: ; 55f0 (1:55f0) call DrawNarrowTextBox - call $56a0 + call Func_56a0 .asm_55f6 call CountCardsInDuelTempList ; list length ld hl, wSelectedDuelSubMenuItem @@ -2047,11 +2224,11 @@ Func_55f0: ; 55f0 (1:55f0) ld d, [hl] ; initial page scroll offset ld hl, CardListParameters ; other list params call PrintCardListItems - call Func_58aa + call DrawSelectedCard call EnableLCD .asm_560b call DoFrame - call $5690 + call Func_5690 call HandleCardListInput jr nc, .asm_560b ld hl, wSelectedDuelSubMenuItem @@ -2125,7 +2302,38 @@ Func_55f0: ; 55f0 (1:55f0) ret ; 0x5690 - INCROM $5690, $5710 +Func_5690: ; 5690 (1:5690) + ldh a, [hButtonsPressed2] + and D_PAD + ret z + ld a, $01 + ldh [hffb0], a + call Func_56a0 + xor a + ldh [hffb0], a + ret +; 0x56a0 + +Func_56a0: ; 56a0 (1:56a0) + lb de, 1, 14 + call AdjustCoordinatesForWindow + call Func_22ae + ld hl, wCardListInfoBoxText + ld a, [hli] + ld h, [hl] + ld l, a + call PrintTextNoDelay + ld hl, wCardListHeaderText + ld a, [hli] + ld h, [hl] + ld l, a + lb de, 1, 1 + call Func_22ae + call PrintTextNoDelay + ret +; 0x56c2 + + INCROM $56c2, $5710 CardListParameters: ; 5710 (1;5710) db 1, 3 ; cursor x, cursor y @@ -2232,7 +2440,8 @@ Func_589c: ; 589c (1:589c) ret ; 0x58aa -Func_58aa: ; 58aa (1:58aa) +; load the tiles and palette of the card selected in card list screen +DrawSelectedCard: ; 58aa (1:58aa) ldh a, [hCurrentMenuItem] call GetCardInDuelTempList call LoadCardDataToBuffer1_FromCardID @@ -3074,7 +3283,7 @@ _TossCoin: ; 71ad (1:71ad) call $65b7 ld b, 17 ld a, $2e - call WriteToBGMap0AddressFromBCCoord + call WriteByteToBGMap0 inc b ld a, [wcd9c] call $65b7 diff --git a/src/engine/bank1c.asm b/src/engine/bank1c.asm index 005eb3f..333ef53 100644 --- a/src/engine/bank1c.asm +++ b/src/engine/bank1c.asm @@ -269,7 +269,7 @@ Func_701e9: ; 701e9 (1c:41e9) ret Func_701fe: ; 701fe (1c:41fe) - ld hl, v0BGMapTiles1 + ld hl, v0BGMap0 ld de, $000c ld a, $80 ld c, $d diff --git a/src/engine/bank2.asm b/src/engine/bank2.asm index 179111e..33594c2 100644 --- a/src/engine/bank2.asm +++ b/src/engine/bank2.asm @@ -268,7 +268,7 @@ Func_8f38: ; 8f38 (2:4f38) call DisableSRAM ld l, a ld de, wDefaultText - call Func_0663 + call TwoByteNumberToText ld hl, wcfb9 ld [hl], $6 inc hl @@ -500,7 +500,7 @@ asm_90da add $e ld c, a ld a, e - call WriteToBGMap0AddressFromBCCoord + call WriteByteToBGMap0 or a ret diff --git a/src/engine/bank20.asm b/src/engine/bank20.asm index 5a0367c..d2acf6a 100644 --- a/src/engine/bank20.asm +++ b/src/engine/bank20.asm @@ -66,7 +66,7 @@ Func_801a1: ; 801a1 (20:41a1) ld a, $1 call BankswitchSRAM ld hl, v0End - ld de, v0BGMapTiles1 + ld de, v0BGMap0 ld c, $20 .asm_801b4 push bc diff --git a/src/engine/bank4.asm b/src/engine/bank4.asm index 61e8751..5140705 100644 --- a/src/engine/bank4.asm +++ b/src/engine/bank4.asm @@ -434,7 +434,7 @@ Unknown_10f14: ; 10f14 (4:4f14) Func_10f2e: ; 10f2e (4:4f2e) push hl push de - ld de, $0101 + lb de, 1, 1 call Func_22ae call Func_10f4a rlca diff --git a/src/engine/home.asm b/src/engine/home.asm index 5071510..8795ad5 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -420,7 +420,7 @@ SetupVRAM: ; 03a1 (0:03a1) call BankswitchVRAM0 .vram0 ld hl, v0Tiles0 - ld bc, v0BGMapTiles1 - v0Tiles0 + ld bc, v0BGMap0 - v0Tiles0 .loop xor a ld [hli], a @@ -433,8 +433,8 @@ SetupVRAM: ; 03a1 (0:03a1) ; fill VRAM0 BG maps with [wTileMapFill] and VRAM1 BG Maps with 0 FillTileMap: ; 03c0 (0:03c0) call BankswitchVRAM0 - ld hl, v0BGMapTiles1 - ld bc, v0BGMapTiles2 - v0BGMapTiles1 + ld hl, v0BGMap0 + ld bc, v0BGMap1 - v0BGMap0 .vram0_loop ld a, [wTileMapFill] ld [hli], a @@ -446,8 +446,8 @@ FillTileMap: ; 03c0 (0:03c0) cp CONSOLE_CGB ret nz call BankswitchVRAM1 - ld hl, v1BGMapTiles1 - ld bc, v1BGMapTiles2 - v1BGMapTiles1 + ld hl, v1BGMap0 + ld bc, v1BGMap1 - v1BGMap0 .vram1_loop xor a ld [hli], a @@ -641,7 +641,7 @@ AttrBlkPacket_04bf: ; 04bf (0:04bf) ds 6 ; data set 2 ds 2 ; data set 3 -; returns v*BGMapTiles1 + BG_MAP_WIDTH * c + b in de. +; returns v*BGMap0 + BG_MAP_WIDTH * c + b in de. ; used to map coordinates at bc to a BGMap0 address. BCCoordToBGMap0Address: ; 04cf (0:04cf) ld l, c @@ -652,7 +652,7 @@ BCCoordToBGMap0Address: ; 04cf (0:04cf) add hl, hl add hl, hl ld c, b - ld b, HIGH(v0BGMapTiles1) + ld b, HIGH(v0BGMap0) add hl, bc ld e, l ld d, h @@ -848,7 +848,7 @@ Func_05c2: ; 5c2 (0:5c2) ld hl, wcaa0 push hl push bc - call Func_0614 + call WriteNumbersInTextFormat pop bc call BCCoordToBGMap0Address pop hl @@ -867,7 +867,7 @@ Func_05db: ; 5db (0:5db) ld hl, wcaa0 push hl push bc - call Func_061b + call WriteNumberInTextFormat pop bc call BCCoordToBGMap0Address pop hl @@ -889,9 +889,9 @@ Func_05f4: ; 5f4 (0:5f4) push hl push bc ld a, d - call Func_0614 + call WriteNumbersInTextFormat ld a, e - call Func_0614 + call WriteNumbersInTextFormat pop bc call BCCoordToBGMap0Address pop hl @@ -903,43 +903,48 @@ Func_05f4: ; 5f4 (0:5f4) ret ; 0x614 -Func_0614: ; 614 (0:614) +; given two numbers in the two nybbles of register a, write them +; in text format to hl (most significant nybble first) +WriteNumbersInTextFormat: ; 614 (0:614) push af swap a - call Func_061b + call WriteNumberInTextFormat pop af -Func_061b: +; fallthrough + +; given a number in the (bottom nybble) of register a, write it in text format to hl +WriteNumberInTextFormat: and $0f - add $30 - cp $3a - jr c, .asm_625 + add "0" + cp "9" + 1 + jr c, .write_num add $07 -.asm_625 +.write_num ld [hli], a ret ; 0x627 INCROM $0627, $0663 -Func_0663: ; 0663 (0:0663) +; convert the number at hl to text (ascii) format and write it to de +TwoByteNumberToText: ; 0663 (0:0663) push bc ld bc, -10000 - call Func_0686 + call .get_digit ld bc, -1000 - call Func_0686 + call .get_digit ld bc, -100 - call Func_0686 + call .get_digit ld bc, -10 - call Func_0686 + call .get_digit ld bc, -1 - call Func_0686 - xor a + call .get_digit + xor a ; TX_END ld [de], a pop bc ret - -Func_0686: ; 0686 (0:0686) - ld a, $2f +.get_digit + ld a, "0" - 1 .substract_loop inc a add hl, bc @@ -955,51 +960,60 @@ Func_0686: ; 0686 (0:0686) ret ; 0x695 -Func_0695: ; 0695 (0:0695) - call Func_069d - bit 7, [hl] - jr z, Func_0695 +; reads structs: +; x (1 byte), y (1 byte), data (n bytes), $00 +; x (1 byte), y (1 byte), data (n bytes), $00 +; ... +; $ff +; for each struct, writes data to BGMap0-translated x,y +WriteDataBlocksToBGMap0: ; 0695 (0:0695) + call WriteDataBlockToBGMap0 + bit 7, [hl] ; check for $ff + jr z, WriteDataBlocksToBGMap0 ret ; 0x69d -Func_069d: ; 069d (0:069d) +; reads struct: +; x (1 byte), y (1 byte), data (n bytes), $00 +; writes data to BGMap0-translated x,y +WriteDataBlockToBGMap0: ; 069d (0:069d) ld b, [hl] inc hl ld c, [hl] inc hl - push hl - push bc + push hl ; hl = addr of data + push bc ; b,c = x,y ld b, -1 -.asm_6a5 +.find_zero_loop inc b ld a, [hli] or a - jr nz, .asm_6a5 - ld a, b - pop bc + jr nz, .find_zero_loop + ld a, b ; length of data + pop bc ; x,y push af call BCCoordToBGMap0Address pop af - ld b, a - pop hl + ld b, a ; length of data + pop hl ; addr of data or a - jr z, .asm_6bd + jr z, .move_to_next push bc push hl - call SafeCopyDataHLtoDE + call SafeCopyDataHLtoDE ; copy data to de (BGMap0 translated x,y) pop hl pop bc -.asm_6bd - inc b +.move_to_next + inc b ; length of data += 1 (to account for the last $0) ld c, b - ld b, $0 - add hl, bc + ld b, 0 + add hl, bc ; point to next structure ret ; 0x6c3 -; writes a to [v*BGMapTiles1 + BG_MAP_WIDTH * c + b] -WriteToBGMap0AddressFromBCCoord: ; 06c3 (0:06c3) +; writes a to [v*BGMap0 + BG_MAP_WIDTH * c + b] +WriteByteToBGMap0: ; 06c3 (0:06c3) push af ld a, [wLCDC] rla @@ -1035,7 +1049,7 @@ WriteToBGMap0AddressFromBCCoord: ; 06c3 (0:06c3) ; 0x6ee ; copy a bytes of data from hl to vBGMap0 address pointed to by coord at bc -Func_06ee: ; 06ee (0:06ee) +CopyDataToBGMap0: ; 06ee (0:06ee) push bc push hl push af @@ -1949,7 +1963,7 @@ Func_0bcb: ; 0bcb (0:0bcb) ld a, %11100100 ld [rBGP], a ld de, v0Tiles1 - ld bc, v0BGMapTiles1 - v0Tiles1 + ld bc, v0BGMap0 - v0Tiles1 .loop ld a, [hli] ld [de], a @@ -1958,7 +1972,7 @@ Func_0bcb: ; 0bcb (0:0bcb) ld a, b or c jr nz, .loop - ld hl, v0BGMapTiles1 + ld hl, v0BGMap0 ld de, $000c ld a, $80 ld c, $d @@ -5305,7 +5319,7 @@ SafeCopyDataDEtoHL: ; 1dca (0:1dca) .lcd_on jp HblankCopyDataDEtoHL -; returns v*BGMapTiles1 + BG_MAP_WIDTH * e + d in hl. +; returns v*BGMap0 + BG_MAP_WIDTH * e + d in hl. ; used to map coordinates at de to a BGMap0 address. DECoordToBGMap0Address: ; 1ddb (0:1ddb) ld l, e @@ -5319,7 +5333,7 @@ DECoordToBGMap0Address: ; 1ddb (0:1ddb) add d ld l, a ld a, h - adc HIGH(v0BGMapTiles1) + adc HIGH(v0BGMap0) ld h, a ret @@ -6214,51 +6228,53 @@ Func_23d3: ; 23d3 (0:23d3) INCROM $23fd, $245d -Func_245d: ; 245d (0:245d) +; convert the number at hl to large (TX_LARGE) text format and write it to wcaa0 +; replace leading zeros with $00 +TwoByteNumberToLargeText_TrimLeadingZeros: ; 245d (0:245d) push de push bc ld de, wcaa0 push de ld bc, -10000 - call Func_2499 + call .get_digit ld bc, -1000 - call Func_2499 + call .get_digit ld bc, -100 - call Func_2499 + call .get_digit ld bc, -10 - call Func_2499 + call .get_digit ld bc, -1 - call Func_2499 + call .get_digit xor a ld [de], a pop hl - ld e, $5 -.asm_2486 + ld e, 5 +.digit_loop inc hl ld a, [hl] cp $20 - jr nz, .asm_2495 - ld [hl], $0 + jr nz, .done ; jump if not zero + ld [hl], $0 ; trim leading zero inc hl dec e - jr nz, .asm_2486 + jr nz, .digit_loop dec hl ld [hl], $20 -.asm_2495 +.done dec hl pop bc pop de ret -Func_2499: ; 2499 (0:2499) - ld a, $5 +.get_digit + ld a, TX_LARGE ld [de], a inc de - ld a, $1f -.asm_249f + ld a, $20 - 1 +.substract_loop inc a add hl, bc - jr c, .asm_249f + jr c, .substract_loop ld [de], a inc de ld a, l @@ -6630,7 +6646,7 @@ DrawCursor: ld a, c ld c, e ld b, d - call WriteToBGMap0AddressFromBCCoord + call WriteByteToBGMap0 or a ret @@ -6719,7 +6735,7 @@ HandleDuelMenuInput: ; 271a (0:271a) inc hl ld c, [hl] ld a, e - call WriteToBGMap0AddressFromBCCoord + call WriteByteToBGMap0 ld a, [wCurMenuItem] ld e, a or a @@ -6758,7 +6774,7 @@ PrintCardListItems: ; 2799 (0:2799) ld c, a ld b, 18 ld a, e - call WriteToBGMap0AddressFromBCCoord + call WriteByteToBGMap0 ld e, $00 ld a, [wListScrollOffset] ld hl, wNumMenuItems @@ -6774,7 +6790,7 @@ PrintCardListItems: ; 2799 (0:2799) dec a ld c, a ld a, e - call WriteToBGMap0AddressFromBCCoord + call WriteByteToBGMap0 ld a, [wListScrollOffset] ld e, a ld d, $00 @@ -7532,7 +7548,7 @@ Func_2d43: ; 2d43 (0:2d43) ld de, wTxRam3 ld hl, wce4a call Func_2de0 - call Func_2e12 + call TwoByteNumberToText_CountLeadingZeros call Func_2cd7 jp Func_2d43 .tx_ram1 @@ -7593,22 +7609,24 @@ ReadTextOffset: ; 2ded (0:2ded) pop de ret -Func_2e12: ; 2e12 (0:2e12) +; convert the number at hl to text (ascii) format and write it to wcaa0 +; return c = 4 - leading_zeros +TwoByteNumberToText_CountLeadingZeros: ; 2e12 (0:2e12) ld a, [wcd0a] or a - jp z, Func_245d + jp z, TwoByteNumberToLargeText_TrimLeadingZeros ld de, wcaa0 push de - call Func_0663 + call TwoByteNumberToText pop hl - ld c, $4 -.asm_2e23 + ld c, 4 +.digit_loop ld a, [hl] - cp $30 + cp "0" ret nz inc hl dec c - jr nz, .asm_2e23 + jr nz, .digit_loop ret ; copy the name of the duelist whose turn it is to de diff --git a/src/vram.asm b/src/vram.asm index 7adca0a..9fbc401 100644 --- a/src/vram.asm +++ b/src/vram.asm @@ -4,8 +4,8 @@ v0Tiles0:: ds $800 ; 8000 v0Tiles1:: ds $800 ; 8800 v0Tiles2:: ds $800 ; 9000 -v0BGMapTiles1:: ds $400 ; 9800 -v0BGMapTiles2:: ds $400 ; 9c00 +v0BGMap0:: ds $400 ; 9800 +v0BGMap1:: ds $400 ; 9c00 v0End:: ; a000 @@ -15,7 +15,7 @@ v1Tiles0:: ds $800 ; 8000 v1Tiles1:: ds $800 ; 8800 v1Tiles2:: ds $800 ; 9000 -v1BGMapTiles1:: ds $400 ; 9800 -v1BGMapTiles2:: ds $400 ; 9c00 +v1BGMap0:: ds $400 ; 9800 +v1BGMap1:: ds $400 ; 9c00 v1End:: ; a000 |