summaryrefslogtreecommitdiff
path: root/home/start_menu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/start_menu.asm')
-rwxr-xr-xhome/start_menu.asm85
1 files changed, 85 insertions, 0 deletions
diff --git a/home/start_menu.asm b/home/start_menu.asm
new file mode 100755
index 00000000..eb4b4f2d
--- /dev/null
+++ b/home/start_menu.asm
@@ -0,0 +1,85 @@
+DisplayStartMenu::
+ ld a, BANK(StartMenu_Pokedex)
+ ld [H_LOADEDROMBANK], a
+ ld [MBC1RomBank], a
+ ld a, [wWalkBikeSurfState] ; walking/biking/surfing
+ ld [wWalkBikeSurfStateCopy], a
+ ld a, SFX_START_MENU
+ call PlaySound
+
+RedisplayStartMenu::
+ callba DrawStartMenu
+ callba PrintSafariZoneSteps ; print Safari Zone info, if in Safari Zone
+ call UpdateSprites
+.loop
+ call HandleMenuInput
+ ld b, a
+.checkIfUpPressed
+ bit 6, a ; was Up pressed?
+ jr z, .checkIfDownPressed
+ ld a, [wCurrentMenuItem] ; menu selection
+ and a
+ jr nz, .loop
+ ld a, [wLastMenuItem]
+ and a
+ jr nz, .loop
+; if the player pressed tried to go past the top item, wrap around to the bottom
+ CheckEvent EVENT_GOT_POKEDEX
+ ld a, 6 ; there are 7 menu items with the pokedex, so the max index is 6
+ jr nz, .wrapMenuItemId
+ dec a ; there are only 6 menu items without the pokedex
+.wrapMenuItemId
+ ld [wCurrentMenuItem], a
+ call EraseMenuCursor
+ jr .loop
+.checkIfDownPressed
+ bit 7, a
+ jr z, .buttonPressed
+; if the player pressed tried to go past the bottom item, wrap around to the top
+ CheckEvent EVENT_GOT_POKEDEX
+ ld a, [wCurrentMenuItem]
+ ld c, 7 ; there are 7 menu items with the pokedex
+ jr nz, .checkIfPastBottom
+ dec c ; there are only 6 menu items without the pokedex
+.checkIfPastBottom
+ cp c
+ jr nz, .loop
+; the player went past the bottom, so wrap to the top
+ xor a
+ ld [wCurrentMenuItem], a
+ call EraseMenuCursor
+ jr .loop
+.buttonPressed ; A, B, or Start button pressed
+ call PlaceUnfilledArrowMenuCursor
+ ld a, [wCurrentMenuItem]
+ ld [wBattleAndStartSavedMenuItem], a ; save current menu selection
+ ld a, b
+ and %00001010 ; was the Start button or B button pressed?
+ jp nz, CloseStartMenu
+ call SaveScreenTilesToBuffer2 ; copy background from wTileMap to wTileMapBackup2
+ CheckEvent EVENT_GOT_POKEDEX
+ ld a, [wCurrentMenuItem]
+ jr nz, .displayMenuItem
+ inc a ; adjust position to account for missing pokedex menu item
+.displayMenuItem
+ cp 0
+ jp z, StartMenu_Pokedex
+ cp 1
+ jp z, StartMenu_Pokemon
+ cp 2
+ jp z, StartMenu_Item
+ cp 3
+ jp z, StartMenu_TrainerInfo
+ cp 4
+ jp z, StartMenu_SaveReset
+ cp 5
+ jp z, StartMenu_Option
+
+; EXIT falls through to here
+CloseStartMenu::
+ call Joypad
+ ld a, [hJoyPressed]
+ bit 0, a ; was A button newly pressed?
+ jr nz, CloseStartMenu
+ call LoadTextBoxTilePatterns
+ jp CloseTextDisplay