Decompile erase SRAM menu

This commit is contained in:
y.demaisonregne 2023-02-28 22:03:51 +01:00
parent 3ed34562fc
commit e0e1d723fc
30 changed files with 1032 additions and 941 deletions

View File

@ -1371,8 +1371,8 @@ lbl_080033d0: .4byte 0x84400004
lbl_080033d4: .4byte 0x040000c6
lbl_080033d8: .4byte 0x040000d2
thumb_func_start sub_080033dc
sub_080033dc: @ 0x080033dc
thumb_func_start unk_33dc
unk_33dc: @ 0x080033dc
push {r4, r5, lr}
sub sp, #4
ldr r5, lbl_08003440 @ =0x03001d00

View File

@ -19766,7 +19766,7 @@ lbl_0806135e:
movs r0, #0
strb r0, [r2]
lbl_08061370:
bl ClearGFXRAM
bl ClearGfxRam
ldr r2, lbl_080613fc @ =0x03000bf4
ldr r0, lbl_08061400 @ =0x03000bf6
movs r3, #0x80

View File

@ -25265,7 +25265,7 @@ lbl_080734a4:
lbl_080734b0: .4byte 0x08754bc8
lbl_080734b4: .4byte 0x00006d40
lbl_080734b8:
bl sub_08000c04
bl EraseSRAM
ldr r1, lbl_080734e0 @ =0x0841147c
ldr r2, lbl_080734e4 @ =0x03000014
movs r0, #0x10
@ -30116,908 +30116,3 @@ sub_08075c04: @ 0x08075c04
.align 2, 0
lbl_08075c28: .4byte 0x08075bf9
lbl_08075c2c: .4byte 0x03000c1d
thumb_func_start erase_sram_main
erase_sram_main: @ 0x08075c30
push {r4, r5, r6, lr}
movs r6, #0
ldr r2, lbl_08075c58 @ =0x08754bc4
ldr r1, [r2]
ldrh r0, [r1, #4]
adds r0, #1
strh r0, [r1, #4]
ldr r0, lbl_08075c5c @ =0x03000c72
movs r3, #0
ldrsh r1, [r0, r3]
adds r5, r2, #0
adds r4, r0, #0
cmp r1, #7
bls lbl_08075c4e
b lbl_08075d6c
lbl_08075c4e:
lsls r0, r1, #2
ldr r1, lbl_08075c60 @ =lbl_08075c64
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
lbl_08075c58: .4byte 0x08754bc4
lbl_08075c5c: .4byte 0x03000c72
lbl_08075c60: .4byte lbl_08075c64
lbl_08075c64: @ jump table
.4byte lbl_08075c84 @ case 0
.4byte lbl_08075c94 @ case 1
.4byte lbl_08075cbc @ case 2
.4byte lbl_08075cfc @ case 3
.4byte lbl_08075d0a @ case 4
.4byte lbl_08075d28 @ case 5
.4byte lbl_08075d40 @ case 6
.4byte lbl_08075d62 @ case 7
lbl_08075c84:
bl erase_sram_menu_init
ldr r1, lbl_08075c90 @ =0x03000c72
ldrh r0, [r1]
b lbl_08075d48
.align 2, 0
lbl_08075c90: .4byte 0x03000c72
lbl_08075c94:
ldr r1, lbl_08075ca4 @ =0x030013ae
ldrh r3, [r1]
adds r2, r3, #0
cmp r2, #0
beq lbl_08075ca8
subs r0, r3, #1
strh r0, [r1]
b lbl_08075d6c
.align 2, 0
lbl_08075ca4: .4byte 0x030013ae
lbl_08075ca8:
ldr r1, [r5]
movs r0, #0xef
strh r0, [r1, #0xa]
strb r3, [r1, #6]
ldrh r0, [r4]
adds r0, #1
strh r0, [r4]
ldr r0, [r5]
strh r2, [r0, #4]
b lbl_08075d6c
lbl_08075cbc:
ldr r4, lbl_08075ce4 @ =0x03000c74
bl erase_sram_menu_process_input
strb r0, [r4]
lsls r0, r0, #0x18
cmp r0, #0
beq lbl_08075d6c
ldr r0, lbl_08075ce8 @ =0x08754bc4
ldr r1, [r0]
movs r0, #0
strh r0, [r1, #4]
movs r0, #0
ldrsb r0, [r4, r0]
cmp r0, #1
bne lbl_08075cf0
ldr r1, lbl_08075cec @ =0x03000c72
movs r0, #5
strh r0, [r1]
b lbl_08075d6c
.align 2, 0
lbl_08075ce4: .4byte 0x03000c74
lbl_08075ce8: .4byte 0x08754bc4
lbl_08075cec: .4byte 0x03000c72
lbl_08075cf0:
ldr r1, lbl_08075cf8 @ =0x03000c72
movs r0, #3
strh r0, [r1]
b lbl_08075d6c
.align 2, 0
lbl_08075cf8: .4byte 0x03000c72
lbl_08075cfc:
ldr r2, [r5]
ldrh r0, [r2, #4]
cmp r0, #0x28
bls lbl_08075d6c
movs r1, #0
movs r0, #0xff
b lbl_08075d34
lbl_08075d0a:
ldr r1, lbl_08075d20 @ =0x030013ae
ldrh r0, [r1]
cmp r0, #0xf
bls lbl_08075d48
ldr r2, [r5]
ldrh r1, [r2, #8]
ldr r0, lbl_08075d24 @ =0x0000e0ff
ands r0, r1
strh r0, [r2, #8]
movs r6, #1
b lbl_08075d74
.align 2, 0
lbl_08075d20: .4byte 0x030013ae
lbl_08075d24: .4byte 0x0000e0ff
lbl_08075d28:
ldr r2, [r5]
ldrh r0, [r2, #4]
cmp r0, #0x28
bls lbl_08075d6c
movs r1, #0
movs r0, #0xbf
lbl_08075d34:
strh r0, [r2, #0xa]
strh r1, [r2, #4]
ldrh r0, [r4]
adds r0, #1
strh r0, [r4]
b lbl_08075d6c
lbl_08075d40:
ldr r1, lbl_08075d50 @ =0x030013ae
ldrh r0, [r1]
cmp r0, #0xf
bhi lbl_08075d54
lbl_08075d48:
adds r0, #1
strh r0, [r1]
b lbl_08075d6c
.align 2, 0
lbl_08075d50: .4byte 0x030013ae
lbl_08075d54:
ldrh r0, [r4]
adds r0, #1
strh r0, [r4]
ldr r1, [r5]
movs r0, #0x80
strh r0, [r1, #8]
b lbl_08075d6c
lbl_08075d62:
bl sub_080033dc
bl sub_08000c04
movs r6, #1
lbl_08075d6c:
cmp r6, #0
bne lbl_08075d74
bl erase_sram_menu_process_oam
lbl_08075d74:
adds r0, r6, #0
pop {r4, r5, r6}
pop {r1}
bx r1
thumb_func_start erase_sram_menu_process_input
erase_sram_menu_process_input: @ 0x08075d7c
push {r4, lr}
movs r4, #0
ldr r0, lbl_08075d94 @ =0x08754bc4
ldr r0, [r0]
ldrb r1, [r0, #1]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq lbl_08075d98
bl sub_08075dd0
b lbl_08075d9e
.align 2, 0
lbl_08075d94: .4byte 0x08754bc4
lbl_08075d98:
bl erase_sram_menu_check_for_input
adds r4, r0, #0
lbl_08075d9e:
ldr r0, lbl_08075db8 @ =0x08754bc4
ldr r0, [r0]
ldr r3, lbl_08075dbc @ =0x030013ae
ldrh r1, [r3]
ldrb r2, [r0, #6]
adds r0, r1, #0
cmp r2, r0
beq lbl_08075dc4
cmp r2, r0
bls lbl_08075dc0
adds r0, r1, #1
b lbl_08075dc2
.align 2, 0
lbl_08075db8: .4byte 0x08754bc4
lbl_08075dbc: .4byte 0x030013ae
lbl_08075dc0:
subs r0, r1, #1
lbl_08075dc2:
strh r0, [r3]
lbl_08075dc4:
bl sub_08076298
adds r0, r4, #0
pop {r4}
pop {r1}
bx r1
thumb_func_start sub_08075dd0
sub_08075dd0: @ 0x08075dd0
push {r4, r5, lr}
ldr r0, lbl_08075e00 @ =0x08754bc4
ldr r2, [r0]
ldrb r1, [r2, #0x1a]
adds r5, r0, #0
cmp r1, #2
beq lbl_08075e72
ldrb r1, [r2, #1]
movs r0, #0x7f
ands r0, r1
movs r3, #0
strb r0, [r2, #1]
ldr r1, [r5]
ldrb r0, [r1, #1]
strb r0, [r1]
ldr r2, [r5]
ldrb r0, [r2, #1]
cmp r0, #1
beq lbl_08075e18
cmp r0, #1
bgt lbl_08075e04
cmp r0, #0
beq lbl_08075e0e
b lbl_08075e42
.align 2, 0
lbl_08075e00: .4byte 0x08754bc4
lbl_08075e04:
cmp r0, #2
beq lbl_08075e30
cmp r0, #3
beq lbl_08075e38
b lbl_08075e42
lbl_08075e0e:
ldr r0, lbl_08075e14 @ =0x08415400
b lbl_08075e1a
.align 2, 0
lbl_08075e14: .4byte 0x08415400
lbl_08075e18:
ldr r0, lbl_08075e2c @ =0x08415401
lbl_08075e1a:
ldrb r1, [r0]
adds r0, r2, #0
adds r0, #0x3a
strb r1, [r0]
ldr r0, [r5]
adds r0, #0x2a
strb r3, [r0]
b lbl_08075e42
.align 2, 0
lbl_08075e2c: .4byte 0x08415401
lbl_08075e30:
ldr r0, lbl_08075e34 @ =0x08415402
b lbl_08075e3a
.align 2, 0
lbl_08075e34: .4byte 0x08415402
lbl_08075e38:
ldr r0, lbl_08075e78 @ =0x08415403
lbl_08075e3a:
ldrb r1, [r0]
adds r0, r2, #0
adds r0, #0x2a
strb r1, [r0]
lbl_08075e42:
ldr r1, [r5]
adds r1, #0x2b
ldrb r3, [r1]
movs r2, #0x3f
adds r0, r2, #0
ands r0, r3
movs r4, #0x80
orrs r0, r4
strb r0, [r1]
ldr r1, [r5]
adds r1, #0x3b
ldrb r3, [r1]
adds r0, r2, #0
ands r0, r3
orrs r0, r4
strb r0, [r1]
ldr r1, [r5]
movs r0, #1
strb r0, [r1, #0x1a]
ldr r1, [r5]
ldrb r0, [r1, #0x1b]
ands r2, r0
orrs r2, r4
strb r2, [r1, #0x1b]
lbl_08075e72:
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
lbl_08075e78: .4byte 0x08415403
thumb_func_start erase_sram_menu_check_for_input
erase_sram_menu_check_for_input: @ 0x08075e7c
push {r4, r5, r6, lr}
movs r6, #0
movs r4, #0
ldr r0, lbl_08075e98 @ =0x08754bc4
ldr r2, [r0]
ldrb r3, [r2]
adds r5, r0, #0
cmp r3, #1
beq lbl_08075ec8
cmp r3, #1
bgt lbl_08075e9c
cmp r3, #0
beq lbl_08075ea6
b lbl_08075f4e
.align 2, 0
lbl_08075e98: .4byte 0x08754bc4
lbl_08075e9c:
cmp r3, #2
beq lbl_08075ef0
cmp r3, #3
beq lbl_08075f18
b lbl_08075f4e
lbl_08075ea6:
ldr r0, lbl_08075eb8 @ =0x03001380
ldrh r1, [r0]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq lbl_08075ebc
movs r0, #0x81
b lbl_08075f26
.align 2, 0
lbl_08075eb8: .4byte 0x03001380
lbl_08075ebc:
movs r0, #1
ands r0, r1
cmp r0, #0
beq lbl_08075f4e
movs r6, #2
b lbl_08075f54
lbl_08075ec8:
ldr r0, lbl_08075ed8 @ =0x03001380
ldrh r1, [r0]
movs r0, #0x20
ands r0, r1
cmp r0, #0
beq lbl_08075edc
movs r0, #0x80
b lbl_08075f26
.align 2, 0
lbl_08075ed8: .4byte 0x03001380
lbl_08075edc:
ands r3, r1
cmp r3, #0
beq lbl_08075f4e
movs r0, #0x82
strb r0, [r2, #1]
movs r4, #2
ldr r1, [r5]
movs r0, #4
strb r0, [r1, #6]
b lbl_08075f4e
lbl_08075ef0:
ldr r0, lbl_08075f00 @ =0x03001380
ldrh r1, [r0]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq lbl_08075f04
movs r0, #0x83
b lbl_08075f26
.align 2, 0
lbl_08075f00: .4byte 0x03001380
lbl_08075f04:
movs r0, #3
ands r0, r1
cmp r0, #0
beq lbl_08075f4e
movs r0, #0x80
strb r0, [r2, #1]
ldr r0, [r5]
strb r6, [r0, #6]
movs r4, #3
b lbl_08075f4e
lbl_08075f18:
ldr r0, lbl_08075f2c @ =0x03001380
ldrh r1, [r0]
movs r0, #0x20
ands r0, r1
cmp r0, #0
beq lbl_08075f30
movs r0, #0x82
lbl_08075f26:
strb r0, [r2, #1]
movs r4, #4
b lbl_08075f4e
.align 2, 0
lbl_08075f2c: .4byte 0x03001380
lbl_08075f30:
movs r0, #1
ands r0, r1
cmp r0, #0
beq lbl_08075f3c
movs r6, #1
b lbl_08075f54
lbl_08075f3c:
movs r0, #2
ands r0, r1
cmp r0, #0
beq lbl_08075f4e
movs r0, #0x80
strb r0, [r2, #1]
movs r4, #3
ldr r0, [r5]
strb r6, [r0, #6]
lbl_08075f4e:
movs r0, #0
cmp r0, #0
beq lbl_08075f6a
lbl_08075f54:
ldr r1, [r5]
movs r0, #2
strb r0, [r1, #0x1a]
ldr r2, [r5]
ldrb r1, [r2, #0x1b]
movs r0, #0x3f
ands r0, r1
movs r1, #0x80
orrs r0, r1
strb r0, [r2, #0x1b]
movs r4, #1
lbl_08075f6a:
ldr r0, lbl_08075f84 @ =0x08415404
lsls r1, r4, #1
adds r1, r1, r0
ldrh r0, [r1]
cmp r0, #0
beq lbl_08075f7a
bl SoundPlay
lbl_08075f7a:
adds r0, r6, #0
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
lbl_08075f84: .4byte 0x08415404
thumb_func_start erase_sram_menu_init
erase_sram_menu_init: @ 0x08075f88
push {r4, r5, r6, lr}
sub sp, #4
ldr r3, lbl_08076110 @ =0x04000208
movs r4, #0
strh r4, [r3]
ldr r2, lbl_08076114 @ =0x04000004
ldrh r1, [r2]
ldr r0, lbl_08076118 @ =0x0000ffef
ands r0, r1
strh r0, [r2]
ldr r2, lbl_0807611c @ =0x04000200
ldrh r1, [r2]
ldr r0, lbl_08076120 @ =0x0000fffd
ands r0, r1
strh r0, [r2]
ldr r0, lbl_08076124 @ =0x04000202
movs r5, #2
strh r5, [r0]
movs r0, #1
strh r0, [r3]
ldr r0, lbl_08076128 @ =sub_08076358
bl CallbackSetVBlank
ldr r1, lbl_0807612c @ =0x04000050
movs r0, #0xbf
strh r0, [r1]
ldr r2, lbl_08076130 @ =0x04000054
ldr r1, lbl_08076134 @ =0x030013ae
movs r0, #0x10
strh r0, [r1]
strh r0, [r2]
movs r0, #0
str r0, [sp]
ldr r1, lbl_08076138 @ =0x040000d4
mov r0, sp
str r0, [r1]
ldr r0, lbl_0807613c @ =0x030016c4
str r0, [r1, #4]
ldr r0, lbl_08076140 @ =0x8500018a
str r0, [r1, #8]
ldr r0, [r1, #8]
bl ClearGFXRAM
ldr r0, lbl_08076144 @ =0x03001382
strb r4, [r0]
bl ResetFreeOAM
ldr r2, lbl_08076148 @ =0x08754bc4
ldr r1, [r2]
ldr r0, lbl_0807614c @ =0x03000020
ldrb r0, [r0]
strb r0, [r1, #2]
ldr r2, [r2]
ldrb r0, [r2, #2]
subs r0, #2
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #4
bls lbl_08076000
strb r5, [r2, #2]
lbl_08076000:
ldr r1, lbl_08076150 @ =0x04000006
ldrh r0, [r1]
subs r0, #0x15
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r2, lbl_08076154 @ =0x08411608
ldr r3, lbl_08076158 @ =0x08411528
ldr r5, lbl_0807615c @ =0x084122d8
cmp r0, #0x8b
bhi lbl_08076020
lbl_08076014:
ldrh r0, [r1]
subs r0, #0x15
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x8b
bls lbl_08076014
lbl_08076020:
ldr r0, lbl_08076138 @ =0x040000d4
str r2, [r0]
movs r2, #0xa0
lsls r2, r2, #0x13
str r2, [r0, #4]
ldr r1, lbl_08076160 @ =0x800000d0
str r1, [r0, #8]
ldr r1, [r0, #8]
str r3, [r0]
ldr r1, lbl_08076164 @ =0x05000200
str r1, [r0, #4]
ldr r1, lbl_08076168 @ =0x80000070
str r1, [r0, #8]
ldr r0, [r0, #8]
movs r4, #0
strh r4, [r2]
ldr r1, lbl_0807616c @ =0x06001000
adds r0, r5, #0
bl LZ77UncompVRAM
ldr r0, lbl_08076170 @ =0x08411b64
ldr r1, lbl_08076174 @ =0x06012000
bl LZ77UncompVRAM
ldr r0, lbl_08076178 @ =0x0844b808
ldr r1, lbl_0807617c @ =0x06001800
bl LZ77UncompVRAM
ldr r0, lbl_08076180 @ =0x0844c47c
ldr r1, lbl_08076184 @ =0x06003400
bl LZ77UncompVRAM
ldr r5, lbl_08076188 @ =0x08760420
ldr r6, lbl_08076148 @ =0x08754bc4
ldr r0, [r6]
ldrb r0, [r0, #2]
lsls r0, r0, #3
adds r0, r0, r5
ldr r0, [r0]
movs r1, #0xc0
lsls r1, r1, #0x13
bl LZ77UncompVRAM
ldr r0, [r6]
ldrb r0, [r0, #2]
lsls r0, r0, #3
adds r1, r5, #4
adds r0, r0, r1
ldr r0, [r0]
ldr r1, lbl_0807618c @ =0x06011000
bl LZ77UncompVRAM
ldr r0, [r6]
ldrb r0, [r0, #2]
lsls r0, r0, #3
adds r0, r0, r5
ldr r0, [r0]
ldr r1, lbl_08076190 @ =0x06010000
bl LZ77UncompVRAM
ldr r0, lbl_08076194 @ =0x08414c1c
ldr r1, lbl_08076198 @ =0x0600d000
bl LZ77UncompVRAM
ldr r0, lbl_0807619c @ =0x08414e40
ldr r1, lbl_080761a0 @ =0x0600f000
bl LZ77UncompVRAM
ldr r0, lbl_080761a4 @ =0x04000008
strh r4, [r0]
adds r0, #4
strh r4, [r0]
ldr r1, lbl_080761a8 @ =0x0400000a
ldr r2, lbl_080761ac @ =0x00001a01
adds r0, r2, #0
strh r0, [r1]
adds r1, #4
ldr r2, lbl_080761b0 @ =0x00001e03
adds r0, r2, #0
strh r0, [r1]
ldr r0, lbl_080761b4 @ =0x030013b2
strh r4, [r0]
ldr r0, lbl_080761b8 @ =0x04000052
strh r4, [r0]
ldr r0, lbl_080761bc @ =0x03000c75
strb r4, [r0]
ldr r0, lbl_080761c0 @ =0x03000bf8
strh r4, [r0]
ldr r0, lbl_080761c4 @ =0x03000bfa
strh r4, [r0]
ldr r0, lbl_080761c8 @ =0x03000c00
strh r4, [r0]
ldr r0, lbl_080761cc @ =0x03000c02
strh r4, [r0]
bl sub_080761d4
bl sub_08076298
bl erase_sram_menu_process_oam
bl sub_080762e0
ldr r2, [r6]
ldr r0, lbl_0807612c @ =0x04000050
ldrh r0, [r0]
strh r0, [r2, #0xa]
movs r1, #0xd0
lsls r1, r1, #5
strh r1, [r2, #8]
movs r0, #0x80
lsls r0, r0, #0x13
strh r1, [r0]
ldr r0, lbl_080761d0 @ =sub_080762e0
bl CallbackSetVBlank
add sp, #4
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
lbl_08076110: .4byte 0x04000208
lbl_08076114: .4byte 0x04000004
lbl_08076118: .4byte 0x0000ffef
lbl_0807611c: .4byte 0x04000200
lbl_08076120: .4byte 0x0000fffd
lbl_08076124: .4byte 0x04000202
lbl_08076128: .4byte sub_08076358
lbl_0807612c: .4byte 0x04000050
lbl_08076130: .4byte 0x04000054
lbl_08076134: .4byte 0x030013ae
lbl_08076138: .4byte 0x040000d4
lbl_0807613c: .4byte 0x030016c4
lbl_08076140: .4byte 0x8500018a
lbl_08076144: .4byte 0x03001382
lbl_08076148: .4byte 0x08754bc4
lbl_0807614c: .4byte 0x03000020
lbl_08076150: .4byte 0x04000006
lbl_08076154: .4byte 0x08411608
lbl_08076158: .4byte 0x08411528
lbl_0807615c: .4byte 0x084122d8
lbl_08076160: .4byte 0x800000d0
lbl_08076164: .4byte 0x05000200
lbl_08076168: .4byte 0x80000070
lbl_0807616c: .4byte 0x06001000
lbl_08076170: .4byte 0x08411b64
lbl_08076174: .4byte 0x06012000
lbl_08076178: .4byte 0x0844b808
lbl_0807617c: .4byte 0x06001800
lbl_08076180: .4byte 0x0844c47c
lbl_08076184: .4byte 0x06003400
lbl_08076188: .4byte 0x08760420
lbl_0807618c: .4byte 0x06011000
lbl_08076190: .4byte 0x06010000
lbl_08076194: .4byte 0x08414c1c
lbl_08076198: .4byte 0x0600d000
lbl_0807619c: .4byte 0x08414e40
lbl_080761a0: .4byte 0x0600f000
lbl_080761a4: .4byte 0x04000008
lbl_080761a8: .4byte 0x0400000a
lbl_080761ac: .4byte 0x00001a01
lbl_080761b0: .4byte 0x00001e03
lbl_080761b4: .4byte 0x030013b2
lbl_080761b8: .4byte 0x04000052
lbl_080761bc: .4byte 0x03000c75
lbl_080761c0: .4byte 0x03000bf8
lbl_080761c4: .4byte 0x03000bfa
lbl_080761c8: .4byte 0x03000c00
lbl_080761cc: .4byte 0x03000c02
lbl_080761d0: .4byte sub_080762e0
thumb_func_start sub_080761d4
sub_080761d4: @ 0x080761d4
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
ldr r0, lbl_08076280 @ =0x03005806
movs r1, #0
strb r1, [r0]
ldr r0, lbl_08076284 @ =0x03005807
strb r1, [r0]
ldr r1, lbl_08076288 @ =0x08754bc4
ldr r2, [r1]
movs r0, #0
strb r0, [r2]
ldr r2, [r1]
movs r0, #0x80
strb r0, [r2, #1]
movs r2, #0
adds r6, r1, #0
ldr r0, lbl_0807628c @ =0x08415400
mov r8, r0
ldr r3, lbl_08076290 @ =0x0841540e
mov sb, r3
mov ip, r6
ldr r3, lbl_08076294 @ =0x0840d048
lbl_08076204:
mov r4, ip
ldr r1, [r4]
lsls r0, r2, #4
adds r1, r1, r0
adds r1, #0x10
adds r0, r3, #0
ldm r0!, {r4, r5, r7}
stm r1!, {r4, r5, r7}
ldr r0, [r0]
str r0, [r1]
adds r2, #1
cmp r2, #2
ble lbl_08076204
ldr r0, [r6]
mov r5, r8
ldrb r1, [r5]
adds r0, #0x3a
strb r1, [r0]
ldr r1, [r6]
mov r7, sb
ldrh r0, [r7, #2]
movs r5, #0
strh r0, [r1, #0x30]
ldrh r0, [r7]
strh r0, [r1, #0x32]
adds r1, #0x3b
ldrb r3, [r1]
movs r2, #0x3f
adds r0, r2, #0
ands r0, r3
movs r4, #0x40
orrs r0, r4
strb r0, [r1]
ldr r0, [r6]
adds r0, #0x2a
strb r5, [r0]
ldr r1, [r6]
ldrh r0, [r7, #6]
strh r0, [r1, #0x20]
ldrh r0, [r7, #4]
strh r0, [r1, #0x22]
adds r1, #0x2b
ldrb r3, [r1]
adds r0, r2, #0
ands r0, r3
orrs r0, r4
strb r0, [r1]
ldr r1, [r6]
movs r0, #1
strb r0, [r1, #0x1a]
ldr r1, [r6]
ldrb r0, [r1, #0x1b]
ands r2, r0
orrs r2, r4
strb r2, [r1, #0x1b]
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
lbl_08076280: .4byte 0x03005806
lbl_08076284: .4byte 0x03005807
lbl_08076288: .4byte 0x08754bc4
lbl_0807628c: .4byte 0x08415400
lbl_08076290: .4byte 0x0841540e
lbl_08076294: .4byte 0x0840d048
thumb_func_start sub_08076298
sub_08076298: @ 0x08076298
push {r4, r5, r6, lr}
ldr r0, lbl_080762d4 @ =0x08754bc4
ldr r4, [r0]
ldr r6, lbl_080762d8 @ =0x0841540e
ldrb r2, [r4]
lsrs r2, r2, #1
lsls r2, r2, #2
adds r3, r6, #2
adds r3, r2, r3
ldr r5, lbl_080762dc @ =0x08415416
ldrb r0, [r4]
lsls r0, r0, #2
adds r1, r5, #2
adds r0, r0, r1
ldrh r0, [r0]
ldrh r3, [r3]
adds r0, r0, r3
strh r0, [r4, #0x10]
adds r2, r2, r6
ldrb r0, [r4]
lsls r0, r0, #2
adds r0, r0, r5
ldrh r0, [r0]
ldrh r2, [r2]
adds r0, r0, r2
strh r0, [r4, #0x12]
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
lbl_080762d4: .4byte 0x08754bc4
lbl_080762d8: .4byte 0x0841540e
lbl_080762dc: .4byte 0x08415416
thumb_func_start sub_080762e0
sub_080762e0: @ 0x080762e0
ldr r1, lbl_08076334 @ =0x040000d4
ldr r0, lbl_08076338 @ =0x03000e7c
str r0, [r1]
movs r0, #0xe0
lsls r0, r0, #0x13
str r0, [r1, #4]
ldr r0, lbl_0807633c @ =0x84000100
str r0, [r1, #8]
ldr r0, [r1, #8]
subs r1, #0x80
ldr r0, lbl_08076340 @ =0x030013ae
ldrh r0, [r0]
strh r0, [r1]
subs r1, #0x40
ldr r0, lbl_08076344 @ =0x03000bf8
ldrh r0, [r0]
lsrs r0, r0, #2
strh r0, [r1]
adds r1, #2
ldr r0, lbl_08076348 @ =0x03000bfa
ldrh r0, [r0]
lsrs r0, r0, #2
strh r0, [r1]
adds r1, #6
ldr r0, lbl_0807634c @ =0x03000c00
ldrh r0, [r0]
lsrs r0, r0, #2
strh r0, [r1]
adds r1, #2
ldr r0, lbl_08076350 @ =0x03000c02
ldrh r0, [r0]
lsrs r0, r0, #2
strh r0, [r1]
adds r1, #0x32
ldr r0, lbl_08076354 @ =0x08754bc4
ldr r2, [r0]
ldrh r0, [r2, #0xa]
strh r0, [r1]
subs r1, #0x50
ldrh r0, [r2, #8]
strh r0, [r1]
bx lr
.align 2, 0
lbl_08076334: .4byte 0x040000d4
lbl_08076338: .4byte 0x03000e7c
lbl_0807633c: .4byte 0x84000100
lbl_08076340: .4byte 0x030013ae
lbl_08076344: .4byte 0x03000bf8
lbl_08076348: .4byte 0x03000bfa
lbl_0807634c: .4byte 0x03000c00
lbl_08076350: .4byte 0x03000c02
lbl_08076354: .4byte 0x08754bc4
thumb_func_start sub_08076358
sub_08076358: @ 0x08076358
sub sp, #4
mov r1, sp
movs r0, #0
strb r0, [r1]
add sp, #4
bx lr
thumb_func_start erase_sram_menu_process_oam
erase_sram_menu_process_oam: @ 0x08076364
push {lr}
ldr r1, lbl_08076384 @ =0x03001382
movs r0, #0
strb r0, [r1]
ldr r0, lbl_08076388 @ =0x08754bc4
ldr r1, [r0]
adds r1, #0x10
ldr r2, lbl_0807638c @ =0x08415428
movs r0, #3
bl process_menu_oam
bl ResetFreeOAM
pop {r0}
bx r0
.align 2, 0
lbl_08076384: .4byte 0x03001382
lbl_08076388: .4byte 0x08754bc4
lbl_0807638c: .4byte 0x08415428

View File

@ -403,7 +403,7 @@ game_over_menu_init: @ 0x08077ba8
ldr r0, lbl_08077d44 @ =0x03001382
mov r1, r8
strb r1, [r0]
bl ClearGFXRAM
bl ClearGfxRam
bl ResetFreeOAM
ldr r1, lbl_08077d48 @ =0x03005806
ldr r0, lbl_08077d4c @ =0x03005807
@ -624,7 +624,7 @@ sub_08077dd8: @ 0x08077dd8
strh r4, [r0]
ldr r0, lbl_08077ec8 @ =0x03001382
strb r5, [r0]
bl ClearGFXRAM
bl ClearGfxRam
bl ResetFreeOAM
ldr r1, lbl_08077ecc @ =0x03005806
ldr r0, lbl_08077ed0 @ =0x03005807
@ -6271,7 +6271,7 @@ lbl_0807ab20:
lbl_0807ab28: .4byte 0x087d80a0
lbl_0807ab2c: .4byte 0x0845f440
lbl_0807ab30:
bl sub_080033dc
bl unk_33dc
ldr r2, lbl_0807ab50 @ =0x08754bc4
ldr r1, [r2]
movs r3, #0
@ -9670,7 +9670,7 @@ file_select_menu_init: @ 0x0807c5e0
strh r0, [r1]
ldr r0, lbl_0807c7b0 @ =0x03001382
strb r4, [r0]
bl ClearGFXRAM
bl ClearGfxRam
bl ResetFreeOAM
ldr r1, lbl_0807c7b4 @ =0x03005806
ldr r0, lbl_0807c7b8 @ =0x03005807
@ -14880,7 +14880,7 @@ sub_0807eff0: @ 0x0807eff0
strh r4, [r6]
ldr r0, lbl_0807f0c8 @ =0x03001382
strb r5, [r0]
bl ClearGFXRAM
bl ClearGfxRam
bl ResetFreeOAM
ldr r1, lbl_0807f0cc @ =0x03005806
ldr r0, lbl_0807f0d0 @ =0x03005807

View File

@ -1490,7 +1490,7 @@ tourian_escape_init: @ 0x08081d04
ldr r0, lbl_08081e04 @ =0x8500018a
str r0, [r4, #8]
ldr r0, [r4, #8]
bl ClearGFXRAM
bl ClearGfxRam
ldr r0, lbl_08081e08 @ =0x08480148
ldr r1, lbl_08081e0c @ =0x06010000
bl LZ77UncompVRAM
@ -6932,7 +6932,7 @@ fusion_gallery_init: @ 0x08084870
ldrsh r4, [r0, r1]
cmp r4, #0
bne lbl_080848ce
bl ClearGFXRAM
bl ClearGfxRam
str r4, [sp, #4]
ldr r1, lbl_080849e4 @ =0x040000d4
add r2, sp, #4
@ -8417,7 +8417,7 @@ credits_init: @ 0x08085464
ldr r0, lbl_080855d0 @ =0x8500018a
str r0, [r4, #8]
ldr r0, [r4, #8]
bl ClearGFXRAM
bl ClearGfxRam
ldr r0, lbl_080855d4 @ =0x085b2aa0
movs r1, #0xc0
lsls r1, r1, #0x13
@ -11540,7 +11540,7 @@ unlocked_options_init: @ 0x08086e78
ldr r0, lbl_08086f88 @ =0x8500018a
str r0, [r4, #8]
ldr r0, [r4, #8]
bl ClearGFXRAM
bl ClearGfxRam
ldr r0, lbl_08086f8c @ =0x085c943c
ldr r1, lbl_08086f90 @ =0x06008000
bl LZ77UncompVRAM
@ -12190,7 +12190,7 @@ gallery_init: @ 0x080873e4
ldrsh r4, [r0, r1]
cmp r4, #0
bne lbl_08087440
bl ClearGFXRAM
bl ClearGfxRam
str r4, [sp, #4]
ldr r1, lbl_08087498 @ =0x040000d4
add r2, sp, #4
@ -13474,7 +13474,7 @@ chozodia_escape_init: @ 0x08087e4c
ldr r0, lbl_08088044 @ =vblank_during_chozodia_escape
bl CallbackSetVBlank
strh r6, [r4]
bl ClearGFXRAM
bl ClearGfxRam
ldr r0, lbl_08088048 @ =0x083ab6c0
ldr r1, lbl_0808804c @ =0x06010000
bl LZ77UncompVRAM

View File

@ -793,9 +793,25 @@ menus/TitleScreen/Sparkles.gfx.lz;256;0x4481fc;4
menus/TitleScreen/SpaceBackground.gfx.lz;3203;0x4485fc;4
menus/TitleScreen/SpaceBackgroundDecoration.gfx.lz;797;0x44b808;4
menus/TitleScreen/SpaceAndGroundBackground.gfx.lz;1920;0x44c47c;4
menus/TitleScreen/Title.tt;199;0x44e27c;4
menus/TitleScreen/SpaceBackground.tt;702;0x44e598;4
# Erase SRAM
menus/EraseSram/Objects.pal;112;0x411528;2
menus/EraseSram/Background.pal;239;0x411608;2
menus/EraseSram/Objects.gfx.lz;477;0x411b64;4
menus/EraseSram/FirstBox.gfx.lz;118;0x4122d8;4
menus/EraseSram/ConfirmJapanse.gfx.lz;245;0x4124b0;4
menus/EraseSram/ConfirmEnglish.gfx.lz;1027;0x412884;4
menus/EraseSram/QuestionJapanese.gfx.lz;245;0x413890;4
menus/EraseSram/QuestionEnglish.gfx.lz;1006;0x413c64;4
menus/EraseSram/Box.tt;137;0x414c1c;4
menus/EraseSram/Background.tt;368;0x414e40;4
# Blobs
Blob_8cad0_8cee2.bin;1042;0x8cad0;1
@ -808,12 +824,14 @@ Blob_34099c_345868.bin;20172;0x34099c;1
Blob_345d00_360130.bin;107568;0x345d00;1
Blob_3602e8_36bdac.bin;47812;0x3602e8;1
Blob_375cc4_386f60.bin;70300;0x375cc4;1
Blob_3f0390_446d68.bin;354776;0x3f0390;1
Blob_3f0390_411528.bin;135576;0x3f0390;1
Blob_415460_446d68.bin;203016;0x415460;1
Blob_44f11c_45f45c.bin;66368;0x44f11c;1
Blob_479400_754bb4.bin;2996148;0x479400;1
Blob_754bd0_75e6a8.bin;39640;0x754bd0;1
Blob_75fae4_75fd88.bin;676;0x75fae4;1
Blob_75fdbc_75fde0.bin;36;0x75fdbc;1
Blob_75fdfc_75fe5c.bin;96;0x75fdfc;1
Blob_760090_760aa0.bin;2576;0x760090;1
Blob_760090_760420.bin;912;0x760090;1
Blob_760458_760aa0.bin;1608;0x760458;1
Blob_760aef_7f7734.bin;617541;0x760aef;1

View File

@ -0,0 +1,16 @@
#define ERASE_SRAM_OPTION_CHANGED_FLAG 0x80
#define ERASE_SRAM_OPTION_QUESTION_NO 0
#define ERASE_SRAM_OPTION_QUESTION_YES 1
#define ERASE_SRAM_OPTION_CONFIRM_NO 2
#define ERASE_SRAM_OPTION_CONFIRM_YES 3
#define ERASE_SRAM_INPUT_ACTION_NONE 0
#define ERASE_SRAM_INPUT_ACTION_ERASING 1
#define ERASE_SRAM_INPUT_ACTION_OPENING_SUB_WINDOW 2
#define ERASE_SRAM_OAM_ID_CURSOR_IDLE 1
#define ERASE_SRAM_OAM_ID_CURSOR_SELECTING 2
#define ERASE_SRAM_OAM_ID_QUESTION_WINDOW_NO_SELECTED 3
#define ERASE_SRAM_OAM_ID_QUESTION_WINDOW_YES_SELECTED 4
#define ERASE_SRAM_OAM_ID_CONFIRM_WINDOW_NO_SELECTED 5
#define ERASE_SRAM_OAM_ID_CONFIRM_WINDOW_YES_SELECTED 6

View File

@ -0,0 +1,30 @@
#ifndef ERASE_SRAM_MENU_DATA_H
#define ERASE_SRAM_MENU_DATA_H
#include "types.h"
#include "structs/cutscene.h"
extern const u16 sEraseSramMenuObjectsPAL[7 * 16];
extern const u16 sEraseSramMenuBackgroundPAL[15 * 16 - 1];
// ...
extern const u32 sEraseSramMenuObjectsGFX[477];
extern const u32 sEraseSramMenuFirstBoxGFX[118];
extern const u32 sEraseSramMenuConfirmJapanseGFX[245];
extern const u32 sEraseSramMenuConfirmEnglishGFX[1027];
extern const u32 sEraseSramMenuQuestionJapaneseGFX[245];
extern const u32 sEraseSramMenuQuestionEnglishGFX[1006];
extern const u32 sEraseSramMenuBoxTileTable[137];
extern const u32 sEraseSramMenuBackgroundTileTable[368];
extern const u8 sEraseSramQuestionWindowNoSelectedOamId;
extern const u8 sEraseSramQuestionWindowYesSelectedOamId;
extern const u8 sEraseSramConfirmWindowNoSelectedOamId;
extern const u8 sEraseSramConfirmWindowYesSelectedOamId;
extern const u16 sEraseSramMenuSoundsID[5];
extern const u16 sEraseSramMenuCursorPosition[2][2];
extern const u16 sEraseSramMenuCursorPositionOffset[4][2];
extern const struct OamArray sEraseSramMenuOam[7];
#endif /* ERASE_SRAM_MENU_DATA_H */

View File

@ -0,0 +1,8 @@
#ifndef INTERNAL_ERASE_SRAM_MENU_DATA_H
#define INTERNAL_ERASE_SRAM_MENU_DATA_H
#include "types.h"
extern const u32* const sEraseSramTextGfxPointers[7][2];
#endif /* INTERNAL_ERASE_SRAM_MENU_DATA_H */

View File

@ -17,9 +17,8 @@ int tourian_escape_main(void);
int cutscene_main(void);
int gallery_main(void);
int fusion_gallery_main(void);
int erase_sram_main(void);
void sub_080033dc(void);
void unk_33dc(void);
void QueueSound(u16 id, u32 unk); /* TODO: unk type */
void StopOrFadeSound(u16 id, u32 unk); /* TODO: unk type */
void UpdateAudio();

View File

@ -1,7 +1,7 @@
#ifndef INIT_HELPERS_H
#define INIT_HELPERS_H
void ClearGFXRAM(void);
void ClearGfxRam(void);
void LoadInterruptCode(void);
void ResetFreeOAM(void);

View File

@ -0,0 +1,18 @@
#ifndef ERASE_SRAM_MENU_H
#define ERASE_SRAM_MENU_H
#include "types.h"
#include "structs/menus/erase_sram.h"
u32 EraseSramSubroutine(void);
u32 EraseSramProcessInput(void);
void EraseSramApplyInput(void);
u32 EraseSramCheckForInput(void);
void EraseSramInit(void);
void EraseSramResetOAM(void);
void EraseSramUpdateCursorPosition(void);
void EraseSramVBlank(void);
void EraseSramVBlank_Empty(void);
void EraseSramProcessOAM(void);
#endif /* ERASE_SRAM_MENU_H */

View File

@ -0,0 +1,21 @@
#ifndef ERASE_SRAM_MENU_STRUCT_H
#define ERASE_SRAM_MENU_STRUCT_H
#include "types.h"
#include "structs/menu.h"
#define ERASE_SRAM_DATA sNonGameplayRamPointer->eraseSram
struct EraseSramData {
u8 currentOption;
u8 nextOption;
u8 language;
u16 timer;
u8 bldyTarget;
u16 dispcnt;
u16 bldcnt;
u8 padding_C;
struct MenuOamData oam[3];
};
#endif /* ERASE_SRAM_MENU_STRUCT_H */

View File

@ -10,6 +10,7 @@
#include "structs/ending_and_gallery.h"
#include "structs/menus/pause_screen.h"
#include "structs/menus/title_screen.h"
#include "structs/menus/erase_sram.h"
union NonGameplayRAM {
@ -19,6 +20,7 @@ union NonGameplayRAM {
struct EndingData ending;
struct PauseScreenData pauseScreen;
struct TitleScreenData titleScreen;
struct EraseSramData eraseSram;
u8 inGame[1576];
};

View File

@ -291,7 +291,7 @@ SECTIONS {
src/init_helpers.o(.text);
src/fixed_point.o(.text);
src/callbacks.o(.text);
src/sub_08000c04.o(.text);
src/erase_sram_func.o(.text);
asm/disasm_0x08000c48.o(.text);
asm/disasm_0x08002a58.o(.text);
asm/syscalls.o(.text);
@ -404,6 +404,7 @@ SECTIONS {
src/cutscenes/before_charlie.o(.text);
src/cutscenes/statue_opening.o(.text);
asm/disasm_0x08067080.o(.text);
src/menus/erase_sram.o(.text);
src/menus/title_screen.o(.text);
asm/disasm_0x080778c4.o(.text);
src/intro.o(.text);
@ -525,7 +526,9 @@ SECTIONS {
src/data/cutscenes/getting_fully_powered_suit_data.o(.rodata);
src/data/cutscenes/before_charlie_data.o(.rodata);
src/data/cutscenes/statue_opening_data.o(.rodata);
/* 3f0390-446d68 */
/* 3f0390-411528 */
src/data/menus/erase_sram_data.o(.rodata);
/* 415460-446d68 */
src/data/menus/title_screen_data.o(.rodata);
/* 44f11c-45f45c */
src/data/intro_data.o(.rodata);
@ -546,7 +549,9 @@ SECTIONS {
src/data/cutscenes/internal_getting_fully_powered_suit_data.o(.rodata);
src/data/cutscenes/internal_before_charlie_data.o(.rodata);
src/data/cutscenes/internal_statue_opening_data.o(.rodata);
/* 760090-760aa0 */
/* 760090-760420 */
src/data/menus/internal_erase_sram_data.o(.rodata)
/* 760458-760aa0 */
src/data/menus/internal_title_screen_data.o(.rodata)
/* 760aef-7f7734 */
} >rom

View File

@ -218,7 +218,7 @@ void agbmain(void)
break;
case GM_ERASE_SRAM:
if (erase_sram_main())
if (EraseSramSubroutine())
{
if (gGameModeSub2 == 1)
gResetGame = TRUE;

View File

@ -268,7 +268,7 @@ void CutsceneInit(void)
if (gCutsceneToSkip != gCurrentCutscene)
gCurrentCutscene = CUTSCENE_NONE;
ClearGFXRAM();
ClearGfxRam();
gBG0HOFS_NonGameplay = gBG0VOFS_NonGameplay = 0x800;
gBG1HOFS_NonGameplay = gBG1VOFS_NonGameplay = 0x800;

View File

@ -18,4 +18,4 @@ const struct CutsceneSubroutineData sStatueOpeningSubroutineData[3] = {
}
};
const u8 sTempArray_760090[0xa10] = INCBIN_U8("data/Blob_760090_760aa0.bin");
const u8 sTempArray_760090[0x390] = INCBIN_U8("data/Blob_760090_760420.bin");

View File

@ -77,4 +77,4 @@ const u32 sStatueOpeningRoomGFX[2357] = INCBIN_U32("data/cutscenes/StatueOpening
const u32 sStatueOpeningRoomTileTable[318] = INCBIN_U32("data/cutscenes/StatueOpening/Room.tt");
const u32 sStatueOpening_3effc8[242] = INCBIN_U32("data/cutscenes/StatueOpening/3effc8.tt");
const u8 sTempArray_3f0390[0x569d8] = INCBIN_U8("data/Blob_3f0390_446d68.bin");
const u8 sTempArray_3f0390[0x21198] = INCBIN_U8("data/Blob_3f0390_411528.bin");

View File

@ -0,0 +1,385 @@
#include "data/menus/erase_sram_data.h"
#include "macros.h"
#include "constants/menus/erase_sram.h"
const u16 sEraseSramMenuObjectsPAL[7 * 16] = INCBIN_U16("data/menus/EraseSram/Objects.pal");
const u16 sEraseSramMenuBackgroundPAL[15 * 16 - 1] = INCBIN_U16("data/menus/EraseSram/Background.pal");
static const u16 sEraseSramOAM_ConfirmWindowNoSelected_Frame0[52] = {
0x11,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x1b8, 0x2098,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x1d8, 0x209c,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x10, 0x50d8,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x30, 0x50dc,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x1a0, 0x2080,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x1e0, 0x2088,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x20, 0x2090,
0xe0, OBJ_SIZE_64x64 | 0x190, 0x3100,
OBJ_SHAPE_HORIZONTAL | 0x20, OBJ_SIZE_64x32 | 0x190, 0x3200,
0xe0, OBJ_SIZE_64x64 | 0x30, 0x3104,
OBJ_SHAPE_HORIZONTAL | 0x20, OBJ_SIZE_64x32 | 0x30, 0x3204,
OBJ_SHAPE_VERTICAL | 0xe0, OBJ_SIZE_32x64 | 0x1d0, 0x3104,
0x20, OBJ_SIZE_32x32 | 0x1d0, 0x3204,
OBJ_SHAPE_VERTICAL | 0xe0, OBJ_SIZE_32x64 | 0x1f0, 0x3104,
0x20, OBJ_SIZE_32x32 | 0x1f0, 0x3204,
OBJ_SHAPE_VERTICAL | 0xe0, OBJ_SIZE_32x64 | 0x10, 0x3104,
0x20, OBJ_SIZE_32x32 | 0x10, 0x3204
};
static const u16 sEraseSramOAM_ConfirmWindowYesSelected_Frame0[52] = {
0x11,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x1b8, 0x5098,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x1d8, 0x509c,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x10, 0x20d8,
OBJ_SHAPE_HORIZONTAL | 0x18, OBJ_SIZE_32x16 | 0x30, 0x20dc,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x1a0, 0x2080,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x1e0, 0x2088,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_64x32 | 0x20, 0x2090,
0xe0, OBJ_SIZE_64x64 | 0x190, 0x3100,
OBJ_SHAPE_HORIZONTAL | 0x20, OBJ_SIZE_64x32 | 0x190, 0x3200,
0xe0, OBJ_SIZE_64x64 | 0x30, 0x3104,
OBJ_SHAPE_HORIZONTAL | 0x20, OBJ_SIZE_64x32 | 0x30, 0x3204,
OBJ_SHAPE_VERTICAL | 0xe0, OBJ_SIZE_32x64 | 0x1d0, 0x3104,
0x20, OBJ_SIZE_32x32 | 0x1d0, 0x3204,
OBJ_SHAPE_VERTICAL | 0xe0, OBJ_SIZE_32x64 | 0x1f0, 0x3104,
0x20, OBJ_SIZE_32x32 | 0x1f0, 0x3204,
OBJ_SHAPE_VERTICAL | 0xe0, OBJ_SIZE_32x64 | 0x10, 0x3104,
0x20, OBJ_SIZE_32x32 | 0x10, 0x3204
};
static const u16 sEraseSramOAM_CursorIdle_Frame0[4] = {
0x1,
OBJ_SHAPE_VERTICAL | 0xf0, 0x8, 0x410d
};
static const u16 sEraseSramOAM_CursorIdle_Frame1[4] = {
0x1,
OBJ_SHAPE_VERTICAL | 0xf0, 0x9, 0x410d
};
static const u16 sEraseSramOAM_CursorIdle_Frame2[4] = {
0x1,
OBJ_SHAPE_VERTICAL | 0xf0, 0xa, 0x410d
};
static const u16 sEraseSramOAM_CursorSelecting_Frame1[4] = {
0x1,
OBJ_SHAPE_VERTICAL | 0xf0, 0x8, 0x410e
};
static const u16 sEraseSramOAM_UnusedFrame_4118d6[4] = {
0x1,
OBJ_SHAPE_VERTICAL | 0xf0, 0x9, 0x410e
};
static const u16 sEraseSramOAM_UnusedFrame_4118de[4] = {
0x1,
OBJ_SHAPE_VERTICAL | 0xf0, 0xa, 0x410e
};
static const u16 sEraseSramOAM_UnusedFrame_4118e6[4] = {
0x1,
0xf7, 0xc, 0x415d
};
static const u16 sEraseSramOAM_UnusedFrame_4118ee[4] = {
0x1,
0xf7, 0xd, 0x415e
};
static const u16 sEraseSramOAM_UnusedFrame_4118f6[4] = {
0x1,
0xf7, 0xa, 0x415f
};
static const u16 sEraseSramOAM_UnusedFrame_4118fe[4] = {
0x1,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c
};
static const u16 sEraseSramOAM_QuestionWindowNoSelected_Frame0[13] = {
0x4,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1b8, 0x2018,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1d8, 0x201c,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x10, 0x5058,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x30, 0x505c
};
static const u16 sEraseSramOAM_QuestionWindowYesSelected_Frame0[13] = {
0x4,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1b8, 0x5018,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x1d8, 0x501c,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x10, 0x2058,
OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x16 | 0x30, 0x205c
};
static const u16 sEraseSramOAM_UnusedFrame_41193a[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4191,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4193,
OBJ_SHAPE_VERTICAL | 0xef, 0xa, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_41194e[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4194,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4196,
OBJ_SHAPE_VERTICAL | 0xef, 0xb, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_411962[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4197,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4199,
0xf7, 0xc, 0x411e
};
static const u16 sEraseSramOAM_UnusedFrame_411976[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x419a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x419c,
0xf7, 0xb, 0x411e
};
static const u16 sEraseSramOAM_UnusedFrame_41198a[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c,
OBJ_SHAPE_VERTICAL | 0xef, 0xa, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_41199e[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c,
OBJ_SHAPE_VERTICAL | 0xef, 0xb, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_4119b2[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c,
0xf7, 0xc, 0x411e
};
static const u16 sEraseSramOAM_UnusedFrame_4119c6[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c,
0xf7, 0xb, 0x411e
};
static const u16 sEraseSramOAM_UnusedFrame_4119da[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c,
OBJ_SHAPE_VERTICAL | 0xef, 0xa, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_4119ee[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c,
OBJ_SHAPE_VERTICAL | 0xef, 0xb, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_411a02[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c,
0xf7, 0xc, 0x411e
};
static const u16 sEraseSramOAM_UnusedFrame_411a16[10] = {
0x3,
0xf7, 0xb, 0x411e,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c
};
static const u16 sEraseSramOAM_UnusedFrame_411a2a[10] = {
0x3,
OBJ_SHAPE_VERTICAL | 0xef, 0xa, 0x411d,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c
};
static const u16 sEraseSramOAM_UnusedFrame_411a3e[10] = {
0x3,
OBJ_SHAPE_VERTICAL | 0xef, 0xb, 0x411d,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4157,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4159
};
static const u16 sEraseSramOAM_UnusedFrame_411a52[10] = {
0x3,
0xf7, 0xc, 0x411e,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4117,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4119
};
static const u16 sEraseSramOAM_UnusedFrame_411a66[10] = {
0x3,
0xf7, 0xb, 0x411e,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4117,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4119
};
static const u16 sEraseSramOAM_UnusedFrame_411a7a[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4117,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4119,
OBJ_SHAPE_VERTICAL | 0xef, 0xa, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_411a8e[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4117,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4119,
OBJ_SHAPE_VERTICAL | 0xef, 0xb, 0x411d
};
static const u16 sEraseSramOAM_UnusedFrame_411aa2[10] = {
0x3,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x4157,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x4159,
0xf7, 0xc, 0x411e
};
static const u16 sEraseSramOAM_UnusedFrame_411ab6[10] = {
0x3,
0xf7, 0xb, 0x411e,
0xf0, OBJ_SIZE_16x16 | 0x1f4, 0x411a,
OBJ_SHAPE_VERTICAL | 0xf0, 0x4, 0x411c
};
static const struct FrameData sEraseSramOAM_CursorIdle[4] = {
sEraseSramOAM_CursorIdle_Frame0,
6,
sEraseSramOAM_CursorIdle_Frame1,
6,
sEraseSramOAM_CursorIdle_Frame2,
6,
NULL,
0
};
static const struct FrameData sEraseSramOAM_CursorSelecting[7] = {
sEraseSramOAM_CursorIdle_Frame0,
4,
sEraseSramOAM_CursorSelecting_Frame1,
4,
sEraseSramOAM_CursorIdle_Frame0,
4,
sEraseSramOAM_CursorSelecting_Frame1,
4,
sEraseSramOAM_CursorIdle_Frame0,
4,
sEraseSramOAM_CursorSelecting_Frame1,
4,
NULL,
0
};
static const struct FrameData sEraseSramOAM_QuestionWindowNoSelected[2] = {
sEraseSramOAM_QuestionWindowNoSelected_Frame0,
UCHAR_MAX,
NULL,
0
};
static const struct FrameData sEraseSramOAM_QuestionWindowYesSelected[2] = {
sEraseSramOAM_QuestionWindowYesSelected_Frame0,
UCHAR_MAX,
NULL,
0
};
static const struct FrameData sEraseSramOAM_ConfirmWindowNoSelected[2] = {
sEraseSramOAM_ConfirmWindowNoSelected_Frame0,
UCHAR_MAX,
NULL,
0
};
static const struct FrameData sEraseSramOAM_ConfirmWindowYesSelected[2] = {
sEraseSramOAM_ConfirmWindowYesSelected_Frame0,
UCHAR_MAX,
NULL,
0
};
const u32 sEraseSramMenuObjectsGFX[477] = INCBIN_U32("data/menus/EraseSram/Objects.gfx.lz");
const u32 sEraseSramMenuFirstBoxGFX[118] = INCBIN_U32("data/menus/EraseSram/FirstBox.gfx.lz");
const u32 sEraseSramMenuConfirmJapanseGFX[245] = INCBIN_U32("data/menus/EraseSram/ConfirmJapanse.gfx.lz");
const u32 sEraseSramMenuConfirmEnglishGFX[1027] = INCBIN_U32("data/menus/EraseSram/ConfirmEnglish.gfx.lz");
const u32 sEraseSramMenuQuestionJapaneseGFX[245] = INCBIN_U32("data/menus/EraseSram/QuestionJapanese.gfx.lz");
const u32 sEraseSramMenuQuestionEnglishGFX[1006] = INCBIN_U32("data/menus/EraseSram/QuestionEnglish.gfx.lz");
const u32 sEraseSramMenuBoxTileTable[137] = INCBIN_U32("data/menus/EraseSram/Box.tt");
const u32 sEraseSramMenuBackgroundTileTable[368] = INCBIN_U32("data/menus/EraseSram/Background.tt");
const u8 sEraseSramQuestionWindowNoSelectedOamId = ERASE_SRAM_OAM_ID_QUESTION_WINDOW_NO_SELECTED;
const u8 sEraseSramQuestionWindowYesSelectedOamId = ERASE_SRAM_OAM_ID_QUESTION_WINDOW_YES_SELECTED;
const u8 sEraseSramConfirmWindowNoSelectedOamId = ERASE_SRAM_OAM_ID_CONFIRM_WINDOW_NO_SELECTED;
const u8 sEraseSramConfirmWindowYesSelectedOamId = ERASE_SRAM_OAM_ID_CONFIRM_WINDOW_YES_SELECTED;
const u16 sEraseSramMenuSoundsID[5] = {
0, 0x1FC, 0x208, 0x209, 0x1FA
};
const u16 sEraseSramMenuCursorPosition[2][2] = {
[0] = {
BLOCK_SIZE * 8, BLOCK_SIZE * 5 + HALF_BLOCK_SIZE
},
[1] = {
BLOCK_SIZE * 8 - 8, BLOCK_SIZE * 5 + HALF_BLOCK_SIZE + 8
}
};
const u16 sEraseSramMenuCursorPositionOffset[4][2] = {
[ERASE_SRAM_OPTION_QUESTION_NO] = {
-(BLOCK_SIZE * 5 + QUARTER_BLOCK_SIZE), -8
},
[ERASE_SRAM_OPTION_QUESTION_YES] = {
QUARTER_BLOCK_SIZE, -8
},
[ERASE_SRAM_OPTION_CONFIRM_NO] = {
-(BLOCK_SIZE * 5 + QUARTER_BLOCK_SIZE), BLOCK_SIZE * 2 + 0x18
},
[ERASE_SRAM_OPTION_CONFIRM_YES] = {
QUARTER_BLOCK_SIZE, BLOCK_SIZE * 2 + 0x18
}
};
const struct OamArray sEraseSramMenuOam[7] = {
[0] = {
.pOam = sEraseSramOAM_CursorIdle,
.preAction = OAM_ARRAY_PRE_ACTION_NONE
},
[ERASE_SRAM_OAM_ID_CURSOR_IDLE] = {
.pOam = sEraseSramOAM_CursorIdle,
.preAction = OAM_ARRAY_PRE_ACTION_CHANGE_FRAME
},
[ERASE_SRAM_OAM_ID_CURSOR_SELECTING] = {
.pOam = sEraseSramOAM_CursorSelecting,
.preAction = OAM_ARRAY_PRE_ACTION_CHANGE_FRAME
},
[ERASE_SRAM_OAM_ID_QUESTION_WINDOW_NO_SELECTED] = {
.pOam = sEraseSramOAM_QuestionWindowNoSelected,
.preAction = OAM_ARRAY_PRE_ACTION_RESET_FRAME
},
[ERASE_SRAM_OAM_ID_QUESTION_WINDOW_YES_SELECTED] = {
.pOam = sEraseSramOAM_QuestionWindowYesSelected,
.preAction = OAM_ARRAY_PRE_ACTION_RESET_FRAME
},
[ERASE_SRAM_OAM_ID_CONFIRM_WINDOW_NO_SELECTED] = {
.pOam = sEraseSramOAM_ConfirmWindowNoSelected,
.preAction = OAM_ARRAY_PRE_ACTION_RESET_FRAME
},
[ERASE_SRAM_OAM_ID_CONFIRM_WINDOW_YES_SELECTED] = {
.pOam = sEraseSramOAM_ConfirmWindowYesSelected,
.preAction = OAM_ARRAY_PRE_ACTION_RESET_FRAME
},
};
static const u8 sTempArray_415460[0x31908] = INCBIN_U8("data/Blob_415460_446d68.bin");

View File

@ -0,0 +1,37 @@
#include "data/menus/internal_erase_sram_data.h"
#include "macros.h"
#include "data/menus/erase_sram_data.h"
#include "constants/game_state.h"
const u32* const sEraseSramTextGfxPointers[7][2] = {
[LANGUAGE_JAPANESE] = {
sEraseSramMenuQuestionJapaneseGFX,
sEraseSramMenuConfirmJapanseGFX
},
[LANGUAGE_HIRAGANA] = {
sEraseSramMenuQuestionJapaneseGFX,
sEraseSramMenuConfirmJapanseGFX
},
[LANGUAGE_ENGLISH] = {
sEraseSramMenuQuestionEnglishGFX,
sEraseSramMenuConfirmEnglishGFX
},
[LANGUAGE_GERMAN] = {
sEraseSramMenuQuestionEnglishGFX,
sEraseSramMenuConfirmEnglishGFX
},
[LANGUAGE_FRENCH] = {
sEraseSramMenuQuestionEnglishGFX,
sEraseSramMenuConfirmEnglishGFX
},
[LANGUAGE_ITALIAN] = {
sEraseSramMenuQuestionEnglishGFX,
sEraseSramMenuConfirmEnglishGFX
},
[LANGUAGE_SPANISH] = {
sEraseSramMenuQuestionEnglishGFX,
sEraseSramMenuConfirmEnglishGFX
},
};
const u8 sTempArray_760458[0x648] = INCBIN_U8("data/Blob_760458_760aa0.bin");

View File

@ -5,7 +5,7 @@
#include "sram/sram.h"
#include "types.h"
void sub_08000c04(void)
void EraseSRAM(void)
{
BitFill(3, 0xffff, &unk_02038000, SRAM_SIZE, 16);
if (gSRAMCorruptFlag == 0) {

View File

@ -369,7 +369,7 @@ void InitAndLoadGenerics(void)
if (gGameModeSub3 == 0 || gTourianEscapeCutsceneStage != 0)
{
ClearGFXRAM();
ClearGfxRam();
HUDGenericLoadCommonSpriteGFX();
}

View File

@ -20,7 +20,7 @@ void InitializeGame(void)
dma_fill32(3, 0, EWRAM_BASE, 0x40000);
dma_fill32(3, 0, IWRAM_BASE, 0x7e00);
ClearGFXRAM();
ClearGfxRam();
LoadInterruptCode();
CallbackSetVBlank(SoftresetVBlankCallback);
read_sram();

View File

@ -5,7 +5,7 @@
#include "memory.h"
#include "types.h"
void ClearGFXRAM(void)
void ClearGfxRam(void)
{
BitFill(3, 0x00, VRAM_BASE, VRAM_SIZE, 0x10);
BitFill(3, 0xff, OAM_BASE, OAM_SIZE, 0x20);

View File

@ -75,7 +75,7 @@ void IntroInit(void)
INTRO_DATA.charDrawerX = 0x38;
INTRO_DATA.charDrawerY = 0x60;
ClearGFXRAM();
ClearGfxRam();
LZ77UncompVRAM(sIntroTextAndShipFlyingInGFX, VRAM_BASE + 0x10000);
LZ77UncompVRAM(sIntroSpaceBackgroundGFX, VRAM_BASE);

456
src/menus/erase_sram.c Normal file
View File

@ -0,0 +1,456 @@
#include "menus/erase_sram.h"
#include "macros.h"
#include "callbacks.h"
#include "data/shortcut_pointers.h"
#include "data/menus/erase_sram_data.h"
#include "data/menus/internal_erase_sram_data.h"
#include "data/menus/title_screen_data.h"
#include "constants/audio.h"
#include "constants/game_state.h"
#include "constants/menus/erase_sram.h"
#include "structs/display.h"
#include "structs/game_state.h"
#include "structs/menus/erase_sram.h"
/**
* @brief 75c30 | 14c | Subroutine for the erase sram menu
*
* @return u32 bool, leaving
*/
u32 EraseSramSubroutine(void)
{
u32 leaving;
leaving = FALSE;
ERASE_SRAM_DATA.timer++;
switch (gGameModeSub1)
{
case 0:
EraseSramInit();
gGameModeSub1++;
break;
case 1:
if (gWrittenToBLDY_NonGameplay != 0)
{
gWrittenToBLDY_NonGameplay--;
break;
}
ERASE_SRAM_DATA.bldcnt = BLDCNT_BG0_FIRST_TARGET_PIXEL | BLDCNT_BG1_FIRST_TARGET_PIXEL | BLDCNT_BG2_FIRST_TARGET_PIXEL |
BLDCNT_BG3_FIRST_TARGET_PIXEL | BLDCNT_BACKDROP_FIRST_TARGET_PIXEL | BLDCNT_ALPHA_BLENDING_EFFECT |
BLDCNT_BRIGHTNESS_INCREASE_EFFECT;
ERASE_SRAM_DATA.bldyTarget = gWrittenToBLDY_NonGameplay;
gGameModeSub1++;
ERASE_SRAM_DATA.timer = 0;
break;
case 2:
gGameModeSub2 = EraseSramProcessInput();
if (gGameModeSub2 == 0)
break;
ERASE_SRAM_DATA.timer = 0;
if (gGameModeSub2 == ERASE_SRAM_INPUT_ACTION_ERASING)
gGameModeSub1 = 5;
else
gGameModeSub1 = 3;
break;
case 3:
if (ERASE_SRAM_DATA.timer <= 40)
break;
ERASE_SRAM_DATA.bldcnt = BLDCNT_BG0_FIRST_TARGET_PIXEL | BLDCNT_BG1_FIRST_TARGET_PIXEL | BLDCNT_BG2_FIRST_TARGET_PIXEL |
BLDCNT_BG3_FIRST_TARGET_PIXEL | BLDCNT_OBJ_FIRST_TARGET_PIXEL | BLDCNT_BACKDROP_FIRST_TARGET_PIXEL |
BLDCNT_ALPHA_BLENDING_EFFECT | BLDCNT_BRIGHTNESS_INCREASE_EFFECT;
ERASE_SRAM_DATA.timer = 0;
gGameModeSub1++;
break;
case 4:
if (gWrittenToBLDY_NonGameplay < 16)
{
gWrittenToBLDY_NonGameplay++;
break;
}
ERASE_SRAM_DATA.dispcnt &= ~(DCNT_BG0 | DCNT_BG1 | DCNT_BG2 | DCNT_BG3 | DCNT_OBJ);
leaving = TRUE;
break;
case 5:
if (ERASE_SRAM_DATA.timer <= 40)
break;
ERASE_SRAM_DATA.bldcnt = BLDCNT_BG0_FIRST_TARGET_PIXEL | BLDCNT_BG1_FIRST_TARGET_PIXEL | BLDCNT_BG2_FIRST_TARGET_PIXEL |
BLDCNT_BG3_FIRST_TARGET_PIXEL | BLDCNT_OBJ_FIRST_TARGET_PIXEL | BLDCNT_BACKDROP_FIRST_TARGET_PIXEL |
BLDCNT_BRIGHTNESS_INCREASE_EFFECT;
ERASE_SRAM_DATA.timer = 0;
gGameModeSub1++;
break;
case 6:
if (gWrittenToBLDY_NonGameplay < 16)
{
gWrittenToBLDY_NonGameplay++;
break;
}
gGameModeSub1++;
ERASE_SRAM_DATA.dispcnt = DCNT_BLANK;
break;
case 7:
unk_33dc();
EraseSRAM();
leaving = TRUE;
}
if (!leaving)
EraseSramProcessOAM();
return leaving;
}
/**
* @brief 75d7c | 54 | Processes the input for the erase sram menu
*
* @return u32 action
*/
u32 EraseSramProcessInput(void)
{
u32 result;
result = ERASE_SRAM_INPUT_ACTION_NONE;
if (ERASE_SRAM_DATA.nextOption & ERASE_SRAM_OPTION_CHANGED_FLAG)
EraseSramApplyInput();
else
result = EraseSramCheckForInput();
// Update BLDY based on target
if (ERASE_SRAM_DATA.bldyTarget != gWrittenToBLDY_NonGameplay)
{
if (ERASE_SRAM_DATA.bldyTarget > gWrittenToBLDY_NonGameplay)
gWrittenToBLDY_NonGameplay++;
else
gWrittenToBLDY_NonGameplay--;
}
EraseSramUpdateCursorPosition();
return result;
}
/**
* @brief 75dd0 | ac | Applies the input
*
*/
void EraseSramApplyInput(void)
{
if (ERASE_SRAM_DATA.oam[0].oamID == ERASE_SRAM_OAM_ID_CURSOR_SELECTING)
return;
ERASE_SRAM_DATA.nextOption &= ~ERASE_SRAM_OPTION_CHANGED_FLAG;
ERASE_SRAM_DATA.currentOption = ERASE_SRAM_DATA.nextOption;
switch (ERASE_SRAM_DATA.nextOption)
{
case ERASE_SRAM_OPTION_QUESTION_NO:
ERASE_SRAM_DATA.oam[2].oamID = sEraseSramQuestionWindowNoSelectedOamId;
ERASE_SRAM_DATA.oam[1].oamID = 0;
break;
case ERASE_SRAM_OPTION_QUESTION_YES:
ERASE_SRAM_DATA.oam[2].oamID = sEraseSramQuestionWindowYesSelectedOamId;
ERASE_SRAM_DATA.oam[1].oamID = 0;
break;
case ERASE_SRAM_OPTION_CONFIRM_NO:
ERASE_SRAM_DATA.oam[1].oamID = sEraseSramConfirmWindowNoSelectedOamId;
break;
case ERASE_SRAM_OPTION_CONFIRM_YES:
ERASE_SRAM_DATA.oam[1].oamID = sEraseSramConfirmWindowYesSelectedOamId;
break;
}
ERASE_SRAM_DATA.oam[1].idChanged = TRUE << 1;
ERASE_SRAM_DATA.oam[2].idChanged = TRUE << 1;
ERASE_SRAM_DATA.oam[0].oamID = ERASE_SRAM_OAM_ID_CURSOR_IDLE;
ERASE_SRAM_DATA.oam[0].idChanged = TRUE << 1;
}
/**
* @brief 75e7c | 10c | Checks for input
*
* @return u32 action
*/
u32 EraseSramCheckForInput(void)
{
u32 sound;
u32 result;
u32 exiting;
result = ERASE_SRAM_INPUT_ACTION_NONE;
sound = 0;
exiting = FALSE;
switch (ERASE_SRAM_DATA.currentOption)
{
case ERASE_SRAM_OPTION_QUESTION_NO:
if (gChangedInput & KEY_RIGHT)
{
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_QUESTION_YES;
sound = 4;
break;
}
if (gChangedInput & KEY_A)
{
result = ERASE_SRAM_INPUT_ACTION_OPENING_SUB_WINDOW;
exiting = TRUE;
}
break;
case ERASE_SRAM_OPTION_QUESTION_YES:
if (gChangedInput & KEY_LEFT)
{
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_QUESTION_NO;
sound = 4;
break;
}
if (gChangedInput & KEY_A)
{
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_CONFIRM_NO;
sound = 2;
ERASE_SRAM_DATA.bldyTarget = 4;
}
break;
case ERASE_SRAM_OPTION_CONFIRM_NO:
if (gChangedInput & KEY_RIGHT)
{
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_CONFIRM_YES;
sound = 4;
break;
}
if (gChangedInput & (KEY_A | KEY_B))
{
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_QUESTION_NO;
ERASE_SRAM_DATA.bldyTarget = 0;
sound = 3;
}
break;
case ERASE_SRAM_OPTION_CONFIRM_YES:
if (gChangedInput & KEY_LEFT)
{
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_CONFIRM_NO;
sound = 4;
break;
}
if (gChangedInput & KEY_A)
{
result = ERASE_SRAM_INPUT_ACTION_ERASING;
exiting = TRUE;
break;
}
if (gChangedInput & KEY_B)
{
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_QUESTION_NO;
sound = 3;
ERASE_SRAM_DATA.bldyTarget = 0;
}
break;
}
if (exiting)
{
ERASE_SRAM_DATA.oam[0].oamID = ERASE_SRAM_OAM_ID_CURSOR_SELECTING;
ERASE_SRAM_DATA.oam[0].idChanged = TRUE << 1;
sound = 1;
}
if (sEraseSramMenuSoundsID[sound])
SoundPlay(sEraseSramMenuSoundsID[sound]);
return result;
}
/**
* @brief 75f88 | 24c | Initializes the erase sram menu
*
*/
void EraseSramInit(void)
{
u32 zero;
write16(REG_IME, FALSE);
write16(REG_DISPSTAT, read16(REG_DISPSTAT) & ~DSTAT_IF_HBLANK);
write16(REG_IE, read16(REG_IE) & ~IF_HBLANK);
write16(REG_IF, IF_HBLANK);
write16(REG_IME, TRUE);
CallbackSetVBlank(EraseSramVBlank_Empty);
write16(REG_BLDCNT, BLDCNT_BG0_FIRST_TARGET_PIXEL | BLDCNT_BG1_FIRST_TARGET_PIXEL | BLDCNT_BG2_FIRST_TARGET_PIXEL |
BLDCNT_BG3_FIRST_TARGET_PIXEL | BLDCNT_OBJ_FIRST_TARGET_PIXEL | BLDCNT_BACKDROP_FIRST_TARGET_PIXEL |
BLDCNT_BRIGHTNESS_INCREASE_EFFECT);
write16(REG_BLDY, gWrittenToBLDY_NonGameplay = 16);
zero = 0;
dma_set(3, &zero, &gNonGameplayRAM, (DMA_ENABLE | DMA_32BIT | DMA_SRC_FIXED) << 16 | sizeof(gNonGameplayRAM) / 4);
ClearGfxRam();
gNextOamSlot = 0;
ResetFreeOAM();
ERASE_SRAM_DATA.language = gLanguage;
if ((u8)(ERASE_SRAM_DATA.language - 2) > LANGUAGE_SPANISH - 2)
ERASE_SRAM_DATA.language = LANGUAGE_ENGLISH;
while ((u16)(read16(REG_VCOUNT) - 0x15) < 0x8C);
dma_set(3, sEraseSramMenuBackgroundPAL, PALRAM_BASE, DMA_ENABLE << 16 | 0xD0);
dma_set(3, sEraseSramMenuObjectsPAL, PALRAM_BASE + 0x200, DMA_ENABLE << 16 | sizeof(sEraseSramMenuObjectsPAL) / 2);
write16(PALRAM_BASE, 0);
LZ77UncompVRAM(sEraseSramMenuFirstBoxGFX, VRAM_BASE + 0x1000);
LZ77UncompVRAM(sEraseSramMenuObjectsGFX, VRAM_BASE + 0x12000);
LZ77UncompVRAM(sTitleScreenSpaceBackgroundDecorationGFX, VRAM_BASE + 0x1800);
LZ77UncompVRAM(sTitleScreenSpaceAndGroundBackgroundGFX, VRAM_BASE + 0x3400);
LZ77UncompVRAM(sEraseSramTextGfxPointers[ERASE_SRAM_DATA.language][0], VRAM_BASE);
LZ77UncompVRAM(sEraseSramTextGfxPointers[ERASE_SRAM_DATA.language][1], VRAM_BASE + 0x11000);
LZ77UncompVRAM(sEraseSramTextGfxPointers[ERASE_SRAM_DATA.language][0], VRAM_BASE + 0x10000);
LZ77UncompVRAM(sEraseSramMenuBoxTileTable, VRAM_BASE + 0xD000);
LZ77UncompVRAM(sEraseSramMenuBackgroundTileTable, VRAM_BASE + 0xF000);
write16(REG_BG0CNT, 0);
write16(REG_BG2CNT, 0);
write16(REG_BG1CNT, 0x1A01);
write16(REG_BG3CNT, 0x1E03);
gWrittenToBLDALPHA_H = 0;
write16(REG_BLDALPHA, 0);
gGameModeSub3 = 0;
gBG1HOFS_NonGameplay = 0;
gBG1VOFS_NonGameplay = 0;
gBG3HOFS_NonGameplay = 0;
gBG3VOFS_NonGameplay = 0;
EraseSramResetOAM();
EraseSramUpdateCursorPosition();
EraseSramProcessOAM();
EraseSramVBlank();
ERASE_SRAM_DATA.bldcnt = read16(REG_BLDCNT);
ERASE_SRAM_DATA.dispcnt = DCNT_BG1 | DCNT_BG3 | DCNT_OBJ;
write16(REG_DISPCNT, ERASE_SRAM_DATA.dispcnt);
CallbackSetVBlank(EraseSramVBlank);
}
/**
* @brief 761d4 | c4 | Initializes the OAM for the erase sram menu
*
*/
void EraseSramResetOAM(void)
{
i32 i;
gOamXOffset_NonGameplay = 0;
gOamYOffset_NonGameplay = 0;
ERASE_SRAM_DATA.currentOption = ERASE_SRAM_OPTION_QUESTION_NO;
ERASE_SRAM_DATA.nextOption = ERASE_SRAM_OPTION_CHANGED_FLAG | ERASE_SRAM_OPTION_QUESTION_NO;
for (i = 0; i < (int)ARRAY_SIZE(ERASE_SRAM_DATA.oam); i++)
{
ERASE_SRAM_DATA.oam[i] = *(struct MenuOamData*)0x840d048;
// FIXME *pOam = sEraseSramMenuOamData_Empty;
}
ERASE_SRAM_DATA.oam[2].oamID = sEraseSramQuestionWindowNoSelectedOamId;
ERASE_SRAM_DATA.oam[2].yPosition = sEraseSramMenuCursorPosition[0][1];
ERASE_SRAM_DATA.oam[2].xPosition = sEraseSramMenuCursorPosition[0][0];
ERASE_SRAM_DATA.oam[2].idChanged = TRUE;
ERASE_SRAM_DATA.oam[1].oamID = 0;
ERASE_SRAM_DATA.oam[1].yPosition = sEraseSramMenuCursorPosition[1][1];
ERASE_SRAM_DATA.oam[1].xPosition = sEraseSramMenuCursorPosition[1][0];
ERASE_SRAM_DATA.oam[1].idChanged = TRUE;
ERASE_SRAM_DATA.oam[0].oamID = ERASE_SRAM_OAM_ID_CURSOR_IDLE;
ERASE_SRAM_DATA.oam[0].idChanged = TRUE;
}
/**
* @brief 76298 | 48 | Updates the cursor position based on the current option
*
*/
void EraseSramUpdateCursorPosition(void)
{
// Panel position + option position
ERASE_SRAM_DATA.oam[0].yPosition = sEraseSramMenuCursorPosition[ERASE_SRAM_DATA.currentOption >> 1][1] + sEraseSramMenuCursorPositionOffset[ERASE_SRAM_DATA.currentOption][1];
ERASE_SRAM_DATA.oam[0].xPosition = sEraseSramMenuCursorPosition[ERASE_SRAM_DATA.currentOption >> 1][0] + sEraseSramMenuCursorPositionOffset[ERASE_SRAM_DATA.currentOption][0];
}
/**
* @brief 762e0 | 78 | Erase sram menu V-blank code
*
*/
void EraseSramVBlank(void)
{
dma_set(3, gOamData, OAM_BASE, (DMA_ENABLE | DMA_32BIT) << 16 | OAM_SIZE / 4);
write16(REG_BLDY, gWrittenToBLDY_NonGameplay);
write16(REG_BG1HOFS, gBG1HOFS_NonGameplay / 4);
write16(REG_BG1VOFS, gBG1VOFS_NonGameplay / 4);
write16(REG_BG3HOFS, gBG3HOFS_NonGameplay / 4);
write16(REG_BG3VOFS, gBG3VOFS_NonGameplay / 4);
write16(REG_BLDCNT, ERASE_SRAM_DATA.bldcnt);
write16(REG_DISPCNT, ERASE_SRAM_DATA.dispcnt);
}
/**
* @brief 76358 | c | Empty v-blank for the erase sram menu
*
*/
void EraseSramVBlank_Empty(void)
{
vu8 c = 0;
}
/**
* @brief 76364 | 2c | Processes the OAM for the erase sram menu
*
*/
void EraseSramProcessOAM(void)
{
gNextOamSlot = 0;
process_menu_oam(ARRAY_SIZE(ERASE_SRAM_DATA.oam), ERASE_SRAM_DATA.oam, sEraseSramMenuOam);
ResetFreeOAM();
}

View File

@ -1105,7 +1105,7 @@ void TitleScreenInit(void)
gNextOamSlot = 0;
ClearGFXRAM();
ClearGfxRam();
ResetFreeOAM();
gOamXOffset_NonGameplay = gOamYOffset_NonGameplay = 0;

View File

@ -28,7 +28,7 @@ void SoftresetCheck(void)
void Softreset(void)
{
sub_0805d034();
sub_080033dc();
unk_33dc();
write16(REG_IME, FALSE);
write16(REG_IE, 0);
@ -41,7 +41,7 @@ void Softreset(void)
dma_fill32(3, 0, EWRAM_BASE, 0x40000);
dma_fill32(3, 0, IWRAM_BASE, 0x7e00);
ClearGFXRAM();
ClearGfxRam();
LoadInterruptCode();
CallbackSetVBlank(SoftresetVBlankCallback);
read_sram();

View File

@ -21,7 +21,8 @@ subDirs: array = [
"cutscenes/BeforeCharlie/",
"cutscenes/StatueOpening/",
"menus/",
"menus/TitleScreen",
"menus/TitleScreen/",
"menus/EraseSram/",
]
try: