summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElectroDeoxys <ElectroDeoxys@gmail.com>2021-09-14 22:10:12 +0100
committerElectroDeoxys <ElectroDeoxys@gmail.com>2021-09-14 22:10:12 +0100
commit8dee6b7a11e85d6d4b9f8ec9fb9d53a499fd37dc (patch)
tree47501aced2d256052b8f78bc97328d5af5703add
parent0017fc2d171c87d7bab4c9be90e1069ae95a8071 (diff)
Fix wrong identation in new home files
-rw-r--r--src/home/card_data.asm6
-rw-r--r--src/home/effect_commands.asm130
-rw-r--r--src/home/menus.asm1480
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