summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants.asm1
-rw-r--r--constants/menu_constants.asm97
-rw-r--r--home/text.asm2
-rw-r--r--home/window.asm189
-rw-r--r--shim.sym12
-rw-r--r--wram.asm2
6 files changed, 291 insertions, 12 deletions
diff --git a/constants.asm b/constants.asm
index fcd408f..cac62a5 100644
--- a/constants.asm
+++ b/constants.asm
@@ -30,3 +30,4 @@ INCLUDE "constants/serial_constants.asm"
INCLUDE "constants/misc_constants.asm"
INCLUDE "constants/battle_anim_constants.asm"
+INCLUDE "constants/menu_constants.asm"
diff --git a/constants/menu_constants.asm b/constants/menu_constants.asm
new file mode 100644
index 0000000..46c6547
--- /dev/null
+++ b/constants/menu_constants.asm
@@ -0,0 +1,97 @@
+; MenuHeader flags
+ const_def
+ shift_const MENU_RESTORE_TILES ; Will be set if MENU_BACKUP_TILES(_2) is set.
+ shift_const MENU_UNUSED_1
+ shift_const MENU_UNUSED_2
+ shift_const MENU_NO_CLICK_SFX
+ shift_const MENU_SPRITE_ANIMS
+ shift_const MENU_UNUSED_3
+ shift_const MENU_BACKUP_TILES
+ shift_const MENU_BACKUP_TILES_2
+
+; VerticalMenu/DoNthMenu/SetUpMenu/_2DMenu MenuData flags
+; Per flag the comment specifies which menus actually implement it
+ const_def
+ shift_const STATICMENU_DISABLE_B ; VerticalMenu/_2DMenu
+ shift_const STATICMENU_ENABLE_SELECT ; VerticalMenu/_2DMenu
+ shift_const STATICMENU_ENABLE_LEFT_RIGHT ; DoNthMenu/SetUpMenu
+ shift_const STATICMENU_ENABLE_START ; DoNthMenu/SetUpMenu
+ shift_const STATICMENU_PLACE_TITLE ; VerticalMenu
+ shift_const STATICMENU_WRAP ; All
+ shift_const STATICMENU_NO_TOP_SPACING ; VerticalMenu/_2DMenu
+ shift_const STATICMENU_CURSOR ; VerticalMenu/_2DMenu
+
+; ScrollingMenu MenuData flags
+ const_def
+ shift_const SCROLLINGMENU_CALL_FUNCTION1_CANCEL
+ shift_const SCROLLINGMENU_CALL_FUNCTION3_NO_SWITCH
+ shift_const SCROLLINGMENU_ENABLE_LEFT
+ shift_const SCROLLINGMENU_ENABLE_RIGHT
+ shift_const SCROLLINGMENU_DISPLAY_ARROWS
+ shift_const SCROLLINGMENU_ENABLE_FUNCTION3
+ shift_const SCROLLINGMENU_ENABLE_START
+ shift_const SCROLLINGMENU_ENABLE_SELECT
+
+
+; MonMenuOptions indexes (see data/mon_menu.asm)
+; used by PokemonActionSubmenu (see engine/menus/start_menu.asm)
+ const_def 1
+ ; moves
+ const MONMENUITEM_CUT ; 1
+ const MONMENUITEM_FLY ; 2
+ const MONMENUITEM_SURF ; 3
+ const MONMENUITEM_STRENGTH ; 4
+ const MONMENUITEM_WATERFALL ; 5
+ const MONMENUITEM_FLASH ; 6
+ const MONMENUITEM_WHIRLPOOL ; 7
+ const MONMENUITEM_DIG ; 8
+ const MONMENUITEM_TELEPORT ; 9
+ const MONMENUITEM_SOFTBOILED ; 10
+ const MONMENUITEM_HEADBUTT ; 11
+ const MONMENUITEM_ROCKSMASH ; 12
+ const MONMENUITEM_MILKDRINK ; 13
+ const MONMENUITEM_SWEETSCENT ; 14
+ ; options
+ const MONMENUITEM_STATS ; 15
+ const MONMENUITEM_SWITCH ; 16
+ const MONMENUITEM_ITEM ; 17
+ const MONMENUITEM_CANCEL ; 18
+ const MONMENUITEM_MOVE ; 19
+ const MONMENUITEM_MAIL ; 20
+ const MONMENUITEM_ERROR ; 21
+
+; MonMenuOptions categories
+MONMENU_FIELD_MOVE EQU 0
+MONMENU_MENUOPTION EQU 1
+
+NUM_MONMENU_ITEMS EQU 8
+
+; start/select menu return values
+HMENURETURN_SCRIPT EQU %10000000
+HMENURETURN_ASM EQU %11111111
+
+
+; PartyMenuQualityPointers indexes (see data/party_menu_qualities.asm)
+ const_def
+ const PARTYMENUACTION_CHOOSE_POKEMON
+ const PARTYMENUACTION_HEALING_ITEM
+ const PARTYMENUACTION_SWITCH
+ const PARTYMENUACTION_TEACH_TMHM
+ const PARTYMENUACTION_MOVE
+ const PARTYMENUACTION_EVO_STONE
+ const PARTYMENUACTION_GIVE_MON
+ const PARTYMENUACTION_GIVE_MON_FEMALE ; unused
+ const PARTYMENUACTION_GIVE_ITEM
+ const PARTYMENUACTION_MOBILE ; mobile
+; PrintPartyMenuActionText arguments (see engine/pokemon/party_menu.asm)
+ const_def $f0
+ const PARTYMENUTEXT_HEAL_PSN
+ const PARTYMENUTEXT_HEAL_BRN
+ const PARTYMENUTEXT_HEAL_FRZ
+ const PARTYMENUTEXT_HEAL_SLP
+ const PARTYMENUTEXT_HEAL_PAR
+ const PARTYMENUTEXT_HEAL_HP
+ const PARTYMENUTEXT_HEAL_ALL
+ const PARTYMENUTEXT_REVIVE
+ const PARTYMENUTEXT_LEVEL_UP
+ const PARTYMENUTEXT_HEAL_CONFUSION
diff --git a/home/text.asm b/home/text.asm
index 3fb2cc3..b3cd75c 100644
--- a/home/text.asm
+++ b/home/text.asm
@@ -90,7 +90,7 @@ PrintText::
ld b, TEXTBOX_INNERH
ld c, TEXTBOX_INNERW
call DrawTextBox
- call Function17a8
+ call UpdateSprites
call WaitBGMap
pop hl
PrintTextBoxText::
diff --git a/home/window.asm b/home/window.asm
index da1c838..d6d77dd 100644
--- a/home/window.asm
+++ b/home/window.asm
@@ -1,9 +1,188 @@
include "constants.asm"
-SECTION "Window related functions", ROM0 [$1E58]
+SECTION "Window related functions", ROM0 [$1d49]
+
+LoadMenuHeader:: ; 00:1d49
+ call CopyMenuHeader
+ call PushWindow
+ ret
+
+CopyMenuHeader:: ; 00:1d50
+ ld de, wMenuDataHeader
+ ld bc, $10
+ jp CopyBytes
+
+MenuTextBox:: ; 00:1d59
+ push hl
+ ld hl, .Data
+ call LoadMenuHeader
+ pop hl
+ jp PrintText
+
+; unused
+ ret
+
+.Data: ; 00:1d65
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 0, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw VRAM_Begin
+ db 0 ; default option
+
+MenuTextBoxBackup::
+ call MenuTextBox
+ call CloseWindow
+ ret
+
+LoadStandardMenuHeader::
+ ld hl, .Data
+ call LoadMenuHeader
+ ret
+
+.Data: ; 00:1d7b
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw 0
+ db 1 ; default option
+
+Call_ExitMenu::
+ call ExitMenu
+ ret
+
+VerticalMenu:: ; 00:1d87
+ xor a
+ ldh [hBGMapMode], a
+ call MenuBox
+ call UpdateSprites
+ call PlaceVerticalMenuItems
+ call WaitBGMap
+ call CopyMenuData
+ ld a, [wMenuData2]
+ bit 7, a
+ jr z, .asm_1daa
+ call InitVerticalMenuCursor
+ call Function1a7c
+ bit 1, a
+ jr z, .asm_1dac
+.asm_1daa: ; 00:1daa
+ scf
+ ret
+
+.asm_1dac: ; 00:1dac
+ and a
+ ret
+
+GetMenu2::
+ call LoadMenuHeader
+ call VerticalMenu
+ call CloseWindow
+ ld a, [wMenuCursorY]
+ ret
+
+CopyNameFromMenu::
+ push hl
+ push bc
+ push af
+ ld hl, wMenuDataPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ inc hl
+ inc hl
+ pop af
+ call GetNthString
+ ld d, h
+ ld e, l
+ call CopyStringToCD31
+ pop bc
+ pop hl
+ ret
+
+YesNoBox::
+ lb bc, 14, 7
+ jr asm_1ddc
+
+PlaceGenericTwoOptionBox::
+ call LoadMenuHeader
+ jr asm_1df9
+
+asm_1ddc: ; 00:1ddc
+ push bc
+ ld hl, YesNoMenuHeader
+ call CopyMenuHeader
+ pop bc
+ ld a, b
+ ld [wMenuBorderLeftCoord], a
+ add 5
+ ld [wMenuBorderRightCoord], a
+ ld a, c
+ ld [wMenuBorderTopCoord], a
+ add 4
+ ld [wMenuBorderBottomCoord], a
+ call PushWindow
+asm_1df9: ; 00:1df9
+ call VerticalMenu
+ push af
+ ld c, 15
+ call DelayFrames
+ call CloseWindow
+ pop af
+ jr c, .asm_1e11
+ ld a, [wMenuCursorY]
+ cp $2
+ jr z, .asm_1e11
+ and a
+ ret
+
+.asm_1e11: ; 00:1e11
+ ld a, $2
+ ld [wMenuCursorY], a
+ scf
+ ret
+
+YesNoMenuHeader:: ; 00:1e18
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 10, 5, 15, 9
+ dw .MenuData
+ db 1 ; default option
+
+.MenuData:
+ db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
+ db 2
+ db "はい@"
+ db "いいえ@"
+
+OffsetMenuHeader::
+ call _OffsetMenuHeader
+ call PushWindow
+ ret
+
+_OffsetMenuHeader:: ; 00:1e30
+ push de
+ call CopyMenuHeader
+ pop de
+ ld a, [wMenuBorderLeftCoord]
+ ld h, a
+ ld a, [wMenuBorderRightCoord]
+ sub h
+.asm_1e3d: ; 00:1e3d
+ ld h, a
+ ld a, d
+ ld [wMenuBorderLeftCoord], a
+ add h
+ ld [wMenuBorderRightCoord], a
+ ld a, [wMenuBorderTopCoord]
+ ld l, a
+ ld a, [wMenuBorderBottomCoord]
+ sub l
+ ld l, a
+ ld a, e
+ ld [wMenuBorderTopCoord], a
+ add l
+ ld [wMenuBorderBottomCoord], a
+ ret
OpenMenu:: ; 00:1e58
- call Function1c96
+ call CopyMenuData
call GetMenuIndexSet
push de
ld a, [wMenuCursorBuffer]
@@ -12,15 +191,15 @@ OpenMenu:: ; 00:1e58
pop af
ld [wMenuCursorBuffer], a
call AutomaticGetMenuBottomCoord
- call Function1bf4
- call Function1ceb
+ call PushWindow
+ call MenuBox
pop de
call GetMenuIndexSet
push de
call RunMenuItemPrintingFunction
ld a, $1
ldh [hBGMapMode], a
- call Function17a8
+ call UpdateSprites
call GetMenuIndexSet
pop de
call Function1f27
diff --git a/shim.sym b/shim.sym
index 995cbd7..704fb3e 100644
--- a/shim.sym
+++ b/shim.sym
@@ -1,19 +1,21 @@
; ROM0
00:15BE GetMapObject
00:1720 CheckObjectVisibility
-00:17A8 Function17a8
+00:17A8 UpdateSprites
00:17BF GetObjectStruct
00:1A7C Function1a7c
-00:1BF4 Function1bf4
+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 Function1c96 ; CopyMenuData?
+00:1C96 CopyMenuData
00:1CAE Function1cae ; PushWindow?
-00:1CEB Function1ceb
+00:1CB9 PlaceVerticalMenuItems
+00:1CEB MenuBox
00:1D2D MenuBoxCoord2Tile
-00:1D49 LoadMenuHeader
00:202C Function202c
00:23DC LoadWildMons
diff --git a/wram.asm b/wram.asm
index 5e7cd17..4a67465 100644
--- a/wram.asm
+++ b/wram.asm
@@ -268,7 +268,7 @@ wMenuBorderTopCoord:: db ; cc03
wMenuBorderLeftCoord:: db ; cc04
wMenuBorderBottomCoord:: db ; cc05
wMenuBorderRightCoord:: db ; cc06
- ds 2 ; TODO
+wMenuDataPointer:: dw ; cc07
wMenuCursorBuffer:: db ; cc09
; cc0a
ds 8 ; TODO