summaryrefslogtreecommitdiff
path: root/engine/erase_all_data_menu.asm
blob: e81a7688837141c1af07d664ec49c32ba3edab9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
HandleEraseAllDataMenu: ; 0x815d
	ld a, [wScreenState]
	rst JumpTable  ; calls JumpToFuncInTable
EraseAllDataMenuFunctions: ; 0x8161
	dw CheckForResetButtonCombo
	dw HandleEraseAllDataInput
	dw ExitEraseAllDataMenu

CheckForResetButtonCombo: ; 0x8167
	ld a, [hJoypadState]
	cp (D_UP | D_RIGHT | START | SELECT)
	jr z, .heldCorrectButtons
	ld hl, wCurrentScreen
	inc [hl]
	ret

.heldCorrectButtons
	ld a, $41
	ld [hLCDC], a
	ld a, $e4
	ld [wBGP], a
	xor a
	ld [wOBP0], a
	ld [wOBP1], a
	ld [hSCX], a
	ld [hSCY], a
	ld a, [hGameBoyColorFlag]
	ld hl, EraseAllDataGfxPointers
	call LoadVideoData
	call ClearOAMBuffer
	call SetAllPalettesWhite
	call EnableLCD
	call SGBNormal
	call FadeIn
	ld hl, wScreenState
	inc [hl]
	ret

EraseAllDataGfxPointers: ; 0x81a2
	dw EraseAllDataGfx_GameBoy
	dw EraseAllDataGfx_GameBoyColor

EraseAllDataGfx_GameBoy: ; 0x81a6
	VIDEO_DATA_TILES   EraseAllDataGfx, vTilesBG, $300
	VIDEO_DATA_TILEMAP EraseAllDataTilemap, vBGMap, $400
	db $FF, $FF ; terminators

EraseAllDataGfx_GameBoyColor: ; 0x81b6
	VIDEO_DATA_TILES    EraseAllDataGfx, vTilesBG, $300
	VIDEO_DATA_TILEMAP  EraseAllDataTilemap, vBGMap, $400
	VIDEO_DATA_BGATTR   EraseAllDataBGAttributes, vBGMap, $400
	VIDEO_DATA_PALETTES HighScoresRedStagePalettes, $80
	db $FF, $FF ; terminators

HandleEraseAllDataInput: ; 0x81d4
	ld a, [hNewlyPressedButtons]
	bit BIT_A_BUTTON, a
	jr z, .checkForBButton
	ld hl, $a000
	xor a
	ld b, a
.eraseSavedDataLoop
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	dec b
	jr nz, .eraseSavedDataLoop
	ld hl, wScreenState
	inc [hl]
	ret

.checkForBButton
	bit BIT_B_BUTTON, a
	ret z
	ld hl, wScreenState
	inc [hl]
	ret

ExitEraseAllDataMenu: ; 0x820f
	call FadeOut
	call DisableLCD
	ld hl, wCurrentScreen
	inc [hl]
	xor a
	ld [wScreenState], a
	ret