summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/billspctop.asm20
-rwxr-xr-xengine/color.asm2
-rwxr-xr-xengine/events/overworld.asm18
-rwxr-xr-xengine/events/whiteout.asm2
-rw-r--r--engine/learn.asm4
-rwxr-xr-xengine/main_menu.asm8
-rwxr-xr-xengine/move_mon.asm2
-rwxr-xr-xengine/overworld/player_object.asm2
-rwxr-xr-xengine/pack.asm28
-rw-r--r--home.asm176
-rw-r--r--home/map.asm6
-rw-r--r--home/menu.asm518
-rwxr-xr-xhome/menu2.asm526
-rwxr-xr-xhome/menu_window.asm209
-rwxr-xr-xhome/tilemap.asm415
-rw-r--r--home/window.asm2
-rwxr-xr-xitems/item_effects.asm4
-rw-r--r--main.asm10
-rw-r--r--wram.asm23
19 files changed, 1020 insertions, 955 deletions
diff --git a/engine/billspctop.asm b/engine/billspctop.asm
index f323d906..b0ec59a5 100644
--- a/engine/billspctop.asm
+++ b/engine/billspctop.asm
@@ -10,7 +10,7 @@ BillsPC_CheckHavePokemon: ; e3e5 (3:63e5)
and a
ret nz
ld hl, Text_GottaHavePokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -21,7 +21,7 @@ Text_GottaHavePokemon:
BillsPC_LogIn: ; e3f7 (3:63f7)
xor a
ldh [hBGMapMode], a
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
call Functione566
ld hl, wOptions
ld a, [hl]
@@ -44,7 +44,7 @@ BillsPC_LogOut: ; e41a (3:641a)
BillsPC_UsePC: ; e41e (3:641e)
ld hl, BillsPC_TopMenuDataHeader
- call LoadMenuDataHeader
+ call LoadMenuHeader
ld a, $1
.asm_e426
ld [wMenuCursorBuffer], a
@@ -104,7 +104,7 @@ BillsPC_SeeYa:
ret
BillsPC_MovePKMNMenu:
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
farcall IsAnyPokemonHoldingMail ; 11:488c
jr nc, .asm_e4bb
ld hl, Text_PleaseRemoveMailBeforeMovePkmnWOMail
@@ -127,7 +127,7 @@ Text_PleaseRemoveMailBeforeMovePkmnWOMail:
db "@"
BillsPC_DepositMenu:
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
farcall DepositPokemon_ ; 38:6b9e
call ReturnToMapFromSubmenu
call Functione566
@@ -146,13 +146,13 @@ Functione4ed:
.asm_e4f9
ld hl, Text_YouDontHaveASinglePokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
.asm_e501
ld hl, Text_ItsYourLastPokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -193,7 +193,7 @@ CheckCurPartyMonFainted: ; e513 (3:6513)
ret
BillsPC_WithdrawMenu:
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
farcall WithdrawPokemon_ ; 38:6d71
call ReturnToMapFromSubmenu
call Functione566
@@ -210,7 +210,7 @@ Functione548:
.asm_e551
ld hl, Text_CantTakeAnyMorePokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -239,7 +239,7 @@ Functione566: ; e566 (3:6566)
hlcoord 0, 12
ld bc, IncGradGBPalTable_13
call Textbox
- call Function3456
+ call WaitBGMap2
call SetPalettes
ret
diff --git a/engine/color.asm b/engine/color.asm
index fa041873..2d959df5 100755
--- a/engine/color.asm
+++ b/engine/color.asm
@@ -243,7 +243,7 @@ Function91b4:
ld a, [wc605]
and $3
call Function9af1
- call LoadEDTile
+ call CopyTilemapAtOnce
ret
ApplyMonOrTrainerPals: ; 91e5 (2:51e5)
diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm
index a00f35aa..0787d094 100755
--- a/engine/events/overworld.asm
+++ b/engine/events/overworld.asm
@@ -48,7 +48,7 @@ FieldMoveBadgeCheck: ; c776 (3:4776)
call FieldMoveEngineFlagCheck
ret nc
ld hl, .BadgeRequiredText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -99,7 +99,7 @@ FieldMovePartyCheck: ; c787 (3:4787)
FieldMoveFailed: ; c7be (3:47be)
ld hl, .CantUseHereText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ret
.CantUseHereText:
@@ -146,7 +146,7 @@ CutTreeOrGrass:
FailToCut:
ld hl, Text_NothingToCut
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
@@ -397,13 +397,13 @@ StartSurfing:
CantSurf:
ld hl, CantSurfText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
AlreadySurfing:
ld hl, AlreadySurfingText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
@@ -543,7 +543,7 @@ TryToFly:
.asm_ca83
xor a
ldh [hMapAnims], a
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
call ClearSprites
ld a, $24
ld hl, $5a61
@@ -783,7 +783,7 @@ FailToEscapeFromDungeon:
cp $2
jr nz, .asm_cc1c
ld hl, Text_CantUseDigEscapeRopeHere ; $4c29
- call MenuTextBox
+ call MenuTextbox
call WaitPressAorB_BlinkCursor
call CloseWindow
.asm_cc1c
@@ -882,7 +882,7 @@ DoTeleport:
FailTeleport:
ld hl, Text_CantUseTeleportHere
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
@@ -932,7 +932,7 @@ Functionccf1: ; ccf1 (3:4cf1)
jr asm_cd0c
ld hl, Text_AlreadyUsingStrength
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
diff --git a/engine/events/whiteout.asm b/engine/events/whiteout.asm
index 33098f13..075274a4 100755
--- a/engine/events/whiteout.asm
+++ b/engine/events/whiteout.asm
@@ -32,7 +32,7 @@ Script_Whiteout:
OverworldBGMap:
call ClearPalettes
call FillScreenWithTextboxPal
- call Function3456
+ call WaitBGMap2
call HideSprites
call RotateThreePalettesLeft
ret
diff --git a/engine/learn.asm b/engine/learn.asm
index 854f2f3c..8f599208 100644
--- a/engine/learn.asm
+++ b/engine/learn.asm
@@ -127,7 +127,7 @@ LearnMove:
ld [wBuffer1], a
predef ListMoves
ld a, $4
- ld [wMenuData2End], a
+ ld [wMenuDataEnd], a
ld a, $6
ld [wced9], a
ld a, [wcfe3]
@@ -140,7 +140,7 @@ LearnMove:
ld a, $3
ld [wMenuJoypadFilter], a
ld a, $20
- ld [wcedc], a
+ ld [w2DMenuFlags1], a
xor a
ld [wcedd], a
ld a, $20
diff --git a/engine/main_menu.asm b/engine/main_menu.asm
index 0dd1804b..7b01ff59 100755
--- a/engine/main_menu.asm
+++ b/engine/main_menu.asm
@@ -18,7 +18,7 @@ MainMenu_:
ld [wWhichIndexSet], a
call Function5b27
ld hl, .MenuDataHeader
- call LoadMenuDataHeader
+ call LoadMenuHeader
call Function5b0a
call CloseWindow
jr c, .asm_5a94
@@ -478,7 +478,7 @@ LoadOrRegenerateLuckyIDNumber: ; 5da7 (1:5da7)
MainMenu_Continue:
farcall TryLoadSaveFile
jr c, .asm_5e41
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
call DisplaySaveInfoOnContinue
ld a, $1
ldh [hBGMapMode], a
@@ -619,7 +619,7 @@ Continue_LoadMenuHeader: ; 5ed7 (1:5ed7)
jr nz, .asm_5ee7
ld hl, .MenuDataHeader_NoDex
.asm_5ee7
- call OffsetMenuDataHeader_
+ call _OffsetMenuHeader
call MenuBox
call PlaceVerticalMenuItems
ret
@@ -905,7 +905,7 @@ ENDC
db 2, "NAME@"
SelectPresetName: ; 6108 (1:6108)
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
ld a, [wMenuCursorY]
dec a
diff --git a/engine/move_mon.asm b/engine/move_mon.asm
index dfa51a8e..7410375f 100755
--- a/engine/move_mon.asm
+++ b/engine/move_mon.asm
@@ -1636,7 +1636,7 @@ TextJump_WasSentToBillsPC:
InitNickname: ; e3b9 (3:63b9)
push de
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
call DisableSpriteUpdates
pop de
push de
diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm
index a706f8aa..06b38e94 100755
--- a/engine/overworld/player_object.asm
+++ b/engine/overworld/player_object.asm
@@ -12,7 +12,7 @@ BlankScreen:
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
ld a, $7
call ByteFill
- call Function3456
+ call WaitBGMap2
call SetPalettes
ret
diff --git a/engine/pack.asm b/engine/pack.asm
index 05d4952e..210cb9b2 100755
--- a/engine/pack.asm
+++ b/engine/pack.asm
@@ -57,7 +57,7 @@ Pack_InitItemsPocket:
Pack_ItemsPocketMenu:
ld hl, ItemsPocketMenuDataHeader
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
@@ -86,7 +86,7 @@ Pack_InitKeyItemsPocket:
Pack_KeyItemsPocketMenu:
ld hl, KeyItemsPocketMenuDataHeader ; $4e9a
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
@@ -133,7 +133,7 @@ Pack_TMHMPocketMenu:
ld de, TMHMPocketSubmenuJumptable_NoGive ; $4567
.asm_10540
push de
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
call ExitMenu
pop hl
@@ -210,7 +210,7 @@ Pack_InitBallsPocket:
Pack_BallsPocketMenu:
ld hl, BallsPocketMenuDataHeader ; $4eca
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
@@ -286,7 +286,7 @@ Function105f5: ; 105f5 (4:45f5)
ld de, ItemSubmenuJumptable_GiveTossQuit ; $473b
.asm_10665
push de
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
call ExitMenu
pop hl
@@ -477,7 +477,7 @@ TossMenu:
jr c, .asm_107cc
call Function10e38
ld hl, Text_ConfirmThrowAway
- call MenuTextBox
+ call MenuTextbox
call YesNoBox
push af
call ExitMenu
@@ -674,7 +674,7 @@ BattlePack_InitItemsPocket:
BattlePack_ItemsPocketMenu:
ld hl, $4e6a
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
@@ -702,7 +702,7 @@ BattlePack_InitKeyItemsPocket:
BattlePack_KeyItemsPocketMenu:
ld hl, $4e9a
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
@@ -753,7 +753,7 @@ BattlePack_InitBallsPocket:
BattlePack_BallsPocketMenu:
ld hl, $4eca
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
@@ -785,7 +785,7 @@ Function10a0c: ; 10a0c (4:4a0c)
ld de, BattlePackQuitJumptable
.asm_10a1d
push de
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
call ExitMenu
pop hl
@@ -940,7 +940,7 @@ DepositOrSell_ItemPocket:
xor a
call Function10b92
ld hl, PC_Mart_ItemsPocketMenuDataHeader ; $4e82
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
@@ -956,7 +956,7 @@ DepositOrSell_KeyItemsPocket:
ld a, $2
call Function10b92
ld hl, PC_Mart_KeyItemsPocketMenuDataHeader ; $4eb2
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
@@ -981,7 +981,7 @@ DepositOrSell_BallsPocket:
ld a, $1
call Function10b92
ld hl, PC_Mart_BallsPocketMenuDataHeader ; $4ee2
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
@@ -1155,7 +1155,7 @@ asm_10c8a
push hl
call Function10b92
pop hl
- call CopyMenuDataHeader
+ call CopyMenuHeader
call ScrollingMenu
ret
diff --git a/home.asm b/home.asm
index 340a93a1..54187c1d 100644
--- a/home.asm
+++ b/home.asm
@@ -28,8 +28,9 @@ INCLUDE "home/video.asm"
INCLUDE "home/map_objects.asm"
INCLUDE "home/sine.asm"
INCLUDE "home/movement.asm"
-INCLUDE "home/tilemap.asm"
INCLUDE "home/menu.asm"
+INCLUDE "home/menu_window.asm"
+INCLUDE "home/menu2.asm"
INCLUDE "home/handshake.asm"
INCLUDE "home/game_time.asm"
INCLUDE "home/map.asm"
@@ -213,176 +214,7 @@ CallPointerAt::
INCLUDE "home/queue_script.asm"
INCLUDE "home/compare.asm"
-
-ClearBGPalettes::
- call ClearPalettes
-WaitBGMap:: ; 344c (0:344c)
- ld a, $1
- ldh [hBGMapMode], a
- ld c, $4
- call DelayFrames
- ret
-
-Function3456:: ; 3456 (0:3456)
- ldh a, [hCGB]
- and a
- jr z, .asm_3464
- ld a, $2
- ldh [hBGMapMode], a
- ld c, $4
- call DelayFrames
-.asm_3464
- ld a, $1
- ldh [hBGMapMode], a
- ld c, $4
- call DelayFrames
- ret
-
-IsCGB::
- ldh a, [hCGB]
- and a
- ret
-
-ApplyTilemap:: ; 3472 (0:3472)
- ldh a, [hCGB]
- and a
- jr z, .asm_3484
- ld a, [wSpriteUpdatesEnabled]
- cp $0
- jr z, .asm_3484
- ld a, $1
- ldh [hBGMapMode], a
- jr LoadEDTile
-
-.asm_3484
- ld a, $1
- ldh [hBGMapMode], a
- ld c, $4
- call DelayFrames
- ret
-
-CGBOnly_LoadEDTile:: ; 348e (0:348e)
- ldh a, [hCGB]
- and a
- jr z, WaitBGMap
-LoadEDTile::
- ldh a, [hBGMapMode]
- push af
- xor a
- ldh [hBGMapMode], a
- ldh a, [hMapAnims]
- push af
- xor a
- ldh [hMapAnims], a
-.asm_349f
- ldh a, [rLY]
- cp $7f
- jr c, .asm_349f
- di
- ld a, $1
- ldh [rVBK], a
- ld hl, wAttrMap
- call Function34c8
- ld a, $0
- ldh [rVBK], a
- ld hl, wTileMap
- call Function34c8
-.asm_34ba
- ldh a, [rLY]
- cp $7f
- jr c, .asm_34ba
- ei
- pop af
- ldh [hMapAnims], a
- pop af
- ldh [hBGMapMode], a
- ret
-
-Function34c8:: ; 34c8 (0:34c8)
- ld [hSPBuffer], sp
- ld sp, hl
- ldh a, [hBGMapAddress + 1]
- ld h, a
- ld l, $0
- ld a, $12
- ldh [hTilesPerCycle], a
- ld b, $2
- ld c, rSTAT % $100
-.asm_34d9
-rept 10
- pop de
-.loop_\@
- ld a, [$ff00+c]
- and b
- jr nz, .loop_\@
- ld [hl], e
- inc l
- ld [hl], d
- inc l
-endr
- ld de, $c
- add hl, de
- ldh a, [hTilesPerCycle]
- dec a
- ldh [hTilesPerCycle], a
- jr nz, .asm_34d9
- ldh a, [hSPBuffer]
- ld l, a
- ldh a, [hSPBuffer + 1]
- ld h, a
- ld sp, hl
- ret
-
-SetPalettes::
- ldh a, [hCGB]
- and a
- jr nz, .asm_3556
- ld a, $e4
- ldh [rBGP], a
- ld a, $d0
- ldh [rOBP0], a
- ldh [rOBP1], a
- ret
-
-.asm_3556
- push de
- ld a, $e4
- call DmgToCgbBGPals
- ld de, $e4e4
- call DmgToCgbObjPals
- pop de
- ret
-
-ClearPalettes:: ; 3564 (0:3564)
- ldh a, [hCGB]
- and a
- jr nz, .asm_3571
- xor a
- ldh [rBGP], a
- ldh [rOBP0], a
- ldh [rOBP1], a
- ret
-
-.asm_3571
- ld hl, wBGPals
- ld bc, $80
- ld a, $ff
- call ByteFill
- ld a, $1
- ldh [hCGBPalUpdate], a
- ret
-
-GetMemSGBLayout::
- ld b, $ff
-GetSGBLayout:: ; 3583 (0:3583)
- ldh a, [hCGB]
- and a
- jr nz, .asm_358c
- ldh a, [hSGB]
- and a
- ret z
-.asm_358c
- predef_jump LoadSGBLayout
+INCLUDE "home/tilemap.asm"
SetHPPal::
call GetHPPal
@@ -658,7 +490,7 @@ GetMoveName::
ret
ScrollingMenu::
- call CopyMenuData2
+ call CopyMenuData
ldh a, [hROMBank]
push af
ld a, BANK(ScrollingMenu_)
diff --git a/home/map.asm b/home/map.asm
index 7aeda60e..30314a55 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -2097,7 +2097,7 @@ CheckCurrentMapXYTriggers::
FadeToMenu::
xor a
ldh [hBGMapMode], a
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
farcall FadeOutPalettes
call ClearSprites
call DisableSpriteUpdates
@@ -2120,7 +2120,7 @@ ExitAllMenus::
FinishExitMenu::
ld b, $9
call GetSGBLayout
- call Function3456
+ call WaitBGMap2
farcall FadeInPalettes
call EnableSpriteUpdates
ret
@@ -2138,7 +2138,7 @@ ReturnToMapWithSpeechTextbox::
ld hl, wVramState
set 0, [hl]
call UpdateSprites
- call Function3456
+ call WaitBGMap2
ld b, $9
call GetSGBLayout
call UpdateTimePals
diff --git a/home/menu.asm b/home/menu.asm
index a418baab..412955b2 100644
--- a/home/menu.asm
+++ b/home/menu.asm
@@ -1,506 +1,62 @@
-LoadMenuDataHeader:: ; 1bac (0:1bac)
- call CopyMenuDataHeader
- call PushWindow
- ret
-
-CopyMenuDataHeader:: ; 1bb3 (0:1bb3)
- ld de, wMenuDataHeader
- ld bc, wMenuDataHeaderEnd - wMenuDataHeader
- call CopyBytes
- ret
-
-StoreTo_wMenuCursorBuffer
- ld [wMenuCursorBuffer], a
- ret
-
-MenuTextBox:: ; 1bc1 (0:1bc1)
- push hl
- call LoadMenuTextBox
- pop hl
- jp PrintText
-
-; XXX
-ret_1bc9
- ret
-
-LoadMenuTextBox:: ; 1bca (0:1bca)
- ld hl, .MenuDataHeader
- call LoadMenuDataHeader
- ret
-.MenuDataHeader:
- db $40 ; tile backup
- db 12, 0 ; start coords
- db 17, 19 ; end coords
- dw $8000
- db 0 ; default option
-
-MenuTextBoxBackup::
- call MenuTextBox
- call CloseWindow
- ret
-
-LoadStandardMenuDataHeader::
- ld hl, .MenuDataHeader
- call LoadMenuDataHeader
- ret
-
-.MenuDataHeader: ; 1d75
- db $40 ; tile backup
- db 0, 0 ; start coords
- db 17, 19 ; end coords
- dw 0
- db 1 ; default option
-
-Call_ExitMenu::
- call ExitMenu
- ret
-
-VerticalMenu:: ; 1bf3 (0:1bf3)
- xor a
- ldh [hBGMapMode], a
- call MenuBox
- call UpdateSprites
- call PlaceVerticalMenuItems
- call ApplyTilemap
- call CopyMenuData2
- ld a, [wMenuData2Flags]
- bit 7, a
- jr z, .asm_1c19
- call InitVerticalMenuCursor
- call StaticMenuJoypad
- call MenuClickSound
- bit 1, a
- jr z, .asm_1c1b
-.asm_1c19
- scf
- ret
-.asm_1c1b
- and a
- ret
-
-GetMenu2::
- call LoadMenuDataHeader
- call VerticalMenu
- call CloseWindow
- ld a, [wMenuCursorY]
- ret
-
-CopyNameFromMenu::
+SetMenuAttributes::
push hl
push bc
- push af
- ld hl, wMenuData2Pointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- inc hl
- inc hl
- pop af
- call GetNthString
- ld d, h
- ld e, l
- call CopyName1
+ ld hl, w2DMenuCursorInitY
+ ld b, $8
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ 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
-YesNoBox::
- lb bc, SCREEN_WIDTH - 6, 7
-PlaceYesNoBox::
- jr _YesNoBox
-
-PlaceGenericTwoOptionBox::
- call LoadMenuDataHeader
- jr InterpretTwoOptionMenu
-
-_YesNoBox::
- push bc
- ld hl, YesNoMenuDataHeader
- call CopyMenuDataHeader
- 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
-InterpretTwoOptionMenu::
- call VerticalMenu
- push af
- ld c, $f
- call DelayFrames
- call CloseWindow
- pop af
- jr c, .asm_1c80
- ld a, [wMenuCursorY]
- cp $2
- jr z, .asm_1c80
- and a
- ret
-.asm_1c80
- ld a, $2
- ld [wMenuCursorY], a
- scf
- ret
-YesNoMenuDataHeader:: ; 1c87 (0:1c87)
- db $40 ; tile backup
- db 5, 10 ; start coords
- db 9, 15 ; end coords
- dw .MenuData2
- db 1 ; default option
-
-.MenuData2: ; 1e25
- db $c0 ; flags
- db 2
- db "YES@"
- db "NO@"
-
-OffsetMenuDataHeader::
- call OffsetMenuDataHeader_
- call PushWindow
- ret
-
-OffsetMenuDataHeader_:: ; 1c9f (0:1c9f)
- push de
- call CopyMenuDataHeader
- pop de
- ld a, [wMenuBorderLeftCoord]
- ld h, a
- ld a, [wMenuBorderRightCoord]
- sub h
- 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
-
-DoNthMenu::
- call DrawVariableLengthMenuBox
- call MenuWriteText
- call InitMenuCursorAndButtonPermissions
- call GetStaticMenuJoypad
+StaticMenuJoypad::
+ callfar _StaticMenuJoypad
call GetMenuJoypad
- call MenuClickSound
ret
-SetUpMenu::
- call DrawVariableLengthMenuBox
- call MenuWriteText
- call InitMenuCursorAndButtonPermissions
- ld hl, wcedc
- set 7, [hl]
- ret
-
-DrawVariableLengthMenuBox:: ; 1ce9 (0:1ce9)
- call CopyMenuData2
- call GetMenuIndexSet
- call AutomaticGetMenuBottomCoord
- call MenuBox
+ScrollingMenuJoypad::
+ callfar _ScrollingMenuJoypad
+ call GetMenuJoypad
ret
-MenuWriteText:: ; 1cf6 (0:1cf6)
- xor a
- ldh [hBGMapMode], a
- call GetMenuIndexSet
- call RunMenuItemPrintingFunction
- call SafeUpdateSprites
- ldh a, [hOAMUpdate]
+GetMenuJoypad::
+ push bc
push af
- ld a, $1
- ldh [hOAMUpdate], a
- call ApplyTilemap
- pop af
- ldh [hOAMUpdate], a
- ret
-
-AutomaticGetMenuBottomCoord:: ; 1d10 (0:1d10)
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- ld a, [wMenuBorderRightCoord]
- sub c
- ld c, a
- ld a, [wMenuData2Items]
- add a
- inc a
+ ldh a, [hJoyLast]
+ and D_PAD
ld b, a
- ld a, [wMenuBorderTopCoord]
- add b
- ld [wMenuBorderBottomCoord], a
- ret
-
-GetMenuIndexSet:: ; 1d27 (0:1d27)
- ld hl, wMenuData2IndicesPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wWhichIndexSet]
- and a
- jr z, .asm_1d3d
+ ldh a, [hJoyPressed]
+ and BUTTONS
+ or b
ld b, a
- ld c, $ff
-.asm_1d36
- ld a, [hli]
- cp c
- jr nz, .asm_1d36
- dec b
- jr nz, .asm_1d36
-.asm_1d3d
- ld d, h
- ld e, l
- ld a, [hl]
- ld [wMenuData2Items], a
- ret
-
-RunMenuItemPrintingFunction:: ; 1d44 (0:1d44)
- call MenuBoxCoord2Tile
- ld bc, 2 * SCREEN_WIDTH + 2
- add hl, bc
-.asm_1d4b
- inc de
- ld a, [de]
- cp $ff
- ret z
- ld [wMenuSelection], a
- push de
- push hl
- ld d, h
- ld e, l
- ld hl, wMenuData2DisplayFunctionPointer
- call ._hl_
- pop hl
- ld de, $28
- add hl, de
- pop de
- jr .asm_1d4b
-
-._hl_ ; 1d65 (0:1d65)
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp hl
-
-InitMenuCursorAndButtonPermissions:: ; 1d69 (0:1d69)
- call InitVerticalMenuCursor
- ld hl, wMenuJoypadFilter
- ld a, [wMenuData2Flags]
- bit 3, a
- jr z, .asm_1d78
- set 3, [hl]
-.asm_1d78
- ld a, [wMenuData2Flags]
- bit 2, a
- jr z, .asm_1d83
- set 5, [hl]
- set 4, [hl]
-.asm_1d83
- ret
-
-GetScrollingMenuJoypad::
- call ScrollingMenuJoypad
- ld hl, wMenuJoypadFilter
- and [hl]
- jr ContinueGettingMenuJoypad
-
-GetStaticMenuJoypad:: ; 1d8d (0:1d8d)
- xor a
- ld [wMenuJoypad], a
- call StaticMenuJoypad
-ContinueGettingMenuJoypad::
- bit 0, a
- jr nz, .asm_1dbc
- bit 1, a
- jr nz, .asm_1dd7
- bit 3, a
- jr nz, .asm_1dd7
- bit 4, a
- jr nz, .asm_1dae
- bit 5, a
- jr nz, .asm_1db5
- xor a
- ld [wMenuJoypad], a
- jr .asm_1dc1
-.asm_1dae
- ld a, $10
- ld [wMenuJoypad], a
- jr .asm_1dc1
-.asm_1db5
- ld a, $20
- ld [wMenuJoypad], a
- jr .asm_1dc1
-.asm_1dbc
- ld a, $1
- ld [wMenuJoypad], a
-.asm_1dc1
- call GetMenuIndexSet
- ld a, [wMenuCursorY]
- ld l, a
- ld h, $0
- add hl, de
- ld a, [hl]
- ld [wMenuSelection], a
- ld a, [wMenuCursorY]
- ld [wMenuCursorBuffer], a
- and a
- ret
-.asm_1dd7
- ld a, $2
- ld [wMenuJoypad], a
- ld a, $ff
- ld [wMenuSelection], a
- scf
+ pop af
+ ld a, b
+ pop bc
ret
-PlaceMenuStrings::
- push de
- ld hl, wMenuData2PointerTableAddr
+PlaceHollowCursor::
+ ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, [wMenuSelection]
- call GetNthString
- ld d, h
- ld e, l
- pop hl
- call PlaceString
- ret
-
-PlaceNthMenuStrings::
- push de
- ld a, [wMenuSelection]
- call GetMenuDataPointerTableEntry
- inc hl
- inc hl
- ld a, [hli]
- ld d, [hl]
- ld e, a
- pop hl
- call PlaceString
- ret
-
-Function1e08::
- call GetMenuDataPointerTableEntry
- inc hl
- inc hl
- ld a, [hli]
- ld d, [hl]
- ld e, a
+ ld [hl], "▷"
ret
-MenuJumptable::
- ld a, [wMenuSelection]
- call GetMenuDataPointerTableEntry
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp hl
-
-GetMenuDataPointerTableEntry:: ; 1e1b (0:1e1b)
- ld e, a
- ld d, $0
- ld hl, wMenuData2PointerTableAddr
+HideCursor::
+ ld hl, wCursorCurrentTile
ld a, [hli]
ld h, [hl]
ld l, a
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- ret
-
-ClearWindowData::
- ld hl, wWindowData
- call .bytefill
- ld hl, wMenuDataHeader
- call .bytefill
- ld hl, wMenuData2
- call .bytefill
- ld hl, wMenuData3
- call .bytefill
- xor a
- call OpenSRAM
- xor a
- ld hl, sWindowStackTop
- ld [hld], a
- ld [hld], a
- ld a, l
- ld [wWindowStackPointer], a
- ld a, h
- ld [wWindowStackPointer + 1], a
- call CloseSRAM
- ret
-
-.bytefill
- ld bc, $10
- xor a
- call ByteFill
- ret
-
-MenuClickSound:: ; 1e5f (0:1e5f)
- push af
- and $3
- jr z, .asm_1e6e
- ld hl, wMenuDataHeader
- bit 3, a
- jr nz, .asm_1e6e
- call PlayClickSFX
-.asm_1e6e
- pop af
- ret
-PlayClickSFX:: ; 1e70 (0:1e70)
- push de
- ld de, SFX_READ_TEXT_2
- call PlaySFX
- pop de
- ret
-
-MenuTextBoxWaitButton::
- call MenuTextBox
- call WaitButton
- call ExitMenu
- ret
-
-Place2DMenuItemName::
- ld [wBuffer], a
- ldh a, [hROMBank]
- push af
- ld a, [wBuffer]
- rst Bankswitch
- call PlaceString
- pop af
- rst Bankswitch
- ret
-
-_2DMenu::
- call CopyMenuData2
- ldh a, [hROMBank]
- ld [wMenuDataBank], a
- push af
- ld a, BANK(_2DMenu_)
- rst Bankswitch
- call _2DMenu_
- pop bc
- ld a, b
- rst Bankswitch
- ld a, [wMenuCursorBuffer]
- ret
-
-ResetBGWindow::
- xor a
- ldh [hBGMapMode], a
- ld a, $90
- ldh [rWY], a
- ldh [hWY], a
+ ld [hl], " "
ret
diff --git a/home/menu2.asm b/home/menu2.asm
new file mode 100755
index 00000000..533f4675
--- /dev/null
+++ b/home/menu2.asm
@@ -0,0 +1,526 @@
+; Functions used in displaying and handling menus.
+
+LoadMenuHeader::
+ call CopyMenuHeader
+ call PushWindow
+ ret
+
+CopyMenuHeader::
+ ld de, wMenuHeader
+ ld bc, wMenuHeaderEnd - wMenuHeader
+ call CopyBytes
+ ret
+
+StoreTo_wMenuCursorBuffer::
+ ld [wMenuCursorBuffer], a
+ ret
+
+MenuTextbox::
+ push hl
+ call LoadMenuTextbox
+ pop hl
+ jp PrintText
+
+; unused
+ ret
+
+LoadMenuTextbox::
+ ld hl, .MenuHeader
+ call LoadMenuHeader
+ ret
+
+.MenuHeader:
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 0, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw vTiles0
+ db 0 ; default option
+
+MenuTextboxBackup::
+ call MenuTextbox
+ call CloseWindow
+ ret
+
+LoadStandardMenuHeader::
+ ld hl, .MenuHeader
+ call LoadMenuHeader
+ ret
+
+.MenuHeader:
+ 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::
+ xor a
+ ldh [hBGMapMode], a
+ call MenuBox
+ call UpdateSprites
+ call PlaceVerticalMenuItems
+ call ApplyTilemap
+ call CopyMenuData
+ ld a, [wMenuDataFlags]
+ bit 7, a
+ jr z, .cancel
+ call InitVerticalMenuCursor
+ call StaticMenuJoypad
+ call MenuClickSound
+ bit 1, a
+ jr z, .okay
+.cancel
+ scf
+ ret
+.okay
+ 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 CopyName1
+ pop bc
+ pop hl
+ ret
+
+YesNoBox::
+ lb bc, SCREEN_WIDTH - 6, 7
+
+PlaceYesNoBox::
+ jr _YesNoBox
+
+PlaceGenericTwoOptionBox::
+ call LoadMenuHeader
+ jr InterpretTwoOptionMenu
+
+_YesNoBox::
+; Return nc (yes) or c (no).
+ 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
+
+InterpretTwoOptionMenu::
+ call VerticalMenu
+ push af
+ ld c, $f
+ call DelayFrames
+ call CloseWindow
+ pop af
+ jr c, .no
+ ld a, [wMenuCursorY]
+ cp 2 ; no
+ jr z, .no
+ and a
+ ret
+
+.no
+ ld a, 2
+ ld [wMenuCursorY], a
+ scf
+ ret
+
+YesNoMenuHeader::
+ 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 "YES@"
+ db "NO@"
+
+OffsetMenuHeader::
+ call _OffsetMenuHeader
+ call PushWindow
+ ret
+
+_OffsetMenuHeader::
+ push de
+ call CopyMenuHeader
+ pop de
+ ld a, [wMenuBorderLeftCoord]
+ ld h, a
+ ld a, [wMenuBorderRightCoord]
+ sub h
+ 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
+
+DoNthMenu::
+ call DrawVariableLengthMenuBox
+ call MenuWriteText
+ call InitMenuCursorAndButtonPermissions
+ call GetStaticMenuJoypad
+ call GetMenuJoypad
+ call MenuClickSound
+ ret
+
+SetUpMenu::
+ call DrawVariableLengthMenuBox ; ???
+ call MenuWriteText
+ call InitMenuCursorAndButtonPermissions ; set up selection pointer
+ ld hl, w2DMenuFlags1
+ set 7, [hl]
+ ret
+
+DrawVariableLengthMenuBox::
+ call CopyMenuData
+ call GetMenuIndexSet
+ call AutomaticGetMenuBottomCoord
+ call MenuBox
+ ret
+
+MenuWriteText::
+ xor a
+ ldh [hBGMapMode], a
+ call GetMenuIndexSet ; sort out the text
+ call RunMenuItemPrintingFunction ; actually write it
+ call SafeUpdateSprites
+ ldh a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ldh [hOAMUpdate], a
+ call ApplyTilemap
+ pop af
+ ldh [hOAMUpdate], a
+ ret
+
+AutomaticGetMenuBottomCoord::
+ ld a, [wMenuBorderLeftCoord]
+ ld c, a
+ ld a, [wMenuBorderRightCoord]
+ sub c
+ ld c, a
+ ld a, [wMenuDataItems]
+ add a
+ inc a
+ ld b, a
+ ld a, [wMenuBorderTopCoord]
+ add b
+ ld [wMenuBorderBottomCoord], a
+ ret
+
+GetMenuIndexSet::
+ ld hl, wMenuDataIndicesPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wWhichIndexSet]
+ and a
+ jr z, .skip
+ ld b, a
+ ld c, -1
+.loop
+ ld a, [hli]
+ cp c
+ jr nz, .loop
+ dec b
+ jr nz, .loop
+
+.skip
+ ld d, h
+ ld e, l
+ ld a, [hl]
+ ld [wMenuDataItems], a
+ ret
+
+RunMenuItemPrintingFunction::
+ call MenuBoxCoord2Tile
+ ld bc, 2 * SCREEN_WIDTH + 2
+ add hl, bc
+.loop
+ inc de
+ ld a, [de]
+ cp -1
+ ret z
+ ld [wMenuSelection], a
+ push de
+ push hl
+ ld d, h
+ ld e, l
+ ld hl, wMenuDataDisplayFunctionPointer
+ call ._hl_
+ pop hl
+ ld de, 2 * SCREEN_WIDTH
+ add hl, de
+ pop de
+ jr .loop
+
+._hl_
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+InitMenuCursorAndButtonPermissions::
+ call InitVerticalMenuCursor
+ ld hl, wMenuJoypadFilter
+ ld a, [wMenuDataFlags]
+ bit 3, a
+ jr z, .disallow_select
+ set START_F, [hl]
+
+.disallow_select
+ ld a, [wMenuDataFlags]
+ bit 2, a
+ jr z, .disallow_left_right
+ set D_LEFT_F, [hl]
+ set D_RIGHT_F, [hl]
+
+.disallow_left_right
+ ret
+
+GetScrollingMenuJoypad::
+ call ScrollingMenuJoypad
+ ld hl, wMenuJoypadFilter
+ and [hl]
+ jr ContinueGettingMenuJoypad
+
+GetStaticMenuJoypad::
+ xor a
+ ld [wMenuJoypad], a
+ call StaticMenuJoypad
+
+ContinueGettingMenuJoypad:
+ bit A_BUTTON_F, a
+ jr nz, .a_button
+ bit B_BUTTON_F, a
+ jr nz, .b_start
+ bit START_F, a
+ jr nz, .b_start
+ bit D_RIGHT_F, a
+ jr nz, .d_right
+ bit D_LEFT_F, a
+ jr nz, .d_left
+ xor a
+ ld [wMenuJoypad], a
+ jr .done
+
+.d_right
+ ld a, D_RIGHT
+ ld [wMenuJoypad], a
+ jr .done
+
+.d_left
+ ld a, D_LEFT
+ ld [wMenuJoypad], a
+ jr .done
+
+.a_button
+ ld a, A_BUTTON
+ ld [wMenuJoypad], a
+
+.done
+ call GetMenuIndexSet
+ ld a, [wMenuCursorY]
+ ld l, a
+ ld h, $0
+ add hl, de
+ ld a, [hl]
+ ld [wMenuSelection], a
+ ld a, [wMenuCursorY]
+ ld [wMenuCursorBuffer], a
+ and a
+ ret
+
+.b_start
+ ld a, B_BUTTON
+ ld [wMenuJoypad], a
+ ld a, -1
+ ld [wMenuSelection], a
+ scf
+ ret
+
+PlaceMenuStrings::
+ push de
+ ld hl, wMenuDataPointerTableAddr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wMenuSelection]
+ call GetNthString
+ ld d, h
+ ld e, l
+ pop hl
+ call PlaceString
+ ret
+
+PlaceNthMenuStrings::
+ push de
+ ld a, [wMenuSelection]
+ call GetMenuDataPointerTableEntry
+ inc hl
+ inc hl
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ call PlaceString
+ ret
+
+Unreferenced_Function1e08::
+ call GetMenuDataPointerTableEntry
+ inc hl
+ inc hl
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ ret
+
+MenuJumptable::
+ ld a, [wMenuSelection]
+ call GetMenuDataPointerTableEntry
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+GetMenuDataPointerTableEntry::
+ ld e, a
+ ld d, $0
+ ld hl, wMenuDataPointerTableAddr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ ret
+
+ClearWindowData::
+ ld hl, wWindowStackPointer
+ call .bytefill
+ ld hl, wMenuHeader
+ call .bytefill
+ ld hl, wMenuDataFlags
+ call .bytefill
+ ld hl, w2DMenuCursorInitY
+ call .bytefill
+
+ xor a
+ call OpenSRAM
+
+ xor a
+ ld hl, sWindowStackTop
+ ld [hld], a
+ ld [hld], a
+ ld a, l
+ ld [wWindowStackPointer], a
+ ld a, h
+ ld [wWindowStackPointer + 1], a
+
+ call CloseSRAM
+ ret
+
+.bytefill
+ ld bc, $10
+ xor a
+ call ByteFill
+ ret
+
+MenuClickSound::
+ push af
+ and A_BUTTON | B_BUTTON
+ jr z, .nosound
+ ld hl, wMenuHeader
+ bit 3, a
+ jr nz, .nosound
+ call PlayClickSFX
+.nosound
+ pop af
+ ret
+
+PlayClickSFX::
+ push de
+ ld de, SFX_READ_TEXT_2
+ call PlaySFX
+ pop de
+ ret
+
+MenuTextboxWaitButton::
+ call MenuTextbox
+ call WaitButton
+ call ExitMenu
+ ret
+
+Place2DMenuItemName::
+ ld [wBuffer], a
+ ldh a, [hROMBank]
+ push af
+ ld a, [wBuffer]
+ rst Bankswitch
+
+ call PlaceString
+ pop af
+ rst Bankswitch
+
+ ret
+
+_2DMenu::
+ call CopyMenuData
+ ldh a, [hROMBank]
+ ld [wMenuDataBank], a
+ push af
+ ld a, BANK(_2DMenu_)
+ rst Bankswitch
+ call _2DMenu_
+ pop bc
+ ld a, b
+ rst Bankswitch
+ ld a, [wMenuCursorBuffer]
+ ret
+
+ResetBGWindow::
+ xor a
+ ldh [hBGMapMode], a
+ ld a, $90
+ ldh [rWY], a
+ ldh [hWY], a
+ ret \ No newline at end of file
diff --git a/home/menu_window.asm b/home/menu_window.asm
new file mode 100755
index 00000000..e4bdd92d
--- /dev/null
+++ b/home/menu_window.asm
@@ -0,0 +1,209 @@
+PushWindow::
+ callfar _PushWindow
+ ret
+
+ExitMenu::
+ push af
+ callfar _ExitMenu
+ pop af
+ ret
+
+InitVerticalMenuCursor::
+ callfar _InitVerticalMenuCursor
+ ret
+
+CloseWindow::
+ push af
+ call ExitMenu
+ call ApplyTilemap
+ call UpdateSprites
+ pop af
+ ret
+
+RestoreTileBackup::
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ inc b
+ inc c
+
+.row
+ push bc
+ push hl
+
+.col
+ ld a, [de]
+ ld [hli], a
+ dec de
+ dec c
+ jr nz, .col
+
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+
+ ret
+
+PopWindow::
+ ld b, $10
+ ld de, wMenuFlags
+.loop
+ ld a, [hld]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+ ret
+
+GetMenuBoxDims::
+ ld a, [wMenuBorderTopCoord] ; top
+ ld b, a
+ ld a, [wMenuBorderBottomCoord] ; bottom
+ sub b
+ ld b, a
+ ld a, [wMenuBorderLeftCoord] ; left
+ ld c, a
+ ld a, [wMenuBorderRightCoord] ; right
+ sub c
+ ld c, a
+ ret
+
+CopyMenuData::
+ 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, wMenuDataEnd - wMenuDataFlags
+ call CopyBytes
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+
+GetWindowStackTop::
+ 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::
+ 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] ; Number of items
+ inc de
+ ld b, a
+.loop
+ push bc
+ call PlaceString
+ inc de
+ ld bc, 2 * SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .loop
+
+ 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::
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ dec b
+ dec c
+ jp Textbox
+
+GetMenuTextStartCoord::
+ ld a, [wMenuBorderTopCoord]
+ ld b, a
+ inc b
+ ld a, [wMenuBorderLeftCoord]
+ ld c, a
+ inc c
+; bit 6: if not set, leave extra room on top
+ ld a, [wMenuDataFlags]
+ bit 6, a
+ jr nz, .bit_6_set
+ inc b
+
+.bit_6_set
+; bit 7: if set, leave extra room on the left
+ ld a, [wMenuDataFlags]
+ bit 7, a
+ jr z, .bit_7_clear
+ inc c
+
+.bit_7_clear
+ 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::
+ ld a, [wMenuBorderLeftCoord]
+ ld c, a
+ ld a, [wMenuBorderTopCoord]
+ ld b, a
+
+Coord2Tile::
+; Return the address of wTileMap(c, b) in hl.
+ 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/home/tilemap.asm b/home/tilemap.asm
index ecced960..cac86189 100755
--- a/home/tilemap.asm
+++ b/home/tilemap.asm
@@ -1,260 +1,201 @@
-SetMenuAttributes:: ; 1a4e
- push hl
- push bc
- ld hl, w2DMenuCursorInitY
- ld b, $8
-.asm_1a55
- ld a, [de]
- inc de
- ld [hli], a
- dec b
- jr nz, .asm_1a55
- ld a, $1
- ld [hli], a
- ld [hli], a
+ClearBGPalettes::
+ call ClearPalettes
+WaitBGMap::
+; Tell VBlank to update BG Map
+ ld a, 1 ; BG Map 0 tiles
+ ldh [hBGMapMode], a
+; Wait for it to do its magic
+ ld c, 4
+ call DelayFrames
+ ret
+
+WaitBGMap2::
+ ldh a, [hCGB]
+ and a
+ jr z, .bg0
+
+ ld a, 2
+ ldh [hBGMapMode], a
+ ld c, 4
+ call DelayFrames
+
+.bg0
+ ld a, 1
+ ldh [hBGMapMode], a
+ ld c, 4
+ call DelayFrames
+ ret
+
+IsCGB::
+ ldh a, [hCGB]
+ and a
+ ret
+
+ApplyTilemap::
+ ldh a, [hCGB]
+ and a
+ jr z, .dmg
+
+ ld a, [wSpriteUpdatesEnabled]
+ cp 0
+ jr z, .dmg
+
+ ld a, 1
+ ldh [hBGMapMode], a
+ jr CopyTilemapAtOnce
+
+.dmg
+; WaitBGMap
+ ld a, 1
+ ldh [hBGMapMode], a
+ ld c, 4
+ call DelayFrames
+ ret
+
+CGBOnly_CopyTilemapAtOnce::
+ ldh a, [hCGB]
+ and a
+ jr z, WaitBGMap
+
+CopyTilemapAtOnce::
+ ldh a, [hBGMapMode]
+ push af
xor a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- pop bc
- pop hl
- ret
-
-StaticMenuJoypad:: ; 1a66 (0:1a66)
- callfar StaticMenuJoypad_
- call GetMenuJoypad
- ret
-
-ScrollingMenuJoypad:: ; 1a70 (0:1a70)
- callfar ScrollingMenuJoypad_
- call GetMenuJoypad
- ret
+ ldh [hBGMapMode], a
-GetMenuJoypad:: ; 1a7a (0:1a7a)
- push bc
+ ldh a, [hMapAnims]
push af
- ldh a, [hJoyLast]
- and D_PAD
- ld b, a
- ldh a, [hJoyPressed]
- and BUTTONS
- or b
- ld b, a
- pop af
- ld a, b
- pop bc
- ret
-
-PlaceHollowCursor::
- ld hl, wCursorCurrentTile
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld [hl], "▷"
- ret
-
-HideCursor::
- ld hl, wCursorCurrentTile
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld [hl], " "
- ret
-
-PushWindow:: ; 1a9d (0:1a9d)
- callfar PushWindow_
- ret
+ xor a
+ ldh [hMapAnims], a
+
+.wait
+ ldh a, [rLY]
+ cp $7f
+ jr c, .wait
+
+ di
+ ld a, BANK(vTiles3)
+ ldh [rVBK], a
+ hlcoord 0, 0, wAttrMap
+ call .StackPointerMagic
+ ld a, BANK(vTiles0)
+ ldh [rVBK], a
+ hlcoord 0, 0
+ call .StackPointerMagic
+
+.wait2
+ ldh a, [rLY]
+ cp $7f
+ jr c, .wait2
+ ei
-ExitMenu:: ; 1aa4 (0:1aa4)
- push af
- callfar ExitMenu_
pop af
- ret
-
-InitVerticalMenuCursor:: ; 1aad (0:1aad)
- callfar InitVerticalMenuCursor_
- ret
-
-CloseWindow:: ; 1ab4 (0:1ab4)
- push af
- call ExitMenu
- call ApplyTilemap
- call UpdateSprites
+ ldh [hMapAnims], a
pop af
+ ldh [hBGMapMode], a
ret
-RestoreTileBackup::
- call MenuBoxCoord2Tile
- call GetMenuBoxDims
- inc b
- inc c
-.asm_1ac8
- push bc
- push hl
-.asm_1aca
- ld a, [de]
- ld [hli], a
- dec de
- dec c
- jr nz, .asm_1aca
- pop hl
- ld bc, $14
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_1ac8
- ret
-
-PopWindow::
- ld b, wMenuDataHeaderEnd - wMenuDataHeader
- ld de, wMenuDataHeader
-.asm_1adf
- ld a, [hld]
- ld [de], a
- inc de
- dec b
- jr nz, .asm_1adf
+.StackPointerMagic:
+; Copy all tiles to vBGMap
+ ld [hSPBuffer], sp
+ ld sp, hl
+ ldh a, [hBGMapAddress + 1]
+ ld h, a
+ ld l, 0
+ ld a, SCREEN_HEIGHT
+ ldh [hTilesPerCycle], a
+ ld b, 1 << 1 ; not in v/hblank
+ ld c, LOW(rSTAT)
+
+.loop
+rept SCREEN_WIDTH / 2
+ pop de
+; if in v/hblank, wait until not in v/hblank
+.loop\@
+ ldh a, [c]
+ and b
+ jr nz, .loop\@
+; load BGMap0
+ ld [hl], e
+ inc l
+ ld [hl], d
+ inc l
+endr
+
+ ld de, BG_MAP_WIDTH - SCREEN_WIDTH
+ add hl, de
+ ldh a, [hTilesPerCycle]
+ dec a
+ ldh [hTilesPerCycle], a
+ jr nz, .loop
+
+ ldh a, [hSPBuffer]
+ ld l, a
+ ldh a, [hSPBuffer + 1]
+ ld h, a
+ ld sp, hl
ret
-GetMenuBoxDims:: ; 1ae6 (0:1ae6)
- ld a, [wMenuBorderTopCoord]
- ld b, a
- ld a, [wMenuBorderBottomCoord]
- sub b
- ld b, a
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- ld a, [wMenuBorderRightCoord]
- sub c
- ld c, a
+SetPalettes::
+; Inits the Palettes
+; depending on the system the monochromes palettes or color palettes
+ ldh a, [hCGB]
+ and a
+ jr nz, .SetPalettesForGameBoyColor
+ ld a, %11100100
+ ldh [rBGP], a
+ ld a, %11010000
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ret
-CopyMenuData2:: ; 1af9 (0:1af9)
- push hl
+.SetPalettesForGameBoyColor:
push de
- push bc
- push af
- ld hl, wMenuData2Pointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wMenuData2
- ld bc, wMenuData2End - wMenuData2
- call CopyBytes
- pop af
- pop bc
+ ld a, %11100100
+ call DmgToCgbBGPals
+ lb de, %11100100, %11100100
+ call DmgToCgbObjPals
pop de
- pop hl
ret
-GetWindowStackTop::
- ld hl, wWindowStackPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- inc hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ret
+ClearPalettes::
+; Make all palettes white
-PlaceVerticalMenuItems:: ; 1b1c (0:1b1c)
- call CopyMenuData2
- ld hl, wMenuData2Pointer
- ld e, [hl]
- inc hl
- ld d, [hl]
- call GetMenuTextStartCoord
- call Coord2Tile
- inc de
- ld a, [de]
- inc de
- ld b, a
-.asm_1b2f
- push bc
- call PlaceString
- inc de
- ld bc, 2 * SCREEN_WIDTH
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_1b2f
- ld a, [wMenuData2Flags]
- bit 4, a
- ret z
- call MenuBoxCoord2Tile
- ld a, [de]
- ld c, a
- inc de
- ld b, $0
- add hl, bc
- jp PlaceString
-
-MenuBox:: ; 1b4e (0:1b4e)
- call MenuBoxCoord2Tile
- call GetMenuBoxDims
- dec b
- dec c
- jp Textbox
+; CGB: make all the palette colors white
+ ldh a, [hCGB]
+ and a
+ jr nz, .cgb
-GetMenuTextStartCoord:: ; 1b59 (0:1b59)
- ld a, [wMenuBorderTopCoord]
- ld b, a
- inc b
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- inc c
- ld a, [wMenuData2Flags]
- bit 6, a
- jr nz, .asm_1b6b
- inc b
-.asm_1b6b
- ld a, [wMenuData2Flags]
- bit 7, a
- jr z, .asm_1b73
- inc c
-.asm_1b73
+; DMG: just change palettes to 0 (white)
+ xor a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ret
-ClearMenuBoxInterior::
- call MenuBoxCoord2Tile
- ld bc, SCREEN_WIDTH + 1
- add hl, bc
- call GetMenuBoxDims
- dec b
- dec c
- call ClearBox
+.cgb
+; Fill wBGPals and wOBPals with $ffff (white)
+ ld hl, wBGPals
+ ld bc, 16 palettes
+ ld a, $ff
+ call ByteFill
+; Request palette update
+ ld a, 1
+ ldh [hCGBPalUpdate], a
ret
-ClearWholeMenuBox::
- call MenuBoxCoord2Tile
- call GetMenuBoxDims
- inc c
- inc b
- call ClearBox
- ret
+GetMemSGBLayout::
+ ld b, SCGB_RAM
+GetSGBLayout::
+; load sgb packets unless dmg
-MenuBoxCoord2Tile:: ; 1b90 (0:1b90)
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- ld a, [wMenuBorderTopCoord]
- ld b, a
-Coord2Tile:: ; 1b98 (0:1b98)
- 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
- ld bc, wTileMap
- add hl, bc
- ret
+ ldh a, [hCGB]
+ and a
+ jr nz, .sgb
+
+ ldh a, [hSGB]
+ and a
+ ret z
+
+.sgb
+ predef_jump LoadSGBLayout \ No newline at end of file
diff --git a/home/window.asm b/home/window.asm
index d3272f07..20521b98 100644
--- a/home/window.asm
+++ b/home/window.asm
@@ -58,7 +58,7 @@ _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap:: ; 2ee3 (0:2ee3)
push af
ld a, $1
ldh [hOAMUpdate], a
- call CGBOnly_LoadEDTile
+ call CGBOnly_CopyTilemapAtOnce
pop af
ldh [hOAMUpdate], a
ret
diff --git a/items/item_effects.asm b/items/item_effects.asm
index 51a9ef1a..2308c6b2 100755
--- a/items/item_effects.asm
+++ b/items/item_effects.asm
@@ -1920,7 +1920,7 @@ Functionf46f: ; f46f (3:746f)
.asm_f496
push bc
ld hl, Text_MilkDrinkCantBeUsed
- call MenuTextBoxBackup
+ call MenuTextboxBackup
pop bc
jr Functionf46f
@@ -2116,7 +2116,7 @@ Text_PlayedThePokeFlute:
CoinCase: ; f5e1 (3:75e1)
ld hl, Text_CoinCase
- jp MenuTextBoxWaitButton
+ jp MenuTextboxWaitButton
Text_CoinCase:
text_far Text_CoinCase_
diff --git a/main.asm b/main.asm
index 9c8663a6..2bdf0be8 100644
--- a/main.asm
+++ b/main.asm
@@ -730,15 +730,15 @@ StringBufferPointers::
dr $24000, $2400e
_2DMenu_::
dr $2400e, $24136
-StaticMenuJoypad_::
+_StaticMenuJoypad::
dr $24136, $24139
-ScrollingMenuJoypad_::
+_ScrollingMenuJoypad::
dr $24139, $242a0
-PushWindow_::
+_PushWindow::
dr $242a0, $24307
-ExitMenu_::
+_ExitMenu::
dr $24307, $24395
-InitVerticalMenuCursor_::
+_InitVerticalMenuCursor::
dr $24395, $243eb
UpdateItemDescription:
dr $243eb, $244d7
diff --git a/wram.asm b/wram.asm
index 8ccb22f1..685331ee 100644
--- a/wram.asm
+++ b/wram.asm
@@ -2194,13 +2194,14 @@ wceb6:: ds 1 ; ceb6
wceb7:: ds 1 ; ceb7
wWindowDataEnd::
-wMenuDataHeader::
+wMenuHeader::
+wMenuFlags::
wceb8:: ds 1 ; ceb8
wMenuBorderTopCoord:: ds 1 ; ceb9
wMenuBorderLeftCoord:: ds 1 ; ceba
wMenuBorderBottomCoord:: ds 1 ; cebb
wMenuBorderRightCoord:: ds 1 ; cebc
-wMenuData2Pointer:: dw ; cebd
+wMenuDataPointer:: dw ; cebd
wMenuCursorBuffer:: ds 1 ; cebf
wcec0:: ds 1 ; cec0
wcec1:: ds 1 ; cec1
@@ -2210,15 +2211,15 @@ wcec4:: ds 1 ; cec4
wcec5:: ds 1 ; cec5
wcec6:: ds 1 ; cec6
wcec7:: ds 1 ; cec7
-wMenuDataHeaderEnd::
+wMenuHeaderEnd::
-wMenuData2::
-wMenuData2Flags:: ds 1 ; cec8
-wMenuData2Items:: ds 1 ; cec9
-wMenuData2IndicesPointer:: ds 1 ; ceca
+wMenuData::
+wMenuDataFlags:: ds 1 ; cec8
+wMenuDataItems:: ds 1 ; cec9
+wMenuDataIndicesPointer:: ds 1 ; ceca
wMenuDataBank:: ds 1 ; cecb
-wMenuData2DisplayFunctionPointer:: dw ; cecc
-wMenuData2PointerTableAddr:: ds 1 ; cece
+wMenuDataDisplayFunctionPointer:: dw ; cecc
+wMenuDataPointerTableAddr:: ds 1 ; cece
wcecf:: ds 1 ; cecf
wced0:: ds 1 ; ced0
wced1:: ds 1 ; ced1
@@ -2228,14 +2229,14 @@ wced4:: ds 1 ; ced4
wced5:: ds 1 ; ced5
wced6:: ds 1 ; ced6
wced7:: ds 1 ; ced7
-wMenuData2End::
+wMenuDataEnd::
wMenuData3::
w2DMenuCursorInitY:: ds 1 ; ced8
wced9:: ds 1 ; ced9
wceda:: ds 1 ; ceda
wcedb:: ds 1 ; cedb
-wcedc:: ds 1 ; cedc
+w2DMenuFlags1:: ds 1 ; cedc
wcedd:: ds 1 ; cedd
wcede:: ds 1 ; cede
wMenuJoypadFilter:: ds 1 ; cedf