diff options
| author | libjet <libj3t@gmail.com> | 2020-02-19 16:23:56 +0000 | 
|---|---|---|
| committer | libjet <libj3t@gmail.com> | 2020-02-19 16:23:56 +0000 | 
| commit | 4f1d434564bf3b6c1c469ebb3e33e1475d7e2136 (patch) | |
| tree | 9dd335ebacb66ca3254aff468f3a951bbebec8c9 | |
| parent | b1a35aa1770c7972fdb6e7af50ad529118b972d2 (diff) | |
Add home/tilemap.asm and update home/menu.asm
| -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 | 
