Thank You Mail and minor DungeonEnitity Work (#52)

* Thank You Mail: split out code into own file w/ data

* use constant for facingDir
This commit is contained in:
Seth Barberee
2021-09-08 21:32:59 -07:00
committed by GitHub
parent 0313c6bbc5
commit 4eff188244
21 changed files with 3276 additions and 3691 deletions

File diff suppressed because it is too large Load Diff

1050
asm/code_8086A3C.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,450 +0,0 @@
.include "constants/gba_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8039E18
sub_8039E18:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
ldr r1, _08039E38
ldr r0, [r1]
ldrb r0, [r0]
adds r6, r1, 0
cmp r0, 0x13
bls _08039E2E
b _0803A1AA
_08039E2E:
lsls r0, 2
ldr r1, _08039E3C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08039E38: .4byte gUnknown_203B3E8
_08039E3C: .4byte _08039E40
.align 2, 0
_08039E40:
.4byte _08039E90
.4byte _08039EB8
.4byte _0803A1AA
.4byte _08039EC8
.4byte _08039EDC
.4byte _0803A1AA
.4byte _08039FF4
.4byte _08039FA4
.4byte _08039FCC
.4byte _0803A00C
.4byte _0803A1AA
.4byte _0803A1AA
.4byte _0803A1AA
.4byte _08039F04
.4byte _08039F68
.4byte _0803A1AA
.4byte _08039FAC
.4byte _0803A152
.4byte _0803A168
.4byte _0803A18E
_08039E90:
ldr r0, _08039EB0
ldr r3, _08039EB4
movs r2, 0
str r2, [sp]
movs r1, 0x4
str r1, [sp, 0x4]
str r2, [sp, 0x8]
str r2, [sp, 0xC]
adds r1, 0xFD
str r1, [sp, 0x10]
movs r1, 0
movs r2, 0x1
bl sub_8014248
b _0803A1AA
.align 2, 0
_08039EB0: .4byte gUnknown_80E7AC4
_08039EB4: .4byte gUnknown_80E786C
_08039EB8:
ldr r0, _08039EC0
ldr r3, _08039EC4
b _08039EE0
.align 2, 0
_08039EC0: .4byte gUnknown_80E7AE0
_08039EC4: .4byte gUnknown_80E7894
_08039EC8:
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
bl sub_802EF48
b _0803A1AA
_08039EDC:
ldr r0, _08039EFC
ldr r3, _08039F00
_08039EE0:
movs r2, 0
str r2, [sp]
movs r1, 0x4
str r1, [sp, 0x4]
str r2, [sp, 0x8]
str r2, [sp, 0xC]
adds r1, 0xFD
str r1, [sp, 0x10]
movs r1, 0
movs r2, 0x3
bl sub_8014248
b _0803A1AA
.align 2, 0
_08039EFC: .4byte gUnknown_80E7B14
_08039F00: .4byte gUnknown_80E78D8
_08039F04:
ldr r0, [r6]
ldr r2, _08039F3C
adds r1, r0, r2
movs r3, 0xF0
lsls r3, 2
adds r0, r3
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r2,r4}
stm r1!, {r2,r4}
ldr r2, [r6]
ldr r3, _08039F40
adds r0, r2, r3
ldrb r0, [r0]
cmp r0, 0x4
bne _08039F44
movs r4, 0x91
lsls r4, 3
adds r1, r2, r4
subs r3, 0xA2
adds r0, r2, r3
str r0, [r1]
adds r4, 0x4
adds r1, r2, r4
adds r3, 0x28
adds r0, r2, r3
str r0, [r1]
b _08039F54
.align 2, 0
_08039F3C: .4byte 0x00000474
_08039F40: .4byte 0x00000476
_08039F44:
movs r4, 0x91
lsls r4, 3
adds r0, r2, r4
movs r1, 0
str r1, [r0]
ldr r3, _08039F60
adds r0, r2, r3
str r1, [r0]
_08039F54:
ldr r0, [r6]
ldr r4, _08039F64
adds r0, r4
bl sub_802D098
b _0803A1AA
.align 2, 0
_08039F60: .4byte 0x0000048c
_08039F64: .4byte 0x00000474
_08039F68:
ldr r1, [r6]
movs r2, 0x93
lsls r2, 3
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
beq _08039F9C
movs r3, 0x92
lsls r3, 3
adds r0, r1, r3
ldr r0, [r0]
cmp r0, 0x4
bne _08039F84
b _0803A1AA
_08039F84:
cmp r0, 0x4
bgt _08039F8E
cmp r0, 0x3
beq _08039F94
b _0803A1AA
_08039F8E:
cmp r0, 0x5
beq _08039F94
b _0803A1AA
_08039F94:
ldr r0, _08039F98
b _0803A154
.align 2, 0
_08039F98: .4byte gUnknown_80E7B48
_08039F9C:
ldr r0, _08039FA0
b _0803A154
.align 2, 0
_08039FA0: .4byte gUnknown_80E7B48
_08039FA4:
ldr r0, _08039FA8
b _0803A154
.align 2, 0
_08039FA8: .4byte gUnknown_80E7B68
_08039FAC:
ldr r0, [r6]
movs r4, 0x93
lsls r4, 3
adds r0, r4
ldrb r0, [r0]
cmp r0, 0
beq _08039FC4
ldr r0, _08039FC0
b _0803A154
.align 2, 0
_08039FC0: .4byte gUnknown_80E7B88
_08039FC4:
ldr r0, _08039FC8
b _0803A154
.align 2, 0
_08039FC8: .4byte gUnknown_80E7BC8
_08039FCC:
ldr r0, _08039FEC
ldr r3, _08039FF0
movs r2, 0
str r2, [sp]
movs r1, 0x4
str r1, [sp, 0x4]
str r2, [sp, 0x8]
str r2, [sp, 0xC]
adds r1, 0xFD
str r1, [sp, 0x10]
movs r1, 0
movs r2, 0x6
bl sub_8014248
b _0803A1AA
.align 2, 0
_08039FEC: .4byte gUnknown_80E7BEC
_08039FF0: .4byte gUnknown_80E78F8
_08039FF4:
movs r0, 0
bl nullsub_23
ldr r0, _0803A008
movs r1, 0
movs r2, 0
movs r3, 0
bl sub_80141B4
b _0803A1AA
.align 2, 0
_0803A008: .4byte gUnknown_80E7C48
_0803A00C:
ldr r0, [r6]
movs r1, 0x94
lsls r1, 2
mov r8, r1
add r0, r8
movs r1, 0
str r1, [r0]
bl sub_8011830
ldr r0, [r6]
movs r7, 0x93
lsls r7, 2
adds r0, r7
ldr r0, [r0]
bl sub_8037B28
ldr r2, [r6]
mov r3, r8
adds r1, r2, r3
str r0, [r1]
cmp r0, 0
beq _0803A03A
b _0803A14C
_0803A03A:
adds r4, r7, 0
adds r0, r2, r4
ldr r0, [r0]
cmp r0, 0x9
beq _0803A04A
cmp r0, 0xA
beq _0803A0AA
b _0803A0DE
_0803A04A:
movs r5, 0x95
lsls r5, 2
adds r0, r2, r5
movs r1, 0
movs r2, 0xB4
bl MemoryFill8
ldr r0, [r6]
movs r1, 0xEF
lsls r1, 2
adds r0, r1
ldrb r0, [r0]
bl sub_803B344
adds r4, r0, 0
ldr r1, [r4, 0x14]
cmp r1, 0
beq _0803A08C
ldr r0, [r6]
movs r2, 0x9A
lsls r2, 2
adds r0, r2
movs r2, 0x28
bl MemoryCopy8
ldr r0, [r6]
movs r3, 0xA4
lsls r3, 2
adds r0, r3
ldr r1, [r4, 0x18]
movs r2, 0x78
bl MemoryCopy8
_0803A08C:
ldr r1, [r6]
adds r1, r5
adds r0, r4, 0
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r2,r4}
stm r1!, {r2,r4}
ldr r2, [r6]
adds r0, r2, r7
ldr r0, [r0]
adds r1, r2, r5
movs r3, 0xC2
lsls r3, 2
adds r2, r3
b _0803A0D4
_0803A0AA:
movs r4, 0x95
lsls r4, 2
adds r0, r2, r4
movs r1, 0
movs r2, 0xB4
bl MemoryFill8
ldr r0, [r6]
movs r5, 0xC2
lsls r5, 2
adds r0, r5
movs r1, 0
movs r2, 0xB4
bl MemoryFill8
ldr r2, [r6]
adds r0, r2, r7
ldr r0, [r0]
adds r4, r2, r4
adds r2, r5
adds r1, r4, 0
_0803A0D4:
bl sub_8037D64
ldr r1, [r6]
add r1, r8
str r0, [r1]
_0803A0DE:
ldr r4, _0803A134
ldr r2, [r4]
movs r5, 0x94
lsls r5, 2
adds r0, r2, r5
ldr r0, [r0]
cmp r0, 0
bne _0803A14C
movs r1, 0x93
lsls r1, 2
adds r0, r2, r1
ldr r0, [r0]
cmp r0, 0xA
bhi _0803A14C
cmp r0, 0x9
bcc _0803A14C
movs r3, 0x95
lsls r3, 2
adds r1, r2, r3
adds r3, 0xB4
adds r2, r3
bl sub_80381F4
ldr r1, [r4]
adds r1, r5
str r0, [r1]
bl sub_800D588
lsls r0, 24
cmp r0, 0
beq _0803A138
ldr r1, [r4]
movs r4, 0xF0
lsls r4, 2
adds r0, r1, r4
movs r2, 0xC2
lsls r2, 2
adds r1, r2
movs r2, 0xB4
bl memcpy
b _0803A14C
.align 2, 0
_0803A134: .4byte gUnknown_203B3E8
_0803A138:
ldr r1, [r4]
movs r3, 0xF0
lsls r3, 2
adds r0, r1, r3
movs r4, 0x95
lsls r4, 2
adds r1, r4
movs r2, 0xB4
bl memcpy
_0803A14C:
bl xxx_call_start_bg_music
b _0803A1AA
_0803A152:
ldr r0, _0803A160
_0803A154:
ldr r3, _0803A164
movs r1, 0
movs r2, 0
bl sub_80141B4
b _0803A1AA
.align 2, 0
_0803A160: .4byte gUnknown_80E7C98
_0803A164: .4byte 0x00000101
_0803A168:
ldr r0, [r6]
movs r1, 0xF6
lsls r1, 1
adds r0, r1
bl sub_8006518
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r1, [r6]
adds r1, 0x1
movs r0, 0x5
bl sub_80151C0
b _0803A1AA
_0803A18E:
ldr r0, _0803A1B8
ldr r3, _0803A1BC
movs r2, 0
str r2, [sp]
movs r1, 0x4
str r1, [sp, 0x4]
str r2, [sp, 0x8]
str r2, [sp, 0xC]
adds r1, 0xFD
str r1, [sp, 0x10]
movs r1, 0
movs r2, 0x6
bl sub_8014248
_0803A1AA:
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803A1B8: .4byte gUnknown_80E7CC4
_0803A1BC: .4byte gUnknown_80E78F8
thumb_func_end sub_8039E18
.align 2,0

View File

@@ -1,174 +1,5 @@
.section .rodata
.global gUnknown_80DED48
gUnknown_80DED48: @ 80DED48
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0x15, 0x00, 0x04, 0x00
.byte 0x06, 0x00, 0x05, 0x00
.byte 0x05, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_80DED60
gUnknown_80DED60: @ 80DED60
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0x16, 0x00, 0x07, 0x00
.byte 0x06, 0x00, 0x05, 0x00
.byte 0x05, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_80DED78
gUnknown_80DED78: @ 80DED78
.4byte Confirm_80DED98
.byte 0x0b, 0x00, 0x00, 0x00
.4byte Info_80DED90
.byte 0x0c, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global Info_80DED90
Info_80DED90:
.string "Info\0"
.align 2,0
.global Confirm_80DED98
Confirm_80DED98:
.string "Confirm\0"
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_80DEDB8
gUnknown_80DEDB8: @ 80DEDB8
.4byte SendThankYou_Text
.byte 0x01, 0x00, 0x00, 0x00
.4byte GetThankYou_Text
.byte 0x02, 0x00, 0x00, 0x00
.4byte Cancel_80DEDD8
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global Cancel_80DEDD8
Cancel_80DEDD8:
.string "Cancel\0"
.align 2,0
.global GetThankYou_Text
GetThankYou_Text:
.string "Get Thank-You Mail\0"
.align 2,0
.global SendThankYou_Text
SendThankYou_Text:
.string "Send Thank-You Mail\0"
.align 2,0
.global gUnknown_80DEE08
gUnknown_80DEE08: @ 80DEE08
@ Thank You Mail Pelipper Menu
.4byte GameLinkCable_Text
.byte 0x03, 0x00, 0x00, 0x00
.4byte Password_Text
.byte 0x05, 0x00, 0x00, 0x00
.4byte Cancel_80DEDD8
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global Password_Text
Password_Text:
.string "Password\0"
.align 2,0
.global GameLinkCable_Text
GameLinkCable_Text:
.string "Game Link cable\0"
.align 2,0
.global gUnknown_80DEE44
gUnknown_80DEE44: @ 80DEE44
@ Game Link Cable Thank-You Mail Menu
.4byte Yes_80DEE5C
.byte 0x07, 0x00, 0x00, 0x00
.4byte Cancel_80DEDD8
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global Yes_80DEE5C
Yes_80DEE5C:
.string "Yes\0"
.align 2,0
.global gUnknown_80DEE60
gUnknown_80DEE60: @ 80DEE60
.4byte Yes_80DEE5C
.byte 0x07, 0x00, 0x00, 0x00
.4byte No_80DEE78
.byte 0x08, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global No_80DEE78
No_80DEE78:
.string "No\0"
.align 2,0
.global gUnknown_80DEE7C
gUnknown_80DEE7C: @ 80DEE7C
.4byte SendItem_Text
.byte 0x09, 0x00, 0x00, 0x00
.4byte DontSendItemText
.byte 0x0a, 0x00, 0x00, 0x00
.4byte Cancel_80DEDD8
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global DontSendItem_Text
DontSendItemText:
.string "Don~27t Send Item\0"
.align 2,0
.global SendItem_Text
SendItem_Text:
.string "Send Item\0"
.align 2,0
.global gUnknown_80DEEBC
gUnknown_80DEEBC: @ 80DEEBC
.4byte SendWOItem_Text
.byte 0x0a, 0x00, 0x00, 0x00
.4byte Cancel_80DEDD8
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global SendWOItem_Text
SendWOItem_Text:
.string "Send w/o Item\0"
.align 2,0
.global gUnknown_80DEEE4
gUnknown_80DEEE4: @ 80DEEE4
.4byte Yes_80DEE5C
.byte 0x07, 0x00, 0x00, 0x00
.4byte No_80DEE78
.byte 0x08, 0x00, 0x00, 0x00
.4byte Cancel_80DEDD8
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.include "data/text/wonder_mail_2.inc"
.global gUnknown_80DFBD0
gUnknown_80DFBD0: @ 80DFBD0
.byte 0x00, 0x00, 0x00, 0x00
@@ -192,7 +23,7 @@ gUnknown_80DFBEC: @ 80DFBEC
.byte 0x02, 0x00, 0x02, 0x00
.byte 0x18, 0x00, 0x0e, 0x00
.byte 0x0e, 0x00, 0x00, 0x00
.byte 0xe8, 0xfb, 0x0d, 0x08
.4byte gUnknown_80DFBE8
.global gUnknown_80DFC04

View File

@@ -1537,7 +1537,7 @@ gUnknown_81161E8: @ 81161E8
.byte 0x01, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.4byte CleanFelicityBank
.4byte sub_80163A0
.4byte FelicityBankCallback
.global gUnknown_81161F8
gUnknown_81161F8: @ 81161F8
@@ -1577,9 +1577,9 @@ gUnknown_8116238: @ 8116238
.global gUnknown_8116248
gUnknown_8116248: @ 8116248
.byte 0x01, 0x00, 0x00, 0x00
.4byte sub_8029B50
.4byte sub_8029E60
.4byte sub_8029C98
.4byte CreateThankYouMailPelipper
.4byte CleanThankYouMailPelipper
.4byte ThankYouMailPelipperCallback
.global gUnknown_8116258
gUnknown_8116258: @ 8116258

View File

@@ -1,248 +0,0 @@
gUnknown_80DEF04:: @ 80DEF04
.string " ...Oh?\n"
.string "Something~27s gone wrong.\0"
.align 2, 0
gUnknown_80DEF28:: @ 80DEF28
.string " ...Oh? The number of linked\n"
.string "GBA systems is incorrect.\n"
.string "Please try again from the start.\0"
.align 2, 0
gUnknown_80DEF80:: @ 80DEF80
.string " ...Oh? It looks like your\n"
.string "friend chose a different mode.\n"
.string "Please try again from the start.\0"
.align 2, 0
gUnknown_80DEFDC:: @ 80DEFDC
.string " ...Oh? It looks like your\n"
.string "storage space is full. Please clear some\n"
.string "space and try again from the start.\0"
.align 2, 0
gUnknown_80DF044:: @ 80DF044
.string " ...Oh?\n"
.string "I think you~27ve received this mail before.\n"
.string "You can~27t get the same mail twice.\0"
.align 2, 0
gUnknown_80DF0A0:: @ 80DF0A0
.string " ...Oh?\n"
.string "I don~27t think you~27re eligible to receive\n"
.string "this mail.\0"
.align 2, 0
gUnknown_80DF0E0:: @ 80DF0E0
.string " ...Oh?\n"
.string "There is no room to receive new mail.\n"
.string "Please delete some mail and try again.\0"
.align 2, 0
gUnknown_80DF138:: @ 80DF138
.string " ...Oh? Your friend didn~27t\n"
.string "follow through on their side.\n"
.string "Please try again from the start.\0"
.align 2, 0
gUnknown_80DF194:: @ 80DF194
.string " Your #CGThank-You Mail#R\n"
.string "has been sent.\0"
.align 2, 0
gUnknown_80DF1C0:: @ 80DF1C0
.string " ...Oh?\n"
.string "This password appears to be wrong.\n"
.string "Would you like to try again?\0"
.align 2, 0
gUnknown_80DF208:: @ 80DF208
.string " ...Oh? This password doesn~27t\n"
.string "appear to be for a #CGThank-You Mail#R.\0"
.align 2, 0
gUnknown_80DF250:: @ 80DF250
.string ": This is the counter for\n"
.string "#CGThank-You Mail#R.#P"
.string ": Oh~2c hi~2c #CN%s#R.\n"
.string "I~27ve been waiting for you. You wanted me\n"
.string "to process a #CGThank-You Mail#R?#P"
.string ": Let me get on it right away.\0"
.align 2, 0
gUnknown_80DF304:: @ 80DF304
.string " Is it OK to send this\n"
.string "#CGThank-You Mail#R?\0"
.align 2, 0
gUnknown_80DF330:: @ 80DF330
.string " Please choose the\n"
.string "#CGThank-You Mail#R that you want to\n"
.string "send to your friend.\0"
.align 2, 0
gUnknown_80DF380:: @ 80DF380
.string " OK. Please enter the\n"
.string "#CGThank-You Mail password#R.\0"
.align 2, 0
gUnknown_80DF3B4:: @ 80DF3B4
.string " Please give this password\n"
.string "to the friend that rescued your team.#P"
.string " I also must save your\n"
.string "adventure.\0"
.align 2, 0
gUnknown_80DF418:: @ 80DF418
.string " OK~2c here is your\n"
.string "#CGThank-You Mail password#R.\0"
.align 2, 0
gUnknown_80DF44C:: @ 80DF44C
.string " I need to save your\n"
.string "adventure.\0"
.align 2, 0
gUnknown_80DF46C:: @ 80DF46C
.string " There we go.\n"
.string "I~27m all done.#P"
.string " Doesn~27t it feel great to\n"
.string "be appreciated for doing something good?\n"
.string "Please keep up your rescue work!\0"
.align 2, 0
gUnknown_80DF4F4:: @ 80DF4F4
.string " A #CGThank-You Mail#R has\n"
.string "arrived from your friend for your rescue\n"
.string "mission.\0"
.align 2, 0
gUnknown_80DF544:: @ 80DF544
.string "#+Communicating...\n"
.string "#+Please wait with the power on.\n"
.string "#+To cancel~2c press {B_BUTTON}.\0"
.align 2, 0
gUnknown_80DF594:: @ 80DF594
.string " There. I~27ve sent your\n"
.string "#CGThank-You Mail#R.\n"
.string "I need to save your adventure.\0"
.align 2, 0
gUnknown_80DF5E4:: @ 80DF5E4
.string " Please connect the GBA\n"
.string "systems with a #CGGame Link cable#R.\n"
.string "Is your friend also ready?\0"
.align 2, 0
gUnknown_80DF63C:: @ 80DF63C
.string " There~2c all done.\n"
.string "#CN%s#R~2c I hope your friend\n"
.string "appreciates your sense of gratitude.\0"
.align 2, 0
gUnknown_80DF694:: @ 80DF694
.string " The item you~27ve chosen\n"
.string "here can~27t be exchanged later.\n"
.string "Are you certain this item is OK?\0"
.align 2, 0
gUnknown_80DF6F0:: @ 80DF6F0
.string " I~27ve saved your adventure. \0"
.align 2, 0
gUnknown_80DF710:: @ 80DF710
.string " OK~2c please choose\n"
.string "the item to be sent.\0"
.align 2, 0
gUnknown_80DF73C:: @ 80DF73C
.string " ...Oh?\n"
.string "Your storage space is empty.\n"
.string "What would you like to do?\0"
.align 2, 0
gUnknown_80DF77C:: @ 80DF77C
.string " Would you like to choose\n"
.string "a #CGreward item#R from storage and\n"
.string "send it with your mail?\0"
.align 2, 0
gUnknown_80DF7D4:: @ 80DF7D4
.string " ...Oh?\n"
.string "You~27ve already attached a #CGreward item#R\n"
.string "to this mail.#P"
.string " I~27m sorry~2c but once an item\n"
.string "has been attached to mail~2c it can~27t be\n"
.string "exchanged.\0"
.align 2, 0
gUnknown_80DF870:: @ 80DF870
.string " Would you like to send it\n"
.string "again with the item you chose before?\0"
.align 2, 0
gUnknown_80DF8B4:: @ 80DF8B4
.string " ...Oh?\n"
.string "You don~27t seem to have a #CGThank-You Mail#R.\0"
.align 2, 0
gUnknown_80DF8EC:: @ 80DF8EC
.string " Hello.\n"
.string "I handle #CGThank-You Mail#R.\n"
.string "How may I serve you?\0"
.align 2, 0
gUnknown_80DF928:: @ 80DF928
.string " May I help you with\n"
.string "anything else?\0"
.align 2, 0
gUnknown_80DF94C:: @ 80DF94C
.string " Please come see me\n"
.string "anytime.\0"
.align 2, 0
gUnknown_80DF96C:: @ 80DF96C
.string " How would you like to send\n"
.string "your #CGThank-You Mail#R?\0"
.align 2, 0
gUnknown_80DF9A4:: @ 80DF9A4
.string " How would you like to\n"
.string "receive your friend~27s #CGThank-You Mail#R?\0"
.string "pksdir0\0"
.align 2, 0
gUnknown_80DF9F0:: @ 80DF9F0
.string "????\0"
.align 2, 0
gUnknown_80DF9F8:: @ 80DF9F8
.string " Oh~2c hello!\n"
.string "Your rescue mission went well~2c didn~27t it?\n"
.string "I wouldn~27t expect any less~2c #CG%s#R!#P"
.string " Well~2c well!\n"
.string "Here is your reward from the Pokémon\n"
.string "Rescue Organization!\0"
.align 2, 0
gUnknown_80DFAA8:: @ 80DFAA8
.string " I hope you will keep on\n"
.string "rescuing your friends in\n"
.string "dire straits.#P"
.string " And now~2c I must save\n"
.string "your adventure.\0"
.align 2, 0
gUnknown_80DFB14:: @ 80DFB14
.string " Oh~2c yes~2c that~27s right.\n"
.string "Please don~27t forget to send an #CGA-OK Mail#R\n"
.string "to the friend you just rescued.#P"
.string " Please give me a shout if\n"
.string "you would like to send #CGA-OK Mail#R.\0"
.align 2, 0
.string "pksdir0\0"
.align 2, 0

View File

@@ -3,24 +3,35 @@
struct subStruct_8048524
{
u8 fill0[0x6];
u8 unk6;
u8 unk7;
u8 fill8[0xE - 0x8];
/* 0xE */ s16 HP; // HP??
s16 unk10;
u8 fill12[0x46 - 0x12];
s8 unk46;
u8 fill47[0xA4 - 0x47];
u8 unkA4;
/* 0x0 */ u8 unk0;
/* 0x1 */ u8 unk1;
/* 0x2 */ s16 species;
/* 0x4 */ s16 transformSpecies;
/* 0x6 */ bool8 isEnemy;
/* 0x7 */ bool8 isLeader;
/* 0x8 */ u8 shopKeeper;
/* 0x9 */ u8 level;
/* 0xA */ u16 partyIndex;
/* 0xC */ u16 IQ;
/* 0xE */ s16 HP;
/* 0x10 */ s16 maxHP;
/* 0x12 */ s16 bossHPBackup;
u8 fill14[0x46 - 0x14];
/* 0x46 */ s8 facingDir;
u8 fill47[0x8C - 0x47];
u8 unk8C[4];
u8 fill90[0xA4 - 0x90];
/* 0xA4 */ u8 clientFlags;
u8 fillA5[0xAC - 0xA5];
/* 0xAC */ u8 statusCondition;
u8 fillAD[0xFB - 0xAD];
u8 fillAD[0xF7 - 0xAD];
/* 0xF7 */ bool8 isBoss;
u8 fillF8[0xFB - 0xF8];
u8 unkFB;
u8 fillFC[0x112 - 0xFC];
u8 unk112;
/* 0x112 */ u8 stockpileCount;
u8 fill113[0x13C - 0x113];
u32 unk13C;
/* 0x13C */ u32 belly;
u8 fill140[0x15C - 0x140];
u8 unk15C;
u8 unk15D;

View File

@@ -16,7 +16,11 @@ struct unkStruct_203B418
u8 unk11;
u8 fill12[0x16D - 0x12];
u8 unk16D;
u8 fill16E[0xE23C - 0x16E];
u8 fill16E[0x65C - 0x16E];
u8 unk65C;
u8 fill65D[0x66A - 0x65D];
u16 unk66A;
u8 fill66B[0xE23C - 0x66C];
s16 unkE23C;
s16 unkE23E;
u8 fillE240[0xE265 - 0xE240];

View File

@@ -90,8 +90,8 @@ struct WonderMailStruct_203B2C4
u8 unk42E;
u32 unk430;
u8 formattedString[0x100];
s32 unk534;
u32 unk538;
s32 wonderMailMethod;
u32 wonderMailMode;
u8 unk53C[0xA];
u32 unk548;
u32 unk54C;
@@ -110,5 +110,16 @@ struct WonderMailStruct_203B2C4
void sub_8028B04(u32 r0);
enum WonderMailMode {
WONDER_MAIL_MODE_SEND = 1,
WONDER_MAIL_MODE_RECEIVE = 2,
};
enum WonderMailMethod {
WONDER_MAIL_GAME_LINK = 3,
WONDER_MAIL_PASSWORD = 5,
};
#endif

View File

@@ -122,6 +122,7 @@ SECTIONS {
src/wonder_mail_pre.o(.text);
asm/wonder_mail.o(.text);
src/wonder_mail.o(.text);
src/thank_you_wonder_mail.o(.text);
src/wonder_mail_2.o(.text);
asm/wonder_mail_2.o(.text);
src/wonder_mail_3.o(.text);
@@ -155,7 +156,6 @@ SECTIONS {
src/rescue_password_menu_1.o(.text);
src/load_screen.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);
@@ -186,6 +186,8 @@ SECTIONS {
asm/code_807001C.o(.text);
src/code_80869E4.o(.text);
asm/code_80869E4.o(.text);
src/code_8086A3C.o(.text);
asm/code_8086A3C.o(.text);
src/code_8057824_1.o(.text);
asm/jirachi_wish.o(.text);
src/code_80521D0_1.o(.text);
@@ -307,6 +309,8 @@ SECTIONS {
src/save.o(.rodata);
data/data_80D47B8.o(.rodata);
src/wonder_mail.o(.rodata);
src/thank_you_wonder_mail.o(.rodata);
src/wonder_mail_2.o(.rodata);
data/data_80DED44.o(.rodata);
src/post_office_guide.o(.rodata);
data/data_80E1F30.o(.rodata);

View File

@@ -289,7 +289,7 @@ void sub_8041D5C(struct DungeonEntity *r0)
{
return;
}
sub_803ED30(r0->unk70->unk112 , r0, 1, 0xB);
sub_803ED30(r0->unk70->stockpileCount , r0, 1, 0xB);
}
void sub_8041D84(struct DungeonEntity * r0)
@@ -675,7 +675,7 @@ void sub_8042208(struct DungeonEntity *r0, u8 r1)
void sub_8042238(u32 r0, struct DungeonEntity *r1)
{
if(r1->unk70->unk6 != 0)
if(r1->unk70->isEnemy)
PlaySoundEffect(0x157);
else
PlaySoundEffect(0x156);

View File

@@ -106,7 +106,7 @@ extern void sub_8083ED8(u32);
extern u32 sub_803F994();
extern s32 sub_803F9B0();
extern void sub_803F878(u32, s32);
extern void sub_8086A70(struct DungeonEntity *, u32, u32);
extern void SetupBossFightHP(struct DungeonEntity *, u32, u32);
extern void sub_8085C54(u32, u32, u32, u32, u32);
extern void sub_803E9D0(void);
extern void DeoxysScreenFlash(void);
@@ -341,7 +341,7 @@ void LugiaPreFightDialogue(void)
sub_80861D4(uVar3,7,0);
sub_8052910(&gUnknown_8106024);
sub_808BFA0();
sub_8086A70(uVar3,800,0x20);
SetupBossFightHP(uVar3,800,0x20);
sub_8083E88(0x23);
sub_80858AC(&iVar2->posPixelX,0x10);
}
@@ -491,7 +491,7 @@ void KyogrePreFightDialogue(void)
// power!
sub_8052910(&gUnknown_810627C);
sub_803E708(10,0x46);
sub_8086A70(uVar3,600,0xb);
SetupBossFightHP(uVar3,600,0xb);
sub_8083E88(0x23);
sub_80858AC(&iVar2->posPixelX,0x10);
}
@@ -633,7 +633,7 @@ void sub_808C5A0(struct DungeonEntity *r0)
void sub_808C5AC(struct DungeonEntity *r0)
{
sub_8086A70(r0, 0x3b6, 0x20);
SetupBossFightHP(r0, 0x3b6, 0x20);
}
void sub_808C5C0(void)
@@ -1122,7 +1122,7 @@ void sub_808C998(void)
void sub_808C9B0(struct DungeonEntity *param_1)
{
param_1->unk70->unk46 = 4;
param_1->unk70->facingDir = NORTH;
sub_806CE68(param_1, 4);
}

View File

@@ -234,7 +234,7 @@ extern void sub_80862BC(struct DungeonEntity *);
extern void sub_8086448();
extern void SpriteLookAroundEffect();
extern u32 sub_80861F8(u32, struct DungeonEntity *, u32);
extern void sub_8086A70(struct DungeonEntity *, u32, u32);
extern void SetupBossFightHP(struct DungeonEntity *, u32, u32);
extern void sub_80858AC(u32 *, u32);
extern void sub_8097FA8(u32);
@@ -386,7 +386,7 @@ void ZapdosReFightDialogue(void)
sub_8052910(&gUnknown_81018EC);
sub_808775C(2);
sub_8052910(&gUnknown_8101918);
sub_8086A70(uVar2,300,0xb);
SetupBossFightHP(uVar2,300,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -414,7 +414,7 @@ void ZapdosPostStoryPreFightDialogue(void)
sub_808775C(2);
sub_8052910(&gUnknown_8101A04);
sub_803E708(10,0x46);
sub_8086A70(uVar3,300,0xb);
SetupBossFightHP(uVar3,300,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -592,7 +592,7 @@ void MoltresPreFightDialogue(void)
sub_8087DE8(0xb,6);
sub_8052910(&gUnknown_8102108);
sub_803E708(10,0x46);
sub_8086A70(uVar3,400,0xb);
SetupBossFightHP(uVar3,400,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -635,7 +635,7 @@ void MoltresReFightDialogue(void)
sub_803E708(10,0x46);
sub_8052910(&gUnknown_81022F8);
sub_803E708(10,0x46);
sub_8086A70(uVar3,400,0xb);
SetupBossFightHP(uVar3,400,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -673,7 +673,7 @@ void MoltresPostStoryPreFightDialogue(void)
sub_8087DE8(0xb,6);
sub_8052910(&gUnknown_8102454);
sub_803E708(10,0x46);
sub_8086A70(uVar3,400,0xb);
SetupBossFightHP(uVar3,400,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1021,7 +1021,7 @@ void ArticunoPreFightDialogue(void)
sub_8052910(&gUnknown_81028B8);
sub_806CDD4(uVar3,0xf,0);
sub_803E708(0x10,0x46);
sub_8086A70(uVar3,0x1c2,0xb);
SetupBossFightHP(uVar3,0x1c2,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1043,7 +1043,7 @@ void ArticunoReFightDialogue(void)
sub_8052910(&gUnknown_8102948);
sub_806CDD4(uVar2,0xf,0);
sub_803E708(0x28,0x46);
sub_8086A70(uVar2,0x1c2,0xb);
SetupBossFightHP(uVar2,0x1c2,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1079,7 +1079,7 @@ void ArticunoPostStoryPreFightDialogue(void)
sub_8052910(&gUnknown_8102A74);
sub_806CDD4(uVar3,0xf,0);
sub_803E708(0x28,0x46);
sub_8086A70(uVar3,0x1c2,0xb);
SetupBossFightHP(uVar3,0x1c2,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1342,7 +1342,7 @@ void GroudonPreFightDialogue(void)
sub_8086A54(uVar4);
sub_8085930(4);
sub_8086764();
sub_8086A70(uVar4,500,0xb);
SetupBossFightHP(uVar4,500,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1374,7 +1374,7 @@ void GroudonReFightDialogue(void)
sub_8086A54(uVar2);
sub_8085930(4);
sub_8086764();
sub_8086A70(uVar2,500,0xb);
SetupBossFightHP(uVar2,500,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1402,7 +1402,7 @@ void GroudonPostStoryPreFightDialogue(void)
sub_8088CA0();
sub_8052910(&gUnknown_810347C);
sub_803E708(10,0x46);
sub_8086A70(uVar3,500,0xb);
SetupBossFightHP(uVar3,500,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1843,7 +1843,7 @@ void RayquazaPreFightDialogue(void)
sub_8052910(&gUnknown_81037D4);
RayquazaScreenFlash();
sub_8052910(&gUnknown_8103820);
sub_8086A70(uVar3,600,0x20);
SetupBossFightHP(uVar3,600,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1867,7 +1867,7 @@ void RayquazaReFightDialogue(void)
sub_8052910(&gUnknown_81038A8);
RayquazaScreenFlash();
sub_8052910(&gUnknown_81038F8);
sub_8086A70(uVar2,600,0x20);
SetupBossFightHP(uVar2,600,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1893,7 +1893,7 @@ void RayquazaPostStoryPreFightDialogue(void)
sub_8052910(&gUnknown_8103AE4);
RayquazaScreenFlash();
sub_8052910(&gUnknown_8103B30);
sub_8086A70(uVar3,600,0xb);
SetupBossFightHP(uVar3,600,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1984,7 +1984,7 @@ void sub_8089788(struct DungeonEntity *param_1, u8 param_2, s32 param_3)
for(iVar3 = 0; iVar3 < 0x10; iVar3++)
{
iVar2 = gUnknown_203B418->unk1358C[iVar3];
if ((sub_80450E0(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->unk70->unkA4 == param_2)) {
if ((sub_80450E0(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->unk70->clientFlags == param_2)) {
return;
}
}
@@ -2140,7 +2140,7 @@ void MewtwoPreFightDialogue(void)
MewtwoScreenFlash();
sub_8052910(&gUnknown_8104008);
sub_803E708(10,0x46);
sub_8086A70(uVar2,900,0x20);
SetupBossFightHP(uVar2,900,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2166,7 +2166,7 @@ void MewtwoPreFightDialogue1(void)
sub_8052910(&gUnknown_81040CC);
MewtwoScreenFlash();
sub_8052910(&gUnknown_8104114);
sub_8086A70(uVar3,900,0x20);
SetupBossFightHP(uVar3,900,0x20);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2279,7 +2279,7 @@ void EnteiPreFightDialogue(void)
EnteiScreenFlash();
sub_8052910(&gUnknown_81041F8);
sub_803E708(10,70);
sub_8086A70(uVar2,600,0xb);
SetupBossFightHP(uVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2297,7 +2297,7 @@ void EnteiPreFightDialogue1(void)
EnteiScreenFlash();
sub_8052910(&gUnknown_81042B8);
sub_803E708(10,70);
sub_8086A70(uVar2,600,0xb);
SetupBossFightHP(uVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2319,7 +2319,7 @@ void EnteiPreFightDialogue2(void)
EnteiScreenFlash();
sub_8052910(&gUnknown_81043C0);
sub_803E708(10,70);
sub_8086A70(uVar3,600,0xb);
SetupBossFightHP(uVar3,600,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2432,7 +2432,7 @@ void RaikouPreFightDialogue(void)
RaikouScreenFlash();
sub_8052910(&gUnknown_81045B0);
sub_803E708(10,70);
sub_8086A70(uVar2,0x28a,0xb);
SetupBossFightHP(uVar2,0x28a,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2452,7 +2452,7 @@ void RaikouPreFightDialogue1(void)
RaikouScreenFlash();
sub_8052910(&gUnknown_81046A0);
sub_803E708(10,70);
sub_8086A70(uVar3,0x28a,0xb);
SetupBossFightHP(uVar3,0x28a,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
@@ -2475,7 +2475,7 @@ void RaikouPreFightDialogue2(void)
RaikouScreenFlash();
sub_8052910(&gUnknown_810476C);
sub_803E708(10,70);
sub_8086A70(uVar3,0x28a,0xb);
SetupBossFightHP(uVar3,0x28a,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2590,7 +2590,7 @@ void SuicunePreFightDialogue(void)
SuicuneScreenFlash();
sub_8052910(&gUnknown_8104914);
sub_803E708(10,70);
sub_8086A70(uVar2,0x28a,0xb);
SetupBossFightHP(uVar2,0x28a,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2607,7 +2607,7 @@ void SuicunePreFightDialogue1(void)
SuicuneScreenFlash();
sub_8052910(&gUnknown_8104998);
sub_803E708(10,70);
sub_8086A70(uVar2,0x28a,0xb);
SetupBossFightHP(uVar2,0x28a,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2628,7 +2628,7 @@ void SuicunePreFightDialogue2(void)
SuicuneScreenFlash();
sub_8052910(&gUnknown_8104A9C);
sub_803E708(10,70);
sub_8086A70(uVar3,0x28a,0xb);
SetupBossFightHP(uVar3,0x28a,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2771,7 +2771,7 @@ void HoOhPreFightDialogue(void)
HoOhScreenFlash();
sub_8052910(&gUnknown_8104CE0);
sub_803E708(10,70);
sub_8086A70(uVar2,800,0x20);
SetupBossFightHP(uVar2,800,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2807,7 +2807,7 @@ void HoOhPreFightDialogue1(void)
HoOhScreenFlash();
sub_8052910(&gUnknown_8104E0C);
sub_803E708(10,70);
sub_8086A70(uVar3,800,0x20);
SetupBossFightHP(uVar3,800,0x20);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2943,7 +2943,7 @@ void LatiosPreFightDialogue(void)
LatiosScreenFlash();
sub_8052910(&gUnknown_8104F30);
sub_803E708(10,70);
sub_8086A70(iVar2,600,0xb);
SetupBossFightHP(iVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2962,7 +2962,7 @@ void LatiosReFightDialogue(void)
LatiosScreenFlash();
sub_8052910(&gUnknown_8104F30);
sub_803E708(10,70);
sub_8086A70(uVar2,600,0xb);
SetupBossFightHP(uVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -3362,26 +3362,26 @@ void sub_808B1CC(u8 r0)
void sub_808B2B0(struct DungeonEntity *r0)
{
r0->unk70->unk46 = 4;
r0->unk70->facingDir = NORTH;
sub_806CE68(r0, 4);
}
void sub_808B2C4(struct DungeonEntity *r0)
{
sub_8086A70(r0, 0xE1 << 1, 0xB);
SetupBossFightHP(r0, 0xE1 << 1, 0xB);
}
void sub_808B2D4(struct DungeonEntity *r0)
{
sub_8086A70(r0, 0xE1 << 1, 0xB);
SetupBossFightHP(r0, 0xE1 << 1, 0xB);
}
void sub_808B2E4(struct DungeonEntity *r0)
{
sub_8086A70(r0, 0xE1 << 1, 0xB);
SetupBossFightHP(r0, 0xE1 << 1, 0xB);
}
void sub_808B2F4(void)
@@ -3540,7 +3540,7 @@ void JirachiPreFightDialogue(void)
sub_803E708(10,70);
sub_8052910(&gUnknown_810550C);
sub_803E708(10,70);
sub_8086A70(uVar2,0x15e,0x20);
SetupBossFightHP(uVar2,0x15e,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}

View File

@@ -478,7 +478,7 @@ void SpriteLookAroundEffect(struct DungeonEntity *r0)
s8 r4;
s8 r3;
r4 = sub_8002984(r0->unk70->unk46, 4);
r4 = sub_8002984(r0->unk70->facingDir, 4);
sub_80869E4(r0, 4, 2, r4);

124
src/code_8086A3C.c Normal file
View File

@@ -0,0 +1,124 @@
#include "global.h"
#include "dungeon_entity.h"
#include "gUnknown_203B418.h"
#include "pokemon.h"
extern struct unkStruct_203B418 *gUnknown_203B418;
extern void sub_807191C(struct DungeonEntity *);
extern struct DungeonEntity *sub_8085480(void);
extern struct DungeonEntity *sub_8085680(u32);
extern void sub_808EC94(u8 *param_1, u8 param_2);
extern void sub_8097FF8(void);
extern u8 sub_8044B28(void);
extern u8 HasRecruitedMon(u32);
extern u8 gUnknown_202E038[];
extern void sub_8083E88(u32);
extern void sub_8085374();
extern void sub_80854D4();
extern void sub_8085930(u32);
extern void sub_80855E4(void *);
extern void sub_8085860(s32 r0, u32 r1);
extern void sub_8068FE0(struct DungeonEntity *, u32, u32);
extern void sub_8097FA8(u32);
void sub_8086A3C(struct DungeonEntity *param_1)
{
param_1->unk70->unk15C = 1;
param_1->unk70->unk15E = 1;
}
void sub_8086A54(struct DungeonEntity *param_1)
{
param_1->unk70->unk15C = 1;
param_1->unk70->unk15E = 0;
}
void SetupBossFightHP(struct DungeonEntity *param_1, s32 newHP, u16 param_3)
{
// NOTE: needed two of these to match.. very dumb
struct subStruct_8048524 *iVar1;
struct subStruct_8048524 *iVar2;
iVar1 = param_1->unk70;
iVar2 = param_1->unk70;
iVar1->isBoss = TRUE;
// BUG: Source of the Reviver Seed Boss Glitch
//
// Video to demonstration:
// https://www.youtube.com/watch?v=rHu7EehrZ68
iVar1->bossHPBackup = iVar1->maxHP;
if (newHP != 0) {
iVar1->maxHP = newHP;
iVar1->HP = newHP;
}
gUnknown_203B418->unk66A = param_3;
sub_808EC94(iVar2->unk8C,iVar2->isBoss);
sub_807191C(param_1);
}
void sub_8086AC0(void)
{
if(!sub_8044B28())
if(gUnknown_203B418->unk2 == 0)
sub_8097FF8();
}
u8 sub_8086AE4(s16 _index)
{
s32 pokeIndex = _index;
if(gUnknown_203B418->unk65C == 0)
return 1;
else
return HasRecruitedMon(pokeIndex);
}
void sub_8086B14(void)
{
struct DungeonEntity * iVar1;
struct DungeonEntity * iVar2;
struct DungeonEntity * uVar3;
iVar1 = sub_8085480();
iVar2 = sub_8085680(4);
uVar3 = sub_8085680(3);
sub_8083E88(0x72);
sub_8085374();
sub_80854D4();
sub_8085930(4);
sub_80855E4(sub_8086A3C);
sub_8086A3C(uVar3);
iVar2->unk70->unk15C = 1;
sub_8085860(iVar1->posWorldX,iVar1->posWorldY + -2);
CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_DIGLETT);
CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_SKARMORY);
}
void sub_8086B94(void)
{
struct DungeonEntity * iVar1;
struct DungeonEntity * iVar2;
struct DungeonEntity * uVar3;
iVar1 = sub_8085480();
iVar2 = sub_8085680(4);
uVar3 = sub_8085680(3);
sub_8068FE0(uVar3,0x21c,0);
sub_8068FE0(iVar2,0x21c,0);
sub_80854D4();
sub_8085930(4);
sub_8085860(iVar1->posWorldX,iVar1->posWorldY);
}
void sub_8086BDC(char param_1, s32 param_2)
{
if ((((param_2 * 0x1000000) - 0x1000000U) >> 0x18 < 2) && (param_1 == 3)) {
sub_8097FA8(1);
gUnknown_203B418->unk2 = 1;
}
}

View File

@@ -2,17 +2,6 @@
#include "input.h"
#include "text.h"
extern u8 *gUnknown_203B3E8;
extern void nullsub_54();
extern void sub_8039E18();
void SetWonderMailMainMenuState(u8 r0)
{
*gUnknown_203B3E8 = r0;
nullsub_54();
sub_8039E18();
}
u32 CreateDualSlotMenu(void)
{
return 1;

View File

@@ -55,7 +55,7 @@ u32 CreateFelicityBank(s32 param_1)
return 1;
}
u32 sub_80163A0(void)
u32 FelicityBankCallback(void)
{
switch(gUnknown_203B204->currState) {
case 1:

1723
src/thank_you_wonder_mail.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -9,8 +9,6 @@
#include "sub_8095228.h"
#include "wonder_mail.h"
extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
struct unkStruct_203B2C8
{
// size: 0x140
@@ -90,325 +88,61 @@ extern struct UnkTextStruct2 gUnknown_80DFBD0;
extern struct unkStruct_203B2C8 *gUnknown_203B2C8;
extern struct MenuItem gUnknown_80DED78[];
extern struct MenuItem gUnknown_80DEDB8[];
extern u8 gUnknown_80DF6F0[];
extern u8 gUnknown_80DF44C[];
extern u8 gUnknown_80DF380[];
extern u8 gUnknown_80DF544[];
extern u8 gUnknown_80DF96C[];
extern u8 gUnknown_80DF9A4[];
extern u8 gUnknown_80DF4F4[];
extern u8 gUnknown_80DF46C[];
extern u8 gUnknown_80DF94C[];
extern u8 gUnknown_80DF928[];
extern u8 gUnknown_80DF8EC[];
extern u8 gUnknown_80DF7D4[];
extern u8 gUnknown_80DF8B4[];
extern u8 gUnknown_80DF3B4[];
extern u8 gUnknown_80DF63C[];
extern u8 gUnknown_80DF250[];
extern u8 gUnknown_80DF594[];
extern u8 gUnknown_80DF870[];
extern u8 gUnknown_80DF77C[];
extern u8 gUnknown_80DF5E4[];
extern u8 gUnknown_80DF710[];
extern u8 gUnknown_80DF694[];
extern u8 gUnknown_80DF73C[];
extern u8 gUnknown_80DF330[];
extern u8 gUnknown_80DF418[];
extern u8 gUnknown_80DF304[];
extern struct UnkTextStruct2 gUnknown_80DED60;
extern struct UnkTextStruct2 gUnknown_80DED48;
extern struct MenuItem gUnknown_80DEE44[];
extern struct MenuItem gUnknown_80DEE08[];
extern struct MenuItem gUnknown_80DEE7C[];
extern struct MenuItem gUnknown_80DEEBC[];
extern struct MenuItem gUnknown_80DEEE4[];
extern struct MenuItem gUnknown_80DEE60[];
extern void sub_8031D70(u8, u32);
extern u8 sub_809539C(u32, u32);
extern u8 sub_800D588(void);
extern u32 sub_803C200(u8 *, u32);
extern struct PokemonStruct *sub_808D33C(void);
extern void sub_802F204(u8 *, u32);
extern void sub_80151C0(u32, u8 *);
extern void xxx_call_start_bg_music(void);
extern void sub_803092C(void);
extern void sub_801CCD8(void);
extern void sub_8011830(void);
extern void nullsub_23(u32);
extern void sub_80922B4(u8 *, u8 *, u32);
extern s32 sub_8037B28(u32);
extern u32 sub_8030894(void);
extern u32 sub_801D008(void);
extern void sub_80306A8(u32, u32, u32, u32);
extern void sub_8035CF4(u32 *, u32, u32);
extern s32 sub_8037D64(u32, void *, void *);
extern s32 sub_80381F4(u32, void *, void *);
extern void sub_801C8C4(u32, u32, s32 * , u32);
void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...);
extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32);
extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32);
extern void sub_80920D8(u8 *buffer);
extern void sub_8097790();
extern void sub_8097790(void);
extern char gUnknown_202E5D8[0x50];
extern char gAvailablePokemonNames[0x50];
extern u32 sub_802F298();
extern void sub_802F2C0();
extern u32 sub_802F298(void);
extern void sub_802F2C0(void);
extern u8 sub_8099394(u8 *);
extern void sub_802B548(u32);
extern u32 sub_80144A4(s32 *);
extern void sub_802B560();
extern void sub_802B57C();
extern void sub_802B5B8();
extern void sub_802B5FC();
extern void sub_802B624();
extern void sub_802B560(void);
extern void sub_802B57C(void);
extern void sub_802B5B8(void);
extern void sub_802B5FC(void);
extern void sub_802B624(void);
void ExpandPlaceholdersBuffer(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, struct OpenedFile **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 void nullsub_131(void);
extern void sub_802ABF8(void);
void sub_802ABF8(void)
{
char cVar1;
char *monName;
u8 auStack180 [80];
u8 auStack100 [80];
u8 uVar2;
struct PokemonStruct *pokeStruct;
struct PokemonStruct *pokeStruct2;
s32 iVar6;
struct unkStruct_8095228 *puVar4;
ALIGNED(4) const char gUnknown_80DF9F0[] = "????";
// NOTE: had to be pre-proc'd to match
ALIGNED(4) const char gUnknown_80DF9F8[] = _(
" Oh~2c hello!\n"
"Your rescue mission went well~2c didn~27t it?\n"
"I wouldn~27t expect any less~2c #CG%s#R!#P"
" Well~2c well!\n"
"Here is your reward from the Pokémon\n"
"Rescue Organization!");
ALIGNED(4) const char gUnknown_80DFAA8[] =
" I hope you will keep on\n"
"rescuing your friends in\n"
"dire straits.#P"
" And now~2c I must save\n"
"your adventure.";
ALIGNED(4) const char gUnknown_80DFB14[] =
" Oh~2c yes~2c that~27s right.\n"
"Please don~27t forget to send an #CGA-OK Mail#R\n"
"to the friend you just rescued.#P"
" Please give me a shout if\n"
"you would like to send #CGA-OK Mail#R.";
ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0";
switch(gUnknown_203B2C4->state) {
case 5:
pokeStruct = sub_808D33C();
sub_80922B4(auStack180,pokeStruct->name, POKEMON_NAME_LENGTH);
ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF250,auStack180);
sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0xe:
sub_8014248(gUnknown_80DF304,0,7,gUnknown_80DEE60,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 0xf:
sub_80141B4(gUnknown_80DF330,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x10:
if (sub_8030894() != 0)
break;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80306A8(5,0,0,6);
break;
case 0x11:
sub_8006518(gUnknown_203B2C4->unk35C);
SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED60,gUnknown_80DED78,1,0,0);
sub_803092C();
sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
break;
case 0x13:
if (sub_801D008() != 0)
break;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
// TODO: Probably a macro - Pika
{
struct {u16 a; u16 b;} local_x = {3, 2};
sub_801C8C4(0, 1, (s32 *)&local_x, 9);
}
break;
case 0x14:
sub_8006518(gUnknown_203B2C4->unk35C);
SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED48,gUnknown_80DED78,1,0,0);
sub_801CCD8();
sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
break;
case 0x1e:
gUnknown_203B2C4->linkError = 0;
sub_8011830();
iVar6 = sub_8037B28(gUnknown_203B2C4->unk40);
gUnknown_203B2C4->linkError = iVar6;
if (iVar6 != 0) goto _0802AEE6;
switch(gUnknown_203B2C4->unk40)
{
case 6:
MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228));
gUnknown_203B2C4->unk1B8 = *sub_8095228(gUnknown_203B2C4->unk218);
gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
break;
case 7:
MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228));
MemoryFill8((u8 *)&gUnknown_203B2C4->unk1E8,0, sizeof(struct unkStruct_8095228));
gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
break;
}
if (gUnknown_203B2C4->linkError == 0){
switch(gUnknown_203B2C4->unk40){
case 6:
case 7:
gUnknown_203B2C4->linkError = sub_80381F4(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
if ( sub_800D588() != '\0') {
gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1E8.unk10;
}
else {
gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1B8.unk10;
}
break;
}
}
_0802AEE6:
xxx_call_start_bg_music();
break;
case 0x26:
sub_80141B4(gUnknown_80DF380,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x27:
sub_8006518(gUnknown_203B2C4->unk3BC);
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80151C0(4,gUnknown_203B2C4->passwordBuffer);
break;
case 0x1a:
sub_8006518(gUnknown_203B2C4->unk3BC);
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_8031D70(gUnknown_203B2C4->unk218,0);
break;
case 0x1b:
sub_80141B4(gUnknown_80DF3B4,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x19:
sub_80141B4(gUnknown_80DF418,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x24:
sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x20:
sub_80141B4(gUnknown_80DF46C,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x21:
switch(gUnknown_203B2C4->unk534)
{
case 3:
case 5:
case 6:
sub_80141B4(gUnknown_80DF4F4,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 4:
break;
}
break;
case 0x22:
monName = GetMonSpecies(SPECIES_PELIPPER);
strcpy(gUnknown_203B2C4->unk53C,monName);
gUnknown_203B2C4->unk550 = 0x130;
gUnknown_203B2C4->unk552 = 2;
gUnknown_203B2C4->unk554 = 0;
uVar2 = sub_809539C(6,gUnknown_203B2C4->unk430);
puVar4 = sub_8095228(uVar2);
cVar1 = puVar4->unk20.itemIndex;
if (cVar1 != '\0')
gUnknown_203B2C4->unk558 = cVar1;
else
gUnknown_203B2C4->unk558 = 0;
gUnknown_203B2C4->unk55B = 1;
gUnknown_203B2C4->unk560 = sub_803C200(&puVar4->unk4, 0);
gUnknown_203B2C4->unk559 = 0;
gUnknown_203B2C4->unk55A = 0;
gUnknown_203B2C4->unk55C = 0;
sub_802F204(gUnknown_203B2C4->unk53C,0);
break;
case 0x16:
nullsub_23(0);
sub_80141B4(gUnknown_80DF544,0,0,0);
break;
case 0x17:
sub_80141B4(gUnknown_80DF594,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x1d:
sub_8014248(gUnknown_80DF5E4,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 0xd:
pokeStruct2 = sub_808D33C();
sub_80922B4(auStack100, pokeStruct2->name, POKEMON_NAME_LENGTH);
ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF63C,auStack100);
sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0xc:
sub_8014248(gUnknown_80DF694,0,7,gUnknown_80DEEE4,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 0x29:
sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0x2a:
sub_80141B4(gUnknown_80DF6F0,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0xb:
sub_80141B4(gUnknown_80DF710,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 10:
sub_8014248(gUnknown_80DF73C,0,0,gUnknown_80DEEBC,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 9:
sub_8014248(gUnknown_80DF77C,0,0,gUnknown_80DEE7C,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 7:
sub_80141B4(gUnknown_80DF7D4,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 8:
sub_8014248(gUnknown_80DF870,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 4:
sub_80141B4(gUnknown_80DF8B4,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 0:
sub_8014248(gUnknown_80DF8EC,0,1,gUnknown_80DEDB8,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 1:
sub_8014248(gUnknown_80DF928,0,1,gUnknown_80DEDB8,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 2:
sub_80141B4(gUnknown_80DF94C,0,&gUnknown_203B2C4->faceFile,0x10d);
break;
case 6:
switch(gUnknown_203B2C4->unk538){
case 1:
sub_8014248(gUnknown_80DF96C,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 2:
sub_8014248(gUnknown_80DF9A4,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
}
break;
}
}
void sub_802B2BC(u32 newState)
{
gUnknown_203B2C4->state = newState;
nullsub_131();
sub_802ABF8();
}
u32 sub_802B2D4(void)
{
@@ -494,7 +228,7 @@ void sub_802B3E0(void)
}
// Print and expand placeholders?
ExpandPlaceholdersBuffer(gUnknown_203B2C8->teamName,gUnknown_80DF9F8,teamNameBuffer);
// Display to screen with Pelliper face
// Display to screen with Peliper face
sub_80141B4(gUnknown_203B2C8->teamName, 0, &gUnknown_203B2C8->faceFile, 0x10d);
break;
case 1:
@@ -607,7 +341,7 @@ u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2)
{
if(gUnknown_203B2CC == NULL)
{
gUnknown_203B2CC = MemoryAlloc(0xD4, 8);
gUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 8);
}
gUnknown_203B2CC->unk6C = r0;
gUnknown_203B2CC->unk70 = &gUnknown_203B2CC->unk74[r0];

View File

@@ -6,9 +6,14 @@
#include "sub_8095228.h"
#include "wonder_mail.h"
#define WONDER_MAIL_MAIN_SCREEN 4
#define SEND_WONDER_MAIL_MAIN_SCREEN 1
#define SEND_GAME_LINK_CABLE 2
#define RECEIVE_WONDER_MAIL_MAIN_SCREEN 4
#define EXIT_TO_MAIN_MENU 5
#define WONDER_MAIL_SENT 7
#define GAME_LINK_CABLE_MENU 8
#define COMMUNICATION_ERROR 10
#define RECEIVE_GAME_LINK_CABLE 12
#define PASSWORD_SUCCESS 13
#define PREPARE_SAVE 14
#define SAVE_ADVENTURE 15
@@ -17,6 +22,17 @@
#define PASSWORD_INVALID 19
#define PASSWORD_ENTRY_SCREEN 18
struct unkStruct_803B344
{
// size: 0xB4
struct WonderMail unk0;
u8* unk14;
u8* unk18;
u8 fill1C[0x3C - 0x1C];
u8 unk3C[0x78];
};
struct unkStruct_203B3E8
{
// size: 0x49C
@@ -31,15 +47,21 @@ struct unkStruct_203B3E8
struct UnkTextStruct2 unk1EC[4];
u32 unk24C;
u32 wonderMailStatus;
u8 fill254[0x3C0 - 0x254];
struct WonderMail unk3C0;
u8 fill3D0[0x490 - 0x3D4];
u32 unk490;
u32 unk494;
struct unkStruct_803B344 unk254;
struct unkStruct_803B344 unk308;
u8 unk3BC;
u8 fill3BD[0x3C0 - 0x3BD];
struct unkStruct_803B344 unk3C0;
struct WonderMail unk474;
u8 **unk488;
u8 *unk48C;
s32 wonderMailMethod;
u32 wonderMailMode;
u8 unk498;
u8 unk499;
u8 unk49A;
u8 unk49B;
};
extern u32 sub_8095324(u32);
@@ -54,6 +76,39 @@ extern void sub_801CBB8(void);
extern void sub_80155F0(void);
extern void sub_8031E10(void);
extern u8 sub_800D588(void);
extern s32 sub_8037D64(u32, void *, void *);
extern s32 sub_80381F4(u32, void *, void *);
extern void sub_8011830(void);
extern void sub_80151C0(u32, u8 *);
extern void xxx_call_start_bg_music(void);
extern void sub_8014248(u8 *, u32, u32, u8 *, u32, u32, u32, u32, u32);
extern void nullsub_23(u32);
extern void sub_802EF48(void);
extern void sub_802D098(struct WonderMail *);
extern struct unkStruct_803B344 *sub_803B344(u8);
extern u8 gUnknown_80E7CC4[];
extern u8 gUnknown_80E78F8;
extern u8 gUnknown_80E7AC4[];
extern u8 gUnknown_80E786C;
extern u8 gUnknown_80E7AE0[];
extern u8 gUnknown_80E7894;
extern u8 gUnknown_80E7C48[];
extern u8 gUnknown_80E7B14[];
extern u8 gUnknown_80E78D8;
extern u8 gUnknown_80E7B68[];
extern u8 gUnknown_80E7BEC[];
extern u8 gUnknown_80E7BC8[];
extern u8 gUnknown_80E7B88[];
extern u8 gUnknown_80E7C98[];
extern u8 gUnknown_80E7B48[];
extern s32 sub_8037B28(u32);
extern u32 sub_802D0E0();
extern u8 sub_802D178();
extern void sub_802D184();
@@ -61,30 +116,30 @@ extern void sub_802D184();
extern s32 sub_80154F0();
extern bool8 DecodeWonderMailPassword(u8 *, struct WonderMail *);
extern bool8 IsValidWonderMail(struct WonderMail *WonderMailData);
extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32);
void PrintWonderMailMainMenuError(u32);
void HandleWonderMailMainScreen(void);
void sub_8039AA8(void);
void HandleGameLinkCableMenu(void);
void sub_8039B14(void);
void sub_8039B20(void);
void sub_8039B58(void);
void sub_8039D88(void);
void ReturnToGameLinkCableMenu(void);
void HandlePasswordSuccess(void);
void HandlePrepareSaveScreen(void);
void HandleSaveAdventureScreen(void);
void HandleWonderMailAddedScreen(void);
void ReturnToWonderMailMainScreen(void);
void ReturnToReceiveWonderMailMainScreen(void);
void AdvanceToPasswordEntryScreen(void);
void HandlePasswordEntryScreen(void);
void HandleInvalidPasswordMenu(void);
extern u32 gUnknown_80E7914;
extern u32 gUnknown_80E7938;
extern u32 gUnknown_80E7994;
extern u32 gUnknown_80E79E4;
extern u32 gUnknown_80E7A48;
extern u8 gUnknown_80E7914[];
extern u8 gUnknown_80E7938[];
extern u8 gUnknown_80E7994[];
extern u8 gUnknown_80E79E4[];
extern u8 gUnknown_80E7A48[];
bool8 sub_8039880(void)
{
@@ -105,10 +160,10 @@ bool8 CreateWonderMailMenu(void)
gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0;
}
gUnknown_203B3E8->unk490 = 3;
gUnknown_203B3E8->unk494 = 2;
gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_GAME_LINK;
gUnknown_203B3E8->wonderMailMode = WONDER_MAIL_MODE_RECEIVE;
gUnknown_203B3E8->unk498 = 1;
gUnknown_203B3E8->unk490 = 5; // ??? Why?
gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_PASSWORD; // ??? Why?
SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY); // -> Display "Enter Wonder Mail Password"
return 1;
}
@@ -116,17 +171,15 @@ bool8 CreateWonderMailMenu(void)
u8 UpdateWonderMailMenu(void)
{
switch(gUnknown_203B3E8->state) {
case WONDER_MAIL_MAIN_SCREEN:
case RECEIVE_WONDER_MAIL_MAIN_SCREEN:
HandleWonderMailMainScreen();
break;
case EXIT_TO_MAIN_MENU: // When you exit out of the menu
return 3;
case 8:
sub_8039AA8();
case GAME_LINK_CABLE_MENU:
HandleGameLinkCableMenu();
break;
case 11:
break;
case 12:
case RECEIVE_GAME_LINK_CABLE:
sub_8039B14();
break;
case 6:
@@ -135,8 +188,8 @@ u8 UpdateWonderMailMenu(void)
case 9:
sub_8039B58();
break;
case 7:
sub_8039D88();
case WONDER_MAIL_SENT:
ReturnToGameLinkCableMenu();
break;
case PASSWORD_SUCCESS:
HandlePasswordSuccess();
@@ -151,7 +204,7 @@ u8 UpdateWonderMailMenu(void)
HandleWonderMailAddedScreen();
break;
case COMMUNICATION_ERROR:
ReturnToWonderMailMainScreen();
ReturnToReceiveWonderMailMainScreen();
break;
case PROMPT_PASSWORD_ENTRY: // "Please enter the Wonder Mail Password" Screen
AdvanceToPasswordEntryScreen();
@@ -188,11 +241,11 @@ void HandleWonderMailMainScreen(void)
switch(menuAction) {
case 3:
case 4:
gUnknown_203B3E8->unk490 = 3;
SetWonderMailMainMenuState(8);
gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_GAME_LINK;
SetWonderMailMainMenuState(GAME_LINK_CABLE_MENU);
break;
case 5:
gUnknown_203B3E8->unk490 = 5;
gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_PASSWORD;
SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY);
break;
case 0:
@@ -203,26 +256,26 @@ void HandleWonderMailMainScreen(void)
}
}
void sub_8039AA8(void)
void HandleGameLinkCableMenu(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0) {
switch(menuAction){
case 6:
if (gUnknown_203B3E8->unk494 == 1) {
SetWonderMailMainMenuState(2);
if (gUnknown_203B3E8->wonderMailMode == WONDER_MAIL_MODE_SEND) {
SetWonderMailMainMenuState(SEND_GAME_LINK_CABLE);
}
else {
SetWonderMailMainMenuState(12);
SetWonderMailMainMenuState(RECEIVE_GAME_LINK_CABLE);
}
break;
case 0:
if (gUnknown_203B3E8->unk494 == 1) {
SetWonderMailMainMenuState(1);
if (gUnknown_203B3E8->wonderMailMode == WONDER_MAIL_MODE_SEND) {
SetWonderMailMainMenuState(SEND_WONDER_MAIL_MAIN_SCREEN);
}
else {
SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN);
SetWonderMailMainMenuState(RECEIVE_WONDER_MAIL_MAIN_SCREEN);
}
break;
}
@@ -243,12 +296,12 @@ void sub_8039B20(void)
}
}
void ReturnToWonderMailMainScreen(void)
void ReturnToReceiveWonderMailMainScreen(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN);
SetWonderMailMainMenuState(RECEIVE_WONDER_MAIL_MAIN_SCREEN);
}
}
@@ -260,7 +313,7 @@ void sub_8039B58(void)
if (gUnknown_203B3E8->wonderMailStatus == 0) {
switch(gUnknown_203B3E8->unk24C){
case 9:
SetWonderMailMainMenuState(7);
SetWonderMailMainMenuState(WONDER_MAIL_SENT);
break;
case 10:
SetWonderMailMainMenuState(PASSWORD_SUCCESS);
@@ -274,6 +327,7 @@ void sub_8039B58(void)
}
}
/* NOTE: I think the error codes for wonder mail are the same across SOS/WONDER */
void PrintWonderMailMainMenuError(u32 status)
{
switch(status)
@@ -282,42 +336,42 @@ void PrintWonderMailMainMenuError(u32 status)
break;
case 1:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
sub_80141B4(gUnknown_80E7914, 0, 0, 0x101);
break;
case 3:
// Incorrect number of GBA Systems
sub_80141B4(&gUnknown_80E7938, 0, 0, 0x101);
sub_80141B4(gUnknown_80E7938, 0, 0, 0x101);
break;
case 2:
// No response from friend. Redo from start
sub_80141B4(&gUnknown_80E7994, 0, 0, 0x101);
sub_80141B4(gUnknown_80E7994, 0, 0, 0x101);
break;
case 4:
// Sender and receiver in different modes
sub_80141B4(&gUnknown_80E79E4, 0, 0, 0x101);
sub_80141B4(gUnknown_80E79E4, 0, 0, 0x101);
break;
case 5:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
sub_80141B4(gUnknown_80E7914, 0, 0, 0x101);
break;
case 14:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
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);
sub_80141B4(gUnknown_80E7A48, 0, 0, 0x101);
break;
case 6:
case 7:
case 8:
case 9:
case COMMUNICATION_ERROR:
case 10:
case 11:
case 12:
case PASSWORD_SUCCESS:
case 13:
default:
// "Communication Error"
sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
sub_80141B4(gUnknown_80E7914, 0, 0, 0x101);
break;
}
@@ -342,7 +396,7 @@ void HandlePasswordEntryScreen(void)
else {
// Successful password
// Copy the decoded data to another buffer?
gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->UNK38.decodedMail;
gUnknown_203B3E8->unk3C0.unk0 = gUnknown_203B3E8->UNK38.decodedMail;
gUnknown_203B3E8->unk498 = 1;
SetWonderMailMainMenuState(PASSWORD_SUCCESS);
@@ -390,12 +444,12 @@ void HandlePrepareSaveScreen(void)
}
}
void sub_8039D88(void)
void ReturnToGameLinkCableMenu(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
SetWonderMailMainMenuState(8);
SetWonderMailMainMenuState(GAME_LINK_CABLE_MENU);
}
}
@@ -443,3 +497,137 @@ void HandleInvalidPasswordMenu(void)
void nullsub_54(void)
{
}
void WonderMailMainMenuCallback(void)
{
int iVar2;
struct unkStruct_803B344 *temp;
switch(gUnknown_203B3E8->state) {
case 0:
sub_8014248(gUnknown_80E7AC4,0,1,&gUnknown_80E786C,0,4,0,0,0x101);
break;
case SEND_WONDER_MAIL_MAIN_SCREEN:
sub_8014248(gUnknown_80E7AE0,0,3,&gUnknown_80E7894,0,4,0,0,0x101);
break;
case 3:
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_802EF48();
break;
case RECEIVE_WONDER_MAIL_MAIN_SCREEN:
sub_8014248(gUnknown_80E7B14,0,3,&gUnknown_80E78D8,0,4,0,0,0x101);
break;
case PASSWORD_SUCCESS:
gUnknown_203B3E8->unk474 = gUnknown_203B3E8->unk3C0.unk0;
if(gUnknown_203B3E8->unk474.unk2 == 4)
{
gUnknown_203B3E8->unk488 = &gUnknown_203B3E8->unk3C0.unk14;
gUnknown_203B3E8->unk48C = gUnknown_203B3E8->unk3C0.unk3C;
}
else
{
gUnknown_203B3E8->unk488 = NULL;
gUnknown_203B3E8->unk48C = NULL;
}
sub_802D098(&gUnknown_203B3E8->unk474);
break;
case PREPARE_SAVE:
if(gUnknown_203B3E8->unk498 != 0)
{
switch(gUnknown_203B3E8->wonderMailMethod)
{
case WONDER_MAIL_GAME_LINK:
case WONDER_MAIL_PASSWORD:
sub_80141B4(gUnknown_80E7B48,0,0,0x101);
break;
case 4:
break;
}
}
else
sub_80141B4(gUnknown_80E7B48,0,0,0x101);
break;
case WONDER_MAIL_SENT:
sub_80141B4(gUnknown_80E7B68,0,0,0x101);
break;
case WONDER_MAIL_ADDED:
if (gUnknown_203B3E8->unk498 != '\0') {
sub_80141B4(gUnknown_80E7B88,0,0,0x101);
}
else {
// Wonder Mail was refused
sub_80141B4(gUnknown_80E7BC8,0,0,0x101);
}
break;
case GAME_LINK_CABLE_MENU:
sub_8014248(gUnknown_80E7BEC,0,6,&gUnknown_80E78F8,0,4,0,0,0x101);
break;
case 6:
nullsub_23(0);
sub_80141B4(gUnknown_80E7C48,0,0,0);
break;
case 9:
gUnknown_203B3E8->wonderMailStatus = 0;
sub_8011830();
iVar2 = sub_8037B28(gUnknown_203B3E8->unk24C);
gUnknown_203B3E8->wonderMailStatus = iVar2;
if (iVar2 == 0) {
switch(gUnknown_203B3E8->unk24C)
{
case 9:
MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4);
temp = sub_803B344(gUnknown_203B3E8->unk3BC);
if(temp->unk14 != NULL){
MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk14,temp->unk14,0x28);
MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk3C,temp->unk18,0x78);
}
gUnknown_203B3E8->unk254.unk0 = temp->unk0;
gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
break;
case 10:
MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4);
MemoryFill8((u8 *)&gUnknown_203B3E8->unk308,0,0xb4);
gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
break;
}
if (gUnknown_203B3E8->wonderMailStatus == 0)
{
switch(gUnknown_203B3E8->unk24C)
{
case 9:
case 10:
gUnknown_203B3E8->wonderMailStatus = sub_80381F4(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
if (sub_800D588() != '\0') {
gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk308;
}
else {
gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk254;
}
break;
}
}
}
xxx_call_start_bg_music();
break;
case PROMPT_PASSWORD_ENTRY:
sub_80141B4(gUnknown_80E7C98,0,0,0x101);
break;
case PASSWORD_ENTRY_SCREEN:
sub_8006518(gUnknown_203B3E8->unk1EC);
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80151C0(5,gUnknown_203B3E8->PasswordEntryBuffer);
break;
case PASSWORD_INVALID:
sub_8014248(gUnknown_80E7CC4,0,6,&gUnknown_80E78F8,0,4,0,0,0x101);
break;
}
}
void SetWonderMailMainMenuState(u8 newState)
{
gUnknown_203B3E8->state = newState;
nullsub_54();
WonderMailMainMenuCallback();
}