diff options
-rw-r--r-- | engine/billspctop.asm | 20 | ||||
-rwxr-xr-x | engine/color.asm | 2 | ||||
-rwxr-xr-x | engine/events/overworld.asm | 18 | ||||
-rwxr-xr-x | engine/events/whiteout.asm | 2 | ||||
-rw-r--r-- | engine/learn.asm | 4 | ||||
-rwxr-xr-x | engine/main_menu.asm | 8 | ||||
-rwxr-xr-x | engine/move_mon.asm | 2 | ||||
-rwxr-xr-x | engine/overworld/player_object.asm | 2 | ||||
-rwxr-xr-x | engine/pack.asm | 28 | ||||
-rw-r--r-- | home.asm | 176 | ||||
-rw-r--r-- | home/map.asm | 6 | ||||
-rw-r--r-- | home/menu.asm | 518 | ||||
-rwxr-xr-x | home/menu2.asm | 526 | ||||
-rwxr-xr-x | home/menu_window.asm | 209 | ||||
-rwxr-xr-x | home/tilemap.asm | 415 | ||||
-rw-r--r-- | home/window.asm | 2 | ||||
-rwxr-xr-x | items/item_effects.asm | 4 | ||||
-rw-r--r-- | main.asm | 10 | ||||
-rw-r--r-- | wram.asm | 23 |
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 @@ -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_ @@ -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 @@ -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 |