summaryrefslogtreecommitdiff
path: root/engine/menu/start_menu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/menu/start_menu.asm')
-rwxr-xr-xengine/menu/start_menu.asm88
1 files changed, 88 insertions, 0 deletions
diff --git a/engine/menu/start_menu.asm b/engine/menu/start_menu.asm
new file mode 100755
index 00000000..774f604d
--- /dev/null
+++ b/engine/menu/start_menu.asm
@@ -0,0 +1,88 @@
+DisplayStartMenu:: ; 2acd (0:2acd)
+ ld a,$04 ; hardcoded Bank, not sure what's it refers to
+ ld [H_LOADEDROMBANK],a
+ ld [$2000],a ; ROM bank 4
+ ld a,[$d700] ; walking/biking/surfing
+ ld [$d11a],a
+ ld a, (SFX_02_3f - SFX_Headers_02) / 3 ; Start menu sound
+ call PlaySound
+
+RedisplayStartMenu:: ; 2adf (0:2adf)
+ callba DrawStartMenu
+ callba PrintSafariZoneSteps ; print Safari Zone info, if in Safari Zone
+ call UpdateSprites ; move sprites
+.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
+ ld a,[$d74b]
+ bit 5,a ; does the player have the 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
+ ld a,[$d74b]
+ bit 5,a ; does the player have the 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 [$cc2d],a ; save current menu item ID
+ ld a,b
+ and a,%00001010 ; was the Start button or B button pressed?
+ jp nz,CloseStartMenu
+ call SaveScreenTilesToBuffer2 ; copy background from wTileMap to wTileMapBackup2
+ ld a,[$d74b]
+ bit 5,a ; does the player have the pokedex?
+ ld a,[wCurrentMenuItem]
+ jr nz,.displayMenuItem
+ inc a ; adjust position to account for missing pokedex menu item
+.displayMenuItem
+ cp a,0
+ jp z,StartMenu_Pokedex
+ cp a,1
+ jp z,StartMenu_Pokemon
+ cp a,2
+ jp z,StartMenu_Item
+ cp a,3
+ jp z,StartMenu_TrainerInfo
+ cp a,4
+ jp z,StartMenu_SaveReset
+ cp a,5
+ jp z,StartMenu_Option
+
+; EXIT falls through to here
+CloseStartMenu:: ; 2b70 (0:2b70)
+ call GetJoypadState
+ ld a,[H_NEWLYPRESSEDBUTTONS]
+ bit 0,a ; was A button newly pressed?
+ jr nz,CloseStartMenu
+ call LoadTextBoxTilePatterns
+ jp CloseTextDisplay