diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-06-10 21:57:21 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-06-10 21:57:21 -0400 |
commit | 2327c6b7c4c39061b9fac172b10a931e582e2519 (patch) | |
tree | 400ff6e229f206f33fe2701895b8fbf16b70663f | |
parent | 364289640d4b60708a86f67282480a44ec1862c3 (diff) |
2D Menu functions
-rwxr-xr-x | constants/music_constants.asm | 2 | ||||
-rw-r--r-- | home/menu.asm | 4 | ||||
-rw-r--r-- | home/menu_window.asm | 277 | ||||
-rw-r--r-- | home/scrolling_menu.asm | 2 | ||||
-rw-r--r-- | shim.sym | 4 | ||||
-rw-r--r-- | wram.asm | 16 |
6 files changed, 296 insertions, 9 deletions
diff --git a/constants/music_constants.asm b/constants/music_constants.asm index 0f7b5bc..5009983 100755 --- a/constants/music_constants.asm +++ b/constants/music_constants.asm @@ -13,3 +13,5 @@ const MUSIC_SPOTTED_ROCKET ; 0A const MUSIC_VICTORY_TRAINER ; 0B const MUSIC_EVOLUTION ; 0C + +SE_SELECT EQU 5 diff --git a/home/menu.asm b/home/menu.asm index 2d8f1f3..4c8e957 100644 --- a/home/menu.asm +++ b/home/menu.asm @@ -60,7 +60,7 @@ VerticalMenu:: ; 00:1d87 bit 7, a jr z, .asm_1daa call InitVerticalMenuCursor - call Function1a7c + call Get2DMenuJoypad bit 1, a jr z, .asm_1dac .asm_1daa: ; 00:1daa @@ -332,7 +332,7 @@ Function1f27:: ; 00:1f27 or D_LEFT | D_RIGHT ld [hl], a .asm_1f3f: ; 00:1f3f - call Function1a7c + call Get2DMenuJoypad pop de bit 0, a jr nz, .asm_1f66 diff --git a/home/menu_window.asm b/home/menu_window.asm index b5082ca..104a8eb 100644 --- a/home/menu_window.asm +++ b/home/menu_window.asm @@ -1,6 +1,281 @@ include "constants.asm" -SECTION "Menu Window Functions", ROM0 [$1bf4] +SECTION "Menu Window Functions", ROM0 [$1a64] + +SetMenuAttributes:: + push hl + push bc + ld hl, wMenuData3 + ld b, $8 +.asm_1a6b: ; 00:1a6b + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_1a6b + ld a, $1 + ld [hli], a + ld [hli], a + xor a + ld [hli], a + ld [hli], a + ld [hli], a + pop bc + pop hl + ret + +Get2DMenuJoypad:: ; 00:1a7c + call Place2DMenuCursor + ld hl, w2DMenuFlags + 1 + res 7, [hl] +.loop: ; 00:1a84 + call Move2DMenuCursor + call WaitBGMap +.asm_1a8a: ; 00:1a8a + call UpdateTime + call UpdateTimeOfDayPalettes + call Menu_WasButtonPressed + jr c, .asm_1a9f + ld a, [w2DMenuFlags] + bit 7, a + jp nz, .done + jr .asm_1a8a + +.asm_1a9f: ; 00:1a9f + call _2DMenuInterpretJoypad + jp c, .done + ld a, [w2DMenuFlags] + bit 7, a + jr nz, .done + ldh a, [hJoySum] + ld b, a + ld a, [wMenuJoypadFilter] + and b + jp z, .loop +.done: ; 00:1ab6 + ldh a, [hJoyDown] + and A_BUTTON | B_BUTTON + jr z, .asm_1ac4 + push de + ld de, SE_SELECT + call PlaySFX + pop de +.asm_1ac4: ; 00:1ac4 + ldh a, [hJoySum] + ret + +Menu_WasButtonPressed:: ; 00:1ac7 + ld a, [w2DMenuFlags] + bit 6, a + jr z, .asm_1ad6 + callba PlaySpriteAnimationsAndDelayFrame +.asm_1ad6: ; 00:1ad6 + call GetJoypadDebounced + ldh a, [hJoySum] + and a + ret z + scf + ret + +_2DMenuInterpretJoypad:: ; 00:1adf + ldh a, [hJoySum] + bit A_BUTTON_F, a + jp nz, .PressedABStartOrSelect + bit B_BUTTON_F, a + jp nz, .PressedABStartOrSelect + bit SELECT_F, a + jp nz, .PressedABStartOrSelect + bit START_F, a + jp nz, .PressedABStartOrSelect + bit D_RIGHT_F, a + jr nz, .PressedRight + bit D_LEFT_F, a + jr nz, .PressedLeft + bit D_UP_F, a + jr nz, .PressedUp + bit D_DOWN_F, a + jr nz, .PressedDown + and a + ret + +.SetFlag15AndCarry: ; 00:1b07 + ld hl, w2DMenuFlags + 1 + set 7, [hl] + scf + ret + +.PressedDown: ; 00:1b0e + ld hl, wMenuCursorY + ld a, [w2DMenuNumRows] + cp [hl] + jr z, .asm_1b1a + inc [hl] + xor a + ret + +.asm_1b1a: ; 00:1b1a + ld a, [w2DMenuFlags] + bit 5, a + jr nz, .asm_1b28 + bit 3, a + jp nz, .SetFlag15AndCarry + xor a + ret + +.asm_1b28: ; 00:1b28 + ld [hl], $1 + xor a + ret + +.PressedUp: ; 00:1b2c + ld hl, wMenuCursorY + ld a, [hl] + dec a + jr z, .asm_1b36 + ld [hl], a + xor a + ret + +.asm_1b36: ; 00:1b36 + ld a, [w2DMenuFlags] + bit 5, a + jr nz, .asm_1b44 + bit 2, a + jp nz, .SetFlag15AndCarry + xor a + ret + +.asm_1b44: ; 00:1b44 + ld a, [w2DMenuNumRows] + ld [hl], a + xor a + ret + +.PressedLeft: ; 00:1b4a + ld hl, wMenuCursorX + ld a, [hl] + dec a + jr z, .asm_1b54 + ld [hl], a + xor a + ret + +.asm_1b54: ; 00:1b54 + ld a, [w2DMenuFlags] + bit 4, a + jr nz, .asm_1b62 + bit 1, a + jp nz, .SetFlag15AndCarry + xor a + ret + +.asm_1b62: ; 00:1b62 + ld a, [w2DMenuNumCols] + ld [hl], a + xor a + ret + +.PressedRight: ; 00:1b68 + ld hl, wMenuCursorX + ld a, [w2DMenuNumCols] + cp [hl] + jr z, .asm_1b74 + inc [hl] + xor a + ret + +.asm_1b74: ; 00:1b74 + ld a, [w2DMenuFlags] + bit 4, a + jr nz, .asm_1b82 + bit 0, a + jp nz, .SetFlag15AndCarry + xor a + ret + +.asm_1b82: ; 00:1b82 + ld [hl], $1 + xor a + ret + +.PressedABStartOrSelect: ; 00:1b86 + xor a + ret + +Move2DMenuCursor:: ; 00:1b88 + ld hl, wCursorCurrentTile + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hl] + cp $ed + jr nz, Place2DMenuCursor + ld a, [wCursorOffCharacter] + ld [hl], a +Place2DMenuCursor:: ; 00:1b97 + ld a, [w2DMenuCursorInitY] + ld b, a + ld a, [w2DMenuCursorInitX] + ld c, a + call Coord2Tile + ld a, [w2DMenuCursorOffsets] + swap a + and $f + ld c, a + ld a, [wMenuCursorY] + ld b, a + xor a + dec b + jr z, .asm_1bb6 +.asm_1bb2: ; 00:1bb2 + add c + dec b + jr nz, .asm_1bb2 +.asm_1bb6: ; 00:1bb6 + ld c, SCREEN_WIDTH + call AddNTimes + ld a, [w2DMenuCursorOffsets] + and $f + ld c, a + ld a, [wMenuCursorX] + ld b, a + xor a + dec b + jr z, .asm_1bcd +.asm_1bc9: ; 00:1bc9 + add c + dec b + jr nz, .asm_1bc9 +.asm_1bcd: ; 00:1bcd + ld c, a + add hl, bc + ld a, [hl] + cp $ed + jr z, .asm_1bd9 + ld [wCursorOffCharacter], a + ld [hl], $ed +.asm_1bd9: ; 00:1bd9 + ld a, l + ld [wCursorCurrentTile], a + ld a, h + ld [wCursorCurrentTile + 1], a + ret + +PlaceHollowCursor:: + ld hl, wCursorCurrentTile + ld a, [hli] + ld h, [hl] + ld l, a + ld [hl], $ec + ret + +HideCursor:: + ld hl, wCursorCurrentTile + ld a, [hli] + ld h, [hl] + ld l, a + ld [hl], $7f + ret PushWindow:: ; 00:1bf4 ld hl, PlaceWaitingText diff --git a/home/scrolling_menu.asm b/home/scrolling_menu.asm index 28d3d3e..23e2f1a 100644 --- a/home/scrolling_menu.asm +++ b/home/scrolling_menu.asm @@ -77,7 +77,7 @@ Function3872:: ; 00:3872 jr asm_387d Function3875:: - callab Function8cd0c + callab PlaySpriteAnimationsAndDelayFrame asm_387d: ; 00:387d pop bc call GetJoypad @@ -1,5 +1,4 @@ ; ROM0 -00:1A7C Function1a7c 00:202C Function202c 00:2C05 StartMenuCheck 00:2F1D Function2f1d @@ -191,7 +190,7 @@ 23:4940 Function8c940 23:49C6 Function8c9c6 23:4CFD InitEffectObject -23:4D0C Function8cd0c +23:4D0C PlaySpriteAnimationsAndDelayFrame 23:4d13 EffectObjectJumpNoDelay 23:60cc MenuMonIconGfx 23:71CB Function_8f1cb @@ -466,7 +465,6 @@ 3F:6755 PicTestMenu.loop 00:CB6F wPlayerStepDirection -00:CC22 wMenuData3 00:CE67 wPlayerName 01:D165 wTMCounts @@ -294,10 +294,22 @@ wMenuDataIndicesPointer:: dw ; cc14 wMenuDataDisplayFunctionPointer:: dw ; cc16 wMenuDataPointerTableAddr:: dw ; cc18 -SECTION "CC2A", WRAM0[$CC29] - +SECTION "MenuData3", WRAM0[$CC22] +wMenuData3:: ; cc22 + +w2DMenuCursorInitY:: db ; cc22 +w2DMenuCursorInitX:: db ; cc23 +w2DMenuNumRows:: db ; cc24 +w2DMenuNumCols:: db ; cc25 +w2DMenuFlags:: dw ; cc26 +w2DMenuCursorOffsets:: db ; cc28 wMenuJoypadFilter:: db ; cc29 +w2DMenuDataEnd:: + wMenuCursorY:: db ; cc2a +wMenuCursorX:: db ; cc2b +wCursorOffCharacter:: db ; cc2c +wCursorCurrentTile:: dw ; cc2d SECTION "CC32", WRAM0[$CC32] ; Please merge when more is disassembled wVBlankJoyFrameCounter: db ; cc32 |