Luminous cave (#72)

* fully decomp luminous cave

* remove header file. this one isn't ready yet

* doc few fields and func

* doc more of luminous cave
This commit is contained in:
Seth Barberee 2021-11-10 08:43:51 -08:00 committed by GitHub
parent 681ca68ac9
commit 561ea52847
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 13873 additions and 15519 deletions

View File

@ -1251,7 +1251,7 @@ _08001060: .4byte gUnknown_203B040
sub_8001064:
push {r4,r5,lr}
sub sp, 0x28
bl sub_808D33C
bl GetPlayerPokemonStruct
cmp r0, 0
bne _080010AE
ldr r5, _0800109C

View File

@ -6923,7 +6923,7 @@ sub_801059C:
mov r5, r8
push {r5-r7}
sub sp, 0x14
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r7, r0, 0
ldr r6, _080106E4
ldr r0, [r6]
@ -7898,7 +7898,7 @@ sub_8010DA4:
mov r5, r8
push {r5-r7}
sub sp, 0xC
bl sub_808D33C
bl GetPlayerPokemonStruct
mov r9, r0
ldr r6, _08010EBC
ldr r0, [r6]

View File

@ -59,7 +59,7 @@ _0801B65E:
ldr r0, [r5]
strb r2, [r0, 0x1C]
ldr r4, _0801B6A4
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r1, r0, 0
adds r0, r4, 0
movs r2, 0x6

View File

@ -1008,7 +1008,7 @@ _0801D08C:
strb r5, [r0, 0x8]
ldr r0, [r4]
strb r5, [r0, 0x9]
bl sub_808D33C
bl GetPlayerPokemonStruct
ldr r1, [r4]
str r0, [r1, 0xC]
strb r5, [r1, 0x7]
@ -1128,7 +1128,7 @@ _0801D196:
movs r0, 0x1
b _0801D1CC
_0801D1A0:
bl sub_808D33C
bl GetPlayerPokemonStruct
ldr r1, [r4, 0xC]
cmp r1, r0
bne _0801D1C6

11152
asm/code_801EE10.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2133,7 +2133,7 @@ _0803C154:
cmp r0, 0
bne _0803C154
_0803C168:
bl sub_808D33C
bl GetPlayerPokemonStruct
movs r1, 0x8
ldrsh r0, [r0, r1]
cmp r0, r4

View File

@ -405,11 +405,11 @@ sub_809542C:
bl sub_8094E4C
ldr r1, [r4]
str r0, [r1, 0x10]
bl sub_808D33C
bl GetPlayerPokemonStruct
ldr r1, [r4]
ldrh r0, [r0, 0x8]
strh r0, [r1, 0xC]
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r1, r0, 0
mov r0, sp
bl sub_808DA34

View File

@ -5878,7 +5878,7 @@ _0809BD84:
_0809BDB2:
cmp r4, 0x3
bne _0809BDCC
bl sub_80247C0
bl CleanLuminousCave
ldr r0, _0809BDC8
ldr r0, [r0]
movs r2, 0x86
@ -5892,7 +5892,7 @@ _0809BDCC:
beq _0809BDD2
b _0809B784
_0809BDD2:
bl sub_80247C0
bl CleanLuminousCave
ldr r0, _0809BDE4
ldr r0, [r0]
movs r3, 0x86

View File

@ -659,7 +659,7 @@ _0802798C:
muls r1, r0
ldr r0, [r2]
adds r4, r0, r1
bl sub_808D33C
bl GetPlayerPokemonStruct
ldrb r1, [r4, 0x2]
cmp r1, 0
bne _080279B2
@ -734,95 +734,4 @@ _08027A36:
bx r0
thumb_func_end sub_80278B4
thumb_func_start sub_8027A40
sub_8027A40:
push {lr}
bl sub_80244E4
cmp r0, 0x1
bls _08027A58
cmp r0, 0x3
bhi _08027A58
bl sub_802453C
movs r0, 0x2
bl SetFriendAreaActionMenuState
_08027A58:
pop {r0}
bx r0
thumb_func_end sub_8027A40
thumb_func_start sub_8027A5C
sub_8027A5C:
push {lr}
bl sub_801BF48
cmp r0, 0x1
bls _08027A74
cmp r0, 0x3
bhi _08027A74
bl sub_801BF98
movs r0, 0x2
bl SetFriendAreaActionMenuState
_08027A74:
pop {r0}
bx r0
thumb_func_end sub_8027A5C
thumb_func_start sub_8027A78
sub_8027A78:
push {lr}
sub sp, 0x4
mov r0, sp
bl sub_80144A4
cmp r0, 0
bne _08027AD8
ldr r0, [sp]
cmp r0, 0x2
beq _08027AA2
cmp r0, 0x2
bgt _08027A96
cmp r0, 0x1
beq _08027A9A
b _08027AD8
_08027A96:
cmp r0, 0x3
bne _08027AD8
_08027A9A:
movs r0, 0x2
bl SetFriendAreaActionMenuState
b _08027AD8
_08027AA2:
ldr r0, _08027AB8
ldr r0, [r0]
ldr r0, [r0, 0x18]
ldrb r0, [r0, 0x4]
subs r0, 0x44
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bhi _08027ABC
movs r0, 0x1
b _08027ABE
.align 2, 0
_08027AB8: .4byte gUnknown_203B2BC
_08027ABC:
movs r0, 0
_08027ABE:
cmp r0, 0
beq _08027ACA
movs r0, 0x9
bl SetFriendAreaActionMenuState
b _08027AD8
_08027ACA:
bl sub_8027EB8
ldr r0, _08027AE0
ldr r0, [r0]
ldr r0, [r0, 0x18]
bl sub_808D31C
_08027AD8:
add sp, 0x4
pop {r0}
bx r0
.align 2, 0
_08027AE0: .4byte gUnknown_203B2BC
thumb_func_end sub_8027A78
.align 2,0

File diff suppressed because it is too large Load Diff

View File

@ -1530,7 +1530,7 @@ _080335B8:
.align 2, 0
_080335BC: .4byte gUnknown_80E2D7C
_080335C0:
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r1, r0, 0
adds r1, 0x4C
add r0, sp, 0x14

View File

@ -533,7 +533,7 @@ _080A7BDE:
strh r0, [r7]
b _080A7C10
_080A7BE4:
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r6, r0, 0
bl sub_808D3BC
cmp r0, r6
@ -601,7 +601,7 @@ _080A7C5A:
beq _080A7C60
b _080A7DA6
_080A7C60:
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r4, r0, 0
bl sub_808D3BC
cmp r0, r4
@ -636,7 +636,7 @@ _080A7C94:
b _080A7CCA
_080A7C9A:
movs r6, 0x2
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r4, r0, 0
bl sub_808D3BC
cmp r4, r0
@ -647,7 +647,7 @@ _080A7CAC:
b _080A7DD2
_080A7CB0:
movs r6, 0x1
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r4, r0, 0
bl sub_808D3F8
cmp r4, r0
@ -779,7 +779,7 @@ _080A7DAC:
_080A7DB0:
cmp r2, 0x23
bne _080A7DD2
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r4, r0, 0
bl sub_808D3BC
cmp r0, r4
@ -1046,7 +1046,7 @@ _080A7FEC:
ldrh r0, [r0, 0x8]
b _080A8094
_080A7FF4:
bl sub_808D33C
bl GetPlayerPokemonStruct
ldrh r0, [r0, 0x8]
b _080A8094
_080A7FFC:
@ -2893,7 +2893,7 @@ _080A8D8E:
cmp r0, 0x23
bne _080A8DA0
_080A8D9A:
bl sub_808D33C
bl GetPlayerPokemonStruct
b _080A8E94
_080A8DA0:
adds r0, r1, 0

View File

@ -7814,7 +7814,7 @@ _080A1B18:
bl HasRecruitedMon
b _080A171E
_080A1B20:
bl sub_808D33C
bl GetPlayerPokemonStruct
ldrh r0, [r0, 0x8]
subs r0, 0x90
lsls r0, 16
@ -7825,7 +7825,7 @@ _080A1B20:
_080A1B32:
bl _080A236A
_080A1B36:
bl sub_808D33C
bl GetPlayerPokemonStruct
cmp r0, 0
beq _080A1B4A
movs r5, 0x8
@ -8420,7 +8420,7 @@ _080A2024:
bge _080A1FE0
b _080A236A
_080A202C:
bl sub_808D33C
bl GetPlayerPokemonStruct
cmp r0, 0
beq _080A2040
movs r4, 0x8

730
asm/kecleon_items_1.s Normal file
View File

@ -0,0 +1,730 @@
.include "constants/gba_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_801A9E0
sub_801A9E0:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0xCC
ldr r4, _0801AA2C
ldr r0, [r4]
adds r0, 0x88
ldr r0, [r0]
bl sub_8008C54
ldr r0, [r4]
adds r0, 0x88
ldr r0, [r0]
bl sub_80073B8
ldr r4, [r4]
adds r1, r4, 0
adds r1, 0x72
movs r2, 0
ldrsh r0, [r1, r2]
lsls r0, 3
adds r5, r0, 0
adds r5, 0xA
movs r3, 0
ldrsh r1, [r1, r3]
cmp r1, 0
bne _0801AA34
ldr r2, _0801AA30
adds r0, r4, 0
adds r0, 0x88
ldr r3, [r0]
str r1, [sp]
adds r0, r5, 0
movs r1, 0
bl xxx_call_draw_string
b _0801AA48
.align 2, 0
_0801AA2C: .4byte gUnknown_203B224
_0801AA30: .4byte gTeamToolboxA
_0801AA34:
ldr r2, _0801AA58
adds r0, r4, 0
adds r0, 0x88
ldr r3, [r0]
movs r0, 0
str r0, [sp]
adds r0, r5, 0
movs r1, 0
bl xxx_call_draw_string
_0801AA48:
movs r7, 0
ldr r1, _0801AA5C
ldr r0, [r1]
adds r0, 0x6E
movs r4, 0
ldrsh r0, [r0, r4]
b _0801AD0A
.align 2, 0
_0801AA58: .4byte gTeamToolboxB
_0801AA5C: .4byte gUnknown_203B224
_0801AA60:
ldr r2, [r1]
adds r0, r2, 0
adds r0, 0x72
movs r3, 0
ldrsh r1, [r0, r3]
subs r0, 0x2
movs r4, 0
ldrsh r0, [r0, r4]
muls r0, r1
adds r0, r7
mov r8, r0
ldr r0, _0801AA9C
ldr r0, [r0]
mov r3, r8
lsls r1, r3, 2
adds r0, r1
ldr r0, [r0]
add r1, sp, 0xC8
str r0, [r1]
ldr r0, [r2]
adds r4, r1, 0
cmp r0, 0x5
bls _0801AA90
b _0801ACC4
_0801AA90:
lsls r0, 2
ldr r1, _0801AAA0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0801AA9C: .4byte gTeamInventory_203B460
_0801AAA0: .4byte _0801AAA4
.align 2, 0
_0801AAA4:
.4byte _0801AABC
.4byte _0801AAE4
.4byte _0801AAE4
.4byte _0801AB18
.4byte _0801AB90
.4byte _0801AC50
_0801AABC:
add r0, sp, 0x4
adds r1, r4, 0
movs r2, 0
bl sub_8090E14
ldr r4, _0801AAE0
ldr r0, [r4]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r0, [r4]
adds r0, 0x88
ldr r3, [r0]
movs r0, 0
str r0, [sp]
b _0801AC8C
.align 2, 0
_0801AAE0: .4byte gUnknown_203B224
_0801AAE4:
add r2, sp, 0x54
movs r5, 0
str r5, [sp, 0x54]
strb r5, [r2, 0x4]
movs r0, 0x1
strb r0, [r2, 0x8]
strb r0, [r4]
add r1, sp, 0xC8
add r0, sp, 0x4
bl sub_8090E14
ldr r4, _0801AB14
ldr r0, [r4]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r0, [r4]
adds r0, 0x88
ldr r3, [r0]
str r5, [sp]
b _0801AC8C
.align 2, 0
_0801AB14: .4byte gUnknown_203B224
_0801AB18:
add r2, sp, 0x60
movs r6, 0
str r6, [sp, 0x60]
strb r6, [r2, 0x4]
movs r0, 0x1
strb r0, [r2, 0x8]
strb r0, [r4]
add r1, sp, 0xC8
add r0, sp, 0x4
bl sub_8090E14
ldr r5, _0801AB60
ldr r0, [r5]
mov r4, r8
lsls r1, r4, 2
adds r0, 0x4
adds r0, r1
ldr r0, [r0]
cmp r0, 0
bne _0801AB4E
mov r0, r8
bl sub_801ADA0
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0
beq _0801AB64
_0801AB4E:
ldr r0, [r5]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r0, [r5]
b _0801AC86
.align 2, 0
_0801AB60: .4byte gUnknown_203B224
_0801AB64:
ldr r0, _0801AB88
add r1, sp, 0x4
movs r2, 0x50
bl strncpy
ldr r0, [r5]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r2, _0801AB8C
ldr r0, [r5]
adds r0, 0x88
ldr r3, [r0]
str r4, [sp]
b _0801AC3C
.align 2, 0
_0801AB88: .4byte gUnknown_202DE58
_0801AB8C: .4byte gUnknown_80DB994
_0801AB90:
ldrb r0, [r4, 0x2]
bl CanSellItem
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0
beq _0801AC10
add r2, sp, 0x6C
movs r1, 0x3
str r1, [sp, 0x6C]
movs r6, 0
strb r6, [r2, 0x4]
movs r0, 0x58
strh r0, [r2, 0x6]
movs r0, 0x1
strb r0, [r2, 0x8]
strb r1, [r4]
add r0, sp, 0x4
adds r1, r4, 0
bl sub_8090E14
adds r0, r4, 0
bl GetStackSellPrice
ldr r1, _0801AC00
ldr r1, [r1]
movs r2, 0x98
lsls r2, 2
adds r1, r2
ldr r1, [r1]
adds r0, r1
ldr r1, _0801AC04
cmp r0, r1
ble _0801AC76
add r5, sp, 0x78
ldr r1, _0801AC08
adds r0, r5, 0
add r2, sp, 0x4
bl ExpandPlaceholdersBuffer
ldr r4, _0801AC0C
ldr r0, [r4]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r0, [r4]
adds r0, 0x88
ldr r3, [r0]
str r6, [sp]
movs r0, 0x8
adds r2, r5, 0
bl xxx_call_draw_string
b _0801ACC4
.align 2, 0
_0801AC00: .4byte gTeamInventory_203B460
_0801AC04: .4byte 0x0001869f
_0801AC08: .4byte gUnknown_80DB9A0
_0801AC0C: .4byte gUnknown_203B224
_0801AC10:
add r0, sp, 0x4
adds r1, r4, 0
movs r2, 0
bl sub_8090E14
ldr r0, _0801AC44
add r1, sp, 0x4
movs r2, 0x50
bl strncpy
ldr r4, _0801AC48
ldr r0, [r4]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r2, _0801AC4C
ldr r0, [r4]
adds r0, 0x88
ldr r3, [r0]
str r5, [sp]
_0801AC3C:
movs r0, 0x8
bl xxx_format_and_draw
b _0801ACC4
.align 2, 0
_0801AC44: .4byte gUnknown_202DE58
_0801AC48: .4byte gUnknown_203B224
_0801AC4C: .4byte gUnknown_80DB994
_0801AC50:
add r2, sp, 0x78
movs r6, 0
str r6, [sp, 0x78]
strb r6, [r2, 0x4]
movs r0, 0x1
strb r0, [r2, 0x8]
strb r0, [r4]
add r4, sp, 0xC8
add r0, sp, 0x4
adds r1, r4, 0
bl sub_8090E14
ldrb r0, [r4, 0x2]
bl IsGummiItem
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0
beq _0801AC9C
_0801AC76:
ldr r4, _0801AC98
ldr r0, [r4]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r0, [r4]
_0801AC86:
adds r0, 0x88
ldr r3, [r0]
str r6, [sp]
_0801AC8C:
movs r0, 0x8
add r2, sp, 0x4
bl xxx_call_draw_string
b _0801ACC4
.align 2, 0
_0801AC98: .4byte gUnknown_203B224
_0801AC9C:
ldr r0, _0801AD28
add r1, sp, 0x4
movs r2, 0x50
bl strncpy
ldr r4, _0801AD2C
ldr r0, [r4]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r1, r0, 0
ldr r2, _0801AD30
ldr r0, [r4]
adds r0, 0x88
ldr r3, [r0]
str r5, [sp]
movs r0, 0x8
bl xxx_format_and_draw
_0801ACC4:
mov r0, r8
bl sub_801AED0
movs r1, 0x1
ands r1, r0
cmp r1, 0
beq _0801ACFE
ldr r4, _0801AD2C
ldr r0, [r4]
adds r0, 0x54
adds r1, r7, 0
bl sub_8013800
adds r2, r0, 0
ldr r1, [r4]
adds r0, r1, 0
adds r0, 0x88
ldr r0, [r0]
adds r1, 0x8C
ldr r1, [r1]
movs r4, 0xC
ldrsh r3, [r1, r4]
subs r3, 0x2
lsls r3, 3
movs r1, 0xA
str r1, [sp]
movs r1, 0x8
bl sub_8007B7C
_0801ACFE:
adds r7, 0x1
ldr r1, _0801AD2C
ldr r0, [r1]
adds r0, 0x6E
movs r2, 0
ldrsh r0, [r0, r2]
_0801AD0A:
adds r2, r1, 0
cmp r7, r0
bge _0801AD12
b _0801AA60
_0801AD12:
ldr r0, [r2]
adds r0, 0x88
ldr r0, [r0]
bl sub_80073E0
add sp, 0xCC
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0801AD28: .4byte gUnknown_202DE58
_0801AD2C: .4byte gUnknown_203B224
_0801AD30: .4byte gUnknown_80DB994
thumb_func_end sub_801A9E0
thumb_func_start sub_801AD34
sub_801AD34:
push {r4-r6,lr}
sub sp, 0x8
adds r4, r0, 0
bl sub_8008C54
adds r0, r4, 0
bl sub_80073B8
ldr r2, _0801AD98
movs r6, 0
str r6, [sp]
movs r0, 0x6
movs r1, 0
adds r3, r4, 0
bl xxx_call_draw_string
bl GetNumberOfFilledInventorySlots
adds r2, r0, 0
movs r5, 0x7
str r5, [sp]
str r4, [sp, 0x4]
movs r0, 0x12
movs r1, 0xD
movs r3, 0x2
bl sub_8012BC4
ldr r2, _0801AD9C
str r6, [sp]
movs r0, 0x16
movs r1, 0xD
adds r3, r4, 0
bl xxx_call_draw_string
str r5, [sp]
str r4, [sp, 0x4]
movs r0, 0x2B
movs r1, 0xD
movs r2, 0x14
movs r3, 0x2
bl sub_8012BC4
adds r0, r4, 0
bl sub_80073E0
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0801AD98: .4byte gUnknown_80DB9A8
_0801AD9C: .4byte gUnknown_80DB9B0
thumb_func_end sub_801AD34
thumb_func_start sub_801ADA0
sub_801ADA0:
push {r4-r6,lr}
ldr r5, _0801ADEC
ldr r1, [r5]
lsls r0, 2
adds r1, r0
ldr r6, [r1]
lsls r4, r6, 8
lsrs r0, r4, 24
bl IsNotMoneyOrUsedTMItem
lsls r0, 24
cmp r0, 0
beq _0801AE12
lsrs r0, r4, 24
bl IsThrowableItem
lsls r0, 24
cmp r0, 0
beq _0801ADF4
lsrs r0, r4, 24
bl sub_801AE24
ldr r2, [r5]
lsrs r1, r4, 24
lsls r1, 1
adds r2, 0x50
adds r2, r1
lsls r0, 16
lsrs r0, 16
ldrh r2, [r2]
adds r0, r2
lsrs r1, r6, 8
lsls r1, 24
lsrs r1, 24
adds r0, r1
ldr r1, _0801ADF0
b _0801AE0E
.align 2, 0
_0801ADEC: .4byte gTeamInventory_203B460
_0801ADF0: .4byte 0x000003e7
_0801ADF4:
lsrs r0, r4, 24
bl sub_801AE24
ldr r2, [r5]
lsrs r1, r4, 24
lsls r1, 1
adds r2, 0x50
adds r2, r1
lsls r0, 16
lsrs r0, 16
ldrh r2, [r2]
adds r0, r2
ldr r1, _0801AE18
_0801AE0E:
cmp r0, r1
ble _0801AE1C
_0801AE12:
movs r0, 0
b _0801AE1E
.align 2, 0
_0801AE18: .4byte 0x000003e6
_0801AE1C:
movs r0, 0x1
_0801AE1E:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_801ADA0
thumb_func_start sub_801AE24
sub_801AE24:
push {r4-r7,lr}
adds r7, r0, 0
movs r5, 0
movs r6, 0
b _0801AE74
_0801AE2E:
ldr r0, _0801AE64
ldr r0, [r0]
lsls r1, r6, 2
adds r0, 0x4
adds r0, r1
ldr r0, [r0]
cmp r0, 0
beq _0801AE72
ldr r0, _0801AE68
ldr r0, [r0]
adds r0, r1
ldr r4, [r0]
lsls r1, r4, 8
lsrs r0, r1, 24
cmp r0, r7
bne _0801AE72
bl IsThrowableItem
lsls r0, 24
cmp r0, 0
beq _0801AE6C
lsrs r0, r4, 8
lsls r0, 24
lsrs r0, 24
adds r0, r5, r0
b _0801AE6E
.align 2, 0
_0801AE64: .4byte gUnknown_203B224
_0801AE68: .4byte gTeamInventory_203B460
_0801AE6C:
adds r0, r5, 0x1
_0801AE6E:
lsls r0, 16
lsrs r5, r0, 16
_0801AE72:
adds r6, 0x1
_0801AE74:
bl GetNumberOfFilledInventorySlots
cmp r6, r0
blt _0801AE2E
adds r0, r5, 0
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_801AE24
thumb_func_start sub_801AE84
sub_801AE84:
push {r4,lr}
movs r2, 0
ldr r4, _0801AEA4
movs r3, 0
_0801AE8C:
ldr r0, [r4]
lsls r1, r2, 2
adds r0, 0x4
adds r0, r1
str r3, [r0]
adds r2, 0x1
cmp r2, 0x13
ble _0801AE8C
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0801AEA4: .4byte gUnknown_203B224
thumb_func_end sub_801AE84
thumb_func_start sub_801AEA8
sub_801AEA8:
push {lr}
movs r3, 0
ldr r0, _0801AECC
ldr r0, [r0]
adds r1, r0, 0x4
movs r2, 0x13
_0801AEB4:
ldr r0, [r1]
cmp r0, 0
beq _0801AEBC
adds r3, 0x1
_0801AEBC:
adds r1, 0x4
subs r2, 0x1
cmp r2, 0
bge _0801AEB4
adds r0, r3, 0
pop {r1}
bx r1
.align 2, 0
_0801AECC: .4byte gUnknown_203B224
thumb_func_end sub_801AEA8
thumb_func_start sub_801AED0
sub_801AED0:
ldr r1, _0801AEE0
ldr r1, [r1]
lsls r0, 2
adds r1, 0x4
adds r1, r0
ldr r0, [r1]
bx lr
.align 2, 0
_0801AEE0: .4byte gUnknown_203B224
thumb_func_end sub_801AED0
thumb_func_start sub_801AEE4
sub_801AEE4:
ldr r2, _0801AEF4
ldr r2, [r2]
lsls r0, 2
adds r2, 0x4
adds r2, r0
str r1, [r2]
bx lr
.align 2, 0
_0801AEF4: .4byte gUnknown_203B224
thumb_func_end sub_801AEE4
thumb_func_start sub_801AEF8
sub_801AEF8:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x4
movs r0, 0
mov r9, r0
b _0801AF78
_0801AF08:
movs r1, 0x1
add r1, r9
mov r8, r1
mov r7, r8
b _0801AF6E
_0801AF12:
ldr r2, _0801AF90
ldr r0, [r2]
mov r1, r9
lsls r6, r1, 2
adds r0, r6
ldrb r0, [r0, 0x2]
str r2, [sp]
bl GetItemOrder
adds r4, r0, 0
ldr r2, [sp]
ldr r0, [r2]
lsls r5, r7, 2
adds r0, r5
ldrb r0, [r0, 0x2]
bl GetItemOrder
ldr r2, [sp]
cmp r4, r0
bgt _0801AF4C
cmp r4, r0
bne _0801AF6C
ldr r0, [r2]
adds r1, r0, r6
adds r0, r5
ldrb r1, [r1, 0x1]
ldrb r0, [r0, 0x1]
cmp r1, r0
bcs _0801AF6C
_0801AF4C:
ldr r0, [r2]
adds r2, r0, r6
ldr r3, [r2]
adds r0, r5
ldr r1, [r0]
str r1, [r2]
str r3, [r0]
ldr r0, _0801AF94
ldr r0, [r0]
adds r0, 0x4
adds r2, r0, r6
ldr r3, [r2]
adds r0, r5
ldr r1, [r0]
str r1, [r2]
str r3, [r0]
_0801AF6C:
adds r7, 0x1
_0801AF6E:
bl GetNumberOfFilledInventorySlots
cmp r7, r0
blt _0801AF12
mov r9, r8
_0801AF78:
bl GetNumberOfFilledInventorySlots
subs r0, 0x1
cmp r9, r0
blt _0801AF08
add sp, 0x4
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0801AF90: .4byte gTeamInventory_203B460
_0801AF94: .4byte gUnknown_203B224
thumb_func_end sub_801AEF8
.align 2,0

View File

@ -190,7 +190,7 @@ _080300F4:
_08030108: .4byte gMakuhitaDialogue
_0803010C:
ldr r4, _08030138
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r1, r0, 0
adds r0, r4, 0
movs r2, 0x6

View File

@ -636,8 +636,8 @@ _0808D338:
bx r0
thumb_func_end sub_808D31C
thumb_func_start sub_808D33C
sub_808D33C:
thumb_func_start GetPlayerPokemonStruct
GetPlayerPokemonStruct:
push {r4,lr}
movs r3, 0
ldr r0, _0808D360
@ -669,7 +669,7 @@ _0808D370:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_808D33C
thumb_func_end GetPlayerPokemonStruct
thumb_func_start sub_808D378
sub_808D378:

File diff suppressed because it is too large Load Diff

View File

@ -443,7 +443,7 @@ _0802BFE8:
adds r1, r4, 0
movs r2, 0x6
bl sub_803B6B0
bl sub_808D33C
bl GetPlayerPokemonStruct
adds r1, r0, 0
mov r0, r9
bl sub_808DA34

View File

@ -97,6 +97,7 @@ bool8 IsGummiItem(u8);
void xxx_init_unk230_substruct(u8);
bool8 xxx_insert_unk230_80919FC(u8);
struct HeldItem *xxx_get_inv_unk230_at_809185C(u8);
struct HeldItem* xxx_get_unk250_at_8091A90(u8);
s32 xxx_count_inv_unk230();
u32 xxx_count_non_empty_inv_unk250_8091A48();
void sub_8091BB4(u8);
@ -105,6 +106,7 @@ void ShiftItemsDownFrom(s32 start);
void MoveToStorage(struct ItemSlot* slot);
void FillInventoryGaps();
bool8 sub_8091274(struct HeldItem* slot);
bool8 IsNotMoneyOrUsedTMItem(u8 id);
void RestoreHeldItem(struct unkStruct_8094924*, struct HeldItem*);

View File

@ -41,4 +41,25 @@ struct unkStruct_203B210
struct UnkTextStruct2 unkE8[4];
};
struct unkStruct_203B224
{
// size: 0xF4
u32 unk0;
u32 unk4[INVENTORY_SIZE];
u32 unk54;
u8 fill58[0x6C - 0x58];
s16 unk6C;
s16 unk6E;
s16 unk70;
s16 unk72;
u16 unk74;
u16 unk76;
u8 fill78[0x88 - 0x78];
u32 unk88;
struct UnkTextStruct2 *unk8C;
struct UnkTextStruct2 unk90[4];
u8 unkF0[4];
};
#endif // GUARD_KECLEON_ITEMS_H

View File

@ -100,7 +100,8 @@ SECTIONS {
src/kecleon_items.o(.text);
asm/kecleon_items.o(.text);
src/kecleon_items_1.o(.text);
asm/pokemon_square.o(.text);
asm/kecleon_items_1.o(.text);
src/kecleon_items_2.o(.text);
src/code_801AFA4.o(.text);
asm/code_801AFA4.o(.text);
src/code_801B3C0.o(.text);
@ -115,7 +116,10 @@ SECTIONS {
src/gulpin_shop.o(.text);
asm/gulpin_shop.o(.text);
src/gulpin_shop_1.o(.text);
asm/code_801EE10.o(.text);
src/luminous_cave.o(.text);
asm/friend_list_menu.o(.text);
src/friend_list_menu.o(.text);
src/friend_area_action_menu.o(.text);
asm/friend_area_action_menu.o(.text);
src/friend_area_action_menu_1.o(.text);

View File

@ -70,7 +70,6 @@ extern void sub_8012EA4(u32 *, u32);
extern void sub_80073E0(u32);
extern void sub_8013C68(u32 *);
extern void xxx_call_draw_string(s32, u32, const char *, u32, u32);
extern bool8 IsNotMoneyOrUsedTMItem(u8);
extern u32 sub_801CA08(u32);
extern u8 sub_801CB24();
extern void sub_801CBB8();

View File

@ -15,7 +15,7 @@ extern const char gUnknown_81098A4;
extern const char gUnknown_81098AC;
extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *r2, ...);
extern void sub_8090FEC(u32, u32 *r1, u32);
extern void sub_8090FEC(u32, u8 *r1, u32);
const struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS] =
{
@ -605,11 +605,11 @@ void sub_8092558(u8 *buffer, u8 index)
void sub_8092578(u8 *buffer, u8 index, u8 r2)
{
// I think this is when we buy the friend area from wigglytuff
u32 temp[5];
u8 priceBuffer[0x14];
if(r2)
{
sub_8090FEC(gFriendAreaSettings[index].price, (&temp[0]), 1);
ExpandPlaceholdersBuffer(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, temp);
sub_8090FEC(gFriendAreaSettings[index].price, priceBuffer, 1);
ExpandPlaceholdersBuffer(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, priceBuffer);
}
else
{

View File

@ -10,8 +10,8 @@
extern struct unkStruct_203B2BC *gUnknown_203B2BC;
extern struct TeamInventory *gTeamInventory_203B460;
u32 sub_801B410();
void sub_801B450();
extern u32 sub_801B410();
extern void sub_801B450();
extern u32 sub_801EF38(u8 r0);
extern void sub_801F214();
@ -29,9 +29,6 @@ extern u32 sub_801A6E8(u32);
extern s32 sub_80144A4(s32 *);
extern void sub_8027EB8();
extern void sub_808D31C(struct PokemonStruct *);
u32 sub_8027E18(struct PokemonStruct *);
bool8 IsNotMoneyOrUsedTMItem(u8 id);
u8 sub_8027E4C(struct PokemonStruct *r0);
extern u8 sub_80023E4(u32);
extern struct PokemonStruct *sub_808D3F8(void);
extern struct PokemonStruct *sub_808D3BC(void);
@ -45,6 +42,74 @@ extern void sub_80073E0(u32);
extern u8 gUnknown_202DE58[];
extern u32 sub_801F194(void);
u32 sub_8027E18(struct PokemonStruct *);
u8 sub_8027E4C(struct PokemonStruct *r0);
extern u32 sub_801BF48(void);
extern void sub_801BF98(void);
extern u32 sub_80244E4(void);
extern void sub_802453C(void);
void sub_8027A40(void)
{
switch(sub_80244E4())
{
case 2:
case 3:
sub_802453C();
SetFriendAreaActionMenuState(2);
break;
case 0:
case 1:
break;
}
}
void sub_8027A5C(void)
{
switch(sub_801BF48())
{
case 2:
case 3:
sub_801BF98();
SetFriendAreaActionMenuState(2);
break;
case 0:
case 1:
break;
}
}
static inline bool8 sub_8027A78_sub(void) {
if (gUnknown_203B2BC->unk18->unk4.unk4 == 0x44 || gUnknown_203B2BC->unk18->unk4.unk4 == 0x45)
return TRUE;
else
return FALSE;
}
void sub_8027A78(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
switch(temp)
{
case 1:
case 3:
SetFriendAreaActionMenuState(2);
break;
case 2:
if (sub_8027A78_sub())
SetFriendAreaActionMenuState(9);
else
{
sub_8027EB8();
sub_808D31C(gUnknown_203B2BC->unk18);
}
break;
}
}
}
void sub_8027AE4(void)
{
s32 local_8;
@ -194,7 +259,7 @@ void sub_8027D40(u32 r0, struct HeldItem *heldItem)
a3.unk0 = 0;
a3.unk4 = 0;
a3.unk8 = 1;
slot.itemFlags = 1;
slot.itemFlags = ITEM_FLAG_EXISTS;
sub_8090E14(gUnknown_202DE58, &slot, &a3);
xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0);
sub_80073E0(r0);

446
src/friend_list_menu.c Normal file
View File

@ -0,0 +1,446 @@
#include "global.h"
#include "item.h"
#include "pokemon.h"
#include "text.h"
#include "team_inventory.h"
#include "constants/move.h"
struct unkStruct_203B2B8
{
// size: 0x280
u32 state;
u32 unk4;
u8 unk8;
s16 pokeSpecies;
u32 unkC;
struct HeldItem unk10;
struct HeldItem unk14;
struct PokemonStruct *unk18;
u8 fill1C[0x4];
u32 unk20;
u16 unk24;
struct PokemonMove unk28[4];
u8 fill48[0x70 - 0x48];
u32 unk70;
u32 unk74;
u32 unk78;
u32 unk7C;
u8 fill80[0xCC - 0x80];
u32 unkCC;
};
extern struct unkStruct_203B2B8 *gUnknown_203B2B8;
extern u8 gAvailablePokemonNames[0x58];
extern u8 gUnknown_202DEA8[0x58];
extern u8 gUnknown_202DE58[0x58];
extern u8 gUnknown_80DD6E0[];
extern u8 gPartyMenuItemPlaceholder[];
extern struct UnkTextStruct2 gUnknown_80DD370;
extern u32 sub_8026F04(struct PokemonStruct *);
extern void GivePokemonItem(s16 index_, struct HeldItem* item);
extern void sub_8026074(u32);
extern void PlaySound(u32);
bool8 sub_8026F38(struct PokemonStruct *r0);
extern u8 sub_80023E4(u8);
extern struct PokemonStruct *sub_808D3F8(void);
extern struct PokemonStruct *sub_808D3BC(void);
extern void sub_801F214(void);
extern u32 sub_801F194(void);
extern u32 sub_801EF38(u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void sub_80922B4(u8 *, const u8 *, u32);
extern void ExpandPlaceholdersBuffer(u8 *buffer, const u8 *text, ...);
extern void sub_808D930(u8 *, s16);
extern s32 sub_8008ED0(u8 *);
extern void xxx_call_draw_string(s32 x, s32 y, u8 *, u32, u32);
extern void xxx_format_and_draw(s32, s32, u8 *, ...);
extern s32 sub_80144A4(s32 *);
extern u32 sub_801F890(void);
extern void sub_801F8D0(void);
extern u32 sub_801B410(void);
extern void sub_801B450(void);
extern void nullsub_104(void);
extern void sub_801A928(void);
extern void sub_8099690(u32);
extern u32 sub_801A6E8(u32);
extern u8 sub_8012FD8(u32 *);
extern void sub_8013114(u32 *, s32 *);
extern u32 sub_801A8AC(void);
extern u32 sub_8022860(void);
extern void sub_8022908(void);
extern void sub_801BF98(void);
extern u32 sub_801BF48(void);
extern void sub_802453C(void);
extern u32 sub_80244E4(void);
void sub_8026A78(void)
{
switch(sub_80244E4())
{
case 2:
case 3:
sub_802453C();
sub_8026074(2);
break;
case 0:
case 1:
break;
}
}
void sub_8026A94(void)
{
switch(sub_801BF48())
{
case 2:
case 3:
sub_801BF98();
sub_8026074(2);
break;
case 0:
case 1:
break;
}
}
static inline bool8 sub_8026AB0_sub(void) {
if (gUnknown_203B2B8->unk18->unk4.unk4 == 0x44 || gUnknown_203B2B8->unk18->unk4.unk4 == 0x45)
return TRUE;
else
return FALSE;
}
void sub_8026AB0(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
switch(temp)
{
case 1:
case 3:
sub_8026074(2);
break;
case 2:
if (sub_8026AB0_sub())
sub_8026074(0xD);
else
sub_8026074(8);
break;
}
}
}
void sub_8026B10(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
switch(temp)
{
case 1:
case 3:
sub_8026074(2);
break;
case 2:
sub_8026074(8);
break;
}
}
}
void sub_8026B48(void)
{
switch(sub_8022860())
{
case 2:
case 3:
sub_8022908();
sub_8026074(2);
break;
case 0:
case 1:
break;
}
}
void sub_8026B64(void)
{
switch(sub_801A6E8(1))
{
case 3:
gUnknown_203B2B8->unkC = sub_801A8AC();
gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex;
gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems;
sub_8026074(0x14);
break;
case 4:
gUnknown_203B2B8->unkC = sub_801A8AC();
gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex;
gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems;
sub_8099690(0);
sub_8026074(0x15);
break;
case 2:
sub_801A928();
sub_8026074(2);
break;
case 0:
case 1:
break;
}
}
void sub_8026C14(void)
{
u32 nextState;
struct unkStruct_8090F58 temp;
int menuAction;
struct ItemSlot slot;
menuAction = 0;
sub_801A6E8(0);
if ((sub_8012FD8(&gUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&gUnknown_203B2B8->unkCC,&menuAction), menuAction != 1)) {
gUnknown_203B2B8->unk74 = menuAction;
}
switch(menuAction)
{
case 0xb:
nextState = 0xF;
PlaySound(0x14d);
ShiftItemsDownFrom(gUnknown_203B2B8->unkC);
FillInventoryGaps();
if (gUnknown_203B2B8->unk14.itemIndex != '\0') {
sub_8091274(&gUnknown_203B2B8->unk14);
nextState = 0x10;
}
HeldItemToSlot(&slot,&gUnknown_203B2B8->unk10);
temp.unk0 = 0;
temp.unk4 = 0;
temp.unk8 = 1;
slot.itemFlags = ITEM_FLAG_EXISTS;
sub_8090E14(gUnknown_202DEA8,&slot,&temp);
GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->unk10);
sub_801A928();
nullsub_104();
sub_8026074(nextState);
break;
case 4:
sub_8099690(0);
sub_8026074(0x15);
break;
case 1:
sub_8026074(0x13);
break;
}
}
void sub_8026CF0(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
sub_8026074(0x13);
break;
case 0:
case 1:
break;
}
}
void sub_8026D0C(void)
{
switch(sub_801EF38(1))
{
case 0:
case 1:
break;
case 3:
case 4:
gUnknown_203B2B8->unk20 = sub_801F194();
gUnknown_203B2B8->unk24 = gUnknown_203B2B8->unk28[gUnknown_203B2B8->unk20].moveID;
sub_8026074(0x18);
break;
case 2:
sub_801F214();
sub_8026074(2);
break;
}
}
void sub_8026D6C(void)
{
switch(sub_801F890())
{
case 2:
case 3:
sub_801F8D0();
sub_8026074(0x17);
break;
case 0:
case 1:
break;
}
}
void sub_8026D88(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
sub_8026074(gUnknown_203B2B8->unk4);
}
}
void sub_8026DAC(u32 r0, struct HeldItem *r1)
{
struct ItemSlot slot;
struct unkStruct_8090F58 temp;
sub_8008C54(r0);
sub_80073B8(r0);
HeldItemToSlot(&slot, r1);
temp.unk0 = 0;
temp.unk4 = 0;
temp.unk8 = 1;
slot.itemFlags = ITEM_FLAG_EXISTS;
sub_8090E14(gUnknown_202DE58, &slot, &temp);
xxx_format_and_draw(4, 3, gPartyMenuItemPlaceholder, r0, 0);
sub_80073E0(r0);
}
void sub_8026E08(u32 r0)
{
u8 buffer1[40];
u8 buffer[20];
s32 x;
sub_8008C54(r0);
sub_80073B8(r0);
sub_80922B4(gAvailablePokemonNames, gUnknown_203B2B8->unk18->name, POKEMON_NAME_LENGTH);
sub_808D930(buffer, gUnknown_203B2B8->unk18->speciesNum);
ExpandPlaceholdersBuffer(buffer1, gUnknown_80DD6E0, gAvailablePokemonNames);
x = sub_8008ED0(buffer1);
xxx_call_draw_string(((gUnknown_80DD370.unk0c << 3) - x) / 2, 3, buffer1, r0, 0);
sub_80073E0(r0);
}
u32 sub_8026E88(struct PokemonStruct *r0)
{
u8 iVar3;
if(r0->unk2 == 0)
{
iVar3 = (r0->unk4.unk4 == 0x41);
if(iVar3 != 0)
if(sub_80023E4(0x8) == 0)
return 0;
}
else
return 0;
return 1;
}
u32 sub_8026EB8(struct PokemonStruct *r0)
{
u8 iVar3;
if(sub_808D3BC() != r0)
if(sub_808D3F8() != r0)
if(r0->unk2 == 0)
{
iVar3 = (r0->unk4.unk4 == 0x41);
if(iVar3 != 0)
{
if(sub_80023E4(0x8) != 0)
goto check;
}
else
check:
if(sub_8026F04(r0) != 3)
return 1;
}
return 0;
}
u32 sub_8026F04(struct PokemonStruct *r0)
{
if(r0->heldItem.itemIndex == 0)
return 0;
else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
return 1;
else if(sub_8026F38(r0))
return 2;
else
return 3;
}
bool8 sub_8026F38(struct PokemonStruct *r0)
{
if(IsNotMoneyOrUsedTMItem(r0->heldItem.itemIndex))
{
if(IsThrowableItem(r0->heldItem.itemIndex))
{
if((gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] + r0->heldItem.numItems) > 999)
return FALSE;
}
else
{
if(gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] > 998)
return FALSE;
}
}
else
return FALSE;
return TRUE;
}
void sub_8026FA4(void)
{
switch(sub_8026F04(gUnknown_203B2B8->unk18))
{
case 1:
PlaySound(0x14d);
sub_8091274(&gUnknown_203B2B8->unk14);
FillInventoryGaps();
gUnknown_203B2B8->unk14.itemIndex = 0;
gUnknown_203B2B8->unk14.numItems = 0;
GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14);
sub_8026074(0xA);
break;
case 2:
PlaySound(0x14d);
if(IsThrowableItem(gUnknown_203B2B8->unk14.itemIndex))
{
gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += gUnknown_203B2B8->unk14.numItems;
}
else
{
gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += 1;
}
gUnknown_203B2B8->unk14.itemIndex = 0;
gUnknown_203B2B8->unk14.numItems = 0;
GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14);
sub_8026074(0xB);
break;
case 0:
default:
sub_8026074(0x19);
break;
}
}

View File

@ -339,7 +339,7 @@ void sub_8090E14(u8* ext_buffer, struct ItemSlot* slot, struct unkStruct_8090F58
ExpandPlaceholdersBuffer(buffer, gUnknown_8109778, gItemParametersData[slot->itemIndex].namePointer);
}
}
else if (slot->itemIndex == 105) {
else if (slot->itemIndex == ITEM_ID_POKE) {
ExpandPlaceholdersBuffer(buffer, gUnknown_810977C, GetMoneyValue(slot));
}
else {

View File

@ -33,7 +33,6 @@ extern u8 sub_8012FD8(u32 *r0);
extern void sub_8013114(u32 *, s32 *);
extern void sub_801CBB8();
extern bool8 IsNotMoneyOrUsedTMItem(u8);
extern bool8 sub_801ADA0(u32);
extern void sub_8099690(u32);
extern u32 sub_8013BBC(u32 *);

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "item.h"
#include "kangaskhan_storage.h"
#include "team_inventory.h"
@ -24,7 +25,6 @@ extern void sub_801CBB8(void);
extern void sub_8017F10(u32);
extern void sub_8012EA4(u32 *, u32);
bool8 IsNotMoneyOrUsedTMItem(u8 id);
extern u8 sub_801ADA0(s32);
extern void sub_801A928(void);
extern void sub_8099690(u32);

View File

@ -8,6 +8,10 @@
#include "team_inventory.h"
extern struct unkStruct_203B210 *gUnknown_203B210;
extern u8 gUnknown_80DB8E4[];
extern u8 gUnknown_80DB8EC[];
extern u8 gUnknown_80DB92C[];
extern u8 gUnknown_80DB934[];
extern s32 sub_80144A4(s32 *);
void UpdateKecleonStoreState(u32);
@ -18,11 +22,27 @@ extern void sub_8099690(u32);
extern u8 sub_8012FD8(u32 *);
extern void sub_8013114(u32 *, u32 *);
extern u32 sub_8019EDC(u8);
extern void sub_801A2A8(u32);
extern u32 sub_801A2A8(u8);
extern s32 sub_801A8AC(void);
extern u32 sub_801A6E8(u32);
extern u32 sub_801A6E8(u8);
extern void sub_801A928(void);
extern void DrawTeamMoneyBox(u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern s32 sub_8013800(void *, u32);
extern void ExpandPlaceholdersBuffer(u8 *, u8 *, ...);
extern void xxx_call_draw_string(s32 x, s32, u8 *, u32, u32);
extern void sub_801AE84(void);
extern void sub_8012D08(void *, u32);
extern void sub_801A998(void);
extern void sub_801A9E0(void);
extern void sub_801AEF8(void);
extern bool8 sub_801ADA0(u32);
extern u32 sub_801AEA8(void);
extern struct unkStruct_203B224 *gUnknown_203B224;
struct unkStruct_203B214
{;
@ -47,6 +67,7 @@ struct unkStruct_203B214
};
extern struct unkStruct_203B214 *gUnknown_203B214;
extern struct unkStruct_203B214 *gUnknown_203B21C;
struct ItemSlot_Alt
{
@ -67,12 +88,22 @@ extern void sub_8013660(void *);
extern struct UnkTextStruct2 gUnknown_80DB8CC;
extern struct UnkTextStruct2 gUnknown_80DB8B4;
extern struct UnkTextStruct2 gUnknown_80DB8FC;
extern struct UnkTextStruct2 gUnknown_80DB944;
extern const struct UnkTextStruct2 gUnknown_80DB914;
extern u16 gUnknown_203B218;
extern u16 gUnknown_203B220;
extern void sub_801A430(void);
extern void sub_801A4A4(void);
extern void sub_8013984(u8 *);
extern void sub_801A064(void);
extern void sub_801A0D8(void);
extern void AddMenuCursorSprite(void *);
extern s32 xxx_count_inv_unk230();
extern u8 sub_801A37C(void);
extern u16 gUnknown_203B228;
extern u16 gUnknown_203B22A;
extern struct UnkTextStruct2 gUnknown_80DB95C;
void sub_8019B08(void)
{
@ -368,3 +399,509 @@ void sub_801A010(void)
gUnknown_203B214 = NULL;
}
}
NAKED
void sub_801A064(void)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tldr r4, _0801A0D4\n"
"\tldr r0, [r4]\n"
"\tldrh r1, [r0, 0x20]\n"
"\tadds r0, 0x9C\n"
"\tmovs r2, 0\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tldrh r1, [r0, 0x1E]\n"
"\tadds r0, 0x9D\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x9E\n"
"\tmovs r1, 0xA\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x9F\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tmovs r1, 0x1A\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x34]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x4A\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x34]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x4C\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x3C\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0801A0D4: .4byte gUnknown_203B214");
}
void sub_801A0D8(void)
{
struct HeldItem *heldItem;
s32 iVar2;
s32 y;
s32 iVar4;
u8 auStack204 [80];
struct unkStruct_8090F58 local_7c;
u8 auStack112 [80];
struct ItemSlot_Alt slot;
u8 temp_calc;
// Needed for the shifts..
u32 index_shift;
u32 numItems_shift;
sub_8008C54(gUnknown_203B214->unk34);
sub_80073B8(gUnknown_203B214->unk34);
xxx_call_draw_string(gUnknown_203B214->unk1E * 8 + 10,0,gUnknown_80DB8E4,
gUnknown_203B214->unk34,0);
for(iVar4 = 0; iVar4 < gUnknown_203B214->unk1A; iVar4++)
{
temp_calc = (gUnknown_203B214->unk1E * gUnknown_203B214->unk1C) + iVar4;
heldItem = xxx_get_inv_unk230_at_809185C(temp_calc);
index_shift = heldItem->itemIndex << 16;
slot.temp.full_bits = (slot.temp.full_bits & 0xff00ffff) | index_shift;
numItems_shift = heldItem->numItems << 8;
slot.temp.full_bits = (slot.temp.full_bits & 0xffff00ff) | numItems_shift;
slot.temp.full_bits = (slot.temp.full_bits & 0xffffff00) | (ITEM_FLAG_EXISTS | ITEM_FLAG_FOR_SALE);
local_7c.unk0 = 1;
local_7c.unk4 = 0;
local_7c.unk6 = 0x58;
local_7c.unk8 = 1;
sub_8090E14(auStack204,(struct ItemSlot *)&slot,&local_7c);
iVar2 = GetStackBuyPrice((struct ItemSlot *)&slot);
if (iVar2 <= gTeamInventory_203B460->teamMoney) {
y = sub_8013800(gUnknown_203B214,iVar4);
xxx_call_draw_string(8,y,auStack204,gUnknown_203B214->unk34,0);
}
else {
ExpandPlaceholdersBuffer(auStack112,gUnknown_80DB8EC,auStack204);
y = sub_8013800(gUnknown_203B214,iVar4);
xxx_call_draw_string(8,y,auStack112,gUnknown_203B214->unk34,0);
}
}
sub_80073E0(gUnknown_203B214->unk34);
}
u32 sub_801A20C(u32 r0)
{
if(xxx_count_non_empty_inv_unk250_8091A48() == 0)
{
return 0;
}
else
{
gUnknown_203B21C = MemoryAlloc(sizeof(struct unkStruct_203B214), 0x8);
gUnknown_203B21C->unk34 = r0;
gUnknown_203B21C->unk38 = &gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34];
sub_8006518(gUnknown_203B21C->unk3C);
gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34] = gUnknown_80DB914;
gUnknown_203B21C->unk38->unk14 = gUnknown_203B21C->unk9C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B21C->unk3C, 1, 1);
sub_8013818(gUnknown_203B21C, xxx_count_non_empty_inv_unk250_8091A48(), 0xA, r0);
gUnknown_203B21C->temp.unk18 = gUnknown_203B220;
sub_8013984((u8 *)gUnknown_203B21C);
sub_801A430();
sub_801A4A4();
return 1;
}
}
u32 sub_801A2A8(u8 r0)
{
struct ItemSlot_Alt slot;
struct HeldItem *return_var;
u32 r2;
u32 r3;
if(r0 == 0)
{
sub_8013660(gUnknown_203B21C);
return 0;
}
else
{
switch(GetKeyPress(gUnknown_203B21C))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
return_var = xxx_get_unk250_at_8091A90(sub_801A37C());
// NOTE: needs seperate vars to match
r2 = return_var->itemIndex << 16;
slot.temp.full_bits = (slot.temp.full_bits & 0xff00ffff) | r2;
r3 = return_var->numItems << 8;
slot.temp.full_bits = (slot.temp.full_bits & 0xffff00ff) | r3;
if(GetStackBuyPrice((struct ItemSlot *)&slot) > gTeamInventory_203B460->teamMoney)
{
PlayMenuSoundEffect(2);
}
else
{
PlayMenuSoundEffect(0);
}
return 3;
case 4:
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(gUnknown_203B21C, 1) != 0)
{
sub_801A430();
sub_801A4A4();
return 1;
}
else
{
return 0;
}
}
}
}
u8 sub_801A37C(void)
{
return (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + gUnknown_203B21C->temp.unk18_u8;
}
void sub_801A398(u32 r0)
{
u8 r0_u8;
r0_u8 = r0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B21C->unk3C, 0, 0);
gUnknown_203B21C->unk22 = xxx_count_non_empty_inv_unk250_8091A48();
sub_8013984((u8 *)gUnknown_203B21C);
sub_801A430();
sub_801A4A4();
if(r0_u8)
AddMenuCursorSprite(gUnknown_203B21C);
}
void sub_801A3DC(void)
{
if(gUnknown_203B21C != NULL)
{
gUnknown_203B220 = gUnknown_203B21C->temp.unk18;
gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34] = gUnknown_80DB8FC;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B21C->unk3C, 1, 1);
MemoryFree(gUnknown_203B21C);
gUnknown_203B21C = NULL;
}
}
NAKED
void sub_801A430(void)
{
asm_unified("\tpush {r4,lr}\n"
"\tldr r4, _0801A4A0\n"
"\tldr r0, [r4]\n"
"\tldrh r1, [r0, 0x20]\n"
"\tadds r0, 0x9C\n"
"\tmovs r2, 0\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tldrh r1, [r0, 0x1E]\n"
"\tadds r0, 0x9D\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x9E\n"
"\tmovs r1, 0xA\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x9F\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tmovs r1, 0x1A\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x34]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x4A\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x34]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x4C\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x3C\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0801A4A0: .4byte gUnknown_203B21C");
}
void sub_801A4A4(void)
{
struct HeldItem *heldItem;
s32 iVar2;
s32 y;
s32 iVar4;
u8 auStack204 [80];
struct unkStruct_8090F58 local_7c;
u8 auStack112 [80];
struct ItemSlot_Alt slot;
u8 temp_calc;
// Needed for the shifts..
u32 index_shift;
u32 numItems_shift;
sub_8008C54(gUnknown_203B21C->unk34);
sub_80073B8(gUnknown_203B21C->unk34);
xxx_call_draw_string(gUnknown_203B21C->unk1E * 8 + 10,0,gUnknown_80DB92C,
gUnknown_203B21C->unk34,0);
for(iVar4 = 0; iVar4 < gUnknown_203B21C->unk1A; iVar4++)
{
temp_calc = (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + iVar4;
heldItem = xxx_get_unk250_at_8091A90(temp_calc);
index_shift = heldItem->itemIndex << 16;
slot.temp.full_bits = (slot.temp.full_bits & 0xff00ffff) | index_shift;
numItems_shift = heldItem->numItems << 8;
slot.temp.full_bits = (slot.temp.full_bits & 0xffff00ff) | numItems_shift;
slot.temp.full_bits = (slot.temp.full_bits & 0xffffff00) | (ITEM_FLAG_EXISTS | ITEM_FLAG_FOR_SALE);
local_7c.unk0 = 1;
local_7c.unk4 = 0;
local_7c.unk6 = 0x58;
local_7c.unk8 = 1;
sub_8090E14(auStack204,(struct ItemSlot *)&slot,&local_7c);
iVar2 = GetStackBuyPrice((struct ItemSlot *)&slot);
if (iVar2 <= gTeamInventory_203B460->teamMoney) {
y = sub_8013800(gUnknown_203B21C,iVar4);
xxx_call_draw_string(8,y,auStack204,gUnknown_203B21C->unk34,0);
}
else {
ExpandPlaceholdersBuffer(auStack112,gUnknown_80DB934,auStack204);
y = sub_8013800(gUnknown_203B21C,iVar4);
xxx_call_draw_string(8,y,auStack112,gUnknown_203B21C->unk34,0);
}
}
sub_80073E0(gUnknown_203B21C->unk34);
}
u32 sub_801A5D8(u32 param_1,int param_2,struct UnkTextStruct2_sub *param_3,u32 param_4)
{
if (GetNumberOfFilledInventorySlots() == 0) {
return 0;
}
else {
if (gUnknown_203B224 == NULL) {
gUnknown_203B224 = MemoryAlloc(sizeof(struct unkStruct_203B224),8);
}
gUnknown_203B224->unk0 = param_1;
FillInventoryGaps();
sub_801AE84();
gUnknown_203B224->unk88 = param_2;
gUnknown_203B224->unk8C = &gUnknown_203B224->unk90[param_2];
sub_8006518(gUnknown_203B224->unk90);
gUnknown_203B224->unk90[gUnknown_203B224->unk88] = gUnknown_80DB95C;
gUnknown_203B224->unk8C->unk14 = gUnknown_203B224->unkF0;
if (param_3 != NULL) {
gUnknown_203B224->unk90[gUnknown_203B224->unk88].unk08 = *param_3;
}
sub_8012D08(gUnknown_203B224->unk8C,param_4);
sub_8099690(1);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B224->unk90,1,1);
sub_8013818(&gUnknown_203B224->unk54,GetNumberOfFilledInventorySlots(),param_4,param_2);
gUnknown_203B224->unk6C = gUnknown_203B228;
gUnknown_203B224->unk72 = gUnknown_203B22A;
sub_8013984((u8 *)&gUnknown_203B224->unk54);
sub_801A998();
sub_801A9E0();
return 1;
}
}
u32 sub_801A6E8(u8 param_1)
{
s32 iVar5;
struct ItemSlot local_10;
if (param_1 == '\0') {
sub_8013660(&gUnknown_203B224->unk54);
return 0;
}
switch(GetKeyPress(&gUnknown_203B224->unk54)) {
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
switch(gUnknown_203B224->unk0) {
case 0:
case 1:
case 2:
if (gUnknown_203B224->unk4[sub_801A8AC()] != 0)
PlayMenuSoundEffect(2);
else
PlayMenuSoundEffect(0);
break;
case 3:
if ((sub_801AEA8() != 0) || (sub_801ADA0(sub_801A8AC()) != '\0'))
PlayMenuSoundEffect(0);
else
PlayMenuSoundEffect(2);
break;
case 4:
local_10 = gTeamInventory_203B460->teamItems[sub_801A8AC()];
if (CanSellItem(local_10.itemIndex) && (GetStackSellPrice(&local_10) + gTeamInventory_203B460->teamMoney < 100000))
PlayMenuSoundEffect(0);
else
PlayMenuSoundEffect(2);
break;
case 5:
PlayMenuSoundEffect(0);
break;
}
return 3;
case 4:
PlayMenuSoundEffect(4);
return 4;
case 5:
case 6:
if (gUnknown_203B224->unk0 != 3) goto _0801A87C;
iVar5 = sub_801A8AC();
if ((gUnknown_203B224->unk4[iVar5] != 0) || (sub_801ADA0(iVar5) != '\0')) {
PlayMenuSoundEffect(6);
gUnknown_203B224->unk4[iVar5] = gUnknown_203B224->unk4[iVar5] ^ 1;
sub_80138B8(&gUnknown_203B224->unk54,0);
sub_801A9E0();
return 1;
}
else
{
PlayMenuSoundEffect(2);
goto _0801A87C;
}
case 3:
if (gUnknown_203B224->unk0 != 2) {
PlayMenuSoundEffect(5);
sub_801AEF8();
sub_801A9E0();
}
// NOTE: fallthrough needed here
default:
_0801A87C:
if (sub_80138B8(&gUnknown_203B224->unk54,1) != '\0') {
sub_801A998();
sub_801A9E0();
return 1;
}
else {
return 0;
}
break;
}
}
s32 sub_801A8AC(void)
{
return (gUnknown_203B224->unk72 * gUnknown_203B224->unk70) + gUnknown_203B224->unk6C;
}
void sub_801A8D0(u32 r0)
{
u8 r0_u8;
r0_u8 = r0;
sub_8099690(1);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B224->unk90, 0, 0);
FillInventoryGaps();
gUnknown_203B224->unk76 = GetNumberOfFilledInventorySlots();
sub_8013984((u8 *)&gUnknown_203B224->unk54);
sub_801A998();
sub_801A9E0();
if(r0_u8)
AddMenuCursorSprite((u8 *)&gUnknown_203B224->unk54);
}
void sub_801A928(void)
{
if(gUnknown_203B224 != NULL)
{
gUnknown_203B228 = gUnknown_203B224->unk6C;
gUnknown_203B22A = gUnknown_203B224->unk72;
gUnknown_203B224->unk90[gUnknown_203B224->unk88] = gUnknown_80DB944;
sub_8099690(0);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B224->unk90, 1, 1);
MemoryFree(gUnknown_203B224);
gUnknown_203B224 = NULL;
}
}
void sub_801A998(void)
{
gUnknown_203B224->unkF0[0] = gUnknown_203B224->unk74;
gUnknown_203B224->unkF0[1] = gUnknown_203B224->unk72;
gUnknown_203B224->unkF0[2] = 0xB;
gUnknown_203B224->unkF0[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B224->unk90, 1, 1);
}

15
src/kecleon_items_2.c Normal file
View File

@ -0,0 +1,15 @@
#include "global.h"
#include "file_system.h"
#include "memory.h"
#include "pokemon.h"
#include "input.h"
#include "item.h"
#include "kecleon_items.h"
#include "team_inventory.h"
extern struct unkStruct_203B224 *gUnknown_203B224;
struct unkStruct_203B224 * sub_801AF98(void)
{
return gUnknown_203B224;
}

View File

@ -98,7 +98,7 @@ extern void sub_8013114(u32 *, u32 *);
extern void sub_8095240(u32);
extern void sub_80920D8(u8 *);
extern struct PokemonStruct *sub_808D33C(void);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
extern u8 sub_80023E4(u32);
extern u8 *sub_8098FB4();
extern void ExpandPlaceholdersBuffer(u8 *buffer, const u8 *text, ...);
@ -259,7 +259,7 @@ void DrawLoadScreenText(void)
xxx_call_draw_string(64,0,gLoadScreen->formattedTeamName,0,0);
// Draw Player Name
playerInfo = sub_808D33C();
playerInfo = GetPlayerPokemonStruct();
if (playerInfo == NULL)
sub_80922B4(playerName, gNoNamePlaceholder, POKEMON_NAME_LENGTH);
else

850
src/luminous_cave.c Normal file
View File

@ -0,0 +1,850 @@
#include "global.h"
#include "constants/bg_music.h"
#include "input.h"
#include "item.h"
#include "memory.h"
#include "menu.h"
#include "pokemon.h"
#include "random.h"
#include "text.h"
#include "team_inventory.h"
struct unkStruct_203B2B0
{
// size: 0x174
u8 unk0;
u8 fill1[0x3];
u8 unk4;
u8 unk5;
u8 unk6;
u16 unk8;
/* 0xA */ s16 targetSpecies; // species # of the evolved pokemon (what we are evolving to)
struct PokemonStruct *pokeStruct;
/* 0x10 */ bool8 pokeRenamed;
/* 0x14 */ u32 evoItem1_InvIndex; // inventory index of item
/* 0x18 */ u32 evoItem2_InvIndex; // inventory index of item
struct ItemSlot unk1C;
u32 state;
u32 fallbackState;
u32 unk28;
u32 unk2C;
u32 unk30;
struct MenuItem unk34[8];
u16 unk74[0x8];
u32 unk84;
u8 fill88[0x104 - 0x88];
struct OpenedFile *unk104;
u8 *unk108;
u16 unk10C;
u16 unk10E;
u8 unk110;
u8 unk111;
u8 unk112;
struct UnkTextStruct2 unk114[4];
};
extern struct unkStruct_203B2B0 *gUnknown_203B2B0;
extern struct UnkTextStruct2 gUnknown_80DCA00;
extern struct UnkTextStruct2 gUnknown_80DC9E8;
extern u8 gPlayerName[];
extern u8 gAvailablePokemonNames[];
extern u8 gUnknown_202DFE8[];
extern u8 gLuminousCaveSeekAwakening[];
extern u8 gLuminousCaveEvolutionInfo[];
extern u8 gLuminousCaveAskEvolution[];
extern u8 gLuminousCaveYeShallReturn[];
extern u8 gLuminousCaveGiveItem[];
extern u8 gLuminousCaveGiveAnotherItem[];
extern u8 gLuminousCaveLackWhatIsNeeded[];
extern u8 gLuminousCaveOnlyOneItem[];
extern u8 gLuminousCaveLetUsBegin[];
extern u8 gLuminousCaveChangedAppearance[];
extern u8 gLuminousCaveEvolved[];
extern u8 gLuminousCaveGiveName[];
extern u8 gLuminousCaveComeAlone[];
extern u8 gLuminousCaveLackLevel[];
extern u8 gLuminousCaveCantEvolveAnymore[];
extern u8 gLuminousCaveLackFriendArea[];
extern u8 gLuminousCaveLackRoom[];
extern u8 gLuminousCaveLackIQ[];
extern u8 gLuminousCaveLackItem[];
extern u8 gLuminousCaveCantEvolveYet[];
extern u8 gUnknown_80DCA18[];
extern u8 *gUnknown_80D4970[];
extern u8 *gUnknown_80D4934[];
extern u8 gUnknown_80DCA24[];
extern u8 gUnknown_80DCA2C[];
extern bool8 IsPokemonRenamed(struct PokemonStruct* pokemon);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
extern void UpdateLuminousCaveState(u32);
extern void sub_8024E9C(void);
extern void sub_8024F00(void);
extern void sub_8024FD4(void);
extern void sub_80250EC(void);
extern void sub_80251CC(void);
extern void sub_8024F70(void);
extern void sub_8025058(void);
extern void sub_802515C(void);
extern void sub_80251E8(void);
extern void sub_8025204(void);
extern void LuminousCave_AdvancetoFallbackState(void);
extern void sub_8024804(void);
extern void UpdateLuminousCaveDialogue(void);
extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u16 *, u32, u32, struct OpenedFile **r5, u32);
void xxx_call_fade_out_bgm(u16 speed);
void sub_801199C(u16 songIndex);
void ClearItemSlotAt(u32 index);
void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed);
void sub_80977D0(void);
void PlaySound(u32);
void sub_8024CFC(void);
void sub_8025254(void);
void sub_8024D48(void);
extern void sub_801A5D8(u32, u32, u32, u32);
extern void sub_801A8D0(u32);
extern void sub_801A9E0();
extern void sub_801B3C0(struct ItemSlot *);
extern void nullsub_104();
void sub_8024DBC(void);
void sub_8024E30(void);
void sub_801AEE4(u32, u32);
extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32);
void sub_808F734(struct PokemonStruct *, s16);
void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size);
u32 sub_801602C(u32 r0, u8 *name);
void sub_808D9AC(u8 *buffer, struct PokemonStruct *pokemon, s32 colorNum);
extern s32 sub_80144A4(s32 *);
extern u32 sub_801A6E8(u32);
extern s32 sub_801A8AC(void);
extern void sub_8099690(u32);
extern void sub_801A928(void);
extern void PlayMenuSoundEffect(u32);
extern u8 sub_8012FD8(u32 *);
extern void sub_8013114(u32 *, u32 *);
extern u32 sub_801B410(void);
extern void sub_801B450(void);
extern u32 sub_8016080(void);
extern void sub_80160D8(void);
extern void sub_808F468(struct PokemonStruct *, u8 *, u32);
bool8 LuminousCave_HasOnly1Member(void);
enum
{
LUMINOUS_CAVE_ENTRY,
LUMINOUS_CAVE_ASK_EVOLVE,
LUMINOUS_CAVE_EVOLVE_INFO,
LUMINOUS_CAVE_SHALL_RETURN,
LUMINOUS_CAVE_GIVE_ITEM_1 = 5,
LUMINOUS_CAVE_GIVE_ITEM_2 = 10,
LUMINOUS_CAVE_LACK_WHAT_NEEDED = 0xF,
LUMINOUS_CAVE_ONLY_ONE_ITEM = 0x10,
LUMINOUS_CAVE_LET_US_BEGIN = 0x11,
LUMINOUS_CAVE_CHANGED_APPEARANCE = 0x12,
LUMINOUS_CAVE_EVOLVED = 0x13,
LUMINOUS_CAVE_PROMPT_NAME = 0x14,
LUMINOUS_CAVE_FINISH_NAME = 0x15,
LUMINOUS_CAVE_COME_ALONE = 0x16,
LUMINOUS_CAVE_LACK_LEVEL = 0x17,
LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE = 0x18,
LUMINOUS_CAVE_LACK_FRIEND_AREA = 0x19,
LUMINOUS_CAVE_LACK_ROOM = 0x1A,
LUMINOUS_CAVE_LACK_IQ = 0x1B,
LUMINOUS_CAVE_LACK_ITEM = 0x1C,
LUMINOUS_CAVE_CANT_EVOLVE_YET = 0x1D,
};
u32 sub_802465C(void)
{
struct OpenedFile *faceFile;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
gUnknown_203B2B0 = MemoryAlloc(sizeof(struct unkStruct_203B2B0),8);
gUnknown_203B2B0->unk28 = 0;
gUnknown_203B2B0->unk2C = 0;
gUnknown_203B2B0->unk30 = 0;
gUnknown_203B2B0->pokeStruct = GetPlayerPokemonStruct();
gUnknown_203B2B0->pokeRenamed = IsPokemonRenamed(gUnknown_203B2B0->pokeStruct);
gUnknown_203B2B0->unk0 = 0;
faceFile = GetDialogueSpriteDataPtr(SPECIES_GULPIN);
gUnknown_203B2B0->unk104 = faceFile;
gUnknown_203B2B0->unk108 = faceFile->data;
gUnknown_203B2B0->unk110 = 0;
gUnknown_203B2B0->unk111 = 0;
gUnknown_203B2B0->unk112 = 0;
gUnknown_203B2B0->unk10C = 2;
gUnknown_203B2B0->unk10E = 8;
UpdateLuminousCaveState(LUMINOUS_CAVE_ENTRY);
return 1;
}
u32 sub_80246F0(void)
{
switch(gUnknown_203B2B0->state) {
case LUMINOUS_CAVE_ENTRY:
case LUMINOUS_CAVE_ASK_EVOLVE:
sub_8024E9C();
break;
case LUMINOUS_CAVE_GIVE_ITEM_1:
sub_8024F00();
break;
case 6:
case 7:
sub_8024FD4();
break;
case 8:
sub_80250EC();
break;
case 9:
sub_80251CC();
break;
case LUMINOUS_CAVE_GIVE_ITEM_2:
sub_8024F70();
break;
case 0xb:
case 0xc:
sub_8025058();
break;
case 0xd:
sub_802515C();
break;
case 0xe:
sub_80251E8();
break;
case LUMINOUS_CAVE_FINISH_NAME:
sub_8025204();
break;
case 4:
return 3;
default:
LuminousCave_AdvancetoFallbackState();
break;
}
return 0;
}
u8 sub_80247B4(void)
{
return gUnknown_203B2B0->unk0;
}
void CleanLuminousCave(void)
{
if(gUnknown_203B2B0 != NULL)
{
CloseFile(gUnknown_203B2B0->unk104);
MemoryFree(gUnknown_203B2B0);
gUnknown_203B2B0 = NULL;
}
}
void UpdateLuminousCaveState(u32 newState)
{
gUnknown_203B2B0->state = newState;
sub_8024804();
UpdateLuminousCaveDialogue();
}
void sub_8024804(void)
{
s32 iVar4;
sub_8006518(gUnknown_203B2B0->unk114);
switch(gUnknown_203B2B0->state) {
case 8:
case 0xD:
gUnknown_203B2B0->unk114[2] = gUnknown_80DCA00;
break;
case LUMINOUS_CAVE_LET_US_BEGIN:
case LUMINOUS_CAVE_CHANGED_APPEARANCE:
case LUMINOUS_CAVE_EVOLVED:
case LUMINOUS_CAVE_COME_ALONE:
case LUMINOUS_CAVE_LACK_LEVEL:
case LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE:
case LUMINOUS_CAVE_LACK_FRIEND_AREA:
case LUMINOUS_CAVE_LACK_ROOM:
case LUMINOUS_CAVE_LACK_IQ:
case LUMINOUS_CAVE_LACK_ITEM:
break;
default:
for(iVar4 = 0; iVar4 < 4; iVar4++)
{
gUnknown_203B2B0->unk114[iVar4] = gUnknown_80DC9E8;
}
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2B0->unk114, 1, 1);
}
void UpdateLuminousCaveDialogue(void)
{
char *monName;
switch(gUnknown_203B2B0->state) {
case LUMINOUS_CAVE_ENTRY:
if (LuminousCave_HasOnly1Member()) {
gUnknown_203B2B0->unk28 = 3;
}
else {
gUnknown_203B2B0->unk28 = 1;
}
sub_8024CFC();
sub_8014248(gLuminousCaveSeekAwakening,0,gUnknown_203B2B0->unk28,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5);
break;
case LUMINOUS_CAVE_ASK_EVOLVE:
sub_8024CFC();
sub_8014248(gLuminousCaveAskEvolution,0,gUnknown_203B2B0->unk28,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5);
break;
case LUMINOUS_CAVE_EVOLVE_INFO:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_ASK_EVOLVE;
sub_80141B4(gLuminousCaveEvolutionInfo,0,0,0x105);
break;
case LUMINOUS_CAVE_SHALL_RETURN:
gUnknown_203B2B0->fallbackState = 4;
xxx_call_fade_in_new_bgm(MUS_LOADING_SCREEN,0x3c);
sub_80141B4(gLuminousCaveYeShallReturn,0,0,0x305);
break;
case LUMINOUS_CAVE_GIVE_ITEM_1:
sub_8024D48();
sub_8014248(gLuminousCaveGiveItem,0,gUnknown_203B2B0->unk2C,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5);
break;
case 6:
sub_801A5D8(2,3,0,10);
break;
case 7:
sub_801A8D0(1);
break;
case LUMINOUS_CAVE_GIVE_ITEM_2:
sub_8024DBC();
sub_8014248(gLuminousCaveGiveAnotherItem,0,gUnknown_203B2B0->unk2C,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5);
break;
case 0xb:
sub_801A5D8(2,3,0,10);
sub_801AEE4(gUnknown_203B2B0->evoItem1_InvIndex,1);
sub_801A9E0();
break;
case 0xc:
sub_801A8D0(1);
sub_801AEE4(gUnknown_203B2B0->evoItem1_InvIndex,1);
sub_801A9E0();
break;
case 8:
case 0xd:
sub_801A9E0();
sub_8024E30();
sub_8012D60(&gUnknown_203B2B0->unk84,gUnknown_203B2B0->unk34,0,gUnknown_203B2B0->unk74,
gUnknown_203B2B0->unk30,2);
break;
case 9:
case 0xe:
sub_801B3C0(&gUnknown_203B2B0->unk1C);
break;
case LUMINOUS_CAVE_LACK_WHAT_NEEDED:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_GIVE_ITEM_1;
sub_80141B4(gLuminousCaveLackWhatIsNeeded,0,0,0x105);
break;
case LUMINOUS_CAVE_ONLY_ONE_ITEM:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_GIVE_ITEM_2;
sub_80141B4(gLuminousCaveOnlyOneItem,0,0,0x105);
break;
case LUMINOUS_CAVE_LET_US_BEGIN:
sub_8025254();
if((gUnknown_203B2B0->unk8 & 1) != 0)
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CHANGED_APPEARANCE;
else if(gUnknown_203B2B0->unk8 == 4)
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE;
else if(gUnknown_203B2B0->unk8 == 2)
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_LEVEL;
else if(gUnknown_203B2B0->unk8 == 0x10)
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_IQ;
else if(gUnknown_203B2B0->unk8 == 0x20)
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_FRIEND_AREA;
else if(gUnknown_203B2B0->unk8 == 0x40)
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ROOM;
else if(gUnknown_203B2B0->unk8 == 8)
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ITEM;
else
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_YET;
xxx_call_fade_out_bgm(0x3c);
sub_80141B4(gLuminousCaveLetUsBegin,0,0,0x105);
break;
case LUMINOUS_CAVE_CHANGED_APPEARANCE:
sub_808D9AC(gPlayerName,gUnknown_203B2B0->pokeStruct,5);
PlaySound(0x1ff);
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_EVOLVED;
sub_80141B4(gLuminousCaveChangedAppearance,0,0,0x105);
break;
case LUMINOUS_CAVE_EVOLVED:
monName = GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum);
strcpy(gAvailablePokemonNames,monName);
monName = GetMonSpecies(gUnknown_203B2B0->targetSpecies);
strcpy(gAvailablePokemonNames + 0x50,monName);
gUnknown_203B2B0->unk0 = 1;
sub_80977D0();
sub_808F734(gUnknown_203B2B0->pokeStruct,gUnknown_203B2B0->targetSpecies);
nullsub_104();
gUnknown_203B2B0->pokeStruct = GetPlayerPokemonStruct();
if (gUnknown_203B2B0->evoItem1_InvIndex != INVENTORY_SIZE) {
ClearItemSlotAt(gUnknown_203B2B0->evoItem1_InvIndex);
}
if (gUnknown_203B2B0->evoItem2_InvIndex != INVENTORY_SIZE) {
ClearItemSlotAt(gUnknown_203B2B0->evoItem2_InvIndex);
}
FillInventoryGaps();
sub_801199C(0x1ff);
PlaySound(0xd2);
if (gUnknown_203B2B0->pokeRenamed) {
BoundedCopyStringtoBuffer(gUnknown_203B2B0->pokeStruct->name,GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum),POKEMON_NAME_LENGTH);
}
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveEvolved,0,0,0x105);
break;
case LUMINOUS_CAVE_COME_ALONE:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveComeAlone,0,0,0x105);
break;
case LUMINOUS_CAVE_LACK_LEVEL:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveLackLevel,0,0,0x105);
break;
case LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveCantEvolveAnymore,0,0,0x105);
break;
case LUMINOUS_CAVE_LACK_FRIEND_AREA:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveLackFriendArea,0,0,0x105);
break;
case LUMINOUS_CAVE_LACK_ROOM:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveLackRoom,0,0,0x105);
break;
case LUMINOUS_CAVE_LACK_IQ:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveLackIQ,0,0,0x105);
break;
case LUMINOUS_CAVE_LACK_ITEM:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveLackItem,0,0,0x105);
break;
case LUMINOUS_CAVE_CANT_EVOLVE_YET:
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN;
sub_80141B4(gLuminousCaveCantEvolveYet,0,0,0x105);
break;
case LUMINOUS_CAVE_PROMPT_NAME:
xxx_call_fade_in_new_bgm(8,0x3c);
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_FINISH_NAME;
sub_80141B4(gLuminousCaveGiveName,0,0,0x105);
break;
case LUMINOUS_CAVE_FINISH_NAME:
if (gUnknown_203B2B0->pokeRenamed) {
BoundedCopyStringtoBuffer(gUnknown_203B2B0->pokeStruct->name,GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum),POKEMON_NAME_LENGTH);
}
sub_801602C(0,gUnknown_203B2B0->pokeStruct->name);
break;
default:
break;
}
}
void sub_8024CFC(void)
{
u8 *nullString;
struct unkStruct_203B2B0 *preload;
u32 defaultAction;
MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74));
preload = gUnknown_203B2B0;
nullString = NULL;
preload->unk34[0].text = gUnknown_80DCA18;
preload->unk34[0].menuAction = 3;
defaultAction = 1;
preload->unk34[1].text = *gUnknown_80D4970;
preload->unk34[1].menuAction = 2;
preload->unk34[2].text = *gUnknown_80D4934;
preload->unk34[2].menuAction = defaultAction;
preload->unk34[3].text = nullString;
preload->unk34[3].menuAction = defaultAction;
}
void sub_8024D48(void)
{
u8 *nullString;
struct unkStruct_203B2B0 *preload;
u32 defaultAction;
s32 iVar4;
s32 loopMax;
MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74));
preload = gUnknown_203B2B0;
nullString = NULL;
preload->unk34[0].text = gUnknown_80DCA24;
preload->unk34[0].menuAction = 4;
defaultAction = 1;
preload->unk34[1].text = gUnknown_80DCA2C;
preload->unk34[1].menuAction = 5;
preload->unk34[2].text = *gUnknown_80D4934;
preload->unk34[2].menuAction = defaultAction;
loopMax = 3;
preload->unk34[3].text = nullString;
preload->unk34[3].menuAction = defaultAction;
for(iVar4 = 0; iVar4 < loopMax; iVar4++)
{
if(gUnknown_203B2B0->unk74[iVar4] == 0)
{
if(gUnknown_203B2B0->unk34[iVar4].menuAction == gUnknown_203B2B0->unk2C)
return;
}
}
gUnknown_203B2B0->unk2C = 4;
}
void sub_8024DBC(void)
{
u8 *nullString;
struct unkStruct_203B2B0 *preload;
u32 defaultAction;
s32 iVar4;
s32 loopMax;
MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74));
preload = gUnknown_203B2B0;
nullString = NULL;
preload->unk34[0].text = gUnknown_80DCA24;
preload->unk34[0].menuAction = 4;
defaultAction = 1;
preload->unk34[1].text = gUnknown_80DCA2C;
preload->unk34[1].menuAction = 5;
preload->unk34[2].text = *gUnknown_80D4934;
preload->unk34[2].menuAction = defaultAction;
loopMax = 3;
preload->unk34[3].text = nullString;
preload->unk34[3].menuAction = defaultAction;
for(iVar4 = 0; iVar4 < loopMax; iVar4++)
{
if(gUnknown_203B2B0->unk74[iVar4] == 0)
{
if(gUnknown_203B2B0->unk34[iVar4].menuAction == gUnknown_203B2B0->unk2C)
return;
}
}
gUnknown_203B2B0->unk2C = 4;
}
void sub_8024E30(void)
{
u8 *nullString;
struct unkStruct_203B2B0 *preload;
u32 defaultAction;
s32 iVar4;
s32 loopMax;
MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74));
preload = gUnknown_203B2B0;
nullString = NULL;
preload->unk34[0].text = gUnknown_80DCA2C;
preload->unk34[0].menuAction = 5;
defaultAction = 1;
preload->unk34[1].text = *gUnknown_80D4970;
preload->unk34[1].menuAction = 2;
loopMax = 2;
preload->unk34[2].text = nullString;
preload->unk34[2].menuAction = defaultAction;
for(iVar4 = 0; iVar4 < loopMax; iVar4++)
{
if(gUnknown_203B2B0->unk74[iVar4] == 0)
{
if(gUnknown_203B2B0->unk34[iVar4].menuAction == gUnknown_203B2B0->unk30)
return;
}
}
gUnknown_203B2B0->unk30 = 5;
}
void sub_8024E9C(void)
{
s32 menuAction;
if(sub_80144A4(&menuAction) == 0)
{
if(menuAction != 1) gUnknown_203B2B0->unk28 = menuAction;
switch(menuAction)
{
case 3:
if(LuminousCave_HasOnly1Member())
UpdateLuminousCaveState(LUMINOUS_CAVE_GIVE_ITEM_1);
else
UpdateLuminousCaveState(LUMINOUS_CAVE_COME_ALONE);
break;
case 2:
UpdateLuminousCaveState(LUMINOUS_CAVE_EVOLVE_INFO);
break;
case 1:
UpdateLuminousCaveState(LUMINOUS_CAVE_SHALL_RETURN);
break;
}
}
}
void sub_8024F00(void)
{
s32 menuAction;
if(sub_80144A4(&menuAction) == 0)
{
if(menuAction != 1) gUnknown_203B2B0->unk2C = menuAction;
switch(menuAction)
{
case 4:
gUnknown_203B2B0->evoItem1_InvIndex = INVENTORY_SIZE;
gUnknown_203B2B0->evoItem2_InvIndex = INVENTORY_SIZE;
UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN);
break;
case 5:
if(GetNumberOfFilledInventorySlots() == 0)
UpdateLuminousCaveState(LUMINOUS_CAVE_LACK_WHAT_NEEDED);
else
UpdateLuminousCaveState(0x6);
break;
case 1:
UpdateLuminousCaveState(LUMINOUS_CAVE_ASK_EVOLVE);
break;
}
}
}
void sub_8024F70(void)
{
s32 menuAction;
if(sub_80144A4(&menuAction) == 0)
{
if(menuAction != 1) gUnknown_203B2B0->unk2C = menuAction;
switch(menuAction)
{
case 4:
UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN);
break;
case 5:
if(GetNumberOfFilledInventorySlots() < 2)
UpdateLuminousCaveState(LUMINOUS_CAVE_ONLY_ONE_ITEM);
else
UpdateLuminousCaveState(0xB);
break;
case 1:
UpdateLuminousCaveState(LUMINOUS_CAVE_ASK_EVOLVE);
break;
}
}
}
void sub_8024FD4(void)
{
switch(sub_801A6E8(1))
{
case 3:
gUnknown_203B2B0->evoItem1_InvIndex = sub_801A8AC();
gUnknown_203B2B0->evoItem2_InvIndex = INVENTORY_SIZE;
gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem1_InvIndex];
UpdateLuminousCaveState(8);
break;
case 4:
gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[sub_801A8AC()];
sub_8099690(0);
UpdateLuminousCaveState(9);
break;
case 2:
sub_801A928();
UpdateLuminousCaveState(LUMINOUS_CAVE_GIVE_ITEM_1);
break;
}
}
void sub_8025058(void)
{
switch(sub_801A6E8(1))
{
case 3:
if(gUnknown_203B2B0->evoItem1_InvIndex != sub_801A8AC())
{
gUnknown_203B2B0->evoItem2_InvIndex = sub_801A8AC();
gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem2_InvIndex];
UpdateLuminousCaveState(0xD);
}
else
PlayMenuSoundEffect(2);
break;
case 4:
gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[sub_801A8AC()];
sub_8099690(0);
UpdateLuminousCaveState(0xE);
break;
case 2:
sub_801A928();
UpdateLuminousCaveState(0xA);
break;
}
}
void sub_80250EC(void)
{
s32 menuAction;
menuAction = 0;
sub_801A6E8(0);
if(!sub_8012FD8(&gUnknown_203B2B0->unk84))
{
sub_8013114(&gUnknown_203B2B0->unk84, &menuAction);
if(menuAction != 1) gUnknown_203B2B0->unk30 = menuAction;
}
switch(menuAction)
{
case 5:
sub_801A928();
UpdateLuminousCaveState(0xA);
break;
case 2:
sub_8099690(0);
UpdateLuminousCaveState(0x9);
break;
case 1:
UpdateLuminousCaveState(0x7);
break;
}
}
void sub_802515C(void)
{
s32 menuAction;
menuAction = 0;
sub_801A6E8(0);
if(!sub_8012FD8(&gUnknown_203B2B0->unk84))
{
sub_8013114(&gUnknown_203B2B0->unk84, &menuAction);
if(menuAction != 1) gUnknown_203B2B0->unk30 = menuAction;
}
switch(menuAction)
{
case 5:
sub_801A928();
UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN);
break;
case 2:
sub_8099690(0);
UpdateLuminousCaveState(0xE);
break;
case 1:
UpdateLuminousCaveState(0xC);
break;
}
}
void sub_80251CC(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
UpdateLuminousCaveState(0x7);
break;
case 0:
case 1:
break;
}
}
void sub_80251E8(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
UpdateLuminousCaveState(0xC);
break;
case 0:
case 1:
break;
}
}
void sub_8025204(void)
{
switch(sub_8016080())
{
case 3:
sub_80160D8();
gUnknown_203B2B0->pokeRenamed = IsPokemonRenamed(gUnknown_203B2B0->pokeStruct);
UpdateLuminousCaveState(LUMINOUS_CAVE_SHALL_RETURN);
break;
default:
break;
}
}
void LuminousCave_AdvancetoFallbackState(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
UpdateLuminousCaveState(gUnknown_203B2B0->fallbackState);
}
}
void sub_8025254(void)
{
if(gUnknown_203B2B0->evoItem1_InvIndex == INVENTORY_SIZE)
gUnknown_203B2B0->unk4 = 0;
else
{
gUnknown_203B2B0->unk4 = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem1_InvIndex].itemIndex;
}
if(gUnknown_203B2B0->evoItem2_InvIndex == INVENTORY_SIZE)
gUnknown_203B2B0->unk5 = 0;
else
{
gUnknown_203B2B0->unk5 = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem2_InvIndex].itemIndex;
}
gUnknown_203B2B0->unk6 = RandomCapped(0xFF);
sub_808F468(gUnknown_203B2B0->pokeStruct, &gUnknown_203B2B0->unk4, 1);
}
bool8 LuminousCave_HasOnly1Member(void)
{
s32 r3;
s32 iVar3; // loop index
struct PokemonStruct *preload;
preload = &gRecruitedPokemonRef->pokemon[0];
r3 = 0;
for(iVar3 = 0; iVar3 < NUM_SPECIES; iVar3++, preload++)
{
if((preload->unk0 >> 1) & 1)
r3++;
}
if(r3 == 1)
return TRUE;
else
return FALSE;
}

View File

@ -419,7 +419,7 @@ extern void sub_8031E10();
extern void sub_802F2C0();
extern u32 sub_80144A4(s32 *r0);
extern void SetThankYouMailMenuState(u32);
extern struct PokemonStruct *sub_808D33C(void);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
extern 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_80922B4(u8 *, u8 *, u32);
@ -1487,7 +1487,7 @@ void UpdateThankYouMailText(void)
switch(gUnknown_203B2C4->state) {
case 5:
pokeStruct = sub_808D33C();
pokeStruct = GetPlayerPokemonStruct();
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);
@ -1646,7 +1646,7 @@ void UpdateThankYouMailText(void)
sub_8014248(gUnknown_80DF5E4,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case THANK_YOU_MAIL_COMMS_CLEANUP:
pokeStruct2 = sub_808D33C();
pokeStruct2 = GetPlayerPokemonStruct();
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);

View File

@ -136,7 +136,7 @@ extern void sub_8013114(u32 *, s32 *);
extern u32 sub_802DEE0(void);
extern void sub_802DF24(void);
extern void sub_808DA34(u8 *buffer, struct PokemonStruct *pokemon);
extern struct PokemonStruct *sub_808D33C(void);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
extern void sub_802F6FC(void);
extern void sub_802F718(void);
extern u8 sub_80138B8(u32 *, u32);
@ -368,7 +368,7 @@ u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1)
// NOTE: dumb var to get correct ordering
preload = gUnknown_203B310;
strcpy(gUnknown_202E5D8, preload->unk10->clientName);
sub_808DA34(gAvailablePokemonNames, sub_808D33C());
sub_808DA34(gAvailablePokemonNames, GetPlayerPokemonStruct());
gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->unk14);
gUnknown_203B310->faceData = NULL;