diff options
author | mid-kid <esteve.varela@gmail.com> | 2018-06-06 21:47:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-06 21:47:59 +0200 |
commit | bad561848af1a20143ac290a92ecdfb9748a14e0 (patch) | |
tree | 3c03282b382c6a9effc21a4033d7923cc64e1f3d | |
parent | e00b497917f6403dfa4d3316771ecf667b010392 (diff) | |
parent | 28dff6de4aac4ef4c34479d70b28cefa9718c4ea (diff) |
Merge pull request #15 from PikalaxALT/more_window_related
Move files around to better reflect the structure of pokecrystal
-rw-r--r-- | home/menu.asm | 456 | ||||
-rw-r--r-- | home/print_text.asm | 51 | ||||
-rw-r--r-- | home/window.asm | 424 |
3 files changed, 467 insertions, 464 deletions
diff --git a/home/menu.asm b/home/menu.asm index e8b4eeb..64d3f9a 100644 --- a/home/menu.asm +++ b/home/menu.asm @@ -1,51 +1,425 @@ include "constants.asm" -if DEBUG -SECTION "Print Letter Delay", ROM0[$33a3] -else -SECTION "Print Letter Delay", ROM0[$3367] -endc - -PrintLetterDelay:: ; 33a3 (0:33a3) - ld a, [wce5f] - bit 4, a - ret nz - ld a, [wTextBoxFlags] +SECTION "Menu Functions", ROM0 [$1d49] + +LoadMenuHeader:: ; 00:1d49 + call CopyMenuHeader + call PushWindow + ret + +CopyMenuHeader:: ; 00:1d50 + ld de, wMenuDataHeader + ld bc, $10 + jp CopyBytes + +MenuTextBox:: ; 00:1d59 + push hl + ld hl, .Data + call LoadMenuHeader + pop hl + jp PrintText + +; unused + ret + +.Data: ; 00:1d65 + db MENU_BACKUP_TILES ; flags + menu_coords 0, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 + dw VRAM_Begin + db 0 ; default option + +MenuTextBoxBackup:: + call MenuTextBox + call CloseWindow + ret + +LoadStandardMenuHeader:: + ld hl, .Data + call LoadMenuHeader + ret + +.Data: ; 00:1d7b + db MENU_BACKUP_TILES ; flags + menu_coords 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 + dw 0 + db 1 ; default option + +Call_ExitMenu:: + call ExitMenu + ret + +VerticalMenu:: ; 00:1d87 + xor a + ldh [hBGMapMode], a + call MenuBox + call UpdateSprites + call PlaceVerticalMenuItems + call WaitBGMap + call CopyMenuData + ld a, [wMenuData2] + bit 7, a + jr z, .asm_1daa + call InitVerticalMenuCursor + call Function1a7c bit 1, a + jr z, .asm_1dac +.asm_1daa: ; 00:1daa + scf + ret + +.asm_1dac: ; 00:1dac + and a + ret + +GetMenu2:: + call LoadMenuHeader + call VerticalMenu + call CloseWindow + ld a, [wMenuCursorY] + ret + +CopyNameFromMenu:: + push hl + push bc + push af + ld hl, wMenuDataPointer + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + pop af + call GetNthString + ld d, h + ld e, l + call CopyStringToCD31 + pop bc + pop hl + ret + +YesNoBox:: + lb bc, 14, 7 + jr asm_1ddc + +PlaceGenericTwoOptionBox:: + call LoadMenuHeader + jr asm_1df9 + +asm_1ddc: ; 00:1ddc + push bc + ld hl, YesNoMenuHeader + call CopyMenuHeader + pop bc + ld a, b + ld [wMenuBorderLeftCoord], a + add 5 + ld [wMenuBorderRightCoord], a + ld a, c + ld [wMenuBorderTopCoord], a + add 4 + ld [wMenuBorderBottomCoord], a + call PushWindow +asm_1df9: ; 00:1df9 + call VerticalMenu + push af + ld c, 15 + call DelayFrames + call CloseWindow + pop af + jr c, .asm_1e11 + ld a, [wMenuCursorY] + cp $2 + jr z, .asm_1e11 + and a + ret + +.asm_1e11: ; 00:1e11 + ld a, $2 + ld [wMenuCursorY], a + scf + ret + +YesNoMenuHeader:: ; 00:1e18 + db MENU_BACKUP_TILES ; flags + menu_coords 10, 5, 15, 9 + dw .MenuData + db 1 ; default option + +.MenuData: + db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags + db 2 + db "はい@" + db "いいえ@" + +OffsetMenuHeader:: + call _OffsetMenuHeader + call PushWindow + ret + +_OffsetMenuHeader:: ; 00:1e30 + push de + call CopyMenuHeader + pop de + ld a, [wMenuBorderLeftCoord] + ld h, a + ld a, [wMenuBorderRightCoord] + sub h +.asm_1e3d: ; 00:1e3d + ld h, a + ld a, d + ld [wMenuBorderLeftCoord], a + add h + ld [wMenuBorderRightCoord], a + ld a, [wMenuBorderTopCoord] + ld l, a + ld a, [wMenuBorderBottomCoord] + sub l + ld l, a + ld a, e + ld [wMenuBorderTopCoord], a + add l + ld [wMenuBorderBottomCoord], a + ret + +OpenMenu:: ; 00:1e58 + call CopyMenuData + call GetMenuIndexSet + push de + ld a, [wMenuCursorBuffer] + push af + call Function1e8a + pop af + ld [wMenuCursorBuffer], a + call AutomaticGetMenuBottomCoord + call PushWindow + call MenuBox + pop de + call GetMenuIndexSet + push de + call RunMenuItemPrintingFunction + ld a, $1 + ldh [hBGMapMode], a + call UpdateSprites + call GetMenuIndexSet + pop de + call Function1f27 + ret + +Function1e8a:: ; 00:1e8a + xor a + ldh [hBGMapMode], a + xor a + call OpenSRAM + call Function1cae + ld a, l + ld [wWindowStackPointer], a + ld a, h + ld [wWindowStackPointer + 1], a + call Function1c7a + ld d, h + ld e, l + call Function1c60 + call CloseSRAM + ld hl, wWindowStackSize + dec [hl] + ret + +AutomaticGetMenuBottomCoord:: ; 00:1eac + 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:: ; 00:1ec3 + ld hl, wMenuDataIndicesPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wWhichIndexSet] + and a + jr z, .asm_1ed9 + ld b, a + ld c, -1 +.asm_1ed2: ; 00:1ed2 + ld a, [hli] + cp c + jr nz, .asm_1ed2 + dec b + jr nz, .asm_1ed2 +.asm_1ed9: ; 00:1ed9 + ld d, h + ld e, l + inc hl + ld c, $ff +.asm_1ede: ; 00:1ede + inc c + ld a, [hli] + cp $ff + jr nz, .asm_1ede + ld a, c + ld [wMenuDataItems], a + ret + +Function1ee9:: ; 1ee9 + call MenuBoxCoord2Tile + call Function1c86 + ld a, [wMenuDataItems] + add a + cp b + jr nc, .asm_1ef9 + ld b, a + dec c + ret + +.asm_1ef9: ; 00:1ef9 + ld a, b + srl a + dec a + ld [wMenuDataItems], a + dec c + ret + +RunMenuItemPrintingFunction:: ; 00:1f02 + call MenuBoxCoord2Tile + ld bc, 2 * SCREEN_WIDTH + 2 + add hl, bc +.asm_1f09: ; 00:1f09 + 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 .asm_1f09 + +._hl_: + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +Function1f27:: ; 00:1f27 +; Combines Crystal functions "InitMenuCursorAndButtonPermissions" and "GetStaticMenuJoypad" push de - push bc - ld a, [wTextBoxFlags] + call InitVerticalMenuCursor + ld hl, wMenuJoypadFilter + ld a, [wMenuData2] + bit 3, a + jr z, .asm_1f37 + set 3, [hl] +.asm_1f37: ; 00:1f37 + bit 2, a + jr z, .asm_1f3f + ld a, [hl] + or D_LEFT | D_RIGHT + ld [hl], a +.asm_1f3f: ; 00:1f3f + call Function1a7c + pop de bit 0, a - jr z, .waitOneFrame - ld a, [wce5f] - and $07 - jr .initFrameCnt -.waitOneFrame - ld a, $01 -.initFrameCnt - ld [wVBlankJoyFrameCounter], a -.checkButtons - call GetJoypad - ldh a, [hJoyState] -.checkAButton - bit 0, a ; is the A button pressed? - jr z, .checkBButton - jr .endWait -.checkBButton - bit 1, a ; is the B button pressed? - jr z, .buttonsNotPressed -.endWait - call DelayFrame - jr .done -.buttonsNotPressed ; if neither A nor B is pressed - ld a, [wVBlankJoyFrameCounter] + jr nz, .asm_1f66 + bit 1, a + jr nz, .asm_1f7e + bit 3, a + jr nz, .asm_1f7e + bit 4, a + jr nz, .asm_1f58 + bit 5, a + jr nz, .asm_1f5f + ret + +.asm_1f58: ; 00:1f58 + ld a, D_RIGHT + ld [wMenuJoypad], a + jr .asm_1f6b + +.asm_1f5f: ; 00:1f5f + ld a, D_LEFT + ld [wMenuJoypad], a + jr .asm_1f6b + +.asm_1f66: ; 00:1f66 + ld a, A_BUTTON + ld [wMenuJoypad], a +.asm_1f6b: ; 00:1f6b + 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 - jr nz, .checkButtons -.done - pop bc - pop de + ret + +.asm_1f7e: ; 00:1f7e + 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 + +ClearWindowData:: ; 00:1f9e + ld hl, wWindowStackPointer + 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 + 1 + ld [hld], a + ld [hld], a + ld a, l + ld [wWindowStackPointer], a + ld a, h + ld [wWindowStackPointer + 1], a + + call CloseSRAM + ret + +.bytefill: ; 00:1fcc + ld bc, 16 + xor a + call ByteFill ret -; 0x33e3
\ No newline at end of file diff --git a/home/print_text.asm b/home/print_text.asm new file mode 100644 index 0000000..e8b4eeb --- /dev/null +++ b/home/print_text.asm @@ -0,0 +1,51 @@ +include "constants.asm" + +if DEBUG +SECTION "Print Letter Delay", ROM0[$33a3] +else +SECTION "Print Letter Delay", ROM0[$3367] +endc + +PrintLetterDelay:: ; 33a3 (0:33a3) + ld a, [wce5f] + bit 4, a + ret nz + ld a, [wTextBoxFlags] + bit 1, a + ret z + push hl + push de + push bc + ld a, [wTextBoxFlags] + bit 0, a + jr z, .waitOneFrame + ld a, [wce5f] + and $07 + jr .initFrameCnt +.waitOneFrame + ld a, $01 +.initFrameCnt + ld [wVBlankJoyFrameCounter], a +.checkButtons + call GetJoypad + ldh a, [hJoyState] +.checkAButton + bit 0, a ; is the A button pressed? + jr z, .checkBButton + jr .endWait +.checkBButton + bit 1, a ; is the B button pressed? + jr z, .buttonsNotPressed +.endWait + call DelayFrame + jr .done +.buttonsNotPressed ; if neither A nor B is pressed + ld a, [wVBlankJoyFrameCounter] + and a + jr nz, .checkButtons +.done + pop bc + pop de + pop hl + ret +; 0x33e3
\ No newline at end of file diff --git a/home/window.asm b/home/window.asm index d6d77dd..1815e89 100644 --- a/home/window.asm +++ b/home/window.asm @@ -1,428 +1,6 @@ include "constants.asm" -SECTION "Window related functions", ROM0 [$1d49] - -LoadMenuHeader:: ; 00:1d49 - call CopyMenuHeader - call PushWindow - ret - -CopyMenuHeader:: ; 00:1d50 - ld de, wMenuDataHeader - ld bc, $10 - jp CopyBytes - -MenuTextBox:: ; 00:1d59 - push hl - ld hl, .Data - call LoadMenuHeader - pop hl - jp PrintText - -; unused - ret - -.Data: ; 00:1d65 - db MENU_BACKUP_TILES ; flags - menu_coords 0, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 - dw VRAM_Begin - db 0 ; default option - -MenuTextBoxBackup:: - call MenuTextBox - call CloseWindow - ret - -LoadStandardMenuHeader:: - ld hl, .Data - call LoadMenuHeader - ret - -.Data: ; 00:1d7b - db MENU_BACKUP_TILES ; flags - menu_coords 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1 - dw 0 - db 1 ; default option - -Call_ExitMenu:: - call ExitMenu - ret - -VerticalMenu:: ; 00:1d87 - xor a - ldh [hBGMapMode], a - call MenuBox - call UpdateSprites - call PlaceVerticalMenuItems - call WaitBGMap - call CopyMenuData - ld a, [wMenuData2] - bit 7, a - jr z, .asm_1daa - call InitVerticalMenuCursor - call Function1a7c - bit 1, a - jr z, .asm_1dac -.asm_1daa: ; 00:1daa - scf - ret - -.asm_1dac: ; 00:1dac - and a - ret - -GetMenu2:: - call LoadMenuHeader - call VerticalMenu - call CloseWindow - ld a, [wMenuCursorY] - ret - -CopyNameFromMenu:: - push hl - push bc - push af - ld hl, wMenuDataPointer - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - pop af - call GetNthString - ld d, h - ld e, l - call CopyStringToCD31 - pop bc - pop hl - ret - -YesNoBox:: - lb bc, 14, 7 - jr asm_1ddc - -PlaceGenericTwoOptionBox:: - call LoadMenuHeader - jr asm_1df9 - -asm_1ddc: ; 00:1ddc - push bc - ld hl, YesNoMenuHeader - call CopyMenuHeader - pop bc - ld a, b - ld [wMenuBorderLeftCoord], a - add 5 - ld [wMenuBorderRightCoord], a - ld a, c - ld [wMenuBorderTopCoord], a - add 4 - ld [wMenuBorderBottomCoord], a - call PushWindow -asm_1df9: ; 00:1df9 - call VerticalMenu - push af - ld c, 15 - call DelayFrames - call CloseWindow - pop af - jr c, .asm_1e11 - ld a, [wMenuCursorY] - cp $2 - jr z, .asm_1e11 - and a - ret - -.asm_1e11: ; 00:1e11 - ld a, $2 - ld [wMenuCursorY], a - scf - ret - -YesNoMenuHeader:: ; 00:1e18 - db MENU_BACKUP_TILES ; flags - menu_coords 10, 5, 15, 9 - dw .MenuData - db 1 ; default option - -.MenuData: - db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags - db 2 - db "はい@" - db "いいえ@" - -OffsetMenuHeader:: - call _OffsetMenuHeader - call PushWindow - ret - -_OffsetMenuHeader:: ; 00:1e30 - push de - call CopyMenuHeader - pop de - ld a, [wMenuBorderLeftCoord] - ld h, a - ld a, [wMenuBorderRightCoord] - sub h -.asm_1e3d: ; 00:1e3d - ld h, a - ld a, d - ld [wMenuBorderLeftCoord], a - add h - ld [wMenuBorderRightCoord], a - ld a, [wMenuBorderTopCoord] - ld l, a - ld a, [wMenuBorderBottomCoord] - sub l - ld l, a - ld a, e - ld [wMenuBorderTopCoord], a - add l - ld [wMenuBorderBottomCoord], a - ret - -OpenMenu:: ; 00:1e58 - call CopyMenuData - call GetMenuIndexSet - push de - ld a, [wMenuCursorBuffer] - push af - call Function1e8a - pop af - ld [wMenuCursorBuffer], a - call AutomaticGetMenuBottomCoord - call PushWindow - call MenuBox - pop de - call GetMenuIndexSet - push de - call RunMenuItemPrintingFunction - ld a, $1 - ldh [hBGMapMode], a - call UpdateSprites - call GetMenuIndexSet - pop de - call Function1f27 - ret - -Function1e8a:: ; 00:1e8a - xor a - ldh [hBGMapMode], a - xor a - call OpenSRAM - call Function1cae - ld a, l - ld [wWindowStackPointer], a - ld a, h - ld [wWindowStackPointer + 1], a - call Function1c7a - ld d, h - ld e, l - call Function1c60 - call CloseSRAM - ld hl, wWindowStackSize - dec [hl] - ret - -AutomaticGetMenuBottomCoord:: ; 00:1eac - 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:: ; 00:1ec3 - ld hl, wMenuDataIndicesPointer - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [wWhichIndexSet] - and a - jr z, .asm_1ed9 - ld b, a - ld c, -1 -.asm_1ed2: ; 00:1ed2 - ld a, [hli] - cp c - jr nz, .asm_1ed2 - dec b - jr nz, .asm_1ed2 -.asm_1ed9: ; 00:1ed9 - ld d, h - ld e, l - inc hl - ld c, $ff -.asm_1ede: ; 00:1ede - inc c - ld a, [hli] - cp $ff - jr nz, .asm_1ede - ld a, c - ld [wMenuDataItems], a - ret - -Function1ee9:: ; 1ee9 - call MenuBoxCoord2Tile - call Function1c86 - ld a, [wMenuDataItems] - add a - cp b - jr nc, .asm_1ef9 - ld b, a - dec c - ret - -.asm_1ef9: ; 00:1ef9 - ld a, b - srl a - dec a - ld [wMenuDataItems], a - dec c - ret - -RunMenuItemPrintingFunction:: ; 00:1f02 - call MenuBoxCoord2Tile - ld bc, 2 * SCREEN_WIDTH + 2 - add hl, bc -.asm_1f09: ; 00:1f09 - 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 .asm_1f09 - -._hl_: - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -Function1f27:: ; 00:1f27 -; Combines Crystal functions "InitMenuCursorAndButtonPermissions" and "GetStaticMenuJoypad" - push de - call InitVerticalMenuCursor - ld hl, wMenuJoypadFilter - ld a, [wMenuData2] - bit 3, a - jr z, .asm_1f37 - set 3, [hl] -.asm_1f37: ; 00:1f37 - bit 2, a - jr z, .asm_1f3f - ld a, [hl] - or D_LEFT | D_RIGHT - ld [hl], a -.asm_1f3f: ; 00:1f3f - call Function1a7c - pop de - bit 0, a - jr nz, .asm_1f66 - bit 1, a - jr nz, .asm_1f7e - bit 3, a - jr nz, .asm_1f7e - bit 4, a - jr nz, .asm_1f58 - bit 5, a - jr nz, .asm_1f5f - ret - -.asm_1f58: ; 00:1f58 - ld a, D_RIGHT - ld [wMenuJoypad], a - jr .asm_1f6b - -.asm_1f5f: ; 00:1f5f - ld a, D_LEFT - ld [wMenuJoypad], a - jr .asm_1f6b - -.asm_1f66: ; 00:1f66 - ld a, A_BUTTON - ld [wMenuJoypad], a -.asm_1f6b: ; 00:1f6b - 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_1f7e: ; 00:1f7e - 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 - -ClearWindowData:: ; 00:1f9e - ld hl, wWindowStackPointer - 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 + 1 - ld [hld], a - ld [hld], a - ld a, l - ld [wWindowStackPointer], a - ld a, h - ld [wWindowStackPointer + 1], a - - call CloseSRAM - ret - -.bytefill: ; 00:1fcc - ld bc, 16 - xor a - call ByteFill - ret +SECTION "Window Functions", ROM0[$1fd4] RefreshScreen:: call ClearWindowData |