summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-06-08 21:19:11 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-06-08 21:19:11 -0400
commit32b7db0e57f73b855aaba09b946c92dcc3f5fe49 (patch)
treeb6285936be10ecc8b280b51f877305479c5c9ced
parentc0680a94e426496088d67ea7dfeded2882ffd314 (diff)
home/menu_window.asm
-rw-r--r--home/menu.asm8
-rw-r--r--home/menu_window.asm246
-rw-r--r--shim.sym16
-rw-r--r--wram.asm2
4 files changed, 255 insertions, 17 deletions
diff --git a/home/menu.asm b/home/menu.asm
index 64d3f9a..2d8f1f3 100644
--- a/home/menu.asm
+++ b/home/menu.asm
@@ -210,15 +210,15 @@ Function1e8a:: ; 00:1e8a
ldh [hBGMapMode], a
xor a
call OpenSRAM
- call Function1cae
+ call GetWindowStackTop
ld a, l
ld [wWindowStackPointer], a
ld a, h
ld [wWindowStackPointer + 1], a
- call Function1c7a
+ call PopWindow
ld d, h
ld e, l
- call Function1c60
+ call RestoreTileBackup
call CloseSRAM
ld hl, wWindowStackSize
dec [hl]
@@ -271,7 +271,7 @@ GetMenuIndexSet:: ; 00:1ec3
Function1ee9:: ; 1ee9
call MenuBoxCoord2Tile
- call Function1c86
+ call GetMenuBoxDims
ld a, [wMenuDataItems]
add a
cp b
diff --git a/home/menu_window.asm b/home/menu_window.asm
new file mode 100644
index 0000000..c4d3842
--- /dev/null
+++ b/home/menu_window.asm
@@ -0,0 +1,246 @@
+include "constants.asm"
+
+SECTION "Menu Window Functions", ROM0 [$1bf4]
+
+PushWindow:: ; 00:1bf4
+ ld hl, PlaceWaitingText
+ ld a, $9
+ jp FarCall_hl
+
+ExitMenu:: ; 00:1bfc
+ push af
+ callab _ExitMenu
+ call Function1c0a
+ pop af
+ ret
+
+Function1c0a:: ; 00:1c0a
+ ld a, [wVramState]
+ bit 0, a
+ ret z
+
+ xor a
+ call OpenSRAM
+ hlcoord 0, 0
+ ld de, sSpriteBuffer0
+ ld bc, $168
+ call CopyBytes
+ call CloseSRAM
+
+ call OverworldTextModeSwitch
+
+ xor a
+ call OpenSRAM
+ ld hl, sSpriteBuffer0
+ decoord 0, 0
+ ld bc, $168
+.asm_1c33: ; 00:1c33
+ ld a, [hl]
+ cp $61
+ jr c, .asm_1c39
+ ld [de], a
+.asm_1c39: ; 00:1c39
+ inc hl
+ inc de
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_1c33
+ call CloseSRAM
+
+ ret
+
+InitVerticalMenuCursor:: ; 00:1c44
+ jpab _InitVerticalMenuCursor
+
+CloseWindow:: ; 00:1c4c
+ push af
+ call ExitMenu
+ call WaitBGMap
+ call UpdateSprites
+ pop af
+ ret
+
+Function1c58::
+ jpab Function24185
+
+RestoreTileBackup:: ; 00:1c60
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ inc b
+ inc c
+.asm_1c68: ; 00:1c68
+ push bc
+ push hl
+.asm_1c6a: ; 00:1c6a
+ ld a, [de]
+ ld [hli], a
+ dec de
+ dec c
+ jr nz, .asm_1c6a
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .asm_1c68
+ ret
+
+PopWindow:: ; 00:1c7a
+ ld b, $10
+ ld de, wMenuDataHeader
+.asm_1c7f: ; 00:1c7f
+ ld a, [hld]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_1c7f
+ ret
+
+GetMenuBoxDims:: ; 00:1c86
+ push hl
+ ld hl, wMenuBorderTopCoord
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ sub b
+ ld b, a
+ ld a, [hli]
+ sub c
+ ld c, a
+ pop hl
+ ret
+
+CopyMenuData:: ; 00:1c96
+ push hl
+ push de
+ push bc
+ push af
+ ld hl, wMenuDataPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, wMenuDataFlags
+ ld bc, $10
+ call CopyBytes
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+
+GetWindowStackTop:: ; 00:1cae
+ ld hl, wWindowStackPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+PlaceVerticalMenuItems:: ; 00:1cb9
+ call CopyMenuData
+ ld hl, wMenuDataPointer
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call GetMenuTextStartCoord
+ call Coord2Tile ; hl now contains the tilemap address where we will start printing text.
+ inc de
+ ld a, [de]
+ inc de
+ ld b, a
+.asm_1ccc: ; 00:1ccc
+ push bc
+ call PlaceString
+ inc de
+ ld bc, 2 * SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .asm_1ccc
+
+ ld a, [wMenuDataFlags]
+ bit 4, a
+ ret z
+
+ call MenuBoxCoord2Tile
+ ld a, [de]
+ ld c, a
+ inc de
+ ld b, $0
+ add hl, bc
+ jp PlaceString
+
+MenuBox:: ; 00:1ceb
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ dec b
+ dec c
+ jp DrawTextBox
+
+GetMenuTextStartCoord:: ; 00:1cf6
+ ld a, [wMenuBorderTopCoord]
+ ld b, a
+ inc b
+ ld a, [wMenuBorderLeftCoord]
+ ld c, a
+ inc c
+ ld a, [wMenuDataFlags]
+ bit 6, a
+ jr nz, .asm_1d08
+ inc b
+.asm_1d08: ; 00:1d08
+ ld a, [wMenuDataFlags]
+ bit 7, a
+ jr z, .asm_1d10
+ inc c
+.asm_1d10: ; 00:1d10
+ ret
+
+ClearMenuBoxInterior::
+ call MenuBoxCoord2Tile
+ ld bc, SCREEN_WIDTH + 1
+ add hl, bc
+ call GetMenuBoxDims
+ dec b
+ dec c
+ call ClearBox
+ ret
+
+ClearWholeMenuBox::
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ inc c
+ inc b
+ call ClearBox
+ ret
+
+MenuBoxCoord2Tile:: ; 00:1d2d
+ ld a, [wMenuBorderLeftCoord]
+ ld c, a
+ ld a, [wMenuBorderTopCoord]
+ ld b, a
+Coord2Tile:: ; 00:1d35
+ xor a
+ ld h, a
+ ld l, b
+ ld a, c
+ ld b, h
+ ld c, l
+ add hl, hl
+ add hl, hl
+ add hl, bc
+ add hl, hl
+ add hl, hl
+ ld c, a
+ xor a
+ ld b, a
+ add hl, bc
+ bccoord 0, 0
+ add hl, bc
+ ret
diff --git a/shim.sym b/shim.sym
index af7c1aa..184e93c 100644
--- a/shim.sym
+++ b/shim.sym
@@ -4,22 +4,11 @@
00:17A8 UpdateSprites
00:17BF GetObjectStruct
00:1A7C Function1a7c
-00:1BF4 PushWindow
-00:1BFC ExitMenu
-00:1C44 InitVerticalMenuCursor
-00:1C4C CloseWindow
-00:1C60 Function1c60 ; PopWindow?
-00:1C7A Function1c7a ; HandleWindow?
-00:1C86 Function1c86
-00:1C96 CopyMenuData
-00:1CAE Function1cae ; PushWindow?
-00:1CB9 PlaceVerticalMenuItems
-00:1CEB MenuBox
-00:1D2D MenuBoxCoord2Tile
00:202C Function202c
00:2117 Function2117
00:23DC LoadWildMons
00:23E5 FadeIn ; This is not OverworldFadeIn, but I don't know what it is
+00:27FB OverworldTextModeSwitch
00:2C05 StartMenuCheck
00:3111 Function3111
00:3171 Function3171
@@ -126,6 +115,9 @@
05:4E27 Function14e27
05:4E4A Function14e4a
+09:412C _ExitMenu
+09:4185 Function24185
+09:4199 _InitVerticalMenuCursor
09:426A _InitScrollingMenu
09:4287 _ScrollingMenu
diff --git a/wram.asm b/wram.asm
index d0d5f06..08c0631 100644
--- a/wram.asm
+++ b/wram.asm
@@ -274,7 +274,7 @@ wMenuCursorBuffer:: db ; cc09
ds 8 ; TODO
wMenuData2::
- db ; cc12
+wMenuDataFlags:: db ; cc12
wMenuDataItems:: db ; cc13
wMenuDataIndicesPointer:: dw ; cc14
wMenuDataDisplayFunctionPointer:: dw ; cc16