ref: a8b025291a642d3682305df2c09c03be69651af3
dir: /engine/pokemon/mon_submenu.asm/
INCLUDE "data/mon_menu.asm" MonSubmenu: xor a ldh [hBGMapMode], a call GetMonSubmenuItems farcall FreezeMonIcons ld hl, .MenuHeader call LoadMenuHeader call .GetTopCoord call PopulateMonMenu ld a, 1 ldh [hBGMapMode], a call MonMenuLoop ld [wMenuSelection], a call ExitMenu ret .MenuHeader: db MENU_BACKUP_TILES ; flags menu_coords 6, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 dw 0 db 1 ; default option .GetTopCoord: ; [wMenuBorderTopCoord] = 1 + [wMenuBorderBottomCoord] - 2 * ([wMonSubmenuCount] + 1) ld a, [wMonSubmenuCount] inc a add a ld b, a ld a, [wMenuBorderBottomCoord] sub b inc a ld [wMenuBorderTopCoord], a call MenuBox ret MonMenuLoop: .loop ld a, MENU_UNUSED_3 | MENU_BACKUP_TILES_2 ; flags ld [wMenuDataFlags], a ld a, [wMonSubmenuCount] ld [wMenuDataItems], a call InitVerticalMenuCursor ld hl, w2DMenuFlags1 set 6, [hl] call StaticMenuJoypad ld de, SFX_READ_TEXT_2 call PlaySFX ldh a, [hJoyPressed] bit A_BUTTON_F, a jr nz, .select bit B_BUTTON_F, a jr nz, .cancel jr .loop .cancel ld a, MONMENUITEM_CANCEL ret .select ld a, [wMenuCursorY] dec a ld c, a ld b, 0 ld hl, wMonSubmenuItems add hl, bc ld a, [hl] ret PopulateMonMenu: call MenuBoxCoord2Tile ld bc, 2 * SCREEN_WIDTH + 2 add hl, bc ld de, wMonSubmenuItems .loop ld a, [de] inc de cp -1 ret z push de push hl call GetMonMenuString pop hl call PlaceString ld bc, 2 * SCREEN_WIDTH add hl, bc pop de jr .loop GetMonMenuString: ld hl, MonMenuOptions + 1 ld de, 3 call IsInArray dec hl ld a, [hli] cp MONMENU_MENUOPTION jr z, .NotMove inc hl ld a, [hl] ld [wNamedObjectIndex], a call GetMoveName ret .NotMove: inc hl ld a, [hl] dec a ld hl, MonMenuOptionStrings call GetNthString ld d, h ld e, l ret GetMonSubmenuItems: call ResetMonSubmenu ld a, [wCurPartySpecies] cp EGG jr z, .egg ld a, [wLinkMode] and a jr nz, .skip_moves ld a, MON_MOVES call GetPartyParamLocation ld d, h ld e, l ld c, NUM_MOVES .loop push bc push de ld a, [de] and a jr z, .next push hl call IsFieldMove pop hl jr nc, .next call AddMonMenuItem .next pop de inc de pop bc dec c jr nz, .loop .skip_moves ld a, MONMENUITEM_STATS call AddMonMenuItem ld a, MONMENUITEM_SWITCH call AddMonMenuItem ld a, MONMENUITEM_MOVE call AddMonMenuItem ld a, [wLinkMode] and a jr nz, .skip2 push hl ld a, MON_ITEM call GetPartyParamLocation ld d, [hl] farcall ItemIsMail pop hl ld a, MONMENUITEM_MAIL jr c, .ok ld a, MONMENUITEM_ITEM .ok call AddMonMenuItem .skip2 ld a, [wMonSubmenuCount] cp NUM_MONMENU_ITEMS jr z, .ok2 ld a, MONMENUITEM_CANCEL call AddMonMenuItem .ok2 call TerminateMonSubmenu ret .egg ld a, MONMENUITEM_STATS call AddMonMenuItem ld a, MONMENUITEM_SWITCH call AddMonMenuItem ld a, MONMENUITEM_CANCEL call AddMonMenuItem call TerminateMonSubmenu ret IsFieldMove: ld b, a ld hl, MonMenuOptions .next ld a, [hli] cp -1 jr z, .nope cp MONMENU_MENUOPTION jr z, .nope ld d, [hl] inc hl ld a, [hli] cp b jr nz, .next ld a, d scf .nope ret ResetMonSubmenu: xor a ld [wMonSubmenuCount], a ld hl, wMonSubmenuItems ld bc, NUM_MONMENU_ITEMS + 1 call ByteFill ret TerminateMonSubmenu: ld a, [wMonSubmenuCount] ld e, a ld d, 0 ld hl, wMonSubmenuItems add hl, de ld [hl], -1 ret AddMonMenuItem: push hl push de push af ld a, [wMonSubmenuCount] ld e, a inc a ld [wMonSubmenuCount], a ld d, 0 ld hl, wMonSubmenuItems add hl, de pop af ld [hl], a pop de pop hl ret BattleMonMenu: ld hl, .MenuHeader call CopyMenuHeader xor a ldh [hBGMapMode], a call MenuBox call UpdateSprites call PlaceVerticalMenuItems call WaitBGMap call CopyMenuData ld a, [wMenuDataFlags] bit 7, a jr z, .set_carry call InitVerticalMenuCursor ld hl, w2DMenuFlags1 set 6, [hl] call StaticMenuJoypad ld de, SFX_READ_TEXT_2 call PlaySFX ldh a, [hJoyPressed] bit B_BUTTON_F, a jr z, .clear_carry ret z .set_carry scf ret .clear_carry and a ret .MenuHeader: db 0 ; flags menu_coords 11, 11, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 dw .MenuData db 1 ; default option .MenuData: db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags db 3 ; items db "SWITCH@" db "STATS@" db "CANCEL@"