diff options
author | ElectroDeoxys <ElectroDeoxys@gmail.com> | 2021-09-14 22:10:12 +0100 |
---|---|---|
committer | ElectroDeoxys <ElectroDeoxys@gmail.com> | 2021-09-14 22:10:12 +0100 |
commit | 8dee6b7a11e85d6d4b9f8ec9fb9d53a499fd37dc (patch) | |
tree | 47501aced2d256052b8f78bc97328d5af5703add | |
parent | 0017fc2d171c87d7bab4c9be90e1069ae95a8071 (diff) |
Fix wrong identation in new home files
-rw-r--r-- | src/home/card_data.asm | 6 | ||||
-rw-r--r-- | src/home/effect_commands.asm | 130 | ||||
-rw-r--r-- | src/home/menus.asm | 1480 |
3 files changed, 808 insertions, 808 deletions
diff --git a/src/home/card_data.asm b/src/home/card_data.asm index ffb5155..9fd78ae 100644 --- a/src/home/card_data.asm +++ b/src/home/card_data.asm @@ -168,9 +168,9 @@ GetCardPointer: ret ; input: - ; hl = card_gfx_index - ; de = where to load the card gfx to - ; bc are supposed to be $30 (number of tiles of a card gfx) and TILE_SIZE respectively +; hl = card_gfx_index +; de = where to load the card gfx to +; bc are supposed to be $30 (number of tiles of a card gfx) and TILE_SIZE respectively ; card_gfx_index = (<Name>CardGfx - CardGraphics) / 8 (using absolute ROM addresses) ; also copies the card's palette to wCardPalette LoadCardGfx: diff --git a/src/home/effect_commands.asm b/src/home/effect_commands.asm index dec5e1d..9446d33 100644 --- a/src/home/effect_commands.asm +++ b/src/home/effect_commands.asm @@ -3,83 +3,83 @@ ; input: ; a = command type to check ; [wLoadedAttackEffectCommands] = pointer to list of commands of current attack or trainer card - TryExecuteEffectCommandFunction: - push af - ; grab pointer to command list from wLoadedAttackEffectCommands - ld hl, wLoadedAttackEffectCommands - ld a, [hli] - ld h, [hl] - ld l, a - pop af - call CheckMatchingCommand - jr nc, .execute_function - ; return if no matching command was found - or a - ret +TryExecuteEffectCommandFunction: + push af + ; grab pointer to command list from wLoadedAttackEffectCommands + ld hl, wLoadedAttackEffectCommands + ld a, [hli] + ld h, [hl] + ld l, a + pop af + call CheckMatchingCommand + jr nc, .execute_function + ; return if no matching command was found + or a + ret .execute_function - ; execute the function at [wEffectFunctionsBank]:hl - ldh a, [hBankROM] - push af - ld a, [wEffectFunctionsBank] - call BankswitchROM - or a - call CallHL - push af - ; restore original bank and return - pop bc - pop af - call BankswitchROM - push bc - pop af - ret + ; execute the function at [wEffectFunctionsBank]:hl + ldh a, [hBankROM] + push af + ld a, [wEffectFunctionsBank] + call BankswitchROM + or a + call CallHL + push af + ; restore original bank and return + pop bc + pop af + call BankswitchROM + push bc + pop af + ret ; input: ; a = command type to check ; hl = list of commands of current attack or trainer card ; return nc if command type matching a is found, carry otherwise CheckMatchingCommand: - ld c, a - ld a, l - or h - jr nz, .not_null_pointer - ; return carry if pointer is NULL - scf - ret + ld c, a + ld a, l + or h + jr nz, .not_null_pointer + ; return carry if pointer is NULL + scf + ret .not_null_pointer - ldh a, [hBankROM] - push af - ld a, BANK(EffectCommands) - call BankswitchROM - ; store the bank number of command functions ($b) in wEffectFunctionsBank - ld a, BANK("Effect Functions") - ld [wEffectFunctionsBank], a + ldh a, [hBankROM] + push af + ld a, BANK(EffectCommands) + call BankswitchROM + ; store the bank number of command functions ($b) in wEffectFunctionsBank + ld a, BANK("Effect Functions") + ld [wEffectFunctionsBank], a .check_command_loop - ld a, [hli] - or a - jr z, .no_more_commands - cp c - jr z, .matching_command_found - ; skip function pointer for this command and move to the next one - inc hl - inc hl - jr .check_command_loop + ld a, [hli] + or a + jr z, .no_more_commands + cp c + jr z, .matching_command_found + ; skip function pointer for this command and move to the next one + inc hl + inc hl + jr .check_command_loop .matching_command_found - ; load function pointer for this command - ld a, [hli] - ld h, [hl] - ld l, a - ; restore bank and return nc - pop af - call BankswitchROM - or a - ret + ; load function pointer for this command + ld a, [hli] + ld h, [hl] + ld l, a + ; restore bank and return nc + pop af + call BankswitchROM + or a + ret .no_more_commands - ; restore bank and return c - pop af - call BankswitchROM - scf - ret + ; restore bank and return c + pop af + call BankswitchROM + scf + ret diff --git a/src/home/menus.asm b/src/home/menus.asm index dbb4c25..9c1f274 100644 --- a/src/home/menus.asm +++ b/src/home/menus.asm @@ -3,311 +3,311 @@ ; a = list length ; de = initial page scroll offset, initial item (in the visible page) ; hl: 9 bytes with the rest of the parameters - InitializeCardListParameters: - ld [wNumListItems], a - ld a, d - ld [wListScrollOffset], a - ld a, e - ld [wCurMenuItem], a - add d - ldh [hCurMenuItem], a - ld a, [hli] - ld [wCursorXPosition], a - ld a, [hli] - ld [wCursorYPosition], a - ld a, [hli] - ld [wListItemXPosition], a - ld a, [hli] - ld [wListItemNameMaxLength], a - ld a, [hli] - ld [wNumMenuItems], a - ld a, [hli] - ld [wCursorTile], a - ld a, [hli] - ld [wTileBehindCursor], a - ld a, [hli] - ld [wListFunctionPointer], a - ld a, [hli] - ld [wListFunctionPointer + 1], a - xor a - ld [wCursorBlinkCounter], a - ld a, 1 - ld [wYDisplacementBetweenMenuItems], a - ret +InitializeCardListParameters: + ld [wNumListItems], a + ld a, d + ld [wListScrollOffset], a + ld a, e + ld [wCurMenuItem], a + add d + ldh [hCurMenuItem], a + ld a, [hli] + ld [wCursorXPosition], a + ld a, [hli] + ld [wCursorYPosition], a + ld a, [hli] + ld [wListItemXPosition], a + ld a, [hli] + ld [wListItemNameMaxLength], a + ld a, [hli] + ld [wNumMenuItems], a + ld a, [hli] + ld [wCursorTile], a + ld a, [hli] + ld [wTileBehindCursor], a + ld a, [hli] + ld [wListFunctionPointer], a + ld a, [hli] + ld [wListFunctionPointer + 1], a + xor a + ld [wCursorBlinkCounter], a + ld a, 1 + ld [wYDisplacementBetweenMenuItems], a + ret ; similar to HandleMenuInput, but conveniently returns parameters related to the ; state of the list in a, d, and e if A or B were pressed. also returns carry ; if A or B were pressed, nc otherwise. returns -1 in a if B was pressed. ; used for example in the Hand card list and Discard Pile card list screens. HandleCardListInput: - call HandleMenuInput - ret nc - ld a, [wListScrollOffset] - ld d, a - ld a, [wCurMenuItem] - ld e, a - ldh a, [hCurMenuItem] - scf - ret + call HandleMenuInput + ret nc + ld a, [wListScrollOffset] + ld d, a + ld a, [wCurMenuItem] + ld e, a + ldh a, [hCurMenuItem] + scf + ret ; initializes parameters for a menu, given the 8 bytes starting at hl, ; which are loaded to the following addresses: -; wCursorXPosition, wCursorYPosition, wYDisplacementBetweenMenuItems, wNumMenuItems, -; wCursorTile, wTileBehindCursor, wMenuFunctionPointer. +; wCursorXPosition, wCursorYPosition, wYDisplacementBetweenMenuItems, wNumMenuItems, +; wCursorTile, wTileBehindCursor, wMenuFunctionPointer. ; also sets the current menu item (wCurMenuItem) to the one specified in register a. InitializeMenuParameters: - ld [wCurMenuItem], a - ldh [hCurMenuItem], a - ld de, wCursorXPosition - ld b, wMenuFunctionPointer + $2 - wCursorXPosition + ld [wCurMenuItem], a + ldh [hCurMenuItem], a + ld de, wCursorXPosition + ld b, wMenuFunctionPointer + $2 - wCursorXPosition .loop - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .loop - xor a - ld [wCursorBlinkCounter], a - ret + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .loop + xor a + ld [wCursorBlinkCounter], a + ret ; returns with the carry flag set if A or B were pressed ; returns a = 0 if A was pressed, a = -1 if B was pressed ; note: return values still subject to those of the function at [wMenuFunctionPointer] if any HandleMenuInput: - xor a - ld [wRefreshMenuCursorSFX], a - ldh a, [hDPadHeld] - or a - jr z, .up_down_done - ld b, a - ld a, [wNumMenuItems] - ld c, a - ld a, [wCurMenuItem] - bit D_UP_F, b - jr z, .not_up - dec a - bit 7, a - jr z, .handle_up_or_down - ld a, [wNumMenuItems] - dec a ; wrapping around, so load the bottommost item - jr .handle_up_or_down + xor a + ld [wRefreshMenuCursorSFX], a + ldh a, [hDPadHeld] + or a + jr z, .up_down_done + ld b, a + ld a, [wNumMenuItems] + ld c, a + ld a, [wCurMenuItem] + bit D_UP_F, b + jr z, .not_up + dec a + bit 7, a + jr z, .handle_up_or_down + ld a, [wNumMenuItems] + dec a ; wrapping around, so load the bottommost item + jr .handle_up_or_down .not_up - bit D_DOWN_F, b - jr z, .up_down_done - inc a - cp c - jr c, .handle_up_or_down - xor a ; wrapping around, so load the topmost item + bit D_DOWN_F, b + jr z, .up_down_done + inc a + cp c + jr c, .handle_up_or_down + xor a ; wrapping around, so load the topmost item .handle_up_or_down - push af - ld a, $1 - ld [wRefreshMenuCursorSFX], a ; buffer sound for up/down - call EraseCursor - pop af - ld [wCurMenuItem], a - xor a - ld [wCursorBlinkCounter], a + push af + ld a, $1 + ld [wRefreshMenuCursorSFX], a ; buffer sound for up/down + call EraseCursor + pop af + ld [wCurMenuItem], a + xor a + ld [wCursorBlinkCounter], a .up_down_done - ld a, [wCurMenuItem] - ldh [hCurMenuItem], a - ld hl, wMenuFunctionPointer ; call the function if non-0 (periodically) - ld a, [hli] - or [hl] - jr z, .check_A_or_B - ld a, [hld] - ld l, [hl] - ld h, a - ldh a, [hCurMenuItem] - call CallHL - jr nc, RefreshMenuCursor_CheckPlaySFX + ld a, [wCurMenuItem] + ldh [hCurMenuItem], a + ld hl, wMenuFunctionPointer ; call the function if non-0 (periodically) + ld a, [hli] + or [hl] + jr z, .check_A_or_B + ld a, [hld] + ld l, [hl] + ld h, a + ldh a, [hCurMenuItem] + call CallHL + jr nc, RefreshMenuCursor_CheckPlaySFX .A_pressed_draw_cursor - call DrawCursor2 + call DrawCursor2 .A_pressed - call PlayOpenOrExitScreenSFX - ld a, [wCurMenuItem] - ld e, a - ldh a, [hCurMenuItem] - scf - ret + call PlayOpenOrExitScreenSFX + ld a, [wCurMenuItem] + ld e, a + ldh a, [hCurMenuItem] + scf + ret .check_A_or_B - ldh a, [hKeysPressed] - and A_BUTTON | B_BUTTON - jr z, RefreshMenuCursor_CheckPlaySFX - and A_BUTTON - jr nz, .A_pressed_draw_cursor - ; B button pressed - ld a, [wCurMenuItem] - ld e, a - ld a, $ff - ldh [hCurMenuItem], a - call PlayOpenOrExitScreenSFX - scf - ret + ldh a, [hKeysPressed] + and A_BUTTON | B_BUTTON + jr z, RefreshMenuCursor_CheckPlaySFX + and A_BUTTON + jr nz, .A_pressed_draw_cursor + ; B button pressed + ld a, [wCurMenuItem] + ld e, a + ld a, $ff + ldh [hCurMenuItem], a + call PlayOpenOrExitScreenSFX + scf + ret ; plays an "open screen" sound (SFX_02) if [hCurMenuItem] != 0xff ; plays an "exit screen" sound (SFX_03) if [hCurMenuItem] == 0xff PlayOpenOrExitScreenSFX: - push af - ldh a, [hCurMenuItem] - inc a - jr z, .play_exit_sfx - ld a, SFX_02 - jr .play_sfx + push af + ldh a, [hCurMenuItem] + inc a + jr z, .play_exit_sfx + ld a, SFX_02 + jr .play_sfx .play_exit_sfx - ld a, SFX_03 + ld a, SFX_03 .play_sfx - call PlaySFX - pop af - ret + call PlaySFX + pop af + ret ; called once per frame when a menu is open ; play the sound effect at wRefreshMenuCursorSFX if non-0 and blink the ; cursor when wCursorBlinkCounter hits 16 (i.e. every 16 frames) RefreshMenuCursor_CheckPlaySFX: - ld a, [wRefreshMenuCursorSFX] - or a - jr z, RefreshMenuCursor - call PlaySFX + ld a, [wRefreshMenuCursorSFX] + or a + jr z, RefreshMenuCursor + call PlaySFX ; fallthrough RefreshMenuCursor: - ld hl, wCursorBlinkCounter - ld a, [hl] - inc [hl] + ld hl, wCursorBlinkCounter + ld a, [hl] + inc [hl] ; blink the cursor every 16 frames - and $f - ret nz - ld a, [wCursorTile] - bit 4, [hl] - jr z, DrawCursor + and $f + ret nz + ld a, [wCursorTile] + bit 4, [hl] + jr z, DrawCursor ; fallthrough ; set the tile at [wCursorXPosition],[wCursorYPosition] to [wTileBehindCursor] EraseCursor: - ld a, [wTileBehindCursor] + ld a, [wTileBehindCursor] ; fallthrough ; set the tile at [wCursorXPosition],[wCursorYPosition] to a DrawCursor: - ld c, a - ld a, [wYDisplacementBetweenMenuItems] - ld l, a - ld a, [wCurMenuItem] - ld h, a - call HtimesL - ld a, l - ld hl, wCursorXPosition - ld d, [hl] - inc hl - add [hl] - ld e, a - call AdjustCoordinatesForBGScroll - ld a, c - ld c, e - ld b, d - call WriteByteToBGMap0 - or a - ret + ld c, a + ld a, [wYDisplacementBetweenMenuItems] + ld l, a + ld a, [wCurMenuItem] + ld h, a + call HtimesL + ld a, l + ld hl, wCursorXPosition + ld d, [hl] + inc hl + add [hl] + ld e, a + call AdjustCoordinatesForBGScroll + ld a, c + ld c, e + ld b, d + call WriteByteToBGMap0 + or a + ret ; set the tile at [wCursorXPosition],[wCursorYPosition] to [wCursorTile] DrawCursor2: - ld a, [wCursorTile] - jr DrawCursor + ld a, [wCursorTile] + jr DrawCursor ; set wCurMenuItem, and hCurMenuItem to a, and zero wCursorBlinkCounter SetMenuItem: - ld [wCurMenuItem], a - ldh [hCurMenuItem], a - xor a - ld [wCursorBlinkCounter], a - ret + ld [wCurMenuItem], a + ldh [hCurMenuItem], a + xor a + ld [wCursorBlinkCounter], a + ret ; handle input for the 2-row 3-column duel menu. ; only handles input not involving the B, START, or SELECT buttons, that is, ; navigating through the menu or selecting an item with the A button. ; other input in handled by PrintDuelMenuAndHandleInput.handle_input HandleDuelMenuInput: - ldh a, [hDPadHeld] - or a - jr z, .blink_cursor - ld b, a - ld hl, wCurMenuItem - and D_UP | D_DOWN - jr z, .check_left - ld a, [hl] - xor 1 ; move to the other menu item in the same column - jr .dpad_pressed + ldh a, [hDPadHeld] + or a + jr z, .blink_cursor + ld b, a + ld hl, wCurMenuItem + and D_UP | D_DOWN + jr z, .check_left + ld a, [hl] + xor 1 ; move to the other menu item in the same column + jr .dpad_pressed .check_left - bit D_LEFT_F, b - jr z, .check_right - ld a, [hl] - sub 2 - jr nc, .dpad_pressed - ; wrap to the rightmost item in the same row - and 1 - add 4 - jr .dpad_pressed + bit D_LEFT_F, b + jr z, .check_right + ld a, [hl] + sub 2 + jr nc, .dpad_pressed + ; wrap to the rightmost item in the same row + and 1 + add 4 + jr .dpad_pressed .check_right - bit D_RIGHT_F, b - jr z, .dpad_not_pressed - ld a, [hl] - add 2 - cp 6 - jr c, .dpad_pressed - ; wrap to the leftmost item in the same row - and 1 + bit D_RIGHT_F, b + jr z, .dpad_not_pressed + ld a, [hl] + add 2 + cp 6 + jr c, .dpad_pressed + ; wrap to the leftmost item in the same row + and 1 .dpad_pressed - push af - ld a, SFX_01 - call PlaySFX - call .erase_cursor - pop af - ld [wCurMenuItem], a - ldh [hCurMenuItem], a - xor a - ld [wCursorBlinkCounter], a - jr .blink_cursor + push af + ld a, SFX_01 + call PlaySFX + call .erase_cursor + pop af + ld [wCurMenuItem], a + ldh [hCurMenuItem], a + xor a + ld [wCursorBlinkCounter], a + jr .blink_cursor .dpad_not_pressed - ldh a, [hDPadHeld] - and A_BUTTON - jp nz, HandleMenuInput.A_pressed + ldh a, [hDPadHeld] + and A_BUTTON + jp nz, HandleMenuInput.A_pressed .blink_cursor - ; blink cursor every 16 frames - ld hl, wCursorBlinkCounter - ld a, [hl] - inc [hl] - and $f - ret nz - ld a, SYM_CURSOR_R - bit 4, [hl] - jr z, .draw_cursor + ; blink cursor every 16 frames + ld hl, wCursorBlinkCounter + ld a, [hl] + inc [hl] + and $f + ret nz + ld a, SYM_CURSOR_R + bit 4, [hl] + jr z, .draw_cursor .erase_cursor - ld a, SYM_SPACE + ld a, SYM_SPACE .draw_cursor - ld e, a - ld a, [wCurMenuItem] - add a - ld c, a - ld b, $0 - ld hl, DuelMenuCursorCoords - add hl, bc - ld b, [hl] - inc hl - ld c, [hl] - ld a, e - call WriteByteToBGMap0 - ld a, [wCurMenuItem] - ld e, a - or a - ret + ld e, a + ld a, [wCurMenuItem] + add a + ld c, a + ld b, $0 + ld hl, DuelMenuCursorCoords + add hl, bc + ld b, [hl] + inc hl + ld c, [hl] + ld a, e + call WriteByteToBGMap0 + ld a, [wCurMenuItem] + ld e, a + or a + ret DuelMenuCursorCoords: - db 2, 14 ; Hand - db 2, 16 ; Attack - db 8, 14 ; Check - db 8, 16 ; Pkmn Power - db 14, 14 ; Retreat - db 14, 16 ; Done + db 2, 14 ; Hand + db 2, 16 ; Attack + db 8, 14 ; Check + db 8, 16 ; Pkmn Power + db 14, 14 ; Retreat + db 14, 16 ; Done ; print the items of a list of cards (hand cards in a duel, cards from a booster pack...) ; and initialize the parameters of the list given: @@ -316,659 +316,659 @@ DuelMenuCursorCoords: ; de = initial page scroll offset, initial item (in the visible page) ; hl: 9 bytes with the rest of the parameters PrintCardListItems: - call InitializeCardListParameters - ld hl, wMenuFunctionPointer - ld a, LOW(CardListMenuFunction) - ld [hli], a - ld a, HIGH(CardListMenuFunction) - ld [hli], a - ld a, 2 - ld [wYDisplacementBetweenMenuItems], a - ld a, 1 - ld [wCardListIndicatorYPosition], a + call InitializeCardListParameters + ld hl, wMenuFunctionPointer + ld a, LOW(CardListMenuFunction) + ld [hli], a + ld a, HIGH(CardListMenuFunction) + ld [hli], a + ld a, 2 + ld [wYDisplacementBetweenMenuItems], a + ld a, 1 + ld [wCardListIndicatorYPosition], a ; fallthrough ; like PrintCardListItems, except more parameters are already initialized ; called instead of PrintCardListItems to reload the list after moving up or down ReloadCardListItems: - ld e, SYM_SPACE - ld a, [wListScrollOffset] - or a - jr z, .cant_go_up - ld e, SYM_CURSOR_U + ld e, SYM_SPACE + ld a, [wListScrollOffset] + or a + jr z, .cant_go_up + ld e, SYM_CURSOR_U .cant_go_up - ld a, [wCursorYPosition] - dec a - ld c, a - ld b, 18 - ld a, e - call WriteByteToBGMap0 - ld e, SYM_SPACE - ld a, [wListScrollOffset] - ld hl, wNumMenuItems - add [hl] - ld hl, wNumListItems - cp [hl] - jr nc, .cant_go_down - ld e, SYM_CURSOR_D + ld a, [wCursorYPosition] + dec a + ld c, a + ld b, 18 + ld a, e + call WriteByteToBGMap0 + ld e, SYM_SPACE + ld a, [wListScrollOffset] + ld hl, wNumMenuItems + add [hl] + ld hl, wNumListItems + cp [hl] + jr nc, .cant_go_down + ld e, SYM_CURSOR_D .cant_go_down - ld a, [wNumMenuItems] - add a - add c - dec a - ld c, a - ld a, e - call WriteByteToBGMap0 - ld a, [wListScrollOffset] - ld e, a - ld d, $00 - ld hl, wDuelTempList - add hl, de - ld a, [wNumMenuItems] - ld b, a - ld a, [wListItemXPosition] - ld d, a - ld a, [wCursorYPosition] - ld e, a - ld c, $00 + ld a, [wNumMenuItems] + add a + add c + dec a + ld c, a + ld a, e + call WriteByteToBGMap0 + ld a, [wListScrollOffset] + ld e, a + ld d, $00 + ld hl, wDuelTempList + add hl, de + ld a, [wNumMenuItems] + ld b, a + ld a, [wListItemXPosition] + ld d, a + ld a, [wCursorYPosition] + ld e, a + ld c, $00 .next_card - ld a, [hl] - cp $ff - jr z, .done - push hl - push bc - push de - call LoadCardDataToBuffer1_FromDeckIndex - call DrawCardSymbol - call InitTextPrinting - ld a, [wListItemNameMaxLength] - call CopyCardNameAndLevel - ld hl, wDefaultText - call ProcessText - pop de - pop bc - pop hl - inc hl - ld a, [wNumListItems] - dec a - inc c - cp c - jr c, .done - inc e - inc e - dec b - jr nz, .next_card + ld a, [hl] + cp $ff + jr z, .done + push hl + push bc + push de + call LoadCardDataToBuffer1_FromDeckIndex + call DrawCardSymbol + call InitTextPrinting + ld a, [wListItemNameMaxLength] + call CopyCardNameAndLevel + ld hl, wDefaultText + call ProcessText + pop de + pop bc + pop hl + inc hl + ld a, [wNumListItems] + dec a + inc c + cp c + jr c, .done + inc e + inc e + dec b + jr nz, .next_card .done - ret + ret ; reload a list of cards, except don't print their names Func_2827: - ld a, $01 - ldh [hffb0], a - call ReloadCardListItems - xor a - ldh [hffb0], a - ret + ld a, $01 + ldh [hffb0], a + call ReloadCardListItems + xor a + ldh [hffb0], a + ret ; convert the number at a to TX_SYMBOL text format and write it to wDefaultText ; if the first digit is a 0, delete it and shift the number one tile to the left OneByteNumberToTxSymbol_TrimLeadingZerosAndAlign: - call OneByteNumberToTxSymbol - ld a, [hli] - cp SYM_0 - jr nz, .not_zero - ; shift number one tile to the left - ld a, [hld] - ld [hli], a - ld [hl], SYM_SPACE + call OneByteNumberToTxSymbol + ld a, [hli] + cp SYM_0 + jr nz, .not_zero + ; shift number one tile to the left + ld a, [hld] + ld [hli], a + ld [hl], SYM_SPACE .not_zero - ret + ret ; this function is always loaded to wMenuFunctionPointer by PrintCardListItems ; takes care of things like handling page scrolling and calling the function at wListFunctionPointer CardListMenuFunction: - ldh a, [hDPadHeld] - ld b, a - ld a, [wNumMenuItems] - dec a - ld c, a - ld a, [wCurMenuItem] - bit D_UP_F, b - jr z, .not_up - cp c - jp nz, .continue - ; we're at the top of the page - xor a - ld [wCurMenuItem], a ; set to first item - ld hl, wListScrollOffset - ld a, [hl] - or a ; can we scroll up? - jr z, .no_more_items - dec [hl] ; scroll page up - call ReloadCardListItems - jp .continue + ldh a, [hDPadHeld] + ld b, a + ld a, [wNumMenuItems] + dec a + ld c, a + ld a, [wCurMenuItem] + bit D_UP_F, b + jr z, .not_up + cp c + jp nz, .continue + ; we're at the top of the page + xor a + ld [wCurMenuItem], a ; set to first item + ld hl, wListScrollOffset + ld a, [hl] + or a ; can we scroll up? + jr z, .no_more_items + dec [hl] ; scroll page up + call ReloadCardListItems + jp .continue .not_up - bit D_DOWN_F, b - jr z, .not_down - or a - jr nz, .not_last_visible_item - ; we're at the bottom of the page - ld a, c - ld [wCurMenuItem], a ; set to last item - ld a, [wListScrollOffset] - add c - inc a - ld hl, wNumListItems - cp [hl] ; can we scroll down? - jr z, .no_more_items - ld hl, wListScrollOffset - inc [hl] ; scroll page down - call ReloadCardListItems - jp .continue + bit D_DOWN_F, b + jr z, .not_down + or a + jr nz, .not_last_visible_item + ; we're at the bottom of the page + ld a, c + ld [wCurMenuItem], a ; set to last item + ld a, [wListScrollOffset] + add c + inc a + ld hl, wNumListItems + cp [hl] ; can we scroll down? + jr z, .no_more_items + ld hl, wListScrollOffset + inc [hl] ; scroll page down + call ReloadCardListItems + jp .continue .not_last_visible_item - ; this appears to be a redundant check - ld hl, wListScrollOffset - add [hl] - ld hl, wNumListItems - cp [hl] - jp c, .continue ; should always jump - ld hl, wCurMenuItem - dec [hl] + ; this appears to be a redundant check + ld hl, wListScrollOffset + add [hl] + ld hl, wNumListItems + cp [hl] + jp c, .continue ; should always jump + ld hl, wCurMenuItem + dec [hl] .no_more_items - xor a - ld [wRefreshMenuCursorSFX], a - jp .continue + xor a + ld [wRefreshMenuCursorSFX], a + jp .continue .not_down - bit D_LEFT_F, b - jr z, .not_left - ld a, [wListScrollOffset] - or a - jr z, .continue - ld hl, wNumMenuItems - sub [hl] - jr c, .top_of_page_reached - ld [wListScrollOffset], a - call ReloadCardListItems - jr .continue + bit D_LEFT_F, b + jr z, .not_left + ld a, [wListScrollOffset] + or a + jr z, .continue + ld hl, wNumMenuItems + sub [hl] + jr c, .top_of_page_reached + ld [wListScrollOffset], a + call ReloadCardListItems + jr .continue .top_of_page_reached - call EraseCursor - ld a, [wListScrollOffset] - ld hl, wCurMenuItem - add [hl] - ld c, a - ld hl, wNumMenuItems - sub [hl] - jr nc, .asm_28c4 - add [hl] + call EraseCursor + ld a, [wListScrollOffset] + ld hl, wCurMenuItem + add [hl] + ld c, a + ld hl, wNumMenuItems + sub [hl] + jr nc, .asm_28c4 + add [hl] .asm_28c4 - ld [wCurMenuItem], a - xor a - ld [wListScrollOffset], a - ld [wRefreshMenuCursorSFX], a - call ReloadCardListItems - jr .continue + ld [wCurMenuItem], a + xor a + ld [wListScrollOffset], a + ld [wRefreshMenuCursorSFX], a + call ReloadCardListItems + jr .continue .not_left - bit D_RIGHT_F, b - jr z, .continue - ld a, [wNumMenuItems] - ld hl, wNumListItems - cp [hl] - jr nc, .continue - ld a, [wListScrollOffset] - ld hl, wNumMenuItems - add [hl] - ld c, a - add [hl] - dec a - ld hl, wNumListItems - cp [hl] - jr nc, .asm_28f9 - ld a, c - ld [wListScrollOffset], a - call ReloadCardListItems - jr .continue + bit D_RIGHT_F, b + jr z, .continue + ld a, [wNumMenuItems] + ld hl, wNumListItems + cp [hl] + jr nc, .continue + ld a, [wListScrollOffset] + ld hl, wNumMenuItems + add [hl] + ld c, a + add [hl] + dec a + ld hl, wNumListItems + cp [hl] + jr nc, .asm_28f9 + ld a, c + ld [wListScrollOffset], a + call ReloadCardListItems + jr .continue .asm_28f9 - call EraseCursor - ld a, [wListScrollOffset] - ld hl, wCurMenuItem - add [hl] - ld c, a - ld a, [wNumListItems] - ld hl, wNumMenuItems - sub [hl] - ld [wListScrollOffset], a - ld b, a - ld a, c - sub b - jr nc, .asm_2914 - add [hl] + call EraseCursor + ld a, [wListScrollOffset] + ld hl, wCurMenuItem + add [hl] + ld c, a + ld a, [wNumListItems] + ld hl, wNumMenuItems + sub [hl] + ld [wListScrollOffset], a + ld b, a + ld a, c + sub b + jr nc, .asm_2914 + add [hl] .asm_2914 - ld [wCurMenuItem], a - call ReloadCardListItems + ld [wCurMenuItem], a + call ReloadCardListItems .continue - ld a, [wListScrollOffset] - ld hl, wCurMenuItem - add [hl] - ldh [hCurMenuItem], a - ld a, [wCardListIndicatorYPosition] - cp $ff - jr z, .skip_printing_indicator - ; print <sel_item>/<num_items> - ld c, a - ldh a, [hCurMenuItem] - inc a - call OneByteNumberToTxSymbol_TrimLeadingZeros - ld b, 13 - ld a, 2 - call CopyDataToBGMap0 - ld b, 15 - ld a, SYM_SLASH - call WriteByteToBGMap0 - ld a, [wNumListItems] - call OneByteNumberToTxSymbol_TrimLeadingZeros - ld b, 16 - ld a, 2 - call CopyDataToBGMap0 + ld a, [wListScrollOffset] + ld hl, wCurMenuItem + add [hl] + ldh [hCurMenuItem], a + ld a, [wCardListIndicatorYPosition] + cp $ff + jr z, .skip_printing_indicator + ; print <sel_item>/<num_items> + ld c, a + ldh a, [hCurMenuItem] + inc a + call OneByteNumberToTxSymbol_TrimLeadingZeros + ld b, 13 + ld a, 2 + call CopyDataToBGMap0 + ld b, 15 + ld a, SYM_SLASH + call WriteByteToBGMap0 + ld a, [wNumListItems] + call OneByteNumberToTxSymbol_TrimLeadingZeros + ld b, 16 + ld a, 2 + call CopyDataToBGMap0 .skip_printing_indicator - ld hl, wListFunctionPointer - ld a, [hli] - or [hl] - jr z, .no_list_function - ld a, [hld] - ld l, [hl] - ld h, a - ldh a, [hCurMenuItem] - jp hl ; execute the function at wListFunctionPointer + ld hl, wListFunctionPointer + ld a, [hli] + or [hl] + jr z, .no_list_function + ld a, [hld] + ld l, [hl] + ld h, a + ldh a, [hCurMenuItem] + jp hl ; execute the function at wListFunctionPointer .no_list_function - ldh a, [hKeysPressed] - and A_BUTTON | B_BUTTON - ret z - and B_BUTTON - jr nz, .pressed_b - scf - ret + ldh a, [hKeysPressed] + and A_BUTTON | B_BUTTON + ret z + and B_BUTTON + jr nz, .pressed_b + scf + ret .pressed_b - ld a, $ff - ldh [hCurMenuItem], a - scf - ret + ld a, $ff + ldh [hCurMenuItem], a + scf + ret ; convert the number at a to TX_SYMBOL text format and write it to wDefaultText ; replace leading zeros with SYM_SPACE OneByteNumberToTxSymbol_TrimLeadingZeros: - call OneByteNumberToTxSymbol - ld a, [hl] - cp SYM_0 - ret nz - ld [hl], SYM_SPACE - ret + call OneByteNumberToTxSymbol + ld a, [hl] + cp SYM_0 + ret nz + ld [hl], SYM_SPACE + ret ; convert the number at a to TX_SYMBOL text format and write it to wDefaultText OneByteNumberToTxSymbol: - ld hl, wDefaultText - push hl - ld e, SYM_0 - 1 + ld hl, wDefaultText + push hl + ld e, SYM_0 - 1 .first_digit_loop - inc e - sub 10 - jr nc, .first_digit_loop - ld [hl], e ; first digit - inc hl - add SYM_0 + 10 - ld [hli], a ; second digit - ld [hl], SYM_SPACE - pop hl - ret + inc e + sub 10 + jr nc, .first_digit_loop + ld [hl], e ; first digit + inc hl + add SYM_0 + 10 + ld [hli], a ; second digit + ld [hl], SYM_SPACE + pop hl + ret ; translate the TYPE_* constant in wLoadedCard1Type to an index for CardSymbolTable CardTypeToSymbolID: - ld a, [wLoadedCard1Type] - cp TYPE_TRAINER - jr nc, .trainer_card - cp TYPE_ENERGY - jr c, .pokemon_card - ; energy card - and 7 ; convert energy constant to type constant - ret + ld a, [wLoadedCard1Type] + cp TYPE_TRAINER + jr nc, .trainer_card + cp TYPE_ENERGY + jr c, .pokemon_card + ; energy card + and 7 ; convert energy constant to type constant + ret .trainer_card - ld a, 11 - ret + ld a, 11 + ret .pokemon_card - ld a, [wLoadedCard1Stage] ; different symbol for each evolution stage - add 8 - ret + ld a, [wLoadedCard1Stage] ; different symbol for each evolution stage + add 8 + ret ; return the entry in CardSymbolTable of the TYPE_* constant in wLoadedCard1Type ; also return the first byte of said entry (starting tile number) in a GetCardSymbolData: - call CardTypeToSymbolID - add a - ld c, a - ld b, 0 - ld hl, CardSymbolTable - add hl, bc - ld a, [hl] - ret + call CardTypeToSymbolID + add a + ld c, a + ld b, 0 + ld hl, CardSymbolTable + add hl, bc + ld a, [hl] + ret ; draw, at de, the 2x2 tile card symbol associated to the TYPE_* constant in wLoadedCard1Type DrawCardSymbol: - push hl - push de - push bc - call GetCardSymbolData - dec d - dec d - dec e - ld a, [wConsole] - cp CONSOLE_CGB - jr nz, .tiles - ; CGB-only attrs (palette) - push hl - inc hl - ld a, [hl] - lb bc, 2, 2 - lb hl, 0, 0 - call BankswitchVRAM1 - call FillRectangle - call BankswitchVRAM0 - pop hl + push hl + push de + push bc + call GetCardSymbolData + dec d + dec d + dec e + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .tiles + ; CGB-only attrs (palette) + push hl + inc hl + ld a, [hl] + lb bc, 2, 2 + lb hl, 0, 0 + call BankswitchVRAM1 + call FillRectangle + call BankswitchVRAM0 + pop hl .tiles - ld a, [hl] - lb hl, 1, 2 - lb bc, 2, 2 - call FillRectangle - pop bc - pop de - pop hl - ret + ld a, [hl] + lb hl, 1, 2 + lb bc, 2, 2 + call FillRectangle + pop bc + pop de + pop hl + ret CardSymbolTable: ; starting tile number, cgb palette (grey, yellow/red, green/blue, pink/orange) - db $e0, $01 ; TYPE_ENERGY_FIRE - db $e4, $02 ; TYPE_ENERGY_GRASS - db $e8, $01 ; TYPE_ENERGY_LIGHTNING - db $ec, $02 ; TYPE_ENERGY_WATER - db $f0, $03 ; TYPE_ENERGY_PSYCHIC - db $f4, $03 ; TYPE_ENERGY_FIGHTING - db $f8, $00 ; TYPE_ENERGY_DOUBLE_COLORLESS - db $fc, $02 ; TYPE_ENERGY_UNUSED - db $d0, $02 ; TYPE_PKMN_*, Basic - db $d4, $02 ; TYPE_PKMN_*, Stage 1 - db $d8, $01 ; TYPE_PKMN_*, Stage 2 - db $dc, $02 ; TYPE_TRAINER + db $e0, $01 ; TYPE_ENERGY_FIRE + db $e4, $02 ; TYPE_ENERGY_GRASS + db $e8, $01 ; TYPE_ENERGY_LIGHTNING + db $ec, $02 ; TYPE_ENERGY_WATER + db $f0, $03 ; TYPE_ENERGY_PSYCHIC + db $f4, $03 ; TYPE_ENERGY_FIGHTING + db $f8, $00 ; TYPE_ENERGY_DOUBLE_COLORLESS + db $fc, $02 ; TYPE_ENERGY_UNUSED + db $d0, $02 ; TYPE_PKMN_*, Basic + db $d4, $02 ; TYPE_PKMN_*, Stage 1 + db $d8, $01 ; TYPE_PKMN_*, Stage 2 + db $dc, $02 ; TYPE_TRAINER ; copy the name and level of the card at wLoadedCard1 to wDefaultText ; a = length in number of tiles (the resulting string will be padded with spaces to match it) CopyCardNameAndLevel: - farcall _CopyCardNameAndLevel - ret + farcall _CopyCardNameAndLevel + ret ; sets cursor parameters for navigating in a text box, but using ; default values for the cursor tile (SYM_CURSOR_R) and the tile behind it (SYM_SPACE). ; d,e: coordinates of the cursor SetCursorParametersForTextBox_Default: - lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor - call SetCursorParametersForTextBox + lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor + call SetCursorParametersForTextBox ; fallthrough ; wait until A or B is pressed. ; return carry if A is pressed, nc if B is pressed. erase the cursor either way WaitForButtonAorB: - call DoFrame - call RefreshMenuCursor - ldh a, [hKeysPressed] - bit A_BUTTON_F, a - jr nz, .a_pressed - bit B_BUTTON_F, a - jr z, WaitForButtonAorB - call EraseCursor - scf - ret + call DoFrame + call RefreshMenuCursor + ldh a, [hKeysPressed] + bit A_BUTTON_F, a + jr nz, .a_pressed + bit B_BUTTON_F, a + jr z, WaitForButtonAorB + call EraseCursor + scf + ret .a_pressed - call EraseCursor - or a - ret + call EraseCursor + or a + ret ; sets cursor parameters for navigating in a text box ; d,e: coordinates of the cursor ; b,c: tile numbers of the cursor and of the tile behind it SetCursorParametersForTextBox: - xor a - ld hl, wCurMenuItem - ld [hli], a - ld [hl], d ; wCursorXPosition - inc hl - ld [hl], e ; wCursorYPosition - inc hl - ld [hl], 0 ; wYDisplacementBetweenMenuItems - inc hl - ld [hl], 1 ; wNumMenuItems - inc hl - ld [hl], b ; wCursorTile - inc hl - ld [hl], c ; wTileBehindCursor - ld [wCursorBlinkCounter], a - ret + xor a + ld hl, wCurMenuItem + ld [hli], a + ld [hl], d ; wCursorXPosition + inc hl + ld [hl], e ; wCursorYPosition + inc hl + ld [hl], 0 ; wYDisplacementBetweenMenuItems + inc hl + ld [hl], 1 ; wNumMenuItems + inc hl + ld [hl], b ; wCursorTile + inc hl + ld [hl], c ; wTileBehindCursor + ld [wCursorBlinkCounter], a + ret ; draw a 20x6 text box aligned to the bottom of the screen, ; print the text at hl without letter delay, and wait for A or B pressed DrawWideTextBox_PrintTextNoDelay_Wait: - call DrawWideTextBox_PrintTextNoDelay - jp WaitForWideTextBoxInput + call DrawWideTextBox_PrintTextNoDelay + jp WaitForWideTextBoxInput ; draw a 20x6 text box aligned to the bottom of the screen ; and print the text at hl without letter delay DrawWideTextBox_PrintTextNoDelay: - push hl - call DrawWideTextBox - ld a, 19 - jr DrawTextBox_PrintTextNoDelay + push hl + call DrawWideTextBox + ld a, 19 + jr DrawTextBox_PrintTextNoDelay ; draw a 12x6 text box aligned to the bottom left of the screen ; and print the text at hl without letter delay DrawNarrowTextBox_PrintTextNoDelay: - push hl - call DrawNarrowTextBox - ld a, 11 + push hl + call DrawNarrowTextBox + ld a, 11 ; fallthrough DrawTextBox_PrintTextNoDelay: - lb de, 1, 14 - call AdjustCoordinatesForBGScroll - call InitTextPrintingInTextbox - pop hl - ld a, l - or h - jp nz, PrintTextNoDelay - ld hl, wDefaultText - jp ProcessText + lb de, 1, 14 + call AdjustCoordinatesForBGScroll + call InitTextPrintingInTextbox + pop hl + ld a, l + or h + jp nz, PrintTextNoDelay + ld hl, wDefaultText + jp ProcessText ; draw a 20x6 text box aligned to the bottom of the screen ; and print the text at hl with letter delay DrawWideTextBox_PrintText: - push hl - call DrawWideTextBox - ld a, 19 - lb de, 1, 14 - call AdjustCoordinatesForBGScroll - call InitTextPrintingInTextbox - call EnableLCD - pop hl - jp PrintText + push hl + call DrawWideTextBox + ld a, 19 + lb de, 1, 14 + call AdjustCoordinatesForBGScroll + call InitTextPrintingInTextbox + call EnableLCD + pop hl + jp PrintText ; draw a 12x6 text box aligned to the bottom left of the screen DrawNarrowTextBox: - lb de, 0, 12 - lb bc, 12, 6 - call AdjustCoordinatesForBGScroll - call DrawRegularTextBox - ret + lb de, 0, 12 + lb bc, 12, 6 + call AdjustCoordinatesForBGScroll + call DrawRegularTextBox + ret ; draw a 12x6 text box aligned to the bottom left of the screen, ; print the text at hl without letter delay, and wait for A or B pressed DrawNarrowTextBox_WaitForInput: - call DrawNarrowTextBox_PrintTextNoDelay - xor a - ld hl, NarrowTextBoxMenuParameters - call InitializeMenuParameters - call EnableLCD + call DrawNarrowTextBox_PrintTextNoDelay + xor a + ld hl, NarrowTextBoxMenuParameters + call InitializeMenuParameters + call EnableLCD .wait_A_or_B_loop - call DoFrame - call RefreshMenuCursor - ldh a, [hKeysPressed] - and A_BUTTON | B_BUTTON - jr z, .wait_A_or_B_loop - ret + call DoFrame + call RefreshMenuCursor + ldh a, [hKeysPressed] + and A_BUTTON | B_BUTTON + jr z, .wait_A_or_B_loop + ret NarrowTextBoxMenuParameters: - db 10, 17 ; cursor x, cursor y - db 1 ; y displacement between items - db 1 ; number of items - db SYM_CURSOR_D ; cursor tile number - db SYM_BOX_BOTTOM ; tile behind cursor - dw NULL ; function pointer if non-0 + db 10, 17 ; cursor x, cursor y + db 1 ; y displacement between items + db 1 ; number of items + db SYM_CURSOR_D ; cursor tile number + db SYM_BOX_BOTTOM ; tile behind cursor + dw NULL ; function pointer if non-0 ; draw a 20x6 text box aligned to the bottom of the screen DrawWideTextBox: - lb de, 0, 12 - lb bc, 20, 6 - call AdjustCoordinatesForBGScroll - call DrawRegularTextBox - ret + lb de, 0, 12 + lb bc, 20, 6 + call AdjustCoordinatesForBGScroll + call DrawRegularTextBox + ret ; draw a 20x6 text box aligned to the bottom of the screen, ; print the text at hl with letter delay, and wait for A or B pressed DrawWideTextBox_WaitForInput: - call DrawWideTextBox_PrintText + call DrawWideTextBox_PrintText ; fallthrough ; wait for A or B to be pressed on a wide (20x6) text box WaitForWideTextBoxInput: - xor a - ld hl, WideTextBoxMenuParameters - call InitializeMenuParameters - call EnableLCD + xor a + ld hl, WideTextBoxMenuParameters + call InitializeMenuParameters + call EnableLCD .wait_A_or_B_loop - call DoFrame - call RefreshMenuCursor - ldh a, [hKeysPressed] - and A_BUTTON | B_BUTTON - jr z, .wait_A_or_B_loop - call EraseCursor - ret + call DoFrame + call RefreshMenuCursor + ldh a, [hKeysPressed] + and A_BUTTON | B_BUTTON + jr z, .wait_A_or_B_loop + call EraseCursor + ret WideTextBoxMenuParameters: - db 18, 17 ; cursor x, cursor y - db 1 ; y displacement between items - db 1 ; number of items - db SYM_CURSOR_D ; cursor tile number - db SYM_BOX_BOTTOM ; tile behind cursor - dw NULL ; function pointer if non-0 + db 18, 17 ; cursor x, cursor y + db 1 ; y displacement between items + db 1 ; number of items + db SYM_CURSOR_D ; cursor tile number + db SYM_BOX_BOTTOM ; tile behind cursor + dw NULL ; function pointer if non-0 ; display a two-item horizontal menu with custom text provided in hl and handle input TwoItemHorizontalMenu: - call DrawWideTextBox_PrintText - lb de, 6, 16 ; x, y - ld a, d - ld [wLeftmostItemCursorX], a - lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor - call SetCursorParametersForTextBox - ld a, 1 - ld [wCurMenuItem], a - call EnableLCD - jp HandleYesOrNoMenu.refresh_menu + call DrawWideTextBox_PrintText + lb de, 6, 16 ; x, y + ld a, d + ld [wLeftmostItemCursorX], a + lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor + call SetCursorParametersForTextBox + ld a, 1 + ld [wCurMenuItem], a + call EnableLCD + jp HandleYesOrNoMenu.refresh_menu YesOrNoMenuWithText_SetCursorToYes: - ld a, $01 - ld [wDefaultYesOrNo], a + ld a, $01 + ld [wDefaultYesOrNo], a ; fallthrough ; display a yes / no menu in a 20x8 textbox with custom text provided in hl and handle input ; wDefaultYesOrNo determines whether the cursor initially points to YES or to NO ; returns carry if "no" selected YesOrNoMenuWithText: - call DrawWideTextBox_PrintText + call DrawWideTextBox_PrintText ; fallthrough ; prints the YES / NO menu items at coordinates x,y = 7,16 and handles input ; input: wDefaultYesOrNo. returns carry if "no" selected YesOrNoMenu: - lb de, 7, 16 ; x, y - call PrintYesOrNoItems - lb de, 6, 16 ; x, y - jr HandleYesOrNoMenu + lb de, 7, 16 ; x, y + call PrintYesOrNoItems + lb de, 6, 16 ; x, y + jr HandleYesOrNoMenu ; prints the YES / NO menu items at coordinates x,y = 3,16 and handles input ; input: wDefaultYesOrNo. returns carry if "no" selected YesOrNoMenuWithText_LeftAligned: - call DrawNarrowTextBox_PrintTextNoDelay - lb de, 3, 16 ; x, y - call PrintYesOrNoItems - lb de, 2, 16 ; x, y + call DrawNarrowTextBox_PrintTextNoDelay + lb de, 3, 16 ; x, y + call PrintYesOrNoItems + lb de, 2, 16 ; x, y ; fallthrough HandleYesOrNoMenu: - ld a, d - ld [wLeftmostItemCursorX], a - lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor - call SetCursorParametersForTextBox - ld a, [wDefaultYesOrNo] - ld [wCurMenuItem], a - call EnableLCD - jr .refresh_menu + ld a, d + ld [wLeftmostItemCursorX], a + lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor + call SetCursorParametersForTextBox + ld a, [wDefaultYesOrNo] + ld [wCurMenuItem], a + call EnableLCD + jr .refresh_menu .wait_button_loop - call DoFrame - call RefreshMenuCursor - ldh a, [hKeysPressed] - bit A_BUTTON_F, a - jr nz, .a_pressed - ldh a, [hDPadHeld] - and D_RIGHT | D_LEFT - jr z, .wait_button_loop - ; left or right pressed, so switch to the other menu item - ld a, SFX_01 - call PlaySFX - call EraseCursor + call DoFrame + call RefreshMenuCursor + ldh a, [hKeysPressed] + bit A_BUTTON_F, a + jr nz, .a_pressed + ldh a, [hDPadHeld] + and D_RIGHT | D_LEFT + jr z, .wait_button_loop + ; left or right pressed, so switch to the other menu item + ld a, SFX_01 + call PlaySFX + call EraseCursor .refresh_menu - ld a, [wLeftmostItemCursorX] - ld c, a - ; default to the second option (NO) - ld hl, wCurMenuItem - ld a, [hl] - xor $1 - ld [hl], a - ; x separation between left and right items is 4 tiles - add a - add a - add c - ld [wCursorXPosition], a - xor a - ld [wCursorBlinkCounter], a - jr .wait_button_loop + ld a, [wLeftmostItemCursorX] + ld c, a + ; default to the second option (NO) + ld hl, wCurMenuItem + ld a, [hl] + xor $1 + ld [hl], a + ; x separation between left and right items is 4 tiles + add a + add a + add c + ld [wCursorXPosition], a + xor a + ld [wCursorBlinkCounter], a + jr .wait_button_loop .a_pressed - ld a, [wCurMenuItem] - ldh [hCurMenuItem], a - or a - jr nz, .no + ld a, [wCurMenuItem] + ldh [hCurMenuItem], a + or a + jr nz, .no ;.yes - ld [wDefaultYesOrNo], a ; 0 - ret + ld [wDefaultYesOrNo], a ; 0 + ret .no - xor a - ld [wDefaultYesOrNo], a ; 0 - ld a, 1 - ldh [hCurMenuItem], a - scf - ret + xor a + ld [wDefaultYesOrNo], a ; 0 + ld a, 1 + ldh [hCurMenuItem], a + scf + ret ; prints "YES NO" at de PrintYesOrNoItems: - call AdjustCoordinatesForBGScroll - ldtx hl, YesOrNoText - call InitTextPrinting_ProcessTextFromID - ret + call AdjustCoordinatesForBGScroll + ldtx hl, YesOrNoText + call InitTextPrinting_ProcessTextFromID + ret ContinueDuel: - ld a, BANK(_ContinueDuel) - call BankswitchROM - jp _ContinueDuel + ld a, BANK(_ContinueDuel) + call BankswitchROM + jp _ContinueDuel |