Wonder mail and some boss dialogues (#36)

* more wonder mail and main menu work

* Lots of things.. doc'ing, decomping, and other things

* continue decomping boss scenes

* up to Suicune

* up to Mewtwo dialogue

* up to Raquaza

* fix spelling error on Rayquaza and decomp a few more

* up to groudon

* divide > shift
This commit is contained in:
Seth Barberee 2021-04-19 21:55:40 -07:00 committed by GitHub
parent d316d1e359
commit f65dee5a14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 117299 additions and 120936 deletions

View File

@ -11533,7 +11533,7 @@ _08023532:
cmp r0, 0
beq _08023594
adds r0, r5, 0
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
movs r7, 0x4
cmp r0, 0

3387
asm/code_802B640.s Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

97987
asm/code_8057824.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1201,8 +1201,8 @@ _0808E72C:
bx r0
thumb_func_end sub_808E6F4
thumb_func_start sub_808E734
sub_808E734:
thumb_func_start HasRecruitedMon
HasRecruitedMon:
push {r4-r6,lr}
lsls r0, 16
asrs r4, r0, 16
@ -1236,7 +1236,7 @@ _0808E76A:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_808E734
thumb_func_end HasRecruitedMon
thumb_func_start sub_808E770
sub_808E770:

View File

@ -8539,21 +8539,21 @@ _080A1AF0: .4byte gUnknown_811678C
_080A1AF4: .4byte gUnknown_8116790
_080A1AF8:
movs r0, 0x90
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
bne _080A1B08
bl _080A236A
_080A1B08:
movs r0, 0x91
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
bne _080A1B18
bl _080A236A
_080A1B18:
movs r0, 0x92
bl sub_808E734
bl HasRecruitedMon
b _080A171E
_080A1B20:
bl sub_808D33C
@ -8854,7 +8854,7 @@ _080A1CCC:
cmp r0, 0
beq _080A1D9E
adds r0, r5, 0
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
bne _080A1CA4

View File

@ -1557,17 +1557,17 @@ _08001F7E:
cmp r0, 0
beq _08001FCC
movs r0, 0x90
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
beq _08001FCC
movs r0, 0x91
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
beq _08001FCC
movs r0, 0x92
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
beq _08001FCC
@ -1668,7 +1668,7 @@ _08002086:
beq _080020AE
movs r0, 0x89
lsls r0, 1
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
beq _080020AE
@ -1685,7 +1685,7 @@ _080020AE:
cmp r0, 0
beq _080020D4
ldr r0, _080020E4
bl sub_808E734
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
beq _080020D4

660
asm/jirachi_wish.s Normal file
View File

@ -0,0 +1,660 @@
.include "constants/gba_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start JirachiWish
JirachiWish:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x78
movs r0, 0x1A
bl sub_8085680
adds r6, r0, 0
ldr r0, _0808B82C
ldr r1, _0808B830
bl CopySpeciesNametoBuffer
ldr r4, _0808B834
adds r0, r4, 0
bl sub_80855E4
adds r0, r6, 0
bl _call_via_r4
movs r0, 0
bl sub_8041888
ldr r0, [r6, 0x70]
movs r1, 0xAE
lsls r1, 1
adds r0, r1
movs r1, 0
movs r4, 0x1
strb r4, [r0]
ldr r0, [r6, 0x70]
movs r2, 0xAF
lsls r2, 1
adds r0, r2
strb r1, [r0]
adds r0, r6, 0
movs r1, 0xE
movs r2, 0
bl sub_80861B8
ldr r0, _0808B838
bl sub_80855E4
ldr r0, _0808B83C
ldr r0, [r0]
ldr r1, _0808B840
adds r0, r1
strb r4, [r0]
movs r0, 0x1E
bl sub_8083ED8
movs r0, 0x1E
movs r1, 0x46
bl sub_803E708
ldr r0, _0808B844
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _0808B848
bl sub_8083E38
movs r0, 0x96
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
bl sub_80862BC
ldr r0, _0808B84C
bl sub_8052910
movs r0, 0x79
bl sub_8083E88
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
movs r1, 0
bl sub_80856E0
movs r0, 0xB5
lsls r0, 1
bl sub_8083E38
ldr r0, _0808B850
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
bl sub_808696C
ldr r0, _0808B854
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
_0808B690:
ldr r4, _0808B858
_0808B692:
movs r0, 0
ldr r1, [r4]
ldr r2, _0808B85C
ldr r3, _0808B860
bl sub_8052C68
mov r9, r0
cmp r0, 0
ble _0808B692
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
mov r2, r9
cmp r2, 0x1
bne _0808B754
ldr r0, _0808B864
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
bl JirachiWishGrantDialogue
movs r0, 0
add r7, sp, 0x6C
_0808B6CA:
adds r0, 0x1
mov r8, r0
mov r4, sp
movs r5, 0x8
_0808B6D2:
adds r0, r4, 0
movs r1, 0x69
movs r2, 0
bl sub_8045C28
adds r4, 0x4
subs r5, 0x1
cmp r5, 0
bge _0808B6D2
movs r0, 0x3
bl sub_8084100
ldrh r1, [r6, 0x4]
adds r1, r0
subs r1, 0x1
lsls r1, 16
lsrs r1, 16
ldr r2, _0808B868
ldr r0, [sp, 0x6C]
ands r0, r2
orrs r0, r1
str r0, [sp, 0x6C]
movs r0, 0x3
bl sub_8084100
ldrh r2, [r6, 0x6]
adds r2, r0
subs r2, 0x1
lsls r2, 16
ldr r0, _0808B86C
ldr r1, [sp, 0x6C]
ands r1, r0
orrs r1, r2
str r1, [sp, 0x6C]
movs r2, 0
ldrsh r0, [r7, r2]
asrs r1, 16
bl sub_8049590
ldrh r1, [r0]
movs r0, 0x3
ands r0, r1
cmp r0, 0
beq _0808B744
movs r0, 0xA6
lsls r0, 1
bl sub_8083E38
adds r0, r7, 0
bl sub_808BB3C
adds r0, r6, 0
adds r1, r7, 0
mov r2, sp
movs r3, 0x9
bl sub_8046860
_0808B744:
mov r0, r8
cmp r0, 0x5
ble _0808B6CA
ldr r0, [r6, 0x70]
ldr r2, _0808B870
adds r1, r0, r2
movs r0, 0
strb r0, [r1]
_0808B754:
mov r0, r9
cmp r0, 0x2
bne _0808B80A
ldr r0, _0808B874
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
bl JirachiWishGrantDialogue
movs r0, 0
add r1, sp, 0x24
mov r8, r1
add r7, sp, 0x70
_0808B776:
adds r0, 0x1
mov r10, r0
mov r4, r8
movs r5, 0x8
_0808B77E:
movs r0, 0
bl sub_803D73C
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
movs r2, 0
bl sub_8045C28
adds r4, 0x4
subs r5, 0x1
cmp r5, 0
bge _0808B77E
movs r0, 0x3
bl sub_8084100
ldrh r1, [r6, 0x4]
adds r1, r0
subs r1, 0x1
lsls r1, 16
lsrs r1, 16
ldr r2, _0808B868
ldr r0, [sp, 0x70]
ands r0, r2
orrs r0, r1
str r0, [sp, 0x70]
movs r0, 0x3
bl sub_8084100
ldrh r2, [r6, 0x6]
adds r2, r0
subs r2, 0x1
lsls r2, 16
ldr r0, _0808B86C
ldr r1, [sp, 0x70]
ands r1, r0
orrs r1, r2
str r1, [sp, 0x70]
movs r2, 0
ldrsh r0, [r7, r2]
asrs r1, 16
bl sub_8049590
ldrh r1, [r0]
movs r0, 0x3
ands r0, r1
cmp r0, 0
beq _0808B7FA
movs r0, 0xC8
lsls r0, 1
bl sub_8083E38
adds r0, r7, 0
bl sub_808BB3C
adds r0, r6, 0
adds r1, r7, 0
mov r2, r8
movs r3, 0x9
bl sub_8046860
_0808B7FA:
mov r0, r10
cmp r0, 0x5
ble _0808B776
ldr r0, [r6, 0x70]
ldr r2, _0808B870
adds r1, r0, r2
movs r0, 0
strb r0, [r1]
_0808B80A:
mov r0, r9
cmp r0, 0x3
bne _0808B8CA
bl JirachiFriendAreaSearch
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x3A
bne _0808B87C
ldr r0, _0808B878
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
b _0808B690
.align 2, 0
_0808B82C: .4byte gUnknown_202E038
_0808B830: .4byte 0x0000019d
_0808B834: .4byte sub_808BBA8
_0808B838: .4byte sub_80861A8
_0808B83C: .4byte gUnknown_203B418
_0808B840: .4byte 0x0001356c
_0808B844: .4byte gUnknown_8105668
_0808B848: .4byte 0x000001a7
_0808B84C: .4byte gUnknown_8105674
_0808B850: .4byte gUnknown_81056B8
_0808B854: .4byte gUnknown_81056DC
_0808B858: .4byte gUnknown_8105798
_0808B85C: .4byte gUnknown_810579C
_0808B860: .4byte 0x00000705
_0808B864: .4byte gUnknown_810581C
_0808B868: .4byte 0xffff0000
_0808B86C: .4byte 0x0000ffff
_0808B870: .4byte 0x0000015d
_0808B874: .4byte gUnknown_8105974
_0808B878: .4byte gUnknown_8105A08
_0808B87C:
ldr r0, _0808BA30
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
bl JirachiWishGrantDialogue
ldr r0, [r6, 0x70]
ldr r2, _0808BA34
adds r1, r0, r2
movs r0, 0
strb r0, [r1]
ldr r0, _0808BA38
bl sub_8052910
adds r0, r4, 0
bl UnlockFriendArea
movs r0, 0xD4
bl sub_8083E38
bl sub_8083600
adds r1, r0, 0
ldr r0, _0808BA3C
movs r2, 0
bl sub_8045B94
ldr r0, _0808BA40
adds r1, r4, 0
movs r2, 0
bl sub_8092578
ldr r0, _0808BA44
bl sub_8052910
_0808B8CA:
mov r0, r9
cmp r0, 0x4
bne _0808B98E
ldr r0, _0808BA48
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
bl JirachiWishGrantDialogue
movs r0, 0
add r1, sp, 0x48
mov r8, r1
add r7, sp, 0x74
_0808B8EC:
adds r0, 0x1
mov r10, r0
mov r4, r8
movs r5, 0x3
_0808B8F4:
movs r0, 0x8
bl sub_8084100
ldr r2, _0808BA4C
adds r0, r2
ldrb r1, [r0]
adds r0, r4, 0
movs r2, 0
bl sub_8045C28
adds r4, 0x4
subs r5, 0x1
cmp r5, 0
bge _0808B8F4
movs r0, 0x3
bl sub_8084100
ldrh r1, [r6, 0x4]
adds r1, r0
subs r1, 0x1
lsls r1, 16
lsrs r1, 16
ldr r2, _0808BA50
ldr r0, [sp, 0x74]
ands r0, r2
orrs r0, r1
str r0, [sp, 0x74]
movs r0, 0x3
bl sub_8084100
ldrh r2, [r6, 0x6]
adds r2, r0
subs r2, 0x1
lsls r2, 16
ldr r0, _0808BA54
ldr r1, [sp, 0x74]
ands r1, r0
orrs r1, r2
str r1, [sp, 0x74]
movs r2, 0
ldrsh r0, [r7, r2]
asrs r1, 16
bl sub_8049590
ldrh r1, [r0]
movs r0, 0x3
ands r0, r1
cmp r0, 0
beq _0808B970
movs r0, 0xC8
lsls r0, 1
bl sub_8083E38
adds r0, r7, 0
bl sub_808BB3C
adds r0, r6, 0
adds r1, r7, 0
mov r2, r8
movs r3, 0x4
bl sub_8046860
_0808B970:
mov r0, r10
cmp r0, 0x4
ble _0808B8EC
ldr r0, [r6, 0x70]
ldr r2, _0808BA34
adds r1, r0, r2
movs r0, 0
strb r0, [r1]
ldr r0, _0808BA58
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
_0808B98E:
mov r0, r9
cmp r0, 0x5
bne _0808B9F8
ldr r0, _0808BA5C
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r6, 0
bl JirachiWishGrantDialogue
ldr r0, [r6, 0x70]
ldr r2, _0808BA34
adds r1, r0, r2
movs r0, 0
strb r0, [r1]
ldr r0, _0808BA60
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
bl sub_8083600
adds r1, r0, 0
adds r1, 0x4
adds r0, r6, 0x4
bl sub_80983D8
adds r1, r0, 0
adds r0, r6, 0
bl sub_8085918
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _0808BA64
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _0808BA68
ldr r0, [r0]
ldr r1, _0808BA6C
adds r0, r1
movs r1, 0x1
strb r1, [r0]
_0808B9F8:
ldr r0, _0808BA70
bl sub_8052910
adds r0, r6, 0
bl sub_808BC20
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _0808BA74
bl sub_8052910
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
bl sub_808BD38
add sp, 0x78
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0808BA30: .4byte gUnknown_8105AD4
_0808BA34: .4byte 0x0000015d
_0808BA38: .4byte gUnknown_8105B20
_0808BA3C: .4byte gAvailablePokemonNames
_0808BA40: .4byte gUnknown_202DE58
_0808BA44: .4byte gUnknown_8105B68
_0808BA48: .4byte gUnknown_8105BA8
_0808BA4C: .4byte gUnknown_81074FC
_0808BA50: .4byte 0xffff0000
_0808BA54: .4byte 0x0000ffff
_0808BA58: .4byte gUnknown_8105BF4
_0808BA5C: .4byte gUnknown_8105D2C
_0808BA60: .4byte gUnknown_8105D80
_0808BA64: .4byte gUnknown_8105D9C
_0808BA68: .4byte gUnknown_203B418
_0808BA6C: .4byte 0x00000674
_0808BA70: .4byte gUnknown_81058E0
_0808BA74: .4byte gUnknown_810593C
thumb_func_end JirachiWish
thumb_func_start JirachiPreFightDialogue1
JirachiPreFightDialogue1:
push {lr}
ldr r0, _0808BA94
bl HasRecruitedMon
lsls r0, 24
cmp r0, 0
beq _0808BA9C
bl sub_8086448
ldr r0, _0808BA98
bl sub_80866C4
b _0808BAA0
.align 2, 0
_0808BA94: .4byte 0x0000019d
_0808BA98: .4byte gUnknown_8105E14
_0808BA9C:
bl JirachiPreFightDialogue
_0808BAA0:
pop {r0}
bx r0
thumb_func_end JirachiPreFightDialogue1
thumb_func_start sub_808BAA4
sub_808BAA4:
push {r4,r5,lr}
sub sp, 0x4
ldr r0, _0808BB34
bl sub_8083E38
ldr r1, _0808BB38
movs r0, 0x1F
str r0, [r1]
movs r4, 0xFA
movs r5, 0x1
_0808BAB8:
str r5, [sp]
adds r0, r4, 0
adds r1, r4, 0
adds r2, r4, 0
movs r3, 0x1
bl sub_8085C54
movs r0, 0x46
bl sub_803E46C
subs r4, 0xA
cmp r4, 0x95
bgt _0808BAB8
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
movs r4, 0xFA
movs r5, 0x1
_0808BADE:
str r5, [sp]
adds r0, r4, 0
adds r1, r4, 0
adds r2, r4, 0
movs r3, 0x1
bl sub_8085C54
movs r0, 0x46
bl sub_803E46C
subs r4, 0xA
cmp r4, 0xC7
bgt _0808BADE
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
movs r4, 0xFA
movs r5, 0x1
_0808BB04:
str r5, [sp]
adds r0, r4, 0
adds r1, r4, 0
adds r2, r4, 0
movs r3, 0x1
bl sub_8085C54
movs r0, 0x46
bl sub_803E46C
subs r4, 0xA
cmp r4, 0
bge _0808BB04
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
bl sub_8085EB0
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0808BB34: .4byte 0x000002c1
_0808BB38: .4byte gUnknown_202EDC8
thumb_func_end sub_808BAA4
thumb_func_start sub_808BB3C
sub_808BB3C:
push {lr}
sub sp, 0x8
adds r3, r0, 0
movs r0, 0
ldrsh r1, [r3, r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 11
movs r1, 0xC0
lsls r1, 4
adds r0, r1
cmp r0, 0
bge _0808BB58
adds r0, 0xFF
_0808BB58:
lsls r0, 8
lsrs r0, 16
ldr r1, _0808BBA0
ldr r2, [sp, 0x4]
ands r2, r1
orrs r2, r0
str r2, [sp, 0x4]
movs r0, 0x2
ldrsh r1, [r3, r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 11
movs r1, 0x80
lsls r1, 5
adds r0, r1
cmp r0, 0
bge _0808BB7C
adds r0, 0xFF
_0808BB7C:
lsls r0, 8
lsrs r0, 16
lsls r0, 16
ldr r1, _0808BBA4
ands r2, r1
orrs r2, r0
str r2, [sp, 0x4]
movs r0, 0
str r0, [sp]
movs r0, 0x64
movs r1, 0
movs r2, 0
add r3, sp, 0x4
bl sub_8085EC8
add sp, 0x8
pop {r0}
bx r0
.align 2, 0
_0808BBA0: .4byte 0xffff0000
_0808BBA4: .4byte 0x0000ffff
thumb_func_end sub_808BB3C
.align 2,0

View File

@ -5,204 +5,6 @@
.text
thumb_func_start sub_8035D80
sub_8035D80:
ldr r1, _08035D90
ldr r2, [r1]
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [r2, 0x30]
str r1, [r2, 0x34]
bx lr
.align 2, 0
_08035D90: .4byte gMainMenu
thumb_func_end sub_8035D80
thumb_func_start sub_8035D94
sub_8035D94:
ldr r0, _08035D9C
ldr r0, [r0]
adds r0, 0x30
bx lr
.align 2, 0
_08035D9C: .4byte gMainMenu
thumb_func_end sub_8035D94
thumb_func_start sub_8035DA0
sub_8035DA0:
ldr r2, _08035DB0
ldr r0, [r2]
adds r0, 0x30
movs r1, 0
strb r1, [r0]
ldr r0, [r2]
str r1, [r0, 0x34]
bx lr
.align 2, 0
_08035DB0: .4byte gMainMenu
thumb_func_end sub_8035DA0
thumb_func_start sub_8035DB4
sub_8035DB4:
push {lr}
movs r1, 0x8
subs r0, 0x13
cmp r0, 0x7
bhi _08035E0A
lsls r0, 2
ldr r1, _08035DC8
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08035DC8: .4byte _08035DCC
.align 2, 0
_08035DCC:
.4byte _08035DEC
.4byte _08035DF0
.4byte _08035DF4
.4byte _08035DF8
.4byte _08035DFC
.4byte _08035E00
.4byte _08035E04
.4byte _08035E08
_08035DEC:
movs r1, 0
b _08035E0A
_08035DF0:
movs r1, 0x1
b _08035E0A
_08035DF4:
movs r1, 0x2
b _08035E0A
_08035DF8:
movs r1, 0x3
b _08035E0A
_08035DFC:
movs r1, 0x4
b _08035E0A
_08035E00:
movs r1, 0x5
b _08035E0A
_08035E04:
movs r1, 0x6
b _08035E0A
_08035E08:
movs r1, 0x7
_08035E0A:
adds r0, r1, 0
pop {r1}
bx r1
thumb_func_end sub_8035DB4
thumb_func_start DrawMainMenu
DrawMainMenu:
push {r4-r7,lr}
mov r7, r8
push {r7}
ldr r5, _08035EB8
ldr r0, [r5]
cmp r0, 0
bne _08035E34
movs r4, 0xD4
lsls r4, 1
adds r0, r4, 0
movs r1, 0x8
bl MemoryAlloc
str r0, [r5]
movs r1, 0
adds r2, r4, 0
bl MemoryFill8
_08035E34:
mov r12, r5
movs r0, 0xA2
lsls r0, 1
mov r8, r0
ldr r4, _08035EBC
movs r3, 0
movs r2, 0x3
_08035E42:
mov r5, r12
ldr r1, [r5]
adds r1, r3
add r1, r8
adds r0, r4, 0
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
adds r3, 0x18
subs r2, 0x1
cmp r2, 0
bge _08035E42
bl ResetUnusedInputStruct
ldr r4, _08035EB8
ldr r0, [r4]
movs r6, 0xA2
lsls r6, 1
adds r0, r6
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
bl SetMainMenuItems
ldr r0, [r4]
movs r7, 0xD2
lsls r7, 1
adds r0, r7
movs r1, 0x1
negs r1, r1
str r1, [r0]
bl SetMainMenuText
lsls r0, 24
cmp r0, 0
beq _08035E9A
ldr r0, [r4]
adds r0, 0x4
movs r1, 0x2
movs r2, 0
bl sub_8035CF4
_08035E9A:
ldr r0, [r4]
adds r0, 0x4
movs r1, 0
movs r2, 0x1
bl sub_8035CF4
ldr r1, [r4]
movs r0, 0x1
str r0, [r1]
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08035EB8: .4byte gUnknown_203B34C
_08035EBC: .4byte gUnknown_80E59C8
thumb_func_end DrawMainMenu
thumb_func_start CleanMainMenu
CleanMainMenu:
push {r4,lr}
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r4, _08035EE8
ldr r0, [r4]
cmp r0, 0
beq _08035EE0
bl MemoryFree
movs r0, 0
str r0, [r4]
_08035EE0:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08035EE8: .4byte gUnknown_203B34C
thumb_func_end CleanMainMenu
thumb_func_start UpdateMainMenu
UpdateMainMenu:
push {r4-r6,lr}
@ -362,458 +164,4 @@ _0803601A:
bx r1
thumb_func_end UpdateMainMenu
thumb_func_start SetMainMenuText
SetMainMenuText:
push {r4-r6,lr}
sub sp, 0x10
ldr r6, _08036048
ldr r2, [r6]
ldr r0, [r2, 0x8]
movs r3, 0x30
ldrsh r1, [r2, r3]
lsls r1, 3
adds r1, r0
ldr r5, [r1, 0x4]
movs r0, 0xD2
lsls r0, 1
adds r1, r2, r0
ldr r0, [r1]
cmp r0, r5
bne _0803604C
movs r0, 0
b _08036226
.align 2, 0
_08036048: .4byte gUnknown_203B34C
_0803604C:
str r5, [r1]
movs r4, 0xA2
lsls r4, 1
adds r0, r2, r4
movs r1, 0x2
bl sub_8035CC0
ldr r0, [r6]
adds r0, r4
movs r1, 0x3
bl sub_8035CC0
subs r0, r5, 0x3
cmp r0, 0xD
bls _0803606C
b _08036224
_0803606C:
lsls r0, 2
ldr r1, _08036078
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08036078: .4byte _0803607C
.align 2, 0
_0803607C:
.4byte _08036114
.4byte _08036224
.4byte _08036224
.4byte _080360F4
.4byte _08036134
.4byte _08036154
.4byte _08036224
.4byte _08036174
.4byte _08036194
.4byte _080361B4
.4byte _080360D4
.4byte _080361D4
.4byte _080360B4
.4byte _08036204
_080360B4:
ldr r0, _080360C8
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _080360CC
ldr r2, _080360D0
b _080361E4
.align 2, 0
_080360C8: .4byte gUnknown_203B34C
_080360CC: .4byte gUnknown_80E5CB4
_080360D0: .4byte gUnknown_80E6030
_080360D4:
ldr r0, _080360E8
ldr r1, [r0]
adds r0, r1, 0x4
movs r3, 0xA2
lsls r3, 1
adds r1, r3
ldr r3, _080360EC
ldr r2, _080360F0
b _080361E4
.align 2, 0
_080360E8: .4byte gUnknown_203B34C
_080360EC: .4byte gUnknown_80E5CB4
_080360F0: .4byte gUnknown_80E5F80
_080360F4:
ldr r0, _08036108
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _0803610C
ldr r2, _08036110
b _080361E4
.align 2, 0
_08036108: .4byte gUnknown_203B34C
_0803610C: .4byte gUnknown_80E5CB4
_08036110: .4byte gUnknown_80E5F1C
_08036114:
ldr r0, _08036128
ldr r1, [r0]
adds r0, r1, 0x4
movs r3, 0xA2
lsls r3, 1
adds r1, r3
ldr r3, _0803612C
ldr r2, _08036130
b _080361E4
.align 2, 0
_08036128: .4byte gUnknown_203B34C
_0803612C: .4byte gUnknown_80E5CB4
_08036130: .4byte gUnknown_80E5CCC
_08036134:
ldr r0, _08036148
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _0803614C
ldr r2, _08036150
b _080361E4
.align 2, 0
_08036148: .4byte gUnknown_203B34C
_0803614C: .4byte gUnknown_80E5CB4
_08036150: .4byte gUnknown_80E5DA0
_08036154:
ldr r0, _08036168
ldr r1, [r0]
adds r0, r1, 0x4
movs r3, 0xA2
lsls r3, 1
adds r1, r3
ldr r3, _0803616C
ldr r2, _08036170
b _080361E4
.align 2, 0
_08036168: .4byte gUnknown_203B34C
_0803616C: .4byte gUnknown_80E5CB4
_08036170: .4byte gUnknown_80E5DF0
_08036174:
ldr r0, _08036188
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _0803618C
ldr r2, _08036190
b _080361E4
.align 2, 0
_08036188: .4byte gUnknown_203B34C
_0803618C: .4byte gUnknown_80E5CB4
_08036190: .4byte gUnknown_80E5D0C
_08036194:
ldr r0, _080361A8
ldr r1, [r0]
adds r0, r1, 0x4
movs r3, 0xA2
lsls r3, 1
adds r1, r3
ldr r3, _080361AC
ldr r2, _080361B0
b _080361E4
.align 2, 0
_080361A8: .4byte gUnknown_203B34C
_080361AC: .4byte gUnknown_80E5CB4
_080361B0: .4byte gUnknown_80E5E5C
_080361B4:
ldr r0, _080361C8
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _080361CC
ldr r2, _080361D0
b _080361E4
.align 2, 0
_080361C8: .4byte gUnknown_203B34C
_080361CC: .4byte gUnknown_80E5CB4
_080361D0: .4byte gUnknown_80E5EBC
_080361D4:
ldr r0, _080361F8
ldr r1, [r0]
adds r0, r1, 0x4
movs r3, 0xA2
lsls r3, 1
adds r1, r3
ldr r3, _080361FC
ldr r2, _08036200
_080361E4:
str r2, [sp]
movs r2, 0
str r2, [sp, 0x4]
str r2, [sp, 0x8]
str r2, [sp, 0xC]
movs r2, 0x2
bl SetMenuItems
b _08036224
.align 2, 0
_080361F8: .4byte gUnknown_203B34C
_080361FC: .4byte gUnknown_80E5CB4
_08036200: .4byte gUnknown_80E5FCC
_08036204:
ldr r0, _08036230
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _08036234
ldr r2, _08036238
str r2, [sp]
movs r2, 0
str r2, [sp, 0x4]
str r2, [sp, 0x8]
str r2, [sp, 0xC]
movs r2, 0x2
bl SetMenuItems
_08036224:
movs r0, 0x1
_08036226:
add sp, 0x10
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_08036230: .4byte gUnknown_203B34C
_08036234: .4byte gUnknown_80E5CB4
_08036238: .4byte gUnknown_80E5D48
thumb_func_end SetMainMenuText
thumb_func_start sub_803623C
sub_803623C:
push {r4,lr}
ldr r4, _08036288
ldr r0, [r4]
movs r1, 0xA2
lsls r1, 1
adds r0, r1
movs r1, 0x1
bl sub_8035CC0
bl SetMainMenuItems
ldr r0, [r4]
movs r1, 0xD2
lsls r1, 1
adds r0, r1
movs r1, 0x1
negs r1, r1
str r1, [r0]
bl SetMainMenuText
lsls r0, 24
cmp r0, 0
beq _08036276
ldr r0, [r4]
adds r0, 0x4
movs r1, 0x2
movs r2, 0
bl sub_8035CF4
_08036276:
ldr r0, [r4]
adds r0, 0x4
movs r1, 0
movs r2, 0x1
bl sub_8035CF4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08036288: .4byte gUnknown_203B34C
thumb_func_end sub_803623C
thumb_func_start SetMainMenuItems
SetMainMenuItems:
push {r4,lr}
sub sp, 0x10
bl sub_8011C34
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803629E
b _080363A4
_0803629E:
movs r0, 0x1
bl sub_8095324
cmp r0, 0
bne _08036344
movs r0, 0x7
bl sub_8095324
cmp r0, 0
beq _080362FC
bl sub_803D0D8
lsls r0, 24
cmp r0, 0
beq _080362DC
ldr r0, _080362D0
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _080362D4
ldr r2, _080362D8
b _0803637C
.align 2, 0
_080362D0: .4byte gUnknown_203B34C
_080362D4: .4byte gUnknown_80E5A78
_080362D8: .4byte gUnknown_80E5C18
_080362DC:
ldr r0, _080362F0
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _080362F4
ldr r2, _080362F8
b _0803637C
.align 2, 0
_080362F0: .4byte gUnknown_203B34C
_080362F4: .4byte gUnknown_80E5BC4
_080362F8: .4byte gUnknown_80E5BDC
_080362FC:
bl sub_803D0D8
lsls r0, 24
cmp r0, 0
beq _08036324
ldr r0, _08036318
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _0803631C
ldr r2, _08036320
b _0803637C
.align 2, 0
_08036318: .4byte gUnknown_203B34C
_0803631C: .4byte gUnknown_80E5A78
_08036320: .4byte gUnknown_80E5AFC
_08036324:
ldr r0, _08036338
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _0803633C
ldr r2, _08036340
b _0803637C
.align 2, 0
_08036338: .4byte gUnknown_203B34C
_0803633C: .4byte gUnknown_80E5A60
_08036340: .4byte gUnknown_80E5A90
_08036344:
bl sub_803D0D8
lsls r0, 24
cmp r0, 0
beq _0803636C
ldr r0, _08036360
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _08036364
ldr r2, _08036368
b _0803637C
.align 2, 0
_08036360: .4byte gUnknown_203B34C
_08036364: .4byte gUnknown_80E5A78
_08036368: .4byte gUnknown_80E5B8C
_0803636C:
ldr r0, _08036394
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _08036398
ldr r2, _0803639C
_0803637C:
str r2, [sp]
movs r4, 0x1
str r4, [sp, 0x4]
ldr r2, _080363A0
ldr r2, [r2]
str r2, [sp, 0x8]
str r4, [sp, 0xC]
movs r2, 0
bl SetMenuItems
b _080363C8
.align 2, 0
_08036394: .4byte gUnknown_203B34C
_08036398: .4byte gUnknown_80E5B34
_0803639C: .4byte gUnknown_80E5B4C
_080363A0: .4byte gUnknown_203B350
_080363A4:
ldr r0, _080363D0
ldr r1, [r0]
adds r0, r1, 0x4
movs r2, 0xA2
lsls r2, 1
adds r1, r2
ldr r3, _080363D4
ldr r2, _080363D8
str r2, [sp]
movs r4, 0x1
str r4, [sp, 0x4]
ldr r2, _080363DC
ldr r2, [r2]
str r2, [sp, 0x8]
str r4, [sp, 0xC]
movs r2, 0
bl SetMenuItems
_080363C8:
add sp, 0x10
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080363D0: .4byte gUnknown_203B34C
_080363D4: .4byte gUnknown_80E59E0
_080363D8: .4byte gUnknown_80E59F8
_080363DC: .4byte gUnknown_203B350
thumb_func_end SetMainMenuItems
thumb_func_start sub_80363E0
sub_80363E0:
push {lr}
ldr r0, _080363F4
ldr r0, [r0]
cmp r0, 0
beq _080363F8
ldr r0, [r0]
cmp r0, 0xC
beq _080363F8
movs r0, 0x1
b _080363FA
.align 2, 0
_080363F4: .4byte gUnknown_203B34C
_080363F8:
movs r0, 0
_080363FA:
pop {r1}
bx r1
thumb_func_end sub_80363E0
.align 2,0

File diff suppressed because it is too large Load Diff

9897
asm/wonder_mail_3.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -6,17 +6,39 @@ struct subStruct_8048524
u8 fill0[0x6];
u8 unk6;
u8 unk7;
u8 fill8[0xAC - 0x8];
u8 fill8[0xE - 0x8];
s16 unkE; // HP??
s16 unk10;
u8 fill12[0x46 - 0x12];
u8 unk46;
u8 fill47[0xA4 - 0x47];
u8 unkA4;
u8 fillA5[0xAC - 0xA5];
u8 unkAC;
u8 fillAD[0x112 - 0xAD];
u8 fillAD[0xFB - 0xAD];
u8 unkFB;
u8 fillFC[0x112 - 0xFC];
u8 unk112;
u8 fill113[0x13C - 0x113];
u32 unk13C;
u8 fill140[0x15C - 0x140];
u8 unk15C;
u8 unk15D;
u8 unk15E;
u8 unk15F;
u8 fill160[0x174 - 0x160];
u32 unk174;
};
struct unkDungeon_8041D5C
{
u8 padding[0x70];
u8 fill0[4];
s16 unk4;
s16 unk6;
u32 unk8;
s32 unkC;
s32 unk10;
u8 fill14[0x70 - 0x14];
struct subStruct_8048524 *unk70;
};

View File

@ -0,0 +1,36 @@
#include "code_8041D5C.h"
struct unkStruct_203B418
{
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 unk4;
u8 fill5[2];
u8 unk7;
u8 fill8[0x11 - 8];
u8 unk11;
u8 fill12[0xE23C - 0x12];
s16 unkE23C;
s16 unkE23E;
u8 fillE240[0xE265 - 0xE240];
u8 unkE265;
u8 fillE266[0xE26B - 0xE266];
u8 unkE26B;
u8 unkE26C;
u8 fillE26D[0x1356C - 0xE26D];
u8 unk1356C;
u8 fill1356D[0x1358C - 0x1356D];
struct unkDungeon_8041D5C *unk1358C[0x10];
u8 fill135CC[0x181FC - 0x135CC];
u32 unk181FC;
u32 unk18200;
u32 unk18204;
u8 unk18208[3];
u8 unk1820B;
u32 unk1820C;
u32 unk18210;
u8 padding2[3];
u8 unk18217;
};

View File

@ -597,6 +597,9 @@
// BLDALPHA
#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1))
// There is one time that we need to reverse the OR to match in PMD
#define BLDALPHA_BLEND1(target1, target2) ((target1) | ((target2) << 8))
// SOUNDCNT_H
#define SOUND_CGB_MIX_QUARTER 0x0000
#define SOUND_CGB_MIX_HALF 0x0001

View File

@ -4,12 +4,16 @@
enum MainMenuScreens
{
MENU_MAIN_SCREEN = 1,
MENU_NEW_GAME = 3,
MENU_AWAITING_RESCUE = 6,
MENU_CONTINUE = 7,
MENU_DELETE_SAVE_PROMPT,
MENU_ADVENTURE_LOG = 10,
MENU_FRIEND_RESCUE,
MENU_TRADE_ITEMS,
MENU_WONDER_MAIL,
MENU_DUAL_SLOT,
MENU_WIRELESS_COMMS,
MENU_DEBUG = 16,
MENU_COMMUNICATION_1 = 19,
MENU_COMMUNICATION_2,
@ -39,7 +43,7 @@ struct MainMenu
/* 0x8 */ s32 lastMenu;
u8 padding[0x20];
/* 0x2C */ struct MainMenuSub sub;
u32 unk30;
u8 unk30;
u32 unk34;
s16 unk38;
u8 unk3A;

View File

@ -93,6 +93,10 @@ SECTIONS {
asm/wonder_mail.o(.text);
src/wonder_mail.o(.text);
asm/wonder_mail_1.o(.text);
src/wonder_mail_2.o(.text);
asm/code_802B640.o(.text);
src/wonder_mail_3.o(.text);
asm/wonder_mail_3.o(.text);
src/adventure_log.o(.text);
src/friend_rescue.o(.text);
asm/friend_rescue.o(.text);
@ -103,6 +107,7 @@ SECTIONS {
asm/main_menu.o(.text);
src/main_menu_mid.o(.text);
asm/main_menu_1.o(.text);
src/main_menu_1.o(.text);
src/trade_items_menu.o(.text);
src/other_menus.o(.text);
asm/other_menus.o(.text);
@ -115,9 +120,9 @@ SECTIONS {
asm/rescue_password_menu.o(.text);
asm/load_screen.o(.text);
src/load_screen.o(.text);
src/wonder_mail_main_menu_pre.o(.text);
asm/wonder_mail_main_menu.o(.text);
src/wonder_mail_main_menu.o(.text);
asm/wonder_mail_main_menu.o(.text);
src/ds_menus.o(.text);
src/debug_menu.o(.text);
asm/debug_menu.o(.text);
src/debug_menu_mid.o(.text);
@ -140,6 +145,10 @@ SECTIONS {
asm/code_8048480.o(.text);
src/code_80521D0.o(.text);
asm/code_80521D0.o(.text);
src/code_8057824.o(.text);
asm/code_8057824.o(.text);
src/code_8057824_1.o(.text);
asm/jirachi_wish.o(.text);
src/code_80521D0_1.o(.text);
src/pokemon.o(.text);
asm/pokemon.o(.text);

View File

@ -73,7 +73,7 @@ extern s16 sub_8097838();
extern s16 sub_8097870();
extern s32 sub_80977B8();
extern s32 sub_80977F8();
extern void xxx_call_draw_string(s32, u32, u32 *, u32, u32);
extern void xxx_call_draw_string(s32, u32, u8 *, u32, u32);
extern u32 gUnknown_202DE30;
u32 CreateAdventureLogScreen(u32 param_1)
@ -227,7 +227,7 @@ void DisplayAdventureLog(void)
iVar5 = gAdventureLog->currPage * 8;
iVar5 += 10;
// Draw Header
xxx_call_draw_string(iVar5, 0, &gAdventureLogHeaderText, gAdventureLog->unk34, 0);
xxx_call_draw_string(iVar5, 0, gAdventureLogHeaderText, gAdventureLog->unk34, 0);
iVar5 += 4;
iVar5 += gAdventureLog->unk9E * 8;
// Draw Page #
@ -264,7 +264,7 @@ void DisplayAdventureLog(void)
else
{
// Draw the ?????????? across the row
xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), &gUnknown_80E2030, gAdventureLog->unk34, 0);
xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gUnknown_80E2030, gAdventureLog->unk34, 0);
}
counter++;
} while(counter < gAdventureLog->unk1A);

View File

@ -25,6 +25,6 @@ void sub_80060EC(void)
gUnknown_2026E3C = gUnknown_2026E58;
gUnknown_2026E54 = !gUnknown_2026E54;
gUnknown_2026E50 = !gUnknown_2026E50;
sub_800CC44((gUnknown_2026E4E & (0xF8 << 5)) >> 8, gUnknown_2026E4E & 0x1F);
sub_800CC44((gUnknown_2026E4E & 0x1F00) >> 8, gUnknown_2026E4E & 0x1F);
gUnknown_2026E38 = TRUE;
}

View File

@ -5,7 +5,7 @@
extern u16 gRawKeyInput;
extern u8 gUnknown_202D6B8;
extern u8 gUnknown_202D6B9;
extern u16 gUnknown_202D7FA;
extern u16 gBldAlpha;
extern u8 gUnknown_202D7FE;
extern struct BGControlStruct gBG0Control;
@ -53,10 +53,6 @@ void ReadKeyInput(struct Inputs *r0)
void sub_800CC44(s32 r0, s32 r1)
{
u32 preload1;
u8 preload2;
u8 preload3;
if(r0 < 0)
{
r0 = 0;
@ -82,13 +78,7 @@ void sub_800CC44(s32 r0, s32 r1)
gUnknown_202D6B8 = r0;
gUnknown_202D6B9 = r1;
// Forcing the correct loads
preload1 = gUnknown_202D7FA;
preload2 = gUnknown_202D6B8;
preload3 = gUnknown_202D6B9;
gUnknown_202D7FA = (gUnknown_202D6B9 << 8) | gUnknown_202D6B8;
gBldAlpha = BLDALPHA_BLEND1(gUnknown_202D6B8, gUnknown_202D6B9);
}
void SetBG0RegOffsets(s32 xoffset, s32 yoffset)

View File

@ -1,20 +1,7 @@
#include "global.h"
#include "play_time.h"
#include "file_system.h"
struct unkStruct_203B418
{
u8 fill0[0x181FC];
u32 unk181FC;
u32 unk18200;
u32 unk18204;
u8 unk18208[3];
u8 unk1820B;
u32 unk1820C;
u32 unk18210;
u8 padding2[3];
u8 unk18217;
};
#include "gUnknown_203B418.h"
extern struct PlayTimeStruct *gPlayTimeRef;
extern struct unkStruct_203B418 *gUnknown_203B418;

View File

@ -1,12 +1,6 @@
#include "global.h"
#include "code_8041D5C.h"
struct unk_struct_8041F08
{
u32 unk0;
u32 unk4;
};
struct unkStruct_80420E8
{
u32 unk0;

View File

@ -10,77 +10,77 @@ extern s16 gUnknown_80F4FBA;
extern s16 gUnknown_80F4FBC;
extern s16 gUnknown_80F4FBE;
extern void sub_807D148(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2, u32 r3);
extern void sub_8075FCC(u32 r0, struct unkDungeon_8041D5C *r1);
extern void sub_8077AE4(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2);
extern void sub_8072008(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2, u8 r3, u32);
extern void sub_8076D10(u32 r0, struct unkDungeon_8041D5C *r1);
extern void sub_807232C(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2);
extern void sub_807D148(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2, u32 r3);
extern void sub_8075FCC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_8077AE4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2);
extern void sub_8072008(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2, u8 r3, u32);
extern void sub_8076D10(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_807232C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2);
extern void sub_8045B94(u8 *r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_807A290(u32, struct unkDungeon_8041D5C *r1);
extern void sub_80522F4(u32 r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_8079270(u32 r0, struct unkDungeon_8041D5C *r1);
extern void sub_8077910(u32, struct unkDungeon_8041D5C *r1, u32, u32);
extern void sub_80791D8(u32, struct unkDungeon_8041D5C *r1);
extern void sub_8079140(u32, struct unkDungeon_8041D5C *r1);
extern void sub_8077C44(u32, struct unkDungeon_8041D5C *r1, s16, s16, u32);
extern void sub_80792F8(u32, struct unkDungeon_8041D5C *r1, u32);
extern void sub_8079F20(u32, struct unkDungeon_8041D5C *r1, u32, u8);
extern void sub_806F370(u32, struct unkDungeon_8041D5C *r1, u32, u32, u32, u32, u32, u32, u32, u32);
extern void sub_807A290(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_80522F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_8079270(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_8077910(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
extern void sub_80791D8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_8079140(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_8077C44(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, s16, s16, u32);
extern void sub_80792F8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u8);
extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32, u32, u32, u32, u32, u32);
void sub_8048340(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2)
void sub_8048340(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2)
{
sub_806F370(r0, r1, r2, 1, 0, 0, 528, 0, 0, 0);
}
void sub_8048364(u32 r0, struct unkDungeon_8041D5C *r1, u8 r2)
void sub_8048364(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u8 r2)
{
sub_8079F20(r0, r1, 1, r2);
}
void sub_8048374(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_8048374(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077C44(r0, r1, gUnknown_80F4FB6, gUnknown_80F4FB8, 1);
}
void sub_804839C(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_804839C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077C44(r0, r1, gUnknown_80F4FBA, gUnknown_80F4FBC, 1);
}
void sub_80483C4(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80483C4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_80792F8(r0, r1, 999);
}
void sub_80483D4(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80483D4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077C44(r0, r1, 0, gUnknown_80F4FBE, 1);
}
void sub_80483F4(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80483F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8079140(r0, r1);
}
void sub_8048400(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_8048400(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_80791D8(r0, r1);
}
void sub_804840C(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_804840C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077910(r0, r1, 0, 1);
}
void sub_804841C(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_804841C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8079270(r0, r1);
}
void sub_8048428(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_8048428(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
if(r1->unk70->unkAC == 4)
sub_807A290(r0, r1);
@ -89,7 +89,7 @@ void sub_8048428(u32 r0, struct unkDungeon_8041D5C *r1)
sub_80522F4(r0, r1, gUnknown_80F89F4);
}
void sub_8048450(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_8048450(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
if((u8)(r1->unk70->unkAC - 2) <= 1)
sub_807A290(r0, r1);
@ -98,43 +98,43 @@ void sub_8048450(u32 r0, struct unkDungeon_8041D5C *r1)
sub_80522F4(r0, r1, gUnknown_80F89F4);
}
void sub_8048480(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_8048480(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_807D148(r0, r1, 0, 0);
}
void sub_8048490(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_8048490(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8075FCC(r0, r1);
}
void sub_804849C(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_804849C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077AE4(r0, r1, 1);
}
void sub_80484A8(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80484A8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8072008(r0, r1, 1, 1, 1);
}
void sub_80484BC(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80484BC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8076D10(r0, r1);
}
void sub_80484C8(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80484C8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
// Pointer to "But nothing happened!"
sub_80522F4(r0, r1, gUnknown_80F89F4);
}
void sub_80484DC(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80484DC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_807232C(r0, r1, 1);
}
void sub_80484E8(u32 r0, struct unkDungeon_8041D5C *r1)
void sub_80484E8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
if(r1->unk70->unkAC == 1)
sub_807A290(r0, r1);

File diff suppressed because it is too large Load Diff

118
src/code_8057824.c Normal file
View File

@ -0,0 +1,118 @@
#include "global.h"
#include "gUnknown_203B418.h"
#include "code_8041D5C.h"
extern struct unkStruct_203B418 *gUnknown_203B418;
extern u32 gUnknown_80FCF74;
extern u32 gUnknown_80FCF80;
extern u16 gUnknown_80F4F42;
extern u32 gUnknown_8106A50;
extern u32 gUnknown_8106A4C;
extern s16 gUnknown_80F4DB6;
extern u32 gUnknown_80FAC88;
extern void sub_80775DC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
extern void sub_80772C0(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32);
extern u8 sub_807EAA0(u32, u32);
extern void sub_80522F4(struct unkDungeon_8041D5C *r1, struct unkDungeon_8041D5C *r2, u32);
extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
extern u8 sub_805727C(u32, u32, s16);
extern u32 sub_8055640(u32, u32, u32, u32, u32);
extern void sub_80779F0(u32, u32, u32, u32);
extern void sub_8078968();
extern void sub_8079618(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32);
extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
extern u32 gUnknown_80FD018;
extern s16 sub_8057600(u32, u32);
extern u32 sub_8092B00(u32);
u32 sub_8057824(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
sub_80775DC(param_1,param_2,gUnknown_8106A50,1);
return 1;
}
u32 sub_805783C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
sub_80772C0(param_1,param_2,gUnknown_8106A4C,0x80,1);
return 1;
}
u32 sub_805785C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
gUnknown_203B418->unkE26B = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == '\0') {
// The weather remains unchanged
sub_80522F4(param_1,param_2,gUnknown_80FCF74);
}
return 1;
}
u32 sub_80578A4(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
gUnknown_203B418->unkE26C = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == '\0') {
// The weather remains unchanged
sub_80522F4(param_1,param_2,gUnknown_80FCF80);
}
return 1;
}
u32 sub_80578EC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8079F20(r0, r1, 1, 0);
return 1;
}
u32 sub_80578FC(u32 param_1, u32 param_2, u32 param_3, u32 param_4)
{
u32 uVar3;
uVar3 = 0;
if (sub_8055640(param_1, param_2, param_3, 0x80 << 1, param_4) != 0) {
uVar3 = 1;
if (sub_805727C(param_1,param_2, gUnknown_80F4DB6) != '\0') {
sub_80779F0(param_1, param_2, 1, 0);
}
}
return uVar3;
}
u32 sub_8057948(void)
{
sub_8078968();
return 1;
}
u32 sub_8057954(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3)
{
// $m0 is enraged
sub_8079618(param_1,param_2,0xc,param_3,gUnknown_80FAC88);
return 1;
}
u8 sub_8057974(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4)
{
s32 newHP;
u8 local_24;
newHP = param_2->unk70->unkE / 2;
local_24 = 0;
if (newHP != 0) {
sub_806F370(param_1,param_2,newHP,1,&local_24,sub_8092B00(param_3),sub_8057600(param_3,param_4),0,1,0);
local_24 = local_24 == 0;
}
else
{
// The target's HP can't be halved anymore
sub_80522F4(param_1,param_2,gUnknown_80FD018);
}
return local_24;
}

2661
src/code_8057824_1.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,13 @@
#include "global.h"
extern u32 gUnknown_202D800;
extern u16 gUnknown_202D7FC; // used to update Blend Count Reg
extern u16 gBldCnt; // used to update Blend Count Reg
extern u16 gUnknown_203B0BE[];
void sub_800CDA8(u32 r0)
{
gUnknown_202D800 = r0;
gUnknown_202D7FC = gUnknown_203B0BE[r0];
gBldCnt = gUnknown_203B0BE[r0];
}
u32 sub_800CDC8(void)
@ -48,7 +48,7 @@ void CpuFill(void* src, void *dest, s32 size)
}
#ifdef NONMATCHING
void sub_800CE54(void)
void VBlank_CB(void)
{
// TODO this is so gross.. looks like a macro or something else but I don't want to deal with this rn
REG_DMA0CNT_H = (REG_DMA0CNT_H | DMA_ENABLE) & 0xcdff;
@ -62,8 +62,8 @@ void sub_800CE54(void)
REG_WININ = WININ_WIN0_ALL | WININ_WIN1_ALL;
REG_WINOUT = WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WIN01_BG3 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG0;
REG_BLDCNT = gUnknown_202D7FC;
REG_BLDALPHA = gUnknown_202D7FA;
REG_BLDCNT = gBldCnt;
REG_BLDALPHA = gBldAlpha;
if(gUnknown_2026E38 != 0)
{
DmaSet(0, &gUnknown_2026E3C[2], REG_ADDR_WIN0H, 0xa2600002);
@ -82,7 +82,7 @@ void sub_800CE54(void)
}
#else
NAKED
void sub_800CE54(void)
void VBlank_CB(void)
{
asm_unified("\tpush {lr}\n"
"\tldr r2, _0800CEC0\n"
@ -144,8 +144,8 @@ void sub_800CE54(void)
"_0800CEC8: .4byte 0x00007fff\n"
"_0800CECC: .4byte 0x04000048\n"
"_0800CED0: .4byte 0x00003f3f\n"
"_0800CED4: .4byte gUnknown_202D7FC\n"
"_0800CED8: .4byte gUnknown_202D7FA\n"
"_0800CED4: .4byte gBldCnt\n"
"_0800CED8: .4byte gBldAlpha\n"
"_0800CEDC: .4byte gUnknown_2026E38\n"
"_0800CEE0: .4byte 0x040000b0\n"
"_0800CEE4: .4byte gUnknown_2026E3C\n"

44
src/ds_menus.c Normal file
View File

@ -0,0 +1,44 @@
#include "global.h"
#include "input.h"
extern u8 *gUnknown_203B3E8;
extern void sub_800641C(void *, u32, u32);
extern void nullsub_54();
extern void sub_8039E18();
void sub_803A1C0(u8 r0)
{
*gUnknown_203B3E8 = r0;
nullsub_54();
sub_8039E18();
}
u32 CreateDualSlotMenu(void)
{
return 1;
}
u32 UpdateDualSlotMenu(void)
{
return 0;
}
void CleanDualSlotMenu()
{
}
u32 CreateWirelessCommsMenu(void)
{
return 1;
}
u32 UpdateWirelessCommsMenu(void)
{
return 2;
}
void CleanWirelessCommsMenu(void)
{
ResetUnusedInputStruct();
sub_800641C(NULL, 1, 1);
}

View File

@ -835,92 +835,25 @@ static inline int CgbPan(struct CgbChannel *chan)
return 0;
}
#ifndef NONMATCHING
NAKED
#endif
void CgbModVol(struct CgbChannel *chan)
{
#ifdef NONMATCHING
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
if ((soundInfo->mode & 1) || !CgbPan(chan))
if (!CgbPan(chan))
{
chan->pan = 0xFF;
chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16;
}
else
{
// Force chan->rightVolume and chan->leftVolume to be read from memory again,
// even though there is no reason to do so.
// The command line option "-fno-gcse" achieves the same result as this.
asm("" : : : "memory");
chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16;
if (chan->eg > 15)
chan->eg = 15;
}
chan->sg = (chan->eg * chan->su + 15) >> 4;
chan->pan &= chan->panMask;
#else
asm_unified("\tpush {r4,lr}\n"
"\tadds r1, r0, 0\n"
"\tldrb r0, [r1, 0x2]\n"
"\tlsls r2, r0, 24\n"
"\tlsrs r4, r2, 24\n"
"\tldrb r3, [r1, 0x3]\n"
"\tlsls r0, r3, 24\n"
"\tlsrs r3, r0, 24\n"
"\tcmp r4, r3\n"
"\tbcc _080AFA94\n"
"\tlsrs r0, r2, 25\n"
"\tcmp r0, r3\n"
"\tbcc _080AFAA0\n"
"\tmovs r0, 0xF\n"
"\tstrb r0, [r1, 0x1B]\n"
"\tb _080AFAAE\n"
"_080AFA94:\n"
"\tlsrs r0, 25\n"
"\tcmp r0, r4\n"
"\tbcc _080AFAA0\n"
"\tmovs r0, 0xF0\n"
"\tstrb r0, [r1, 0x1B]\n"
"\tb _080AFAAE\n"
"_080AFAA0:\n"
"\tmovs r0, 0xFF\n"
"\tstrb r0, [r1, 0x1B]\n"
"\tldrb r2, [r1, 0x3]\n"
"\tldrb r3, [r1, 0x2]\n"
"\tadds r0, r2, r3\n"
"\tlsrs r0, 4\n"
"\tb _080AFABE\n"
"_080AFAAE:\n"
"\tldrb r2, [r1, 0x3]\n"
"\tldrb r3, [r1, 0x2]\n"
"\tadds r0, r2, r3\n"
"\tlsrs r0, 4\n"
"\tstrb r0, [r1, 0xA]\n"
"\tcmp r0, 0xF\n"
"\tbls _080AFAC0\n"
"\tmovs r0, 0xF\n"
"_080AFABE:\n"
"\tstrb r0, [r1, 0xA]\n"
"_080AFAC0:\n"
"\tldrb r2, [r1, 0x6]\n"
"\tldrb r3, [r1, 0xA]\n"
"\tadds r0, r2, 0\n"
"\tmuls r0, r3\n"
"\tadds r0, 0xF\n"
"\tasrs r0, 4\n"
"\tstrb r0, [r1, 0x19]\n"
"\tldrb r0, [r1, 0x1C]\n"
"\tldrb r2, [r1, 0x1B]\n"
"\tands r0, r2\n"
"\tstrb r0, [r1, 0x1B]\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n");
#endif
}
void CgbSound(void)

View File

@ -9,8 +9,8 @@ extern char ewram_start[];
typedef void (*IntrCallback)(void);
extern u8 IntrMain_Buffer[0x120];
extern IntrCallback gUnknown_202D5F0[6];
extern u16 gUnknown_202D7FC;
extern IntrCallback gIntrCallbacks[6];
extern u16 gBldCnt;
extern u8 gUnknown_202D7FE;
extern u8 gInterruptsEnabled;
extern u16 gUnknown_203B0AC;
@ -50,7 +50,7 @@ extern void sub_80098A0(void);
extern void InitGraphics(void);
extern void GameLoop(void);
extern void Hang(void);
extern void sub_800CE54(void);
extern void VBlank_CB(void);
extern void nullsub_17(void);
extern void sub_800BD08(void); // music initializer
@ -59,7 +59,7 @@ extern void sub_800D7D0(void);
bool8 EnableInterrupts(void);
void InitIntrTable(const u32 *interrupt_table);
void *sub_800B6F4(u32 index, void * new_callback);
void *SetInterruptCallback(u32 index, void * new_callback);
void AgbMain(void)
@ -98,7 +98,7 @@ void AgbMain(void)
REG_WIN1V = 0;
REG_WININ = WININ_WIN0_ALL | WININ_WIN1_ALL; // 16191
REG_WINOUT = WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; // 61
gUnknown_202D7FC = REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BD | BLDCNT_TGT2_OBJ; // 15426
gBldCnt = REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BD | BLDCNT_TGT2_OBJ; // 15426
REG_BLDALPHA = BLDALPHA_BLEND(10, 6); // 1546
gUnknown_202D7FE = 0;
REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_WRAP | BGCNT_SCREENBASE(12); // 11264
@ -121,7 +121,7 @@ void AgbMain(void)
LoadCharmaps();
sub_80098A0();
InitGraphics();
sub_800B6F4(1, sub_800CE54);
SetInterruptCallback(1, VBlank_CB);
REG_DISPCNT = DISPCNT_WIN1_ON | DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; // 32576
GameLoop();
Hang();
@ -131,7 +131,7 @@ void sub_800B540(void)
{
s32 i;
for (i = 0; i < 6; i++) {
gUnknown_202D5F0[i] = NULL;
gIntrCallbacks[i] = NULL;
}
nullsub_17();
@ -213,7 +213,7 @@ bool8 sub_800B650(void)
}
}
void SetInterruptFlag(u16 flag)
void AckInterrupt(u16 flag)
{
if(!gInterruptsEnabled)
{
@ -237,14 +237,14 @@ u32 *sub_800B6E8(u32 r0)
return &gIntrTable[r0];
}
void *sub_800B6F4(u32 index, void * new_callback)
void *SetInterruptCallback(u32 index, void * new_callback)
{
void *old_callback;
u32 interrupt_var;
interrupt_var = DisableInterrupts();
old_callback = gUnknown_202D5F0[index];
gUnknown_202D5F0[index] = new_callback;
old_callback = gIntrCallbacks[index];
gIntrCallbacks[index] = new_callback;
if(interrupt_var){
EnableInterrupts();
}

View File

@ -28,9 +28,9 @@ extern void sub_8099690(u32);
extern void DrawMainMenu(void);
extern void CreateTradeItemsMenu(void);
extern void sub_8036FDC(s32);
extern void sub_803A1E4(void);
extern void CreateWirelessCommsMenu(void);
extern void CreateFriendRescueMenu(void);
extern void sub_803A1D8(void);
extern void CreateDualSlotMenu(void);
extern void CreateWonderMailMenu(void);
extern void CreateLoadScreen(u32);
extern s32 sub_8035DB4(u32);
@ -41,8 +41,8 @@ extern s32 sub_803941C(void);
extern s32 UpdateTradeItemsMenu(void);
extern s32 UpdateFriendRescueMenu(void);
extern s32 UpdateWonderMailMenu(void);
extern s32 sub_803A1DC(void);
extern s32 sub_803A1E8(void);
extern s32 UpdateDualSlotMenu(void);
extern s32 UpdateWirelessCommsMenu(void);
extern s32 UpdateRescuePasswordMenu(void);
extern s32 sub_80383D4(void);
extern s32 sub_8038630(void);
@ -53,8 +53,8 @@ extern void CleanTradeItemsMenu(void);
extern void sub_80370D4(void);
extern void CleanFriendRescueMenu(void);
extern void CleanWonderMailMenu(void);
extern void nullsub_55(void);
extern void sub_803A1EC(void);
extern void CleanDualSlotMenu(void);
extern void CleanWirelessCommsMenu(void);
extern void CleanRescuePasswordMenu(void);
extern void sub_80383A8(void);
extern void sub_8038604(void);
@ -94,7 +94,7 @@ void SetUpMenu(void)
sub_8099690(0);
DrawMainMenu();
break;
case 6:
case MENU_AWAITING_RESCUE:
case MENU_CONTINUE:
case MENU_DELETE_SAVE_PROMPT:
case 9:
@ -113,11 +113,11 @@ void SetUpMenu(void)
case MENU_WONDER_MAIL:
CreateWonderMailMenu();
break;
case 0xe:
sub_803A1D8();
case MENU_DUAL_SLOT:
CreateDualSlotMenu();
break;
case 0xf:
sub_803A1E4();
case MENU_WIRELESS_COMMS:
CreateWirelessCommsMenu();
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
case MENU_RESCUE_PASSWORD_ENTRY:
@ -152,7 +152,7 @@ s32 UpdateMenu(void)
case MENU_MAIN_SCREEN:
nextMenu = UpdateMainMenu();
break;
case 6:
case MENU_AWAITING_RESCUE:
case MENU_CONTINUE:
case MENU_DELETE_SAVE_PROMPT:
case 9:
@ -179,15 +179,15 @@ s32 UpdateMenu(void)
nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
case 0xe:
iVar1 = sub_803A1DC();
case MENU_DUAL_SLOT:
iVar1 = UpdateDualSlotMenu();
nextMenu = MENU_MAIN_SCREEN;
if (iVar1 != 3) {
nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
case 0xf:
iVar1 = sub_803A1E8();
case MENU_WIRELESS_COMMS:
iVar1 = UpdateWirelessCommsMenu();
nextMenu = 5;
if ((iVar1 != 3) && (nextMenu = MENU_NO_SCREEN_CHANGE, iVar1 == 2)) {
nextMenu = MENU_MAIN_SCREEN;
@ -232,7 +232,7 @@ void CleanUpMenu(void)
case MENU_MAIN_SCREEN:
CleanMainMenu();
break;
case 6:
case MENU_AWAITING_RESCUE:
case MENU_CONTINUE:
case MENU_DELETE_SAVE_PROMPT:
case 9:
@ -251,11 +251,11 @@ void CleanUpMenu(void)
case MENU_WONDER_MAIL:
CleanWonderMailMenu();
break;
case 0xe:
nullsub_55();
case MENU_DUAL_SLOT:
CleanDualSlotMenu();
break;
case 0xf:
sub_803A1EC();
case MENU_WIRELESS_COMMS:
CleanWirelessCommsMenu();
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
case MENU_RESCUE_PASSWORD_ENTRY:

225
src/main_menu_1.c Normal file
View File

@ -0,0 +1,225 @@
#include "global.h"
#include "main_menu.h"
struct unkData
{
u8 unk0[24];
};
struct unkSubStruct
{
u32 unk0;
u32 unk4;
};
struct unkStruct_203B34C
{
// size: 0x1A8
u32 unk0;
u32 unk4;
struct unkSubStruct *unk8; // Array of menu choices??
u8 fillC[0x30 - 0xC];
s16 unk30;
u8 fill32[0x144 - 0x32];
struct unkData unk144[4];
/* 0x1A4 */ u32 currMenuChoice;
};
extern struct unkStruct_203B34C *gUnknown_203B34C;
extern u32 gUnknown_80E59E0;
extern u32 gUnknown_203B350;
extern u32 gUnknown_80E59F8;
extern u32 gUnknown_80E5A78;
extern u32 gUnknown_80E5B34;
extern u32 gUnknown_80E5A90;
extern u32 gUnknown_80E5A60;
extern u32 gUnknown_80E5AFC;
extern u32 gUnknown_80E5B8C;
extern u32 gUnknown_80E5B4C;
extern u32 gUnknown_80E5BC4;
extern u32 gUnknown_80E5BDC;
extern u32 gUnknown_80E5C18;
extern u32 gUnknown_80E5CB4;
extern u32 gUnknown_80E5D48;
extern u32 gUnknown_80E5CCC;
extern u32 gUnknown_80E5F1C;
extern u32 gUnknown_80E5DA0;
extern u32 gUnknown_80E5DF0;
extern u32 gUnknown_80E5D0C;
extern u32 gUnknown_80E6030;
extern u32 gUnknown_80E5FCC;
extern u32 gUnknown_80E5F80;
extern u32 gUnknown_80E5EBC;
extern u32 gUnknown_80E5E5C;
extern u8 sub_803D0D8();
extern s32 sub_8011C34();
extern s32 sub_8095324(u32);
extern void SetMenuItems(u32 *, struct unkData *, u32, u32 *, u32 *, u32, u32, u32);
void SetMainMenuItems(void);
extern u8 SetMainMenuText();
extern void sub_8035CF4(u32 *, u32, u32);
extern void sub_8035CC0(struct unkData *, u32);
u8 SetMainMenuText(void)
{
u32 menuChoice;
struct unkSubStruct *preload;
// Have to load the pointer before the index
preload = gUnknown_203B34C->unk8;
menuChoice = preload[gUnknown_203B34C->unk30].unk4; // chosen menu action?
if (gUnknown_203B34C->currMenuChoice == menuChoice) {
return 0;
}
gUnknown_203B34C->currMenuChoice = menuChoice;
sub_8035CC0(gUnknown_203B34C->unk144,2);
sub_8035CC0(gUnknown_203B34C->unk144,3);
switch(menuChoice) {
case MENU_WIRELESS_COMMS:
// Using wireless communications, you can go on an adventure to unknown worlds.
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E6030,0,0,0);
break;
case MENU_WONDER_MAIL:
// Using passwords, you can receive Wonder Mail
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5F80,0,0,0);
break;
case MENU_AWAITING_RESCUE:
// You are awaiting resuce by a friend
// You can give up waiting for rescue
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5F1C,0,0,0);
break;
case MENU_NEW_GAME:
// Start an entirely new adventure
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5CCC,0,0,0);
break;
case MENU_CONTINUE:
// Resume your adventure from where you last saved
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5DA0,0,0,0);
break;
case MENU_DELETE_SAVE_PROMPT:
// This will delete your saved game data.
// Beware! This will delete it forever
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5DF0,0,0,0);
break;
case MENU_ADVENTURE_LOG:
// Check your career as an adventurer
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5D0C,0,0,0);
break;
case MENU_FRIEND_RESCUE:
// Using a Game Link cable or passwords, friends may rescue each other
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5E5C,0,0,0);
break;
case MENU_TRADE_ITEMS:
// Using a Game Link cable you can trade stored items with a friend
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5EBC,0,0,0);
break;
case MENU_DUAL_SLOT:
// Using Dual Slot function, you can receive teams from your friends
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5FCC,0,0,0);
break;
case MENU_DEBUG:
// This is the Debug Mode.
// It won't be in the release version
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5D48,0,0,0);
break;
default:
break;
}
return 1;
}
void sub_803623C(void)
{
sub_8035CC0(gUnknown_203B34C->unk144,1);
SetMainMenuItems();
gUnknown_203B34C->currMenuChoice = -1;
if (SetMainMenuText() != 0) {
sub_8035CF4(&gUnknown_203B34C->unk4,2,0);
}
sub_8035CF4(&gUnknown_203B34C->unk4,0,1);
}
void SetMainMenuItems(void)
{
if (sub_8011C34() != -1) {
if (sub_8095324(1) == 0) {
if (sub_8095324(7) != 0) {
if (sub_803D0D8() != 0) {
// Revive Team
// Delete Save Data
// Adventure Log
// Friend Rescue
// Trade Items
// Wonder Mail
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5C18,1,gUnknown_203B350,1);
}
else {
// Revive Team
// Delete Save Data
// Adventure Log
// Friend Rescue
// Trade Items
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,&gUnknown_80E5BDC,1,gUnknown_203B350,1);
}
}
else {
if (sub_803D0D8() != 0) {
// Continue
// Delete Save Data
// Adventure Log
// Friend Rescue
// Trade Items
// Wonder Mail
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5AFC,1,gUnknown_203B350,1);
}
else {
// Continue
// Delete Save Data
// Adventure Log
// Friend Rescue
// Trade Items
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,&gUnknown_80E5A90,1,gUnknown_203B350,1);
}
}
}
else {
if (sub_803D0D8() != 0) {
// Awaiting Rescue
// Delete Save Data
// Adventure Log
// Friend Rescue
// Trade Items
// Wonder Mail
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5B8C,1,gUnknown_203B350,1);
}
else {
// Awaiting Rescue
// Delete Save Data
// Adventure Log
// Friend Rescue
// Trade Items
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,&gUnknown_80E5B4C,1,gUnknown_203B350,1);
}
}
}
else
{
// New Game
// Adventure Log
SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,&gUnknown_80E59F8,1,gUnknown_203B350,1);
}
}
u8 sub_80363E0(void)
{
if(gUnknown_203B34C == NULL)
return 0;
if(gUnknown_203B34C->unk0 == 0xC)
return 0;
return 1;
}

View File

@ -7,11 +7,40 @@ struct unkData
u8 unk0[24];
};
struct unkSubStruct
{
u32 unk0;
u32 unk4;
};
struct unkStruct_203B34C
{
// size: 0x1A8
u32 unk0;
u32 unk4;
struct unkSubStruct *unk8; // Array of menu choices??
u8 fillC[0x30 - 0xC];
s16 unk30;
u8 fill32[0x144 - 0x32];
struct unkData unk144[4];
/* 0x1A4 */ u32 currMenuChoice;
};
extern struct unkStruct_203B34C *gUnknown_203B34C;
extern struct MainMenu *gMainMenu;
extern struct unkData gUnknown_80E59A8;
extern struct unkData gUnknown_80E59C8;
extern void sub_8006518(struct unkData *);
extern void sub_800641C(struct unkData *, u32, u32);
extern void *MemoryAlloc(u32, u32);
extern void MemoryFill8(u8*, u8, s32);
extern void MemoryFree(void *);
extern u8 SetMainMenuText();
extern void SetMainMenuItems();
void sub_8035CC0(struct unkData *dataArray, u32 index)
{
@ -78,3 +107,102 @@ s32 sub_8035D74(void)
{
return gMainMenu->unk3C;
}
NAKED
void sub_8035D80(void *r0)
{
asm_unified(
"\tldr r1, _08035D90\n"
"\tldr r2, [r1]\n"
"\tldr r1, [r0, 0x4]\n"
"\tldr r0, [r0]\n"
"\tstr r0, [r2, 0x30]\n"
"\tstr r1, [r2, 0x34]\n"
"\tbx lr\n"
"\t.align 2, 0\n"
"_08035D90: .4byte gMainMenu");
}
u8 *sub_8035D94(void)
{
return &gMainMenu->unk30;
}
void sub_8035DA0(void)
{
gMainMenu->unk30 = 0;
gMainMenu->unk34 = 0;
}
u32 sub_8035DB4(u32 r0)
{
u32 returnVar = 8;
switch(r0)
{
case MENU_COMMUNICATION_1:
returnVar = 0;
break;
case MENU_COMMUNICATION_2:
returnVar = 1;
break;
case 0x15:
returnVar = 2;
break;
case 0x16:
returnVar = 3;
break;
case 0x17:
returnVar = 4;
break;
case 0x18:
returnVar = 5;
break;
case 0x19:
returnVar = 6;
break;
case 0x1a:
returnVar = 7;
}
return returnVar;
}
void DrawMainMenu(void)
{
s32 iVar3;
if(gUnknown_203B34C == NULL)
{
gUnknown_203B34C = MemoryAlloc(0x1A8, 8);
MemoryFill8((u8 *)gUnknown_203B34C, 0, 0x1A8);
}
for(iVar3 = 0; iVar3 < 4; iVar3++)
{
gUnknown_203B34C->unk144[iVar3] = gUnknown_80E59C8;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B34C->unk144, 1, 1);
SetMainMenuItems();
gUnknown_203B34C->currMenuChoice = -1;
if(SetMainMenuText() != 0)
{
sub_8035CF4(&gUnknown_203B34C->unk4,2,0);
}
sub_8035CF4(&gUnknown_203B34C->unk4,0,1);
gUnknown_203B34C->unk0 = 1;
}
void CleanMainMenu(void)
{
ResetUnusedInputStruct();
sub_800641C(NULL, 1, 1);
if(gUnknown_203B34C != NULL)
{
MemoryFree(gUnknown_203B34C);
gUnknown_203B34C = NULL;
}
}

View File

@ -8,7 +8,7 @@ extern bool8 EnableInterrupts(void);
extern bool8 DisableInterrupts(void);
extern void SoundBiasReset();
extern void SoundBiasSet();
extern void SetInterruptFlag(u16);
extern void AckInterrupt(u16);
extern void nullsub_25();
extern void nullsub_18();
extern void UpdateSound();
@ -17,7 +17,7 @@ extern void UpdateInput();
extern void sub_800C298(u16 r0);
typedef void (*IntrCallback)(void);
extern IntrCallback gUnknown_202D5F0[];
extern IntrCallback gIntrCallbacks[];
struct unkStruct_202D648
{
@ -61,7 +61,7 @@ struct unkStruct_3000FD8
extern struct unkStruct_3000FD8 gUnknown_3000FD8[8];
extern u8 gUnknown_202D7FE;
extern u16 gUnknown_202D7FC;
extern u16 gBldCnt;
extern struct BGControlStruct gBG0Control;
extern struct BGControlStruct gBG1Control;
extern struct BGControlStruct gBG2Control;
@ -84,8 +84,8 @@ void VBlankIntr(void)
gUnknown_203B0A0++;
SoundVSync();
BlinkSavingIcon();
if (gUnknown_202D5F0[1] != NULL) {
gUnknown_202D5F0[1]();
if (gIntrCallbacks[1] != NULL) {
gIntrCallbacks[1]();
}
index = 0;
while (index < gUnknown_203B0AA) {
@ -100,7 +100,7 @@ void VBlankIntr(void)
if (gUnknown_203B099 == 0) {
UpdateSound();
}
SetInterruptFlag(INTR_FLAG_VBLANK);
AckInterrupt(INTR_FLAG_VBLANK);
}
// Registers are a little off.. seems to be around the while loop
@ -115,8 +115,8 @@ void VCountIntr(void)
sVar2 = sVar2 >> 16;
if (gUnknown_203B0AE < 0) {
if (gUnknown_202D5F0[2] != 0) {
gUnknown_202D5F0[2]();
if (gIntrCallbacks[2] != 0) {
gIntrCallbacks[2]();
}
gUnknown_203B0AE = 0;
}
@ -134,7 +134,7 @@ void VCountIntr(void)
REG_DISPSTAT = gUnknown_202D648[gUnknown_203B0AE].unk2 << 8 | DISPSTAT_VBLANK_INTR | DISPSTAT_VCOUNT_INTR;
}
}
SetInterruptFlag(INTR_FLAG_VCOUNT);
AckInterrupt(INTR_FLAG_VCOUNT);
}
#else
NAKED
@ -232,7 +232,7 @@ void VCountIntr(void)
"\tstrh r0, [r2]\n"
"_0800BA34:\n"
"\tmovs r0, 0x4\n"
"\tbl SetInterruptFlag\n"
"\tbl AckInterrupt\n"
"\tpop {r3}\n"
"\tmov r8, r3\n"
"\tpop {r4-r7}\n"
@ -241,7 +241,7 @@ void VCountIntr(void)
"\t.align 2, 0\n"
"_0800BA44: .4byte 0x04000006\n"
"_0800BA48: .4byte gUnknown_203B0AE\n"
"_0800BA4C: .4byte gUnknown_202D5F0\n"
"_0800BA4C: .4byte gIntrCallbacks\n"
"_0800BA50: .4byte gUnknown_203B0AC\n"
"_0800BA54: .4byte gUnknown_202D648\n"
"_0800BA58: .4byte 0x04000004"
@ -290,9 +290,9 @@ void xxx_update_bg_sound_input(void)
void Timer3Intr(void)
{
if(gUnknown_202D5F0[4])
gUnknown_202D5F0[4]();
SetInterruptFlag(INTR_FLAG_TIMER3);
if(gIntrCallbacks[4])
gIntrCallbacks[4]();
AckInterrupt(INTR_FLAG_TIMER3);
}
// Unused
@ -388,7 +388,7 @@ void UpdateBGControlRegisters(void)
}
REG_BG3CNT = BG[3] | 0x2f08;
REG_BLDCNT = gUnknown_202D7FC;
REG_BLDCNT = gBldCnt;
}
// Some kind of initializer for music?

View File

@ -323,6 +323,9 @@ void sub_80371B8(void)
if (sub_8037C10(0) != 0) {
sub_80376CC();
sub_8035CC0(&gUnknown_203B35C->unk15C,0);
// Success!
// The item exchange with your friend
// went through successfully
SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, &gUnknown_80E6C50,
&gUnknown_80E6C68, 0, 6, 0);
sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1);
@ -375,10 +378,12 @@ void sub_80371B8(void)
break;
case 0xe:
puVar5 = &gUnknown_80E6B78;
// Error, there was a problem on your friend's end
ppuVar4 = &gUnknown_80E6B90;
break;
case 0xf:
puVar5 = &gUnknown_80E6BF4;
// Error, your friend is not responding
ppuVar4 = &gUnknown_80E6C0C;
break;
}

View File

@ -10,22 +10,6 @@ extern struct OpenedFile *gMonsterParametersFile;
extern u16 gLevelCurrentPokeId;
extern struct gPokemon *gMonsterParameters;
extern u64 gUnknown_8107544[];
extern u32 gUnknown_810697C;
extern void sub_8086448();
extern void sub_80866C4(u32 *r0);
void sub_808CD9C(u8 r0)
{
sub_8086448();
sub_80866C4(&gUnknown_810697C);
}
u64 *sub_808CDB0(u8 r0)
{
return &gUnknown_8107544[r0];
}
void LoadMonsterParameters(void)
{
gUnknown_203B45C = &gUnknown_202F400;
@ -37,6 +21,5 @@ void LoadMonsterParameters(void)
u32 *sub_808CE00(void)
{
return &gUnknown_202F400;
}

View File

@ -54,6 +54,9 @@ void sub_80382E4(s32 param_1)
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B360->unk148,1,1);
if (param_1 == 0x25) {
// Caution!
// The storage space is empty!
// Please check again.
SetMenuItems(&gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,&gUnknown_80E6EAC,
0,4,0);
}

View File

@ -10,11 +10,17 @@ extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
struct unkStruct_8095228
{
u8 unkArray[0x10];
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 unk4;
u8 padding[0x10 - 0x5];
u32 unk10;
u8 padding2[0x20 - 0x14];
struct unkStruct_41C unk20;
u8 padding3[0x2C - 0x24];
u8 padding3[0x28 - 0x24];
u32 unk28;
s8 unk2C;
u8 padding4[0x30 - 0x2D];
};
@ -603,7 +609,7 @@ void sub_8028FDC(void)
{
case 8:
return_var = sub_8095228(gUnknown_203B2C0->unk218);
if(sub_80A2824(return_var->unkArray[4]) == 0)
if(sub_80A2824(return_var->unk4) == 0)
{
sub_8028B04(0x1C);
}
@ -891,7 +897,7 @@ void sub_80293F4(void)
switch(return_var)
{
case 3:
switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), temp.unkArray))
switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), &temp.unk0))
{
case 8:
case 9:
@ -921,8 +927,8 @@ void sub_80293F4(void)
break;
case 22:
sub_8095274(temp.unk10);
temp.unkArray[0] = 2; // Some sort of Ack?
sub_80951BC(temp.unkArray);
temp.unk0 = 2; // Some sort of Ack?
sub_80951BC(&temp.unk0);
sub_80141B4(gWonderMailAOKMailReceivedText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x101);
sub_8028B04(35);
break;
@ -1912,7 +1918,7 @@ void sub_802A50C(void)
switch(return_var)
{
case 3:
switch(sub_8039068(0x20,gUnknown_203B2C4->unk8,temp.unkArray))
switch(sub_8039068(0x20,gUnknown_203B2C4->unk8,&temp.unk0))
{
case 7:
case 8:
@ -1943,7 +1949,7 @@ void sub_802A50C(void)
uVar1 = sub_809539C(4,temp.unk10);
puVar5 = sub_8095228(uVar1);
*puVar5 = temp;
puVar5->unkArray[0] = 6;
puVar5->unk0 = 6;
gUnknown_203B2C4->unk430 = temp.unk10;
sub_802B2BC(0x21);
break;

290
src/wonder_mail_2.c Normal file
View File

@ -0,0 +1,290 @@
#include "global.h"
#include "file_system.h"
#include "input.h"
#include "pokemon.h"
#include "constants/species.h"
struct unkStruct_203B2C8
{
// size: 0x140
u8 unk0;
u8 unk1;
u16 unk2;
/* 0x4 */ struct OpenedFile *faceFile;
/* 0x8 */ u8 *faceData;
/* 0xC */ u16 unkC;
/* 0xE */ u16 unkE;
/* 0x10 */ u8 unk10;
/* 0x11 */ u8 unk11;
/* 0x12 */ u8 unk12;
/* 0x13 */ u8 unk13;
/* 0x14 */ u8 unk14[4]; // Figure out size of this buffer
u8 fill18[0x114 - 0x18];
u8 unk114[0xA]; // holds species name
u8 fill118[0x128 - 0x11E];
u16 unk128;
u8 unk12A;
u8 unk12B;
u32 unk12C;
u8 unk130;
u8 unk131;
u8 unk132;
u8 unk133;
u8 unk134;
u8 fill135[0x3];
u32 unk138;
};
extern struct unkStruct_203B2C8 *gUnknown_203B2C8;
struct unkStruct_41C
{
u8 unk41C;
u8 unk41D;
u8 unk41E;
u8 unk41F;
};
struct unkStruct_8095228
{
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 unk4;
u8 padding[0x10 - 0x5];
u32 unk10;
u8 padding2[0x20 - 0x14];
u32 unk20;
u8 padding3[0x28 - 0x24];
u32 unk28;
s8 unk2C;
u8 padding4[0x30 - 0x2D];
};
extern void sub_80920D8(u8 *buffer);
extern void sub_8097790();
extern struct unkStruct_8095228 *sub_8095228(u8);
extern char gUnknown_202E5D8[0x50];
extern char gAvailablePokemonNames[0x50];
void sub_808D8E0(u8 *, u32);
extern u32 sub_802F298();
extern void sub_802F2C0();
extern u32 sub_8011C34();
extern void *MemoryAlloc(u32, u32);
extern void MemoryFill8(u8 *, u8, s32);
extern void MemoryFree(void *);
extern void sub_800641C(void *, u32, u32);
extern u8 sub_8099394(u8 *);
extern void sub_802B548(u32);
extern u32 sub_80144A4(s32 *);
extern void sub_8011C28(u32);
extern void sub_8012574(u32);
extern void sub_8012750();
extern bool8 sub_8012600();
extern void sub_802B560();
extern void sub_802B57C();
extern void sub_802B5B8();
extern void sub_802B5FC();
extern void sub_802B624();
void sub_800D158(u8 *buffer, const char *text, ...);
extern void sub_802F204(u8 *, u32);
extern void sub_803C37C(u8 *, u32, u8 *);
extern u32 sub_803C200(u8 *, u32);
extern void sub_80141B4(const char *r0, u32, u32 *r1, u32);
extern const char gUnknown_80DFAA8[];
extern const char gUnknown_80DFB14[];
extern const char gUnknown_80DF9F0[];
extern const char gUnknown_80DF9F8[];
extern u8 sub_80023E4(u32);
extern char * GetMonSpecies(u32);
u32 sub_802B2D4(void)
{
s32 iVar1;
struct OpenedFile *faceFile;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
gUnknown_203B2C8 = MemoryAlloc(0x140,8);
MemoryFill8((u8 *)gUnknown_203B2C8,0,0x140);
gUnknown_203B2C8->unk1 = -1;
sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER);
gUnknown_203B2C8->faceFile = faceFile;
gUnknown_203B2C8->faceData = faceFile->data;
gUnknown_203B2C8->unk10 = 0;
gUnknown_203B2C8->unk11 = 0;
gUnknown_203B2C8->unk12 = 0;
gUnknown_203B2C8->unkC = 2;
gUnknown_203B2C8->unkE = 8;
if (sub_8099394(&gUnknown_203B2C8->unk1) == 1) {
sub_802B548(0);
iVar1 = 1;
}
else
iVar1 = 0;
return iVar1;
}
u32 sub_802B358(void)
{
switch(gUnknown_203B2C8->unk0) {
case 0:
sub_802B560();
break;
case 1:
sub_802B57C();
break;
case 2:
sub_802B5B8();
break;
case 3:
sub_802B5FC();
break;
case 4:
sub_802B624();
break;
case 5:
return 3;
}
return 0;
}
void sub_802B3B8(void)
{
if(gUnknown_203B2C8 != NULL)
{
CloseFile(gUnknown_203B2C8->faceFile);
MemoryFree(gUnknown_203B2C8);
gUnknown_203B2C8 = NULL;
}
}
void nullsub_132(void)
{
}
void sub_802B3E0(void)
{
struct unkStruct_8095228 *iVar3;
char *monName;
char teamNameBuffer[40];
switch(gUnknown_203B2C8->unk0) {
case 0:
if (sub_80023E4(0) != '\0') {
// Copy Team Name to buffer
sub_80920D8(teamNameBuffer);
}
else {
// Copy "????" to buffer
strcpy(teamNameBuffer,gUnknown_80DF9F0);
}
// Print and expand placeholders?
sub_800D158(gUnknown_203B2C8->unk14,gUnknown_80DF9F8,teamNameBuffer);
// Display to screen with Pelliper face
sub_80141B4(gUnknown_203B2C8->unk14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
break;
case 1:
monName = GetMonSpecies(SPECIES_PELIPPER);
strcpy(gUnknown_203B2C8->unk114, monName);
gUnknown_203B2C8->unk128 = 0x130;
gUnknown_203B2C8->unk12A = 2;
gUnknown_203B2C8->unk12C = 0;
sub_8097790();
iVar3 = sub_8095228(gUnknown_203B2C8->unk1);
sub_803C37C(&iVar3->unk4, 0, &gUnknown_203B2C8->unk130);
gUnknown_203B2C8->unk138 = sub_803C200(&iVar3->unk4, 0);
gUnknown_203B2C8->unk131 = 0;
gUnknown_203B2C8->unk132 = 0;
gUnknown_203B2C8->unk133 = 10;
gUnknown_203B2C8->unk134 = 0;
sub_802F204(gUnknown_203B2C8->unk114, 0);
break;
case 2:
// I hope you will keep on rescuing your friends
// I must save your adventure
sub_80141B4(gUnknown_80DFAA8, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
break;
case 4:
// Oh yes, that's right. Please don't forget to send an A-OK Mail
// to the friend you just rescued
sub_80141B4(gUnknown_80DFB14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
case 3:
case 5:
break;
}
}
void sub_802B548(u32 newState)
{
gUnknown_203B2C8->unk0 = newState;
nullsub_132();
sub_802B3E0();
}
void sub_802B560(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
sub_802B548(1);
}
}
void sub_802B57C(void)
{
char *monName;
if (sub_802F298() == 3) {
sub_802F2C0();
sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
monName = GetMonSpecies(SPECIES_PELIPPER);
strcpy(gAvailablePokemonNames, monName);
sub_802B548(2);
}
}
void sub_802B5B8(void)
{
u32 uVar2;
struct unkStruct_8095228 *puVar3;
s32 temp;
if (sub_80144A4(&temp) == 0) {
uVar2 = sub_8011C34();
puVar3 = sub_8095228(gUnknown_203B2C8->unk1);
puVar3->unk0 = 4;
puVar3->unk28 = uVar2;
sub_802B548(3);
sub_8011C28(1);
sub_8012574(0);
}
}
void sub_802B5FC(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0) {
if (sub_8012600() == '\0') {
sub_8012750();
sub_802B548(4);
}
}
}
void sub_802B624(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0) {
sub_802B548(5);
}
}

106
src/wonder_mail_3.c Normal file
View File

@ -0,0 +1,106 @@
#include "global.h"
struct unkStruct_203B2F8
{
// size: 0x208
u32 unk0; // state
u32 unk4;
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
u32 unkC;
u8 fill10[0x6C - 0x10];
u32 unk6C;
u32 unk70;
u32 unk74;
};
extern struct unkStruct_203B2F8 *gUnknown_203B2F8;
extern void *MemoryAlloc(u32, u32);
extern void MemoryFree(void *);
extern u8 sub_8099328(u8 *);
extern u32 sub_8011C1C();
extern void sub_802D1A0(u32);
extern void sub_802D7D0();
extern void sub_802D8CC();
extern void sub_802D940();
extern void sub_802D9F0();
extern void sub_802DA60();
extern void sub_802D82C();
extern void sub_802DA84();
extern void sub_802D1B8();
extern void sub_802D2A8();
u32 sub_802D098(u32 param_1)
{
gUnknown_203B2F8 = MemoryAlloc(0x208,8);
gUnknown_203B2F8->unk6C = 0;
gUnknown_203B2F8->unk70 = 0;
gUnknown_203B2F8->unk74 = 0;
gUnknown_203B2F8->unkC = param_1;
gUnknown_203B2F8->unk8 = 0;
gUnknown_203B2F8->unk9 = sub_8099328(&gUnknown_203B2F8->unkA);
if (sub_8011C1C() != 2) {
gUnknown_203B2F8->unk9 = 0;
}
sub_802D1A0(0);
return 1;
}
u32 sub_802D0E0(void)
{
switch(gUnknown_203B2F8->unk0) {
case 0:
break;
case 1:
sub_802D7D0();
break;
case 0xb:
case 0xc:
sub_802D8CC();
break;
case 0xd:
sub_802D940();
break;
case 0xe:
sub_802D9F0();
break;
case 0xf:
case 0x10:
sub_802DA60();
break;
case 9:
sub_802D82C();
break;
case 2:
return 3;
default:
sub_802DA84();
break;
}
return 0;
}
u8 sub_802D178(void)
{
return gUnknown_203B2F8->unk8;
}
void sub_802D184(void)
{
if(gUnknown_203B2F8 != NULL)
{
MemoryFree(gUnknown_203B2F8);
gUnknown_203B2F8 = NULL;
}
}
void sub_802D1A0(u32 newState)
{
gUnknown_203B2F8->unk0 = newState;
sub_802D1B8();
sub_802D2A8();
}

View File

@ -1,44 +1,442 @@
#include "global.h"
#include "input.h"
#include "save.h"
extern u8 *gUnknown_203B3E8;
#define EXIT_TO_MAIN_MENU 5
#define PASSWORD_SUCCESS 13
#define PASSWORD_INVALID 19
#define PASSWORD_ENTRY_SCREEN 18
struct unkWonderMailData
{
u8 unk0[20];
};
struct unkStruct_203B3E8
{
// size: 0x49C
u8 unk0; // state variable?
u8 PasswordEntryBuffer[0x36]; // Wonder Mail Buffer...
struct unkWonderMailData unk38; // 0x30 - 0x14
u8 unk38_1[0x30 - 20]; // TODO: split for the ldm/stm stuff (fix dumb hack)
u8 fill68[0x1EC - 0x68];
u32 unk1EC;
u8 fill1F0[0x24C - 0x1F0];
u32 unk24C;
u32 unk250;
u8 fill254[0x3C0 - 0x254];
struct unkWonderMailData unk3C0; // 0x3C0 + 0x14
u8 fill3D0[0x490 - 0x3D4];
u32 unk490;
u32 unk494;
u8 unk498;
u8 unk499;
u8 unk49A;
u8 unk49B;
};
extern u32 sub_8095324(u32);
extern u32 sub_80144A4(s32 *);
extern u32 sub_8011C1C(void);
extern struct unkStruct_203B3E8 *gUnknown_203B3E8;
extern void* MemoryAlloc(u32, u32);
extern void MemoryFree(void *);
extern void MemoryFill8(u8 *dest, u8 value, s32 size);
extern void sub_803A1C0(u8);
extern void ResetUnusedInputStruct(void);
extern void sub_800641C(void *, u32, u32);
extern void nullsub_54();
extern void sub_8039E18();
extern void sub_8030DE4(void);
extern void sub_801B450(void);
extern void sub_803084C(void);
extern void sub_801CBB8(void);
extern void sub_80155F0(void);
extern void sub_8031E10(void);
void sub_803A1C0(u8 r0)
extern u32 sub_802D0E0();
extern u8 sub_802D178();
extern void sub_802D184();
extern s32 sub_80154F0();
extern bool8 sub_803D358(u8 *, void *);
extern bool8 sub_80959C0(void *);
extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
void sub_8039BAC(u32);
void sub_8039A18(void);
void sub_8039AA8(void);
void sub_8039B14(void);
void sub_8039B20(void);
void sub_8039B58(void);
void sub_8039D88(void);
void sub_8039D28(void);
void sub_8039D68(void);
void sub_8039DA4(void);
void sub_8039DCC(void);
void sub_8039B3C(void);
void sub_8039D0C(void);
void sub_8039C60(void);
void sub_8039DE8(void);
extern u32 gUnknown_80E7914;
extern u32 gUnknown_80E7938;
extern u32 gUnknown_80E7994;
extern u32 gUnknown_80E79E4;
extern u32 gUnknown_80E7A48;
bool8 sub_8039880(void)
{
*gUnknown_203B3E8 = r0;
nullsub_54();
sub_8039E18();
return (sub_8095324(1) != 0 || sub_8095324(7) != 0 || sub_8011C1C() == 2);
}
u32 sub_803A1D8(void)
bool8 CreateWonderMailMenu(void)
{
return 1;
int iVar2;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
gUnknown_203B3E8 = MemoryAlloc(sizeof(struct unkStruct_203B3E8), 8);
MemoryFill8((u8 *)gUnknown_203B3E8, 0, sizeof(struct unkStruct_203B3E8));
for(iVar2 = 0; iVar2 < 0x36; iVar2++){
gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0;
}
gUnknown_203B3E8->unk490 = 3;
gUnknown_203B3E8->unk494 = 2;
gUnknown_203B3E8->unk498 = 1;
gUnknown_203B3E8->unk490 = 5; // ??? Why?
sub_803A1C0(0x11); // 0x11 -> Display "Enter Wonder Mail Password"
return 1;
}
u32 sub_803A1DC(void)
u8 UpdateWonderMailMenu(void)
{
return 0;
switch(gUnknown_203B3E8->unk0) {
case 4:
sub_8039A18();
break;
case EXIT_TO_MAIN_MENU: // When you exit out of the menu
return 3;
case 8:
sub_8039AA8();
break;
case 11:
break;
case 12:
sub_8039B14();
break;
case 6:
sub_8039B20();
break;
case 9:
sub_8039B58();
break;
case 7:
sub_8039D88();
break;
case PASSWORD_SUCCESS:
sub_8039D28();
break;
case 14:
sub_8039D68();
break;
case 15: // Saving adventure
sub_8039DA4();
break;
case 16: // Display "Recieved Wonder Mail was added" and go back to main menu
sub_8039DCC();
break;
case 10:
sub_8039B3C();
break;
case 17: // "Please enter the Wonder Mail Password" Screen
sub_8039D0C();
break;
case PASSWORD_ENTRY_SCREEN: // Password Entry
sub_8039C60();
break;
case PASSWORD_INVALID:
sub_8039DE8();
}
return 0;
}
void nullsub_55()
void CleanWonderMailMenu(void)
{
if (gUnknown_203B3E8 != NULL) {
MemoryFree(gUnknown_203B3E8);
gUnknown_203B3E8 = NULL;
sub_8030DE4(); // Frees 203B324
sub_801B450(); // Frees 203B230
sub_803084C(); // Frees 203B320
sub_801CBB8(); // Frees 203B244
sub_80155F0(); // Frees 203B1FC
sub_8031E10(); // Frees 203B334
}
}
u32 sub_803A1E4(void)
void sub_8039A18(void)
{
return 1;
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
gUnknown_203B3E8->unk24C = 10;
switch(local_8) {
case 3:
case 4:
gUnknown_203B3E8->unk490 = 3;
sub_803A1C0(8);
break;
case 5:
gUnknown_203B3E8->unk490 = 5;
sub_803A1C0(17);
break;
case 0:
case 8:
sub_803A1C0(EXIT_TO_MAIN_MENU);
break;
}
}
}
u32 sub_803A1E8(void)
void sub_8039AA8(void)
{
return 2;
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
switch(local_8){
case 6:
if (gUnknown_203B3E8->unk494 == 1) {
sub_803A1C0(2);
}
else {
sub_803A1C0(12);
}
break;
case 0:
if (gUnknown_203B3E8->unk494 == 1) {
sub_803A1C0(1);
}
else {
sub_803A1C0(4);
}
break;
}
}
}
void sub_803A1EC(void)
void sub_8039B14(void)
{
sub_803A1C0(6);
}
void sub_8039B20(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
sub_803A1C0(9);
}
}
void sub_8039B3C(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
sub_803A1C0(4);
}
}
void sub_8039B58(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0) {
if (gUnknown_203B3E8->unk250 == 0) {
switch(gUnknown_203B3E8->unk24C){
case 9:
sub_803A1C0(7);
break;
case 10:
sub_803A1C0(PASSWORD_SUCCESS);
break;
}
}
else {
sub_8039BAC(gUnknown_203B3E8->unk250);
sub_803A1C0(10);
}
}
}
void sub_8039BAC(u32 arg)
{
switch(arg)
{
case 0:
break;
case 1:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
case 3:
// Incorrect number of GBA Systems
sub_80141B4(&gUnknown_80E7938, 0, 0, 0x101);
break;
case 2:
// No response from friend. Redo from start
sub_80141B4(&gUnknown_80E7994, 0, 0, 0x101);
break;
case 4:
// Sender and receiver in different modes
sub_80141B4(&gUnknown_80E79E4, 0, 0, 0x101);
break;
case 5:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
case 14:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
case 15: // "No response from your friend. Make sure sender and receiver are ready"
sub_80141B4(&gUnknown_80E7A48, 0, 0, 0x101);
break;
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case PASSWORD_SUCCESS:
default:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
}
}
void sub_8039C60(void)
{
int iVar2;
iVar2 = sub_80154F0();
MemoryFill8((u8 *)&gUnknown_203B3E8->unk38, 0, 0x30);
switch(iVar2){
case 3:
sub_80155F0();
ResetUnusedInputStruct();
sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
if ( !sub_803D358(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->unk38) || !sub_80959C0(&gUnknown_203B3E8->unk38) )
{
// Invalid password
sub_803A1C0(PASSWORD_INVALID);
}
else {
// Successful password
// Copy the decoded data to another buffer?
gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk38;
gUnknown_203B3E8->unk498 = 1;
sub_803A1C0(PASSWORD_SUCCESS);
}
break;
case 2:
sub_80155F0();
ResetUnusedInputStruct();
sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
sub_803A1C0(EXIT_TO_MAIN_MENU);
break;
}
}
void sub_8039D0C(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(PASSWORD_ENTRY_SCREEN);
}
}
void sub_8039D28(void)
{
if (sub_802D0E0() == 3) {
gUnknown_203B3E8->unk498 = sub_802D178();
sub_802D184();
if (gUnknown_203B3E8->unk498 != 0) {
sub_803A1C0(0xe);
}
else {
sub_803A1C0(0x10);
}
}
}
void sub_8039D68(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(0xF);
sub_8012574(0); // "Saving Adventure.."
}
}
void sub_8039D88(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(8);
}
}
void sub_8039DA4(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
if(!sub_8012600())
{
sub_8012750();
sub_803A1C0(0x10);
}
}
}
void sub_8039DCC(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(EXIT_TO_MAIN_MENU);
}
}
void sub_8039DE8(void)
{
int iVar2;
// Prompt to re-enter password
if(sub_80144A4(&iVar2) == 0)
{
switch(iVar2)
{
case 6: // Yes
sub_803A1C0(0x11);
break;
case 0: // No
sub_803A1C0(EXIT_TO_MAIN_MENU);
break;
}
}
}
void nullsub_54(void)
{
ResetUnusedInputStruct();
sub_800641C(NULL, 1, 1);
}

View File

@ -1,442 +0,0 @@
#include "global.h"
#include "save.h"
#define EXIT_TO_MAIN_MENU 5
#define PASSWORD_SUCCESS 13
#define PASSWORD_INVALID 19
#define PASSWORD_ENTRY_SCREEN 18
struct unkWonderMailData
{
u8 unk0[20];
};
struct unkStruct_203B3E8
{
// size: 0x49C
u8 unk0; // state variable?
u8 PasswordEntryBuffer[0x36]; // Wonder Mail Buffer...
struct unkWonderMailData unk38; // 0x30 - 0x14
u8 unk38_1[0x30 - 20]; // TODO: split for the ldm/stm stuff (fix dumb hack)
u8 fill68[0x1EC - 0x68];
u32 unk1EC;
u8 fill1F0[0x24C - 0x1F0];
u32 unk24C;
u32 unk250;
u8 fill254[0x3C0 - 0x254];
struct unkWonderMailData unk3C0; // 0x3C0 + 0x14
u8 fill3D0[0x490 - 0x3D4];
u32 unk490;
u32 unk494;
u8 unk498;
u8 unk499;
u8 unk49A;
u8 unk49B;
};
extern u32 sub_8095324(u32);
extern u32 sub_80144A4(s32 *);
extern u32 sub_8011C1C(void);
extern struct unkStruct_203B3E8 *gUnknown_203B3E8;
extern void* MemoryAlloc(u32, u32);
extern void MemoryFree(void *);
extern void MemoryFill8(u8 *dest, u8 value, s32 size);
extern void sub_803A1C0(u8);
extern void ResetUnusedInputStruct(void);
extern void sub_800641C(void *, u32, u32);
extern void sub_8030DE4(void);
extern void sub_801B450(void);
extern void sub_803084C(void);
extern void sub_801CBB8(void);
extern void sub_80155F0(void);
extern void sub_8031E10(void);
extern u32 sub_802D0E0();
extern u8 sub_802D178();
extern void sub_802D184();
extern s32 sub_80154F0();
extern bool8 sub_803D358(u8 *, void *);
extern bool8 sub_80959C0(void *);
extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
void sub_8039BAC(u32);
void sub_8039A18(void);
void sub_8039AA8(void);
void sub_8039B14(void);
void sub_8039B20(void);
void sub_8039B58(void);
void sub_8039D88(void);
void sub_8039D28(void);
void sub_8039D68(void);
void sub_8039DA4(void);
void sub_8039DCC(void);
void sub_8039B3C(void);
void sub_8039D0C(void);
void sub_8039C60(void);
void sub_8039DE8(void);
extern u32 gUnknown_80E7914;
extern u32 gUnknown_80E7938;
extern u32 gUnknown_80E7994;
extern u32 gUnknown_80E79E4;
extern u32 gUnknown_80E7A48;
bool8 sub_8039880(void)
{
return (sub_8095324(1) != 0 || sub_8095324(7) != 0 || sub_8011C1C() == 2);
}
bool8 CreateWonderMailMenu(void)
{
int iVar2;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
gUnknown_203B3E8 = MemoryAlloc(sizeof(struct unkStruct_203B3E8), 8);
MemoryFill8((u8 *)gUnknown_203B3E8, 0, sizeof(struct unkStruct_203B3E8));
for(iVar2 = 0; iVar2 < 0x36; iVar2++){
gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0;
}
gUnknown_203B3E8->unk490 = 3;
gUnknown_203B3E8->unk494 = 2;
gUnknown_203B3E8->unk498 = 1;
gUnknown_203B3E8->unk490 = 5; // ??? Why?
sub_803A1C0(0x11); // 0x11 -> Display "Enter Wonder Mail Password"
return 1;
}
u8 UpdateWonderMailMenu(void)
{
switch(gUnknown_203B3E8->unk0) {
case 4:
sub_8039A18();
break;
case EXIT_TO_MAIN_MENU: // When you exit out of the menu
return 3;
case 8:
sub_8039AA8();
break;
case 11:
break;
case 12:
sub_8039B14();
break;
case 6:
sub_8039B20();
break;
case 9:
sub_8039B58();
break;
case 7:
sub_8039D88();
break;
case PASSWORD_SUCCESS:
sub_8039D28();
break;
case 14:
sub_8039D68();
break;
case 15: // Saving adventure
sub_8039DA4();
break;
case 16: // Display "Recieved Wonder Mail was added" and go back to main menu
sub_8039DCC();
break;
case 10:
sub_8039B3C();
break;
case 17: // "Please enter the Wonder Mail Password" Screen
sub_8039D0C();
break;
case PASSWORD_ENTRY_SCREEN: // Password Entry
sub_8039C60();
break;
case PASSWORD_INVALID:
sub_8039DE8();
}
return 0;
}
void CleanWonderMailMenu(void)
{
if (gUnknown_203B3E8 != NULL) {
MemoryFree(gUnknown_203B3E8);
gUnknown_203B3E8 = NULL;
sub_8030DE4(); // Frees 203B324
sub_801B450(); // Frees 203B230
sub_803084C(); // Frees 203B320
sub_801CBB8(); // Frees 203B244
sub_80155F0(); // Frees 203B1FC
sub_8031E10(); // Frees 203B334
}
}
void sub_8039A18(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
gUnknown_203B3E8->unk24C = 10;
switch(local_8) {
case 3:
case 4:
gUnknown_203B3E8->unk490 = 3;
sub_803A1C0(8);
break;
case 5:
gUnknown_203B3E8->unk490 = 5;
sub_803A1C0(17);
break;
case 0:
case 8:
sub_803A1C0(EXIT_TO_MAIN_MENU);
break;
}
}
}
void sub_8039AA8(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
switch(local_8){
case 6:
if (gUnknown_203B3E8->unk494 == 1) {
sub_803A1C0(2);
}
else {
sub_803A1C0(12);
}
break;
case 0:
if (gUnknown_203B3E8->unk494 == 1) {
sub_803A1C0(1);
}
else {
sub_803A1C0(4);
}
break;
}
}
}
void sub_8039B14(void)
{
sub_803A1C0(6);
}
void sub_8039B20(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
sub_803A1C0(9);
}
}
void sub_8039B3C(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
sub_803A1C0(4);
}
}
void sub_8039B58(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0) {
if (gUnknown_203B3E8->unk250 == 0) {
switch(gUnknown_203B3E8->unk24C){
case 9:
sub_803A1C0(7);
break;
case 10:
sub_803A1C0(PASSWORD_SUCCESS);
break;
}
}
else {
sub_8039BAC(gUnknown_203B3E8->unk250);
sub_803A1C0(10);
}
}
}
void sub_8039BAC(u32 arg)
{
switch(arg)
{
case 0:
break;
case 1:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
case 3:
// Incorrect number of GBA Systems
sub_80141B4(&gUnknown_80E7938, 0, 0, 0x101);
break;
case 2:
// No response from friend. Redo from start
sub_80141B4(&gUnknown_80E7994, 0, 0, 0x101);
break;
case 4:
// Sender and receiver in different modes
sub_80141B4(&gUnknown_80E79E4, 0, 0, 0x101);
break;
case 5:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
case 14:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
case 15: // "No response from your friend. Make sure sender and receiver are ready"
sub_80141B4(&gUnknown_80E7A48, 0, 0, 0x101);
break;
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case PASSWORD_SUCCESS:
default:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
break;
}
}
void sub_8039C60(void)
{
int iVar2;
iVar2 = sub_80154F0();
MemoryFill8((u8 *)&gUnknown_203B3E8->unk38, 0, 0x30);
switch(iVar2){
case 3:
sub_80155F0();
ResetUnusedInputStruct();
sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
if ( !sub_803D358(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->unk38) || !sub_80959C0(&gUnknown_203B3E8->unk38) )
{
// Invalid password
sub_803A1C0(PASSWORD_INVALID);
}
else {
// Successful password
// Copy the decoded data to another buffer?
gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk38;
gUnknown_203B3E8->unk498 = 1;
sub_803A1C0(PASSWORD_SUCCESS);
}
break;
case 2:
sub_80155F0();
ResetUnusedInputStruct();
sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
sub_803A1C0(EXIT_TO_MAIN_MENU);
break;
}
}
void sub_8039D0C(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(PASSWORD_ENTRY_SCREEN);
}
}
void sub_8039D28(void)
{
if (sub_802D0E0() == 3) {
gUnknown_203B3E8->unk498 = sub_802D178();
sub_802D184();
if (gUnknown_203B3E8->unk498 != 0) {
sub_803A1C0(0xe);
}
else {
sub_803A1C0(0x10);
}
}
}
void sub_8039D68(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(0xF);
sub_8012574(0); // "Saving Adventure.."
}
}
void sub_8039D88(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(8);
}
}
void sub_8039DA4(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
if(!sub_8012600())
{
sub_8012750();
sub_803A1C0(0x10);
}
}
}
void sub_8039DCC(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
sub_803A1C0(EXIT_TO_MAIN_MENU);
}
}
void sub_8039DE8(void)
{
int iVar2;
// Prompt to re-enter password
if(sub_80144A4(&iVar2) == 0)
{
switch(iVar2)
{
case 6: // Yes
sub_803A1C0(0x11);
break;
case 0: // No
sub_803A1C0(EXIT_TO_MAIN_MENU);
break;
}
}
}
void nullsub_54(void)
{
}

View File

@ -287,7 +287,7 @@ IntrMain_Buffer = .; /* 202D4B8 */
gIntrTable = .; /* 202D5D8 */
. += 0x18;
gUnknown_202D5F0 = .; /* 202D5F0 */
gIntrCallbacks = .; /* 202D5F0 */
. += 0x18;
gUnknown_202D608 = .; /* 202D608 */
@ -335,10 +335,10 @@ gUnknown_202D6B8 = .; /* 202D6B8 */
gUnknown_202D6B9 = .; /* 202D6B9 */
. += 0x141;
gUnknown_202D7FA = .; /* 202D7FA */
gBldAlpha = .; /* 202D7FA */
. += 0x2;
gUnknown_202D7FC = .; /* 202D7FC */
gBldCnt = .; /* 202D7FC */
. += 0x2;
gUnknown_202D7FE = .; /* 202D7FE */
@ -429,10 +429,10 @@ gAvailablePokemonNames = .; /* 202DF98 */
gUnknown_202DFE8 = .; /* 202DFE8 */
. += 0x50;
gUnknown_202E038 = .; /* 202E038 */
gUnknown_202E038 = .; /* 202E038 ($m2) */
. += 0x50;
gUnknown_202E088 = .; /* 202E088 */
gUnknown_202E088 = .; /* 202E088 ($m3)? */
. += 0xA0;
gUnknown_202E128 = .; /* 202E128 */