Files

217 lines
3.2 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
LoadBattleMenu::
ld hl, BattleMenuHeader
jr CommonBattleMenu
; Unreferenced.
SafariBattleMenu::
ld hl, SafariBattleMenuHeader
; fallthrough
CommonBattleMenu:
call LoadMenuHeader
ld a, [wBattleMenuCursorPosition]
ld [wMenuCursorPosition], a
call Battle_2DMenu
ld a, [wMenuCursorPosition]
ld [wBattleMenuCursorPosition], a
call ExitMenu
ret
BattleMenuHeader:
db MENU_BACKUP_TILES
menu_coords 9, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw .MenuData
db 1
.MenuData:
db STATICMENU_CURSOR
dn 2, 2
db 5
db "たたかう@" ; "FIGHT"
db "どうぐ@" ; "ITEM"
db "#@" ; "<PK><MN>"
db "にげる@" ; "RUN"
SafariBattleMenuHeader:
db MENU_BACKUP_TILES
menu_coords 0, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw .MenuData
db 1
.MenuData:
db STATICMENU_CURSOR
dn 2, 2
db 11
db "サファリボール×   @" ; "SAFARI BALL× @"
db "エサをなげる@" ; "THROW BAIT"
db "いしをなげる@" ; "THROW ROCK"
db "にげる@" ; "RUN"
Battle_2DMenu:
call CopyMenuData
call MenuBox
ld a, [wMenuData_2DMenuDimensions]
ld b, a
and $0f
ld [wBattleMenuRows], a ; rows
ld a, b
and $f0
swap a
ld [wBattleMenuColumns], a ; columns
call .PlaceStrings
call .InitAndHandleCursor
call StaticMenuJoypad
ldh a, [hJoySum]
bit B_PAD_SELECT, a
jr nz, .quit
ld a, [w2DMenuNumRows]
ld c, a
ld a, [wMenuCursorY]
dec a
call .GetNewCursorOffset
ld c, a
ld a, [wMenuCursorX]
add c
ld [wMenuCursorPosition], a
and a
ret
.quit
scf
ret
.GetNewCursorOffset:
and a
ret z
push bc
ld b, a
xor a
.loop
add c
dec b
jr nz, .loop
pop bc
ret
.GetNewCursorRow: ; unreferenced
ld b, 0
.loop2
inc b
sub c
jr nc, .loop2
dec b
add c
ret
.PlaceStrings:
ld hl, wMenuDataPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld de, 3
add hl, de
ld d, h
ld e, l
call GetMenuTextStartCoord
call Coord2Tile
ld a, [wBattleMenuRows]
ld b, a
.column_loop
push bc
push hl
ld a, [wBattleMenuColumns]
ld c, a
.row_loop
push bc
call PlaceString
inc de
ld a, [wMenuData_2DMenuSpacing]
ld c, a
ld b, 0
add hl, bc
pop bc
dec c
jr nz, .row_loop
pop hl
ld bc, 2 * SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .column_loop
ret
.InitAndHandleCursor:
call GetMenuTextStartCoord
ld a, b
ld [w2DMenuCursorInitY], a
dec c
ld a, c
ld [w2DMenuCursorInitX], a
ld a, [wBattleMenuRows]
ld [w2DMenuNumRows], a
ld a, [wBattleMenuColumns]
ld [w2DMenuNumCols], a
ld a, [wMenuDataFlags]
ld d, a
bit STATICMENU_WRAP_F, d
ld a, 0
jr z, .no_wrap
ld a, _2DMENU_WRAP_LEFT_RIGHT | _2DMENU_WRAP_UP_DOWN
.no_wrap
ld [w2DMenuFlags1], a
ld a, [wMenuData_2DMenuSpacing]
or $20
ld [w2DMenuCursorOffsets], a
ld a, PAD_A | PAD_SELECT
ld [wMenuJoypadFilter], a
ld a, [w2DMenuNumCols]
ld e, a
ld a, [wMenuCursorPosition]
ld b, a
xor a
ld d, 0
.loop3
inc d
add e
cp b
jr c, .loop3
sub e
ld c, a
ld a, b
sub c
and a
jr z, .left_wrap
cp e
jr z, .right_wrap
jr c, .right_wrap
.left_wrap
ld a, 1
.right_wrap
ld [wMenuCursorX], a
ld a, [w2DMenuNumRows]
ld e, a
ld a, d
and a
jr z, .up_wrap
cp e
jr z, .down_wrap
jr c, .down_wrap
.up_wrap
ld a, 1
.down_wrap
ld [wMenuCursorY], a
xor a
ld [wCursorOffCharacter], a
ld [wCursorCurrentTile], a
ld [wCursorCurrentTile + 1], a
ret