mirror of https://github.com/zeldaret/tmc.git
document filescreen
This commit is contained in:
parent
f26c22b0bf
commit
32fc754306
2
Makefile
2
Makefile
|
@ -38,7 +38,7 @@ MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR)
|
|||
ASFLAGS := -mcpu=arm7tdmi --defsym $(GAME_VERSION)=1 --defsym REVISION=$(REVISION) --defsym $(GAME_LANGUAGE)=1
|
||||
|
||||
CC1 := tools/agbcc/bin/agbcc
|
||||
override CFLAGS += -Wimplicit -Wparentheses -Werror -Wno-multichar -O2
|
||||
override CFLAGS += -O2 -Wimplicit -Wparentheses -Werror -Wno-multichar
|
||||
# -fhex-asm
|
||||
|
||||
ifeq ($(DINFO),1)
|
||||
|
|
|
@ -128,7 +128,7 @@ _08016ED6:
|
|||
cmp r1, #0
|
||||
beq _08016EFC
|
||||
ldr r2, _08016F14 @ =0x040000D4
|
||||
ldr r0, _08016F24 @ =gUnk_020344B0
|
||||
ldr r0, _08016F24 @ =gBG2Buffer
|
||||
str r0, [r2]
|
||||
ldrh r1, [r1]
|
||||
movs r0, #0xf8
|
||||
|
@ -155,7 +155,7 @@ _08016F14: .4byte 0x040000D4
|
|||
_08016F18: .4byte gBG1Buffer
|
||||
_08016F1C: .4byte 0x84000170
|
||||
_08016F20: .4byte gUnk_0200B650
|
||||
_08016F24: .4byte gUnk_020344B0
|
||||
_08016F24: .4byte gBG2Buffer
|
||||
|
||||
thumb_func_start sub_08016F28
|
||||
sub_08016F28: @ 0x08016F28
|
||||
|
|
|
@ -359,7 +359,7 @@ sub_08019698: @ 0x08019698
|
|||
_08019700:
|
||||
movs r0, #0x11
|
||||
bl LoadGfxGroup
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_080AD9B0
|
||||
bl sub_080AD918
|
||||
movs r0, #4
|
||||
|
@ -402,7 +402,7 @@ _08019760: .4byte gUnk_02018EB0
|
|||
thumb_func_start sub_08019764
|
||||
sub_08019764: @ 0x08019764
|
||||
push {lr}
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0805E5C0
|
||||
bl sub_080AD9B0
|
||||
bl sub_080AD918
|
||||
|
|
|
@ -378,7 +378,7 @@ sub_0801DB34: @ 0x0801DB34
|
|||
str r0, [r4, #0x1c]
|
||||
ldr r0, _0801DB7C @ =0x00001C01
|
||||
strh r0, [r4, #0x14]
|
||||
ldr r0, _0801DB80 @ =gUnk_020344B0
|
||||
ldr r0, _0801DB80 @ =gBG2Buffer
|
||||
str r0, [r4, #0x28]
|
||||
ldr r0, _0801DB84 @ =0x00001D02
|
||||
strh r0, [r4, #0x20]
|
||||
|
@ -398,7 +398,7 @@ _0801DB70: .4byte gBG0Buffer
|
|||
_0801DB74: .4byte 0x00001F0C
|
||||
_0801DB78: .4byte gBG1Buffer
|
||||
_0801DB7C: .4byte 0x00001C01
|
||||
_0801DB80: .4byte gUnk_020344B0
|
||||
_0801DB80: .4byte gBG2Buffer
|
||||
_0801DB84: .4byte 0x00001D02
|
||||
_0801DB88: .4byte gBG3Buffer
|
||||
_0801DB8C: .4byte 0x00001E03
|
||||
|
|
|
@ -120,7 +120,7 @@ _0804AC5E:
|
|||
strh r0, [r2, #0x16]
|
||||
ldrh r0, [r1, #0xc]
|
||||
strh r0, [r2, #0x18]
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_080AD9B0
|
||||
bl sub_080AD918
|
||||
ldr r0, _0804AC98 @ =gUnk_02018EB0
|
||||
|
|
|
@ -1574,7 +1574,7 @@ sub_08053320: @ 0x08053320
|
|||
ldr r0, _08053380 @ =gBG1Buffer
|
||||
adds r1, r4, #0
|
||||
bl _DmaZero
|
||||
ldr r0, _08053384 @ =gUnk_020344B0
|
||||
ldr r0, _08053384 @ =gBG2Buffer
|
||||
adds r1, r4, #0
|
||||
bl _DmaZero
|
||||
ldr r0, _08053388 @ =gBG3Buffer
|
||||
|
@ -1604,7 +1604,7 @@ _08053362:
|
|||
.align 2, 0
|
||||
_0805337C: .4byte gBG0Buffer
|
||||
_08053380: .4byte gBG1Buffer
|
||||
_08053384: .4byte gUnk_020344B0
|
||||
_08053384: .4byte gBG2Buffer
|
||||
_08053388: .4byte gBG3Buffer
|
||||
_0805338C: .4byte gRoomControls
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ sub_080548E8: @ 0x080548E8
|
|||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
bl _call_via_r0
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0805E5C0
|
||||
bl sub_080AD9B0
|
||||
bl sub_080AD918
|
||||
|
|
|
@ -982,8 +982,8 @@ _080A3200:
|
|||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_080A3204
|
||||
sub_080A3204: @ 0x080A3204
|
||||
thumb_func_start InitSound
|
||||
InitSound: @ 0xInitSound
|
||||
push {lr}
|
||||
bl sub_080A3210
|
||||
bl m4aSoundInit
|
||||
|
|
|
@ -586,7 +586,7 @@ sub_080A38D0: @ 0x080A38D0
|
|||
mov r8, r0
|
||||
movs r5, #1
|
||||
strh r5, [r4, #0x1a]
|
||||
ldr r0, _080A3928 @ =gUnk_020344B0
|
||||
ldr r0, _080A3928 @ =gBG2Buffer
|
||||
adds r1, r6, #0
|
||||
bl _DmaZero
|
||||
strh r5, [r4, #0x26]
|
||||
|
@ -608,7 +608,7 @@ _080A3914:
|
|||
_080A391C: .4byte gFadeControl
|
||||
_080A3920: .4byte gBG1Buffer
|
||||
_080A3924: .4byte gScreen
|
||||
_080A3928: .4byte gUnk_020344B0
|
||||
_080A3928: .4byte gBG2Buffer
|
||||
_080A392C: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_080A3930
|
||||
|
|
|
@ -1207,7 +1207,7 @@ _080A45A2:
|
|||
thumb_func_start sub_080A45A4
|
||||
sub_080A45A4: @ 0x080A45A4
|
||||
push {lr}
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
ldr r0, _080A45C4 @ =gUnk_02032EC0
|
||||
ldrb r0, [r0, #3]
|
||||
cmp r0, #0xff
|
||||
|
@ -2249,7 +2249,7 @@ sub_080A4DB8: @ 0x080A4DB8
|
|||
ldr r0, _080A4E5C @ =gBG1Buffer
|
||||
adds r1, r4, #0
|
||||
bl _DmaZero
|
||||
ldr r0, _080A4E60 @ =gUnk_020344B0
|
||||
ldr r0, _080A4E60 @ =gBG2Buffer
|
||||
adds r1, r4, #0
|
||||
bl _DmaZero
|
||||
ldr r0, _080A4E64 @ =gUnk_0200AF34
|
||||
|
@ -2314,7 +2314,7 @@ _080A4E54:
|
|||
.align 2, 0
|
||||
_080A4E58: .4byte gBG0Buffer
|
||||
_080A4E5C: .4byte gBG1Buffer
|
||||
_080A4E60: .4byte gUnk_020344B0
|
||||
_080A4E60: .4byte gBG2Buffer
|
||||
_080A4E64: .4byte gUnk_0200AF34
|
||||
_080A4E68: .4byte gMenu
|
||||
_080A4E6C: .4byte 0x0000FFFF
|
||||
|
@ -2357,7 +2357,7 @@ sub_080A4EA0: @ 0x080A4EA0
|
|||
.align 2, 0
|
||||
_080A4EB8: .4byte gUnk_02034490
|
||||
_080A4EBC:
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
ldr r1, _080A4F18 @ =gUnk_08128B30
|
||||
ldrb r0, [r4, #0x11]
|
||||
lsls r0, r0, #2
|
||||
|
|
|
@ -1980,7 +1980,7 @@ _080A64F8: .4byte 0x00003D3F
|
|||
thumb_func_start sub_080A64FC
|
||||
sub_080A64FC: @ 0x080A64FC
|
||||
push {r4, lr}
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
ldr r1, _080A652C @ =gUnk_08128E70
|
||||
ldr r4, _080A6530 @ =gMenu
|
||||
ldrb r0, [r4, #5]
|
||||
|
@ -2710,7 +2710,7 @@ _080A6AB6:
|
|||
thumb_func_start sub_080A6AB8
|
||||
sub_080A6AB8: @ 0x080A6AB8
|
||||
push {r4, lr}
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
ldr r1, _080A6AF4 @ =gUnk_08128F1C
|
||||
ldr r4, _080A6AF8 @ =gMenu
|
||||
ldrb r0, [r4, #5]
|
||||
|
@ -2912,7 +2912,7 @@ _080A6C70: .4byte gMenu
|
|||
thumb_func_start sub_080A6C74
|
||||
sub_080A6C74: @ 0x080A6C74
|
||||
push {r4, lr}
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
ldr r1, _080A6CA0 @ =gUnk_08128F24
|
||||
ldr r4, _080A6CA4 @ =gMenu
|
||||
ldrb r0, [r4, #5]
|
||||
|
@ -3955,7 +3955,7 @@ sub_080A74F4: @ 0x080A74F4
|
|||
ldr r1, _080A7524 @ =gUnk_03001000
|
||||
movs r0, #0
|
||||
strb r0, [r1, #0xb]
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0805E5C0
|
||||
bl sub_0805E5F8
|
||||
bl sub_0801C344
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_080AD90C
|
||||
sub_080AD90C: @ 0x080AD90C
|
||||
thumb_func_start FlushSprites
|
||||
FlushSprites: @ 0x080AD90C
|
||||
ldr r1, _080AD914 @ =gUnk_03000000
|
||||
movs r0, #0
|
||||
strb r0, [r1, #3]
|
||||
|
|
|
@ -5,428 +5,8 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_08050B3C
|
||||
sub_08050B3C: @ 0x08050B3C
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #8
|
||||
str r0, [sp]
|
||||
ldr r1, _08050C18 @ =gUnk_02002A40
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xaa
|
||||
ldrb r0, [r0]
|
||||
lsrs r2, r0, #1
|
||||
cmp r2, #0
|
||||
bne _08050B5A
|
||||
movs r2, #1
|
||||
_08050B5A:
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xab
|
||||
ldrb r0, [r0]
|
||||
lsrs r3, r0, #1
|
||||
cmp r3, #0
|
||||
beq RETURN
|
||||
cmp r2, r3
|
||||
ble _08050B6C
|
||||
adds r2, r3, #0
|
||||
_08050B6C:
|
||||
movs r0, #3
|
||||
ands r0, r2
|
||||
str r0, [sp, #4]
|
||||
adds r0, r2, #0
|
||||
asrs r5, r0, #2
|
||||
mov ip, r5
|
||||
cmp r5, #0xa
|
||||
ble _08050B80
|
||||
movs r2, #0xa
|
||||
mov ip, r2
|
||||
_08050B80:
|
||||
adds r6, r5, #0
|
||||
subs r6, #0xa
|
||||
mov sb, r6
|
||||
cmp r6, #0
|
||||
bge _08050B8E
|
||||
movs r7, #0
|
||||
mov sb, r7
|
||||
_08050B8E:
|
||||
adds r0, r3, #0
|
||||
asrs r3, r0, #2
|
||||
adds r0, r3, #0
|
||||
cmp r3, #0xa
|
||||
ble _08050B9A
|
||||
movs r3, #0xa
|
||||
_08050B9A:
|
||||
adds r4, r0, #0
|
||||
subs r4, #0xa
|
||||
ldr r2, [sp]
|
||||
ldr r0, _08050C1C @ =0x0000F24C
|
||||
mov sl, r0
|
||||
strh r0, [r2]
|
||||
ldr r1, _08050C20 @ =0x040000D4
|
||||
movs r7, #0xa
|
||||
mov r8, r7
|
||||
mov r0, r8
|
||||
mov r7, ip @ var5
|
||||
subs r0, r0, r7 @ 10 - var5
|
||||
lsls r0, r0, #1
|
||||
ldr r7, _08050C24 @ =gUnk_080FC914
|
||||
mov ip, r7
|
||||
add r0, ip
|
||||
str r0, [r1]
|
||||
adds r0, r2, #2
|
||||
str r0, [r1, #4]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x18
|
||||
orrs r3, r0
|
||||
str r3, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
cmp r4, #0
|
||||
ble _08050BEE
|
||||
adds r2, #0x40
|
||||
mov r3, sl
|
||||
strh r3, [r2]
|
||||
mov r7, r8
|
||||
mov r3, sb
|
||||
subs r0, r7, r3
|
||||
lsls r0, r0, #1
|
||||
add r0, ip
|
||||
str r0, [r1]
|
||||
adds r0, r2, #2
|
||||
str r0, [r1, #4]
|
||||
movs r7, #0x80
|
||||
lsls r7, r7, #0x18
|
||||
orrs r4, r7
|
||||
str r4, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
_08050BEE:
|
||||
ldr r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
beq RETURN
|
||||
ldr r2, [sp]
|
||||
cmp r5, #9
|
||||
ble _08050BFE
|
||||
adds r5, r6, #0
|
||||
adds r2, #0x40
|
||||
_08050BFE:
|
||||
lsls r0, r5, #1
|
||||
adds r0, r0, r2
|
||||
ldr r2, [sp, #4]
|
||||
ldr r3, _08050C28 @ =0xFFFFF24D
|
||||
adds r1, r2, r3
|
||||
strh r1, [r0, #2]
|
||||
RETURN:
|
||||
add sp, #8
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08050C18: .4byte gUnk_02002A40
|
||||
_08050C1C: .4byte 0x0000F24C
|
||||
_08050C20: .4byte 0x040000D4
|
||||
_08050C24: .4byte gUnk_080FC914
|
||||
_08050C28: .4byte 0xFFFFF24D
|
||||
|
||||
thumb_func_start sub_08050C2C
|
||||
sub_08050C2C: @ 0x08050C2C
|
||||
push {lr}
|
||||
ldr r1, _08050C48 @ =gUnk_080FC93C
|
||||
ldr r0, _08050C4C @ =gMenu
|
||||
ldrb r0, [r0, #5]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
bl _call_via_r0
|
||||
ldr r0, _08050C50 @ =gUnk_02019EE0
|
||||
ldrb r0, [r0, #6]
|
||||
bl sub_08050A64
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08050C48: .4byte gUnk_080FC93C
|
||||
_08050C4C: .4byte gMenu
|
||||
_08050C50: .4byte gUnk_02019EE0
|
||||
|
||||
thumb_func_start sub_08050C54
|
||||
sub_08050C54: @ 0x08050C54
|
||||
push {r4, lr}
|
||||
ldr r0, _08050C78 @ =gUnk_02019EE0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
beq _08050C60
|
||||
b _08050D60
|
||||
_08050C60:
|
||||
ldr r0, _08050C7C @ =gMenu
|
||||
ldrb r4, [r0, #1]
|
||||
ldr r0, _08050C80 @ =gUnk_03000FF0
|
||||
ldrh r0, [r0, #2]
|
||||
subs r0, #1
|
||||
cmp r0, #0x1f
|
||||
bhi _08050D44
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08050C84 @ =_08050C88
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08050C78: .4byte gUnk_02019EE0
|
||||
_08050C7C: .4byte gMenu
|
||||
_08050C80: .4byte gUnk_03000FF0
|
||||
_08050C84: .4byte _08050C88
|
||||
_08050C88: @ jump table
|
||||
.4byte _08050D08 @ case 0
|
||||
.4byte _08050D30 @ case 1
|
||||
.4byte _08050D44 @ case 2
|
||||
.4byte _08050D44 @ case 3
|
||||
.4byte _08050D44 @ case 4
|
||||
.4byte _08050D44 @ case 5
|
||||
.4byte _08050D44 @ case 6
|
||||
.4byte _08050D08 @ case 7
|
||||
.4byte _08050D44 @ case 8
|
||||
.4byte _08050D44 @ case 9
|
||||
.4byte _08050D44 @ case 10
|
||||
.4byte _08050D44 @ case 11
|
||||
.4byte _08050D44 @ case 12
|
||||
.4byte _08050D44 @ case 13
|
||||
.4byte _08050D44 @ case 14
|
||||
.4byte _08050D42 @ case 15
|
||||
.4byte _08050D44 @ case 16
|
||||
.4byte _08050D44 @ case 17
|
||||
.4byte _08050D44 @ case 18
|
||||
.4byte _08050D44 @ case 19
|
||||
.4byte _08050D44 @ case 20
|
||||
.4byte _08050D44 @ case 21
|
||||
.4byte _08050D44 @ case 22
|
||||
.4byte _08050D44 @ case 23
|
||||
.4byte _08050D44 @ case 24
|
||||
.4byte _08050D44 @ case 25
|
||||
.4byte _08050D44 @ case 26
|
||||
.4byte _08050D44 @ case 27
|
||||
.4byte _08050D44 @ case 28
|
||||
.4byte _08050D44 @ case 29
|
||||
.4byte _08050D44 @ case 30
|
||||
.4byte _08050D3E @ case 31
|
||||
_08050D08:
|
||||
cmp r4, #0
|
||||
bne _08050D12
|
||||
ldr r0, _08050D28 @ =0x80080000
|
||||
bl PlaySFX
|
||||
_08050D12:
|
||||
ldr r1, _08050D2C @ =gMenu
|
||||
movs r0, #0xf
|
||||
strh r0, [r1, #8]
|
||||
movs r0, #1
|
||||
bl sub_080A7114
|
||||
movs r0, #0x6a
|
||||
bl PlaySFX
|
||||
b _08050D44
|
||||
.align 2, 0
|
||||
_08050D28: .4byte 0x80080000
|
||||
_08050D2C: .4byte gMenu
|
||||
_08050D30:
|
||||
movs r0, #0x6c
|
||||
bl PlaySFX
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
b _08050D44
|
||||
_08050D3E:
|
||||
subs r4, #1
|
||||
b _08050D44
|
||||
_08050D42:
|
||||
adds r4, #1
|
||||
_08050D44:
|
||||
cmp r4, #0
|
||||
bge _08050D4A
|
||||
movs r4, #0
|
||||
_08050D4A:
|
||||
cmp r4, #2
|
||||
ble _08050D50
|
||||
movs r4, #2
|
||||
_08050D50:
|
||||
ldr r1, _08050D64 @ =gMenu
|
||||
ldrb r0, [r1, #1]
|
||||
cmp r0, r4
|
||||
beq _08050D60
|
||||
strb r4, [r1, #1]
|
||||
movs r0, #0x69
|
||||
bl PlaySFX
|
||||
_08050D60:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08050D64: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_08050D68
|
||||
sub_08050D68: @ 0x08050D68
|
||||
push {lr}
|
||||
ldr r1, _08050D84 @ =gMenu
|
||||
ldrh r0, [r1, #8]
|
||||
cmp r0, #0
|
||||
bne _08050D94
|
||||
ldrb r0, [r1, #1]
|
||||
cmp r0, #1
|
||||
beq _08050D88
|
||||
cmp r0, #1
|
||||
ble _08050D80
|
||||
cmp r0, #2
|
||||
beq _08050D8C
|
||||
_08050D80:
|
||||
movs r0, #7
|
||||
b _08050D8E
|
||||
.align 2, 0
|
||||
_08050D84: .4byte gMenu
|
||||
_08050D88:
|
||||
movs r0, #5
|
||||
b _08050D8E
|
||||
_08050D8C:
|
||||
movs r0, #6
|
||||
_08050D8E:
|
||||
bl sub_080503BC
|
||||
b _08050D98
|
||||
_08050D94:
|
||||
subs r0, #1
|
||||
strh r0, [r1, #8]
|
||||
_08050D98:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08050D9C
|
||||
sub_08050D9C: @ 0x08050D9C
|
||||
push {lr}
|
||||
ldr r1, _08050DB0 @ =gUnk_080FC944
|
||||
ldr r0, _08050DB4 @ =gMenu
|
||||
ldrb r0, [r0, #5]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
bl _call_via_r0
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08050DB0: .4byte gUnk_080FC944
|
||||
_08050DB4: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_08050DB8
|
||||
sub_08050DB8: @ 0x08050DB8
|
||||
push {lr}
|
||||
ldr r0, _08050DDC @ =gUnk_020344B0
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #4
|
||||
bl _DmaZero
|
||||
movs r0, #0xc
|
||||
bl sub_080503A8
|
||||
ldr r1, _08050DE0 @ =gMenu
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x12
|
||||
ldrb r0, [r0, #7]
|
||||
strb r0, [r1, #4]
|
||||
movs r0, #1
|
||||
bl sub_080A7114
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08050DDC: .4byte gUnk_020344B0
|
||||
_08050DE0: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_08050DE4
|
||||
sub_08050DE4: @ 0x08050DE4
|
||||
push {r4, lr}
|
||||
ldr r0, _08050E0C @ =gUnk_02019EE0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _08050E80
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x12
|
||||
ldrb r4, [r1, #7]
|
||||
ldr r0, _08050E10 @ =gUnk_03000FF0
|
||||
ldrh r0, [r0, #2]
|
||||
cmp r0, #8
|
||||
beq _08050E26
|
||||
cmp r0, #8
|
||||
bgt _08050E14
|
||||
cmp r0, #1
|
||||
beq _08050E26
|
||||
cmp r0, #2
|
||||
beq _08050E50
|
||||
b _08050E62
|
||||
.align 2, 0
|
||||
_08050E0C: .4byte gUnk_02019EE0
|
||||
_08050E10: .4byte gUnk_03000FF0
|
||||
_08050E14:
|
||||
cmp r0, #0x40
|
||||
beq _08050E1E
|
||||
cmp r0, #0x80
|
||||
beq _08050E22
|
||||
b _08050E62
|
||||
_08050E1E:
|
||||
subs r4, #1
|
||||
b _08050E62
|
||||
_08050E22:
|
||||
adds r4, #1
|
||||
b _08050E62
|
||||
_08050E26:
|
||||
movs r0, #0x6a
|
||||
bl PlaySFX
|
||||
ldr r0, _08050E44 @ =gMenu
|
||||
ldrb r0, [r0, #4]
|
||||
cmp r0, r4
|
||||
beq _08050E48
|
||||
movs r0, #2
|
||||
bl sub_080A7114
|
||||
movs r0, #8
|
||||
movs r1, #0
|
||||
bl sub_08050318
|
||||
b _08050E62
|
||||
.align 2, 0
|
||||
_08050E44: .4byte gMenu
|
||||
_08050E48:
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
b _08050E62
|
||||
_08050E50:
|
||||
ldr r0, _08050E84 @ =gMenu
|
||||
ldrb r4, [r0, #4]
|
||||
strb r4, [r1, #7]
|
||||
movs r0, #0x6c
|
||||
bl PlaySFX
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
_08050E62:
|
||||
cmp r4, #1
|
||||
bgt _08050E68
|
||||
movs r4, #2
|
||||
_08050E68:
|
||||
cmp r4, #6
|
||||
ble _08050E6E
|
||||
movs r4, #6
|
||||
_08050E6E:
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x12
|
||||
ldrb r0, [r1, #7]
|
||||
cmp r0, r4
|
||||
beq _08050E80
|
||||
strb r4, [r1, #7]
|
||||
movs r0, #0x69
|
||||
bl PlaySFX
|
||||
_08050E80:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08050E84: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_08050E88
|
||||
sub_08050E88: @ 0x08050E88
|
||||
push {lr}
|
||||
movs r0, #2
|
||||
bl sub_0807CDA4
|
||||
cmp r0, #0
|
||||
beq _08050E9A
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
_08050E9A:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08050E9C
|
||||
sub_08050E9C: @ 0x08050E9C
|
||||
thumb_func_start HandleFileOptions
|
||||
HandleFileOptions: @ 0x08050E9C
|
||||
push {lr}
|
||||
ldr r1, _08050EB0 @ =gUnk_080FC950
|
||||
ldr r0, _08050EB4 @ =gMenu
|
||||
|
@ -581,7 +161,7 @@ _08050FBA:
|
|||
bl sub_080A7114
|
||||
ldr r0, _08050FCC @ =gUnk_02019EE0
|
||||
ldrb r0, [r0, #6]
|
||||
bl sub_0805041C
|
||||
bl SetActiveSave
|
||||
b _08050FF4
|
||||
.align 2, 0
|
||||
_08050FCC: .4byte gUnk_02019EE0
|
||||
|
@ -599,7 +179,7 @@ _08050FE2:
|
|||
beq _08050FF4
|
||||
strb r2, [r4]
|
||||
ldrb r0, [r6, #6]
|
||||
bl sub_080503E4
|
||||
bl LoadOptionsFromSave
|
||||
movs r0, #0x69
|
||||
bl PlaySFX
|
||||
_08050FF4:
|
||||
|
@ -669,12 +249,12 @@ _08051060:
|
|||
_08051068: .4byte gUnk_03000FF0
|
||||
_0805106C:
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
bl SetFileSelectState
|
||||
_08051072:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_08051074
|
||||
sub_08051074: @ 0x08051074
|
||||
thumb_func_start HandleFileNew
|
||||
HandleFileNew: @ 0x08051074
|
||||
push {lr}
|
||||
ldr r1, _08051088 @ =gUnk_080FC960
|
||||
ldr r0, _0805108C @ =gMenu
|
||||
|
@ -1189,7 +769,7 @@ _08051448:
|
|||
sub_0805144C: @ 0x0805144C
|
||||
push {lr}
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
bl SetFileSelectState
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
|
@ -1372,8 +952,8 @@ _08051594: .4byte gUnk_02002A40
|
|||
_08051598: .4byte gUnk_02019EE0
|
||||
_0805159C: .4byte 0x000004B4
|
||||
|
||||
thumb_func_start sub_080515A0
|
||||
sub_080515A0: @ 0x080515A0
|
||||
thumb_func_start HandleFileDelete
|
||||
HandleFileDelete: @ 0x080515A0
|
||||
push {lr}
|
||||
ldr r1, _080515BC @ =gUnk_080FC9BC
|
||||
ldr r0, _080515C0 @ =gMenu
|
||||
|
@ -1480,7 +1060,7 @@ _08051694:
|
|||
_080516B0: .4byte gMenu
|
||||
_080516B4:
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
bl SetFileSelectState
|
||||
movs r0, #0x6c
|
||||
bl PlaySFX
|
||||
b _080516C8
|
||||
|
@ -1518,15 +1098,15 @@ sub_080516E0: @ 0x080516E0
|
|||
movs r0, #2
|
||||
strh r0, [r1, #8]
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
bl SetFileSelectState
|
||||
_08051706:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08051708: .4byte gUnk_02019EE0
|
||||
_0805170C: .4byte gMenu
|
||||
|
||||
thumb_func_start sub_08051710
|
||||
sub_08051710: @ 0x08051710
|
||||
thumb_func_start HandleFileCopy
|
||||
HandleFileCopy: @ 0x08051710
|
||||
push {lr}
|
||||
ldr r1, _0805172C @ =gUnk_080FC9C8
|
||||
ldr r0, _08051730 @ =gMenu
|
||||
|
@ -1697,7 +1277,7 @@ _08051848:
|
|||
movs r0, #0x6c
|
||||
bl PlaySFX
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
bl SetFileSelectState
|
||||
_08051858:
|
||||
adds r0, r4, #0
|
||||
bl sub_080517B4
|
||||
|
@ -1744,7 +1324,7 @@ sub_08051874: @ 0x08051874
|
|||
adds r1, r1, r3
|
||||
bl _DmaCopy
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
bl SetFileSelectState
|
||||
b _080518DE
|
||||
.align 2, 0
|
||||
_080518B8: .4byte gUnk_02019EE0
|
||||
|
@ -1780,7 +1360,7 @@ sub_080518E4: @ 0x080518E4
|
|||
cmp r0, #0
|
||||
beq _08051910
|
||||
movs r0, #0
|
||||
bl sub_080503BC
|
||||
bl SetFileSelectState
|
||||
b _08051910
|
||||
.align 2, 0
|
||||
_08051904: .4byte gMenu
|
||||
|
@ -1792,8 +1372,8 @@ _08051910:
|
|||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08051914
|
||||
sub_08051914: @ 0x08051914
|
||||
thumb_func_start HandleFileStart
|
||||
HandleFileStart: @ 0x08051914
|
||||
push {lr}
|
||||
ldr r1, _08051940 @ =gMenu
|
||||
ldrb r0, [r1, #5]
|
||||
|
@ -2014,7 +1594,7 @@ _08051B02:
|
|||
bl sub_08000108
|
||||
bl sub_0801C344
|
||||
bl sub_0805E5F8
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0801C208
|
||||
bl sub_08078CB4
|
||||
bl sub_080AD9B0
|
||||
|
@ -2115,7 +1695,7 @@ sub_08051BD0: @ 0x08051BD0
|
|||
_08051C02:
|
||||
bl sub_08078B48
|
||||
_08051C06:
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0805E5C0
|
||||
bl sub_08080A40
|
||||
bl sub_080175F4
|
||||
|
@ -2182,7 +1762,7 @@ sub_08051CA8: @ 0x08051CA8
|
|||
bl sub_080175F4
|
||||
bl sub_0801C344
|
||||
bl sub_0805E5F8
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0801C208
|
||||
bl sub_08078CB4
|
||||
bl sub_080AD9B0
|
||||
|
@ -2202,7 +1782,7 @@ _08051CEC: .4byte gFadeControl
|
|||
thumb_func_start sub_08051CF0
|
||||
sub_08051CF0: @ 0x08051CF0
|
||||
push {r4, r5, r6, lr}
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0801C208
|
||||
bl sub_080AD9B0
|
||||
ldr r5, _08051D20 @ =gUnk_03001000
|
||||
|
@ -2449,7 +2029,7 @@ sub_08051F04: @ 0x08051F04
|
|||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
bl _call_via_r0
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_0805E5C0
|
||||
bl sub_080AD9B0
|
||||
bl sub_080AD918
|
||||
|
@ -2581,7 +2161,7 @@ sub_08052010: @ 0x08052010
|
|||
lsls r4, r4, #4
|
||||
adds r1, r4, #0
|
||||
bl _DmaZero
|
||||
ldr r0, _08052080 @ =gUnk_020344B0
|
||||
ldr r0, _08052080 @ =gBG2Buffer
|
||||
adds r1, r4, #0
|
||||
bl _DmaZero
|
||||
bl sub_080A4D34
|
||||
|
@ -2616,7 +2196,7 @@ sub_08052010: @ 0x08052010
|
|||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0805207C: .4byte gBG1Buffer
|
||||
_08052080: .4byte gUnk_020344B0
|
||||
_08052080: .4byte gBG2Buffer
|
||||
_08052084: .4byte gMenu
|
||||
_08052088: .4byte gScreen
|
||||
_0805208C: .4byte 0x00001C01
|
||||
|
@ -2635,7 +2215,7 @@ HandleGameOverScreen: @ 0x08052094
|
|||
ldrb r0, [r4, #3]
|
||||
cmp r0, #0
|
||||
beq _080520B8
|
||||
bl sub_080AD90C
|
||||
bl FlushSprites
|
||||
bl sub_080523D4
|
||||
bl sub_080AD918
|
||||
_080520B8:
|
|
@ -0,0 +1,125 @@
|
|||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #8
|
||||
str r0, [sp]
|
||||
ldr r1, _08050C18 @ =gUnk_02002A40
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xaa
|
||||
ldrb r0, [r0]
|
||||
lsrs r2, r0, #1
|
||||
cmp r2, #0
|
||||
bne _08050B5A
|
||||
movs r2, #1
|
||||
_08050B5A:
|
||||
adds r0, r1, #0
|
||||
adds r0, #0xab
|
||||
ldrb r0, [r0]
|
||||
lsrs r3, r0, #1
|
||||
cmp r3, #0
|
||||
beq RETURN
|
||||
cmp r2, r3
|
||||
ble _08050B6C
|
||||
adds r2, r3, #0
|
||||
_08050B6C:
|
||||
movs r0, #3
|
||||
ands r0, r2
|
||||
str r0, [sp, #4]
|
||||
adds r0, r2, #0
|
||||
asrs r5, r0, #2
|
||||
mov ip, r5
|
||||
cmp r5, #0xa
|
||||
ble _08050B80
|
||||
movs r2, #0xa
|
||||
mov ip, r2
|
||||
_08050B80:
|
||||
adds r6, r5, #0
|
||||
subs r6, #0xa
|
||||
mov sb, r6
|
||||
cmp r6, #0
|
||||
bge _08050B8E
|
||||
movs r7, #0
|
||||
mov sb, r7
|
||||
_08050B8E:
|
||||
adds r0, r3, #0
|
||||
asrs r3, r0, #2
|
||||
adds r0, r3, #0
|
||||
cmp r3, #0xa
|
||||
ble _08050B9A
|
||||
movs r3, #0xa
|
||||
_08050B9A:
|
||||
adds r4, r0, #0
|
||||
subs r4, #0xa
|
||||
ldr r2, [sp]
|
||||
ldr r0, _08050C1C @ =0x0000F24C
|
||||
mov sl, r0
|
||||
strh r0, [r2]
|
||||
ldr r1, _08050C20 @ =0x040000D4
|
||||
movs r7, #0xa
|
||||
mov r8, r7
|
||||
mov r0, r8
|
||||
mov r7, ip @ var5
|
||||
subs r0, r0, r7 @ 10 - var5
|
||||
lsls r0, r0, #1
|
||||
ldr r7, _08050C24 @ =gUnk_080FC914
|
||||
mov ip, r7
|
||||
add r0, ip
|
||||
str r0, [r1]
|
||||
adds r0, r2, #2
|
||||
str r0, [r1, #4]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x18
|
||||
orrs r3, r0
|
||||
str r3, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
cmp r4, #0
|
||||
ble _08050BEE
|
||||
adds r2, #0x40
|
||||
mov r3, sl
|
||||
strh r3, [r2]
|
||||
mov r7, r8
|
||||
mov r3, sb
|
||||
subs r0, r7, r3
|
||||
lsls r0, r0, #1
|
||||
add r0, ip
|
||||
str r0, [r1]
|
||||
adds r0, r2, #2
|
||||
str r0, [r1, #4]
|
||||
movs r7, #0x80
|
||||
lsls r7, r7, #0x18
|
||||
orrs r4, r7
|
||||
str r4, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
_08050BEE:
|
||||
ldr r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
beq RETURN
|
||||
ldr r2, [sp]
|
||||
cmp r5, #9
|
||||
ble _08050BFE
|
||||
adds r5, r6, #0
|
||||
adds r2, #0x40
|
||||
_08050BFE:
|
||||
lsls r0, r5, #1
|
||||
adds r0, r0, r2
|
||||
ldr r2, [sp, #4]
|
||||
ldr r3, _08050C28 @ =0xFFFFF24D
|
||||
adds r1, r2, r3
|
||||
strh r1, [r0, #2]
|
||||
RETURN:
|
||||
add sp, #8
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08050C18: .4byte gUnk_02002A40
|
||||
_08050C1C: .4byte 0x0000F24C
|
||||
_08050C20: .4byte 0x040000D4
|
||||
_08050C24: .4byte gUnk_080FC914
|
||||
_08050C28: .4byte 0xFFFFF24D
|
||||
.syntax divided
|
1929
data/data_080D5360.s
1929
data/data_080D5360.s
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -4,15 +4,6 @@
|
|||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_08107BC8:: @ 08107BC8
|
||||
.incbin "baserom.gba", 0x107BC8, 0x0000018
|
||||
|
||||
gUnk_08107BE0:: @ 08107BE0
|
||||
.incbin "baserom.gba", 0x107BE0, 0x0000014
|
||||
|
||||
gUnk_08107BF4:: @ 08107BF4
|
||||
.incbin "baserom.gba", 0x107BF4, 0x0000018
|
||||
|
||||
gUnk_08107C0C:: @ 08107C0C
|
||||
.incbin "baserom.gba", 0x107C0C, 0x0000003
|
||||
|
||||
|
|
|
@ -4,30 +4,6 @@
|
|||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_0811E454:: @ 0811E454
|
||||
.incbin "baserom.gba", 0x11E454, 0x000001C
|
||||
|
||||
gUnk_0811E470:: @ 0811E470
|
||||
.incbin "baserom.gba", 0x11E470, 0x0000008
|
||||
|
||||
gUnk_0811E478:: @ 0811E478
|
||||
.incbin "baserom.gba", 0x11E478, 0x000000C
|
||||
|
||||
gUnk_0811E484:: @ 0811E484
|
||||
.incbin "baserom.gba", 0x11E484, 0x0000020
|
||||
|
||||
gUnk_0811E4A4:: @ 0811E4A4
|
||||
.incbin "baserom.gba", 0x11E4A4, 0x0000008
|
||||
|
||||
gUnk_0811E4AC:: @ 0811E4AC
|
||||
.incbin "baserom.gba", 0x11E4AC, 0x0000001
|
||||
|
||||
gUnk_0811E4AD:: @ 0811E4AD
|
||||
.incbin "baserom.gba", 0x11E4AD, 0x0000007
|
||||
|
||||
gUnk_0811E4B4:: @ 0811E4B4
|
||||
.incbin "baserom.gba", 0x11E4B4, 0x0000008
|
||||
|
||||
gUnk_0811E4BC:: @ 0811E4BC
|
||||
.incbin "baserom.gba", 0x11E4BC, 0x0000054
|
||||
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
#ifndef FILESELECT_H
|
||||
#define FILESELECT_H
|
||||
|
||||
#include "global.h"
|
||||
#include "functions.h"
|
||||
#include "main.h"
|
||||
#include "player.h"
|
||||
#include "readKeyInput.h"
|
||||
#include "screen.h"
|
||||
#include "menu.h"
|
||||
#include "save.h"
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x5];
|
||||
u8 state;
|
||||
u8 subState;
|
||||
u16 timer;
|
||||
u8 fillerA[0x26];
|
||||
} ChooseFileState;
|
||||
|
||||
// TODO: This occupies the same memory region as gMenu
|
||||
extern ChooseFileState gChooseFileState;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x1];
|
||||
u8 unk1;
|
||||
u8 charColor;
|
||||
u8 bgColor;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
u8* unk8;
|
||||
} struct_02036540;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x10];
|
||||
u16 unk10;
|
||||
u8 filler12[0x6];
|
||||
} struct_080FC844;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x4];
|
||||
} struct_020227E8;
|
||||
|
||||
extern struct_020227E8 gUnk_020227E8;
|
||||
|
||||
extern SaveFile gSaveFiles[];
|
||||
extern u32 gUsedPalettes;
|
||||
extern u8 gUnk_02000D00[];
|
||||
|
||||
struct OAMCommand {
|
||||
u16 x;
|
||||
u16 y;
|
||||
u16 _4;
|
||||
u16 _6;
|
||||
u16 _8;
|
||||
} extern gUnk_03001010;
|
||||
|
||||
extern void sub_08056FEC(u32, struct_020227E8*);
|
||||
extern void sub_0805F46C(u32, struct_080FC844*);
|
||||
extern void sub_0801C4A0(u32, u32);
|
||||
extern void sub_08080668(void);
|
||||
extern void sub_0805194C(u32);
|
||||
extern void LoadPalettes(const u8*, int, int);
|
||||
extern struct_02036540* sub_0805F2C8(void);
|
||||
extern void sub_0805F7DC(u32, struct_02036540*);
|
||||
extern void sub_0805F300(struct_02036540*);
|
||||
extern void sub_08050A64(u32);
|
||||
extern void sub_08050AFC(u32);
|
||||
|
||||
extern const struct_080FC844 gUnk_080FC844;
|
||||
extern const u16 gUnk_080FC85C[][3];
|
||||
extern void (*const gUnk_080FC908[])(void);
|
||||
extern const u16 gUnk_080FC8DE[];
|
||||
extern const u8 gGlobalGfxAndPalettes[];
|
||||
extern void (*const gUnk_080FC93C[])();
|
||||
|
||||
#endif
|
|
@ -65,12 +65,6 @@ extern u32 IsItemEquipped(u32);
|
|||
extern void DeleteManager(Manager*);
|
||||
extern bool32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY);
|
||||
extern u32 CheckIsDungeon();
|
||||
extern void HandleIntroScreen(void);
|
||||
extern void HandleChooseFileScreen(void);
|
||||
extern void HandleGameplayScreen(void);
|
||||
extern void HandleGameOverScreen(void);
|
||||
extern void HandleCreditsScreen(void);
|
||||
extern void HandleDebugTextScreen(void);
|
||||
extern u32 GetTileTypeByEntity(Entity*);
|
||||
|
||||
// Unidentified
|
||||
|
@ -136,7 +130,7 @@ extern s32 sub_0807887C(Entity*, u32, u32);
|
|||
extern s32 sub_08078904();
|
||||
extern void sub_0805E5A8(void);
|
||||
extern void sub_0805E5C0(void);
|
||||
extern void sub_080AD90C(void);
|
||||
extern void FlushSprites(void);
|
||||
extern void sub_080AD9B0(void);
|
||||
extern void sub_080AD918(void);
|
||||
extern void sub_0801E104(void);
|
||||
|
@ -190,7 +184,7 @@ extern void sub_0804F578(void);
|
|||
extern void sub_08059994(void);
|
||||
extern s32 sub_0801CFA8(u32);
|
||||
extern void sub_080A3210(void);
|
||||
extern void sub_080ADA14(u32, u32);
|
||||
extern void sub_080ADA14(u32, u32); // trampoline to sub_080B27F4
|
||||
extern void sub_0801E1B8(u32, u32);
|
||||
extern void sub_0801E1EC(s32, s32, s32);
|
||||
extern void sub_08050008(void);
|
||||
|
@ -203,7 +197,6 @@ extern u32 sub_080A4494(void);
|
|||
extern void sub_080A4528(void);
|
||||
extern void sub_080A4398(void);
|
||||
extern void sub_0801E738(u32);
|
||||
extern void sub_080A70AC(const void*);
|
||||
extern void sub_080A7114(u32);
|
||||
extern void sub_08001324(Entity*);
|
||||
extern void sub_08001242(Entity*);
|
||||
|
@ -219,7 +212,7 @@ extern void sub_0807A108(void);
|
|||
extern void sub_0801766C(Entity*);
|
||||
extern void sub_08004168(Entity*);
|
||||
extern u32 sub_08052638(u32);
|
||||
extern void sub_0805616C(void);
|
||||
extern void InitDMA(void);
|
||||
extern u32 sub_0807CF08(u32, u8*);
|
||||
extern void sub_0807CF48(u32);
|
||||
extern u32 sub_0807CF10(u8*);
|
||||
|
@ -227,12 +220,11 @@ extern void sub_08056208(void);
|
|||
extern void sub_08050384();
|
||||
extern void sub_080B1520(u32);
|
||||
extern struct_0807D1C4* sub_0807D1C4(u32);
|
||||
extern u32 sub_0807D24C(u32, char*, u32);
|
||||
extern u32 sub_0807D24C(u32, const char*, u32);
|
||||
extern void sub_0807CF68(u32);
|
||||
extern void sub_0807D20C(u32, char*, u32);
|
||||
extern void sub_0807D20C(u32, const char*, u32);
|
||||
extern u32 sub_0807CF88(u32, u8*);
|
||||
extern u32 sub_0807D008(u32, void*);
|
||||
extern void sub_0807D184(u32, char*);
|
||||
extern void sub_0807D184(u32, const char*);
|
||||
extern u32 sub_0806F520();
|
||||
extern void sub_0806F4E8(Entity*);
|
||||
extern u32 sub_0806F3E4(Entity*);
|
||||
|
@ -323,7 +315,7 @@ extern void sub_08008790(Entity*, u32);
|
|||
extern void sub_0804ACF8();
|
||||
extern void sub_08073904(Entity*);
|
||||
extern u32 sub_08056134(void);
|
||||
extern u32 sub_0807CF30(void*);
|
||||
extern u32 sub_0807CF30(SaveFile*);
|
||||
extern void sub_08004484(Entity*, Entity*);
|
||||
extern void sub_080564C8(u32);
|
||||
extern void sub_08056F70(void);
|
||||
|
|
|
@ -13,6 +13,26 @@ typedef struct { // 0x03001000
|
|||
u8 field_0xb;
|
||||
u32 spritePriority;
|
||||
} MainStruct;
|
||||
#define SIGNATURE 'MCZ3'
|
||||
#define MAX_MSG_SPEED 3
|
||||
#define NUM_SAVE_SLOTS 3
|
||||
#define MAX_BRIGHTNESS 3
|
||||
|
||||
typedef enum {
|
||||
LANGUAGE_JP,
|
||||
LANGUAGE_EN,
|
||||
LANGUAGE_FR,
|
||||
LANGUAGE_DE,
|
||||
LANGUAGE_ES,
|
||||
LANGUAGE_IT,
|
||||
NUM_LANGUAGES,
|
||||
} Language;
|
||||
|
||||
#ifdef ENGLISH
|
||||
#define GAME_LANGUAGE LANGUAGE_EN
|
||||
#else
|
||||
#define GAME_LANGUAGE LANGUAGE_JP
|
||||
#endif
|
||||
|
||||
enum {
|
||||
SCREEN_INTRO,
|
||||
|
@ -23,13 +43,6 @@ enum {
|
|||
SCREEN_DEBUG_TEXT,
|
||||
};
|
||||
|
||||
#define GAME_LANGUAGE GAME_LANGUAGE_EN
|
||||
#define SIGNATURE 'MCZ3'
|
||||
#define GAME_LANGUAGE_EN 1
|
||||
#define MAX_MSG_SPEED 3
|
||||
#define MAX_SAVE_FILES 3
|
||||
#define MAX_BRIGHTNESS 3
|
||||
|
||||
typedef struct {
|
||||
u8 interruptFlag;
|
||||
u8 field_0x1;
|
||||
|
@ -47,7 +60,7 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
/*0x00*/ u16 nextToLoad;
|
||||
/*0x02*/ u8 transitionType;
|
||||
/*0x02*/ u8 lastState;
|
||||
/*0x03*/ u8 field_0x3;
|
||||
/*0x04*/ u8 state;
|
||||
/*0x05*/ u8 field_0x5;
|
||||
|
@ -62,7 +75,7 @@ static_assert(sizeof(UI) == 0x3b4);
|
|||
extern Main gUnk_03001000;
|
||||
extern UI gUnk_02032EC0;
|
||||
|
||||
extern void sub_080A3204(void);
|
||||
extern void InitSound(void);
|
||||
extern void sub_0807CE90(void);
|
||||
extern void sub_080560B8(void);
|
||||
extern void sub_08056208(void);
|
||||
|
@ -76,9 +89,19 @@ extern void ReadKeyInput(void);
|
|||
extern void DoSoftReset(void);
|
||||
extern void sub_08056260(void);
|
||||
extern void VBlankIntrWait();
|
||||
extern s32 _call_via_r0(s32);
|
||||
extern void sub_08056458(void);
|
||||
extern void sub_08050154(void);
|
||||
extern void sub_080A3480(void);
|
||||
|
||||
extern u8 gUnk_03003DE4;
|
||||
|
||||
extern void sub_0804FF84(u32);
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern void VBlankInterruptWait(void);
|
||||
extern void DisableInterruptsAndDMA(void);
|
||||
extern void sub_08016B34(void);
|
||||
|
||||
static void sub_08055F70(void);
|
||||
static bool32 SoftResetKeysPressed(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -17,9 +17,30 @@ typedef struct {
|
|||
u32 filler3[3];
|
||||
} MenuControls;
|
||||
|
||||
typedef struct {
|
||||
u8 key;
|
||||
u8 value;
|
||||
} KeySetting;
|
||||
|
||||
typedef struct {
|
||||
u8 aButtonX;
|
||||
u8 aButtonY;
|
||||
u8 aButtonText;
|
||||
u8 bButtonX;
|
||||
u8 bButtonY;
|
||||
u8 bButtonText;
|
||||
u8 rButtonX;
|
||||
u8 rButtonY;
|
||||
u8 rButtonText;
|
||||
KeySetting settingDict[0];
|
||||
u8 eof;
|
||||
} PACKED KeyButtonLayout;
|
||||
|
||||
extern void sub_080A70AC(const KeyButtonLayout*);
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
u8 field_0x1;
|
||||
u8 column_idx;
|
||||
u8 field_0x2;
|
||||
u8 field_0x3;
|
||||
u8 field_0x4;
|
||||
|
|
|
@ -76,7 +76,7 @@ extern void Object44(Entity*);
|
|||
extern void Object45(Entity*);
|
||||
extern void GiantBookLadder(Entity*);
|
||||
extern void HeartContainer(Entity*);
|
||||
extern void Object48(Entity*);
|
||||
extern void FileScreenObjects(Entity*);
|
||||
extern void Object49(Entity*);
|
||||
extern void BackgroundCloud(Entity*);
|
||||
extern void Object4B(Entity*);
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
#ifndef SAVE_H
|
||||
#define SAVE_H
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "menu.h"
|
||||
#include "structures.h"
|
||||
|
||||
typedef enum {
|
||||
SAVE_BUSY = 0,
|
||||
SAVE_OK = 1,
|
||||
SAVE_ERROR = 0xFFFFFFFF,
|
||||
} SaveResult;
|
||||
|
||||
typedef enum {
|
||||
SAVE_INIT,
|
||||
SAVE_IN_PROGRESS,
|
||||
SAVE_DONE,
|
||||
} SaveState;
|
||||
|
||||
extern u32 sub_0807CDA4(SaveState state);
|
||||
|
||||
#endif
|
|
@ -114,14 +114,15 @@ typedef struct {
|
|||
} ScreenTransitionData;
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ u8 unk0;
|
||||
/*0x00*/ u8 isTransitioning;
|
||||
/*0x01*/ u8 unk1;
|
||||
/*0x02*/ u8 unk2;
|
||||
/*0x03*/ u8 unk3;
|
||||
/*0x04*/ u8 filler4[0x2];
|
||||
/*0x06*/ u8 unk6;
|
||||
/*0x07*/ u8 unk7;
|
||||
/*0x08*/ s8 unk8[0xE20];
|
||||
/*0x08*/ s8 saveStatus[3];
|
||||
/*0x0b*/ u8 unkB[0xE1D];
|
||||
} struct_02019EE0;
|
||||
|
||||
extern struct_02019EE0 gUnk_02019EE0;
|
||||
|
@ -147,9 +148,9 @@ extern struct_03000FD0 gFadeControl;
|
|||
|
||||
typedef struct {
|
||||
u8 filler0[0x1A];
|
||||
u16 unk1A;
|
||||
u16 rButtonX;
|
||||
u8 filler1C[0x4];
|
||||
u16 unk20;
|
||||
u16 rButtonY;
|
||||
u8 filler22[0x2];
|
||||
u8 ezloNagFuncIndex;
|
||||
u8 filler25[0x30F];
|
||||
|
@ -200,6 +201,7 @@ typedef struct {
|
|||
} BGBuffer;
|
||||
extern BGBuffer gBG0Buffer;
|
||||
extern BGBuffer gBG1Buffer;
|
||||
extern BGBuffer gBG2Buffer;
|
||||
static_assert(sizeof(BGBuffer) == 0x800);
|
||||
|
||||
/*
|
||||
|
|
|
@ -19,10 +19,46 @@ typedef struct {
|
|||
u16 field_0xe;
|
||||
u32 field_0x10;
|
||||
} TextBox;
|
||||
|
||||
extern TextBox gTextBox;
|
||||
|
||||
void TextboxNoOverlap(u32 index, Entity* ent);
|
||||
typedef struct {
|
||||
u8 _0;
|
||||
u8 _1;
|
||||
u8 _2;
|
||||
u8 _3[5];
|
||||
u16 _8;
|
||||
u8 _b[0x16];
|
||||
u8 _20;
|
||||
u8 _21;
|
||||
u8 _22[0xa];
|
||||
void* _2c;
|
||||
u8 _30[0x23];
|
||||
u8 _53;
|
||||
u16 _54;
|
||||
u8 _56[0x2];
|
||||
void* _58;
|
||||
u8 _5c;
|
||||
u8 _5d;
|
||||
u8 _5e[24];
|
||||
u8 _76;
|
||||
u8 _77[0x11];
|
||||
u8 _88;
|
||||
u8 _89;
|
||||
u8 _8a;
|
||||
u8 _8b[0xe];
|
||||
u8 _99;
|
||||
u8 _9a;
|
||||
u8 _9b;
|
||||
u8 _9c;
|
||||
u8 _9d;
|
||||
u8 _9e[0xa];
|
||||
} struct_02022780;
|
||||
extern struct_02022780 gUnk_02022780;
|
||||
static_assert(sizeof(struct_02022780) == 0xa8);
|
||||
|
||||
void ShowTextbox(u32 index);
|
||||
void TextboxAtPosition(u32 index, u32 x, u32 y);
|
||||
void TextboxNoOverlap(u32 index, Entity* ent);
|
||||
void TextboxNoOverlapFollow(u32 index);
|
||||
|
||||
extern void TextboxNoOverlapFollow(u32 index);
|
||||
#endif
|
||||
|
|
18
linker.ld
18
linker.ld
|
@ -87,7 +87,11 @@ SECTIONS {
|
|||
. = 0x00022740; gUnk_02022740 = .;
|
||||
. = 0x00022750; gUnk_02022750 = .;
|
||||
. = 0x00022780; gUnk_02022780 = .;
|
||||
. = 0x000227DC; gUnk_020227DC = .;
|
||||
. = 0x000227E8; gUnk_020227E8 = .;
|
||||
. = 0x000227F0; gUnk_020227F0 = .;
|
||||
. = 0x000227F8; gUnk_020227F8 = .;
|
||||
. = 0x00022800; gUnk_02022800 = .;
|
||||
. = 0x0002281E; gUnk_0202281E = .;
|
||||
. = 0x00022830; gUnk_02022830 = .;
|
||||
. = 0x00024030; gUnk_02024030 = .;
|
||||
|
@ -124,7 +128,7 @@ SECTIONS {
|
|||
. = 0x00034490; gUnk_02034490 = .;
|
||||
. = 0x00034492; gUnk_02034492 = .;
|
||||
. = 0x000344A0; gUnk_020344A0 = .;
|
||||
. = 0x000344B0; gUnk_020344B0 = .;
|
||||
. = 0x000344B0; gBG2Buffer = .;
|
||||
. = 0x000344F0; gUnk_020344F0 = .;
|
||||
. = 0x00034CB0; gBG0Buffer = .;
|
||||
. = 0x00034CB2; gUnk_02034CB2 = .;
|
||||
|
@ -452,8 +456,8 @@ SECTIONS {
|
|||
src/sub_08050008.o(.text);
|
||||
src/sub_08050024.o(.text);
|
||||
asm/code_08050038.o(.text);
|
||||
src/chooseFile.o(.text);
|
||||
asm/chooseFile.o(.text);
|
||||
src/fileScreen.o(.text);
|
||||
asm/fileScreen.o(.text);
|
||||
asm/sub_08052418.o(.text);
|
||||
src/initializePlayer.o(.text);
|
||||
src/area.o(.text);
|
||||
|
@ -671,7 +675,7 @@ SECTIONS {
|
|||
asm/getInventoryValue.o(.text);
|
||||
asm/code_0807CAA0.o(.text);
|
||||
src/flags.o(.text);
|
||||
src/code_0807CC3C.o(.text);
|
||||
src/save.o(.text);
|
||||
asm/code_0807CC3C.o(.text);
|
||||
src/executeScriptCommandSet.o(.text);
|
||||
asm/code_0807F0D8.o(.text);
|
||||
|
@ -755,7 +759,7 @@ SECTIONS {
|
|||
asm/object45.o(.text);
|
||||
asm/giantBookLadder.o(.text);
|
||||
src/object/heartContainer.o(.text);
|
||||
src/object/object48.o(.text);
|
||||
src/object/fileScreenObjects.o(.text);
|
||||
src/object/object49.o(.text);
|
||||
src/object/backgroundCloud.o(.text);
|
||||
asm/object4B.o(.text);
|
||||
|
@ -992,10 +996,13 @@ SECTIONS {
|
|||
data/data_080D3D94.o(.rodata);
|
||||
data/entity_headers.o(.rodata);
|
||||
data/data_080D5360.o(.rodata);
|
||||
src/fileScreen.o(.rodata);
|
||||
data/data_080FC8A4.o(.rodata);
|
||||
src/main.o(.rodata);
|
||||
data/tileset_headers.o(.rodata);
|
||||
data/metatile_headers.o(.rodata);
|
||||
data/map_headers.o(.rodata);
|
||||
src/textbox.o(.rodata);
|
||||
data/data_08107BC8.o(.rodata);
|
||||
src/manager/manager5.o(.rodata);
|
||||
src/manager/manager7.o(.rodata);
|
||||
|
@ -1014,6 +1021,7 @@ SECTIONS {
|
|||
src/item.o(.rodata);
|
||||
data/data_0811BD44.o(.rodata);
|
||||
data/room_headers.o(.rodata);
|
||||
src/save.o(.rodata);
|
||||
data/data_0811E454.o(.rodata);
|
||||
src/executeScriptCommandSet.o(.rodata);
|
||||
data/data_0811E750.o(.rodata);
|
||||
|
|
557
src/chooseFile.c
557
src/chooseFile.c
|
@ -1,557 +0,0 @@
|
|||
#include "global.h"
|
||||
#include "functions.h"
|
||||
#include "main.h"
|
||||
#include "player.h"
|
||||
#include "readKeyInput.h"
|
||||
#include "screen.h"
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x5];
|
||||
u8 state;
|
||||
u8 subState;
|
||||
u16 timer;
|
||||
u8 fillerA[0x26];
|
||||
} ChooseFileState;
|
||||
|
||||
// TODO: This occupies the same memory region as gMenu
|
||||
extern ChooseFileState gChooseFileState;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x1];
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
u8* unk8;
|
||||
} struct_02036540;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x10];
|
||||
u16 unk10;
|
||||
u8 filler12[0x6];
|
||||
} struct_080FC844;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x4];
|
||||
} struct_020227E8;
|
||||
|
||||
extern struct_020227E8 gUnk_020227E8;
|
||||
|
||||
extern SaveFile gSaveFiles[];
|
||||
extern u32 gUsedPalettes;
|
||||
extern u8 gUnk_02000D00[];
|
||||
extern u16 gUnk_03001010[5];
|
||||
|
||||
static void sub_08050624(u32);
|
||||
static void sub_0805066C(void);
|
||||
static void sub_080507FC(void);
|
||||
|
||||
extern void sub_08056FEC(u32, struct_020227E8*);
|
||||
extern void sub_0805F46C(u32, struct_080FC844*);
|
||||
extern void sub_0801C4A0(u32, u32);
|
||||
extern void sub_08080668(void);
|
||||
extern void sub_0805194C(u32);
|
||||
extern void LoadPalettes(const u8*, int, int);
|
||||
extern struct_02036540* sub_0805F2C8(void);
|
||||
extern void sub_0805F7DC(u32, struct_02036540*);
|
||||
extern void sub_0805F300(struct_02036540*);
|
||||
extern void sub_08050A64(u32);
|
||||
extern void sub_08050AFC(u32);
|
||||
|
||||
extern const struct_080FC844 gUnk_080FC844;
|
||||
extern const u16 gUnk_080FC85C[][3];
|
||||
extern void (*const gUnk_080FC8A4[])(void);
|
||||
extern void (*const gUnk_080FC8B0[])(void);
|
||||
extern void (*const gUnk_080FC8FC[])(void);
|
||||
extern void (*const gUnk_080FC908[])(void);
|
||||
extern const u8 gUnk_080FC8D0[];
|
||||
extern const u16 gUnk_080FC8DE[];
|
||||
extern const u8 gGlobalGfxAndPalettes[];
|
||||
|
||||
void sub_08050318(u32 arg0, u32 arg1) {
|
||||
u32 sfx;
|
||||
struct_080FC844 var0;
|
||||
|
||||
sub_08050384();
|
||||
_DmaCopy(&gUnk_080FC844, &var0, sizeof(gUnk_080FC844));
|
||||
sub_08056FEC(arg1, &gUnk_020227E8);
|
||||
var0.unk10 |= gUnk_080FC85C[arg0][0] << 0xC;
|
||||
sub_0805F46C(gUnk_080FC85C[arg0][1], &var0);
|
||||
sfx = gUnk_080FC85C[arg0][2];
|
||||
if (sfx) {
|
||||
PlaySFX(sfx);
|
||||
}
|
||||
gScreen.bg.bg3Control = 1;
|
||||
}
|
||||
|
||||
void sub_08050384(void) {
|
||||
sub_0801C4A0(0, 0);
|
||||
_DmaZero(&gBG0Buffer, sizeof(gBG0Buffer));
|
||||
gScreen.bg.bg3Control = 1;
|
||||
}
|
||||
|
||||
void sub_080503A8(u32 gfxGroup) {
|
||||
LoadGfxGroup(gfxGroup);
|
||||
gScreen.bg.bg2yOffset = 1;
|
||||
gScreen.affine.unk = 1;
|
||||
}
|
||||
|
||||
void sub_080503BC(u8 state) {
|
||||
gUnk_02032EC0.state = state;
|
||||
_DmaZero(&gBG0Buffer, sizeof(gBG0Buffer));
|
||||
_DmaZero(&gBG1Buffer, sizeof(gBG1Buffer));
|
||||
}
|
||||
|
||||
void sub_080503E4(u32 saveFileId) {
|
||||
u8 messageSpeed;
|
||||
u8 brightnessPref;
|
||||
|
||||
if (saveFileId > 2) {
|
||||
messageSpeed = 1;
|
||||
brightnessPref = 1;
|
||||
} else {
|
||||
SaveFile* saveFile = &gSaveFiles[saveFileId];
|
||||
messageSpeed = saveFile->messageSpeed;
|
||||
brightnessPref = saveFile->brightnessPref;
|
||||
}
|
||||
|
||||
((struct_02000000*)0x2000000)->messageSpeed = messageSpeed;
|
||||
((struct_02000000*)0x2000000)->brightnessPref = brightnessPref;
|
||||
gUsedPalettes = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
void sub_0805041C(u32 saveFileId) {
|
||||
SaveFile* saveFile;
|
||||
|
||||
if (saveFileId < 3) {
|
||||
((struct_02000000*)0x2000000)->saveFileId = saveFileId;
|
||||
saveFile = &gSaveFiles[saveFileId];
|
||||
_DmaCopy(saveFile, &gUnk_02002A40, sizeof(*saveFile));
|
||||
}
|
||||
sub_080503E4(saveFileId);
|
||||
}
|
||||
|
||||
void HandleChooseFileScreen(void) {
|
||||
sub_080AD90C();
|
||||
gUnk_080FC8A4[gUnk_03001000.funcIndex]();
|
||||
if (gUnk_02032EC0.transitionType != gUnk_02032EC0.state) {
|
||||
gUnk_02032EC0.transitionType = gUnk_02032EC0.state;
|
||||
gScreen.bg.bg1Control = 0;
|
||||
gScreen.bg.bg2Control = 0;
|
||||
gScreen.bg.bg1yOffset = 0;
|
||||
gScreen.bg.bg2xOffset = 0;
|
||||
gScreen.affine.bg2xOffset = 0;
|
||||
gScreen.affine.bg2yOffset = 0;
|
||||
_DmaZero(&gChooseFileState, sizeof(gChooseFileState));
|
||||
}
|
||||
|
||||
sub_080507FC();
|
||||
gUnk_080FC8B0[gUnk_02032EC0.transitionType]();
|
||||
gUnk_02019EE0.unk0 = 0;
|
||||
sub_0805E5C0();
|
||||
sub_0805066C();
|
||||
sub_0801C1D4();
|
||||
sub_0801C208();
|
||||
sub_080AD9B0();
|
||||
sub_080AD918();
|
||||
if (gUnk_02019EE0.unk3 != ((struct_02000000*)0x2000000)->gameLanguage) {
|
||||
gUnk_02019EE0.unk3 = ((struct_02000000*)0x2000000)->gameLanguage;
|
||||
sub_080503A8(0x6);
|
||||
sub_080503A8(0xF);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080504F4(void) {
|
||||
u32 i;
|
||||
|
||||
sub_0801DA90(1);
|
||||
sub_080A3210();
|
||||
_DmaZero((void*)VRAM, 0x80);
|
||||
sub_08056418();
|
||||
EraseAllEntities();
|
||||
sub_08080668();
|
||||
sub_080ADD30();
|
||||
sub_0801CFA8(0);
|
||||
_DmaZero(&gUnk_0200AF00, sizeof(gUnk_0200AF00));
|
||||
_DmaZero(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
|
||||
gUnk_02019EE0.unk3 = 7;
|
||||
gUnk_02019EE0.unk6 = ((struct_02000000*)0x2000000)->gameLanguage > 1 ? 3 : 0;
|
||||
_DmaZero(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
|
||||
gUnk_02032EC0.transitionType = 8;
|
||||
sub_080503BC(0);
|
||||
sub_0805616C();
|
||||
sub_08050624(0);
|
||||
sub_08050624(1);
|
||||
sub_08050624(2);
|
||||
sub_08056208();
|
||||
sub_080503A8(0x5);
|
||||
LoadPaletteGroup(0x9);
|
||||
for (i = 0; i < 26; i++) {
|
||||
CreateObject(0x48, i, 0);
|
||||
}
|
||||
|
||||
sub_080A70AC(gUnk_080FC8D0);
|
||||
sub_080507FC();
|
||||
gScreen.lcd.displayControl |= 0x1F00;
|
||||
gScreen.affine.bg3Control = 0x1E0B;
|
||||
gScreen.controls.layerFXControl = 0x844;
|
||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10);
|
||||
gUnk_02024490.unk0 = 1;
|
||||
gUnk_03001000.funcIndex = 1;
|
||||
PlaySFX(0x7);
|
||||
DoFade(4, 8);
|
||||
}
|
||||
|
||||
void nullsub_479(void) {
|
||||
}
|
||||
|
||||
void sub_0805060C(void) {
|
||||
if (!gFadeControl.active) {
|
||||
InitScreen(SCREEN_GAMEPLAY);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_08050624(u32 saveFileId) {
|
||||
SaveFile* saveFile = &gSaveFiles[saveFileId];
|
||||
int var0 = sub_0807CF28(saveFileId, saveFile);
|
||||
switch (var0) {
|
||||
case -1:
|
||||
sub_0807CF48(saveFileId);
|
||||
// fallthrough
|
||||
case 0:
|
||||
sub_0805194C(saveFileId);
|
||||
break;
|
||||
}
|
||||
gUnk_02019EE0.unk8[saveFileId] = var0;
|
||||
}
|
||||
|
||||
static void sub_0805066C(void) {
|
||||
u32 loadNewPalette;
|
||||
const u8* paletteOffset;
|
||||
|
||||
loadNewPalette = FALSE;
|
||||
if (--gUnk_02019EE0.unk1 == 0) {
|
||||
gUnk_02019EE0.unk1 = 16;
|
||||
gUnk_02019EE0.unk2 = (gUnk_02019EE0.unk2 + 1) % 15;
|
||||
loadNewPalette = TRUE;
|
||||
}
|
||||
|
||||
if (gUnk_02019EE0.unk2 == 0) {
|
||||
gUnk_02019EE0.unk2 = 1;
|
||||
gUnk_02019EE0.unk1 = (Random() & 0x7) * 16 + 8;
|
||||
loadNewPalette = TRUE;
|
||||
}
|
||||
|
||||
if (loadNewPalette) {
|
||||
paletteOffset = &gGlobalGfxAndPalettes[gUnk_080FC8DE[gUnk_02019EE0.unk2]];
|
||||
LoadPalettes(&paletteOffset[0x11AA0], 11, 1);
|
||||
LoadPalettes(&paletteOffset[0x11BA0], 12, 1);
|
||||
LoadPalettes(&paletteOffset[0x11CA0], 13, 1);
|
||||
LoadPalettes(&paletteOffset[0x11DA0], 14, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0805070C(void) {
|
||||
u32 i;
|
||||
int j;
|
||||
struct_02036540* var0;
|
||||
u8* playerName;
|
||||
|
||||
var0 = sub_0805F2C8();
|
||||
if (var0) {
|
||||
var0->unk2 = 0;
|
||||
var0->unk3 = 5;
|
||||
var0->unk1 = 1;
|
||||
var0->unk4 = 0x30;
|
||||
var0->unk8 = gUnk_02000D00;
|
||||
for (i = 0; i < 3; i++) {
|
||||
var0->unk6 = 0;
|
||||
_DmaZero(var0->unk8, 0x200);
|
||||
playerName = gSaveFiles[i].playerName;
|
||||
for (j = 0; j < 6; j++) {
|
||||
sub_0805F7DC(playerName[j], var0);
|
||||
}
|
||||
_DmaCopy(var0->unk8, (void*)(OBJ_VRAM0 + 0x4000 + i * 0x200), 0x200);
|
||||
}
|
||||
sub_0805F300(var0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050790(void) {
|
||||
u32 i, j;
|
||||
struct_02036540* var0;
|
||||
u32 var1;
|
||||
|
||||
var0 = sub_0805F2C8();
|
||||
if (var0) {
|
||||
var0->unk2 = 0;
|
||||
var0->unk3 = 5;
|
||||
var0->unk1 = 1;
|
||||
var0->unk4 = 0x80;
|
||||
var0->unk8 = gUnk_02000D00;
|
||||
for (i = 0; i < 16; i++) {
|
||||
var0->unk6 = 0;
|
||||
var1 = i * 16;
|
||||
for (j = 0; j < 16; j++) {
|
||||
sub_0805F7DC(var1, var0);
|
||||
var1++;
|
||||
}
|
||||
_DmaCopy(gUnk_02000D00, (void*)(BG_VRAM + i * 0x400), 0x400);
|
||||
}
|
||||
sub_0805F300(var0);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080507FC(void) {
|
||||
gUnk_0200AF00.unk1A = 0x140;
|
||||
gUnk_0200AF00.unk20 = 0x24;
|
||||
}
|
||||
|
||||
void sub_08050810(void) {
|
||||
gUnk_0200AF00.unk1A = 0xD0;
|
||||
gUnk_0200AF00.unk20 = 0x24;
|
||||
}
|
||||
|
||||
void sub_08050820(void) {
|
||||
gUnk_080FC8FC[gChooseFileState.state]();
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
}
|
||||
|
||||
void sub_08050848(void) {
|
||||
sub_080503A8(0x7);
|
||||
sub_0805070C();
|
||||
gUnk_02019EE0.unk7 = 0;
|
||||
sub_08050AFC(gUnk_02019EE0.unk6);
|
||||
sub_080A7114(1);
|
||||
}
|
||||
|
||||
void sub_0805086C(void) {
|
||||
gUnk_080FC908[gChooseFileState.subState]();
|
||||
}
|
||||
|
||||
void sub_08050888(void) {
|
||||
if (!gFadeControl.active) {
|
||||
switch (gUnk_02019EE0.unk8[gUnk_02019EE0.unk7]) {
|
||||
case 0:
|
||||
sub_0805194C(gUnk_02019EE0.unk7);
|
||||
gChooseFileState.subState = 2;
|
||||
break;
|
||||
case 1:
|
||||
gChooseFileState.subState = 2;
|
||||
break;
|
||||
default:
|
||||
sub_0805194C(gUnk_02019EE0.unk7);
|
||||
sub_08050318(0, gUnk_02019EE0.unk7 + 1);
|
||||
gChooseFileState.timer = 30;
|
||||
gChooseFileState.subState = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080508E4(void) {
|
||||
if (gChooseFileState.timer == 0) {
|
||||
if (gUnk_03000FF0.newKeys & (A_BUTTON | START_BUTTON)) {
|
||||
gChooseFileState.subState = 2;
|
||||
}
|
||||
} else {
|
||||
gChooseFileState.timer--;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050910(void) {
|
||||
sub_08050384();
|
||||
if (++gUnk_02019EE0.unk7 > 2) {
|
||||
sub_080A7114(2);
|
||||
} else {
|
||||
gChooseFileState.subState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050940(void) {
|
||||
int saveFileId;
|
||||
u32 newKeys;
|
||||
int var1;
|
||||
u32 var2;
|
||||
|
||||
if (gUnk_02019EE0.unk0) {
|
||||
return;
|
||||
}
|
||||
|
||||
saveFileId = gUnk_02019EE0.unk6;
|
||||
newKeys = gUnk_03000FF0.newKeys;
|
||||
if ((gUnk_03000FF0.heldKeys & L_BUTTON) && gUnk_02019EE0.unk8[saveFileId] == 1) {
|
||||
newKeys &= ~(DPAD_UP | DPAD_DOWN);
|
||||
}
|
||||
|
||||
var1 = ((struct_02000000*)0x2000000)->gameLanguage > 1 ? 4 : 3;
|
||||
var2 = gUnk_02032EC0.transitionType;
|
||||
switch (newKeys) {
|
||||
case DPAD_UP:
|
||||
if (saveFileId > 0) {
|
||||
saveFileId--;
|
||||
}
|
||||
break;
|
||||
case DPAD_DOWN:
|
||||
if (var1 - 1 > saveFileId) {
|
||||
saveFileId++;
|
||||
}
|
||||
break;
|
||||
case R_BUTTON:
|
||||
if (gUnk_02019EE0.unk8[saveFileId] == 1) {
|
||||
var2 = 3;
|
||||
}
|
||||
break;
|
||||
case A_BUTTON:
|
||||
case START_BUTTON:
|
||||
sub_0805041C(saveFileId);
|
||||
if (saveFileId == 3) {
|
||||
var2 = 2;
|
||||
} else {
|
||||
switch (gUnk_02019EE0.unk8[saveFileId]) {
|
||||
case 0:
|
||||
var2 = 1;
|
||||
break;
|
||||
case 1:
|
||||
var2 = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (gUnk_02032EC0.transitionType != var2) {
|
||||
sub_080503BC(var2);
|
||||
PlaySFX(0x6A);
|
||||
}
|
||||
|
||||
saveFileId = (saveFileId + var1) % var1;
|
||||
if (gUnk_02019EE0.unk6 != saveFileId) {
|
||||
gUnk_02019EE0.unk6 = saveFileId;
|
||||
sub_08050AFC(saveFileId);
|
||||
PlaySFX(0x69);
|
||||
}
|
||||
|
||||
if (gUnk_02019EE0.unk8[gUnk_02019EE0.unk6] == 1) {
|
||||
sub_08050810();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050A64(u32 saveFileId) {
|
||||
if (gUnk_02019EE0.unk8[saveFileId] != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
gUnk_03001010[2] = 0;
|
||||
gUnk_03001010[3] = 0;
|
||||
gUnk_03001010[4] = 0x400;
|
||||
|
||||
// Draw the save file's obtained elements.
|
||||
if (GetInventoryValue(0x40)) {
|
||||
gUnk_03001010[0] = 0xA2;
|
||||
gUnk_03001010[1] = 0x36;
|
||||
sub_080ADA14(0x145, 0x24);
|
||||
}
|
||||
if (GetInventoryValue(0x41)) {
|
||||
gUnk_03001010[0] = 0x96;
|
||||
gUnk_03001010[1] = 0x3D;
|
||||
sub_080ADA14(0x145, 0x22);
|
||||
}
|
||||
if (GetInventoryValue(0x42)) {
|
||||
gUnk_03001010[0] = 0xAE;
|
||||
gUnk_03001010[1] = 0x3D;
|
||||
sub_080ADA14(0x145, 0x23);
|
||||
}
|
||||
if (GetInventoryValue(0x43)) {
|
||||
gUnk_03001010[0] = 0xA2;
|
||||
gUnk_03001010[1] = 0x44;
|
||||
sub_080ADA14(0x145, 0x21);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050B3C(u16*);
|
||||
|
||||
void sub_08050AFC(u32 saveFileId) {
|
||||
sub_0805041C(saveFileId);
|
||||
_DmaZero(&gBG1Buffer, sizeof(gBG1Buffer));
|
||||
if (gUnk_02019EE0.unk8[saveFileId] == 1) {
|
||||
sub_08050B3C(&gBG1Buffer.unk29C);
|
||||
}
|
||||
gScreen.bg.bg2yOffset = 1;
|
||||
}
|
||||
|
||||
// typedef struct {
|
||||
// u16* unk0;
|
||||
// u32 unk4;
|
||||
// } unk_08050B3C;
|
||||
|
||||
// extern const u16 gUnk_080FC914[];
|
||||
|
||||
// void sub_08050B3C(u16* arg0) {
|
||||
// unk_08050B3C sp;
|
||||
// int var0;
|
||||
// int var1;
|
||||
// int var2;
|
||||
// int var3;
|
||||
// int var4;
|
||||
// int var5;
|
||||
// int var6;
|
||||
// int var7;
|
||||
// u16* var8;
|
||||
|
||||
// sp.unk0 = arg0;
|
||||
// var0 = gUnk_02002A40.stats.health * 2;
|
||||
// if (var0 == 0) {
|
||||
// var0 = 1;
|
||||
// }
|
||||
|
||||
// var1 = gUnk_02002A40.stats.maxHealth * 2;
|
||||
// if (var1 == 0) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// if (var0 > var1) {
|
||||
// var0 = var1;
|
||||
// }
|
||||
|
||||
// sp.unk4 = var0 & 0x3;
|
||||
// var2 = var0 >> 2;
|
||||
// var5 = var2;
|
||||
// if (var2 > 10) {
|
||||
// var5 = 10;
|
||||
// }
|
||||
|
||||
// var6 = var2;
|
||||
// var6 -= 10;
|
||||
// var7 = var6;
|
||||
// if (var6 < 0) {
|
||||
// var7 = 0;
|
||||
// }
|
||||
|
||||
// var1 = var1 >> 2;
|
||||
// var4 = var1;
|
||||
// if (var1 > 10) {
|
||||
// var1 = 10;
|
||||
// }
|
||||
|
||||
// var4 -= 10;
|
||||
// sp.unk0[0] = 0xF24C;
|
||||
// DmaCopy16(3, &gUnk_080FC914[10 - var5], &sp.unk0[1], var1 * 2);
|
||||
// if (var4 > 0) {
|
||||
// sp.unk0[0x20] = 0xF24C;
|
||||
// DmaCopy16(3, &gUnk_080FC914[10 - var7], &sp.unk0[1], var4 * 2);
|
||||
// }
|
||||
|
||||
// if (!sp.unk4) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// var8 = sp.unk0;
|
||||
// if (var2 >= 10) {
|
||||
// var2 = var6;
|
||||
// var8 += 0x20;
|
||||
// }
|
||||
|
||||
// var8[var2 + 1] = sp.unk4 - 0xDB3;
|
||||
// }
|
|
@ -47,7 +47,7 @@ void sub_0804AAD4(void) {
|
|||
void sub_0804AB04(void) {
|
||||
sub_0805E5C0();
|
||||
if (gArea.field_0x10 != 0) {
|
||||
sub_080AD90C();
|
||||
FlushSprites();
|
||||
sub_080AD9B0();
|
||||
sub_080AD918();
|
||||
}
|
||||
|
|
|
@ -39,7 +39,6 @@ void sub_08080910(void) {
|
|||
void sub_0808091C(ScreenTransitionData* param_1, u32 param_2) {
|
||||
DoExitTransition(param_1);
|
||||
gScreenTransition.transitionType = param_2;
|
||||
return;
|
||||
}
|
||||
|
||||
void sub_08080930(void)
|
||||
|
@ -50,7 +49,6 @@ void sub_08080930(void)
|
|||
gRoomControls.unk2 = 2;
|
||||
gRoomControls.filler[0] = 0;
|
||||
sub_0805E5A8();
|
||||
return;
|
||||
}
|
||||
|
||||
u32* GetLayerByIndex(u32 param_1) {
|
||||
|
@ -65,7 +63,6 @@ u32* GetLayerByIndex(u32 param_1) {
|
|||
void sub_08080964(u32 time, u32 magnitude) {
|
||||
gRoomControls.screenShakeTime = time;
|
||||
gRoomControls.screenShakeMagnitude = magnitude & 7;
|
||||
return;
|
||||
}
|
||||
|
||||
void sub_08080974(u32 arg0, u32 arg1) {
|
||||
|
|
|
@ -0,0 +1,680 @@
|
|||
#include "fileScreen.h"
|
||||
|
||||
// copy, erase, start
|
||||
#define NUM_FILE_OPERATIONS 3
|
||||
|
||||
// todo: does this belong with gUnk_02019EE0?
|
||||
typedef enum {
|
||||
SAVE_EMPTY = 0,
|
||||
SAVE_VALID = 1,
|
||||
SAVE_DELETED = 0xFFFFFFFF,
|
||||
} SaveStatus;
|
||||
|
||||
typedef enum {
|
||||
STATE_NONE,
|
||||
STATE_NEW,
|
||||
STATE_CHOOSE_LANG,
|
||||
STATE_OPTIONS,
|
||||
STATE_VIEW,
|
||||
STATE_COPY,
|
||||
STATE_ERASE,
|
||||
STATE_START,
|
||||
} FileSelectState;
|
||||
|
||||
static void HandleFileScreenEnter(void);
|
||||
static void HandleFileScreenActive(void);
|
||||
static void HandleFileScreenExit(void);
|
||||
|
||||
static void (*const sScreenHandlers[])(void) = {
|
||||
HandleFileScreenEnter,
|
||||
HandleFileScreenActive,
|
||||
HandleFileScreenExit,
|
||||
};
|
||||
|
||||
static void HandleFileSelect(void);
|
||||
extern void HandleFileNew(void);
|
||||
static void HandleFileLanguageSelect(void);
|
||||
extern void HandleFileOptions(void);
|
||||
static void HandleFileView(void);
|
||||
extern void HandleFileCopy(void);
|
||||
extern void HandleFileDelete(void);
|
||||
extern void HandleFileStart(void);
|
||||
|
||||
static void (*const sFileScreenSubHandlers[])(void) = {
|
||||
HandleFileSelect, HandleFileNew, HandleFileLanguageSelect, HandleFileOptions,
|
||||
HandleFileView, HandleFileCopy, HandleFileDelete, HandleFileStart,
|
||||
};
|
||||
|
||||
extern KeyButtonLayout gUnk_080FC8D0;
|
||||
// static const KeyButtonLayout gUnk_080FC8D0 = {
|
||||
// 0xFF, 0xD8, 0x0, 0xFF, 0xD8, 0x0, 0xE0, 0x10, 0xF, {{0x5, 0x0}, { 0x2, 0x0 }}, 0xFF
|
||||
// };
|
||||
|
||||
// main "file selection" screen
|
||||
extern void (*const sFileSelectDefaultHandlers[])(void);
|
||||
|
||||
// handles submenus
|
||||
extern void (*const sFileScreenSubHandlers[])(void);
|
||||
|
||||
extern void (*const gUnk_080FC944[])(void);
|
||||
|
||||
static void sub_08050624(u32);
|
||||
static void sub_0805066C(void);
|
||||
static void HideButtonR(void);
|
||||
static void ShowButtonR(void);
|
||||
|
||||
void sub_08050318(u32 arg0, u32 arg1) {
|
||||
u32 sfx;
|
||||
struct_080FC844 var0;
|
||||
|
||||
sub_08050384();
|
||||
_DmaCopy(&gUnk_080FC844, &var0, sizeof(gUnk_080FC844));
|
||||
sub_08056FEC(arg1, &gUnk_020227E8);
|
||||
var0.unk10 |= gUnk_080FC85C[arg0][0] << 0xC;
|
||||
sub_0805F46C(gUnk_080FC85C[arg0][1], &var0);
|
||||
sfx = gUnk_080FC85C[arg0][2];
|
||||
if (sfx) {
|
||||
PlaySFX(sfx);
|
||||
}
|
||||
gScreen.bg.bg3Control = BGCNT_PRIORITY(1);
|
||||
}
|
||||
|
||||
void sub_08050384(void) {
|
||||
sub_0801C4A0(0, 0);
|
||||
_DmaZero(&gBG0Buffer, sizeof(gBG0Buffer));
|
||||
gScreen.bg.bg3Control = BGCNT_PRIORITY(1);
|
||||
}
|
||||
|
||||
void sub_080503A8(u32 gfxGroup) {
|
||||
LoadGfxGroup(gfxGroup);
|
||||
gScreen.bg.bg2yOffset = 1;
|
||||
gScreen.affine.unk = 1;
|
||||
}
|
||||
|
||||
void SetFileSelectState(FileSelectState mode) {
|
||||
gUnk_02032EC0.state = mode;
|
||||
_DmaZero(&gBG0Buffer, sizeof(gBG0Buffer));
|
||||
_DmaZero(&gBG1Buffer, sizeof(gBG1Buffer));
|
||||
}
|
||||
|
||||
void LoadOptionsFromSave(u32 idx) {
|
||||
u8 messageSpeed;
|
||||
u8 brightnessPref;
|
||||
|
||||
if (idx >= NUM_SAVE_SLOTS) {
|
||||
// these apply to the language selection screen
|
||||
messageSpeed = 1;
|
||||
brightnessPref = 1;
|
||||
} else {
|
||||
SaveFile* saveFile = &gSaveFiles[idx];
|
||||
messageSpeed = saveFile->messageSpeed;
|
||||
brightnessPref = saveFile->brightnessPref;
|
||||
}
|
||||
|
||||
gUnk_02000000->messageSpeed = messageSpeed;
|
||||
gUnk_02000000->brightnessPref = brightnessPref;
|
||||
gUsedPalettes = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
void SetActiveSave(u32 idx) {
|
||||
if (idx < NUM_SAVE_SLOTS) {
|
||||
gUnk_02000000->saveFileId = idx;
|
||||
_DmaCopy(&gSaveFiles[idx], &gUnk_02002A40, sizeof(gSaveFiles[idx]));
|
||||
}
|
||||
LoadOptionsFromSave(idx);
|
||||
}
|
||||
|
||||
void HandleChooseFileScreen(void) {
|
||||
FlushSprites();
|
||||
sScreenHandlers[gUnk_03001000.funcIndex]();
|
||||
if (gUnk_02032EC0.lastState != gUnk_02032EC0.state) {
|
||||
gUnk_02032EC0.lastState = gUnk_02032EC0.state;
|
||||
gScreen.bg.bg1Control = 0;
|
||||
gScreen.bg.bg2Control = 0;
|
||||
gScreen.bg.bg1yOffset = 0;
|
||||
gScreen.bg.bg2xOffset = 0;
|
||||
gScreen.affine.bg2xOffset = 0;
|
||||
gScreen.affine.bg2yOffset = 0;
|
||||
_DmaZero(&gChooseFileState, sizeof(gChooseFileState));
|
||||
}
|
||||
|
||||
HideButtonR();
|
||||
sFileScreenSubHandlers[gUnk_02032EC0.lastState]();
|
||||
|
||||
gUnk_02019EE0.isTransitioning = FALSE;
|
||||
sub_0805E5C0();
|
||||
sub_0805066C();
|
||||
sub_0801C1D4();
|
||||
sub_0801C208();
|
||||
sub_080AD9B0();
|
||||
sub_080AD918();
|
||||
if (gUnk_02019EE0.unk3 != gUnk_02000000->gameLanguage) {
|
||||
gUnk_02019EE0.unk3 = gUnk_02000000->gameLanguage;
|
||||
sub_080503A8(0x6);
|
||||
sub_080503A8(0xF);
|
||||
}
|
||||
}
|
||||
|
||||
static void HandleFileScreenEnter(void) {
|
||||
u32 i;
|
||||
|
||||
sub_0801DA90(1);
|
||||
sub_080A3210();
|
||||
_DmaZero((void*)VRAM, 0x80); // clear palettes
|
||||
sub_08056418();
|
||||
EraseAllEntities();
|
||||
sub_08080668();
|
||||
sub_080ADD30();
|
||||
sub_0801CFA8(0);
|
||||
_DmaZero(&gUnk_0200AF00, sizeof(gUnk_0200AF00));
|
||||
_DmaZero(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
|
||||
gUnk_02019EE0.unk3 = 7;
|
||||
gUnk_02019EE0.unk6 = gUnk_02000000->gameLanguage > LANGUAGE_EN ? 3 : 0;
|
||||
_DmaZero(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
|
||||
gUnk_02032EC0.lastState = 8;
|
||||
SetFileSelectState(STATE_NONE);
|
||||
InitDMA();
|
||||
sub_08050624(0);
|
||||
sub_08050624(1);
|
||||
sub_08050624(2);
|
||||
sub_08056208();
|
||||
sub_080503A8(0x5);
|
||||
LoadPaletteGroup(0x9);
|
||||
for (i = 0; i < 26; i++) {
|
||||
CreateObject(0x48, i, 0);
|
||||
}
|
||||
|
||||
sub_080A70AC(&gUnk_080FC8D0);
|
||||
HideButtonR();
|
||||
gScreen.lcd.displayControl |= DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
|
||||
gScreen.affine.bg3Control = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(30);
|
||||
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND;
|
||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10);
|
||||
gUnk_02024490.unk0 = 1;
|
||||
gUnk_03001000.funcIndex = 1;
|
||||
PlaySFX(0x7);
|
||||
DoFade(4, 8);
|
||||
}
|
||||
|
||||
static void HandleFileScreenActive(void) {
|
||||
}
|
||||
|
||||
static void HandleFileScreenExit(void) {
|
||||
if (!gFadeControl.active) {
|
||||
InitScreen(SCREEN_GAMEPLAY);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_08050624(u32 idx) {
|
||||
SaveFile* saveFile = &gSaveFiles[idx];
|
||||
int status = sub_0807CF28(idx, saveFile);
|
||||
switch (status) {
|
||||
case SAVE_DELETED:
|
||||
sub_0807CF48(idx);
|
||||
// fallthrough
|
||||
case SAVE_EMPTY:
|
||||
sub_0805194C(idx);
|
||||
break;
|
||||
}
|
||||
gUnk_02019EE0.saveStatus[idx] = status;
|
||||
}
|
||||
|
||||
static void sub_0805066C(void) {
|
||||
u32 loadNewPalette;
|
||||
const u8* paletteOffset;
|
||||
|
||||
loadNewPalette = FALSE;
|
||||
if (--gUnk_02019EE0.unk1 == 0) {
|
||||
gUnk_02019EE0.unk1 = 16;
|
||||
gUnk_02019EE0.unk2 = (gUnk_02019EE0.unk2 + 1) % 15;
|
||||
loadNewPalette = TRUE;
|
||||
}
|
||||
|
||||
if (gUnk_02019EE0.unk2 == 0) {
|
||||
gUnk_02019EE0.unk2 = 1;
|
||||
gUnk_02019EE0.unk1 = (Random() & 0x7) * 16 + 8;
|
||||
loadNewPalette = TRUE;
|
||||
}
|
||||
|
||||
if (loadNewPalette) {
|
||||
paletteOffset = &gGlobalGfxAndPalettes[gUnk_080FC8DE[gUnk_02019EE0.unk2]];
|
||||
LoadPalettes(&paletteOffset[0x11AA0], 11, 1);
|
||||
LoadPalettes(&paletteOffset[0x11BA0], 12, 1);
|
||||
LoadPalettes(&paletteOffset[0x11CA0], 13, 1);
|
||||
LoadPalettes(&paletteOffset[0x11DA0], 14, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0805070C(void) {
|
||||
u32 i;
|
||||
int j;
|
||||
struct_02036540* var0;
|
||||
u8* playerName;
|
||||
|
||||
var0 = sub_0805F2C8();
|
||||
if (var0) {
|
||||
var0->charColor = 0;
|
||||
var0->bgColor = 5;
|
||||
var0->unk1 = 1;
|
||||
var0->unk4 = 0x30;
|
||||
var0->unk8 = gUnk_02000D00;
|
||||
for (i = 0; i < 3; i++) {
|
||||
var0->unk6 = 0;
|
||||
_DmaZero(var0->unk8, 0x200);
|
||||
playerName = gSaveFiles[i].playerName;
|
||||
for (j = 0; j < 6; j++) {
|
||||
sub_0805F7DC(playerName[j], var0);
|
||||
}
|
||||
// i is a struct of size 0x200
|
||||
_DmaCopy(var0->unk8, (void*)(OBJ_VRAM0 + 0x4000 + i * 0x200), 0x200);
|
||||
}
|
||||
sub_0805F300(var0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050790(void) {
|
||||
u32 i, j;
|
||||
struct_02036540* var0;
|
||||
u32 var1;
|
||||
|
||||
var0 = sub_0805F2C8();
|
||||
if (var0) {
|
||||
var0->charColor = 0;
|
||||
var0->bgColor = 5;
|
||||
var0->unk1 = 1;
|
||||
var0->unk4 = 0x80;
|
||||
var0->unk8 = gUnk_02000D00;
|
||||
for (i = 0; i < 16; i++) {
|
||||
var0->unk6 = 0;
|
||||
var1 = i * 16;
|
||||
for (j = 0; j < 16; j++) {
|
||||
sub_0805F7DC(var1, var0);
|
||||
var1++;
|
||||
}
|
||||
_DmaCopy(gUnk_02000D00, (void*)(BG_VRAM + i * 0x400), 0x400);
|
||||
}
|
||||
sub_0805F300(var0);
|
||||
}
|
||||
}
|
||||
|
||||
static void HideButtonR(void) {
|
||||
gUnk_0200AF00.rButtonX = 0x140;
|
||||
gUnk_0200AF00.rButtonY = 0x24;
|
||||
}
|
||||
|
||||
static void ShowButtonR(void) {
|
||||
gUnk_0200AF00.rButtonX = 0xD0;
|
||||
gUnk_0200AF00.rButtonY = 0x24;
|
||||
}
|
||||
|
||||
static void HandleFileSelect(void) {
|
||||
sFileSelectDefaultHandlers[gChooseFileState.state]();
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
}
|
||||
|
||||
void sub_08050848(void) {
|
||||
sub_080503A8(0x7);
|
||||
sub_0805070C();
|
||||
gUnk_02019EE0.unk7 = 0;
|
||||
sub_08050AFC(gUnk_02019EE0.unk6);
|
||||
sub_080A7114(1);
|
||||
}
|
||||
|
||||
void sub_0805086C(void) {
|
||||
gUnk_080FC908[gChooseFileState.subState]();
|
||||
}
|
||||
|
||||
// transitioning away from submenu
|
||||
void sub_08050888(void) {
|
||||
if (!gFadeControl.active) {
|
||||
switch (gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk7]) {
|
||||
case SAVE_EMPTY:
|
||||
sub_0805194C(gUnk_02019EE0.unk7);
|
||||
gChooseFileState.subState = 2;
|
||||
break;
|
||||
case SAVE_VALID:
|
||||
gChooseFileState.subState = 2;
|
||||
break;
|
||||
default:
|
||||
sub_0805194C(gUnk_02019EE0.unk7);
|
||||
sub_08050318(0, gUnk_02019EE0.unk7 + 1);
|
||||
gChooseFileState.timer = 30;
|
||||
gChooseFileState.subState = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080508E4(void) {
|
||||
if (gChooseFileState.timer == 0) {
|
||||
if (gUnk_03000FF0.newKeys & (A_BUTTON | START_BUTTON)) {
|
||||
gChooseFileState.subState = 2;
|
||||
}
|
||||
} else {
|
||||
gChooseFileState.timer--;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050910(void) {
|
||||
sub_08050384();
|
||||
if (++gUnk_02019EE0.unk7 > 2) {
|
||||
sub_080A7114(2);
|
||||
} else {
|
||||
gChooseFileState.subState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050940(void) {
|
||||
int row_idx;
|
||||
u32 keys;
|
||||
int num_rows;
|
||||
FileSelectState mode;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning) {
|
||||
return;
|
||||
}
|
||||
|
||||
row_idx = gUnk_02019EE0.unk6;
|
||||
keys = gUnk_03000FF0.newKeys;
|
||||
if ((gUnk_03000FF0.heldKeys & L_BUTTON) && gUnk_02019EE0.saveStatus[row_idx] == SAVE_VALID) {
|
||||
keys &= ~(DPAD_UP | DPAD_DOWN);
|
||||
}
|
||||
|
||||
num_rows = gUnk_02000000->gameLanguage > GAME_LANGUAGE ? NUM_SAVE_SLOTS + 1 : NUM_SAVE_SLOTS;
|
||||
mode = gUnk_02032EC0.lastState;
|
||||
switch (keys) {
|
||||
case DPAD_UP:
|
||||
if (row_idx > 0)
|
||||
row_idx--;
|
||||
break;
|
||||
case DPAD_DOWN:
|
||||
if (num_rows - 1 > row_idx)
|
||||
row_idx++;
|
||||
break;
|
||||
case R_BUTTON:
|
||||
if (gUnk_02019EE0.saveStatus[row_idx] == SAVE_VALID)
|
||||
mode = STATE_OPTIONS;
|
||||
break;
|
||||
case A_BUTTON:
|
||||
case START_BUTTON:
|
||||
SetActiveSave(row_idx);
|
||||
if (row_idx == 3)
|
||||
mode = STATE_CHOOSE_LANG;
|
||||
else
|
||||
switch (gUnk_02019EE0.saveStatus[row_idx]) {
|
||||
case SAVE_EMPTY:
|
||||
mode = STATE_NEW;
|
||||
break;
|
||||
case SAVE_VALID:
|
||||
mode = STATE_VIEW;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (gUnk_02032EC0.lastState != mode) {
|
||||
SetFileSelectState(mode);
|
||||
PlaySFX(0x6A);
|
||||
}
|
||||
|
||||
row_idx = (row_idx + num_rows) % num_rows;
|
||||
if (gUnk_02019EE0.unk6 != row_idx) {
|
||||
gUnk_02019EE0.unk6 = row_idx;
|
||||
sub_08050AFC(row_idx);
|
||||
PlaySFX(0x69);
|
||||
}
|
||||
|
||||
if (gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] == SAVE_VALID) {
|
||||
ShowButtonR();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050A64(u32 idx) {
|
||||
if (gUnk_02019EE0.saveStatus[idx] != SAVE_VALID) {
|
||||
return;
|
||||
}
|
||||
|
||||
gUnk_03001010._4 = 0;
|
||||
gUnk_03001010._6 = 0;
|
||||
gUnk_03001010._8 = 0x400;
|
||||
|
||||
// Draw the save file's obtained elements.
|
||||
if (GetInventoryValue(0x40)) {
|
||||
gUnk_03001010.x = 0xA2;
|
||||
gUnk_03001010.y = 0x36;
|
||||
sub_080ADA14(0x145, 0x24);
|
||||
}
|
||||
if (GetInventoryValue(0x41)) {
|
||||
gUnk_03001010.x = 0x96;
|
||||
gUnk_03001010.y = 0x3D;
|
||||
sub_080ADA14(0x145, 0x22);
|
||||
}
|
||||
if (GetInventoryValue(0x42)) {
|
||||
gUnk_03001010.x = 0xAE;
|
||||
gUnk_03001010.y = 0x3D;
|
||||
sub_080ADA14(0x145, 0x23);
|
||||
}
|
||||
if (GetInventoryValue(0x43)) {
|
||||
gUnk_03001010.x = 0xA2;
|
||||
gUnk_03001010.y = 0x44;
|
||||
sub_080ADA14(0x145, 0x21);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050B3C(u16*);
|
||||
|
||||
void sub_08050AFC(u32 idx) {
|
||||
SetActiveSave(idx);
|
||||
_DmaZero(&gBG1Buffer, sizeof(gBG1Buffer));
|
||||
if (gUnk_02019EE0.saveStatus[idx] == SAVE_VALID) {
|
||||
sub_08050B3C(&gBG1Buffer.unk29C);
|
||||
}
|
||||
gScreen.bg.bg2yOffset = 1;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
u16* unk0;
|
||||
u32 unk4;
|
||||
} unk_08050B3C;
|
||||
|
||||
extern const u16 gUnk_080FC914[];
|
||||
|
||||
// Handles drawing of hearts
|
||||
NONMATCH("asm/non_matching/save/sub_08050B3C.inc", void sub_08050B3C(u16* arg0)) {
|
||||
unk_08050B3C sp;
|
||||
int var0;
|
||||
int var1;
|
||||
int var2;
|
||||
int var3;
|
||||
int var4;
|
||||
int var5;
|
||||
int var6;
|
||||
int var7;
|
||||
u16* var8;
|
||||
|
||||
sp.unk0 = arg0;
|
||||
var0 = gUnk_02002A40.stats.health / 2;
|
||||
if (var0 == 0) {
|
||||
var0 = 1;
|
||||
}
|
||||
|
||||
var1 = gUnk_02002A40.stats.maxHealth / 2;
|
||||
if (var1 == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (var0 > var1) {
|
||||
var0 = var1;
|
||||
}
|
||||
|
||||
sp.unk4 = var0 & 0x3;
|
||||
var2 = var0 * 2;
|
||||
var5 = var2;
|
||||
if (var2 > 10) {
|
||||
var5 = 10;
|
||||
}
|
||||
|
||||
var6 = var2;
|
||||
var6 -= 10;
|
||||
var7 = var6;
|
||||
if (var6 < 0) {
|
||||
var7 = 0;
|
||||
}
|
||||
|
||||
var1 = var1 >> 2;
|
||||
var4 = var1;
|
||||
if (var1 > 10) {
|
||||
var1 = 10;
|
||||
}
|
||||
|
||||
var4 -= 10;
|
||||
sp.unk0[0] = 0xF24C;
|
||||
DmaCopy16(3, &gUnk_080FC914[10 - var5], &sp.unk0[1], var1 * 2);
|
||||
if (var4 > 0) {
|
||||
sp.unk0[0x20] = 0xF24C;
|
||||
DmaCopy16(3, &gUnk_080FC914[10 - var7], &sp.unk0[1], var4 * 2);
|
||||
}
|
||||
|
||||
if (!sp.unk4) {
|
||||
return;
|
||||
}
|
||||
|
||||
var8 = sp.unk0;
|
||||
if (var2 >= 10) {
|
||||
var2 = var6;
|
||||
var8 += 0x20;
|
||||
}
|
||||
|
||||
var8[var2 + 1] = sp.unk4 - 0xDB3;
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void HandleFileView(void) {
|
||||
gUnk_080FC93C[gMenu.menuType]();
|
||||
sub_08050A64(gUnk_02019EE0.unk6);
|
||||
}
|
||||
|
||||
extern Input gUnk_03000FF0;
|
||||
|
||||
void sub_08050C54(void) {
|
||||
s32 column_idx;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning)
|
||||
return;
|
||||
|
||||
column_idx = gMenu.column_idx;
|
||||
switch (gUnk_03000FF0.newKeys) {
|
||||
case A_BUTTON:
|
||||
case START_BUTTON:
|
||||
if (column_idx == 0) {
|
||||
PlaySFX(0x80080000);
|
||||
}
|
||||
gMenu.transitionTimer = 0xf;
|
||||
sub_080A7114(1);
|
||||
PlaySFX(0x6a);
|
||||
break;
|
||||
case B_BUTTON:
|
||||
PlaySFX(0x6c);
|
||||
SetFileSelectState(STATE_NONE);
|
||||
break;
|
||||
case DPAD_LEFT:
|
||||
column_idx--;
|
||||
break;
|
||||
case DPAD_RIGHT:
|
||||
column_idx++;
|
||||
break;
|
||||
}
|
||||
if (column_idx < 0) {
|
||||
column_idx = 0;
|
||||
}
|
||||
if (column_idx >= NUM_FILE_OPERATIONS) {
|
||||
column_idx = NUM_FILE_OPERATIONS - 1;
|
||||
}
|
||||
if (gMenu.column_idx != column_idx) {
|
||||
gMenu.column_idx = column_idx;
|
||||
PlaySFX(0x69);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050D68(void) {
|
||||
u32 state;
|
||||
|
||||
if (gMenu.transitionTimer == 0) {
|
||||
switch (gMenu.column_idx) {
|
||||
default:
|
||||
case 0:
|
||||
state = STATE_START;
|
||||
break;
|
||||
case 1:
|
||||
state = STATE_COPY;
|
||||
break;
|
||||
case 2:
|
||||
state = STATE_ERASE;
|
||||
break;
|
||||
}
|
||||
SetFileSelectState(state);
|
||||
} else {
|
||||
gMenu.transitionTimer--;
|
||||
}
|
||||
}
|
||||
|
||||
void HandleFileLanguageSelect(void) {
|
||||
gUnk_080FC944[gMenu.menuType]();
|
||||
}
|
||||
|
||||
void sub_08050DB8(void) {
|
||||
_DmaZero(&gBG2Buffer, sizeof(gBG2Buffer));
|
||||
sub_080503A8(0xc);
|
||||
gMenu.field_0x4 = gUnk_02000000->gameLanguage;
|
||||
sub_080A7114(1);
|
||||
}
|
||||
|
||||
void sub_08050DE4(void) {
|
||||
s32 row_idx;
|
||||
|
||||
if (gUnk_02019EE0.isTransitioning)
|
||||
return;
|
||||
|
||||
row_idx = gUnk_02000000->gameLanguage;
|
||||
switch (gUnk_03000FF0.newKeys) {
|
||||
case DPAD_UP:
|
||||
row_idx--;
|
||||
break;
|
||||
case DPAD_DOWN:
|
||||
row_idx++;
|
||||
break;
|
||||
case A_BUTTON:
|
||||
case START_BUTTON:
|
||||
PlaySFX(0x6a);
|
||||
if (gMenu.field_0x4 != row_idx) {
|
||||
sub_080A7114(2);
|
||||
sub_08050318(8, 0);
|
||||
} else {
|
||||
SetFileSelectState(STATE_NONE);
|
||||
}
|
||||
break;
|
||||
case B_BUTTON:
|
||||
row_idx = gMenu.field_0x4;
|
||||
gUnk_02000000->gameLanguage = gMenu.field_0x4;
|
||||
PlaySFX(0x6c);
|
||||
SetFileSelectState(STATE_NONE);
|
||||
break;
|
||||
}
|
||||
|
||||
// Lazy solution for positioning the rows lower on the screen
|
||||
if (row_idx < 2) {
|
||||
row_idx = 2;
|
||||
}
|
||||
if (row_idx > 6) {
|
||||
row_idx = 6;
|
||||
}
|
||||
if (gUnk_02000000->gameLanguage != row_idx) {
|
||||
gUnk_02000000->gameLanguage = row_idx;
|
||||
PlaySFX(0x69);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08050E88(void) {
|
||||
if (sub_0807CDA4(SAVE_DONE))
|
||||
SetFileSelectState(0);
|
||||
}
|
54
src/intro.c
54
src/intro.c
|
@ -53,22 +53,22 @@ static const u16 sLightRaysAlphaBlends[] = {
|
|||
};
|
||||
|
||||
static u32 AdvanceIntroSequence(u32 transition) {
|
||||
gUnk_02032EC0.transitionType = transition;
|
||||
gUnk_02032EC0.lastState = transition;
|
||||
gUnk_03001000.funcIndex = 2;
|
||||
_DmaZero(&gIntroState, sizeof(gIntroState));
|
||||
DoFade(7, 8);
|
||||
}
|
||||
|
||||
void HandleIntroScreen(void) {
|
||||
sub_080AD90C();
|
||||
FlushSprites();
|
||||
switch (gUnk_03001000.funcIndex) {
|
||||
case 0:
|
||||
sub_08056418();
|
||||
_DmaZero(&gUnk_02032EC0, 0x3b4);
|
||||
_DmaZero(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
|
||||
AdvanceIntroSequence(0);
|
||||
break;
|
||||
case 1:
|
||||
sIntroSequenceHandlers[gUnk_02032EC0.transitionType]();
|
||||
sIntroSequenceHandlers[gUnk_02032EC0.lastState]();
|
||||
break;
|
||||
case 2:
|
||||
if (gFadeControl.active) {
|
||||
|
@ -92,13 +92,13 @@ static void HandleNintendoCapcomLogos(void) {
|
|||
gIntroState.timer = 120;
|
||||
LoadGfxGroup(16);
|
||||
LoadGfxGroup(1);
|
||||
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
|
||||
if (gUnk_02000000->gameLanguage == 0) {
|
||||
paletteGroup = 1;
|
||||
} else {
|
||||
paletteGroup = 2;
|
||||
}
|
||||
LoadPaletteGroup(paletteGroup);
|
||||
gScreen.lcd.displayControl |= 0x400;
|
||||
gScreen.lcd.displayControl |= DISPCNT_BG2_ON;
|
||||
gScreen.bg.bg2yOffset = 1;
|
||||
DoFade(6, 8);
|
||||
advance = ADVANCE_NONE;
|
||||
|
@ -132,28 +132,30 @@ static void HandleTitlescreen(void) {
|
|||
sub_080ADD30();
|
||||
gUnk_02024490.unk0 = 1;
|
||||
LoadGfxGroup(2);
|
||||
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
|
||||
if (gUnk_02000000->gameLanguage == 0) {
|
||||
paletteGroup = 3;
|
||||
} else {
|
||||
paletteGroup = 4;
|
||||
}
|
||||
LoadPaletteGroup(paletteGroup);
|
||||
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
|
||||
gScreen.controls.layerFXControl = 0x844;
|
||||
if (gUnk_02000000->gameLanguage == 0) {
|
||||
// Blend first and second layer
|
||||
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND;
|
||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(9, 9);
|
||||
gScreen.bg.bg1xOffset = 0x1c09;
|
||||
gScreen.affine.bg2Control = 0x1d02;
|
||||
gScreen.affine.bg3Control = 0x1e03;
|
||||
gScreen.lcd.displayControl |= 0x1e00;
|
||||
gScreen.affine.bg2Control = BGCNT_SCREENBASE(29) | BGCNT_PRIORITY(2);
|
||||
gScreen.affine.bg3Control = BGCNT_SCREENBASE(30) | BGCNT_PRIORITY(3);
|
||||
gScreen.lcd.displayControl |= DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
|
||||
gScreen.bg.bg2xOffset = 0xff60;
|
||||
} else {
|
||||
gScreen.controls.layerFXControl = 0x241;
|
||||
gScreen.controls.layerFXControl = BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND;
|
||||
gScreen.controls.alphaBlend = BLDALPHA_BLEND(9, 9);
|
||||
gScreen.bg.bg0Control = 0x1d02;
|
||||
gScreen.bg.bg0Control = BGCNT_SCREENBASE(29) | BGCNT_PRIORITY(2);
|
||||
gScreen.bg.bg1xOffset = 0x1E03;
|
||||
gScreen.affine.bg2Control = 0x7C89;
|
||||
gScreen.lcd.displayControl |= 1;
|
||||
gScreen.lcd.displayControl |= 0x1300;
|
||||
gScreen.affine.bg2Control = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(2) | BGCNT_256COLOR |
|
||||
BGCNT_SCREENBASE(28) | BGCNT_WRAP | BGCNT_TXT512x256;
|
||||
gScreen.lcd.displayControl |= DISPCNT_MODE_1;
|
||||
gScreen.lcd.displayControl |= DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
|
||||
gIntroState.swordBgScaleRatio = 0x10;
|
||||
UpdateSwordBgAffineData();
|
||||
}
|
||||
|
@ -165,7 +167,7 @@ static void HandleTitlescreen(void) {
|
|||
if (gFadeControl.active) {
|
||||
return;
|
||||
}
|
||||
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
|
||||
if (gUnk_02000000->gameLanguage == 0) {
|
||||
HandleJapaneseTitlescreenAnimationIntro();
|
||||
} else {
|
||||
HandleTitlescreenAnimationIntro();
|
||||
|
@ -196,8 +198,8 @@ static void HandleTitlescreen(void) {
|
|||
sub_080ADA14(0x1ff, 0);
|
||||
}
|
||||
}
|
||||
if (gIntroState.gameLanguage != ((struct_02000000*)0x2000000)->gameLanguage) {
|
||||
gIntroState.gameLanguage = ((struct_02000000*)0x2000000)->gameLanguage;
|
||||
if (gIntroState.gameLanguage != gUnk_02000000->gameLanguage) {
|
||||
gIntroState.gameLanguage = gUnk_02000000->gameLanguage;
|
||||
LoadGfxGroup(3);
|
||||
}
|
||||
UpdateLightRays();
|
||||
|
@ -219,8 +221,8 @@ static void UpdateSwordBgAffineData(void) {
|
|||
struct BgAffineSrcData aff;
|
||||
aff.texY = 0x8000;
|
||||
aff.texX = 0x8000;
|
||||
aff.scrX = 0x78;
|
||||
aff.scrY = 0x48;
|
||||
aff.scrX = DISPLAY_WIDTH / 2;
|
||||
aff.scrY = DISPLAY_HEIGHT / 2 - 8;
|
||||
aff.alpha = 0;
|
||||
aff.sy = aff.sx = gIntroState.swordBgScaleRatio;
|
||||
BgAffineSet(&aff, (struct BgAffineDstData*)&gBgControls, 1);
|
||||
|
@ -254,7 +256,7 @@ static void HandleJapaneseTitlescreenAnimationIntro(void) {
|
|||
pEVar2 = CreateObject(0xb4, 0, 0);
|
||||
if (pEVar2 != NULL) {
|
||||
pEVar2->x.HALF.HI = 0;
|
||||
pEVar2->y.HALF.HI = 0x48;
|
||||
pEVar2->y.HALF.HI = DISPLAY_HEIGHT / 2 - 8;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -271,7 +273,7 @@ static void HandleTitlescreenAnimationIntro(void) {
|
|||
case 0:
|
||||
if (!gFadeControl.active) {
|
||||
gIntroState.subState = 1;
|
||||
gScreen.lcd.displayControl |= 0x400;
|
||||
gScreen.lcd.displayControl |= DISPCNT_BG2_ON;
|
||||
PlaySFX(0xF6);
|
||||
}
|
||||
break;
|
||||
|
@ -334,14 +336,14 @@ static u32 GetAdvanceState(void) {
|
|||
}
|
||||
|
||||
static void UpdateLightRays(void) {
|
||||
// Periodically rotate the palette to give a shimmeriming effect.
|
||||
// Periodically rotate the palette to give a shimmering effect.
|
||||
if ((gIntroState.counter & 0x7) == 0) {
|
||||
gIntroState.lightRaysPaletteGroup++;
|
||||
gIntroState.lightRaysPaletteGroup &= 0x3;
|
||||
LoadPaletteGroup(5 + gIntroState.lightRaysPaletteGroup);
|
||||
}
|
||||
|
||||
// Periodiccally update the transparency of the light rays.
|
||||
// Periodically update the transparency of the light rays.
|
||||
if ((gIntroState.counter & 0x1F) == 0) {
|
||||
gIntroState.lightRaysAlphaBlendIndex = (gIntroState.lightRaysAlphaBlendIndex + 1) & 0x7;
|
||||
gScreen.controls.alphaBlend = sLightRaysAlphaBlends[gIntroState.lightRaysAlphaBlendIndex];
|
||||
|
|
24
src/main.c
24
src/main.c
|
@ -6,16 +6,12 @@
|
|||
#include "random.h"
|
||||
#include "readKeyInput.h"
|
||||
|
||||
extern u8 gUnk_03003DE4;
|
||||
|
||||
extern void sub_0804FF84(u32);
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern void VBlankInterruptWait(void);
|
||||
extern void DisableInterruptsAndDMA(void);
|
||||
extern void sub_08016B34(void);
|
||||
|
||||
static void sub_08055F70(void);
|
||||
static bool32 SoftResetKeysPressed(void);
|
||||
extern void HandleIntroScreen(void);
|
||||
extern void HandleChooseFileScreen(void);
|
||||
extern void HandleGameplayScreen(void);
|
||||
extern void HandleGameOverScreen(void);
|
||||
extern void HandleCreditsScreen(void);
|
||||
extern void HandleDebugTextScreen(void);
|
||||
|
||||
static void (*const sScreenHandlers[])(void) = {
|
||||
[SCREEN_INTRO] = HandleIntroScreen, [SCREEN_CHOOSE_FILE] = HandleChooseFileScreen,
|
||||
|
@ -27,8 +23,8 @@ void MainLoop(void) {
|
|||
int var0;
|
||||
|
||||
sub_08055F70();
|
||||
sub_080A3204();
|
||||
sub_0805616C();
|
||||
InitSound();
|
||||
InitDMA();
|
||||
sub_0807CE90();
|
||||
sub_080560B8();
|
||||
sub_08056208();
|
||||
|
@ -176,7 +172,7 @@ NONMATCH("asm/non_matching/sub_080560B8.inc", void sub_080560B8(void)) {
|
|||
END_NONMATCH
|
||||
|
||||
u32 sub_08056134(void) {
|
||||
if ((gUnk_02000000->signature != SIGNATURE) || (gUnk_02000000->saveFileId >= MAX_SAVE_FILES) ||
|
||||
if ((gUnk_02000000->signature != SIGNATURE) || (gUnk_02000000->saveFileId >= NUM_SAVE_SLOTS) ||
|
||||
(gUnk_02000000->messageSpeed >= MAX_MSG_SPEED) || (gUnk_02000000->brightnessPref >= MAX_BRIGHTNESS) ||
|
||||
(gUnk_02000000->gameLanguage != GAME_LANGUAGE) || (gUnk_02000000->_e != 0))
|
||||
return FALSE;
|
||||
|
@ -184,7 +180,7 @@ u32 sub_08056134(void) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_0805616C() {
|
||||
void InitDMA() {
|
||||
PlaySFX(0x80040000);
|
||||
gScreen._6d = gScreen._6c;
|
||||
gScreen._6c = 0;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "entity.h"
|
||||
#include "object.h"
|
||||
//clang-format off
|
||||
|
||||
void (*const gObjectFunctions[])(Entity*) = {
|
||||
/*0x00*/ ItemOnGround,
|
||||
/*0x01*/ DeathFx,
|
||||
|
@ -75,7 +76,7 @@ void (*const gObjectFunctions[])(Entity*) = {
|
|||
/*0x45*/ Object45,
|
||||
/*0x46*/ GiantBookLadder,
|
||||
/*0x47*/ HeartContainer,
|
||||
/*0x48*/ Object48,
|
||||
/*0x48*/ FileScreenObjects,
|
||||
/*0x49*/ Object49,
|
||||
/*0x4a*/ BackgroundCloud,
|
||||
/*0x4b*/ Object4B,
|
||||
|
|
|
@ -47,7 +47,7 @@ extern const u16 gUnk_08121D18[][8];
|
|||
extern const u8 gUnk_08121D48[];
|
||||
extern const struct_08121D54 gUnk_08121D54[];
|
||||
|
||||
void Object48(Entity* this) {
|
||||
void FileScreenObjects(Entity* this) {
|
||||
if (this->currentHealth == 0) {
|
||||
sub_0808EFF0(this);
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ void sub_0808E818(Entity* this) {
|
|||
LoadPalettes(&gGlobalGfxAndPalettes[var1], 31, 1);
|
||||
}
|
||||
|
||||
if (gUnk_02032EC0.transitionType == 0) {
|
||||
if (gUnk_02032EC0.lastState == 0) {
|
||||
if (gUnk_03000FF0.heldKeys & L_BUTTON) {
|
||||
switch (gUnk_03000FF0.newKeys) {
|
||||
case DPAD_UP:
|
||||
|
@ -126,13 +126,13 @@ void sub_0808E818(Entity* this) {
|
|||
|
||||
static bool32 sub_0808E950(void) {
|
||||
bool32 result = FALSE;
|
||||
switch (gUnk_02032EC0.transitionType) {
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
case 0:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
result = gUnk_02019EE0.unk8[gUnk_02019EE0.unk6] == 1;
|
||||
result = gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] == 1;
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
|
@ -179,7 +179,7 @@ void sub_0808EA28(Entity* this) {
|
|||
u32 var1;
|
||||
|
||||
if (this->entityType.form == 3) {
|
||||
if (((struct_02000000*)0x2000000)->gameLanguage > 1) {
|
||||
if (gUnk_02000000->gameLanguage > LANGUAGE_EN) {
|
||||
this->spriteSettings.b.draw = 2;
|
||||
} else {
|
||||
this->spriteSettings.b.draw = 0;
|
||||
|
@ -190,7 +190,7 @@ void sub_0808EA28(Entity* this) {
|
|||
var0 = 12;
|
||||
var1 = 1;
|
||||
} else {
|
||||
if (gUnk_02032EC0.transitionType == 5 && this->entityType.form == gUnk_02019EE0.unk7) {
|
||||
if (gUnk_02032EC0.lastState == 5 && this->entityType.form == gUnk_02019EE0.unk7) {
|
||||
var0 = 13;
|
||||
var1 = 2;
|
||||
} else {
|
||||
|
@ -202,14 +202,14 @@ void sub_0808EA28(Entity* this) {
|
|||
this->palette.b.b0 = var0;
|
||||
this->spriteRendering.b3 = var1;
|
||||
sub_0808EABC(this);
|
||||
gUnk_02019EE0.unk0 |= sub_0808EF6C(this);
|
||||
gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this);
|
||||
}
|
||||
|
||||
void sub_0808EABC(Entity* this) {
|
||||
int var0 = -72;
|
||||
int var1 = this->entityType.form * 32 + 40;
|
||||
int var2 = gUnk_02019EE0.unk6 == this->entityType.form;
|
||||
switch (gUnk_02032EC0.transitionType) {
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
case 0:
|
||||
var0 = 24;
|
||||
break;
|
||||
|
@ -272,15 +272,15 @@ void sub_0808EBB8(Entity* this) {
|
|||
u32 x, y;
|
||||
Entity* entity;
|
||||
|
||||
switch (gUnk_02032EC0.transitionType) {
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
case 4:
|
||||
var0 = gMenu.field_0x1 + 4;
|
||||
var0 = gMenu.column_idx + 4;
|
||||
break;
|
||||
case 5:
|
||||
var0 = 2;
|
||||
break;
|
||||
case 6:
|
||||
var0 = gMenu.field_0x1 == 0 ? 7 : 6;
|
||||
var0 = gMenu.column_idx == 0 ? 7 : 6;
|
||||
break;
|
||||
case 7:
|
||||
var0 = 4;
|
||||
|
@ -341,8 +341,8 @@ void sub_0808ECBC(Entity* this) {
|
|||
int var2;
|
||||
const struct_08121CD4* var3;
|
||||
|
||||
var0 = gMenu.field_0x1;
|
||||
switch (gUnk_02032EC0.transitionType) {
|
||||
var0 = gMenu.column_idx;
|
||||
switch (gUnk_02032EC0.lastState) {
|
||||
case 4:
|
||||
var1 = 1;
|
||||
break;
|
||||
|
@ -371,12 +371,12 @@ void sub_0808ECBC(Entity* this) {
|
|||
this->palette.b.b0 = 14;
|
||||
}
|
||||
|
||||
gUnk_02019EE0.unk0 |= sub_0808EF6C(this);
|
||||
gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this);
|
||||
}
|
||||
|
||||
void sub_0808ED64(Entity* this) {
|
||||
int y = 255;
|
||||
if (gUnk_02032EC0.transitionType == 1 && gMenu.focusCoords[1] != 5) {
|
||||
if (gUnk_02032EC0.lastState == 1 && gMenu.focusCoords[1] != 5) {
|
||||
this->x.HALF.HI = gMenu.focusCoords[0] * 16 + 28;
|
||||
y = gMenu.focusCoords[1] * 16 + 58;
|
||||
}
|
||||
|
@ -385,7 +385,7 @@ void sub_0808ED64(Entity* this) {
|
|||
|
||||
void sub_0808ED98(Entity* this) {
|
||||
int y;
|
||||
if (gUnk_02032EC0.transitionType != 1) {
|
||||
if (gUnk_02032EC0.lastState != 1) {
|
||||
this->field_0x68.HWORD = 27;
|
||||
y = -10;
|
||||
} else {
|
||||
|
@ -413,7 +413,7 @@ void sub_0808EE00(Entity* this) {
|
|||
this->x.HALF.HI = gUnk_08121D18[var0][var1];
|
||||
this->field_0x68.HWORD = gUnk_08121D18[var0][var1];
|
||||
var1 -= var0;
|
||||
if (gUnk_02032EC0.transitionType != 1) {
|
||||
if (gUnk_02032EC0.lastState != 1) {
|
||||
var1 = 128;
|
||||
var2 = 176;
|
||||
} else {
|
||||
|
@ -422,14 +422,14 @@ void sub_0808EE00(Entity* this) {
|
|||
|
||||
this->field_0x6a.HWORD = var2;
|
||||
this->palette.b.b0 = gMenu.focusCoords[1] == 5 && var1 == gMenu.field_0x12 ? 11 : 9;
|
||||
gUnk_02019EE0.unk0 |= sub_0808EF6C(this);
|
||||
gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this);
|
||||
}
|
||||
|
||||
void nullsub_522(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_0808EE98(Entity* this) {
|
||||
this->actionDelay = gUnk_02032EC0.transitionType;
|
||||
this->actionDelay = gUnk_02032EC0.lastState;
|
||||
this->frameIndex = gUnk_08121D48[this->actionDelay];
|
||||
if (this->actionDelay != 2) {
|
||||
this->field_0x68.HWORD = 96;
|
||||
|
@ -441,18 +441,18 @@ void sub_0808EE98(Entity* this) {
|
|||
|
||||
void sub_0808EED8(Entity* this) {
|
||||
int var0;
|
||||
if (gUnk_02032EC0.transitionType != 3) {
|
||||
if (gUnk_02032EC0.lastState != 3) {
|
||||
this->spriteSettings.b.draw = 0;
|
||||
} else {
|
||||
this->spriteSettings.b.draw = 2;
|
||||
var0 = this->entityType.form - 19;
|
||||
this->palette.b.b0 = gMenu.field_0x1 == var0 ? 4 : 3;
|
||||
this->palette.b.b0 = gMenu.column_idx == var0 ? 4 : 3;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0808EF24(Entity* this) {
|
||||
int var0;
|
||||
if (gUnk_02032EC0.transitionType != 3) {
|
||||
if (gUnk_02032EC0.lastState != 3) {
|
||||
this->spriteSettings.b.draw = 0;
|
||||
} else {
|
||||
this->spriteSettings.b.draw = 2;
|
||||
|
@ -515,7 +515,7 @@ static u32 sub_0808EF6C(Entity* this) {
|
|||
|
||||
static void sub_0808EFF0(Entity* this) {
|
||||
const struct_08121D54* var0;
|
||||
int var1;
|
||||
u8 var1;
|
||||
|
||||
this->spriteSettings.b.draw = 2;
|
||||
this->nonPlanarMovement = 0x400;
|
||||
|
@ -533,7 +533,7 @@ static void sub_0808EFF0(Entity* this) {
|
|||
this->field_0x6c.HWORD = var0->unk0;
|
||||
var1 = var0->unk7;
|
||||
if (var1 & 0x80) {
|
||||
var1 &= 0x7F;
|
||||
var1 &= ~(0x80);
|
||||
this->frameIndex = var1;
|
||||
this->lastFrameIndex = var1;
|
||||
} else {
|
|
@ -1,38 +1,52 @@
|
|||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "menu.h"
|
||||
#include "structures.h"
|
||||
#include "save.h"
|
||||
|
||||
extern void (*const gUnk_0811E478[])(u32);
|
||||
extern u32 sub_0807D008(u32, SaveFile*);
|
||||
|
||||
const u16 gUnk_0811E454[] = { 0x0, 0x0, 0x100, 0x200, 0x300, 0x400, 0x500,
|
||||
0x5C0, 0x680, 0x740, 0x800, 0x8C0, 0x9C0, 0xA80 };
|
||||
|
||||
const char gUnk_0811E470[6] = "LINK";
|
||||
|
||||
static SaveResult HandleSaveInit(u32);
|
||||
static SaveResult HandleSaveInProgress(u32);
|
||||
static SaveResult HandleSaveDone(u32);
|
||||
static SaveResult (*const sSaveHandlers[])(u32) = { HandleSaveInit, HandleSaveInProgress, HandleSaveDone };
|
||||
|
||||
static const char sSignatureLong[32] = "AGBZELDA:THE MINISH CAP:ZELDA 5";
|
||||
|
||||
// Save file is untouched
|
||||
static const char sSaveDescInit[8] = "\xFF\xFF\xFF\xFF"
|
||||
"INIT";
|
||||
// Save file is deleted
|
||||
static const char sSaveDescDeleted[8] = "\xFF\xFF\xFF\xFF"
|
||||
"DelF";
|
||||
|
||||
const char gUnk_0811E4B4[8] = "DAMEDAME";
|
||||
|
||||
extern s16 gUnk_02021EE0[6];
|
||||
extern char gUnk_0811E484[];
|
||||
extern char gUnk_0811E4AC[];
|
||||
extern char gUnk_0811E4A4[];
|
||||
|
||||
void sub_0807CD9C() {
|
||||
sub_080530C8();
|
||||
}
|
||||
|
||||
void sub_0807CDA4(u32 arg0) {
|
||||
gUnk_0811E478[gMenu.storyPanelIndex](arg0);
|
||||
SaveResult sub_0807CDA4(SaveState state) {
|
||||
return sSaveHandlers[gMenu.storyPanelIndex](state);
|
||||
}
|
||||
|
||||
u32 sub_0807CDC0(void) {
|
||||
SaveResult HandleSaveInit(u32 arg0) {
|
||||
gUnk_02021EE0[5] -= 8;
|
||||
if (gUnk_02021EE0[4] <= 0) {
|
||||
gMenu.field_0xa = 8;
|
||||
gMenu.storyPanelIndex = 1;
|
||||
}
|
||||
return 0;
|
||||
return SAVE_BUSY;
|
||||
}
|
||||
|
||||
u32 sub_0807CDE8(u32 arg0) {
|
||||
SaveResult HandleSaveInProgress(u32 arg0) {
|
||||
u32 temp;
|
||||
|
||||
if (gMenu.field_0xa == 0) {
|
||||
sub_0805616C();
|
||||
InitDMA();
|
||||
switch (arg0) {
|
||||
case 0:
|
||||
temp = sub_0807CF08(gUnk_02000000->saveFileId, gUnk_02002A40.filler0);
|
||||
|
@ -51,25 +65,25 @@ u32 sub_0807CDE8(u32 arg0) {
|
|||
} else {
|
||||
gMenu.field_0xa--;
|
||||
}
|
||||
return 0;
|
||||
return SAVE_BUSY;
|
||||
}
|
||||
|
||||
s32 sub_0807CE54(void) {
|
||||
u32 uVar1;
|
||||
SaveResult HandleSaveDone(u32 arg0) {
|
||||
SaveResult result;
|
||||
|
||||
uVar1 = 0;
|
||||
result = SAVE_BUSY;
|
||||
gUnk_02021EE0[5] += 8;
|
||||
if (gUnk_02021EE0[3] <= gUnk_02021EE0[5]) {
|
||||
gUnk_02021EE0[5] = gUnk_02021EE0[3];
|
||||
sub_08050384();
|
||||
gMenu.storyPanelIndex = 0;
|
||||
if (gMenu.field_0xa == 1) {
|
||||
uVar1 = 1;
|
||||
result = SAVE_OK;
|
||||
} else {
|
||||
uVar1 = -1;
|
||||
result = SAVE_ERROR;
|
||||
}
|
||||
}
|
||||
return uVar1;
|
||||
return result;
|
||||
}
|
||||
|
||||
u32 sub_0807CE90(void) {
|
||||
|
@ -80,10 +94,10 @@ u32 sub_0807CE90(void) {
|
|||
sub_080B1520(0x40);
|
||||
puVar1 = sub_0807D1C4(4);
|
||||
iVar3 = 0;
|
||||
if (sub_0807D24C(puVar1->field_0x6, gUnk_0811E484, puVar1->field_0x0) == 0) {
|
||||
if (sub_0807D24C(puVar1->field_0x6, sSignatureLong, puVar1->field_0x0) == 0) {
|
||||
iVar3 += 1;
|
||||
}
|
||||
if (sub_0807D24C(puVar1->field_0x8, gUnk_0811E484, puVar1->field_0x0) == 0) {
|
||||
if (sub_0807D24C(puVar1->field_0x8, sSignatureLong, puVar1->field_0x0) == 0) {
|
||||
iVar3 += 2;
|
||||
}
|
||||
if (iVar3 != 0) {
|
||||
|
@ -94,8 +108,8 @@ u32 sub_0807CE90(void) {
|
|||
sub_0807CF68(1);
|
||||
sub_0807CF68(0);
|
||||
}
|
||||
sub_0807D20C(puVar1->field_0x8, gUnk_0811E484, puVar1->field_0x0);
|
||||
sub_0807D20C(puVar1->field_0x6, gUnk_0811E484, puVar1->field_0x0);
|
||||
sub_0807D20C(puVar1->field_0x8, sSignatureLong, puVar1->field_0x0);
|
||||
sub_0807D20C(puVar1->field_0x6, sSignatureLong, puVar1->field_0x0);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -116,11 +130,11 @@ int sub_0807CF28(u32 arg0, SaveFile* arg1) {
|
|||
return sub_0807D008(arg0, arg1);
|
||||
}
|
||||
|
||||
u32 sub_0807CF30(void* arg0) {
|
||||
u32 sub_0807CF30(SaveFile* arg0) {
|
||||
return sub_0807D008(3, arg0);
|
||||
}
|
||||
|
||||
u32 sub_0807CF3C(void* arg0) {
|
||||
u32 sub_0807CF3C(SaveFile* arg0) {
|
||||
return sub_0807D008(5, arg0);
|
||||
}
|
||||
|
||||
|
@ -128,16 +142,16 @@ void sub_0807CF48(u32 arg0) {
|
|||
struct_0807D1C4* temp;
|
||||
|
||||
temp = sub_0807D1C4(arg0);
|
||||
sub_0807D184(temp->field_0x4, gUnk_0811E4AC);
|
||||
sub_0807D184(temp->field_0x2, gUnk_0811E4AC);
|
||||
sub_0807D184(temp->field_0x4, sSaveDescDeleted);
|
||||
sub_0807D184(temp->field_0x2, sSaveDescDeleted);
|
||||
}
|
||||
|
||||
void sub_0807CF68(u32 arg0) {
|
||||
struct_0807D1C4* temp;
|
||||
char* str;
|
||||
const char* str;
|
||||
|
||||
temp = sub_0807D1C4(arg0);
|
||||
str = gUnk_0811E4A4;
|
||||
str = sSaveDescInit;
|
||||
sub_0807D184(temp->field_0x4, str);
|
||||
sub_0807D184(temp->field_0x2, str);
|
||||
}
|
|
@ -8,7 +8,7 @@ extern void (*const gUnk_081280C4[])();
|
|||
|
||||
void DrawKinstoneMenu(void) {
|
||||
gScreenTransition.field_0x24[8] = 2;
|
||||
sub_080AD90C();
|
||||
FlushSprites();
|
||||
gUnk_081280C4[gMenu.menuType]();
|
||||
sub_080A3B74();
|
||||
sub_080A4054();
|
||||
|
@ -26,7 +26,7 @@ void sub_080A3BD0(void) {
|
|||
s32 iVar1;
|
||||
s32 iVar2;
|
||||
|
||||
gMenu.field_0x1 = 1;
|
||||
gMenu.column_idx = 1;
|
||||
gMenu.unk2a = 0;
|
||||
sub_080A4D34();
|
||||
LoadPaletteGroup(0xcb);
|
||||
|
|
|
@ -5,53 +5,34 @@
|
|||
#include "textbox.h"
|
||||
#include "structures.h"
|
||||
|
||||
void ShowTextbox();
|
||||
void TextboxAtPosition();
|
||||
u32 sub_080564DC(void);
|
||||
u32 sub_080564EC(void);
|
||||
u32 sub_08056654(void);
|
||||
u32 sub_080565B4(void);
|
||||
u32 sub_080565F8(void);
|
||||
u32 sub_08056640(void);
|
||||
|
||||
typedef struct {
|
||||
u8 _0;
|
||||
u8 _1;
|
||||
u8 _2;
|
||||
u8 _3[5];
|
||||
u16 _8;
|
||||
u8 _b[0x16];
|
||||
u8 _20;
|
||||
u8 _21;
|
||||
u8 _22[0xa];
|
||||
void* _2c;
|
||||
u8 _30[0x23];
|
||||
u8 _53;
|
||||
u16 _54;
|
||||
u8 _56[0x2];
|
||||
void* _58;
|
||||
u8 _5c;
|
||||
u8 _5d;
|
||||
u8 _5e[24];
|
||||
u8 _76;
|
||||
u8 _77[0x11];
|
||||
u8 _88;
|
||||
u8 _89;
|
||||
u8 _8a;
|
||||
u8 _8b[0xe];
|
||||
u8 _99;
|
||||
u8 _9a;
|
||||
u8 _9b;
|
||||
u8 _9c;
|
||||
u8 _9d;
|
||||
u8 _9e[0xa];
|
||||
} struct_02022780;
|
||||
extern struct_02022780 gUnk_02022780;
|
||||
static_assert(sizeof(struct_02022780) == 0xa8);
|
||||
u32 (*const gUnk_08107BC8[])(void) = { sub_080564DC, sub_080564EC, sub_08056654,
|
||||
sub_080565B4, sub_080565F8, sub_08056640 };
|
||||
|
||||
extern const s32 (*const gUnk_08107BC8[])();
|
||||
extern const void (*const gUnk_08107BF4[])(struct_02022780*);
|
||||
extern u8 gUnk_020227DC, gUnk_020227E8, gUnk_020227F0, gUnk_020227F8, gUnk_02022800;
|
||||
u8* const gUnk_08107BE0[] = { &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800 };
|
||||
|
||||
void sub_08056684(struct_02022780*);
|
||||
void sub_080566B8(struct_02022780*);
|
||||
void sub_08056BA0(struct_02022780*);
|
||||
void sub_08056B1C(struct_02022780*);
|
||||
void sub_08056B7C(struct_02022780*);
|
||||
void sub_080569D4(struct_02022780*);
|
||||
|
||||
void (*const gUnk_08107BF4[])(struct_02022780*) = { sub_08056684, sub_080566B8, sub_08056BA0,
|
||||
sub_08056B1C, sub_08056B7C, sub_080569D4 };
|
||||
|
||||
extern u32 gUnk_02036A40;
|
||||
extern u32 gUnk_02036A38;
|
||||
extern u8 gUnk_02024030;
|
||||
extern u8 gUnk_020227A0;
|
||||
extern u8 gUnk_02000D00;
|
||||
extern u8 gUnk_08107BE0;
|
||||
|
||||
s32 sub_08056338(void) {
|
||||
s32 result;
|
||||
|
@ -100,7 +81,7 @@ void TextboxAtPosition(u32 index, u32 x, u32 y) {
|
|||
gTextBox.textWindowPosY = y;
|
||||
}
|
||||
|
||||
void ShowTextbox(u32 index, u32 param_2, u32* dest) {
|
||||
void ShowTextbox(u32 index) {
|
||||
_DmaZero(&gTextBox, 32);
|
||||
gTextBox.textIndex = index;
|
||||
gTextBox.textSpeed = 99;
|
||||
|
@ -174,7 +155,8 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) {
|
|||
|
||||
for (i = 0; i < 6; ++i) {
|
||||
c = gUnk_02002A40.playerName[i];
|
||||
if (c == '\0') break;
|
||||
if (c == '\0')
|
||||
break;
|
||||
dest[i] = c;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,14 @@
|
|||
"ios": "c",
|
||||
"functions.h": "c",
|
||||
"textbox.h": "c",
|
||||
"structures.h": "c"
|
||||
"structures.h": "c",
|
||||
"fileselect.h": "c",
|
||||
"menu.h": "c",
|
||||
"save.h": "c",
|
||||
"main.h": "c",
|
||||
"object.h": "c",
|
||||
"filescreen.h": "c",
|
||||
"screen.h": "c"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue