summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-06-10 21:57:21 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-06-10 21:57:21 -0400
commit2327c6b7c4c39061b9fac172b10a931e582e2519 (patch)
tree400ff6e229f206f33fe2701895b8fbf16b70663f
parent364289640d4b60708a86f67282480a44ec1862c3 (diff)
2D Menu functions
-rwxr-xr-xconstants/music_constants.asm2
-rw-r--r--home/menu.asm4
-rw-r--r--home/menu_window.asm277
-rw-r--r--home/scrolling_menu.asm2
-rw-r--r--shim.sym4
-rw-r--r--wram.asm16
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
diff --git a/shim.sym b/shim.sym
index ef3e447..ddaee85 100644
--- a/shim.sym
+++ b/shim.sym
@@ -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
diff --git a/wram.asm b/wram.asm
index a1f2fc0..9eb30a2 100644
--- a/wram.asm
+++ b/wram.asm
@@ -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