decomp more of rescue password and label GetDungeonFloorCount

This commit is contained in:
Seth Barberee
2022-05-16 20:23:45 -07:00
parent ecb8582e87
commit 773510c329
11 changed files with 431 additions and 848 deletions

View File

@@ -559,7 +559,7 @@ _0803D500:
ldr r4, _0803D658
adds r2, r4
ldrb r0, [r2]
bl sub_8090298
bl GetDungeonFloorCount
ldr r1, [r6]
ldr r7, _0803D66C
adds r1, r7

View File

@@ -262,7 +262,7 @@ _08095D1C:
add r0, r9
ldrb r7, [r0]
adds r0, r7, 0
bl sub_8090298
bl GetDungeonFloorCount
str r0, [sp, 0x58]
lsrs r0, 31
ldr r2, [sp, 0x58]

View File

@@ -729,7 +729,7 @@ sub_80908D8:
ldrb r0, [r0]
b _0809090A
.align 2, 0
_08090900: .4byte gUnknown_81077A8
_08090900: .4byte gDungeonFloorCount
_08090904: .4byte gUnknown_8108084
_08090908:
movs r0, 0x1
@@ -768,7 +768,7 @@ sub_8090910:
b _08090956
.align 2, 0
_0809094C: .4byte 0x0000270f
_08090950: .4byte gUnknown_81077A8
_08090950: .4byte gDungeonFloorCount
_08090954:
movs r0, 0x46
_08090956:

View File

@@ -602,11 +602,11 @@ _080ADDE2:
movs r4, 0x1
_080ADDE8:
adds r0, r5, 0
bl sub_8090298
bl GetDungeonFloorCount
cmp r4, r0
blt _080ADDFA
adds r0, r5, 0
bl sub_8090298
bl GetDungeonFloorCount
subs r4, r0, 0x1
_080ADDFA:
ldr r2, [r6, 0x4]

View File

@@ -3934,7 +3934,7 @@ _0809FAD4:
negs r4, r4
_0809FAD8:
adds r0, r1, 0
bl sub_8090298
bl GetDungeonFloorCount
ldr r2, _0809FAF4
add r1, sp, 0x8
movs r3, 0x2

View File

@@ -5,837 +5,6 @@
.text
thumb_func_start UpdateRescuePasswordMenu
UpdateRescuePasswordMenu:
push {r4-r6,lr}
sub sp, 0x34
movs r0, 0xB
str r0, [sp, 0x30]
ldr r5, _08038AB4
ldr r1, _08038AB8
ldr r0, [r1]
ldr r0, [r0, 0x4]
adds r6, r1, 0
cmp r0, 0x9
bls _08038AA8
b _08038DB0
_08038AA8:
lsls r0, 2
ldr r1, _08038ABC
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08038AB4: .4byte 0x0000ffdc
_08038AB8: .4byte gRescuePasswordMenu
_08038ABC: .4byte _08038AC0
.align 2, 0
_08038AC0:
.4byte _08038AE8
.4byte _08038AFC
.4byte _08038AE8
.4byte _08038AFC
.4byte _08038AE8
.4byte _08038AFC
.4byte _08038C78
.4byte _08038C8C
.4byte _08038CC2
.4byte _08038D38
_08038AE8:
bl sub_8031DCC
ldr r5, _08038AF8
cmp r0, 0
bne _08038AF4
b _08038DB0
_08038AF4:
movs r5, 0xB
b _08038DB0
.align 2, 0
_08038AF8: .4byte 0x0000ffdc
_08038AFC:
bl sub_80154F0
adds r4, r0, 0
mov r0, sp
movs r1, 0
movs r2, 0x30
bl MemoryFill8
cmp r4, 0x1
bne _08038B12
b _08038CBC
_08038B12:
cmp r4, 0x1
bcs _08038B18
b _08038CB0
_08038B18:
cmp r4, 0x2
beq _08038AF4
cmp r4, 0x3
beq _08038B22
b _08038DB0
_08038B22:
ldr r0, _08038B44
ldr r0, [r0]
ldr r0, [r0]
ldr r1, _08038B48
mov r2, sp
bl sub_8039068
subs r0, 0x7
cmp r0, 0x11
bls _08038B38
b _08038DB0
_08038B38:
lsls r0, 2
ldr r1, _08038B4C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08038B44: .4byte gRescuePasswordMenu
_08038B48: .4byte gUnknown_202EC50
_08038B4C: .4byte _08038B50
.align 2, 0
_08038B50:
.4byte _08038BA4
.4byte _08038DB0
.4byte _08038BD8
.4byte _08038DB0
.4byte _08038C28
.4byte _08038DB0
.4byte _08038B9C
.4byte _08038DB0
.4byte _08038DB0
.4byte _08038DB0
.4byte _08038B98
.4byte _08038BA0
.4byte _08038BD4
.4byte _08038C24
.4byte _08038DB0
.4byte _08038BA8
.4byte _08038BDC
.4byte _08038C2C
_08038B98:
movs r0, 0x11
b _08038CA4
_08038B9C:
movs r0, 0xD
b _08038CA4
_08038BA0:
movs r0, 0x12
b _08038CA4
_08038BA4:
movs r0, 0x7
b _08038CA4
_08038BA8:
ldr r0, [sp, 0x10]
bl sub_8095274
bl sub_8038F98
ldr r0, _08038BCC
ldr r1, [r0]
movs r0, 0x9
str r0, [r1, 0x4]
ldr r5, _08038BD0
mov r1, sp
movs r0, 0x2
strb r0, [r1]
mov r0, sp
bl sub_80951BC
b _08038DB0
.align 2, 0
_08038BCC: .4byte gRescuePasswordMenu
_08038BD0: .4byte 0x0000ffdc
_08038BD4:
movs r0, 0x13
b _08038CA4
_08038BD8:
movs r0, 0x9
b _08038CA4
_08038BDC:
bl sub_8038F98
ldr r0, _08038C18
ldr r1, [r0]
movs r0, 0x9
str r0, [r1, 0x4]
ldr r5, _08038C1C
mov r1, sp
movs r0, 0x5
strb r0, [r1]
mov r0, sp
bl sub_80951FC
ldr r1, [sp, 0x10]
movs r0, 0x1
bl sub_809539C
lsls r0, 24
lsrs r0, 24
bl sub_8095228
movs r1, 0x7
strb r1, [r0]
ldr r0, _08038C20
movs r1, 0
movs r2, 0x5C
bl MemoryFill8
b _08038DB0
.align 2, 0
_08038C18: .4byte gRescuePasswordMenu
_08038C1C: .4byte 0x0000ffdc
_08038C20: .4byte gUnknown_203B484
_08038C24:
movs r0, 0x14
b _08038CA4
_08038C28:
movs r0, 0xB
b _08038CA4
_08038C2C:
bl sub_8038F98
ldr r0, _08038C70
ldr r1, [r0]
movs r0, 0x9
str r0, [r1, 0x4]
ldr r5, _08038C74
ldr r1, [sp, 0x10]
movs r0, 0x4
bl sub_809539C
lsls r0, 24
lsrs r0, 24
bl sub_8095228
adds r2, r0, 0
mov r1, sp
ldm r1!, {r3,r4,r6}
stm r2!, {r3,r4,r6}
ldm r1!, {r3,r4,r6}
stm r2!, {r3,r4,r6}
ldm r1!, {r3,r4,r6}
stm r2!, {r3,r4,r6}
ldm r1!, {r3,r4,r6}
stm r2!, {r3,r4,r6}
movs r1, 0x6
strb r1, [r0]
bl GetMainMenu
adds r0, 0x3A
movs r1, 0x1
strb r1, [r0]
b _08038DB0
.align 2, 0
_08038C70: .4byte gRescuePasswordMenu
_08038C74: .4byte 0x0000ffdc
_08038C78:
bl sub_8031DCC
ldr r5, _08038C88
cmp r0, 0
bne _08038C84
b _08038DB0
_08038C84:
movs r5, 0xD
b _08038DB0
.align 2, 0
_08038C88: .4byte 0x0000ffdc
_08038C8C:
bl sub_80154F0
cmp r0, 0x1
beq _08038CBC
cmp r0, 0x1
bcc _08038CB0
cmp r0, 0x2
beq _08038C84
cmp r0, 0x3
beq _08038CA2
b _08038DB0
_08038CA2:
movs r0, 0x15
_08038CA4:
bl sub_8038DC0
ldr r0, _08038CB4
ldr r1, [r0]
movs r0, 0x8
str r0, [r1, 0x4]
_08038CB0:
ldr r5, _08038CB8
b _08038DB0
.align 2, 0
_08038CB4: .4byte gRescuePasswordMenu
_08038CB8: .4byte 0x0000ffdc
_08038CBC:
bl sub_8031E00
b _08038CB0
_08038CC2:
ldr r0, [r6]
adds r0, 0x8
bl sub_8012FD8
lsls r0, 24
cmp r0, 0
bne _08038CDA
ldr r0, [r6]
adds r0, 0x8
add r1, sp, 0x30
bl sub_8013114
_08038CDA:
ldr r0, [sp, 0x30]
cmp r0, 0xB
beq _08038D24
cmp r0, 0xB
bhi _08038CEA
cmp r0, 0xA
beq _08038CEE
b _08038DB0
_08038CEA:
cmp r0, 0xC
bne _08038DB0
_08038CEE:
bl sub_8039174
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r1, _08038D1C
movs r0, 0x4
bl sub_80151C0
ldr r0, _08038D20
ldr r1, [r0]
movs r0, 0x8
str r0, [r1, 0x4]
ldr r0, [r1]
subs r0, 0x21
movs r5, 0xB
cmp r0, 0x1
bhi _08038DB0
b _08038C84
.align 2, 0
_08038D1C: .4byte gUnknown_202EC50
_08038D20: .4byte gRescuePasswordMenu
_08038D24:
ldr r1, [r6]
movs r0, 0x8
str r0, [r1, 0x4]
ldr r5, _08038D34
bl sub_80391F8
b _08038DB0
.align 2, 0
_08038D34: .4byte 0x0000ffdc
_08038D38:
adds r4, r6, 0
ldr r0, [r4]
adds r0, 0x8
bl sub_8012FD8
lsls r0, 24
cmp r0, 0
bne _08038D52
ldr r0, [r4]
adds r0, 0x8
add r1, sp, 0x30
bl sub_8013114
_08038D52:
ldr r0, [sp, 0x30]
cmp r0, 0xB
beq _08038DA4
cmp r0, 0xB
bhi _08038D62
cmp r0, 0xA
beq _08038D66
b _08038DB0
_08038D62:
cmp r0, 0xC
bne _08038DB0
_08038D66:
bl sub_8039174
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r1, _08038D9C
movs r0, 0x4
bl sub_80151C0
ldr r4, _08038DA0
ldr r0, [r4]
ldr r0, [r0]
bl ConvertMenutoRescuePasswordState
ldr r1, [r4]
str r0, [r1, 0x4]
ldr r0, [r1]
subs r0, 0x21
movs r5, 0x2A
cmp r0, 0x1
bhi _08038DB0
movs r5, 0x2B
b _08038DB0
.align 2, 0
_08038D9C: .4byte gUnknown_202EC50
_08038DA0: .4byte gRescuePasswordMenu
_08038DA4:
ldr r1, [r6]
movs r0, 0x9
str r0, [r1, 0x4]
ldr r5, _08038DBC
bl sub_80391F8
_08038DB0:
adds r0, r5, 0
add sp, 0x34
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_08038DBC: .4byte 0x0000ffdc
thumb_func_end UpdateRescuePasswordMenu
thumb_func_start sub_8038DC0
sub_8038DC0:
push {r4,lr}
sub sp, 0x10
adds r4, r0, 0
ldr r0, _08038DF8
ldr r0, [r0]
movs r1, 0xD4
lsls r1, 1
adds r0, r1
bl sub_8006518
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
bl sub_80155F0
subs r0, r4, 0x7
cmp r0, 0xE
bls _08038DEE
b _08038F74
_08038DEE:
lsls r0, 2
ldr r1, _08038DFC
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08038DF8: .4byte gRescuePasswordMenu
_08038DFC: .4byte _08038E00
.align 2, 0
_08038E00:
.4byte _08038E7C
.4byte _08038F74
.4byte _08038EDC
.4byte _08038F74
.4byte _08038F1C
.4byte _08038F74
.4byte _08038E9C
.4byte _08038F74
.4byte _08038F74
.4byte _08038F74
.4byte _08038E3C
.4byte _08038E5C
.4byte _08038EBC
.4byte _08038EFC
.4byte _08038F50
_08038E3C:
ldr r0, _08038E50
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038E54
ldr r2, _08038E58
b _08038F2E
.align 2, 0
_08038E50: .4byte gRescuePasswordMenu
_08038E54: .4byte gUnknown_80E71FC
_08038E58: .4byte gUnknown_80E7214
_08038E5C:
ldr r0, _08038E70
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038E74
ldr r2, _08038E78
b _08038F2E
.align 2, 0
_08038E70: .4byte gRescuePasswordMenu
_08038E74: .4byte gUnknown_80E72EC
_08038E78: .4byte gUnknown_80E7304
_08038E7C:
ldr r0, _08038E90
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038E94
ldr r2, _08038E98
b _08038F2E
.align 2, 0
_08038E90: .4byte gRescuePasswordMenu
_08038E94: .4byte gUnknown_80E7344
_08038E98: .4byte gUnknown_80E735C
_08038E9C:
ldr r0, _08038EB0
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038EB4
ldr r2, _08038EB8
b _08038F2E
.align 2, 0
_08038EB0: .4byte gRescuePasswordMenu
_08038EB4: .4byte gUnknown_80E7588
_08038EB8: .4byte gUnknown_80E75A0
_08038EBC:
ldr r0, _08038ED0
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038ED4
ldr r2, _08038ED8
b _08038F2E
.align 2, 0
_08038ED0: .4byte gRescuePasswordMenu
_08038ED4: .4byte gUnknown_80E73AC
_08038ED8: .4byte gUnknown_80E73C4
_08038EDC:
ldr r0, _08038EF0
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038EF4
ldr r2, _08038EF8
b _08038F2E
.align 2, 0
_08038EF0: .4byte gRescuePasswordMenu
_08038EF4: .4byte gUnknown_80E7408
_08038EF8: .4byte gUnknown_80E7420
_08038EFC:
ldr r0, _08038F10
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038F14
ldr r2, _08038F18
b _08038F2E
.align 2, 0
_08038F10: .4byte gRescuePasswordMenu
_08038F14: .4byte gUnknown_80E7468
_08038F18: .4byte gUnknown_80E7480
_08038F1C:
ldr r0, _08038F44
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038F48
ldr r2, _08038F4C
_08038F2E:
str r2, [sp]
movs r4, 0
str r4, [sp, 0x4]
movs r2, 0xD
str r2, [sp, 0x8]
str r4, [sp, 0xC]
movs r2, 0
bl SetMenuItems
b _08038F74
.align 2, 0
_08038F44: .4byte gRescuePasswordMenu
_08038F48: .4byte gUnknown_80E74C8
_08038F4C: .4byte gUnknown_80E74E0
_08038F50:
ldr r0, _08038F8C
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038F90
ldr r2, _08038F94
str r2, [sp]
movs r4, 0
str r4, [sp, 0x4]
movs r2, 0xD
str r2, [sp, 0x8]
str r4, [sp, 0xC]
movs r2, 0
bl SetMenuItems
_08038F74:
ldr r0, _08038F8C
ldr r0, [r0]
adds r0, 0x8
movs r1, 0
movs r2, 0x1
bl sub_8035CF4
add sp, 0x10
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08038F8C: .4byte gRescuePasswordMenu
_08038F90: .4byte gUnknown_80E752C
_08038F94: .4byte gUnknown_80E7544
thumb_func_end sub_8038DC0
thumb_func_start sub_8038F98
sub_8038F98:
push {r4,r5,lr}
sub sp, 0x10
ldr r5, _08038FF4
ldr r0, [r5]
movs r1, 0xD4
lsls r1, 1
adds r0, r1
bl sub_8006518
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
bl sub_80155F0
ldr r1, [r5]
adds r0, r1, 0
adds r0, 0x8
movs r2, 0xA4
lsls r2, 1
adds r1, r2
ldr r3, _08038FF8
ldr r2, _08038FFC
str r2, [sp]
movs r4, 0
str r4, [sp, 0x4]
movs r2, 0xD
str r2, [sp, 0x8]
str r4, [sp, 0xC]
movs r2, 0
bl SetMenuItems
ldr r0, [r5]
adds r0, 0x8
movs r1, 0
movs r2, 0x1
bl sub_8035CF4
add sp, 0x10
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08038FF4: .4byte gRescuePasswordMenu
_08038FF8: .4byte gUnknown_80E7278
_08038FFC: .4byte gUnknown_80E7290
thumb_func_end sub_8038F98
thumb_func_start ConvertMenutoRescuePasswordState
ConvertMenutoRescuePasswordState:
push {lr}
movs r1, 0xB
ldr r0, _0803901C
ldr r0, [r0]
ldr r0, [r0]
subs r0, 0x1B
cmp r0, 0x7
bhi _08039062
lsls r0, 2
ldr r1, _08039020
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0803901C: .4byte gRescuePasswordMenu
_08039020: .4byte _08039024
.align 2, 0
_08039024:
.4byte _08039044
.4byte _08039054
.4byte _0803904C
.4byte _0803905C
.4byte _08039048
.4byte _08039058
.4byte _08039050
.4byte _08039060
_08039044:
movs r1, 0
b _08039062
_08039048:
movs r1, 0x4
b _08039062
_0803904C:
movs r1, 0x2
b _08039062
_08039050:
movs r1, 0x6
b _08039062
_08039054:
movs r1, 0x1
b _08039062
_08039058:
movs r1, 0x5
b _08039062
_0803905C:
movs r1, 0x3
b _08039062
_08039060:
movs r1, 0x7
_08039062:
adds r0, r1, 0
pop {r1}
bx r1
thumb_func_end ConvertMenutoRescuePasswordState
thumb_func_start sub_8039068
sub_8039068:
push {r4-r6,lr}
adds r6, r0, 0
adds r0, r1, 0
adds r5, r2, 0
adds r1, r5, 0
bl sub_803D204
lsls r0, 24
cmp r0, 0
beq _080390AC
ldrb r0, [r5]
cmp r0, 0x7
bhi _080390AC
ldrb r4, [r5, 0x5]
ldrb r0, [r5, 0x4]
bl sub_8090298
cmp r4, r0
bge _080390AC
movs r0, 0xC
ldrsh r1, [r5, r0]
cmp r1, 0
beq _080390AC
ldr r0, _080390B0
cmp r1, r0
bgt _080390AC
adds r0, r5, 0
adds r0, 0x22
ldrb r0, [r0]
bl IsInvalidItemReward
lsls r0, 24
cmp r0, 0
beq _080390B4
_080390AC:
movs r0, 0x11
b _0803916E
.align 2, 0
_080390B0: .4byte 0x000001a7
_080390B4:
cmp r6, 0x1E
beq _08039120
cmp r6, 0x1E
bhi _080390C2
cmp r6, 0x1C
beq _080390C8
b _0803916A
_080390C2:
cmp r6, 0x20
beq _08039140
b _0803916A
_080390C8:
ldrb r0, [r5]
cmp r0, 0x1
beq _080390D2
movs r0, 0x12
b _0803916E
_080390D2:
ldr r1, [r5, 0x10]
movs r0, 0x2
bl sub_80952F0
lsls r0, 24
cmp r0, 0
bne _08039108
ldr r1, [r5, 0x10]
movs r0, 0x4
bl sub_80952F0
lsls r0, 24
cmp r0, 0
bne _08039108
ldr r1, [r5, 0x10]
movs r0, 0x6
bl sub_80952F0
lsls r0, 24
cmp r0, 0
bne _08039108
ldr r0, [r5, 0x10]
bl sub_8095298
lsls r0, 24
cmp r0, 0
beq _0803910C
_08039108:
movs r0, 0x7
b _0803916E
_0803910C:
bl sub_8095190
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803911C
movs r0, 0xD
b _0803916E
_0803911C:
movs r0, 0x16
b _0803916E
_08039120:
ldrb r0, [r5]
cmp r0, 0x4
beq _0803912A
movs r0, 0x13
b _0803916E
_0803912A:
ldr r1, [r5, 0x10]
movs r0, 0x1
bl sub_80952F0
lsls r0, 24
cmp r0, 0
bne _0803913C
movs r0, 0x9
b _0803916E
_0803913C:
movs r0, 0x17
b _0803916E
_08039140:
ldrb r0, [r5]
cmp r0, 0x5
beq _0803914A
movs r0, 0x14
b _0803916E
_0803914A:
ldr r1, [r5, 0x10]
movs r0, 0x4
bl sub_80952F0
lsls r0, 24
cmp r0, 0
beq _08039162
bl sub_8011C34
ldr r1, [r5, 0x28]
cmp r1, r0
beq _08039166
_08039162:
movs r0, 0xB
b _0803916E
_08039166:
movs r0, 0x18
b _0803916E
_0803916A:
movs r0, 0x1
negs r0, r0
_0803916E:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_8039068
thumb_func_start sub_8039174
sub_8039174:
push {r4,lr}

View File

@@ -216,8 +216,8 @@ gUnknown_8107798: @ 8107798
.string "pksdir0\0"
.align 2,0
.global gUnknown_81077A8
gUnknown_81077A8: @ 81077A8
.global gDungeonFloorCount
gDungeonFloorCount: @ 81077A8
.incbin "baserom.gba", 0x1077A8, 0x40
.global gUnknown_81077E8

View File

@@ -14,9 +14,10 @@ struct RescuePasswordMenu
// size: 0x214
u32 currMenu;
u32 state;
u8 fill8[0x148 - 8];
u32 unk8;
u8 fillC[0x148 - 0xC];
struct UnkTextStruct2 unk148[4];
u8 fill1A8[0x208 - 0x1A8];
struct UnkTextStruct2 unk1A8[4];
struct unkSprite unk208;

View File

@@ -31,7 +31,7 @@ struct unkStruct_203B490
extern bool8 sub_809095C(u8);
extern s32 sub_8090298(u8);
extern s32 GetDungeonFloorCount(u8);
extern bool8 sub_809017C(u8 *);
extern s16 GetBaseSpecies(s16);
extern bool8 IsInvalidItemReward(u8);
@@ -119,7 +119,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
if(sub_809095C(data->dungeon))
return FALSE;
if(data->floor >= sub_8090298(data->dungeon))
if(data->floor >= GetDungeonFloorCount(data->dungeon))
return FALSE;
if(sub_809017C(&(data->dungeon)))
return FALSE;

View File

@@ -8,7 +8,7 @@
extern const char gUnknown_8108F10[];
extern const char gUnknown_8108F18[];
extern const char gUnknown_8108F2C[];
extern u8 gUnknown_81077A8[];
extern u8 gDungeonFloorCount[];
extern u8 gUnknown_81077E8[];
void sub_80901D8(struct DungeonLocation *param_1,struct DungeonLocation *param_2)
@@ -43,14 +43,14 @@ void CopyDungeonName1toBuffer(u8 *buffer, struct DungeonLocation *dungeonLocatio
strncpy(buffer, gDungeonNames[dungeonLocation->dungeonIndex].name1, 0x50);
}
u8 sub_8090298(u8 dungeon)
s32 GetDungeonFloorCount(u8 dungeon)
{
if ((u8)(dungeon - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE)
return 4;
else if(dungeon > DUNGEON_PURITY_FOREST)
return 1;
else
return gUnknown_81077A8[dungeon];
return gDungeonFloorCount[dungeon];
}
u8 sub_80902C8(u8 dungeon)

View File

@@ -2,19 +2,25 @@
#include "memory.h"
#include "input.h"
#include "item.h"
#include "menu.h"
#include "pokemon.h"
#include "save.h"
#include "sub_8095228.h"
#include "text.h"
#include "main_menu.h"
#include "rescue_password_menu.h"
#include "code_8094F88.h"
#include "wonder_mail.h"
extern u8 gUnknown_202EC50[];
extern u32 gUnknown_202EC4C;
extern struct unkStruct_203B484 *gUnknown_203B484;
extern struct UnkTextStruct2 gUnknown_80E71E4;
EWRAM_DATA u8 gUnknown_203B368;
EWRAM_DATA u32 gUnknown_203B36C;
EWRAM_DATA struct RescuePasswordMenu *gRescuePasswordMenu;
extern struct UnkTextStruct2 gUnknown_80E71E4;
extern s32 sub_8035D74(void);
extern void sub_80151C0(u32, u8 *);
extern void sub_8031D70(u32, u32);
@@ -22,6 +28,56 @@ extern u32 ConvertMenutoRescuePasswordState(u32);
extern void sub_8039174(void);
extern void sub_80155F0(void);
extern void sub_8031E10(void);
extern void sub_8038F98(void);
extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0);
extern void sub_80951BC(struct unkStruct_8095228 *r0);
extern void sub_80951FC(struct unkStruct_8095228 *r0);
extern u8 sub_8012FD8(u32 *r0);
extern void sub_8013114(u32 *, s32 *);
extern u32 sub_80154F0(void);
extern u8 sub_809539C(u32, u32);
extern void sub_8095274(u32);
extern u32 sub_8031DCC(void);
extern void sub_80391F8(void);
extern void sub_8031E00();
extern void sub_8038DC0(u32);
extern struct MainMenu *GetMainMenu(void);
extern void sub_8039174(void);
extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32);
extern void sub_8035CF4(u32 *r0, u32, u32);
bool8 IsInvalidItemReward(u8);
bool8 sub_80952F0(u32, u32);
bool8 sub_8095298(u32);
bool8 sub_803D204(u8 *, struct unkStruct_8095228 *);
extern s32 GetDungeonFloorCount(u8);
extern s32 sub_8095190(void);
extern struct UnkTextStruct2 gUnknown_80E71FC;
extern struct UnkTextStruct2 gUnknown_80E7278;
extern struct UnkTextStruct2 gUnknown_80E72EC;
extern struct UnkTextStruct2 gUnknown_80E7344;
extern struct UnkTextStruct2 gUnknown_80E73AC;
extern struct UnkTextStruct2 gUnknown_80E7408;
extern struct UnkTextStruct2 gUnknown_80E7468;
extern struct UnkTextStruct2 gUnknown_80E74C8;
extern struct UnkTextStruct2 gUnknown_80E752C;
extern struct UnkTextStruct2 gUnknown_80E7588;
extern struct MenuItem gUnknown_80E7214[];
extern struct MenuItem gUnknown_80E7290[];
extern struct MenuItem gUnknown_80E7304[];
extern struct MenuItem gUnknown_80E735C[];
extern struct MenuItem gUnknown_80E73C4[];
extern struct MenuItem gUnknown_80E7420[];
extern struct MenuItem gUnknown_80E7480[];
extern struct MenuItem gUnknown_80E74E0[];
extern struct MenuItem gUnknown_80E7544[];
extern struct MenuItem gUnknown_80E75A0[];
void CreateRescuePasswordMenu(u32 currMenu)
{
@@ -91,3 +147,360 @@ void CleanRescuePasswordMenu(void)
gRescuePasswordMenu = NULL;
}
}
static inline s32 UpdateRescuePasswordMenu_sub(s32 otherMenu)
{
u32 iVar1;
s32 nextMenu;
iVar1 = sub_8031DCC();
nextMenu = otherMenu;
if (iVar1 != 0)
return nextMenu;
else
return MENU_NO_SCREEN_CHANGE;
}
s32 UpdateRescuePasswordMenu(void)
{
struct unkStruct_8095228 *puVar5;
struct unkStruct_8095228 *puVar6;
u32 iVar7;
struct MainMenu *iVar9;
s32 nextMenu;
struct unkStruct_8095228 local_44;
u32 local_14;
u32 subtract;
local_14 = 0xb;
nextMenu = MENU_NO_SCREEN_CHANGE;
switch(gRescuePasswordMenu->state) {
case 0:
case 2:
case 4:
nextMenu = UpdateRescuePasswordMenu_sub(MENU_FRIEND_RESCUE);
break;
case 1:
case 3:
case 5:
iVar7 = sub_80154F0();
MemoryFill8((u8 *)&local_44, 0, sizeof(struct unkStruct_8095228));
switch(iVar7)
{
case 1:
sub_8031E00();
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0:
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 2:
nextMenu = MENU_FRIEND_RESCUE;
break;
case 3:
switch(sub_8039068(gRescuePasswordMenu->currMenu, gUnknown_202EC50, &local_44)) {
case 0x11:
nextMenu = 0x11;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0xd:
nextMenu = 0xD;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x12:
nextMenu = 0x12;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 7:
nextMenu = 7;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x16:
sub_8095274(local_44.unk10);
sub_8038F98();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
local_44.mailType = 2;
sub_80951BC(&local_44);
break;
case 0x13:
nextMenu = 0x13;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 9:
nextMenu = 0x9;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x17:
sub_8038F98();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
local_44.mailType = 5;
sub_80951FC(&local_44);
puVar5 = sub_8095228(sub_809539C(1, local_44.unk10));
puVar5->mailType = 7;
MemoryFill8((u8 *)&gUnknown_203B484, 0, sizeof(struct unkStruct_203B484));
break;
default:
break;
case 0x14:
nextMenu = 0x14;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0xb:
nextMenu = 0xb;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x18:
sub_8038F98();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
puVar6 = sub_8095228(sub_809539C(4, local_44.unk10));
*puVar6 = local_44;
puVar6->mailType = 6;
iVar9 = GetMainMenu();
iVar9->unk3A = 1;
break;
}
break;
default:
break;
}
break;
case 6:
nextMenu = UpdateRescuePasswordMenu_sub(MENU_WONDER_MAIL);
break;
case 7:
switch(sub_80154F0())
{
case 3:
nextMenu = 0x15;
sub_8038DC0(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0:
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 1:
sub_8031E00();
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
default:
break;
case 2:
nextMenu = MENU_WONDER_MAIL;
break;
}
break;
case 8:
if (sub_8012FD8(&gRescuePasswordMenu->unk8) == '\0') {
sub_8013114(&gRescuePasswordMenu->unk8, &local_14);
}
switch(local_14)
{
default:
case 0xD:
break;
case 0xA:
case 0xC:
sub_8039174();
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80151C0(4,gUnknown_202EC50);
gRescuePasswordMenu->state = 8;
subtract = gRescuePasswordMenu->currMenu - 0x21;
nextMenu = MENU_FRIEND_RESCUE;
if (1 < subtract) break;
nextMenu = MENU_WONDER_MAIL;
break;
case 11:
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
sub_80391F8();
break;
}
break;
case 9:
if (sub_8012FD8(&gRescuePasswordMenu->unk8) == '\0') {
sub_8013114(&gRescuePasswordMenu->unk8, &local_14);
}
switch(local_14)
{
default:
case 0xD:
break;
case 0xA:
case 0xC:
sub_8039174();
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80151C0(4,gUnknown_202EC50);
gRescuePasswordMenu->state = ConvertMenutoRescuePasswordState(gRescuePasswordMenu->currMenu);
subtract = gRescuePasswordMenu->currMenu - 0x21;
nextMenu = 0x2a;
if (subtract < 2) {
nextMenu = 0x2b;
}
break;
case 0xB:
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
sub_80391F8();
break;
}
}
return nextMenu;
}
void sub_8038DC0(u32 param_1)
{
sub_8006518(gRescuePasswordMenu->unk1A8);
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80155F0();
switch(param_1) {
case 0x11:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E71FC,gUnknown_80E7214,0,0xd,0);
break;
case 0x12:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E72EC,gUnknown_80E7304,0,0xd,0);
break;
case 7:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7344,gUnknown_80E735C,0,0xd,0);
break;
case 0xd:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7588,gUnknown_80E75A0,0,0xd,0);
break;
case 0x13:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E73AC,gUnknown_80E73C4,0,0xd,0);
break;
case 9:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7408,gUnknown_80E7420,0,0xd,0);
break;
case 0x14:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7468,gUnknown_80E7480,0,0xd,0);
break;
case 0xb:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E74C8,gUnknown_80E74E0,0,0xd,0);
break;
case 0x15:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E752C,gUnknown_80E7544,0,0xd,0);
break;
default:
break;
}
sub_8035CF4(&gRescuePasswordMenu->unk8,0,1);
}
void sub_8038F98(void)
{
sub_8006518(gRescuePasswordMenu->unk1A8);
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80155F0();
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7278,gUnknown_80E7290,0,0xd,0);
sub_8035CF4(&gRescuePasswordMenu->unk8,0,1);
}
u32 ConvertMenutoRescuePasswordState(u32 unused)
{
u32 uVar1;
uVar1 = 0xb;
switch(gRescuePasswordMenu->currMenu) {
case 0x1b:
uVar1 = 0;
break;
case 0x1f:
uVar1 = 4;
break;
case 0x1d:
uVar1 = 2;
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
uVar1 = 6;
break;
case 0x1c:
uVar1 = 1;
break;
case 0x20:
uVar1 = 5;
break;
case 0x1e:
uVar1 = 3;
break;
case MENU_RESCUE_PASSWORD_ENTRY:
uVar1 = 7;
break;
}
return uVar1;
}
u32 sub_8039068(u32 param_1, u8 *param_2,struct unkStruct_8095228 *param_3)
{
if ( (!sub_803D204(param_2,param_3)) || (7 < param_3->mailType) ||
(param_3->floor >= GetDungeonFloorCount(param_3->dungeon)) ||
(param_3->clientSpecies == SPECIES_NONE) || (SPECIES_RAYQUAZA_CUTSCENE < param_3->clientSpecies) ||
(IsInvalidItemReward(param_3->unk20.itemIndex))) {
return 0x11;
}
else
switch(param_1)
{
case 0x1C:
if (param_3->mailType != WONDER_MAIL_TYPE_SOS) {
return 0x12;
}
else if ( (sub_80952F0(2, param_3->unk10)) || (sub_80952F0(4, param_3->unk10)) || (sub_80952F0(6, param_3->unk10)) || (sub_8095298(param_3->unk10))) {
return 0x7;
}
else if (sub_8095190() == -1) {
return 0xd;
}
else {
return 0x16;
}
break;
case 0x1E:
if (param_3->mailType != WONDER_MAIL_TYPE_AOK) {
return 0x13;
}
else if (!sub_80952F0(1, param_3->unk10)) {
return 0x9;
}
else {
return 0x17;
}
break;
case 0x20:
if (param_3->mailType != WONDER_MAIL_TYPE_THANK_YOU) {
return 0x14;
}
else if ((!sub_80952F0(4, param_3->unk10)) || (param_3->unk28 != sub_8011C34())) {
return 0xb;
}
else {
return 0x18;
}
break;
default:
return -1;
}
}