diff options
Diffstat (limited to 'engine/menus')
-rwxr-xr-x | engine/menus/delete_save.asm | 34 | ||||
-rwxr-xr-x | engine/menus/savemenu_copytilemapatonce.asm | 84 |
2 files changed, 118 insertions, 0 deletions
diff --git a/engine/menus/delete_save.asm b/engine/menus/delete_save.asm new file mode 100755 index 00000000..a3ea661d --- /dev/null +++ b/engine/menus/delete_save.asm @@ -0,0 +1,34 @@ +_DeleteSaveData: + call ClearTilemap + call GetMemSGBLayout + call LoadStandardFont + call LoadFontsExtra + ld de, MUSIC_MAIN_MENU + call PlayMusic + ld hl, .ClearAllSaveDataText + call PrintText + ld hl, .NoYesMenuHeader + call CopyMenuHeader + call VerticalMenu + ret c + ld a, [wMenuCursorY] + cp 1 + ret z + farcall EmptyAllSRAMBanks + ret + +.ClearAllSaveDataText: + text_far _ClearAllSaveDataText + text_end + +.NoYesMenuHeader: + db 0 ; flags + menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1 + dw .MenuData + db 1 ; default option + +.MenuData: + db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags + db 2 ; items + db "NO@" + db "YES@" diff --git a/engine/menus/savemenu_copytilemapatonce.asm b/engine/menus/savemenu_copytilemapatonce.asm new file mode 100755 index 00000000..4b567a58 --- /dev/null +++ b/engine/menus/savemenu_copytilemapatonce.asm @@ -0,0 +1,84 @@ +SaveMenu_CopyTilemapAtOnce: + ldh a, [hCGB] + and a + jp z, WaitBGMap + +; The following is a modified version of CopyTilemapAtOnce +; that waits for [rLY] to be $60 instead of $80 - 1. + ldh a, [hBGMapMode] + push af + xor a + ldh [hBGMapMode], a + + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + +.wait + ldh a, [rLY] + cp $60 + jr c, .wait + + di + ld a, BANK(vBGMap2) + ldh [rVBK], a + hlcoord 0, 0, wAttrmap + call .CopyBGMapViaStack + ld a, BANK(vBGMap0) + ldh [rVBK], a + hlcoord 0, 0 + call .CopyBGMapViaStack + +.wait2 + ldh a, [rLY] + cp $60 + jr c, .wait2 + ei + + pop af + ldh [hMapAnims], a + pop af + ldh [hBGMapMode], a + ret + +.CopyBGMapViaStack: +; 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 vBGMap + 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 |