mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-02 22:09:45 -05:00
commit
34e14bacef
|
|
@ -1,185 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_801DB54
|
||||
sub_801DB54:
|
||||
push {r4,lr}
|
||||
ldr r4, _0801DBD0
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x9C
|
||||
movs r2, 0
|
||||
movs r1, 0x1
|
||||
strb r1, [r0]
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x9D
|
||||
strb r2, [r0]
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x9E
|
||||
movs r1, 0x8
|
||||
strb r1, [r0]
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x9F
|
||||
strb r2, [r0]
|
||||
bl ResetUnusedInputStruct
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x3C
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
bl sub_800641C
|
||||
ldr r0, [r4]
|
||||
movs r1, 0x1A
|
||||
ldrsh r0, [r0, r1]
|
||||
movs r1, 0xC
|
||||
bl sub_80095E4
|
||||
adds r0, 0x2
|
||||
lsls r0, 16
|
||||
ldr r2, [r4]
|
||||
ldr r3, [r2, 0x34]
|
||||
lsls r1, r3, 1
|
||||
adds r1, r3
|
||||
lsls r1, 3
|
||||
adds r1, r2, r1
|
||||
adds r1, 0x4A
|
||||
asrs r3, r0, 16
|
||||
lsrs r0, 16
|
||||
strh r0, [r1]
|
||||
ldr r1, [r2, 0x34]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 3
|
||||
adds r2, r0
|
||||
adds r3, 0x2
|
||||
adds r2, 0x4C
|
||||
strh r3, [r2]
|
||||
bl ResetUnusedInputStruct
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x3C
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
bl sub_800641C
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0801DBD0: .4byte gUnknown_203B258
|
||||
thumb_func_end sub_801DB54
|
||||
|
||||
thumb_func_start sub_801DBD4
|
||||
sub_801DBD4:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x8
|
||||
ldr r5, _0801DCB4
|
||||
ldr r0, [r5]
|
||||
ldr r0, [r0, 0x34]
|
||||
bl sub_8008C54
|
||||
ldr r0, [r5]
|
||||
ldr r0, [r0, 0x34]
|
||||
bl sub_80073B8
|
||||
ldr r2, _0801DCB8
|
||||
ldr r0, [r5]
|
||||
ldr r3, [r0, 0x34]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0xA
|
||||
movs r1, 0
|
||||
bl xxx_call_draw_string
|
||||
ldr r1, [r5]
|
||||
adds r0, r1, 0
|
||||
adds r0, 0x9E
|
||||
ldrb r4, [r0]
|
||||
lsls r4, 3
|
||||
subs r4, 0x2
|
||||
movs r0, 0x1E
|
||||
ldrsh r2, [r1, r0]
|
||||
adds r2, 0x1
|
||||
movs r0, 0x7
|
||||
str r0, [sp]
|
||||
ldr r0, [r1, 0x34]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
movs r3, 0x2
|
||||
bl sub_8012BC4
|
||||
movs r6, 0
|
||||
ldr r0, [r5]
|
||||
movs r1, 0x1A
|
||||
ldrsh r0, [r0, r1]
|
||||
cmp r6, r0
|
||||
bge _0801DC9C
|
||||
adds r7, r5, 0
|
||||
mov r8, r6
|
||||
_0801DC34:
|
||||
ldr r0, [r7]
|
||||
ldrh r2, [r0, 0x1E]
|
||||
ldrh r1, [r0, 0x1C]
|
||||
adds r3, r2, 0
|
||||
muls r3, r1
|
||||
adds r1, r3, 0
|
||||
adds r1, r6
|
||||
lsls r1, 16
|
||||
asrs r1, 16
|
||||
lsls r5, r1, 1
|
||||
adds r5, r1
|
||||
lsls r5, 2
|
||||
ldr r1, _0801DCBC
|
||||
adds r5, r1
|
||||
movs r2, 0x4
|
||||
ldrsh r1, [r5, r2]
|
||||
lsls r4, r1, 3
|
||||
subs r4, r1
|
||||
lsls r4, 2
|
||||
ldr r1, _0801DCC0
|
||||
adds r4, r1
|
||||
adds r1, r6, 0
|
||||
bl sub_8013800
|
||||
adds r1, r0, 0
|
||||
ldr r2, [r4]
|
||||
ldr r0, [r7]
|
||||
ldr r3, [r0, 0x34]
|
||||
mov r0, r8
|
||||
str r0, [sp]
|
||||
movs r0, 0x8
|
||||
bl xxx_call_draw_string
|
||||
ldr r0, [r7]
|
||||
adds r1, r6, 0
|
||||
bl sub_8013800
|
||||
adds r1, r0, 0
|
||||
ldr r2, [r5, 0x8]
|
||||
ldr r0, [r7]
|
||||
ldr r3, [r0, 0x34]
|
||||
mov r0, r8
|
||||
str r0, [sp]
|
||||
movs r0, 0x3E
|
||||
bl xxx_call_draw_string
|
||||
adds r6, 0x1
|
||||
ldr r0, [r7]
|
||||
movs r1, 0x1A
|
||||
ldrsh r0, [r0, r1]
|
||||
cmp r6, r0
|
||||
blt _0801DC34
|
||||
_0801DC9C:
|
||||
ldr r0, _0801DCB4
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, 0x34]
|
||||
bl sub_80073E0
|
||||
add sp, 0x8
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0801DCB4: .4byte gUnknown_203B258
|
||||
_0801DCB8: .4byte gUnknown_80DBFA0
|
||||
_0801DCBC: .4byte gUnknown_811BAF4
|
||||
_0801DCC0: .4byte gUnknown_81188F0
|
||||
thumb_func_end sub_801DBD4
|
||||
|
||||
|
||||
.align 2,0
|
||||
|
|
@ -1,292 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8021410
|
||||
sub_8021410:
|
||||
push {r4,lr}
|
||||
ldr r4, _08021490
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xDC
|
||||
movs r2, 0
|
||||
movs r1, 0x1
|
||||
strb r1, [r0]
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xDD
|
||||
strb r2, [r0]
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xDE
|
||||
movs r1, 0xC
|
||||
strb r1, [r0]
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xDF
|
||||
strb r2, [r0]
|
||||
bl ResetUnusedInputStruct
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x7C
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
bl sub_800641C
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x5A
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
movs r1, 0xC
|
||||
bl sub_80095E4
|
||||
adds r0, 0x2
|
||||
lsls r0, 16
|
||||
ldr r2, [r4]
|
||||
ldr r3, [r2, 0x74]
|
||||
lsls r1, r3, 1
|
||||
adds r1, r3
|
||||
lsls r1, 3
|
||||
adds r1, r2, r1
|
||||
adds r1, 0x8A
|
||||
asrs r3, r0, 16
|
||||
lsrs r0, 16
|
||||
strh r0, [r1]
|
||||
ldr r1, [r2, 0x74]
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 3
|
||||
adds r2, r0
|
||||
adds r3, 0x2
|
||||
adds r2, 0x8C
|
||||
strh r3, [r2]
|
||||
bl ResetUnusedInputStruct
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x7C
|
||||
movs r1, 0x1
|
||||
movs r2, 0x1
|
||||
bl sub_800641C
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08021490: .4byte gUnknown_203B280
|
||||
thumb_func_end sub_8021410
|
||||
|
||||
thumb_func_start sub_8021494
|
||||
sub_8021494:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0xA8
|
||||
ldr r4, _08021568
|
||||
ldr r0, [r4]
|
||||
ldr r0, [r0, 0x74]
|
||||
bl sub_8008C54
|
||||
ldr r0, [r4]
|
||||
ldr r0, [r0, 0x74]
|
||||
bl sub_80073B8
|
||||
ldr r2, _0802156C
|
||||
ldr r0, [r4]
|
||||
ldr r3, [r0, 0x74]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0xA
|
||||
movs r1, 0
|
||||
bl xxx_call_draw_string
|
||||
ldr r3, [r4]
|
||||
adds r0, r3, 0
|
||||
adds r0, 0xDE
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 3
|
||||
adds r0, 0x4
|
||||
adds r1, r3, 0
|
||||
adds r1, 0x5E
|
||||
movs r5, 0
|
||||
ldrsh r2, [r1, r5]
|
||||
adds r2, 0x1
|
||||
movs r1, 0x7
|
||||
str r1, [sp]
|
||||
ldr r1, [r3, 0x74]
|
||||
str r1, [sp, 0x4]
|
||||
movs r1, 0
|
||||
movs r3, 0x1
|
||||
bl sub_8012BC4
|
||||
movs r0, 0
|
||||
mov r9, r0
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x5A
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
cmp r9, r0
|
||||
blt _080214FC
|
||||
b _08021646
|
||||
_080214FC:
|
||||
mov r8, r4
|
||||
add r2, sp, 0x58
|
||||
mov r10, r2
|
||||
_08021502:
|
||||
mov r3, r8
|
||||
ldr r2, [r3]
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x5E
|
||||
movs r5, 0
|
||||
ldrsh r1, [r0, r5]
|
||||
subs r0, 0x2
|
||||
movs r3, 0
|
||||
ldrsh r0, [r0, r3]
|
||||
muls r0, r1
|
||||
add r0, r9
|
||||
adds r0, r2, r0
|
||||
ldrb r5, [r0]
|
||||
adds r7, r5, 0
|
||||
ldr r6, [r2, 0x3C]
|
||||
cmp r6, 0x2
|
||||
bne _0802159C
|
||||
add r0, sp, 0x8
|
||||
adds r1, r5, 0
|
||||
movs r2, 0x1
|
||||
bl sub_8092578
|
||||
adds r0, r5, 0
|
||||
bl GetFriendAreaPrice
|
||||
ldr r1, _08021570
|
||||
ldr r1, [r1]
|
||||
movs r5, 0x98
|
||||
lsls r5, 2
|
||||
adds r1, r5
|
||||
ldr r1, [r1]
|
||||
cmp r0, r1
|
||||
bgt _08021574
|
||||
mov r1, r8
|
||||
ldr r0, [r1]
|
||||
adds r0, 0x40
|
||||
mov r1, r9
|
||||
bl sub_8013800
|
||||
adds r1, r0, 0
|
||||
mov r2, r8
|
||||
ldr r0, [r2]
|
||||
ldr r3, [r0, 0x74]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0x8
|
||||
add r2, sp, 0x8
|
||||
bl xxx_call_draw_string
|
||||
b _08021632
|
||||
.align 2, 0
|
||||
_08021568: .4byte gUnknown_203B280
|
||||
_0802156C: .4byte gUnknown_80DC494
|
||||
_08021570: .4byte gTeamInventoryRef
|
||||
_08021574:
|
||||
mov r0, r10
|
||||
ldr r1, _08021598
|
||||
add r2, sp, 0x8
|
||||
bl sprintfStatic
|
||||
mov r3, r8
|
||||
ldr r0, [r3]
|
||||
adds r0, 0x40
|
||||
mov r1, r9
|
||||
bl sub_8013800
|
||||
adds r1, r0, 0
|
||||
mov r5, r8
|
||||
ldr r0, [r5]
|
||||
ldr r3, [r0, 0x74]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
b _080215FE
|
||||
.align 2, 0
|
||||
_08021598: .4byte gUnknown_80DC4A4
|
||||
_0802159C:
|
||||
cmp r6, 0
|
||||
bne _0802160C
|
||||
ldr r0, _080215D4
|
||||
ldr r0, [r0]
|
||||
adds r0, r5
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
bne _080215D8
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x40
|
||||
mov r1, r9
|
||||
bl sub_8013800
|
||||
adds r4, r0, 0
|
||||
adds r0, r5, 0
|
||||
bl GetFriendAreaName
|
||||
adds r2, r0, 0
|
||||
mov r1, r8
|
||||
ldr r0, [r1]
|
||||
ldr r3, [r0, 0x74]
|
||||
str r6, [sp]
|
||||
movs r0, 0x8
|
||||
adds r1, r4, 0
|
||||
bl xxx_call_draw_string
|
||||
b _08021632
|
||||
.align 2, 0
|
||||
_080215D4: .4byte gFriendAreas
|
||||
_080215D8:
|
||||
adds r0, r5, 0
|
||||
bl GetFriendAreaName
|
||||
adds r2, r0, 0
|
||||
mov r0, r10
|
||||
ldr r1, _08021608
|
||||
bl sprintfStatic
|
||||
mov r2, r8
|
||||
ldr r0, [r2]
|
||||
adds r0, 0x40
|
||||
mov r1, r9
|
||||
bl sub_8013800
|
||||
adds r1, r0, 0
|
||||
mov r3, r8
|
||||
ldr r0, [r3]
|
||||
ldr r3, [r0, 0x74]
|
||||
str r6, [sp]
|
||||
_080215FE:
|
||||
movs r0, 0x8
|
||||
mov r2, r10
|
||||
bl xxx_call_draw_string
|
||||
b _08021632
|
||||
.align 2, 0
|
||||
_08021608: .4byte gUnknown_80DC4AC
|
||||
_0802160C:
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x40
|
||||
mov r1, r9
|
||||
bl sub_8013800
|
||||
adds r4, r0, 0
|
||||
adds r0, r7, 0
|
||||
bl GetFriendAreaName
|
||||
adds r2, r0, 0
|
||||
mov r5, r8
|
||||
ldr r0, [r5]
|
||||
ldr r3, [r0, 0x74]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0x8
|
||||
adds r1, r4, 0
|
||||
bl xxx_call_draw_string
|
||||
_08021632:
|
||||
movs r0, 0x1
|
||||
add r9, r0
|
||||
mov r1, r8
|
||||
ldr r0, [r1]
|
||||
adds r0, 0x5A
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r9, r0
|
||||
bge _08021646
|
||||
b _08021502
|
||||
_08021646:
|
||||
ldr r0, _08021660
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, 0x74]
|
||||
bl sub_80073E0
|
||||
add sp, 0xA8
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08021660: .4byte gUnknown_203B280
|
||||
thumb_func_end sub_8021494
|
||||
|
||||
.align 2,0
|
||||
1225
asm/code_803B050.s
1225
asm/code_803B050.s
File diff suppressed because it is too large
Load Diff
|
|
@ -1665,7 +1665,7 @@ _080438AC:
|
|||
adds r2, r4, 0
|
||||
bl sub_8083AB0
|
||||
_08043926:
|
||||
bl sub_80688CC
|
||||
bl CloseAllSpriteFiles
|
||||
bl sub_8049820
|
||||
ldr r0, _08043994
|
||||
ldr r0, [r0]
|
||||
|
|
|
|||
2912
asm/code_805D8C8.s
2912
asm/code_805D8C8.s
File diff suppressed because it is too large
Load Diff
2696
asm/code_805D8C8_1.s
Normal file
2696
asm/code_805D8C8_1.s
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -641,40 +641,4 @@ _0809D6D2:
|
|||
bx r1
|
||||
thumb_func_end sub_809D684
|
||||
|
||||
thumb_func_start sub_809D6D8
|
||||
sub_809D6D8:
|
||||
lsls r1, 16
|
||||
asrs r1, 14
|
||||
adds r0, 0x14
|
||||
adds r0, r1
|
||||
str r2, [r0]
|
||||
bx lr
|
||||
thumb_func_end sub_809D6D8
|
||||
|
||||
thumb_func_start sub_809D6E4
|
||||
sub_809D6E4:
|
||||
push {r4,lr}
|
||||
lsls r2, 16
|
||||
asrs r2, 16
|
||||
lsls r4, r2, 2
|
||||
adds r3, r0, 0
|
||||
adds r3, 0x14
|
||||
adds r3, r4
|
||||
ldr r3, [r3]
|
||||
str r3, [r1]
|
||||
strh r2, [r1, 0x4]
|
||||
ldrh r2, [r0, 0x10]
|
||||
strh r2, [r1, 0x6]
|
||||
ldrb r0, [r0, 0x12]
|
||||
strb r0, [r1, 0x8]
|
||||
adds r0, r3, 0
|
||||
cmp r0, 0
|
||||
beq _0809D708
|
||||
movs r0, 0x1
|
||||
_0809D708:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_809D6E4
|
||||
|
||||
.align 2,0
|
||||
|
|
|
|||
111
asm/dungeon_2.s
111
asm/dungeon_2.s
|
|
@ -597,113 +597,4 @@ _0809080E:
|
|||
bx r1
|
||||
thumb_func_end sub_809034C
|
||||
|
||||
thumb_func_start sub_8090820
|
||||
sub_8090820:
|
||||
push {r4-r7,lr}
|
||||
lsls r0, 16
|
||||
lsrs r6, r0, 16
|
||||
movs r4, 0
|
||||
ldr r0, _08090868
|
||||
ldr r0, [r0]
|
||||
mov r12, r0
|
||||
movs r7, 0x1
|
||||
_08090830:
|
||||
movs r0, 0x58
|
||||
muls r0, r4
|
||||
mov r2, r12
|
||||
adds r1, r2, r0
|
||||
ldrh r2, [r1]
|
||||
adds r0, r7, 0
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _08090874
|
||||
lsrs r0, r2, 1
|
||||
ands r0, r7
|
||||
cmp r0, 0
|
||||
beq _08090874
|
||||
movs r3, 0
|
||||
movs r5, 0x1
|
||||
adds r2, r1, 0
|
||||
adds r2, 0x2C
|
||||
_08090852:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r5, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0809086C
|
||||
ldrh r0, [r2, 0x2]
|
||||
cmp r0, r6
|
||||
bne _0809086C
|
||||
movs r0, 0x1
|
||||
b _08090880
|
||||
.align 2, 0
|
||||
_08090868: .4byte gRecruitedPokemonRef
|
||||
_0809086C:
|
||||
adds r2, 0x8
|
||||
adds r3, 0x1
|
||||
cmp r3, 0x3
|
||||
ble _08090852
|
||||
_08090874:
|
||||
adds r4, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _08090830
|
||||
movs r0, 0
|
||||
_08090880:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8090820
|
||||
|
||||
thumb_func_start sub_8090888
|
||||
sub_8090888:
|
||||
push {r4-r7,lr}
|
||||
adds r4, r0, 0
|
||||
adds r5, r1, 0
|
||||
movs r6, 0
|
||||
b _0809089C
|
||||
_08090892:
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0xA
|
||||
bne _0809089A
|
||||
adds r6, 0x1
|
||||
_0809089A:
|
||||
adds r4, 0x1
|
||||
_0809089C:
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08090892
|
||||
ldrb r7, [r5]
|
||||
b _080908AE
|
||||
_080908A6:
|
||||
movs r0, 0xA
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
adds r6, 0x1
|
||||
_080908AE:
|
||||
adds r0, r6, 0
|
||||
movs r1, 0x3
|
||||
bl __modsi3
|
||||
cmp r0, 0
|
||||
bne _080908A6
|
||||
adds r1, r7, 0
|
||||
lsls r0, r1, 24
|
||||
cmp r0, 0
|
||||
beq _080908CE
|
||||
_080908C2:
|
||||
strb r1, [r4]
|
||||
adds r4, 0x1
|
||||
adds r5, 0x1
|
||||
ldrb r1, [r5]
|
||||
cmp r1, 0
|
||||
bne _080908C2
|
||||
_080908CE:
|
||||
movs r0, 0
|
||||
strb r0, [r4]
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8090888
|
||||
|
||||
.align 2,0
|
||||
.align 2,0
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_80840A4
|
||||
sub_80840A4:
|
||||
ldr r3, _080840C8
|
||||
ldr r0, [r3]
|
||||
ldr r2, _080840CC
|
||||
adds r1, r0, 0
|
||||
muls r1, r2
|
||||
adds r1, 0x1
|
||||
lsrs r0, r1, 16
|
||||
muls r1, r2
|
||||
adds r1, 0x1
|
||||
str r1, [r3]
|
||||
ldr r2, _080840D0
|
||||
ands r1, r2
|
||||
orrs r0, r1
|
||||
ldr r1, _080840D4
|
||||
ands r0, r1
|
||||
movs r1, 0x1
|
||||
orrs r0, r1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080840C8: .4byte gUnknown_203B458
|
||||
_080840CC: .4byte 0x5d588b65
|
||||
_080840D0: .4byte 0xffff0000
|
||||
_080840D4: .4byte 0x00ffffff
|
||||
thumb_func_end sub_80840A4
|
||||
|
||||
.align 2,0
|
||||
|
|
@ -1,301 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
@ Menu that gets created when you talk to friend
|
||||
thumb_func_start CreateFriendActionMenu
|
||||
CreateFriendActionMenu:
|
||||
push {r4-r7,lr}
|
||||
ldr r3, _080274E4
|
||||
ldr r4, _080274E8
|
||||
ldr r0, [r4]
|
||||
movs r1, 0x8
|
||||
ldrsh r2, [r0, r1]
|
||||
movs r1, 0x58
|
||||
muls r2, r1
|
||||
ldr r1, [r3]
|
||||
adds r5, r1, r2
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
movs r1, 0
|
||||
movs r2, 0x14
|
||||
bl MemoryFill16
|
||||
ldrh r0, [r5]
|
||||
lsrs r0, 1
|
||||
movs r6, 0x1
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
beq _080274F4
|
||||
ldr r2, [r4]
|
||||
movs r3, 0x8E
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
ldr r0, _080274EC
|
||||
str r0, [r1]
|
||||
movs r0, 0x90
|
||||
lsls r0, 1
|
||||
adds r1, r2, r0
|
||||
movs r0, 0x7
|
||||
str r0, [r1]
|
||||
adds r0, r5, 0
|
||||
bl sub_8027D9C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080274B6
|
||||
ldr r0, [r4]
|
||||
movs r1, 0xB6
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
strh r6, [r0]
|
||||
_080274B6:
|
||||
movs r7, 0x1
|
||||
movs r0, 0x8
|
||||
bl sub_80023E4
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08027552
|
||||
ldrb r0, [r5, 0x2]
|
||||
cmp r0, 0
|
||||
bne _08027552
|
||||
ldr r3, [r4]
|
||||
movs r2, 0x8
|
||||
movs r4, 0x92
|
||||
lsls r4, 1
|
||||
adds r1, r3, r4
|
||||
ldr r0, _080274F0
|
||||
str r0, [r1]
|
||||
movs r1, 0x94
|
||||
lsls r1, 1
|
||||
adds r0, r3, r1
|
||||
str r2, [r0]
|
||||
b _08027550
|
||||
.align 2, 0
|
||||
_080274E4: .4byte gRecruitedPokemonRef
|
||||
_080274E8: .4byte gUnknown_203B2BC
|
||||
_080274EC: .4byte gFriendActionStandby
|
||||
_080274F0: .4byte gFriendActionMakeLeader
|
||||
_080274F4:
|
||||
ldr r2, [r4]
|
||||
movs r3, 0x8E
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
ldr r0, _08027658
|
||||
str r0, [r1]
|
||||
movs r0, 0x90
|
||||
lsls r0, 1
|
||||
adds r1, r2, r0
|
||||
movs r0, 0x6
|
||||
str r0, [r1]
|
||||
movs r1, 0x8
|
||||
ldrsh r0, [r2, r1]
|
||||
bl sub_808D750
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08027522
|
||||
ldr r0, [r4]
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
strh r6, [r0]
|
||||
_08027522:
|
||||
movs r7, 0x1
|
||||
ldr r2, [r4]
|
||||
movs r3, 0x92
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
ldr r0, _0802765C
|
||||
str r0, [r1]
|
||||
movs r0, 0x94
|
||||
lsls r0, 1
|
||||
adds r1, r2, r0
|
||||
movs r0, 0x9
|
||||
str r0, [r1]
|
||||
adds r0, r5, 0
|
||||
bl sub_8027DCC
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08027550
|
||||
ldr r0, [r4]
|
||||
movs r1, 0xB7
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
strh r7, [r0]
|
||||
_08027550:
|
||||
movs r7, 0x2
|
||||
_08027552:
|
||||
ldr r4, _08027660
|
||||
ldr r2, [r4]
|
||||
lsls r3, r7, 3
|
||||
movs r6, 0x8E
|
||||
lsls r6, 1
|
||||
adds r0, r2, r6
|
||||
adds r0, r3
|
||||
ldr r1, _08027664
|
||||
str r1, [r0]
|
||||
movs r5, 0x90
|
||||
lsls r5, 1
|
||||
adds r2, r5
|
||||
adds r2, r3
|
||||
movs r0, 0xA
|
||||
str r0, [r2]
|
||||
bl GetNumberOfFilledInventorySlots
|
||||
cmp r0, 0
|
||||
bne _08027588
|
||||
ldr r0, [r4]
|
||||
lsls r1, r7, 1
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
movs r1, 0x1
|
||||
strh r1, [r0]
|
||||
_08027588:
|
||||
adds r7, 0x1
|
||||
ldr r2, [r4]
|
||||
lsls r3, r7, 3
|
||||
adds r0, r2, r6
|
||||
adds r0, r3
|
||||
ldr r1, _08027668
|
||||
str r1, [r0]
|
||||
adds r2, r5
|
||||
adds r2, r3
|
||||
movs r0, 0xB
|
||||
str r0, [r2]
|
||||
bl GetNumberOfFilledInventorySlots
|
||||
cmp r0, 0x13
|
||||
bgt _080275AE
|
||||
ldr r0, [r4]
|
||||
ldrb r0, [r0, 0x14]
|
||||
cmp r0, 0
|
||||
bne _080275BE
|
||||
_080275AE:
|
||||
ldr r0, [r4]
|
||||
lsls r1, r7, 1
|
||||
movs r3, 0xB6
|
||||
lsls r3, 1
|
||||
adds r0, r3
|
||||
adds r0, r1
|
||||
movs r1, 0x1
|
||||
strh r1, [r0]
|
||||
_080275BE:
|
||||
adds r7, 0x1
|
||||
ldr r4, _08027660
|
||||
ldr r5, [r4]
|
||||
lsls r1, r7, 3
|
||||
movs r0, 0x8E
|
||||
lsls r0, 1
|
||||
adds r3, r5, r0
|
||||
adds r2, r3, r1
|
||||
ldr r0, _0802766C
|
||||
str r0, [r2]
|
||||
movs r2, 0x90
|
||||
lsls r2, 1
|
||||
adds r6, r5, r2
|
||||
adds r1, r6, r1
|
||||
movs r0, 0x4
|
||||
str r0, [r1]
|
||||
adds r7, 0x1
|
||||
lsls r1, r7, 3
|
||||
adds r2, r3, r1
|
||||
ldr r0, _08027670
|
||||
str r0, [r2]
|
||||
adds r1, r6, r1
|
||||
movs r0, 0xC
|
||||
str r0, [r1]
|
||||
adds r7, 0x1
|
||||
lsls r1, r7, 3
|
||||
adds r2, r3, r1
|
||||
ldr r0, _08027674
|
||||
str r0, [r2]
|
||||
adds r1, r6, r1
|
||||
movs r0, 0x5
|
||||
str r0, [r1]
|
||||
adds r7, 0x1
|
||||
lsls r1, r7, 3
|
||||
adds r3, r1
|
||||
movs r0, 0
|
||||
str r0, [r3]
|
||||
adds r1, r6, r1
|
||||
movs r0, 0x1
|
||||
str r0, [r1]
|
||||
movs r3, 0
|
||||
mov r12, r4
|
||||
cmp r3, r7
|
||||
bge _08027636
|
||||
adds r4, r6, 0
|
||||
movs r0, 0xB6
|
||||
lsls r0, 1
|
||||
adds r2, r5, r0
|
||||
_0802761E:
|
||||
ldrh r0, [r2]
|
||||
cmp r0, 0
|
||||
bne _0802762C
|
||||
ldr r1, [r4]
|
||||
ldr r0, [r5, 0x70]
|
||||
cmp r1, r0
|
||||
beq _080276A0
|
||||
_0802762C:
|
||||
adds r4, 0x8
|
||||
adds r2, 0x2
|
||||
adds r3, 0x1
|
||||
cmp r3, r7
|
||||
blt _0802761E
|
||||
_08027636:
|
||||
movs r3, 0
|
||||
cmp r3, r7
|
||||
bge _080276A0
|
||||
mov r2, r12
|
||||
ldr r1, [r2]
|
||||
movs r4, 0xB6
|
||||
lsls r4, 1
|
||||
adds r0, r1, r4
|
||||
ldrh r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08027678
|
||||
movs r2, 0x90
|
||||
lsls r2, 1
|
||||
adds r0, r1, r2
|
||||
ldr r0, [r0]
|
||||
str r0, [r1, 0x70]
|
||||
b _080276A0
|
||||
.align 2, 0
|
||||
_08027658: .4byte gFriendActionJoinTeam
|
||||
_0802765C: .4byte gFriendActionSayFarewell
|
||||
_08027660: .4byte gUnknown_203B2BC
|
||||
_08027664: .4byte gFriendActionGive
|
||||
_08027668: .4byte gFriendActionTake
|
||||
_0802766C: .4byte gFriendActionSummary
|
||||
_08027670: .4byte gFriendActionMoves
|
||||
_08027674: .4byte gFriendActionCheckIQ
|
||||
_08027678:
|
||||
adds r3, 0x1
|
||||
cmp r3, r7
|
||||
bge _080276A0
|
||||
mov r4, r12
|
||||
ldr r2, [r4]
|
||||
lsls r0, r3, 1
|
||||
movs r4, 0xB6
|
||||
lsls r4, 1
|
||||
adds r1, r2, r4
|
||||
adds r1, r0
|
||||
ldrh r0, [r1]
|
||||
cmp r0, 0
|
||||
bne _08027678
|
||||
lsls r0, r3, 3
|
||||
movs r3, 0x90
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
str r0, [r2, 0x70]
|
||||
_080276A0:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CreateFriendActionMenu
|
||||
|
||||
.align 2,0
|
||||
|
|
@ -8642,76 +8642,4 @@ _080A24F4:
|
|||
bx r1
|
||||
thumb_func_end sub_80A2460
|
||||
|
||||
thumb_func_start sub_80A2500
|
||||
sub_80A2500:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
movs r2, 0
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, 0x1
|
||||
bne _080A2524
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r1, r2]
|
||||
bl sub_80A8BBC
|
||||
adds r1, r0, 0
|
||||
lsls r1, 16
|
||||
asrs r1, 16
|
||||
adds r0, r4, 0
|
||||
bl sub_809AB4C
|
||||
_080A2524:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80A2500
|
||||
|
||||
thumb_func_start sub_80A252C
|
||||
sub_80A252C:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
movs r2, 0
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, 0x1
|
||||
bne _080A2550
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r1, r2]
|
||||
bl sub_80A8BBC
|
||||
adds r1, r0, 0
|
||||
lsls r1, 16
|
||||
asrs r1, 16
|
||||
adds r0, r4, 0
|
||||
bl sub_809ABB4
|
||||
_080A2550:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80A252C
|
||||
|
||||
thumb_func_start sub_80A2558
|
||||
sub_80A2558:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
movs r2, 0
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, 0x1
|
||||
bne _080A257C
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r1, r2]
|
||||
bl sub_80A8BBC
|
||||
adds r1, r0, 0
|
||||
lsls r1, 16
|
||||
asrs r1, 16
|
||||
adds r0, r4, 0
|
||||
bl sub_809AC18
|
||||
_080A257C:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80A2558
|
||||
|
||||
.align 2,0
|
||||
.align 2,0
|
||||
|
|
|
|||
442
asm/pokemon_3.s
442
asm/pokemon_3.s
|
|
@ -5,448 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_808F468
|
||||
sub_808F468:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x20
|
||||
mov r8, r0
|
||||
adds r4, r1, 0
|
||||
lsls r2, 24
|
||||
lsrs r2, 24
|
||||
str r2, [sp, 0x14]
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x4]
|
||||
movs r0, 0x1
|
||||
str r0, [sp, 0x18]
|
||||
add r7, sp, 0xC
|
||||
_0808F488:
|
||||
ldr r1, [sp, 0x18]
|
||||
lsls r0, r1, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x41
|
||||
bne _0808F49C
|
||||
movs r0, 0x41
|
||||
adds r1, r7, 0
|
||||
bl GetPokemonEvolveConditions
|
||||
b _0808F4A2
|
||||
_0808F49C:
|
||||
adds r1, r7, 0
|
||||
bl GetPokemonEvolveConditions
|
||||
_0808F4A2:
|
||||
ldrh r0, [r7, 0x2]
|
||||
cmp r0, 0
|
||||
beq _0808F4B6
|
||||
mov r2, r8
|
||||
movs r3, 0x8
|
||||
ldrsh r1, [r2, r3]
|
||||
movs r2, 0
|
||||
ldrsh r0, [r7, r2]
|
||||
cmp r1, r0
|
||||
beq _0808F4C2
|
||||
_0808F4B6:
|
||||
ldr r3, [sp, 0x18]
|
||||
adds r3, 0x1
|
||||
str r3, [sp, 0x18]
|
||||
ldr r0, _0808F4D4
|
||||
cmp r3, r0
|
||||
ble _0808F488
|
||||
_0808F4C2:
|
||||
movs r0, 0xD4
|
||||
lsls r0, 1
|
||||
ldr r1, [sp, 0x18]
|
||||
cmp r1, r0
|
||||
bne _0808F4D8
|
||||
movs r0, 0x4
|
||||
strh r0, [r4, 0x4]
|
||||
b _0808F6EC
|
||||
.align 2, 0
|
||||
_0808F4D4: .4byte 0x000001a7
|
||||
_0808F4D8:
|
||||
movs r2, 0x1
|
||||
str r2, [sp, 0x18]
|
||||
movs r3, 0x8
|
||||
mov r10, r3
|
||||
_0808F4E0:
|
||||
movs r0, 0
|
||||
mov r9, r0
|
||||
ldr r1, [sp, 0x18]
|
||||
lsls r0, r1, 16
|
||||
asrs r0, 16
|
||||
str r0, [sp, 0x1C]
|
||||
adds r1, r7, 0
|
||||
bl GetPokemonEvolveConditions
|
||||
ldrh r0, [r7, 0x2]
|
||||
cmp r0, 0
|
||||
bne _0808F4FA
|
||||
b _0808F6DE
|
||||
_0808F4FA:
|
||||
mov r2, r8
|
||||
movs r3, 0x8
|
||||
ldrsh r1, [r2, r3]
|
||||
movs r2, 0
|
||||
ldrsh r0, [r7, r2]
|
||||
cmp r1, r0
|
||||
beq _0808F50A
|
||||
b _0808F6DE
|
||||
_0808F50A:
|
||||
ldr r0, [sp, 0x1C]
|
||||
bl GetFriendArea
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
mov r3, r8
|
||||
movs r1, 0x8
|
||||
ldrsh r0, [r3, r1]
|
||||
bl GetFriendArea
|
||||
lsls r0, 24
|
||||
lsrs r6, r0, 24
|
||||
adds r0, r5, 0
|
||||
mov r1, sp
|
||||
movs r2, 0
|
||||
movs r3, 0
|
||||
bl sub_8092638
|
||||
mov r0, sp
|
||||
ldrb r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bne _0808F544
|
||||
ldrh r0, [r4, 0x4]
|
||||
movs r1, 0x20
|
||||
orrs r0, r1
|
||||
strh r0, [r4, 0x4]
|
||||
movs r2, 0x1
|
||||
mov r9, r2
|
||||
b _0808F566
|
||||
_0808F544:
|
||||
mov r0, sp
|
||||
movs r3, 0x2
|
||||
ldrsh r1, [r0, r3]
|
||||
cmp r5, r6
|
||||
bne _0808F550
|
||||
subs r1, 0x1
|
||||
_0808F550:
|
||||
mov r0, sp
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, r1
|
||||
bgt _0808F566
|
||||
ldrh r0, [r4, 0x4]
|
||||
movs r1, 0x40
|
||||
orrs r0, r1
|
||||
strh r0, [r4, 0x4]
|
||||
movs r3, 0x1
|
||||
mov r9, r3
|
||||
_0808F566:
|
||||
ldrh r0, [r7, 0x2]
|
||||
cmp r0, 0x1
|
||||
bne _0808F588
|
||||
ldrh r2, [r4, 0x4]
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _0808F576
|
||||
b _0808F6DE
|
||||
_0808F576:
|
||||
mov r0, r8
|
||||
ldrb r1, [r0, 0x3]
|
||||
movs r3, 0x4
|
||||
ldrsh r0, [r7, r3]
|
||||
cmp r1, r0
|
||||
bge _0808F5E6
|
||||
movs r0, 0x2
|
||||
orrs r0, r2
|
||||
b _0808F5C8
|
||||
_0808F588:
|
||||
cmp r0, 0x2
|
||||
bne _0808F5A8
|
||||
mov r2, r8
|
||||
movs r3, 0x14
|
||||
ldrsh r1, [r2, r3]
|
||||
movs r2, 0x4
|
||||
ldrsh r0, [r7, r2]
|
||||
cmp r1, r0
|
||||
bge _0808F5E6
|
||||
ldrh r0, [r4, 0x4]
|
||||
movs r1, 0x10
|
||||
orrs r0, r1
|
||||
strh r0, [r4, 0x4]
|
||||
movs r3, 0x1
|
||||
mov r9, r3
|
||||
b _0808F5E6
|
||||
_0808F5A8:
|
||||
cmp r0, 0x3
|
||||
bne _0808F5E6
|
||||
ldr r0, [sp, 0x14]
|
||||
cmp r0, 0
|
||||
beq _0808F5D0
|
||||
ldrb r0, [r4]
|
||||
movs r2, 0x4
|
||||
ldrsh r1, [r7, r2]
|
||||
cmp r0, r1
|
||||
beq _0808F5E6
|
||||
ldrb r0, [r4, 0x1]
|
||||
cmp r0, r1
|
||||
beq _0808F5E6
|
||||
ldrh r0, [r4, 0x4]
|
||||
mov r3, r10
|
||||
orrs r0, r3
|
||||
_0808F5C8:
|
||||
strh r0, [r4, 0x4]
|
||||
movs r0, 0x1
|
||||
mov r9, r0
|
||||
b _0808F5E6
|
||||
_0808F5D0:
|
||||
ldrb r0, [r7, 0x4]
|
||||
bl FindItemInInventory
|
||||
cmp r0, 0
|
||||
bge _0808F5E6
|
||||
ldrh r0, [r4, 0x4]
|
||||
mov r1, r10
|
||||
orrs r0, r1
|
||||
strh r0, [r4, 0x4]
|
||||
movs r2, 0x1
|
||||
mov r9, r2
|
||||
_0808F5E6:
|
||||
ldrh r0, [r7, 0x6]
|
||||
cmp r0, 0x4
|
||||
bne _0808F604
|
||||
ldr r3, [sp, 0x14]
|
||||
cmp r3, 0
|
||||
beq _0808F600
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0x76
|
||||
beq _0808F6CA
|
||||
ldrb r0, [r4, 0x1]
|
||||
cmp r0, 0x76
|
||||
beq _0808F6CA
|
||||
b _0808F666
|
||||
_0808F600:
|
||||
movs r0, 0x76
|
||||
b _0808F672
|
||||
_0808F604:
|
||||
cmp r0, 0x5
|
||||
bne _0808F614
|
||||
mov r3, r8
|
||||
ldrb r0, [r3, 0x18]
|
||||
ldrb r1, [r3, 0x1A]
|
||||
cmp r0, r1
|
||||
bhi _0808F6CA
|
||||
b _0808F6DE
|
||||
_0808F614:
|
||||
cmp r0, 0x6
|
||||
bne _0808F624
|
||||
mov r2, r8
|
||||
ldrb r0, [r2, 0x18]
|
||||
ldrb r3, [r2, 0x1A]
|
||||
cmp r0, r3
|
||||
bcc _0808F6CA
|
||||
b _0808F6DE
|
||||
_0808F624:
|
||||
cmp r0, 0x7
|
||||
bne _0808F634
|
||||
mov r1, r8
|
||||
ldrb r0, [r1, 0x18]
|
||||
ldrb r2, [r1, 0x1A]
|
||||
cmp r0, r2
|
||||
beq _0808F6CA
|
||||
b _0808F6DE
|
||||
_0808F634:
|
||||
cmp r0, 0x8
|
||||
bne _0808F650
|
||||
ldr r3, [sp, 0x14]
|
||||
cmp r3, 0
|
||||
beq _0808F64C
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0x30
|
||||
beq _0808F6CA
|
||||
ldrb r0, [r4, 0x1]
|
||||
cmp r0, 0x30
|
||||
beq _0808F6CA
|
||||
b _0808F666
|
||||
_0808F64C:
|
||||
movs r0, 0x30
|
||||
b _0808F672
|
||||
_0808F650:
|
||||
cmp r0, 0x9
|
||||
bne _0808F684
|
||||
ldr r3, [sp, 0x14]
|
||||
cmp r3, 0
|
||||
beq _0808F670
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0x31
|
||||
beq _0808F6CA
|
||||
ldrb r0, [r4, 0x1]
|
||||
cmp r0, 0x31
|
||||
beq _0808F6CA
|
||||
_0808F666:
|
||||
ldrh r0, [r4, 0x4]
|
||||
mov r1, r10
|
||||
orrs r0, r1
|
||||
strh r0, [r4, 0x4]
|
||||
b _0808F6DE
|
||||
_0808F670:
|
||||
movs r0, 0x31
|
||||
_0808F672:
|
||||
bl FindItemInInventory
|
||||
cmp r0, 0
|
||||
bge _0808F6CA
|
||||
ldrh r0, [r4, 0x4]
|
||||
mov r2, r10
|
||||
orrs r0, r2
|
||||
strh r0, [r4, 0x4]
|
||||
b _0808F6DE
|
||||
_0808F684:
|
||||
cmp r0, 0xB
|
||||
bne _0808F694
|
||||
ldrb r1, [r4, 0x2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808F6CA
|
||||
b _0808F6DE
|
||||
_0808F694:
|
||||
cmp r0, 0xC
|
||||
bne _0808F6A4
|
||||
ldrb r1, [r4, 0x2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0808F6CA
|
||||
b _0808F6DE
|
||||
_0808F6A4:
|
||||
cmp r0, 0xA
|
||||
bne _0808F6CA
|
||||
ldr r3, [sp, 0x14]
|
||||
cmp r3, 0
|
||||
beq _0808F6BC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0x2F
|
||||
beq _0808F6CA
|
||||
ldrb r0, [r4, 0x1]
|
||||
cmp r0, 0x2F
|
||||
beq _0808F6CA
|
||||
b _0808F6DE
|
||||
_0808F6BC:
|
||||
movs r0, 0x2F
|
||||
bl FindItemInInventory
|
||||
cmp r0, 0
|
||||
bge _0808F6CA
|
||||
movs r0, 0x1
|
||||
mov r9, r0
|
||||
_0808F6CA:
|
||||
mov r1, r9
|
||||
cmp r1, 0
|
||||
bne _0808F6DE
|
||||
ldrh r0, [r4, 0x4]
|
||||
movs r1, 0x1
|
||||
orrs r0, r1
|
||||
strh r0, [r4, 0x4]
|
||||
mov r2, sp
|
||||
ldrh r2, [r2, 0x1C]
|
||||
strh r2, [r4, 0x6]
|
||||
_0808F6DE:
|
||||
ldr r3, [sp, 0x18]
|
||||
adds r3, 0x1
|
||||
str r3, [sp, 0x18]
|
||||
ldr r0, _0808F6FC
|
||||
cmp r3, r0
|
||||
bgt _0808F6EC
|
||||
b _0808F4E0
|
||||
_0808F6EC:
|
||||
add sp, 0x20
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0808F6FC: .4byte 0x000001a7
|
||||
thumb_func_end sub_808F468
|
||||
|
||||
thumb_func_start sub_808F700
|
||||
sub_808F700:
|
||||
push {r4,lr}
|
||||
sub sp, 0x8
|
||||
mov r4, sp
|
||||
mov r1, sp
|
||||
movs r2, 0
|
||||
bl sub_808F468
|
||||
ldrh r1, [r4, 0x4]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808F71C
|
||||
movs r0, 0x1
|
||||
b _0808F72A
|
||||
_0808F71C:
|
||||
movs r0, 0x4
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0808F728
|
||||
movs r0, 0
|
||||
b _0808F72A
|
||||
_0808F728:
|
||||
movs r0, 0x2
|
||||
_0808F72A:
|
||||
add sp, 0x8
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_808F700
|
||||
|
||||
thumb_func_start sub_808F734
|
||||
sub_808F734:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x58
|
||||
adds r5, r0, 0
|
||||
lsls r4, r1, 16
|
||||
asrs r4, 16
|
||||
movs r6, 0
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
movs r2, 0x58
|
||||
bl memcpy
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_808F798
|
||||
adds r7, r0, 0
|
||||
movs r0, 0x9E
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
bne _0808F782
|
||||
mov r0, sp
|
||||
strb r6, [r0, 0x2]
|
||||
add r0, sp, 0x28
|
||||
strb r6, [r0]
|
||||
add r4, sp, 0x4C
|
||||
ldr r5, _0808F794
|
||||
adds r0, r5, 0
|
||||
bl GetMonSpecies
|
||||
adds r1, r0, 0
|
||||
adds r0, r4, 0
|
||||
movs r2, 0xA
|
||||
bl BoundedCopyStringtoBuffer
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
bl sub_808F798
|
||||
adds r6, r0, 0
|
||||
_0808F782:
|
||||
cmp r6, 0
|
||||
beq _0808F78A
|
||||
bl sub_8097848
|
||||
_0808F78A:
|
||||
adds r0, r7, 0
|
||||
add sp, 0x58
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0808F794: .4byte 0x0000013d
|
||||
thumb_func_end sub_808F734
|
||||
|
||||
thumb_func_start sub_808F798
|
||||
sub_808F798:
|
||||
push {r4-r6,lr}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
.global gDungeonMusic
|
||||
gDungeonMusic: @ 80F5668
|
||||
.incbin "baserom.gba", 0xF5668, 0x98
|
||||
.2byte 0x72, 0x7d, 0x0e, 0x78, 0x0f, 0x71, 0x6f, 0x14, 0x66, 0x19, 0x68, 0x73, 0x6c, 0x16, 0x7d, 0x7d, 0x7d, 0x7d, 0x0d, 0x15, 0x0f, 0x7e, 0x21, 0x27, 0x7b, 0x7c, 0x17, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x1a, 0x6e, 0x6e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x1a, 0x7f, 0x23, 0x23, 0x23, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d
|
||||
|
||||
.global gUnknown_80F5700
|
||||
gUnknown_80F5700: @ 80F5700
|
||||
|
|
@ -41,6 +41,82 @@ gUnknown_80F57D4: @ 80F57D4
|
|||
gUnknown_80F58F4: @ 80F58F4
|
||||
.incbin "baserom.gba", 0xF58F4, 0x84
|
||||
|
||||
.global gUnknown_80F5978
|
||||
gUnknown_80F5978: @ 80F5978
|
||||
.incbin "baserom.gba", 0xF5978, 0x4C
|
||||
.global gSecretPowerTable
|
||||
gSecretPowerTable: @ 80F5978
|
||||
.byte 0x03
|
||||
.byte 0x00
|
||||
.byte 0x06
|
||||
.byte 0x07
|
||||
.byte 0x07
|
||||
.byte 0x06
|
||||
.byte 0x06
|
||||
.byte 0x07
|
||||
.byte 0x08
|
||||
.byte 0x06
|
||||
.byte 0x00
|
||||
.byte 0x05
|
||||
.byte 0x08
|
||||
.byte 0x08
|
||||
.byte 0x00
|
||||
.byte 0x08
|
||||
.byte 0x08
|
||||
.byte 0x07
|
||||
.byte 0x07
|
||||
.byte 0x07
|
||||
.byte 0x00
|
||||
.byte 0x05
|
||||
.byte 0x06
|
||||
.byte 0x08
|
||||
.byte 0x06
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x08
|
||||
.byte 0x06
|
||||
.byte 0x01
|
||||
.byte 0x07
|
||||
.byte 0x07
|
||||
.byte 0x01
|
||||
.byte 0x01
|
||||
.byte 0x06
|
||||
.byte 0x08
|
||||
.byte 0x08
|
||||
.byte 0x07
|
||||
.byte 0x06
|
||||
.byte 0x06
|
||||
.byte 0x06
|
||||
.byte 0x00
|
||||
.byte 0x06
|
||||
.byte 0x06
|
||||
.byte 0x05
|
||||
.byte 0x08
|
||||
.byte 0x06
|
||||
.byte 0x06
|
||||
.byte 0x06
|
||||
.byte 0x03
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x05
|
||||
.byte 0x02
|
||||
.byte 0x07
|
||||
.byte 0x06
|
||||
.byte 0x00
|
||||
.byte 0x08
|
||||
.byte 0x08
|
||||
.byte 0x06
|
||||
.byte 0x00
|
||||
.byte 0x07
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x06
|
||||
.byte 0x01
|
||||
.byte 0x06
|
||||
.byte 0x06
|
||||
.byte 0x08
|
||||
.byte 0x08
|
||||
.byte 0x06
|
||||
.byte 0x08
|
||||
.byte 0x08
|
||||
.byte 0x03
|
||||
.byte 0x03
|
||||
.byte 0x06
|
||||
|
||||
|
|
|
|||
|
|
@ -2,5 +2,6 @@
|
|||
|
||||
.global gUnknown_8115EB8
|
||||
gUnknown_8115EB8: @ 8115EB8
|
||||
.incbin "baserom.gba", 0x115EB8, 0xA4
|
||||
.string "pksdir0"
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +1,24 @@
|
|||
struct unkStruct_802C39C
|
||||
{
|
||||
/* 0x0 */ u32 unk0[2];
|
||||
/* 0x8 */ struct DungeonLocation *dungeon;
|
||||
/* 0x8 */ struct WonderMailSub *unk8;
|
||||
/* 0xC */ u8 *playerName;
|
||||
/* 0x10 */ s16 clientSpecies;
|
||||
/* 0x12 */ s16 targetSpecies;
|
||||
/* 0x14 */ u8 targetItem;
|
||||
/* 0x15 */ u8 fill15[0x2E - 0x15];
|
||||
u8 unk2E;
|
||||
u8 fill2F[0x34 - 0x2F];
|
||||
u8 unk34;
|
||||
/* 0x2E */ u8 rewardType;
|
||||
u8 *unk30;
|
||||
/* 0x34 */ u8 rewardItem;
|
||||
u8 fill35[0x38 - 0x35];
|
||||
/* 0x38 */ u8 unk38[0x40 - 0x38];
|
||||
u8 unk40;
|
||||
u8 unk41;
|
||||
u8 unk42;
|
||||
u8 mailTitleType;
|
||||
u8 mailDescriptionType;
|
||||
u8 mailMissionType;
|
||||
u8 unk43;
|
||||
u8 unk44;
|
||||
u8 unk45;
|
||||
u8 fill46[0x48 - 0x46];
|
||||
u8 mailStatus; // mail status (suspend / take job / done)
|
||||
/* 0x48 */ u32 y;
|
||||
/* 0x4C */ u8 *unk4C;
|
||||
/* 0x50 */ u8 *unk50[2];
|
||||
u8 *unk50;
|
||||
/* 0x54 */ struct WonderMail *mail;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#define GUARD_CODE_8077274_1_H
|
||||
|
||||
void MuzzleTarget(struct Entity *pokemon, struct Entity *target);
|
||||
void sub_8078E18(struct Entity * pokemon, struct Entity * target);
|
||||
void TransformStatusTarget(struct Entity * pokemon, struct Entity * target);
|
||||
void MobileStatusTarget(struct Entity * pokemon, struct Entity * target);
|
||||
void ExposeStatusTarget(struct Entity * pokemon, struct Entity * target, s16 param_3);
|
||||
void IdentityItemHolders(struct Entity *pokemon, struct Entity *target);
|
||||
|
|
|
|||
|
|
@ -3,13 +3,18 @@
|
|||
|
||||
#include "item.h"
|
||||
|
||||
struct WonderMailSub
|
||||
{
|
||||
/* 0x4 */ struct DungeonLocation dungeon;
|
||||
u32 seed;
|
||||
};
|
||||
|
||||
// size: 0x30
|
||||
struct unkStruct_203B480
|
||||
{
|
||||
/* 0x0 */ u8 mailType;
|
||||
/* 0x1 */ u8 missionType;
|
||||
/* 0x4 */ struct DungeonLocation dungeon;
|
||||
/* 0x8 */ u32 unk8;
|
||||
struct WonderMailSub unk4;
|
||||
/* 0xC */ s16 clientSpecies;
|
||||
/* 0xE */ s16 targetSpecies;
|
||||
union unk10_temp
|
||||
|
|
@ -67,4 +72,4 @@ s32 GetFirstIndexofMailType(u8 mailType);
|
|||
void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
|
||||
void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ struct subStruct_203B490
|
|||
{
|
||||
// size: 0xC
|
||||
struct DungeonLocation dungeon;
|
||||
u32 unk4;
|
||||
u32 seed;
|
||||
u32 unk8;
|
||||
};
|
||||
|
||||
|
|
|
|||
13
include/constants/evolution_status.h
Normal file
13
include/constants/evolution_status.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef GUARD_CONSTANTS_EVOLUTION_STATUS_H
|
||||
#define GUARD_CONSTANTS_EVOLUTION_STATUS_H
|
||||
|
||||
|
||||
#define EVOLUTION_GOOD 1
|
||||
#define EVOLUTION_LACK_LEVEL 1 << 1
|
||||
#define EVOLUTION_NO_MORE 1 << 2
|
||||
#define EVOLUTION_LACK_ITEM 1 << 3
|
||||
#define EVOLUTION_LACK_IQ 1 << 4
|
||||
#define EVOLUTION_LACK_FRIEND_AREA 1 << 5
|
||||
#define EVOLUTION_LACK_ROOM 1 << 6
|
||||
|
||||
#endif // GUARD_CONSTANTS_EVOLUTION_STATUS_H
|
||||
|
|
@ -37,6 +37,24 @@ enum WonderMailTypes {
|
|||
WONDER_MAIL_TYPE_OKD = 7,
|
||||
};
|
||||
|
||||
// Used in CreateRescueTitle and CreateRescueDescription
|
||||
enum MailStatuses {
|
||||
MAIL_STATUS_SUSPENDED,
|
||||
MAIL_STATUS_TAKE_JOB,
|
||||
MAIL_STATUS_DONE
|
||||
};
|
||||
|
||||
// Used in CreateRescueTitle and CreateRescueDescription
|
||||
enum MissionTypes {
|
||||
MISSION_TYPE_FRIEND_RESCUE,
|
||||
MISSION_TYPE_FIND_ITEM,
|
||||
MISSION_TYPE_DELIVER_ITEM,
|
||||
MISSION_TYPE_RESCUE_CLIENT,
|
||||
MISSION_TYPE_RESCUE_TARGET,
|
||||
MISSION_TYPE_ESCORT_CLIENT,
|
||||
MISSION_TYPE_SPECIAL_MISSION
|
||||
};
|
||||
|
||||
enum WonderMailMissionTypes
|
||||
{
|
||||
WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT = 0,
|
||||
|
|
@ -47,9 +65,12 @@ enum WonderMailMissionTypes
|
|||
WONDER_MAIL_MISSION_TYPE_UNK6 = 6,
|
||||
};
|
||||
|
||||
#define MAIL_STATUS_SUSPENDED 0
|
||||
|
||||
|
||||
#define NUM_POKEMON_NEWS 56 // 50 normal + 6 special issues
|
||||
#define PASSWORD_BUFFER_SIZE 54
|
||||
#define MAX_ITEM_REWARDS 3
|
||||
|
||||
|
||||
#endif //GUARD_CONSTANTS_WONDER_MAIL_H
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ struct Entity
|
|||
// gets assigned the current counter value as its spawn index.
|
||||
/* 0x26 */ u16 spawnGenID;
|
||||
/* 0x28*/ struct EntitySpriteInfo spriteInfo;
|
||||
struct OpenedFile *unk64;
|
||||
struct OpenedFile *sprite;
|
||||
s16 unk68;
|
||||
u8 unk6A;
|
||||
u8 unk6B;
|
||||
|
|
|
|||
|
|
@ -120,7 +120,8 @@ struct Dungeon
|
|||
u8 unk678;
|
||||
u8 unk679;
|
||||
u8 unk67A;
|
||||
u8 unk67B[0x68A - 0x67B];
|
||||
u8 unk67B[0x688 - 0x67B];
|
||||
s16 unk688;
|
||||
/* 0x68A */ u8 unk68A;
|
||||
u8 fill68B[0x699 - 0x68B];
|
||||
u8 unk699;
|
||||
|
|
@ -128,12 +129,15 @@ struct Dungeon
|
|||
/* 0x69C */ struct EntityInfo unk69C[4];
|
||||
u8 fillEBC[0x363C - 0xEBC];
|
||||
/* 0x363C */ u8 expYieldRankings[NUM_MONSTERS];
|
||||
u8 fill37E3[0x37F4 - 0x37D9];
|
||||
u8 fill37D9[0x37F0 - 0x37D9];
|
||||
/* 0x37F0 */ u32 unk37F0;
|
||||
/* 0x37F4 */ s32 unk37F4;
|
||||
/* 0x37F8 */ bool8 plusIsActive[2]; // Index 0: Enemy , Index 1: Team
|
||||
/* 0x37FA */ bool8 minusIsActive[2]; // Index 0: Enemy , Index 1: Team
|
||||
/* 0x37FC */ bool8 decoyActive;
|
||||
u8 fill37FD[0x3904 - 0x37FD];
|
||||
u8 fill37FD[0x3800 - 0x37FD];
|
||||
s16 unk3800;
|
||||
u8 fill3802[0x3904 - 0x3802];
|
||||
/* 0x3904 */ s16 unk3904;
|
||||
u8 fill3906[0x3A08 - 0x3906];
|
||||
/* 0x3A08 */ u8 unk3A08;
|
||||
|
|
@ -201,7 +205,7 @@ struct Dungeon
|
|||
/* 0x17B3C */ u32 unk17B3C;
|
||||
u8 fill17B40[0x17B44 - 0x17B40];
|
||||
/* 0x17B44 */ struct OpenedFile *sprites[MONSTER_MAX + 1];
|
||||
u8 fill181E4[0x181E8 - 0x181E4];
|
||||
/* 0x181E4 */ struct OpenedFile *paletFile;
|
||||
/* 0x181E8 */ struct Position cameraPos;
|
||||
/* 0x181EC */ struct Position cameraPosMirror;
|
||||
/* 0x181F0 */ struct Position cameraPixelPos;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef GUARD_DUNGEON_RANDOM_H
|
||||
#define GUARD_DUNGEON_RANDOM_H
|
||||
|
||||
void sub_808408C(u32 param_1);
|
||||
u32 sub_80840A4(void);
|
||||
void InitDungeonRNG(u32 value);
|
||||
s32 DungeonRand16Bit(void);
|
||||
s32 DungeonRandInt(s32 cap);
|
||||
s32 DungeonRandRange(s32 low, s32 high);
|
||||
|
|
|
|||
|
|
@ -23,15 +23,17 @@ void LoadFriendAreas(void);
|
|||
bool8 *GetBoughtFriendAreas(void);
|
||||
void InitializeFriendAreas(void);
|
||||
u8 sub_80923D4(s32 target);
|
||||
void sub_809249C(u8 friendArea, bool8 clear);
|
||||
bool8 HasAllFriendAreas(void);
|
||||
bool8 GetFriendAreaStatus(u8 index);
|
||||
void UnlockFriendArea(u8 index);
|
||||
u8 *GetFriendAreaDescription(u8 index);
|
||||
u8 GetFriendAreaUnlockCondition(u8 index);
|
||||
s32 GetFriendAreaPrice(u8 index);
|
||||
void sub_8092578(u8 *buffer, u8 index, bool8 printPrice);
|
||||
const char *GetFriendAreaName(u8 index);
|
||||
void sub_809249C(u8 friendArea, u8 clear);
|
||||
void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4);
|
||||
void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, bool8 checkLeader, bool8 checkDungeon);
|
||||
|
||||
u32 SaveFriendAreas(u8 *r0, u32 r1);
|
||||
u32 ReadSavedFriendAreas(u8 *r0, s32 r1);
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ struct unkStruct_203B2BC
|
|||
u32 moveIndex; // some sort of move index
|
||||
u16 moveID;
|
||||
struct Move moves[8];
|
||||
u16 moveIDs[4]; // some list of move IDs
|
||||
u16 moveIDs[MAX_MON_MOVES]; // some list of move IDs
|
||||
u32 menuAction1;
|
||||
u32 menuAction2;
|
||||
u32 menuAction3;
|
||||
|
|
@ -33,7 +33,29 @@ struct unkStruct_203B2BC
|
|||
|
||||
enum FriendAreaActionMenuStates {
|
||||
FRIEND_AREA_ACTION_MENU_INIT,
|
||||
FRIEND_AREA_ACTION_MENU_MAIN,
|
||||
FRIEND_AREA_ACTION_MENU_MAIN_2,
|
||||
FRIEND_AREA_ACTION_MENU_SUMMARY = 4,
|
||||
FRIEND_AREA_ACTION_MENU_CHECK_IQ = 5,
|
||||
FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT = 8,
|
||||
FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM,
|
||||
FRIEND_AREA_ACTION_MENU_EXIT = 0x11,
|
||||
};
|
||||
|
||||
enum FriendAreaActionMenuActions {
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_NONE = 1,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_YES,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_NO,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_INFO = 4,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY = 4,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_STANDBY,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_GIVE,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_TAKE,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_MOVES,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ struct GroundScript_ExecutePP_1_sub
|
|||
/* 0xE */ u8 unkE;
|
||||
/* 0xF */ u8 fillF;
|
||||
/* 0x10 */ u32 unk10;
|
||||
/* 0x14 */ u32 unk14;
|
||||
/* 0x14 */ u8 *unk14;
|
||||
/* 0x18 */ u8 fill18[0x22 - 0x18];
|
||||
/* 0x22 */ u16 unk22;
|
||||
/* 0x24 */ u16 unk24;
|
||||
|
|
@ -32,6 +32,7 @@ struct GroundScript_ExecutePP_1_sub2
|
|||
Callback callbacks[10]; // IDK the size..
|
||||
};
|
||||
|
||||
// size: 0x110
|
||||
struct GroundScript_ExecutePP_1
|
||||
{
|
||||
struct GroundScript_ExecutePP_1_sub2 *unk0;
|
||||
|
|
@ -40,7 +41,7 @@ struct GroundScript_ExecutePP_1
|
|||
u32 unkC;
|
||||
u16 unk10;
|
||||
u8 unk12;
|
||||
u8 fill18[0x24 - 0x13];
|
||||
u8 *unk14[4];
|
||||
struct GroundScript_ExecutePP_1_sub unk24;
|
||||
struct GroundScript_ExecutePP_1_sub unk84;
|
||||
u16 unkE4;
|
||||
|
|
|
|||
36
include/luminous_cave.h
Normal file
36
include/luminous_cave.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#ifndef GUARD_LUMINOUS_CAVE_H
|
||||
#define GUARD_LUMINOUS_CAVE_H
|
||||
|
||||
#include "menu.h"
|
||||
#include "text.h"
|
||||
|
||||
struct unkStruct_203B2B0
|
||||
{
|
||||
// size: 0x174
|
||||
bool8 evolutionComplete;
|
||||
struct EvolveStatus evolveStatus;
|
||||
struct PokemonStruct *pokeStruct;
|
||||
/* 0x10 */ bool8 pokeRenamed;
|
||||
/* 0x14 */ u32 evoItem1_InvIndex; // inventory index of item
|
||||
/* 0x18 */ u32 evoItem2_InvIndex; // inventory index of item
|
||||
struct Item chosenItem;
|
||||
u32 state;
|
||||
u32 fallbackState;
|
||||
u32 menuAction1;
|
||||
u32 menuAction2;
|
||||
u32 menuAction3;
|
||||
struct MenuItem unk34[8];
|
||||
u16 unk74[0x8];
|
||||
struct MenuStruct unk84;
|
||||
u8 fillD4[0x104 - 0xD4];
|
||||
struct OpenedFile *unk104;
|
||||
u8 *unk108;
|
||||
u16 unk10C;
|
||||
u16 unk10E;
|
||||
u8 unk110;
|
||||
u8 unk111;
|
||||
u8 unk112;
|
||||
struct UnkTextStruct2 unk114[4];
|
||||
};
|
||||
|
||||
#endif // GUARD_LUMINOUS_CAVE_H
|
||||
|
|
@ -20,26 +20,29 @@ struct Offense
|
|||
// size: 0x4
|
||||
struct unkPokeSubStruct_C
|
||||
{
|
||||
u8 unk0;
|
||||
u8 level;
|
||||
u8 fill1[3];
|
||||
};
|
||||
|
||||
enum PokemonUnk0Flags {
|
||||
FLAG_ON_TEAM = 2,
|
||||
};
|
||||
|
||||
// size: 0x58
|
||||
struct PokemonStruct
|
||||
{
|
||||
u16 unk0; // recruited??
|
||||
/* 0x2 */ bool8 isTeamLeader;
|
||||
/* 0x3 */ u8 unkHasNextStage; // set to a random value?
|
||||
/* 0x3 */ u8 level;
|
||||
/* 0x4 */ struct DungeonLocation dungeonLocation;
|
||||
/* 0x8 */ s16 speciesNum; // species #
|
||||
struct unkPokeSubStruct_C unkC[2];
|
||||
/* 0x14 */ s16 IQ;
|
||||
/* 0x16 */ u16 pokeHP;
|
||||
/* 0x18 */ struct Offense offense;
|
||||
u32 unk1C;
|
||||
/* 0x1C */ u32 currExp;
|
||||
/* 0x20 */ u32 IQSkills;
|
||||
u8 unk24;
|
||||
u8 fill25[3];
|
||||
/* 0x24 */ u8 tacticIndex;
|
||||
/* 0x28 */ struct BulkItem heldItem;
|
||||
/* 0x2C */ struct Move moves[MAX_MON_MOVES];
|
||||
/* 0x4C */ u8 name[POKEMON_NAME_LENGTH];
|
||||
|
|
@ -56,7 +59,7 @@ struct unkStruct_808E6F4
|
|||
struct EvolveStage
|
||||
{
|
||||
/* 0x0 */ s16 speciesNum;
|
||||
/* 0x2 */ u8 unkHasNextStage;
|
||||
/* 0x2 */ u8 level;
|
||||
};
|
||||
|
||||
// size: 0x24
|
||||
|
|
@ -70,24 +73,23 @@ struct unkStruct_8094184
|
|||
struct PokemonStruct2
|
||||
{
|
||||
u16 unk0; // corresponds to unk0 in PokemonStruct
|
||||
/* 0x2 */ bool8 isTeamLeader; // unk2
|
||||
/* 0x3 */ u8 unkHasNextStage; // unk3
|
||||
/* 0x4 */ struct DungeonLocation dungeonLocation; // unk4
|
||||
/* 0x8 */ u16 IQ; // IQ (other offset)
|
||||
/* 0x2 */ bool8 isTeamLeader;
|
||||
/* 0x3 */ u8 level;
|
||||
/* 0x4 */ struct DungeonLocation dungeonLocation;
|
||||
/* 0x8 */ u16 IQ;
|
||||
s16 unkA;
|
||||
u16 unkC;
|
||||
/* 0xE */ s16 speciesNum; // speciesNum (other offset)
|
||||
/* 0xE */ s16 speciesNum;
|
||||
u16 unk10; // pokeHP
|
||||
u16 unk12; // pokeHP
|
||||
/* 0x14 */ struct Offense offense; // offense (other offset)
|
||||
u32 unk18; // unk1C
|
||||
/* 0x18 */ u32 currExp;
|
||||
/* 0x1C */ struct unkStruct_8094184 moves;
|
||||
/* 0x40 */ struct Item itemSlot; // heldItem
|
||||
u32 unk44; // some struct
|
||||
u32 unk48; // some struct (same type as 44)
|
||||
/* 0x4C */ u32 IQSkills; // unk20
|
||||
u8 unk50; // unk24
|
||||
u8 fill51[3];
|
||||
/* 0x50 */ u8 tacticIndex;
|
||||
struct unkStruct_808E6F4 unk54;
|
||||
/* 0x58 */ u8 name[POKEMON_NAME_LENGTH]; // name (other offset)
|
||||
};
|
||||
|
|
@ -104,13 +106,13 @@ struct unkStruct_203B45C
|
|||
struct PreEvolution
|
||||
{
|
||||
/* 0x0 */ s16 evolveFrom;
|
||||
/* 0x2 */ s16 evolveType;
|
||||
/* 0x2 */ u16 evolveType;
|
||||
};
|
||||
|
||||
// size: 0x4
|
||||
struct EvolutionRequirements
|
||||
{
|
||||
/* 0x0 */ u16 mainRequirement;
|
||||
/* 0x0 */ s16 mainRequirement;
|
||||
/* 0x2 */ u16 additionalRequirement;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,30 @@
|
|||
#ifndef GUARD_POKEMON_3_H
|
||||
#define GUARD_POKEMON_3_H
|
||||
|
||||
struct EvolveStatus
|
||||
{
|
||||
u8 evoItem1;
|
||||
u8 evoItem2;
|
||||
u8 unk6;
|
||||
u16 evolutionConditionStatus;
|
||||
s16 targetEvolveSpecies;
|
||||
};
|
||||
|
||||
bool8 HasRecruitedMon(s16 species);
|
||||
s16 GetBaseSpecies(s16 index);
|
||||
s16 GetBaseSpeciesNoUnown(s16 index);
|
||||
bool8 TacticsTargetLeader(u8 tactic);
|
||||
bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex);
|
||||
s32 GetNumAvailableIQSkills(u8 *iqSkillBuffer, s32 pokeIQ);
|
||||
void CopyTacticsNameToBuffer(char *buffer, u8 tactic);
|
||||
u8 *GetIQSkillName(u8 skill);
|
||||
u8 *GetIQSkillDescription(u8 skill);
|
||||
u8 *GetTacticsDescription(u8 tactic);
|
||||
void ToggleIQSkill(u8 *param_1, u32 skillIndex);
|
||||
void SetIQSkill(u8 *param_1, u32 skillIndex);
|
||||
bool8 IsIQSkillSet(u8 *IQSkillFlags, u32 IQSkill);
|
||||
void SetDefaultIQSkills(u8 *param_1, bool8 enableSelfCurer);
|
||||
void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatus, u8 param_3);
|
||||
u32 sub_808F734(struct PokemonStruct *pokemon, s16 _species);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -66,5 +66,14 @@ enum WigglytuffStates
|
|||
WIGGLYTUFF_CHECK_LEGENDARY = 0x1C,
|
||||
};
|
||||
|
||||
bool8 sub_80211AC(u32 mode, u32 param_2);
|
||||
bool8 sub_8021774(u8 friendArea, bool8 param_2, s32 param_3);
|
||||
u32 sub_8021274(bool8 param_1);
|
||||
u8 sub_802132C(void);
|
||||
void sub_8021354(bool8 param_1);
|
||||
void sub_80213A0(void);
|
||||
void sub_8021494(void);
|
||||
u32 sub_80217EC(void);
|
||||
void sub_8021830(void);
|
||||
|
||||
#endif // GUARD_WIGGLYTUFF_SHOP_H
|
||||
|
|
|
|||
|
|
@ -25,14 +25,13 @@ struct unkStruct_802F204
|
|||
};
|
||||
|
||||
// size: 0x14
|
||||
|
||||
struct WonderMail
|
||||
{
|
||||
/* 0x0 */ u8 mailType; // mail type
|
||||
/* 0x1 */ u8 missionType; // mission type
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
/* 0x4 */ struct DungeonLocation dungeon;
|
||||
u32 unk8;
|
||||
/* 0x4 */ struct WonderMailSub unk4;
|
||||
/* 0xC */ s16 clientSpecies; // client pokemon
|
||||
/* 0xE */ s16 targetSpecies; // target
|
||||
/* 0x10 */ u8 targetItem; // item to find/deliver
|
||||
|
|
|
|||
|
|
@ -99,7 +99,6 @@ SECTIONS {
|
|||
src/code_801B3C0.o(.text);
|
||||
src/code_801C620.o(.text);
|
||||
src/code_801D760.o(.text);
|
||||
asm/code_801D760.o(.text);
|
||||
src/options_menu.o(.text);
|
||||
src/hints_menu.o(.text);
|
||||
src/gulpin_shop.o(.text);
|
||||
|
|
@ -107,9 +106,6 @@ SECTIONS {
|
|||
asm/code_801EE10.o(.text);
|
||||
src/code_801EE10_mid.o(.text);
|
||||
src/gulpin_shop_1.o(.text);
|
||||
src/code_8021774_pre.o(.text);
|
||||
asm/code_801EE10_mid.o(.text);
|
||||
src/code_8021774.o(.text);
|
||||
src/wigglytuff_shop.o(.text);
|
||||
src/code_8023144_pre.o(.text);
|
||||
asm/code_8023144.o(.text);
|
||||
|
|
@ -120,8 +116,6 @@ SECTIONS {
|
|||
src/friend_list_menu.o(.text);
|
||||
src/party_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);
|
||||
src/wonder_mail.o(.text);
|
||||
src/thank_you_wonder_mail.o(.text);
|
||||
src/wonder_mail_2.o(.text);
|
||||
|
|
@ -203,6 +197,8 @@ SECTIONS {
|
|||
src/status_actions.o(.text);
|
||||
src/move_checks.o(.text);
|
||||
asm/code_805D8C8.o(.text);
|
||||
src/code_805D8C8.o(.text);
|
||||
asm/code_805D8C8_1.o(.text);
|
||||
src/targeting.o(.text);
|
||||
src/code_8069E0C.o(.text);
|
||||
asm/code_8069E0C.o(.text);
|
||||
|
|
@ -245,7 +241,6 @@ SECTIONS {
|
|||
src/dungeon_leader.o(.text);
|
||||
asm/code_8083654.o(.text);
|
||||
src/dungeon_music.o(.text);
|
||||
asm/dungeon_music.o(.text);
|
||||
src/dungeon_random.o(.text);
|
||||
src/code_808417C.o(.text);
|
||||
asm/code_808417C.o(.text);
|
||||
|
|
@ -397,7 +392,6 @@ SECTIONS {
|
|||
src/friend_list_menu.o(.rodata);
|
||||
src/party_list_menu.o(.rodata);
|
||||
src/friend_area_action_menu.o(.rodata);
|
||||
src/friend_area_action_menu_1.o(.rodata);
|
||||
src/wonder_mail.o(.rodata);
|
||||
src/thank_you_wonder_mail.o(.rodata);
|
||||
src/wonder_mail_2.o(.rodata);
|
||||
|
|
|
|||
|
|
@ -11,8 +11,7 @@
|
|||
#include "config.h"
|
||||
#include "game_options.h"
|
||||
#include "sprite.h"
|
||||
|
||||
extern bool8 sub_80023E4(u8);
|
||||
#include "event_flag.h"
|
||||
|
||||
extern struct GameOptions *gGameOptionsRef;
|
||||
|
||||
|
|
|
|||
|
|
@ -153,9 +153,9 @@ extern void sub_801CC38(void);
|
|||
extern void sub_80140B4(struct UnkTextStruct2 *);
|
||||
extern u32 sub_8097DF0(char *, struct subStruct_203B240 **);
|
||||
extern void sub_8013F84(void);
|
||||
extern char * GetIQSkillDescription(u8 r0);
|
||||
extern s32 GetNumAvailableIQSkills(u8 *param_1, s32 pokeIQ);
|
||||
extern char * GetIQSkillName(u8 r0);
|
||||
extern void PlayMenuSoundEffect(u32);
|
||||
extern void sub_8013C68(u32 *);
|
||||
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
|
||||
extern u32 sub_80095E4(s16, u32);
|
||||
extern void sub_801C440(void);
|
||||
extern void sub_801C4C8(void);
|
||||
|
|
@ -170,7 +170,6 @@ void sub_801C6E4(void);
|
|||
void sub_801C848(void);
|
||||
|
||||
u32 sub_801C308(u8);
|
||||
void ToggleIQSkill(u8 *param_1, u32 skillIndex);
|
||||
s32 sub_801C390(void);
|
||||
void sub_801C3F8(void);
|
||||
|
||||
|
|
@ -1266,4 +1265,4 @@ void sub_801D220(void)
|
|||
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B250->unkB8, 1, 1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
#include "menu_input.h"
|
||||
#include "code_8021774.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "wigglytuff_shop.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
struct unkStruct_203B258
|
||||
{
|
||||
|
|
@ -32,6 +34,32 @@ extern struct unkStruct_203B258 *gUnknown_203B258;
|
|||
extern struct UnkTextStruct2 gUnknown_80DBF88;
|
||||
extern struct UnkTextStruct2 gUnknown_80DBF70;
|
||||
|
||||
struct unkStruct_811BAF4
|
||||
{
|
||||
s16 unk0;
|
||||
s16 unk2;
|
||||
s16 unk4;
|
||||
s16 unk6;
|
||||
u8 *text;
|
||||
};
|
||||
|
||||
extern struct unkStruct_811BAF4 gUnknown_811BAF4[10];
|
||||
|
||||
struct unkStruct_81188F0
|
||||
{
|
||||
u8 *text1;
|
||||
u8 *text2;
|
||||
u8 *text3;
|
||||
u8 *text4;
|
||||
u32 unk1;
|
||||
u32 unk2;
|
||||
u32 unk3;
|
||||
};
|
||||
|
||||
extern struct unkStruct_81188F0 gUnknown_81188F0[10];
|
||||
extern u8 gUnknown_80DBFA0[]; // Field
|
||||
|
||||
|
||||
extern void sub_801DB54();
|
||||
extern void sub_801DBD4();
|
||||
|
||||
|
|
@ -103,7 +131,6 @@ struct unk_203B250 *gUnknown_203B250;
|
|||
extern bool8 HasNoAcceptedJobs(void);
|
||||
extern bool8 sub_8024108(u32);
|
||||
extern bool8 sub_8096E2C(void);
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern u32 sub_801DCC4(void);
|
||||
extern u32 sub_8027074(void);
|
||||
extern void sub_80227B8(struct PokemonStruct *);
|
||||
|
|
@ -151,7 +178,7 @@ void sub_801D3A8(void)
|
|||
sub_801BEEC(gUnknown_203B250->index);
|
||||
break;
|
||||
case 10:
|
||||
sub_8021774(gUnknown_203B250->currFriendAreaLocation, 1, 2);
|
||||
sub_8021774(gUnknown_203B250->currFriendAreaLocation, TRUE, 2);
|
||||
break;
|
||||
case 11:
|
||||
InitializeJobListMenu(0);
|
||||
|
|
@ -575,3 +602,99 @@ void sub_801DB0C(void)
|
|||
gUnknown_203B258 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
NAKED
|
||||
void sub_801DB54(void)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4,lr}\n"
|
||||
"\tldr r4, _0801DBD0\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x9C\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tstrb r1, [r0]\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x9D\n"
|
||||
"\tstrb r2, [r0]\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x9E\n"
|
||||
"\tmovs r1, 0x8\n"
|
||||
"\tstrb r1, [r0]\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x9F\n"
|
||||
"\tstrb r2, [r0]\n"
|
||||
"\tbl ResetUnusedInputStruct\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x3C\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"\tbl sub_800641C\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"
|
||||
"_0801DBD0: .4byte gUnknown_203B258");
|
||||
}
|
||||
|
||||
void sub_801DBD4(void)
|
||||
{
|
||||
struct unkStruct_811BAF4 *temp;
|
||||
struct unkStruct_81188F0 *temp2;
|
||||
s32 y;
|
||||
#ifndef NONMATCHING
|
||||
register s32 x asm("r4");
|
||||
#else
|
||||
s32 x;
|
||||
#endif
|
||||
s16 index;
|
||||
int counter;
|
||||
|
||||
sub_8008C54(gUnknown_203B258->unk34);
|
||||
sub_80073B8(gUnknown_203B258->unk34);
|
||||
xxx_call_draw_string(10,0,gUnknown_80DBFA0,gUnknown_203B258->unk34,0); // Field
|
||||
x = gUnknown_203B258->unk9C[2] * 8 - 2;
|
||||
sub_8012BC4(x,0,gUnknown_203B258->input.unk1E + 1,2,7,gUnknown_203B258->unk34);
|
||||
for(counter = 0; counter < gUnknown_203B258->input.unk1A; counter++)
|
||||
{
|
||||
index = gUnknown_203B258->input.unk1E * gUnknown_203B258->input.unk1C + counter;
|
||||
temp = &gUnknown_811BAF4[index];
|
||||
temp2 = &gUnknown_81188F0[temp->unk4];
|
||||
y = sub_8013800(&gUnknown_203B258->input, counter);
|
||||
xxx_call_draw_string(8,y,temp2->text1,gUnknown_203B258->unk34,0);
|
||||
y = sub_8013800(&gUnknown_203B258->input,counter);
|
||||
xxx_call_draw_string(0x3e,y,temp->text,gUnknown_203B258->unk34,0);
|
||||
}
|
||||
sub_80073E0(gUnknown_203B258->unk34);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#include "text_util.h"
|
||||
#include "menu_input.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
struct unkStruct_203B2AC
|
||||
{
|
||||
|
|
@ -49,7 +50,6 @@ extern struct unkStruct_3001B60 *gUnknown_3001B60;
|
|||
extern struct UnkTextStruct2 gUnknown_80DC9B0;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC9C8;
|
||||
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8);
|
||||
extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32);
|
||||
extern void sub_802452C(void);
|
||||
|
|
|
|||
|
|
@ -1,445 +0,0 @@
|
|||
#include "constants/friend_area.h"
|
||||
#include "global.h"
|
||||
#include "input.h"
|
||||
#include "memory.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
#include "pokemon.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
#include "friend_area.h"
|
||||
#include "code_800D090.h"
|
||||
#include "menu_input.h"
|
||||
#include "code_8021774.h"
|
||||
#include "code_80118A4.h"
|
||||
|
||||
struct unkStruct_203B28C
|
||||
{
|
||||
struct MenuInputStructSub unk0;
|
||||
u8 friendArea;
|
||||
u8 unkD;
|
||||
s16 unkE[0x10];
|
||||
u32 unk30[0x10];
|
||||
s32 unk70;
|
||||
s32 unk74;
|
||||
struct UnkTextStruct2 *unk78;
|
||||
struct UnkTextStruct2 unk7C[4];
|
||||
u8 unkDC[4];
|
||||
};
|
||||
extern struct unkStruct_203B28C *gUnknown_203B28C;
|
||||
|
||||
struct unkStruct_203B280
|
||||
{
|
||||
u8 unk0[NUM_FRIEND_AREAS];
|
||||
u32 unk3C;
|
||||
struct MenuInputStruct unk40;
|
||||
s32 unk74;
|
||||
struct UnkTextStruct2 *unk78;
|
||||
struct UnkTextStruct2 unk7C[4];
|
||||
u8 unkDC[4];
|
||||
};
|
||||
extern struct unkStruct_203B280 *gUnknown_203B280;
|
||||
|
||||
|
||||
|
||||
extern struct UnkTextStruct2 gUnknown_80DC4BC;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC4D8;
|
||||
s16 GetBaseSpeciesNoUnown(s16 index);
|
||||
s32 sub_8021B58(s16 param_1);
|
||||
|
||||
extern u8 gUnknown_80DC518[];
|
||||
extern u8 gUnknown_80DC4F0[];
|
||||
extern u8 *gUnknown_80D49BC[];
|
||||
extern u8 gUnknown_80DC524[];
|
||||
extern void sub_8008C54(u32);
|
||||
extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
|
||||
|
||||
extern void sub_8021878(void);
|
||||
extern void sub_8021894(void);
|
||||
extern void sub_8021A60(void);
|
||||
void sub_8021820(void);
|
||||
u8 sub_80023E4(u32);
|
||||
|
||||
s32 sub_8021664(void)
|
||||
{
|
||||
s32 index;
|
||||
s32 counter;
|
||||
|
||||
counter = 0;
|
||||
switch(gUnknown_203B280->unk3C)
|
||||
{
|
||||
case 0:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
gUnknown_203B280->unk0[counter] = index;
|
||||
counter++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if(gFriendAreas[index])
|
||||
{
|
||||
gUnknown_203B280->unk0[counter] = index;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if (gFriendAreas[index] == 0) {
|
||||
switch(GetFriendAreaUnlockCondition(index))
|
||||
{
|
||||
case UNLOCK_SHOP_STORY:
|
||||
gUnknown_203B280->unk0[counter] = index;
|
||||
counter++;
|
||||
break;
|
||||
case UNLOCK_SHOP_POST_GAME:
|
||||
if(sub_80023E4(6) != 0) {
|
||||
gUnknown_203B280->unk0[counter] = index;
|
||||
counter++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return counter;
|
||||
}
|
||||
|
||||
|
||||
u8 sub_8021700(u32 mode)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case 0:
|
||||
return FALSE;
|
||||
case 1:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if (gFriendAreas[index] != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if (gFriendAreas[index] == 0) {
|
||||
switch(GetFriendAreaUnlockCondition(index))
|
||||
{
|
||||
case UNLOCK_SHOP_STORY:
|
||||
return FALSE;
|
||||
case UNLOCK_SHOP_POST_GAME:
|
||||
if(sub_80023E4(6) != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool8 sub_8021774(u8 friendArea, u8 param_2, s32 param_3)
|
||||
{
|
||||
gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8);
|
||||
gUnknown_203B28C->friendArea = friendArea;
|
||||
gUnknown_203B28C->unkD = param_2;
|
||||
sub_801317C(&gUnknown_203B28C->unk0);
|
||||
sub_8021A60();
|
||||
gUnknown_203B28C->unk74 = param_3;
|
||||
gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3];
|
||||
sub_8006518(gUnknown_203B28C->unk7C);
|
||||
gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8;
|
||||
sub_8021820();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 sub_80217EC(void)
|
||||
{
|
||||
switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74))
|
||||
{
|
||||
case 2:
|
||||
PlayMenuSoundEffect(1);
|
||||
return 2;
|
||||
case 1:
|
||||
PlayMenuSoundEffect(0);
|
||||
return 3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8021820(void)
|
||||
{
|
||||
sub_8021878();
|
||||
sub_8021894();
|
||||
}
|
||||
|
||||
void sub_8021830(void)
|
||||
{
|
||||
if(gUnknown_203B28C)
|
||||
{
|
||||
gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B28C->unk7C, 1, 1);
|
||||
MemoryFree(gUnknown_203B28C);
|
||||
gUnknown_203B28C = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8021878(void)
|
||||
{
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B28C->unk7C, 1, 1);
|
||||
}
|
||||
|
||||
void sub_8021894(void)
|
||||
{
|
||||
u8 *string;
|
||||
s32 iVar1;
|
||||
u32 y;
|
||||
u32 x;
|
||||
s32 index;
|
||||
u8 buffer1 [256];
|
||||
u8 buffer2 [100];
|
||||
|
||||
sub_80073B8(gUnknown_203B28C->unk74);
|
||||
sub_8092578(buffer1,gUnknown_203B28C->friendArea,0);
|
||||
xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0);
|
||||
string = GetFriendAreaDescription(gUnknown_203B28C->friendArea);
|
||||
xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0);
|
||||
if (gUnknown_203B28C->unkD != 0) {
|
||||
xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0);
|
||||
}
|
||||
else {
|
||||
xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants
|
||||
}
|
||||
sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4);
|
||||
if (gUnknown_203B28C->unkD != 0) {
|
||||
sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4);
|
||||
}
|
||||
else {
|
||||
sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4);
|
||||
}
|
||||
sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4);
|
||||
sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4);
|
||||
sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4);
|
||||
for(index = 0; index < gUnknown_203B28C->unk70; index++)
|
||||
{
|
||||
iVar1 = index % 3;
|
||||
x = iVar1 * 0x3f + 7;
|
||||
iVar1 = index / 3;
|
||||
y = iVar1 * 0xc + 0x47;
|
||||
sub_808D930(buffer2, gUnknown_203B28C->unkE[index]);
|
||||
switch(gUnknown_203B28C->unk30[index])
|
||||
{
|
||||
case 0:
|
||||
xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ???
|
||||
break;
|
||||
case 1:
|
||||
xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s
|
||||
break;
|
||||
case 2:
|
||||
sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR}
|
||||
xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
sub_80073E0(gUnknown_203B28C->unk74);
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/P2BiC
|
||||
// 99.40% matching (Seth)
|
||||
#ifndef NONMATCHING
|
||||
NAKED
|
||||
void sub_8021A60(void)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tldr r2, _08021B4C\n"
|
||||
"\tldr r1, [r2]\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tstr r0, [r1, 0x70]\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tadds r4, r2, 0\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"_08021A70:\n"
|
||||
"\tldr r1, [r4]\n"
|
||||
"\tlsls r2, r6, 1\n"
|
||||
"\tadds r0, r1, 0\n"
|
||||
"\tadds r0, 0xE\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tstrh r3, [r0]\n"
|
||||
"\tlsls r0, r6, 2\n"
|
||||
"\tadds r1, 0x30\n"
|
||||
"\tadds r1, r0\n"
|
||||
"\tstr r3, [r1]\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tcmp r6, 0xF\n"
|
||||
"\tble _08021A70\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tldr r7, _08021B4C\n"
|
||||
"_08021A8E:\n"
|
||||
"\tlsls r0, r6, 16\n"
|
||||
"\tasrs r5, r0, 16\n"
|
||||
"\tldr r4, [r7]\n"
|
||||
"\tadds r0, r5, 0\n"
|
||||
"\tbl GetFriendArea\n"
|
||||
"\tldrb r1, [r4, 0xC]\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r0, 24\n"
|
||||
"\tcmp r1, r0\n"
|
||||
"\tbne _08021AC4\n"
|
||||
"\tadds r0, r5, 0\n"
|
||||
"\tbl GetBaseSpeciesNoUnown\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tasrs r0, 16\n"
|
||||
"\tcmp r5, r0\n"
|
||||
"\tbne _08021AC4\n"
|
||||
"\tldr r3, [r7]\n"
|
||||
"\tldr r1, [r3, 0x70]\n"
|
||||
"\tlsls r2, r1, 1\n"
|
||||
"\tadds r0, r3, 0\n"
|
||||
"\tadds r0, 0xE\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tstrh r5, [r0]\n"
|
||||
"\tadds r1, 0x1\n"
|
||||
"\tstr r1, [r3, 0x70]\n"
|
||||
"_08021AC4:\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tldr r0, _08021B50\n"
|
||||
"\tcmp r6, r0\n"
|
||||
"\tble _08021A8E\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"_08021ACE:\n"
|
||||
"\tlsls r0, r6, 16\n"
|
||||
"\tasrs r4, r0, 16\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tbl sub_8098134\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08021AFC\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tbl sub_8021B58\n"
|
||||
"\tadds r2, r0, 0\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tcmp r2, r0\n"
|
||||
"\tbeq _08021AFC\n"
|
||||
"\tldr r0, _08021B4C\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tlsls r0, r2, 2\n"
|
||||
"\tadds r1, 0x30\n"
|
||||
"\tadds r1, r0\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tstr r0, [r1]\n"
|
||||
"_08021AFC:\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tldr r0, _08021B50\n"
|
||||
"\tcmp r6, r0\n"
|
||||
"\tble _08021ACE\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tldr r4, _08021B54\n"
|
||||
"_08021B08:\n"
|
||||
"\tmovs r0, 0x58\n"
|
||||
"\tadds r1, r6, 0\n"
|
||||
"\tmuls r1, r0\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r2, r0, r1\n"
|
||||
"\tldrb r1, [r2]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08021B3C\n"
|
||||
"\tmovs r1, 0x8\n"
|
||||
"\tldrsh r0, [r2, r1]\n"
|
||||
"\tbl sub_8021B58\n"
|
||||
"\tadds r2, r0, 0\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tcmp r2, r0\n"
|
||||
"\tbeq _08021B3C\n"
|
||||
"\tldr r0, _08021B4C\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tlsls r0, r2, 2\n"
|
||||
"\tadds r1, 0x30\n"
|
||||
"\tadds r1, r0\n"
|
||||
"\tmovs r0, 0x2\n"
|
||||
"\tstr r0, [r1]\n"
|
||||
"_08021B3C:\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tmovs r0, 0xCE\n"
|
||||
"\tlsls r0, 1\n"
|
||||
"\tcmp r6, r0\n"
|
||||
"\tble _08021B08\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08021B4C: .4byte gUnknown_203B28C\n"
|
||||
"_08021B50: .4byte 0x000001a7\n"
|
||||
"_08021B54: .4byte gRecruitedPokemonRef");
|
||||
|
||||
}
|
||||
#else
|
||||
void sub_8021A60(void)
|
||||
{
|
||||
s32 sVar4;
|
||||
s32 iVar6;
|
||||
s32 index;
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
gUnknown_203B28C->unk70 = 0;
|
||||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
gUnknown_203B28C->unkE[index] = 0;
|
||||
gUnknown_203B28C->unk30[index] = 0;
|
||||
}
|
||||
for(index = 0; index < 0x1A8; index++)
|
||||
{
|
||||
if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) &&
|
||||
((s16)index == GetBaseSpeciesNoUnown(index))) {
|
||||
iVar6 = gUnknown_203B28C->unk70;
|
||||
gUnknown_203B28C->unkE[iVar6] = index;
|
||||
gUnknown_203B28C->unk70 = iVar6 + 1;
|
||||
}
|
||||
}
|
||||
for(index = 0; index < 0x1A8; index++)
|
||||
{
|
||||
if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) {
|
||||
gUnknown_203B28C->unk30[sVar4] = 1;
|
||||
}
|
||||
}
|
||||
for(index = 0; index < 0x19d; index++)
|
||||
{
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[index];
|
||||
if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) &&
|
||||
(sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) {
|
||||
gUnknown_203B28C->unk30[sVar4] = 2;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
s32 sub_8021B58(s16 species)
|
||||
{
|
||||
s32 baseSpecies;
|
||||
int index;
|
||||
|
||||
baseSpecies = GetBaseSpeciesNoUnown(species);
|
||||
for(index = 0; index < gUnknown_203B28C->unk70; index++)
|
||||
{
|
||||
if (baseSpecies == gUnknown_203B28C->unkE[index]) return index;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
#include "global.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_801EE10_mid.h"
|
||||
#include "code_8021774_pre.h"
|
||||
#include "constants/friend_area.h"
|
||||
#include "constants/input.h"
|
||||
#include "friend_area.h"
|
||||
#include "input.h"
|
||||
#include "memory.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
#include "item.h"
|
||||
#include "team_inventory.h"
|
||||
#include "menu_input.h"
|
||||
|
||||
// size: 0xE0
|
||||
struct unkStruct_203B280
|
||||
{
|
||||
u8 unk0[NUM_FRIEND_AREAS];
|
||||
u32 unk3C;
|
||||
struct MenuInputStruct unk40;
|
||||
s32 unk74;
|
||||
struct UnkTextStruct2 *unk78;
|
||||
struct UnkTextStruct2 unk7C[4];
|
||||
u8 unkDC[4];
|
||||
};
|
||||
|
||||
extern struct unkStruct_203B280 *gUnknown_203B280;
|
||||
extern u32 gUnknown_203B284;
|
||||
extern u16 gUnknown_203B288;
|
||||
extern u16 gUnknown_203B28A;
|
||||
|
||||
extern struct UnkTextStruct2 gUnknown_80DC47C;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC464;
|
||||
|
||||
u8 sub_8021700(u32 mode);
|
||||
s32 sub_8021664(void);
|
||||
extern void sub_8021410(void);
|
||||
|
||||
bool8 sub_80211AC(u32 param_1, u32 param_2)
|
||||
{
|
||||
if(sub_8021700(param_1))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8);
|
||||
gUnknown_203B280->unk3C = param_1;
|
||||
gUnknown_203B280->unk74 = param_2;
|
||||
gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74];
|
||||
sub_8006518(gUnknown_203B280->unk7C);
|
||||
gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C;
|
||||
gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B280->unk7C, 1, 1);
|
||||
sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2);
|
||||
if(gUnknown_203B284 == gUnknown_203B280->unk3C)
|
||||
{
|
||||
gUnknown_203B280->unk40.menuIndex = gUnknown_203B288;
|
||||
gUnknown_203B280->unk40.unk1E = gUnknown_203B28A;
|
||||
sub_8013984(&gUnknown_203B280->unk40);
|
||||
}
|
||||
sub_8021410();
|
||||
sub_8021494();
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_8021274(bool8 param_1)
|
||||
{
|
||||
if (param_1 == 0) {
|
||||
sub_8013660(&gUnknown_203B280->unk40);
|
||||
return 0;
|
||||
}
|
||||
switch(GetKeyPress(&gUnknown_203B280->unk40))
|
||||
{
|
||||
case INPUT_B_BUTTON:
|
||||
PlayMenuSoundEffect(1);
|
||||
return 2;
|
||||
case INPUT_A_BUTTON:
|
||||
if ((gUnknown_203B280->unk3C == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventoryRef->teamMoney))
|
||||
{
|
||||
PlayMenuSoundEffect(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayMenuSoundEffect(0);
|
||||
}
|
||||
return 3;
|
||||
case INPUT_START_BUTTON:
|
||||
PlayMenuSoundEffect(4);
|
||||
return 4;
|
||||
default:
|
||||
if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) {
|
||||
sub_8021410();
|
||||
sub_8021494();
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_802132C(void)
|
||||
{
|
||||
return gUnknown_203B280->unk0[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex];
|
||||
}
|
||||
|
||||
void sub_8021354(bool8 param_1)
|
||||
{
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B280->unk7C,0,0);
|
||||
gUnknown_203B280->unk40.unk22 = sub_8021664();
|
||||
sub_8013984(&gUnknown_203B280->unk40);
|
||||
sub_8021410();
|
||||
sub_8021494();
|
||||
if (param_1) {
|
||||
AddMenuCursorSprite(&gUnknown_203B280->unk40);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80213A0(void)
|
||||
{
|
||||
if(gUnknown_203B280)
|
||||
{
|
||||
gUnknown_203B284 = gUnknown_203B280->unk3C;
|
||||
gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex;
|
||||
gUnknown_203B28A = gUnknown_203B280->unk40.unk1E;
|
||||
gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B280->unk7C, 1, 1);
|
||||
MemoryFree(gUnknown_203B280);
|
||||
gUnknown_203B280 = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@
|
|||
#include "code_80130A8.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
|
||||
struct unkStruct_3001B5C
|
||||
{
|
||||
|
|
@ -47,7 +48,6 @@ extern struct UnkTextStruct2 gUnknown_80DC904;
|
|||
|
||||
void sub_8023758(void);
|
||||
void sub_80237E0(void);
|
||||
extern bool8 sub_8098134(s32);
|
||||
extern void sub_8023730(void);
|
||||
extern u8 sub_8023704(u8);
|
||||
extern void sub_8023420(void);
|
||||
|
|
@ -68,7 +68,7 @@ extern void sub_801B048(void);
|
|||
void GetGummiItemStatBoost(struct PokemonStruct* pokemon, u8 id, bool8 checkBoostFlags, struct Gummi* gummi);
|
||||
|
||||
extern void sub_8099690(u32);
|
||||
s32 GetNumAvailableIQSkills(u8 *iqSkillBuffer, s32 pokeIQ);
|
||||
extern void sub_801A928(void);
|
||||
|
||||
void sub_8022D2C(void) {
|
||||
s32 index;
|
||||
|
|
@ -460,7 +460,7 @@ void sub_8023420(void)
|
|||
|
||||
extern u8 gUnknown_80DC934[];
|
||||
|
||||
bool8 HasRecruitedMon(s16 species_);
|
||||
extern void sub_8008C54(u32);
|
||||
extern u8 gUnknown_80DC93C[];
|
||||
|
||||
void sub_80234BC(void)
|
||||
|
|
@ -485,7 +485,7 @@ void sub_80234BC(void)
|
|||
{
|
||||
y = sub_8013800(&gUnknown_3001B5C->input,index);
|
||||
species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)];
|
||||
sub_8092638(GetFriendArea(species),&auStack_2c,0,0);
|
||||
sub_8092638(GetFriendArea(species),&auStack_2c,FALSE,FALSE);
|
||||
color = COLOR_WHITE_2;
|
||||
if (auStack_2c.hasFriendArea) {
|
||||
color = HasRecruitedMon(species) ? COLOR_CYAN : COLOR_GREEN;
|
||||
|
|
|
|||
|
|
@ -1,15 +1,472 @@
|
|||
#include "global.h"
|
||||
#include "constants/colors.h"
|
||||
#include "constants/wonder_mail.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "event_flag.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
#include "code_8094F88.h"
|
||||
#include "code_802C39C.h"
|
||||
#include "text_util.h"
|
||||
#include "text2.h"
|
||||
#include "code_800D090.h"
|
||||
#include "menu_input.h"
|
||||
#include "wonder_mail.h"
|
||||
|
||||
struct unkStruct_80E9920
|
||||
{
|
||||
s16 unkA;
|
||||
s16 unkB;
|
||||
u8 *text;
|
||||
};
|
||||
|
||||
struct unkStruct_80E9F8C
|
||||
{
|
||||
s16 unkA;
|
||||
s16 unkB;
|
||||
u8 *text1;
|
||||
u8 *text2;
|
||||
};
|
||||
|
||||
extern s16 gUnknown_80E80E0[];
|
||||
extern s16 gUnknown_80E8126[];
|
||||
extern u8 gUnknown_80E888C[];
|
||||
extern u8 *gUnknown_80E8BCC[];
|
||||
extern u8 gMankeyMissionDescription[];
|
||||
extern u8 gSmeargleMissionDescription[];
|
||||
extern u8 gMedichamMissionDescription[];
|
||||
extern u8 gUnknown_202DE58[];
|
||||
extern u8 gUnknown_80E8968[];
|
||||
extern u8 gUnknown_80E89B0[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gDifficultyText[];
|
||||
extern u8 gPlaceText[];
|
||||
extern u8 gUnknown_80E8AD0[];
|
||||
extern u8 gUnknown_80E8AE0[];
|
||||
extern u8 gUnknown_80E8AEC[];
|
||||
extern u8 gUnknown_80E8B10[];
|
||||
extern u8 gUnknown_80E8AFC[];
|
||||
extern u8 gUnknown_80E8B20[];
|
||||
extern u8 gUnknown_80E8B40[];
|
||||
extern u8 gUnknown_80E8B2C[];
|
||||
extern u8 *gUnknown_80EB220[];
|
||||
extern u8 gRewardText[];
|
||||
extern u8 *gMissionRewardText[];
|
||||
extern u8 gUnknown_80E8B7C[];
|
||||
extern u8 *gUnknown_80EB2F0[];
|
||||
extern u8 gUnknown_80E89FC[];
|
||||
extern u8 gUnknown_80E8A40[];
|
||||
extern u8 gUnknown_80E8A7C[];
|
||||
extern u8 *gUnknown_80E8DE4[];
|
||||
extern u8 *gUnknown_80E8FB0[];
|
||||
extern u8 *gUnknown_80E91D4[];
|
||||
extern u8 *gUnknown_80E9820[10];
|
||||
extern u8 *gUnknown_80EAEB8[];
|
||||
extern u8 gSpecialMissionText[];
|
||||
extern u8 *gUnknown_80EB198[];
|
||||
extern u8 *gUnknown_80EB3F8[];
|
||||
extern u8 *gUnknown_80EB72C[22];
|
||||
extern u8 gUnknown_80E8AC8[];
|
||||
extern u8 gUnknown_80E8884[];
|
||||
extern u8 gMankeyMission[];
|
||||
extern u8 gSmeargleMission[];
|
||||
extern u8 gMedichamMission[];
|
||||
extern u8 gUnknown_80E8830[];
|
||||
extern u8 gUnknown_80E8848[];
|
||||
extern u8 gUnknown_80E885C[];
|
||||
extern u8 gUnknown_80E8AC8[];
|
||||
extern u8 *gUnknown_80E910C[];
|
||||
extern u8 *gUnknown_80E8C98[];
|
||||
extern u8 gUnknown_80E886C[];
|
||||
extern u8 *gUnknown_80EAE5C[];
|
||||
extern struct unkStruct_80E9F8C gUnknown_80E9F8C[10];
|
||||
extern struct unkStruct_80E9920 gUnknown_80E9920[10];
|
||||
extern u8 *gUnknown_80E8B94[];
|
||||
|
||||
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
|
||||
extern struct PokemonStruct *sub_808D378(void);
|
||||
|
||||
extern bool8 sub_803C0DC(s16);
|
||||
extern bool8 sub_8098134(s16);
|
||||
extern s16 GetBaseSpecies(s16);
|
||||
extern bool8 sub_80023E4(u32);
|
||||
s32 sub_8016028(void);
|
||||
extern void PrintDungeonLocationtoBuffer(u8 *, void *);
|
||||
extern void PrintYellowDungeonNametoBuffer(u8 *, void *);
|
||||
extern u8 sub_803C1D0(struct WonderMailSub *, u8);
|
||||
extern u8 *sub_803C1F0(u8);
|
||||
void sub_803D414(u8 *, struct WonderMail *);
|
||||
|
||||
void sub_803B6B0(s32 x, s32 y, u8 index, u32 param_4)
|
||||
{
|
||||
xxx_call_draw_string(x,y,gUnknown_80E8B94[index],param_4,0);
|
||||
}
|
||||
|
||||
void CreateRescueTitle(struct unkStruct_802C39C *param_1)
|
||||
{
|
||||
char buf_1 [200];
|
||||
char buf_2 [20];
|
||||
char buf_3 [100];
|
||||
u8 *monName;
|
||||
u8 uVar1;
|
||||
|
||||
sub_803B6B0(10,param_1->y,param_1->unk43,param_1->unk0[0]);
|
||||
switch(param_1->mailTitleType) {
|
||||
case 3:
|
||||
xxx_call_draw_string(0x15,param_1->y,param_1->unk4C,param_1->unk0[0],0);
|
||||
break;
|
||||
case 0:
|
||||
xxx_call_draw_string(0x15,param_1->y,gMankeyMission,param_1->unk0[0],0);
|
||||
break;
|
||||
case 1:
|
||||
xxx_call_draw_string(0x15,param_1->y,gSmeargleMission,param_1->unk0[0],0);
|
||||
break;
|
||||
case 2:
|
||||
xxx_call_draw_string(0x15,param_1->y,gMedichamMission,param_1->unk0[0],0);
|
||||
break;
|
||||
case 7:
|
||||
PrintYellowDungeonNametoBuffer(buf_1, param_1->unk8);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 12:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8830,gUnknown_202DE58);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 11:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8848,gUnknown_202DE58);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 4:
|
||||
xxx_call_draw_string(0x15,param_1->y,gUnknown_80E885C,param_1->unk0[0],0);
|
||||
break;
|
||||
case 5:
|
||||
xxx_call_draw_string(0x15,param_1->y,gUnknown_80E9F8C[param_1->unk0[1]].text1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 6:
|
||||
xxx_call_draw_string(0x15,param_1->y,gUnknown_80E886C,param_1->unk0[0],0);
|
||||
break;
|
||||
case 10: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80EAE5C[(bVar2 & 3)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
case 9: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E910C[(bVar2 % 0xA)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8C98[(bVar2 % 0xf)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (param_1->mailTitleType == 7) {
|
||||
if (param_1->playerName == NULL) {
|
||||
xxx_call_draw_string(0xb2 - sub_8016028(),param_1->y,GetMonSpecies(param_1->clientSpecies),param_1->unk0[0],0);
|
||||
}
|
||||
else {
|
||||
sub_80922B4(buf_2,param_1->playerName,POKEMON_NAME_LENGTH);
|
||||
xxx_call_draw_string(0xb2 - sub_8016028(),param_1->y,buf_2,param_1->unk0[0],0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) {
|
||||
PrintDungeonLocationtoBuffer(buf_3, param_1->unk8);
|
||||
sprintfStatic(buf_1,gUnknown_80E8884,buf_3); // Near %s
|
||||
}
|
||||
else {
|
||||
PrintDungeonLocationtoBuffer(buf_1, param_1->unk8);
|
||||
}
|
||||
xxx_call_draw_string(0x1d,param_1->y + 0xc,buf_1,param_1->unk0[0],0);
|
||||
}
|
||||
if (param_1->mailTitleType == 7) {
|
||||
uVar1 = sub_803C1D0(param_1->unk8,0);
|
||||
}
|
||||
else {
|
||||
uVar1 = sub_803C1D0(param_1->unk8,param_1->mail->missionType);
|
||||
}
|
||||
xxx_call_draw_string(0xb4,param_1->y,sub_803C1F0(uVar1),param_1->unk0[0],0);
|
||||
}
|
||||
|
||||
void CreateRescueDescription(struct unkStruct_802C39C *param_1)
|
||||
{
|
||||
u8 uVar3;
|
||||
int x;
|
||||
int counter;
|
||||
u32 color;
|
||||
s32 y;
|
||||
char buf_1 [300];
|
||||
char buf_2 [40];
|
||||
char buf_3 [20];
|
||||
char buf_4 [20];
|
||||
char buf_5 [100];
|
||||
u8 local_34 [24];
|
||||
u8 *monName;
|
||||
|
||||
y = 0;
|
||||
|
||||
xxx_call_draw_string(10,y,gUnknown_80E888C,param_1->unk0[0],0);
|
||||
xxx_call_draw_string(0x6c,y,gUnknown_80E8BCC[param_1->mailStatus],param_1->unk0[0],0);
|
||||
y += 0x10;
|
||||
switch(param_1->mailDescriptionType) {
|
||||
case 3:
|
||||
xxx_call_draw_string(10,y,param_1->unk50,param_1->unk0[0],0);
|
||||
break;
|
||||
case 0:
|
||||
xxx_call_draw_string(10,y,gMankeyMissionDescription,param_1->unk0[0],0);
|
||||
break;
|
||||
case 1:
|
||||
xxx_call_draw_string(10,y,gSmeargleMissionDescription,param_1->unk0[0],0);
|
||||
break;
|
||||
case 2:
|
||||
xxx_call_draw_string(10,y,gMedichamMissionDescription,param_1->unk0[0],0);
|
||||
break;
|
||||
case 4:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8968,gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 5:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E89B0,gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 6:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E9920[param_1->unk0[1]].text,param_1->unk0[0],0);
|
||||
break;
|
||||
case 7:
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E9F8C[param_1->unk0[1]].text2,gAvailablePokemonNames,gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 9:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E89FC,param_1->unk0[0],0); // This is a rescue through communication. Get a friend to help you!
|
||||
break;
|
||||
case 10:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8A40,param_1->unk0[0],0); // This is a rescue through communication. Rescue a friend!
|
||||
break;
|
||||
case 11:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8A7C,param_1->unk0[0],0); // This is a rescue through communication. Send your thanks to a friend!
|
||||
break;
|
||||
case 15:
|
||||
case 16: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80EB3F8[(bVar2 % 0x16)],gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80EB72C[(bVar3 % 0x16)],gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
case 14: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80EAEB8[(bVar2 % 0x14)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,(gUnknown_80EB198)[(bVar3 & 3)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80EB220[(bVar2 % 6)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80EB2F0[(bVar3 % 0x6)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
case 13: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E91D4[(bVar2 % 0x2d)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80E9820[(bVar3 % 10)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->clientSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8DE4[(bVar2 % 0xd)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80E8FB0[(bVar3 % 0xd)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
}
|
||||
y += 0x1C;
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8AC8,param_1->unk0[0],0);
|
||||
if (param_1->playerName == NULL) {
|
||||
xxx_call_draw_string(0x44,y,GetMonSpecies(param_1->clientSpecies),param_1->unk0[0],0);
|
||||
}
|
||||
else {
|
||||
sub_80922B4(buf_3,param_1->playerName,POKEMON_NAME_LENGTH);
|
||||
sub_808D930(buf_4,param_1->clientSpecies);
|
||||
sprintfStatic(buf_2,gUnknown_80E8AD0,buf_3,buf_4);
|
||||
xxx_call_draw_string(0x44,y,buf_2,param_1->unk0[0],0);
|
||||
}
|
||||
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8AE0,param_1->unk0[0],0);
|
||||
switch(param_1->mailMissionType) {
|
||||
case MISSION_TYPE_FRIEND_RESCUE:
|
||||
xxx_call_draw_string(0x44,y,gUnknown_80E8AEC,param_1->unk0[0],0); // Friend Rescue
|
||||
break;
|
||||
case MISSION_TYPE_DELIVER_ITEM:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8AFC,gUnknown_202DE58); // Deliver #C4%s#R.
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_FIND_ITEM:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8B10,gUnknown_202DE58); // Find #C4%s#R.
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_RESCUE_CLIENT:
|
||||
xxx_call_draw_string(0x44,y,gUnknown_80E8B20,param_1->unk0[0],0); // Help me.
|
||||
break;
|
||||
case MISSION_TYPE_ESCORT_CLIENT:
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8B2C,gAvailablePokemonNames); // Escort to #C6%s#R.
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_RESCUE_TARGET:
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8B40,gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_SPECIAL_MISSION:
|
||||
default:
|
||||
xxx_call_draw_string(0x44,y,gSpecialMissionText,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gPlaceText,param_1->unk0[0],0);
|
||||
|
||||
// NOTE: check with TRUE is needed to match
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) {
|
||||
PrintDungeonLocationtoBuffer(buf_5,param_1->unk8);
|
||||
sprintfStatic(buf_1,gUnknown_80E8884,buf_5); // Near %s
|
||||
}
|
||||
else {
|
||||
PrintDungeonLocationtoBuffer(buf_1,param_1->unk8);
|
||||
}
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FRIEND_RESCUE) {
|
||||
uVar3 = sub_803C1D0(param_1->unk8, 0);
|
||||
}
|
||||
else {
|
||||
uVar3 = sub_803C1D0(param_1->unk8,param_1->mail->missionType);
|
||||
}
|
||||
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gDifficultyText,param_1->unk0[0],0);
|
||||
xxx_call_draw_string(0x44,y,sub_803C1F0(uVar3),param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gRewardText,param_1->unk0[0],0);
|
||||
|
||||
switch(param_1->rewardType) {
|
||||
case 0:
|
||||
sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],param_1->unk30);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 1:
|
||||
sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],param_1->unk30);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 2: // Item
|
||||
case 3: // Item + ?
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->rewardItem,0);
|
||||
sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],gUnknown_202DE58);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 4: // Friend Area
|
||||
xxx_call_draw_string(0x44,y,gMissionRewardText[param_1->rewardType],param_1->unk0[0],0);
|
||||
break;
|
||||
default:
|
||||
xxx_call_draw_string(0x44,y,gMissionRewardText[param_1->rewardType],param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
|
||||
// Draw the Password
|
||||
y += 0xC;
|
||||
if (((2 < (u8)(param_1->mailDescriptionType - 9)) && (param_1->mailDescriptionType != 3)) && (param_1->mail->mailType == 5))
|
||||
{
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8B7C,param_1->unk0[0],0); // Wonder Mail:
|
||||
sub_803D414(local_34,param_1->mail);
|
||||
for(counter = 0; counter < 24; counter++)
|
||||
{
|
||||
if (counter == 12) {
|
||||
y += 12;
|
||||
}
|
||||
color = COLOR_WHITE_2;
|
||||
if (((3 < counter) && (color = COLOR_YELLOW, 7 < counter)) && ((color = COLOR_WHITE_2)))
|
||||
{
|
||||
if(counter > 15)
|
||||
{
|
||||
if(counter < 20)
|
||||
{
|
||||
color = COLOR_YELLOW;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
x = counter % 12;
|
||||
sub_8012C60(x * 10 + 0x54,y,local_34[counter],color,param_1->unk0[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_803C0DC(s16 species)
|
||||
{
|
||||
s32 baseSpecies;
|
||||
s32 index;
|
||||
|
||||
baseSpecies = GetBaseSpecies(species);
|
||||
index = 0;
|
||||
if (gUnknown_80E80E0[index] != MONSTER_NONE)
|
||||
{
|
||||
while(gUnknown_80E80E0[index] != MONSTER_NONE) {
|
||||
if (gUnknown_80E80E0[index] == baseSpecies) {
|
||||
return FALSE;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_803C110(s16 index)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
typedef bool8 (*MoveCallback)(struct Entity *pokemon, struct Entity *target, struct Move *move, s32 param_4);
|
||||
struct NaturePowerMove
|
||||
{
|
||||
s16 moveID;
|
||||
u16 moveID;
|
||||
u16 unk2;
|
||||
MoveCallback move;
|
||||
};
|
||||
|
|
@ -502,18 +502,18 @@ bool8 sub_8057C88(struct Entity *pokemon, struct Entity *target, struct Move * m
|
|||
return flag;
|
||||
}
|
||||
|
||||
s32 sub_8057CD0(struct Entity * pokemon, struct Entity * target, struct Move * move, u32 param_4)
|
||||
bool32 sub_8057CD0(struct Entity * pokemon, struct Entity * target, struct Move * move, u32 param_4)
|
||||
{
|
||||
u32 uVar1;
|
||||
s32 iVar2;
|
||||
u32 weather;
|
||||
s32 flag;
|
||||
|
||||
uVar1 = GetApparentWeather(pokemon);
|
||||
iVar2 = sub_80556BC(pokemon,target,gUnknown_80F51E4[uVar1],move,
|
||||
gUnknown_80F51EC[uVar1],param_4);
|
||||
if (iVar2 != 0) {
|
||||
iVar2 = 1;
|
||||
weather = GetApparentWeather(pokemon);
|
||||
flag = sub_80556BC(pokemon,target,gUnknown_80F51E4[weather],move,
|
||||
gUnknown_80F51EC[weather],param_4);
|
||||
if (flag) {
|
||||
flag = TRUE;
|
||||
}
|
||||
return iVar2;
|
||||
return flag;
|
||||
}
|
||||
|
||||
bool8 WhirlpoolMoveAction(struct Entity * pokemon, struct Entity * target, struct Move * move, u32 param_4)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include "friend_area.h"
|
||||
#include "item.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "position_util.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
|
||||
|
|
@ -330,7 +331,6 @@ extern void IncreaseEntityPixelPos(struct Entity *, u32, u32);
|
|||
extern void sub_8042B0C(struct Entity *);
|
||||
extern void DisplayDungeonDialogue(u32 *);
|
||||
extern void sub_803E708(u32, u32);
|
||||
extern u8 HasRecruitedMon(u32);
|
||||
extern u8 sub_806FD18(struct Entity *);
|
||||
extern void sub_80861D4(struct Entity *, u32, s32 direction);
|
||||
extern void sub_806FDF4(struct Entity *, struct Entity *, struct Entity **);
|
||||
|
|
@ -390,7 +390,6 @@ extern u8 JirachiFriendAreaSearch(void);
|
|||
|
||||
extern u8 sub_80860A8(u32);
|
||||
extern void sub_8049ED4();
|
||||
extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
|
||||
extern void sub_8052D44(s16 *, struct Entity *, struct Entity *);
|
||||
extern void SetMessageArgument(u8 *, struct Entity *, u32);
|
||||
extern struct Entity *GetLeader();
|
||||
|
|
@ -3736,7 +3735,7 @@ void JirachiWish(void)
|
|||
PlaySoundEffect(0xd4);
|
||||
LeaderEntity = GetLeader();
|
||||
SetMessageArgument(gAvailablePokemonNames,LeaderEntity,0);
|
||||
sub_8092578(gUnknown_202DE58,friendArea,0);
|
||||
sub_8092578(gUnknown_202DE58,friendArea,FALSE);
|
||||
// Obtained the friend area!
|
||||
DisplayDungeonDialogue(&gUnknown_8105B68);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ extern s16 gUnknown_80F4E00;
|
|||
extern u8 *gUnknown_80FD128[];
|
||||
extern u8 *gUnknown_80FAD2C[];
|
||||
extern u32 gUnknown_80F4F64;
|
||||
extern u8 gUnknown_80F5978[];
|
||||
extern u8 gSecretPowerTable[];
|
||||
extern s16 gUnknown_80F4E74;
|
||||
extern s16 gUnknown_80F4E06;
|
||||
extern s16 gUnknown_80F4E94[];
|
||||
|
|
@ -1271,7 +1271,7 @@ bool8 SecretPowerMoveAction(struct Entity * pokemon, struct Entity * target, str
|
|||
if ( sub_8055640(pokemon, target, move, 0x100, param_4) != 0) {
|
||||
flag = TRUE;
|
||||
if (sub_805727C(pokemon,target,gUnknown_80F4E06) != 0) {
|
||||
switch(gUnknown_80F5978[gDungeon->tileset]) {
|
||||
switch(gSecretPowerTable[gDungeon->tileset]) {
|
||||
case 0:
|
||||
PoisonedStatusTarget(pokemon,target,FALSE);
|
||||
break;
|
||||
|
|
|
|||
139
src/code_805D8C8.c
Normal file
139
src/code_805D8C8.c
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
#include "global.h"
|
||||
#include "file_system.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "dungeon_util.h"
|
||||
|
||||
extern struct FileArchive gMonsterFileArchive;
|
||||
extern u8 gUnknown_8106EA0[]; // ax%03d
|
||||
extern int sprintf(char *, const char *, ...);
|
||||
void sub_8068838(s16, bool32);
|
||||
void sub_80688B0(void);
|
||||
void sub_8068884(void);
|
||||
|
||||
void sub_8068768(void)
|
||||
{
|
||||
struct Entity *entity;
|
||||
int index;
|
||||
|
||||
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
|
||||
{
|
||||
entity = gDungeon->allPokemon[index];
|
||||
if ((entity != NULL) && EntityExists(entity)) {
|
||||
sub_8068838(entity->info->apparentID, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80687AC(void)
|
||||
{
|
||||
gDungeon->unk37F0 = 0x400;
|
||||
gDungeon->unk37F4 = 0xA;
|
||||
}
|
||||
|
||||
struct OpenedFile *sub_80687D0(s16 _id)
|
||||
{
|
||||
s32 id = _id;
|
||||
return gDungeon->sprites[id];
|
||||
}
|
||||
|
||||
// 85.94 matching (Seth)
|
||||
// https://decomp.me/scratch/CI98Y
|
||||
//
|
||||
#ifdef NONMATCING
|
||||
void sub_80687EC(s32 _id)
|
||||
{
|
||||
u8 name [12];
|
||||
s16 id = _id;
|
||||
|
||||
if (gDungeon->sprites[id] == NULL) {
|
||||
sprintf(name,gUnknown_8106EA0);
|
||||
gDungeon->sprites[id] = OpenFileAndGetFileDataPtr(name,&gMonsterFileArchive);
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_80687EC(s32 _id)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4,r5,lr}\n"
|
||||
"\tsub sp, 0xC\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tasrs r2, r0, 16\n"
|
||||
"\tldr r5, _08068828\n"
|
||||
"\tldr r0, [r5]\n"
|
||||
"\tlsls r4, r2, 2\n"
|
||||
"\tldr r1, _0806882C\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tadds r0, r4\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _08068820\n"
|
||||
"\tldr r1, _08068830\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tbl sprintf\n"
|
||||
"\tldr r1, _08068834\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tbl OpenFileAndGetFileDataPtr\n"
|
||||
"\tldr r1, [r5]\n"
|
||||
"\tldr r2, _0806882C\n"
|
||||
"\tadds r1, r2\n"
|
||||
"\tadds r1, r4\n"
|
||||
"\tstr r0, [r1]\n"
|
||||
"_08068820:\n"
|
||||
"\tadd sp, 0xC\n"
|
||||
"\tpop {r4,r5}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08068828: .4byte gDungeon\n"
|
||||
"_0806882C: .4byte 0x00017b44\n"
|
||||
"_08068830: .4byte gUnknown_8106EA0\n"
|
||||
"_08068834: .4byte gMonsterFileArchive");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_8068838(s16 id, bool32 _param_2)
|
||||
{
|
||||
s32 id_s32 = id;
|
||||
bool8 param_2 = _param_2;
|
||||
|
||||
|
||||
if ((param_2 == 0) &&
|
||||
((id_s32 == MONSTER_DEOXYS_NORMAL) || (id_s32 == MONSTER_DEOXYS_ATTACK) || (id_s32 == MONSTER_DEOXYS_DEFENSE) || (id_s32 == MONSTER_DEOXYS_SPEED))) {
|
||||
sub_80688B0();
|
||||
}
|
||||
else {
|
||||
sub_80687EC(id_s32);
|
||||
if ((u16)(id_s32 - MONSTER_CASTFORM) < 4) {
|
||||
sub_8068884();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8068884(void)
|
||||
{
|
||||
sub_80687EC(MONSTER_CASTFORM);
|
||||
sub_80687EC(MONSTER_CASTFORM_SNOWY);
|
||||
sub_80687EC(MONSTER_CASTFORM_SUNNY);
|
||||
sub_80687EC(MONSTER_CASTFORM_RAINY);
|
||||
}
|
||||
|
||||
void sub_80688B0(void)
|
||||
{
|
||||
sub_80687EC(gDungeon->unk3800);
|
||||
}
|
||||
|
||||
void CloseAllSpriteFiles(void)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
for(index = 0; index < 0x1A8; index++)
|
||||
{
|
||||
if (gDungeon->sprites[index] != NULL) {
|
||||
CloseFile(gDungeon->sprites[index]);
|
||||
gDungeon->sprites[index] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -15,6 +15,7 @@ extern void sub_806CCB4(struct Entity *, u8);
|
|||
extern void sub_803E46C(u32);
|
||||
extern bool8 sub_808DA44(s32 a1_, u32 a2_);
|
||||
extern u32 sub_806CF98(struct Entity *);
|
||||
extern struct OpenedFile *sub_80687D0(s16);
|
||||
void sub_806CDD4(struct Entity *, u8, u32);
|
||||
|
||||
extern const u8 gUnknown_8106EEF[];
|
||||
|
|
@ -71,7 +72,7 @@ void sub_806CCB4(struct Entity *entity, u8 param_2)
|
|||
sVar1 = entity->unk68;
|
||||
|
||||
if (info->waitingStatus != STATUS_DECOY && !flag)
|
||||
sub_80053AC(&entity->spriteInfo, entity->unk64, entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE);
|
||||
sub_80053AC(&entity->spriteInfo, entity->sprite, entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE);
|
||||
else
|
||||
sub_80053AC(&entity->spriteInfo, sub_80687D0(MONSTER_DECOY), entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE);
|
||||
|
||||
|
|
|
|||
|
|
@ -174,6 +174,7 @@ extern void EntityUpdateStatusSprites(struct Entity *);
|
|||
extern void sub_8042A74(struct Entity *r0);
|
||||
extern void sub_807EC28(bool8);
|
||||
extern s32 sub_8069F54(struct Entity *param_1, s16 param_2);
|
||||
extern struct OpenedFile *sub_80687D0(s16);
|
||||
extern void sub_806A898(struct Entity *, u32, u32);
|
||||
extern void HealTargetHP(struct Entity *pokemon, struct Entity *r1, s16, s16, u32);
|
||||
extern void sub_806CE68(struct Entity *, s32);
|
||||
|
|
@ -236,7 +237,7 @@ void MuzzleTarget(struct Entity *pokemon, struct Entity *target)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_8078E18(struct Entity * pokemon, struct Entity * target)
|
||||
void TransformStatusTarget(struct Entity * pokemon, struct Entity * target)
|
||||
{
|
||||
s16 species;
|
||||
s32 iVar5;
|
||||
|
|
@ -279,7 +280,7 @@ void sub_8078E18(struct Entity * pokemon, struct Entity * target)
|
|||
sub_80522F4(pokemon, target, *gUnknown_80FBEE4);
|
||||
else {
|
||||
entityInfo->apparentID = apparentID;
|
||||
target->unk64 = iVar9;
|
||||
target->sprite = iVar9;
|
||||
entityInfo->transformStatus = STATUS_TRANSFORMED;
|
||||
entityInfo->transformStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EFC, TRUE) + 1;
|
||||
sub_806CF98(target);
|
||||
|
|
@ -480,7 +481,7 @@ void RestorePPTarget(struct Entity * pokemon,struct Entity * target, s32 param_3
|
|||
{
|
||||
movePtr = &entityInfo->moves[index];
|
||||
movePtr1 = movePtr;
|
||||
if ((movePtr->moveFlags & MOVE_FLAG_EXISTS) != 0) {
|
||||
if ((movePtr->moveFlags & MOVE_FLAG_EXISTS)) {
|
||||
PP = movePtr->PP;
|
||||
basePP = GetMoveBasePP(movePtr1);
|
||||
if (PP < basePP) {
|
||||
|
|
@ -1124,7 +1125,7 @@ void sub_8079F20(struct Entity * pokemon, struct Entity * target, u8 param_3, u8
|
|||
if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags2 & MOVE_FLAG_EXISTS)) {
|
||||
bVar8 = TRUE;
|
||||
moveUnsealed = TRUE;
|
||||
move->moveFlags2 &= 0xfe;
|
||||
move->moveFlags2 &= ~(MOVE_FLAG_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1158,8 +1159,8 @@ void sub_807A0CC(struct Entity * pokemon, struct Entity * target)
|
|||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
move = &entityInfo->moves[index];
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS) != 0) {
|
||||
move->moveFlags2 = move->moveFlags2 & 0xfe;
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
|
||||
move->moveFlags2 &= ~(MOVE_FLAG_EXISTS);
|
||||
}
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
|
|
@ -1506,7 +1507,7 @@ void SendTransformEndMessage(struct Entity * pokemon, struct Entity *target)
|
|||
break;
|
||||
case STATUS_TRANSFORMED:
|
||||
entityInfo->apparentID = sub_8069F54(target, entityInfo->id);
|
||||
target->unk64 = sub_80687D0(entityInfo->apparentID);
|
||||
target->sprite = sub_80687D0(entityInfo->apparentID);
|
||||
uVar3 = sub_806CEBC(target);
|
||||
sub_806CCB4(target,uVar3);
|
||||
SendMessage(target,*gUnknown_80FAB6C);
|
||||
|
|
|
|||
|
|
@ -7,13 +7,12 @@
|
|||
#include "dungeon_music.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "dungeon_util_1.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
|
||||
extern void SetDefaultIQSkills(u8 *param_1, u8 param_2);
|
||||
extern u8 sub_8044B28(void);
|
||||
extern u8 HasRecruitedMon(u32);
|
||||
extern u8 gUnknown_202E038[];
|
||||
extern void sub_8085374();
|
||||
extern void sub_80855E4(void *);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ void sub_8095118(void)
|
|||
struct unkStruct_203B480 *unused;
|
||||
|
||||
MemoryFill8((u8*)gUnknown_203B480,0, 0x20 * sizeof(struct unkStruct_203B480));
|
||||
MemoryFill8((u8*)gUnknown_203B484,0, 0x5c);
|
||||
MemoryFill8((u8*)gUnknown_203B484,0, sizeof(struct unkStruct_203B484));
|
||||
for(index = 0; index < 0x20; index++){
|
||||
|
||||
// NOTE: we use a temp variable here to force the match
|
||||
|
|
@ -124,12 +124,6 @@ bool8 sub_80951BC(struct unkStruct_203B480 *mail)
|
|||
}
|
||||
}
|
||||
|
||||
struct unkStruct_809542C
|
||||
{
|
||||
struct DungeonLocation unk0;
|
||||
u32 unk4;
|
||||
};
|
||||
|
||||
bool8 sub_80951FC(struct unkStruct_203B480 *param_1)
|
||||
{
|
||||
bool8 bVar1 = gUnknown_203B480[1].mailType != 0;
|
||||
|
|
@ -281,9 +275,9 @@ s32 sub_8095400(u32 param_1)
|
|||
return -1;
|
||||
}
|
||||
|
||||
void sub_809542C(struct unkStruct_809542C *param_1)
|
||||
void sub_809542C(struct WonderMailSub *param_1)
|
||||
{
|
||||
u32 uVar4;
|
||||
u32 seed;
|
||||
|
||||
#ifndef NONMATCHING
|
||||
register struct unkStruct_203B480 *preload asm("r2");
|
||||
|
|
@ -295,31 +289,31 @@ void sub_809542C(struct unkStruct_809542C *param_1)
|
|||
|
||||
gUnknown_203B480->mailType = 1;
|
||||
preload = gUnknown_203B480;
|
||||
uVar4 = param_1->unk4;
|
||||
preload->dungeon = param_1->unk0;
|
||||
preload->unk8 = uVar4;
|
||||
seed = param_1->seed;
|
||||
preload->unk4.dungeon = param_1->dungeon;
|
||||
preload->unk4.seed = seed;
|
||||
sub_8094D28(Rand32Bit());
|
||||
gUnknown_203B480->unk10.unk10 = sub_8094E4C();
|
||||
gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum;
|
||||
PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct());
|
||||
CopyStringtoBuffer(gUnknown_203B480->playerName, buffer);
|
||||
gUnknown_203B480->unk24 = sub_8011C34();
|
||||
gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->dungeon.id);
|
||||
gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->unk4.dungeon.id);
|
||||
}
|
||||
|
||||
void sub_8095494(struct unkStruct_809542C *param_1, u8 index)
|
||||
void sub_8095494(struct WonderMailSub *param_1, u8 index)
|
||||
{
|
||||
u32 uVar1;
|
||||
struct DungeonLocation temp;
|
||||
u32 seed;
|
||||
struct DungeonLocation dungeon;
|
||||
struct unkStruct_203B480 *mail;
|
||||
|
||||
mail = gUnknown_203B480;
|
||||
mail += index;
|
||||
|
||||
temp = mail->dungeon;
|
||||
uVar1 = mail->unk8;
|
||||
param_1->unk0 = temp;
|
||||
param_1->unk4 = uVar1;
|
||||
dungeon = mail->unk4.dungeon;
|
||||
seed = mail->unk4.seed;
|
||||
param_1->dungeon = dungeon;
|
||||
param_1->seed = seed;
|
||||
}
|
||||
|
||||
u32 sub_80954B4(void)
|
||||
|
|
@ -346,7 +340,7 @@ u32 sub_80954CC(u8 *a, u32 b)
|
|||
memset(temp, 0, sizeof(struct PokemonStruct));
|
||||
RestoreIntegerBits(&backup, &temp->unk0, 2);
|
||||
RestoreIntegerBits(&backup, &temp->isTeamLeader, 1);
|
||||
RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7);
|
||||
RestoreIntegerBits(&backup, &temp->level, 7);
|
||||
RestoreDungeonLocation(&backup, &temp->dungeonLocation);
|
||||
RestoreIntegerBits(&backup, &temp->speciesNum, 9);
|
||||
xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]);
|
||||
|
|
@ -357,9 +351,9 @@ u32 sub_80954CC(u8 *a, u32 b)
|
|||
RestoreIntegerBits(&backup, &temp->offense.att[1], 8);
|
||||
RestoreIntegerBits(&backup, &temp->offense.def[0], 8);
|
||||
RestoreIntegerBits(&backup, &temp->offense.def[1], 8);
|
||||
RestoreIntegerBits(&backup, &temp->unk1C, 0x18);
|
||||
RestoreIntegerBits(&backup, &temp->currExp, 0x18);
|
||||
RestoreIntegerBits(&backup, &temp->IQSkills, 0x18);
|
||||
RestoreIntegerBits(&backup, &temp->unk24, 4);
|
||||
RestoreIntegerBits(&backup, &temp->tacticIndex, 4);
|
||||
RestoreHeldItem(&backup, &temp->heldItem);
|
||||
RestorePokemonMoves(&backup, temp->moves);
|
||||
RestoreIntegerBits(&backup, temp->name, 0x50);
|
||||
|
|
@ -388,7 +382,7 @@ u32 sub_8095624(u8 *a, u32 b)
|
|||
temp = &gUnknown_203B484->unk4;
|
||||
SaveIntegerBits(&backup, &temp->unk0, 2);
|
||||
SaveIntegerBits(&backup, &temp->isTeamLeader, 1);
|
||||
SaveIntegerBits(&backup, &temp->unkHasNextStage, 7);
|
||||
SaveIntegerBits(&backup, &temp->level, 7);
|
||||
SaveDungeonLocation(&backup, &temp->dungeonLocation);
|
||||
SaveIntegerBits(&backup, &temp->speciesNum, 9);
|
||||
xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]);
|
||||
|
|
@ -399,9 +393,9 @@ u32 sub_8095624(u8 *a, u32 b)
|
|||
SaveIntegerBits(&backup, &temp->offense.att[1], 8);
|
||||
SaveIntegerBits(&backup, &temp->offense.def[0], 8);
|
||||
SaveIntegerBits(&backup, &temp->offense.def[1], 8);
|
||||
SaveIntegerBits(&backup, &temp->unk1C, 0x18);
|
||||
SaveIntegerBits(&backup, &temp->currExp, 0x18);
|
||||
SaveIntegerBits(&backup, &temp->IQSkills, 0x18);
|
||||
SaveIntegerBits(&backup, &temp->unk24, 4);
|
||||
SaveIntegerBits(&backup, &temp->tacticIndex, 4);
|
||||
SaveHeldItem(&backup, &temp->heldItem);
|
||||
SavePokemonMoves(&backup, temp->moves);
|
||||
SaveIntegerBits(&backup, temp->name, 0x50);
|
||||
|
|
@ -420,8 +414,8 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
|
|||
u8 temp;
|
||||
|
||||
RestoreIntegerBits(a, &b->mailType, 4);
|
||||
RestoreDungeonLocation(a, &b->dungeon);
|
||||
RestoreIntegerBits(a, &b->unk8, 0x18);
|
||||
RestoreDungeonLocation(a, &b->unk4.dungeon);
|
||||
RestoreIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
RestoreIntegerBits(a, &b->clientSpecies, 0x9);
|
||||
RestoreIntegerBits(a, &b->unk10.unk10, 0x20);
|
||||
RestoreIntegerBits(a, &b->playerName, 0x50);
|
||||
|
|
@ -445,8 +439,8 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
|
|||
zero = 0;
|
||||
|
||||
SaveIntegerBits(a, &b->mailType, 4);
|
||||
SaveDungeonLocation(a, &b->dungeon);
|
||||
SaveIntegerBits(a, &b->unk8, 0x18);
|
||||
SaveDungeonLocation(a, &b->unk4.dungeon);
|
||||
SaveIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
SaveIntegerBits(a, &b->clientSpecies, 0x9);
|
||||
SaveIntegerBits(a, &b->unk10.unk10, 0x20);
|
||||
SaveIntegerBits(a, &b->playerName, 0x50);
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@
|
|||
#include "dungeon.h"
|
||||
#include "code_80958E8.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "code_8094F88.h"
|
||||
|
||||
extern bool8 sub_809017C(struct DungeonLocation *);
|
||||
extern s16 GetBaseSpecies(s16);
|
||||
extern u8 sub_803C1D0(struct DungeonLocation *, u8);
|
||||
extern bool8 sub_803C0DC(s16);
|
||||
extern void ResetMailboxSlot(u8);
|
||||
|
|
@ -58,7 +58,7 @@ void InitializeMailJobsNews(void)
|
|||
{
|
||||
gUnknown_203B490->unk230[index].dungeon.id = 99;
|
||||
gUnknown_203B490->unk230[index].dungeon.floor = 1;
|
||||
gUnknown_203B490->unk230[index].unk4 = 0;
|
||||
gUnknown_203B490->unk230[index].seed = 0;
|
||||
gUnknown_203B490->unk230[index].unk8 = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -85,17 +85,17 @@ bool8 ValidateWonderMail(struct WonderMail *data)
|
|||
return FALSE;
|
||||
else
|
||||
{
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->dungeon.id) == 0)
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->unk4.dungeon.id) == 0)
|
||||
return FALSE;
|
||||
|
||||
if(data->unk2 > 9)
|
||||
return FALSE;
|
||||
|
||||
if(sub_809095C(data->dungeon.id))
|
||||
if(sub_809095C(data->unk4.dungeon.id))
|
||||
return FALSE;
|
||||
if(data->dungeon.floor >= GetDungeonFloorCount(data->dungeon.id))
|
||||
if(data->unk4.dungeon.floor >= GetDungeonFloorCount(data->unk4.dungeon.id))
|
||||
return FALSE;
|
||||
if(sub_809017C(&data->dungeon))
|
||||
if(sub_809017C(&data->unk4.dungeon))
|
||||
return FALSE;
|
||||
|
||||
if(data->clientSpecies == MONSTER_NONE)
|
||||
|
|
@ -127,7 +127,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
|
|||
return FALSE;
|
||||
|
||||
// Item finding
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon.id, data->targetItem) == 0)
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->unk4.dungeon.id, data->targetItem) == 0)
|
||||
return FALSE;
|
||||
|
||||
if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS)
|
||||
|
|
@ -144,7 +144,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
|
|||
{
|
||||
if(GetFriendAreaUnlockCondition(data->friendAreaReward) != UNLOCK_WONDER_MAIL)
|
||||
return FALSE;
|
||||
if(sub_803C1D0(&data->dungeon, data->missionType) == 0)
|
||||
if(sub_803C1D0(&data->unk4.dungeon, data->missionType) == 0)
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include "code_80958E8.h"
|
||||
#include "team_inventory.h"
|
||||
#include "random.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
struct unkStruct_8096AF8
|
||||
{
|
||||
|
|
@ -41,8 +42,8 @@ void SortPelipperJobs(void)
|
|||
{
|
||||
if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE)
|
||||
{
|
||||
if((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) ||
|
||||
((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.floor)))
|
||||
if((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) ||
|
||||
((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.floor)))
|
||||
{
|
||||
mail = gUnknown_203B490->pelipperBoardJobs[index1];
|
||||
gUnknown_203B490->pelipperBoardJobs[index1] = gUnknown_203B490->pelipperBoardJobs[index2];
|
||||
|
|
@ -71,9 +72,9 @@ void GeneratePelipperJobs(void)
|
|||
mail->mailType = MAIL_TYPE_UNK2;
|
||||
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
|
||||
mail->unk2 = 1;
|
||||
mail->dungeon.id = DUNGEON_UPROAR_FOREST;
|
||||
mail->dungeon.floor = 10;
|
||||
mail->unk8 = Rand32Bit() & 0xffffff;
|
||||
mail->unk4.dungeon.id = DUNGEON_UPROAR_FOREST;
|
||||
mail->unk4.dungeon.floor = 10;
|
||||
mail->unk4.seed = Rand32Bit() & 0xffffff;
|
||||
mail->clientSpecies = MONSTER_WYNAUT;
|
||||
mail->targetSpecies = MONSTER_MANKEY;
|
||||
mail->targetItem = 0;
|
||||
|
|
@ -89,9 +90,9 @@ void GeneratePelipperJobs(void)
|
|||
mail->mailType = MAIL_TYPE_UNK3;
|
||||
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
|
||||
mail->unk2 = 2;
|
||||
mail->dungeon.id = DUNGEON_HOWLING_FOREST;
|
||||
mail->dungeon.floor = 15;
|
||||
mail->unk8 = Rand32Bit() & 0xffffff;
|
||||
mail->unk4.dungeon.id = DUNGEON_HOWLING_FOREST;
|
||||
mail->unk4.dungeon.floor = 15;
|
||||
mail->unk4.seed = Rand32Bit() & 0xffffff;
|
||||
mail->clientSpecies = MONSTER_SMEARGLE;
|
||||
mail->targetSpecies = MONSTER_SMEARGLE;
|
||||
mail->targetItem = 0;
|
||||
|
|
@ -106,9 +107,9 @@ void GeneratePelipperJobs(void)
|
|||
mail->mailType = MAIL_TYPE_UNK4;
|
||||
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
|
||||
mail->unk2 = 3;
|
||||
mail->dungeon.id = DUNGEON_WISH_CAVE;
|
||||
mail->dungeon.floor = 20;
|
||||
mail->unk8 = Rand32Bit() & 0xffffff;
|
||||
mail->unk4.dungeon.id = DUNGEON_WISH_CAVE;
|
||||
mail->unk4.dungeon.floor = 20;
|
||||
mail->unk4.seed = Rand32Bit() & 0xffffff;
|
||||
mail->clientSpecies = MONSTER_MEDICHAM;
|
||||
mail->targetSpecies = MONSTER_MEDICHAM;
|
||||
mail->targetItem = 0;
|
||||
|
|
@ -135,9 +136,9 @@ bool8 IsMailinJobSlot(struct WonderMail *mail)
|
|||
if(jobSlot->mailType != MAIL_TYPE_NONE)
|
||||
if(mail->missionType == jobSlot->missionType)
|
||||
if(mail->unk2 == jobSlot->unk2)
|
||||
if(mail->dungeon.id == jobSlot->dungeon.id)
|
||||
if(mail->dungeon.floor == jobSlot->dungeon.floor)
|
||||
if(mail->unk8 == jobSlot->unk8)
|
||||
if(mail->unk4.dungeon.id == jobSlot->unk4.dungeon.id)
|
||||
if(mail->unk4.dungeon.floor == jobSlot->unk4.dungeon.floor)
|
||||
if(mail->unk4.seed == jobSlot->unk4.seed)
|
||||
if(mail->clientSpecies == jobSlot->clientSpecies)
|
||||
if(mail->targetSpecies == jobSlot->targetSpecies)
|
||||
if(mail->targetItem == jobSlot->targetItem)
|
||||
|
|
@ -156,8 +157,8 @@ bool8 sub_809693C(struct WonderMail *mail)
|
|||
bool8 escortMission;
|
||||
s32 index;
|
||||
|
||||
dungeonIndex = mail->dungeon.id;
|
||||
floor = mail->dungeon.floor;
|
||||
dungeonIndex = mail->unk4.dungeon.id;
|
||||
floor = mail->unk4.dungeon.floor;
|
||||
escortMission = FALSE;
|
||||
if (!IsValidWonderMail(mail)) {
|
||||
return FALSE;
|
||||
|
|
@ -203,7 +204,7 @@ s32 CountJobsinDungeon(u8 dungeon)
|
|||
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
|
||||
{
|
||||
mail = GetJobSlotInfo(index);
|
||||
if ((mail->dungeon.id == dungeon) &&
|
||||
if ((mail->unk4.dungeon.id == dungeon) &&
|
||||
(((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) {
|
||||
count++;
|
||||
}
|
||||
|
|
@ -221,7 +222,7 @@ bool8 sub_8096A08(u8 dungeon, u8 *param_2)
|
|||
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
|
||||
{
|
||||
mail = GetJobSlotInfo(index);
|
||||
if(mail->dungeon.id == dungeon)
|
||||
if(mail->unk4.dungeon.id == dungeon)
|
||||
if(mail->mailType == MAIL_TYPE_TAKEN_JOB)
|
||||
if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT)
|
||||
{
|
||||
|
|
@ -280,7 +281,7 @@ void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon)
|
|||
param_1->unk0 = FALSE;
|
||||
param_1->clientSpecies = jobSlot->clientSpecies;
|
||||
param_1->targetSpecies = MONSTER_NONE;
|
||||
if (jobSlot->dungeon.id == dungeon) {
|
||||
if (jobSlot->unk4.dungeon.id == dungeon) {
|
||||
switch(jobSlot->missionType) {
|
||||
case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:
|
||||
if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) {
|
||||
|
|
@ -321,7 +322,7 @@ s16 sub_8096B98(u8 dungeon)
|
|||
mail = GetJobSlotInfo(index);
|
||||
if(mail->mailType == MAIL_TYPE_TAKEN_JOB)
|
||||
if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT)
|
||||
if(mail->dungeon.id == dungeon)
|
||||
if(mail->unk4.dungeon.id == dungeon)
|
||||
return mail->targetSpecies;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -367,7 +368,7 @@ bool8 sub_8096C08(u8 *jobIndex)
|
|||
void ResetJobSlot(u8 index)
|
||||
{
|
||||
gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE;
|
||||
gUnknown_203B490->jobSlots[index].dungeon.id = 99;
|
||||
gUnknown_203B490->jobSlots[index].dungeon.floor = 0;
|
||||
gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99;
|
||||
gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0;
|
||||
gUnknown_203B490->jobSlots[index].rewardType = MONEY1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,8 +72,8 @@ bool8 GenerateMailJobDungeonInfo(struct WonderMail *mail)
|
|||
}
|
||||
|
||||
if (flag) {
|
||||
mail->dungeon.id = dungeon;
|
||||
mail->dungeon.floor = floor;
|
||||
mail->unk4.dungeon.id = dungeon;
|
||||
mail->unk4.dungeon.floor = floor;
|
||||
return TRUE;
|
||||
}
|
||||
floor++;
|
||||
|
|
@ -96,11 +96,11 @@ bool8 sub_8095E38(struct WonderMail *mail, u8 dungeon, u32 floor, u8 param_4)
|
|||
{
|
||||
if (mail->mailType != MAIL_TYPE_NONE) {
|
||||
if ((mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) && (param_4 == 1)) {
|
||||
if (mail->dungeon.id == dungeon) {
|
||||
if (mail->unk4.dungeon.id == dungeon) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if ((mail->dungeon.id == dungeon) && (mail->dungeon.floor == floor)) {
|
||||
else if ((mail->unk4.dungeon.id == dungeon) && (mail->unk4.dungeon.floor == floor)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,9 +49,9 @@ bool8 sub_8096F50(struct WonderMail *mail)
|
|||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
temp = &gUnknown_203B490->unk230[index];
|
||||
if(temp->dungeon.id == mail->dungeon.id)
|
||||
if(temp->dungeon.floor == mail->dungeon.floor)
|
||||
if(temp->unk4 == mail->unk8)
|
||||
if(temp->dungeon.id == mail->unk4.dungeon.id)
|
||||
if(temp->dungeon.floor == mail->unk4.dungeon.floor)
|
||||
if(temp->seed == mail->unk4.seed)
|
||||
if(temp->unk8 == temp2)
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -96,7 +96,7 @@ u32 RestoreMailInfo(u8 *r0, u32 size)
|
|||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18);
|
||||
RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
|
|
@ -140,7 +140,7 @@ u32 SaveMailInfo(u8 *r0, u32 size)
|
|||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18);
|
||||
SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
|
|
@ -158,8 +158,8 @@ void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
|
|||
RestoreIntegerBits(a, &b->rewardType, 4);
|
||||
RestoreIntegerBits(a, &b->itemReward, 8);
|
||||
RestoreIntegerBits(a, &b->friendAreaReward, 6);
|
||||
RestoreIntegerBits(a, &b->unk8, 0x18);
|
||||
RestoreDungeonLocation(a, &b->dungeon);
|
||||
RestoreIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
RestoreDungeonLocation(a, &b->unk4.dungeon);
|
||||
}
|
||||
|
||||
void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
|
||||
|
|
@ -173,8 +173,8 @@ void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
|
|||
SaveIntegerBits(a, &b->rewardType, 4);
|
||||
SaveIntegerBits(a, &b->itemReward, 8);
|
||||
SaveIntegerBits(a, &b->friendAreaReward, 6);
|
||||
SaveIntegerBits(a, &b->unk8, 0x18);
|
||||
SaveDungeonLocation(a, &b->dungeon);
|
||||
SaveIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
SaveDungeonLocation(a, &b->unk4.dungeon);
|
||||
}
|
||||
|
||||
void sub_80972F4(void)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include "global.h"
|
||||
#include "code_80A26CC.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern u8 sub_80973F4(s16);
|
||||
extern u8 sub_8097384(s16);
|
||||
s16 sub_80A26B8(s16);
|
||||
|
|
@ -15,6 +15,36 @@ extern const u8 *gUnknown_8117000[];
|
|||
|
||||
extern void sub_809AC18(s32, s32);
|
||||
extern void sub_809ABB4(s32, s32);
|
||||
extern void sub_809AB4C(s32, s32);
|
||||
|
||||
s16 sub_80A8BBC(s16);
|
||||
|
||||
void sub_80A2500(s32 param_1, s16 *param_2)
|
||||
{
|
||||
s16 temp;
|
||||
if (*param_2 == 1) {
|
||||
temp = param_1;
|
||||
sub_809AB4C(temp, sub_80A8BBC(param_2[1]));
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80A252C(s32 param_1, s16 *param_2)
|
||||
{
|
||||
s16 temp;
|
||||
if (*param_2 == 1) {
|
||||
temp = param_1;
|
||||
sub_809ABB4(temp, sub_80A8BBC(param_2[1]));
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80A2558(s32 param_1, s16 *param_2)
|
||||
{
|
||||
s16 temp;
|
||||
if (*param_2 == 1) {
|
||||
temp = param_1;
|
||||
sub_809AC18(temp, sub_80A8BBC(param_2[1]));
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80A2584(s16 r0, s16 r1)
|
||||
{
|
||||
|
|
@ -32,29 +62,29 @@ void sub_80A2598(s16 r0, s16 r1)
|
|||
|
||||
u32 sub_80A25AC(u16 param_1)
|
||||
{
|
||||
if (sub_8098F88() != 0) {
|
||||
return param_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (param_1 == 0x32) {
|
||||
return 0x32;
|
||||
}
|
||||
else if (!sub_80023E4(0xc)) {
|
||||
return 999;
|
||||
}
|
||||
else if (sub_80023E4(0xd)) {
|
||||
return 0x13;
|
||||
}
|
||||
else if (param_1 != 1) {
|
||||
if (sub_8098F88() != 0) {
|
||||
return param_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_8001658(0,0x28);
|
||||
return 1;
|
||||
if (param_1 == 0x32) {
|
||||
return 0x32;
|
||||
}
|
||||
else if (!sub_80023E4(0xc)) {
|
||||
return 999;
|
||||
}
|
||||
else if (sub_80023E4(0xd)) {
|
||||
return 0x13;
|
||||
}
|
||||
else if (param_1 != 1) {
|
||||
return param_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_8001658(0,0x28);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct unkStruct_80A2608 *sub_80A2608(s16 index)
|
||||
|
|
@ -98,19 +128,19 @@ s32 sub_80A2668(u32 r0)
|
|||
|
||||
u32 sub_80A2688(u8 r0)
|
||||
{
|
||||
u32 uVar1;
|
||||
|
||||
uVar1 = r0 - 0x4B;
|
||||
u32 uVar1;
|
||||
|
||||
// u8 cast is needed for only this compare
|
||||
if ((u8)uVar1 < 0x17)
|
||||
return uVar1;
|
||||
else if(r0 == 0x2F)
|
||||
return 0x17;
|
||||
else if (r0 == 0x30)
|
||||
return 0x18;
|
||||
else
|
||||
return -1;
|
||||
uVar1 = r0 - 0x4B;
|
||||
|
||||
// u8 cast is needed for only this compare
|
||||
if ((u8)uVar1 < 0x17)
|
||||
return uVar1;
|
||||
else if(r0 == 0x2F)
|
||||
return 0x17;
|
||||
else if (r0 == 0x30)
|
||||
return 0x18;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
s16 sub_80A26B8(s16 r0)
|
||||
|
|
|
|||
|
|
@ -187,4 +187,4 @@ void sub_803A3BC(void)
|
|||
|
||||
sp_0x80 = r9;
|
||||
WriteSavetoPak(&sp_0x80, 1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ void sub_803AD88(void)
|
|||
sUnknown_203B3F8->unk70 = 3;
|
||||
sUnknown_203B3F8->unk68 = 1;
|
||||
sUnknown_203B3F8->unk6C = 100;
|
||||
sUnknown_203B3F8->unk64 = sUnknown_203B3F8->pokemon->unkHasNextStage;
|
||||
sUnknown_203B3F8->unk64 = sUnknown_203B3F8->pokemon->level;
|
||||
sUnknown_203B3F8->unk74 = 3;
|
||||
sUnknown_203B3F8->unk78 = &sUnknown_203B3F8->unkE0[3];
|
||||
sUnknown_203B3F8->unk7C = 44;
|
||||
|
|
@ -256,7 +256,7 @@ void sub_803AFE8(void)
|
|||
default:
|
||||
break;
|
||||
case 3:
|
||||
sUnknown_203B3F8->pokemon->unkHasNextStage = sUnknown_203B3F8->unk60;
|
||||
sUnknown_203B3F8->pokemon->level = sUnknown_203B3F8->unk60;
|
||||
// Fallthrough is needed to match
|
||||
case 2:
|
||||
sub_803ACD0(2);
|
||||
|
|
@ -276,4 +276,4 @@ void sub_803B034(void)
|
|||
sub_803ACD0(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,66 @@ extern u8 *gUnknown_8108084[];
|
|||
|
||||
s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c
|
||||
|
||||
|
||||
bool8 sub_8090820(u16 moveID)
|
||||
{
|
||||
struct PokemonStruct *pokeStruct;
|
||||
struct Move *move;
|
||||
s32 moveIndex;
|
||||
s32 index;
|
||||
s32 one;
|
||||
|
||||
for(index = 0; index < 0x19d; index++)
|
||||
{
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[index];
|
||||
one = 1;
|
||||
if (pokeStruct->unk0 & 1)
|
||||
{
|
||||
if(pokeStruct->unk0 >> 1 & one){
|
||||
for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
|
||||
{
|
||||
move = &pokeStruct->moves[moveIndex];
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->id == moveID)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8090888(u8 *param_1, u8 *param_2)
|
||||
{
|
||||
s32 iVar3;
|
||||
|
||||
iVar3 = 0;
|
||||
|
||||
if(*param_1 != 0)
|
||||
{
|
||||
do {
|
||||
if (*param_1 == 0xA) {
|
||||
iVar3++;
|
||||
}
|
||||
param_1++;
|
||||
} while (*param_1 != 0);
|
||||
}
|
||||
|
||||
while (iVar3 % 3) {
|
||||
*param_1 = 0xA;
|
||||
param_1++;
|
||||
iVar3++;
|
||||
}
|
||||
|
||||
while (*param_2 != 0) {
|
||||
*param_1 = *param_2;
|
||||
param_1++;
|
||||
param_2++;
|
||||
}
|
||||
|
||||
*param_1 = 0;
|
||||
}
|
||||
|
||||
u32 sub_80908D8(struct DungeonLocation *dungeon)
|
||||
{
|
||||
if ((dungeon->id < DUNGEON_OUT_ON_RESCUE) && (dungeon->floor < gDungeonFloorCount[dungeon->id])) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include "dungeon_ai_targeting.h"
|
||||
#include "dungeon_leader.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
|
||||
bool8 TargetLeader(struct Entity *pokemon)
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@ struct unkStruct_202EE10
|
|||
|
||||
extern struct unkStruct_202EE10 gUnknown_202EE10;
|
||||
|
||||
EWRAM_DATA_2 u32 gUnknown_203B458 = {0};
|
||||
|
||||
extern u8 *gUnknown_80FE6F4[];
|
||||
extern u8 gUnknown_810AC60; // 0xC
|
||||
extern u8 gUnknown_810AC62; // 0xC
|
||||
|
|
@ -355,9 +353,3 @@ void UpdateDungeonMusic(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sub_808408C(u32 param_1)
|
||||
{
|
||||
gUnknown_203B458 = (1 | param_1) & 0xffffff;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,30 @@
|
|||
#include "dungeon_random.h"
|
||||
|
||||
EWRAM_DATA_2 u32 gDungeonRngState = {0};
|
||||
EWRAM_DATA_2 u32 gUnknown_203B458 = {0};
|
||||
|
||||
void sub_808408C(u32 param_1)
|
||||
{
|
||||
gUnknown_203B458 = (1 | param_1) & 0xffffff;
|
||||
}
|
||||
|
||||
u32 sub_80840A4(void)
|
||||
{
|
||||
u32 r0;
|
||||
u32 r1;
|
||||
|
||||
r1 = gUnknown_203B458 * 0x5d588b65;
|
||||
r1++;
|
||||
r0 = r1 >> 16;
|
||||
r1 *= 0x5d588b65;
|
||||
r1++;
|
||||
gUnknown_203B458 = r1;
|
||||
r1 &= 0xffff0000;
|
||||
r0 |= r1;
|
||||
r0 &= 0x0ffffff;
|
||||
r0 |= 1;
|
||||
return r0;
|
||||
}
|
||||
|
||||
void InitDungeonRNG(u32 value)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
#include "friend_area.h"
|
||||
#include "team_inventory.h"
|
||||
#include "code_8097670.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
|
||||
extern u8 gUnknown_2000A88[0x400];
|
||||
|
||||
|
|
@ -51,7 +53,6 @@ extern u32 sub_8001658(u32, s32);
|
|||
extern void sub_80018D8(u32, u32, u32);
|
||||
extern void sub_809733C(u32, u32);
|
||||
extern void sub_80973A8(u32, u32);
|
||||
extern u8 HasRecruitedMon(u32);
|
||||
extern void sub_800199C(u32, s32, u32, s32);
|
||||
extern s32 sub_8001784(u32, s32, u16);
|
||||
|
||||
|
|
|
|||
|
|
@ -464,7 +464,7 @@ NAKED void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3)
|
|||
}
|
||||
#endif
|
||||
|
||||
void sub_809249C(u8 friendArea, u8 clear)
|
||||
void sub_809249C(u8 friendArea, bool8 clear)
|
||||
{
|
||||
s32 index;
|
||||
bool32 dungeonCheck;
|
||||
|
|
@ -515,11 +515,11 @@ void sub_8092558(u8 *buffer, u8 index)
|
|||
sprintfStatic(buffer, &gUnknown_81098A4, gFriendAreaNames[index]);
|
||||
}
|
||||
|
||||
void sub_8092578(u8 *buffer, u8 index, u8 r2)
|
||||
void sub_8092578(u8 *buffer, u8 index, bool8 printPrice)
|
||||
{
|
||||
// I think this is when we buy the friend area from wigglytuff
|
||||
u8 priceBuffer[0x14];
|
||||
if(r2)
|
||||
if(printPrice)
|
||||
{
|
||||
sub_8090FEC(gFriendAreaSettings[index].price, priceBuffer, 1);
|
||||
sprintfStatic(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, priceBuffer);
|
||||
|
|
@ -558,7 +558,7 @@ bool8 HasAllFriendAreas(void)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4)
|
||||
void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, bool8 checkLeader, bool8 checkDungeon)
|
||||
{
|
||||
struct PokemonStruct *pokeStruct;
|
||||
s32 counter;
|
||||
|
|
@ -574,7 +574,7 @@ void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u
|
|||
param_2->unk8 = iVar4;
|
||||
|
||||
param_2->hasFriendArea = gFriendAreas[counter];
|
||||
if (param_2->hasFriendArea != 0) {
|
||||
if (param_2->hasFriendArea) {
|
||||
param_2->unk2 = 0;
|
||||
param_2->numPokemon = gFriendAreaSettings[counter].num_pokemon;
|
||||
|
||||
|
|
@ -582,8 +582,8 @@ void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u
|
|||
{
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[iVar4];
|
||||
if (((((u8)pokeStruct->unk0 & 1) != 0) &&
|
||||
((param_3 == 0 || (!pokeStruct->isTeamLeader)))) &&
|
||||
((param_4 == 0 || ((pokeStruct->dungeonLocation).id != DUNGEON_JOIN_LOCATION_PARTNER)))) {
|
||||
((checkLeader == 0 || (!pokeStruct->isTeamLeader)))) &&
|
||||
((checkDungeon == 0 || ((pokeStruct->dungeonLocation).id != DUNGEON_JOIN_LOCATION_PARTNER)))) {
|
||||
param_2->unk2++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "global.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "memory.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
|
|
@ -12,19 +13,23 @@
|
|||
#include "code_80130A8.h"
|
||||
#include "code_801EE10_1.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "event_flag.h"
|
||||
#include "moves.h"
|
||||
|
||||
extern struct unkStruct_203B2BC *gUnknown_203B2BC;
|
||||
|
||||
extern void sub_8027D40(u32, struct BulkItem *);
|
||||
extern u8 *gUnknown_80D4920[];
|
||||
extern u8 *gUnknown_80D4928[];
|
||||
extern u8 *gUnknown_80D4970[];
|
||||
|
||||
extern void sub_8024458(s16, u32);
|
||||
extern void sub_801BEEC(s16);
|
||||
extern void GetLinkedSequence(u32, struct Move *, u16*);
|
||||
extern void sub_801F808(u16*);
|
||||
extern void sub_8027794();
|
||||
extern void sub_801F1B0(u32, u32);
|
||||
extern void unk_CopyMoves4To8(struct Move *, struct Move *);
|
||||
extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32);
|
||||
|
||||
void sub_8027D40(u32, struct BulkItem *heldItem);
|
||||
void sub_8027794(void);
|
||||
extern void SetFriendAreaActionMenuState(u32);
|
||||
extern void sub_802719C();
|
||||
extern void sub_8027274();
|
||||
|
|
@ -42,6 +47,34 @@ extern void sub_8027CA0();
|
|||
extern void sub_8027D00();
|
||||
extern void CreateFriendActionMenu();
|
||||
extern void sub_80276A8();
|
||||
bool8 sub_8027D9C(struct PokemonStruct *pokeStruct);
|
||||
extern u8 sub_8027DCC(struct PokemonStruct *);
|
||||
extern u32 sub_801EF38(u8 r0);
|
||||
extern void sub_801F214();
|
||||
|
||||
extern void SetFriendAreaActionMenuState(u32);
|
||||
extern void PlaySound(u32);
|
||||
extern void nullsub_104();
|
||||
extern void sub_8099690(u32);
|
||||
|
||||
extern void sub_808D31C(struct PokemonStruct *);
|
||||
extern struct PokemonStruct *sub_808D3F8(void);
|
||||
extern struct PokemonStruct *sub_808D3BC(void);
|
||||
extern u32 sub_801F890(void);
|
||||
extern void sub_801F8D0(void);
|
||||
extern u8 gUnknown_202DE58[];
|
||||
extern u32 sub_801F194(void);
|
||||
extern u32 sub_801BF48(void);
|
||||
extern void sub_801BF98(void);
|
||||
extern u32 sub_80244E4(void);
|
||||
extern void sub_802453C(void);
|
||||
extern bool8 sub_808D750(s16 index_);
|
||||
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
|
||||
extern void sub_808ED00(void);
|
||||
|
||||
u32 sub_8027E18(struct PokemonStruct *);
|
||||
u8 sub_8027E4C(struct PokemonStruct *r0);
|
||||
void sub_8027EB8(void);
|
||||
|
||||
const struct UnkTextStruct2 gUnknown_80DD6EC =
|
||||
{
|
||||
|
|
@ -116,6 +149,18 @@ ALIGNED(4) const u8 gUnknown_80DD8A0[] = _(
|
|||
ALIGNED(4) const u8 gUnknown_80DD8D0[] = _(
|
||||
"{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n{CENTER_ALIGN}sent to storage.");
|
||||
|
||||
ALIGNED(4) const u8 gFriendActionStandby[] = "Stand By";
|
||||
ALIGNED(4) const u8 gFriendActionMakeLeader[] = "Make Leader";
|
||||
ALIGNED(4) const u8 gFriendActionJoinTeam[] = "Join Team";
|
||||
ALIGNED(4) const u8 gFriendActionSayFarewell[] = "Say Farewell";
|
||||
ALIGNED(4) const u8 gFriendActionGive[] = "Give";
|
||||
ALIGNED(4) const u8 gFriendActionTake[] = "Take";
|
||||
ALIGNED(4) const u8 gFriendActionSummary[] = "Summary";
|
||||
ALIGNED(4) const u8 gFriendActionMoves[] = "Moves";
|
||||
ALIGNED(4) const u8 gFriendActionCheckIQ[] = "Check IQ";
|
||||
|
||||
ALIGNED(4) const u8 gUnknown_80DD958[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} ");
|
||||
static const u8 filler[] = "pksdir0";
|
||||
|
||||
u32 sub_8027074(void)
|
||||
{
|
||||
|
|
@ -132,25 +177,25 @@ u32 sub_80270A4(void)
|
|||
{
|
||||
switch(gUnknown_203B2BC->state) {
|
||||
case FRIEND_AREA_ACTION_MENU_INIT:
|
||||
SetFriendAreaActionMenuState(1);
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN_2:
|
||||
sub_80277FC();
|
||||
break;
|
||||
case 3:
|
||||
sub_80278B4();
|
||||
break;
|
||||
case 4:
|
||||
case FRIEND_AREA_ACTION_MENU_SUMMARY:
|
||||
sub_8027A40();
|
||||
break;
|
||||
case 5:
|
||||
case FRIEND_AREA_ACTION_MENU_CHECK_IQ:
|
||||
sub_8027A5C();
|
||||
break;
|
||||
case 8:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT:
|
||||
sub_8027A78();
|
||||
break;
|
||||
case 9:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM:
|
||||
sub_8027AE4();
|
||||
break;
|
||||
case 10:
|
||||
|
|
@ -232,10 +277,10 @@ void sub_8027274(void)
|
|||
case FRIEND_AREA_ACTION_MENU_INIT:
|
||||
case FRIEND_AREA_ACTION_MENU_EXIT:
|
||||
break;
|
||||
case 1:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN:
|
||||
sub_8023868(1,0,0,7);
|
||||
break;
|
||||
case 2:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN_2:
|
||||
sub_8023B7C(1);
|
||||
break;
|
||||
case 3:
|
||||
|
|
@ -243,10 +288,10 @@ void sub_8027274(void)
|
|||
sub_8023DA4();
|
||||
sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,gUnknown_203B2BC->unk16C,gUnknown_203B2BC->menuAction1,2);
|
||||
break;
|
||||
case 4:
|
||||
case FRIEND_AREA_ACTION_MENU_SUMMARY:
|
||||
sub_8024458(gUnknown_203B2BC->targetPoke,2);
|
||||
break;
|
||||
case 5:
|
||||
case FRIEND_AREA_ACTION_MENU_CHECK_IQ:
|
||||
sub_801BEEC(gUnknown_203B2BC->targetPoke);
|
||||
break;
|
||||
case 10:
|
||||
|
|
@ -270,11 +315,11 @@ void sub_8027274(void)
|
|||
case 0xf:
|
||||
sub_801F1B0(1,0);
|
||||
break;
|
||||
case 8:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT:
|
||||
sub_8027794();
|
||||
sub_8014248(gFriendAreaActionSayFarewellPrompt,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101);
|
||||
break;
|
||||
case 9:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM:
|
||||
sub_8027794();
|
||||
sub_8014248(gFriendAreaActionSayFarewellConfirm,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101);
|
||||
break;
|
||||
|
|
@ -283,16 +328,593 @@ void sub_8027274(void)
|
|||
sub_801F808(gUnknown_203B2BC->moveIDs);
|
||||
break;
|
||||
case 6:
|
||||
gUnknown_203B2BC->fallbackState = 2;
|
||||
gUnknown_203B2BC->fallbackState = FRIEND_AREA_ACTION_MENU_MAIN_2;
|
||||
// The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was
|
||||
// returned to the Toolbox
|
||||
sub_80141B4(gUnknown_80DD8A0,0,0,0x101);
|
||||
break;
|
||||
case 7:
|
||||
gUnknown_203B2BC->fallbackState = 2;
|
||||
gUnknown_203B2BC->fallbackState = FRIEND_AREA_ACTION_MENU_MAIN_2;
|
||||
// The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was
|
||||
// returned to storage
|
||||
sub_80141B4(gUnknown_80DD8D0,0,0,0x101);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CreateFriendActionMenu(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
loopMax = 0;
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
|
||||
if((pokeStruct->unk0 >> 1) % 2)
|
||||
{
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionStandby;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_STANDBY;
|
||||
if(!sub_8027D9C(pokeStruct))
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
if(sub_80023E4(8) && !pokeStruct->isTeamLeader)
|
||||
{
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionMakeLeader;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER;
|
||||
loopMax += 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionJoinTeam;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM;
|
||||
if(!sub_808D750(gUnknown_203B2BC->targetPoke))
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionSayFarewell;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL;
|
||||
if(!sub_8027DCC(pokeStruct))
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
}
|
||||
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_GIVE;
|
||||
if(GetNumberOfFilledInventorySlots() == 0)
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionTake;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_TAKE;
|
||||
if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE || gUnknown_203B2BC->item2.id == ITEM_NOTHING)
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionSummary;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionMoves;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_MOVES;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionCheckIQ;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = 0;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE;
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction1)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
gUnknown_203B2BC->menuAction1 = gUnknown_203B2BC->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80276A8(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
|
||||
loopMax = 0;
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_GIVE;
|
||||
if (GetNumberOfFilledInventorySlots() == 0) {
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4970;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_INFO;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = 0;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE;
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction2)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
gUnknown_203B2BC->menuAction2 = gUnknown_203B2BC->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027794(void)
|
||||
{
|
||||
s32 loopMax = 0;
|
||||
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4920;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_YES;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4928;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NO;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = NULL;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE;
|
||||
}
|
||||
|
||||
void sub_80277FC(void)
|
||||
{
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
switch(sub_8023A94(TRUE)) {
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
case 3:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(3);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(4);
|
||||
break;
|
||||
case 2:
|
||||
sub_8023C60();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80278B4(void)
|
||||
{
|
||||
struct PokemonStruct *playerStruct;
|
||||
struct PokemonStruct *pokeStruct1;
|
||||
struct PokemonStruct *pokeStruct2;
|
||||
u32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_8023A94(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != FRIEND_AREA_ACTION_MENU_ACTION_NONE)) {
|
||||
gUnknown_203B2BC->menuAction1 = menuAction;
|
||||
}
|
||||
switch(menuAction) {
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM:
|
||||
if (sub_808D750(gUnknown_203B2BC->targetPoke)) {
|
||||
#ifdef NONMATCHING
|
||||
pokeStruct1 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
#else
|
||||
register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]);
|
||||
struct PokemonStruct* p = gRecruitedPokemonRef->pokemon;
|
||||
size_t addr = offset + (size_t)p;
|
||||
pokeStruct1 = (struct PokemonStruct*)addr;
|
||||
#endif
|
||||
pokeStruct1->unk0 |= FLAG_ON_TEAM;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_STANDBY:
|
||||
gUnknown_203B2BC->pokeStruct->unk0 &= ~(FLAG_ON_TEAM);
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER:
|
||||
pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
playerStruct = GetPlayerPokemonStruct();
|
||||
if (!pokeStruct2->isTeamLeader) {
|
||||
playerStruct->isTeamLeader = FALSE;
|
||||
pokeStruct2->isTeamLeader = TRUE;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_MOVES:
|
||||
SetFriendAreaActionMenuState(0xe);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_GIVE:
|
||||
SetFriendAreaActionMenuState(10);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_TAKE:
|
||||
PlaySound(0x14d);
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SUMMARY);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_CHECK_IQ);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027A40(void)
|
||||
{
|
||||
switch(sub_80244E4())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802453C();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027A5C(void)
|
||||
{
|
||||
switch(sub_801BF48())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801BF98();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool8 sub_8027A78_sub(void) {
|
||||
if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8027A78(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
if(sub_80144A4(&menuAction) == 0)
|
||||
{
|
||||
switch(menuAction)
|
||||
{
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NO:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_YES:
|
||||
if (sub_8027A78_sub())
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM);
|
||||
else
|
||||
{
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027AE4(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
if (sub_80144A4(&menuAction) == 0) {
|
||||
switch(menuAction)
|
||||
{
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NO:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_YES:
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027B28(void)
|
||||
{
|
||||
switch(sub_801A6E8(TRUE))
|
||||
{
|
||||
case 3:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
SetFriendAreaActionMenuState(0xc);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case 2:
|
||||
sub_801A928();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027BD8(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_801A6E8(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != FRIEND_AREA_ACTION_MENU_ACTION_NONE)) {
|
||||
gUnknown_203B2BC->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_GIVE:
|
||||
PlaySound(0x14d);
|
||||
ShiftItemsDownFrom(gUnknown_203B2BC->id);
|
||||
FillInventoryGaps();
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive);
|
||||
sub_801A928();
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_INFO:
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
SetFriendAreaActionMenuState(0xb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027C84()
|
||||
{
|
||||
switch(sub_801B410())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801B450();
|
||||
SetFriendAreaActionMenuState(0xB);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027CA0(void)
|
||||
{
|
||||
switch(sub_801EF38(1))
|
||||
{
|
||||
case 3:
|
||||
case 4:
|
||||
gUnknown_203B2BC->moveIndex = sub_801F194();
|
||||
gUnknown_203B2BC->moveID = gUnknown_203B2BC->moves[gUnknown_203B2BC->moveIndex].id;
|
||||
SetFriendAreaActionMenuState(0x10);
|
||||
break;
|
||||
case 2:
|
||||
sub_801F214();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D00(void)
|
||||
{
|
||||
switch(sub_801F890())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801F8D0();
|
||||
SetFriendAreaActionMenuState(0xF);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FriendAreaActionMenu_GotoFallbackState(void)
|
||||
{
|
||||
s32 temp;
|
||||
if(sub_80144A4(&temp) == 0)
|
||||
{
|
||||
SetFriendAreaActionMenuState(gUnknown_203B2BC->fallbackState);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D40(u32 r0, struct BulkItem *heldItem)
|
||||
{
|
||||
|
||||
struct Item slot;
|
||||
struct unkStruct_8090F58 a3;
|
||||
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
HeldItemToSlot(&slot, heldItem);
|
||||
a3.unk0 = 0;
|
||||
a3.unk4 = 0;
|
||||
a3.unk8 = 1;
|
||||
slot.flags = ITEM_FLAG_EXISTS;
|
||||
sub_8090E14(gUnknown_202DE58, &slot, &a3);
|
||||
xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
|
||||
bool8 sub_8027D9C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(!sub_80023E4(8))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8027DCC(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(sub_808D3BC() != pokeStruct)
|
||||
if(sub_808D3F8() != pokeStruct)
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(sub_80023E4(8))
|
||||
goto check;
|
||||
}
|
||||
else
|
||||
{
|
||||
check:
|
||||
if(sub_8027E18(pokeStruct) != 3)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u32 sub_8027E18(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(pokeStruct->heldItem.id == ITEM_NOTHING)
|
||||
return 0;
|
||||
else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
|
||||
return 1;
|
||||
else if(sub_8027E4C(pokeStruct))
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
bool8 sub_8027E4C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(!IsNotMoneyOrUsedTMItem(pokeStruct->heldItem.id))
|
||||
return FALSE;
|
||||
else
|
||||
{
|
||||
if(IsThrowableItem(pokeStruct->heldItem.id))
|
||||
{
|
||||
if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] + pokeStruct->heldItem.quantity > 0x3e7)
|
||||
return FALSE;
|
||||
}
|
||||
else if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] > 0x3e6)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8027EB8(void)
|
||||
{
|
||||
switch(sub_8027E18(gUnknown_203B2BC->pokeStruct))
|
||||
{
|
||||
case 1:
|
||||
PlaySound(0x14d);
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(6);
|
||||
break;
|
||||
case 2:
|
||||
PlaySound(0x14d);
|
||||
if(IsThrowableItem(gUnknown_203B2BC->item2.id))
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += gUnknown_203B2BC->item2.quantity;
|
||||
else
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += 1;
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(7);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,551 +0,0 @@
|
|||
#include "global.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "memory.h"
|
||||
#include "text2.h"
|
||||
#include "item.h"
|
||||
#include "team_inventory.h"
|
||||
#include "pokemon.h"
|
||||
#include "friend_area_action_menu.h"
|
||||
#include "menu_input.h"
|
||||
#include "kecleon_bros.h"
|
||||
#include "code_80130A8.h"
|
||||
#include "code_801EE10_1.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "code_80118A4.h"
|
||||
|
||||
extern struct unkStruct_203B2BC *gUnknown_203B2BC;
|
||||
extern struct TeamInventory *gTeamInventoryRef;
|
||||
|
||||
extern u32 sub_801EF38(u8 r0);
|
||||
extern void sub_801F214();
|
||||
|
||||
extern void SetFriendAreaActionMenuState(u32);
|
||||
extern void nullsub_104();
|
||||
extern void sub_8099690(u32);
|
||||
|
||||
extern void sub_8027EB8();
|
||||
extern void sub_808D31C(struct PokemonStruct *);
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern struct PokemonStruct *sub_808D3F8(void);
|
||||
extern struct PokemonStruct *sub_808D3BC(void);
|
||||
extern u32 sub_801F890(void);
|
||||
extern void sub_801F8D0(void);
|
||||
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);
|
||||
|
||||
extern bool8 sub_808D750(s16 index_);
|
||||
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
|
||||
extern void sub_808ED00();
|
||||
|
||||
ALIGNED(4) const u8 gFriendActionStandby[] = "Stand By";
|
||||
ALIGNED(4) const u8 gFriendActionMakeLeader[] = "Make Leader";
|
||||
ALIGNED(4) const u8 gFriendActionJoinTeam[] = "Join Team";
|
||||
ALIGNED(4) const u8 gFriendActionSayFarewell[] = "Say Farewell";
|
||||
ALIGNED(4) const u8 gFriendActionGive[] = "Give";
|
||||
ALIGNED(4) const u8 gFriendActionTake[] = "Take";
|
||||
ALIGNED(4) const u8 gFriendActionSummary[] = "Summary";
|
||||
ALIGNED(4) const u8 gFriendActionMoves[] = "Moves";
|
||||
ALIGNED(4) const u8 gFriendActionCheckIQ[] = "Check IQ";
|
||||
|
||||
ALIGNED(4) const u8 gUnknown_80DD958[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} ");
|
||||
static const u8 filler[] = "pksdir0";
|
||||
|
||||
|
||||
extern u8 *gUnknown_80D4920[];
|
||||
extern u8 *gUnknown_80D4928[];
|
||||
extern u8 *gUnknown_80D4970[];
|
||||
|
||||
void sub_80276A8(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
|
||||
loopMax = 0;
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 10;
|
||||
if (GetNumberOfFilledInventorySlots() == 0) {
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4970;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 4;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = 0;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 1;
|
||||
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction2)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
gUnknown_203B2BC->menuAction2 = gUnknown_203B2BC->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027794(void)
|
||||
{
|
||||
s32 loopMax = 0;
|
||||
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4920;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 0x2;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4928;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 3;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = NULL;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 1;
|
||||
}
|
||||
|
||||
void sub_80277FC(void)
|
||||
{
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
switch(sub_8023A94(TRUE)) {
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
case 3:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(3);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(4);
|
||||
break;
|
||||
case 2:
|
||||
sub_8023C60();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80278B4(void)
|
||||
{
|
||||
struct PokemonStruct *playerStruct;
|
||||
struct PokemonStruct *pokeStruct1;
|
||||
struct PokemonStruct *pokeStruct2;
|
||||
u32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_8023A94(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) {
|
||||
gUnknown_203B2BC->menuAction1 = menuAction;
|
||||
}
|
||||
switch(menuAction) {
|
||||
case 6:
|
||||
if (sub_808D750(gUnknown_203B2BC->targetPoke)) {
|
||||
#ifdef NONMATCHING
|
||||
pokeStruct1 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
#else
|
||||
register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]);
|
||||
struct PokemonStruct* p = gRecruitedPokemonRef->pokemon;
|
||||
size_t addr = offset + (size_t)p;
|
||||
pokeStruct1 = (struct PokemonStruct*)addr;
|
||||
#endif
|
||||
pokeStruct1->unk0 |= 2;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 7:
|
||||
gUnknown_203B2BC->pokeStruct->unk0 &= 0xfffd;
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 8:
|
||||
pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
playerStruct = GetPlayerPokemonStruct();
|
||||
if (!pokeStruct2->isTeamLeader) {
|
||||
playerStruct->isTeamLeader = FALSE;
|
||||
pokeStruct2->isTeamLeader = TRUE;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 9:
|
||||
SetFriendAreaActionMenuState(8);
|
||||
break;
|
||||
case 0xc:
|
||||
SetFriendAreaActionMenuState(0xe);
|
||||
break;
|
||||
case 10:
|
||||
SetFriendAreaActionMenuState(10);
|
||||
break;
|
||||
case 0xb:
|
||||
PlaySound(0x14d);
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 4:
|
||||
SetFriendAreaActionMenuState(4);
|
||||
break;
|
||||
case 5:
|
||||
SetFriendAreaActionMenuState(5);
|
||||
break;
|
||||
case 1:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8027A78(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
if(sub_80144A4(&menuAction) == 0)
|
||||
{
|
||||
switch(menuAction)
|
||||
{
|
||||
case 1:
|
||||
case 3:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 2:
|
||||
if (sub_8027A78_sub())
|
||||
SetFriendAreaActionMenuState(9);
|
||||
else
|
||||
{
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027AE4(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
if (sub_80144A4(&menuAction) == 0) {
|
||||
switch(menuAction)
|
||||
{
|
||||
case 1:
|
||||
case 3:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 2:
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027B28(void)
|
||||
{
|
||||
switch(sub_801A6E8(TRUE))
|
||||
{
|
||||
case 3:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
SetFriendAreaActionMenuState(0xc);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case 2:
|
||||
sub_801A928();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027BD8(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_801A6E8(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) {
|
||||
gUnknown_203B2BC->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
case 10:
|
||||
PlaySound(0x14d);
|
||||
ShiftItemsDownFrom(gUnknown_203B2BC->id);
|
||||
FillInventoryGaps();
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive);
|
||||
sub_801A928();
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 4:
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case 1:
|
||||
SetFriendAreaActionMenuState(0xb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027C84()
|
||||
{
|
||||
switch(sub_801B410())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801B450();
|
||||
SetFriendAreaActionMenuState(0xB);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027CA0(void)
|
||||
{
|
||||
switch(sub_801EF38(1))
|
||||
{
|
||||
case 3:
|
||||
case 4:
|
||||
gUnknown_203B2BC->moveIndex = sub_801F194();
|
||||
gUnknown_203B2BC->moveID = gUnknown_203B2BC->moves[gUnknown_203B2BC->moveIndex].id;
|
||||
SetFriendAreaActionMenuState(0x10);
|
||||
break;
|
||||
case 2:
|
||||
sub_801F214();
|
||||
SetFriendAreaActionMenuState(0x2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D00(void)
|
||||
{
|
||||
switch(sub_801F890())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801F8D0();
|
||||
SetFriendAreaActionMenuState(0xF);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FriendAreaActionMenu_GotoFallbackState(void)
|
||||
{
|
||||
s32 temp;
|
||||
if(sub_80144A4(&temp) == 0)
|
||||
{
|
||||
SetFriendAreaActionMenuState(gUnknown_203B2BC->fallbackState);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D40(u32 r0, struct BulkItem *heldItem)
|
||||
{
|
||||
|
||||
struct Item slot;
|
||||
struct unkStruct_8090F58 a3;
|
||||
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
HeldItemToSlot(&slot, heldItem);
|
||||
a3.unk0 = 0;
|
||||
a3.unk4 = 0;
|
||||
a3.unk8 = 1;
|
||||
slot.flags = ITEM_FLAG_EXISTS;
|
||||
sub_8090E14(gUnknown_202DE58, &slot, &a3);
|
||||
xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
|
||||
bool8 sub_8027D9C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(!sub_80023E4(8))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8027DCC(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(sub_808D3BC() != pokeStruct)
|
||||
if(sub_808D3F8() != pokeStruct)
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(sub_80023E4(8))
|
||||
goto check;
|
||||
}
|
||||
else
|
||||
{
|
||||
check:
|
||||
if(sub_8027E18(pokeStruct) != 3)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u32 sub_8027E18(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(pokeStruct->heldItem.id == ITEM_NOTHING)
|
||||
return 0;
|
||||
else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
|
||||
return 1;
|
||||
else if(sub_8027E4C(pokeStruct))
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
bool8 sub_8027E4C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(!IsNotMoneyOrUsedTMItem(pokeStruct->heldItem.id))
|
||||
return FALSE;
|
||||
else
|
||||
{
|
||||
if(IsThrowableItem(pokeStruct->heldItem.id))
|
||||
{
|
||||
if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] + pokeStruct->heldItem.quantity > 0x3e7)
|
||||
return FALSE;
|
||||
}
|
||||
else if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] > 0x3e6)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8027EB8(void)
|
||||
{
|
||||
switch(sub_8027E18(gUnknown_203B2BC->pokeStruct))
|
||||
{
|
||||
case 1:
|
||||
PlaySound(0x14d);
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(6);
|
||||
break;
|
||||
case 2:
|
||||
PlaySound(0x14d);
|
||||
if(IsThrowableItem(gUnknown_203B2BC->item2.id))
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += gUnknown_203B2BC->item2.quantity;
|
||||
else
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += 1;
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(7);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
#include "code_8012A18_1.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
// there might be more overlap with unkStruct_203B2BC
|
||||
// I was working on the moves and put the data that seemed to correspond to that
|
||||
|
|
@ -137,7 +138,9 @@ extern void sub_801F808(u16 *);
|
|||
extern void sub_8099690(u32);
|
||||
extern void sub_801F8D0(void);
|
||||
extern u32 sub_801F890(void);
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern void sub_80160D8(void);
|
||||
extern u32 sub_8016080(void);
|
||||
extern s32 sub_80144A4(s32 *);
|
||||
|
||||
void sub_8025434(s32);
|
||||
void sub_802544C(void);
|
||||
|
|
@ -533,7 +536,7 @@ void sub_8025A84(void)
|
|||
sub_8025434(0xA);
|
||||
break;
|
||||
case 9:
|
||||
gUnknown_203B2B4->pokeStruct->unk0 &= 0xfffd;
|
||||
gUnknown_203B2B4->pokeStruct->unk0 &= ~(FLAG_ON_TEAM);
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
sub_8023C60();
|
||||
|
|
|
|||
|
|
@ -1165,7 +1165,7 @@ void sub_8032828(void)
|
|||
else
|
||||
gUnknown_203B33C->unk53C.itemRewards[0] = ITEM_NOTHING;
|
||||
gUnknown_203B33C->unk53C.quantity = 1;
|
||||
gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0);
|
||||
gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0);
|
||||
gUnknown_203B33C->unk53C.itemRewards[1] = 0;
|
||||
gUnknown_203B33C->unk53C.itemRewards[2] = 0;
|
||||
gUnknown_203B33C->unk53C.friendAreaReward = 0;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ extern void sub_80A5EBC(void);
|
|||
extern void sub_80A2D00(void *);
|
||||
extern void sub_80015C0(u32, u32);
|
||||
extern void sub_80A5EDC(u32);
|
||||
extern void sub_809D754(void *, struct DebugLocation *);
|
||||
extern void sub_809D754(struct GroundScript_ExecutePP_1 *, struct DebugLocation *);
|
||||
extern void sub_80A2D68(void *);
|
||||
extern void nullsub_121(void);
|
||||
extern void sub_80A2D88(void *);
|
||||
|
|
|
|||
|
|
@ -16,13 +16,11 @@ extern u8 gUnknown_811656C[];
|
|||
|
||||
extern struct DebugLocation gUnknown_81165C8;
|
||||
|
||||
extern u8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *);
|
||||
extern void sub_809D520(void *);
|
||||
extern void sub_809D568(void *);
|
||||
extern u8 sub_80AC378(void);
|
||||
extern u8 sub_80AD290(void);
|
||||
extern u8 sub_80A8B74(void);
|
||||
extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32 index);
|
||||
extern u8 sub_809A750(void);
|
||||
extern u8 *sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32);
|
||||
void FatalError(u32 *, const char *, ...) __attribute__((noreturn));
|
||||
|
|
@ -36,6 +34,23 @@ struct FunctionScript
|
|||
|
||||
extern struct FunctionScript gFunctionScriptTable[];
|
||||
|
||||
void sub_809D6D8(struct GroundScript_ExecutePP_1 *param_1, s16 index, u8 *param_3)
|
||||
{
|
||||
param_1->unk14[index] = param_3;
|
||||
}
|
||||
|
||||
bool8 sub_809D6E4(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 _index)
|
||||
{
|
||||
u8 *scriptPtr;
|
||||
s32 index = _index;
|
||||
|
||||
scriptPtr = param_1->unk14[index];
|
||||
script->scriptPointer = scriptPtr;
|
||||
script->scriptType = index;
|
||||
script->unk6 = param_1->unk10;
|
||||
script->unk8 = param_1->unk12;
|
||||
return scriptPtr != NULL;
|
||||
}
|
||||
|
||||
void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 index)
|
||||
{
|
||||
|
|
@ -54,109 +69,110 @@ void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_E
|
|||
|
||||
bool8 sub_809D754(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused)
|
||||
{
|
||||
sub_809D568(¶m_1->unk24);
|
||||
sub_809D568(¶m_1->unk84);
|
||||
return TRUE;
|
||||
sub_809D568(¶m_1->unk24);
|
||||
sub_809D568(¶m_1->unk84);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused)
|
||||
{
|
||||
sub_809D568(¶m_1->unk24);
|
||||
sub_809D568(¶m_1->unk84);
|
||||
param_1->unk24.unk2 = 4;
|
||||
return TRUE;
|
||||
sub_809D568(¶m_1->unk24);
|
||||
sub_809D568(¶m_1->unk84);
|
||||
param_1->unk24.unk2 = 4;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused)
|
||||
{
|
||||
if ((param_3 == NULL) || (param_3->scriptPointer == NULL)) {
|
||||
return FALSE;
|
||||
}
|
||||
switch(param_3->scriptType) {
|
||||
case 2:
|
||||
case 3:
|
||||
if (param_1->unk24.scriptType == 1) {
|
||||
memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
|
||||
if ((param_3 == NULL) || (param_3->scriptPointer == NULL)) {
|
||||
return FALSE;
|
||||
}
|
||||
switch(param_3->scriptType) {
|
||||
case 2:
|
||||
case 3:
|
||||
if (param_1->unk24.scriptType == 1) {
|
||||
param_1->unk84 = param_1->unk24;
|
||||
break;
|
||||
}
|
||||
if (param_1->unk24.scriptType == 5) {
|
||||
sub_809D568(¶m_1->unk84);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (param_1->unk24.scriptType == 5) {
|
||||
case 5:
|
||||
if (param_1->unk24.scriptType != 2) {
|
||||
// "execute script type error B"
|
||||
FatalError(&gUnknown_8116538, gUnknown_8116544);
|
||||
}
|
||||
if (param_1->unk84.scriptType != -1) {
|
||||
// "execute script type error C"
|
||||
FatalError(&gUnknown_8116560, gUnknown_811656C);
|
||||
}
|
||||
param_1->unk84 = param_1->unk24;
|
||||
break;
|
||||
case 0:
|
||||
if (param_1->unk24.scriptType != 1) goto _0809D84A;
|
||||
param_1->unk84 = param_1->unk24;
|
||||
break;
|
||||
case 1:
|
||||
_0809D84A:
|
||||
sub_809D568(¶m_1->unk84);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (param_1->unk24.scriptType != 2) {
|
||||
// "execute script type error B"
|
||||
FatalError(&gUnknown_8116538, gUnknown_8116544);
|
||||
}
|
||||
if (param_1->unk84.scriptType != -1) {
|
||||
// "execute script type error C"
|
||||
FatalError(&gUnknown_8116560, gUnknown_811656C);
|
||||
}
|
||||
memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
|
||||
break;
|
||||
case 0:
|
||||
if (param_1->unk24.scriptType != 1) goto _0809D84A;
|
||||
memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub));
|
||||
break;
|
||||
case 1:
|
||||
_0809D84A:
|
||||
sub_809D568(¶m_1->unk84);
|
||||
break;
|
||||
default:
|
||||
// "execute script type error %d"
|
||||
FatalError(&gUnknown_8116588, gUnknown_8116594, param_3->scriptType);
|
||||
}
|
||||
sub_809D568(¶m_1->unk24);
|
||||
if (param_2 != NULL) {
|
||||
param_1->unkC = param_2[0];
|
||||
}
|
||||
else {
|
||||
sub_809D520(¶m_1->unkC);
|
||||
}
|
||||
param_1->unk24.scriptType = param_3->scriptType;
|
||||
param_1->unk24.unk2 = 3;
|
||||
param_1->unk24.unkC = param_3->unk6;
|
||||
param_1->unk24.unkE = param_3->unk8;
|
||||
param_1->unk24.scriptPointer1 = param_3->scriptPointer;
|
||||
param_1->unk24.scriptPointer2 = param_3->scriptPointer;
|
||||
param_1->unk24.unk10 = 0;
|
||||
param_1->unk24.unk14 = 0;
|
||||
break;
|
||||
default:
|
||||
// "execute script type error %d"
|
||||
FatalError(&gUnknown_8116588, gUnknown_8116594, param_3->scriptType);
|
||||
}
|
||||
sub_809D568(¶m_1->unk24);
|
||||
if (param_2 != NULL) {
|
||||
param_1->unkC = param_2[0];
|
||||
}
|
||||
else {
|
||||
sub_809D520(¶m_1->unkC);
|
||||
}
|
||||
param_1->unk24.scriptType = param_3->scriptType;
|
||||
param_1->unk24.unk2 = 3;
|
||||
param_1->unk24.unkC = param_3->unk6;
|
||||
param_1->unk24.unkE = param_3->unk8;
|
||||
param_1->unk24.scriptPointer1 = param_3->scriptPointer;
|
||||
param_1->unk24.scriptPointer2 = param_3->scriptPointer;
|
||||
param_1->unk24.unk10 = 0;
|
||||
param_1->unk24.unk14 = NULL;
|
||||
|
||||
if (param_1->unk0->callbacks[5] != 0) {
|
||||
param_1->unk0->callbacks[5](param_1->unk4, ¶m_1->unk24.unk26);
|
||||
}
|
||||
return TRUE;
|
||||
if (param_1->unk0->callbacks[5] != 0) {
|
||||
param_1->unk0->callbacks[5](param_1->unk4, ¶m_1->unk24.unk26);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 index, struct DebugLocation *debug)
|
||||
{
|
||||
struct GroundScript_ExecutePP_3 auStack28;
|
||||
|
||||
sub_809D6E4(param_1,&auStack28,index);
|
||||
return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug);
|
||||
struct GroundScript_ExecutePP_3 auStack28;
|
||||
|
||||
sub_809D6E4(param_1,&auStack28,index);
|
||||
return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug);
|
||||
}
|
||||
|
||||
u8 sub_809D8EC(struct GroundScript_ExecutePP_1 *param_1, s16 param_2)
|
||||
{
|
||||
s32 param_2_s32;
|
||||
s32 param_2_s32;
|
||||
|
||||
param_2_s32 = param_2;
|
||||
|
||||
if ((param_2 == 0) && (sub_809A750() == 0)) {
|
||||
param_1->unk24.scriptPointer1 = sub_80A2460(param_1, 0);
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
param_1->unk24.unk22 = param_2_s32;
|
||||
param_1->unk24.unk2 = 2;
|
||||
gUnknown_2039A36 = 1;
|
||||
return 1;
|
||||
}
|
||||
param_2_s32 = param_2;
|
||||
|
||||
if ((param_2 == 0) && (sub_809A750() == 0)) {
|
||||
param_1->unk24.scriptPointer1 = sub_80A2460(param_1, 0);
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
param_1->unk24.unk22 = param_2_s32;
|
||||
param_1->unk24.unk2 = 2;
|
||||
gUnknown_2039A36 = 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
u8 GroundScript_Cancel(struct GroundScript_ExecutePP_1 *r0)
|
||||
bool8 GroundScript_Cancel(struct GroundScript_ExecutePP_1 *r0)
|
||||
{
|
||||
// NOTE: Will always return TRUE
|
||||
return sub_809D770(r0, &gUnknown_81165C8);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#include "code_800D090.h"
|
||||
#include "code_8094F88.h"
|
||||
#include "menu_input.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
extern const struct FileArchive gTitleMenuFileArchive;
|
||||
|
||||
|
|
@ -44,7 +45,6 @@ void sub_80397B4(void);
|
|||
|
||||
extern void sub_80920D8(u8 *);
|
||||
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern u8 *sub_8098FB4();
|
||||
extern u8 *GetDungeonLocationInfo(void);
|
||||
extern u32 GetNumAdventures(void);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,12 @@
|
|||
#include "global.h"
|
||||
#include "constants/bg_music.h"
|
||||
#include "constants/colors.h"
|
||||
#include "constants/evolution_status.h"
|
||||
#include "input.h"
|
||||
#include "item.h"
|
||||
#include "memory.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "random.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
|
|
@ -15,40 +18,7 @@
|
|||
#include "code_8012A18_1.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "code_80118A4.h"
|
||||
|
||||
struct unkStruct_203B2B0
|
||||
{
|
||||
// size: 0x174
|
||||
bool8 evolutionComplete;
|
||||
u8 fill1[0x3];
|
||||
u8 evoItem1_itemIndex;
|
||||
u8 evoItem2_ItemIndex;
|
||||
u8 unk6;
|
||||
u16 evolutionConditionStatus;
|
||||
/* 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 Item chosenItem;
|
||||
u32 state;
|
||||
u32 fallbackState;
|
||||
u32 menuAction1;
|
||||
u32 menuAction2;
|
||||
u32 menuAction3;
|
||||
struct MenuItem unk34[8];
|
||||
u16 unk74[0x8];
|
||||
struct MenuStruct unk84;
|
||||
u8 fillD4[0x104 - 0xD4];
|
||||
struct OpenedFile *unk104;
|
||||
u8 *unk108;
|
||||
u16 unk10C;
|
||||
u16 unk10E;
|
||||
u8 unk110;
|
||||
u8 unk111;
|
||||
u8 unk112;
|
||||
struct UnkTextStruct2 unk114[4];
|
||||
};
|
||||
#include "luminous_cave.h"
|
||||
|
||||
EWRAM_DATA_2 struct unkStruct_203B2B0 *gUnknown_203B2B0 = {0};
|
||||
extern struct UnkTextStruct2 gUnknown_80DCA00;
|
||||
|
|
@ -195,10 +165,10 @@ extern void nullsub_104();
|
|||
void sub_8024DBC(void);
|
||||
void sub_8024E30(void);
|
||||
void sub_801AEE4(u32, u32);
|
||||
void sub_808F734(struct PokemonStruct *, s16);
|
||||
u32 sub_801602C(u32 r0, u8 *name);
|
||||
extern s32 sub_80144A4(s32 *);
|
||||
extern s32 sub_801A8AC(void);
|
||||
extern void sub_8099690(u32);
|
||||
extern void sub_808F468(struct PokemonStruct *, u8 *, u32);
|
||||
|
||||
bool8 LuminousCave_HasOnly1Member(void);
|
||||
|
||||
enum
|
||||
|
|
@ -226,17 +196,6 @@ enum
|
|||
LUMINOUS_CAVE_CANT_EVOLVE_YET = 0x1D,
|
||||
};
|
||||
|
||||
enum evolutionStatus
|
||||
{
|
||||
EVOLUTION_GOOD = 1,
|
||||
EVOLUTION_LACK_LEVEL = 1 << 1,
|
||||
EVOLUTION_NO_MORE = 1 << 2,
|
||||
EVOLUTION_LACK_ITEM = 1 << 3,
|
||||
EVOLUTION_LACK_IQ = 1 << 4,
|
||||
EVOLUTION_LACK_FRIEND_AREA = 1 << 5,
|
||||
EVOLUTION_LACK_ROOM = 1 << 6,
|
||||
};
|
||||
|
||||
u32 sub_802465C(void)
|
||||
{
|
||||
struct OpenedFile *faceFile;
|
||||
|
|
@ -436,19 +395,19 @@ void UpdateLuminousCaveDialogue(void)
|
|||
case LUMINOUS_CAVE_LET_US_BEGIN:
|
||||
sub_8025254();
|
||||
|
||||
if((gUnknown_203B2B0->evolutionConditionStatus & EVOLUTION_GOOD))
|
||||
if((gUnknown_203B2B0->evolveStatus.evolutionConditionStatus & EVOLUTION_GOOD))
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CHANGED_APPEARANCE;
|
||||
else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_NO_MORE)
|
||||
else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_NO_MORE)
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE;
|
||||
else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_LEVEL)
|
||||
else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_LEVEL)
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_LEVEL;
|
||||
else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_IQ)
|
||||
else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_IQ)
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_IQ;
|
||||
else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_FRIEND_AREA)
|
||||
else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_FRIEND_AREA)
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_FRIEND_AREA;
|
||||
else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_ROOM)
|
||||
else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_ROOM)
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ROOM;
|
||||
else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_ITEM)
|
||||
else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_ITEM)
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ITEM;
|
||||
else
|
||||
gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_YET;
|
||||
|
|
@ -464,11 +423,11 @@ void UpdateLuminousCaveDialogue(void)
|
|||
case LUMINOUS_CAVE_EVOLVED:
|
||||
monName = GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
monName = GetMonSpecies(gUnknown_203B2B0->targetSpecies);
|
||||
monName = GetMonSpecies(gUnknown_203B2B0->evolveStatus.targetEvolveSpecies);
|
||||
strcpy(gAvailablePokemonNames + 0x50,monName);
|
||||
gUnknown_203B2B0->evolutionComplete = TRUE;
|
||||
sub_80977D0();
|
||||
sub_808F734(gUnknown_203B2B0->pokeStruct,gUnknown_203B2B0->targetSpecies);
|
||||
sub_808F734(gUnknown_203B2B0->pokeStruct,gUnknown_203B2B0->evolveStatus.targetEvolveSpecies);
|
||||
nullsub_104();
|
||||
gUnknown_203B2B0->pokeStruct = GetPlayerPokemonStruct();
|
||||
if (gUnknown_203B2B0->evoItem1_InvIndex != INVENTORY_SIZE) {
|
||||
|
|
@ -874,20 +833,20 @@ void LuminousCave_AdvancetoFallbackState(void)
|
|||
void sub_8025254(void)
|
||||
{
|
||||
if(gUnknown_203B2B0->evoItem1_InvIndex == INVENTORY_SIZE)
|
||||
gUnknown_203B2B0->evoItem1_itemIndex = 0;
|
||||
gUnknown_203B2B0->evolveStatus.evoItem1 = 0;
|
||||
else
|
||||
{
|
||||
gUnknown_203B2B0->evoItem1_itemIndex = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem1_InvIndex].id;
|
||||
gUnknown_203B2B0->evolveStatus.evoItem1 = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem1_InvIndex].id;
|
||||
}
|
||||
if(gUnknown_203B2B0->evoItem2_InvIndex == INVENTORY_SIZE)
|
||||
gUnknown_203B2B0->evoItem2_ItemIndex = 0;
|
||||
gUnknown_203B2B0->evolveStatus.evoItem2 = 0;
|
||||
else
|
||||
{
|
||||
gUnknown_203B2B0->evoItem2_ItemIndex = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem2_InvIndex].id;
|
||||
gUnknown_203B2B0->evolveStatus.evoItem2 = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem2_InvIndex].id;
|
||||
}
|
||||
|
||||
gUnknown_203B2B0->unk6 = RandInt(0xFF);
|
||||
sub_808F468(gUnknown_203B2B0->pokeStruct, &gUnknown_203B2B0->evoItem1_itemIndex, 1);
|
||||
gUnknown_203B2B0->evolveStatus.unk6 = RandInt(0xFF);
|
||||
sub_808F468(gUnknown_203B2B0->pokeStruct, &gUnknown_203B2B0->evolveStatus, 1);
|
||||
}
|
||||
|
||||
bool8 LuminousCave_HasOnly1Member(void)
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ void sub_802E1AC(void)
|
|||
case MAIL_INFO:
|
||||
sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC);
|
||||
gUnknown_203B304->unkC.unk0[0] = 3;
|
||||
gUnknown_203B304->unkC.unk44 = 0;
|
||||
gUnknown_203B304->unkC.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
sub_802DE84(&gUnknown_203B304->unkC);
|
||||
break;
|
||||
case JOB_LIST_MENU:
|
||||
|
|
@ -404,7 +404,7 @@ void sub_802E578(void)
|
|||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
if(mail->mailType == 1)
|
||||
{
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
}
|
||||
|
|
@ -466,7 +466,7 @@ void HandleMailActionMenu(void)
|
|||
case 6:
|
||||
PlaySound(0x133);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
ReceivePKMNNews(mail->dungeon.floor);
|
||||
ReceivePKMNNews(mail->unk4.dungeon.floor);
|
||||
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
|
||||
sub_8096078();
|
||||
if(HasNoMailinMailbox())
|
||||
|
|
@ -482,7 +482,7 @@ void HandleMailActionMenu(void)
|
|||
case 7:
|
||||
PlayMenuSoundEffect(0);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ void ResetMailbox(void)
|
|||
void ResetMailboxSlot(u8 index)
|
||||
{
|
||||
gUnknown_203B490->mailboxSlots[index].mailType = MAIL_TYPE_NONE;
|
||||
gUnknown_203B490->mailboxSlots[index].dungeon.id = 99;
|
||||
gUnknown_203B490->mailboxSlots[index].dungeon.floor = 0;
|
||||
gUnknown_203B490->mailboxSlots[index].unk4.dungeon.id = 99;
|
||||
gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor = 0;
|
||||
gUnknown_203B490->mailboxSlots[index].rewardType = MONEY1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,16 @@
|
|||
|
||||
extern bool8 sub_8044B28(void);
|
||||
extern void sub_80429C8(struct Entity *r0);
|
||||
extern u16 gNaturePowerMoveTable[];
|
||||
|
||||
typedef bool8 (*MoveCallback)(struct Entity *pokemon, struct Entity *target, struct Move *move, s32 param_4);
|
||||
struct NaturePowerMove
|
||||
{
|
||||
u16 moveID;
|
||||
u16 unk2;
|
||||
MoveCallback move;
|
||||
};
|
||||
|
||||
extern struct NaturePowerMove gNaturePowerMoveTable[76];
|
||||
bool8 sub_805755C(struct Entity* pokemon,u16 param_2);
|
||||
|
||||
u32 sub_8057144(struct Entity * pokemon)
|
||||
|
|
@ -104,7 +113,7 @@ bool8 sub_80571F0(struct Entity * pokemon, struct Move *move)
|
|||
if (0x4a < tileset) {
|
||||
tileset = 0x4a;
|
||||
}
|
||||
if (gNaturePowerMoveTable[tileset << 2] == MOVE_EARTHQUAKE) return FALSE;
|
||||
if (gNaturePowerMoveTable[tileset].moveID == MOVE_EARTHQUAKE) return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -34,9 +34,8 @@ struct unkStruct_203B35C
|
|||
struct PokemonStruct unk2BC;
|
||||
struct unkStruct_203B480 unk314;
|
||||
struct PokemonStruct unk344;
|
||||
s32 unk39C;
|
||||
u8 fill3A0[0x450 - 0x3A0];
|
||||
s32 unk450;
|
||||
u8 unk39C[0xB4];
|
||||
u8 unk450[0xB4];
|
||||
};
|
||||
|
||||
EWRAM_DATA_2 struct unkStruct_203B35C *gUnknown_203B35C = {0};
|
||||
|
|
@ -470,8 +469,8 @@ void sub_8036FDC(s32 param_1)
|
|||
sub_800641C(0,1,1);
|
||||
ResetSprites(FALSE);
|
||||
if (gUnknown_203B35C == NULL) {
|
||||
gUnknown_203B35C = MemoryAlloc(0x504,8);
|
||||
MemoryFill8((u8 *)gUnknown_203B35C,0,0x504);
|
||||
gUnknown_203B35C = MemoryAlloc(sizeof(struct unkStruct_203B35C),8);
|
||||
MemoryFill8((u8 *)gUnknown_203B35C,0,sizeof(struct unkStruct_203B35C));
|
||||
}
|
||||
|
||||
gUnknown_203B35C->unk0 = param_1;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include "code_80130A8.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
struct unkStruct_203B2B8
|
||||
{
|
||||
|
|
@ -165,7 +166,6 @@ ALIGNED(4) static const u8 fill0[] = "pksdir0";
|
|||
extern u32 sub_8026F04(struct PokemonStruct *);
|
||||
extern void sub_8026074(s32);
|
||||
bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0);
|
||||
extern bool8 sub_80023E4(u8);
|
||||
extern struct PokemonStruct *sub_808D3F8(void);
|
||||
extern struct PokemonStruct *sub_808D3BC(void);
|
||||
extern void sub_801F214(void);
|
||||
|
|
@ -638,14 +638,14 @@ void sub_80268CC(void)
|
|||
pokeStruct = (struct PokemonStruct*)addr;
|
||||
#endif
|
||||
|
||||
pokeStruct->unk0 |= 2;
|
||||
pokeStruct->unk0 |= FLAG_ON_TEAM;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
sub_8026074(5);
|
||||
break;
|
||||
case 7:
|
||||
gUnknown_203B2B8->pokeStruct->unk0 &= 0xfffd;
|
||||
gUnknown_203B2B8->pokeStruct->unk0 &= ~(FLAG_ON_TEAM);
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
sub_8026074(6);
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ void sub_802EA58(void)
|
|||
case PELIPPER_JOB_INFO:
|
||||
sub_803B35C(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex), &gPelipperBoard->unkC);
|
||||
gPelipperBoard->unkC.unk0[0] = 3;
|
||||
gPelipperBoard->unkC.unk44 = 0;
|
||||
gPelipperBoard->unkC.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
sub_802DE84(&gPelipperBoard->unkC);
|
||||
break;
|
||||
case PELIPPER_JOB_LIST_MENU:
|
||||
|
|
@ -467,4 +467,4 @@ void CreatePelipperAcceptedStatusBox(u32 r0)
|
|||
xxx_call_draw_string(0x16, 0xD, gPelipperStatusSlash, r0, 0); // "/"
|
||||
sub_8012BC4(0x23, 0xD, MAX_ACCEPTED_JOBS, 2, 7, r0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
122
src/pokemon.c
122
src/pokemon.c
|
|
@ -47,63 +47,65 @@ void InitializeRecruitedPokemon(void)
|
|||
}
|
||||
}
|
||||
|
||||
// void sub_808CE74(s32 _species, u8 a2, u8* a3)
|
||||
// {
|
||||
// struct PokemonStruct pokemon;
|
||||
// u8 name_buffer[20];
|
||||
// u8 friend_area;
|
||||
// s32 i;
|
||||
// register s16 species asm("r7") = (s16)_species;
|
||||
// s32 cond = a2 << 24;
|
||||
|
||||
// pokemon.unk0 = 3;
|
||||
// if (cond) {
|
||||
// pokemon.unk2 = 1;
|
||||
// pokemon.unk4.unk4 = 64;
|
||||
// }
|
||||
// else {
|
||||
// pokemon.unk2 = 1;
|
||||
// pokemon.unk4.unk4 = 65;
|
||||
// }
|
||||
// pokemon.unkHasNextStage = 1;
|
||||
// pokemon.pokeHP = GetBaseHP(species);
|
||||
// pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0);
|
||||
// pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1);
|
||||
// pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0);
|
||||
// pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1);
|
||||
// pokemon.IQ = 1;
|
||||
// pokemon.unkC[0].unk0 = 0;
|
||||
// pokemon.unkC[1].unk0 = 0;
|
||||
// SetDefaultIQSkills((u8*)&pokemon.IQSkills, 0);
|
||||
// pokemon.speciesNum = species;
|
||||
// pokemon.heldItem.id = 0;
|
||||
// pokemon.heldItem.quantity = 0;
|
||||
// pokemon.unk1C = 0;
|
||||
// pokemon.unk24 = 0;
|
||||
// pokemon.unk4.unk5 = 0;
|
||||
// sub_808E490(pokemon.moves, species);
|
||||
|
||||
// // mostly incorrect below this:
|
||||
// if (!a3) {
|
||||
// CopyMonsterNametoBuffer(name_buffer, species);
|
||||
// BoundedCopyStringtoBuffer(pokemon.name, name_buffer, 10);
|
||||
// }
|
||||
// else {
|
||||
// s32 j;
|
||||
// for (j = 0; j < 10; j++) {
|
||||
// pokemon.name[j] = a3[j];
|
||||
// }
|
||||
// }
|
||||
// friend_area = gMonsterParameters[species].friend_area;
|
||||
// for (i = 0; i < 413; i++) {
|
||||
// if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) {
|
||||
// u8 species_friend_area = sub_80923D4(i);
|
||||
// if (species_friend_area == friend_area) {
|
||||
// gRecruitedPokemonRef->pokemon[i] = pokemon;
|
||||
// gFriendAreas[species_friend_area] = 1;
|
||||
// sub_80980B4(species);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// https://decomp.me/scratch/wQbZB
|
||||
// void sub_808CE74(s16 _species, bool8 _isLeader, u8* name)
|
||||
// {
|
||||
// struct PokemonStruct pokemon;
|
||||
// struct PokemonStruct *temp;
|
||||
// u8 name_buffer[20];
|
||||
// u32 friendArea;
|
||||
// s32 i;
|
||||
// s32 species = _species;
|
||||
// bool32 isLeader = _isLeader << 24;
|
||||
//
|
||||
// pokemon.unk0 = 3;
|
||||
// if (isLeader) {
|
||||
// pokemon.isTeamLeader = TRUE;
|
||||
// pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_LEADER;
|
||||
// }
|
||||
// else {
|
||||
// pokemon.isTeamLeader = FALSE;
|
||||
// pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_PARTNER;
|
||||
// }
|
||||
// pokemon.level = 1;
|
||||
// pokemon.pokeHP = GetBaseHP(species);
|
||||
// pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0);
|
||||
// pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1);
|
||||
// pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0);
|
||||
// pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1);
|
||||
// pokemon.IQ = 1;
|
||||
// pokemon.unkC[0].level = 0;
|
||||
// pokemon.unkC[1].level = 0;
|
||||
// SetDefaultIQSkills((u8*)&pokemon.IQSkills, FALSE);
|
||||
// pokemon.speciesNum = species;
|
||||
// pokemon.heldItem.id = ITEM_NOTHING;
|
||||
// pokemon.heldItem.quantity = 0;
|
||||
// pokemon.currExp = 0;
|
||||
// pokemon.tacticIndex = 0; // TACTIC_LETS_GO_TOGETHER
|
||||
// pokemon.dungeonLocation.floor = 0;
|
||||
// sub_808E490(pokemon.moves, species);
|
||||
//
|
||||
// if (name == NULL) {
|
||||
// CopyMonsterNametoBuffer(name_buffer, species);
|
||||
// BoundedCopyStringtoBuffer(pokemon.name, name_buffer, POKEMON_NAME_LENGTH);
|
||||
// }
|
||||
// else {
|
||||
// s32 j;
|
||||
// for (j = 0; j < POKEMON_NAME_LENGTH; j++) {
|
||||
// pokemon.name[j] = name[j];
|
||||
// }
|
||||
// }
|
||||
// friendArea = gMonsterParameters[species].friendArea;
|
||||
// for (i = 0; i < NUM_MONSTERS; i++) {
|
||||
// temp = &gRecruitedPokemonRef->pokemon[i];
|
||||
// if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) {
|
||||
// u8 speciesFriendArea = sub_80923D4(i);
|
||||
// if (speciesFriendArea == friendArea) {
|
||||
// gRecruitedPokemonRef->pokemon[i] = pokemon;
|
||||
// gFriendAreas[speciesFriendArea] = TRUE;
|
||||
// sub_80980B4(species);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
|
|
|||
285
src/pokemon_3.c
285
src/pokemon_3.c
|
|
@ -1,15 +1,20 @@
|
|||
#include "global.h"
|
||||
#include "pokemon_3.h"
|
||||
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "random.h"
|
||||
#include "constants/evolve_type.h"
|
||||
#include "constants/evolution_status.h"
|
||||
#include "constants/iq_skill.h"
|
||||
#include "constants/tactic.h"
|
||||
#include "sprite.h"
|
||||
#include "text_util.h"
|
||||
#include "friend_area.h"
|
||||
#include "luminous_cave.h"
|
||||
|
||||
extern u8 *gIQSkillNames[];
|
||||
extern u32 gIQSkillDescriptions[];
|
||||
extern u32 gTacticsDescriptions[];
|
||||
extern u8 *gIQSkillDescriptions[];
|
||||
extern u8 *gTacticsDescriptions[];
|
||||
extern u8 *gTactics[];
|
||||
extern bool8 gTacticsTargetLeader[];
|
||||
|
||||
|
|
@ -53,7 +58,10 @@ extern void sub_808F448(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
|
|||
extern void sub_80941FC(struct unkStruct_8094924*, void*);
|
||||
extern void sub_809447C(struct unkStruct_8094924*, void*);
|
||||
extern void sub_808F428(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
|
||||
s16 GetPokemonEvolveConditions(s16 index, struct unkEvolve *r1);
|
||||
|
||||
u32 sub_808F798(struct PokemonStruct *, s16);
|
||||
void sub_8097848(void);
|
||||
|
||||
bool8 sub_808E668(s16 species, s16* a2, s16* a3)
|
||||
{
|
||||
|
|
@ -96,14 +104,14 @@ void sub_808E6F4(struct unkStruct_808E6F4* a1)
|
|||
a1->unk2 = 2;
|
||||
}
|
||||
|
||||
bool8 HasRecruitedMon(s16 species_) {
|
||||
s32 species = species_;
|
||||
bool8 HasRecruitedMon(s16 species) {
|
||||
s32 species_s32 = species;
|
||||
s32 i = 0;
|
||||
struct PokemonStruct *pokemon = gRecruitedPokemonRef->pokemon;
|
||||
|
||||
for (i = 0; i < NUM_MONSTERS; i++) {
|
||||
if (((u8)pokemon->unk0 & 1)) {
|
||||
if(pokemon->speciesNum == species)
|
||||
if(pokemon->speciesNum == species_s32)
|
||||
return TRUE;
|
||||
}
|
||||
pokemon++;
|
||||
|
|
@ -111,7 +119,7 @@ bool8 HasRecruitedMon(s16 species_) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
s32 GetBaseSpecies(s16 index) {
|
||||
s16 GetBaseSpecies(s16 index) {
|
||||
if (index == MONSTER_CASTFORM_SNOWY)
|
||||
return MONSTER_CASTFORM;
|
||||
if (index == MONSTER_CASTFORM_SUNNY)
|
||||
|
|
@ -453,24 +461,24 @@ void sub_808E9EC(struct PokemonStruct *r0, struct unkStruct_808E9EC *r1)
|
|||
}
|
||||
#endif
|
||||
|
||||
u8 *GetIQSkillName(u8 r0)
|
||||
u8 *GetIQSkillName(u8 skill)
|
||||
{
|
||||
return gIQSkillNames[r0];
|
||||
return gIQSkillNames[skill];
|
||||
}
|
||||
|
||||
void CopyTacticsNameToBuffer(char *r0, u8 r1)
|
||||
void CopyTacticsNameToBuffer(char *buffer, u8 tactic)
|
||||
{
|
||||
strncpy(r0, gTactics[r1], 0x14);
|
||||
strncpy(buffer, gTactics[tactic], 0x14);
|
||||
}
|
||||
|
||||
u32 GetIQSkillDescription(u8 r0)
|
||||
u8 *GetIQSkillDescription(u8 skill)
|
||||
{
|
||||
return gIQSkillDescriptions[r0];
|
||||
return gIQSkillDescriptions[skill];
|
||||
}
|
||||
|
||||
u32 GetTacticsDescription(u8 r0)
|
||||
u8 *GetTacticsDescription(u8 tactic)
|
||||
{
|
||||
return gTacticsDescriptions[r0];
|
||||
return gTacticsDescriptions[tactic];
|
||||
}
|
||||
|
||||
bool8 TacticsTargetLeader(u8 tactic)
|
||||
|
|
@ -674,7 +682,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2)
|
|||
pokemon = &gRecruitedPokemonRef->pokemon[i];
|
||||
|
||||
if (pokemon->unk0 & 1) {
|
||||
if (pokemon->unk0 & 2) {
|
||||
if (pokemon->unk0 & FLAG_ON_TEAM) {
|
||||
buffer[count++] = i;
|
||||
}
|
||||
if (pokemon->isTeamLeader) {
|
||||
|
|
@ -682,7 +690,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2)
|
|||
}
|
||||
}
|
||||
else {
|
||||
pokemon->unkHasNextStage = 0;
|
||||
pokemon->level = 0;
|
||||
}
|
||||
SavePokemonStruct(&backup, pokemon);
|
||||
}
|
||||
|
|
@ -722,7 +730,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
|
|||
RestoreIntegerBits(&backup, &data_u8, 1);
|
||||
RestorePokemonStruct(&backup, &gRecruitedPokemonRef->team[i]);
|
||||
if (data_u8 & 1) {
|
||||
gRecruitedPokemonRef->team[i].unk0 = 3;
|
||||
gRecruitedPokemonRef->team[i].unk0 = 3; // FLAG_ON_TEAM (2) + ??? (1)
|
||||
}
|
||||
else {
|
||||
gRecruitedPokemonRef->team[i].unk0 = 0;
|
||||
|
|
@ -732,12 +740,12 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
|
|||
for (i = 0; i < 6; i++) {
|
||||
RestoreIntegerBits(&backup, &data_s16, 16);
|
||||
if ((u16)data_s16 < NUM_MONSTERS) {
|
||||
gRecruitedPokemonRef->pokemon[data_s16].unk0 |= 2;
|
||||
gRecruitedPokemonRef->pokemon[data_s16].unk0 |= FLAG_ON_TEAM;
|
||||
}
|
||||
}
|
||||
RestoreIntegerBits(&backup, &data_s16, 16);
|
||||
if ((u16)data_s16 < NUM_MONSTERS) {
|
||||
gRecruitedPokemonRef->pokemon[data_s16].isTeamLeader = 1;
|
||||
gRecruitedPokemonRef->pokemon[data_s16].isTeamLeader = TRUE;
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
return backup.unk8;
|
||||
|
|
@ -745,7 +753,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
|
|||
|
||||
void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon)
|
||||
{
|
||||
SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7);
|
||||
SaveIntegerBits(a1, &pokemon->level, 7);
|
||||
SaveIntegerBits(a1, &pokemon->speciesNum, 9);
|
||||
SaveDungeonLocation(a1, &pokemon->dungeonLocation);
|
||||
xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]);
|
||||
|
|
@ -756,9 +764,9 @@ void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokem
|
|||
SaveIntegerBits(a1, &pokemon->offense.att[1], 8);
|
||||
SaveIntegerBits(a1, &pokemon->offense.def[0], 8);
|
||||
SaveIntegerBits(a1, &pokemon->offense.def[1], 8);
|
||||
SaveIntegerBits(a1, &pokemon->unk1C, 24);
|
||||
SaveIntegerBits(a1, &pokemon->currExp, 24);
|
||||
SaveIntegerBits(a1, &pokemon->IQSkills, 24);
|
||||
SaveIntegerBits(a1, &pokemon->unk24, 4);
|
||||
SaveIntegerBits(a1, &pokemon->tacticIndex, 4);
|
||||
SaveHeldItem(a1, &pokemon->heldItem);
|
||||
SavePokemonMoves(a1, pokemon->moves);
|
||||
SaveIntegerBits(a1, pokemon->name, 80);
|
||||
|
|
@ -769,8 +777,8 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po
|
|||
memset(pokemon, 0, sizeof(struct PokemonStruct));
|
||||
pokemon->unk0 = 0;
|
||||
pokemon->isTeamLeader = 0;
|
||||
RestoreIntegerBits(a1, &pokemon->unkHasNextStage, 7);
|
||||
if (pokemon->unkHasNextStage) {
|
||||
RestoreIntegerBits(a1, &pokemon->level, 7);
|
||||
if (pokemon->level) {
|
||||
pokemon->unk0 |= 1;
|
||||
}
|
||||
RestoreIntegerBits(a1, &pokemon->speciesNum, 9);
|
||||
|
|
@ -783,9 +791,9 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po
|
|||
RestoreIntegerBits(a1, &pokemon->offense.att[1], 8);
|
||||
RestoreIntegerBits(a1, &pokemon->offense.def[0], 8);
|
||||
RestoreIntegerBits(a1, &pokemon->offense.def[1], 8);
|
||||
RestoreIntegerBits(a1, &pokemon->unk1C, 24);
|
||||
RestoreIntegerBits(a1, &pokemon->currExp, 24);
|
||||
RestoreIntegerBits(a1, &pokemon->IQSkills, 24);
|
||||
RestoreIntegerBits(a1, &pokemon->unk24, 4);
|
||||
RestoreIntegerBits(a1, &pokemon->tacticIndex, 4);
|
||||
RestoreHeldItem(a1, &pokemon->heldItem);
|
||||
RestorePokemonMoves(a1, pokemon->moves);
|
||||
RestoreIntegerBits(a1, pokemon->name, 80);
|
||||
|
|
@ -807,7 +815,7 @@ s32 SavePokemonStruct2(u8* a1, s32 size)
|
|||
SaveIntegerBits(&backup, &pokemon2->unk0, 2);
|
||||
|
||||
SaveIntegerBits(&backup, pokemon2->isTeamLeader ? &data_u8_neg1 : &data_u8_zero, 1);
|
||||
SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
|
||||
SaveIntegerBits(&backup, &pokemon2->level, 7);
|
||||
|
||||
SaveDungeonLocation(&backup, &pokemon2->dungeonLocation);
|
||||
SaveIntegerBits(&backup, &pokemon2->IQ, 10);
|
||||
|
|
@ -820,13 +828,13 @@ s32 SavePokemonStruct2(u8* a1, s32 size)
|
|||
SaveIntegerBits(&backup, &pokemon2->offense.att[1], 8);
|
||||
SaveIntegerBits(&backup, &pokemon2->offense.def[0], 8);
|
||||
SaveIntegerBits(&backup, &pokemon2->offense.def[1], 8);
|
||||
SaveIntegerBits(&backup, &pokemon2->unk18, 24);
|
||||
SaveIntegerBits(&backup, &pokemon2->currExp, 24);
|
||||
sub_8094184(&backup, &pokemon2->moves);
|
||||
SaveItemSlot(&backup, &pokemon2->itemSlot);
|
||||
sub_809449C(&backup, &pokemon2->unk44);
|
||||
sub_809449C(&backup, &pokemon2->unk48);
|
||||
SaveIntegerBits(&backup, &pokemon2->IQSkills, 24);
|
||||
SaveIntegerBits(&backup, &pokemon2->unk50, 4);
|
||||
SaveIntegerBits(&backup, &pokemon2->tacticIndex, 4);
|
||||
sub_808F448(&backup, &pokemon2->unk54);
|
||||
SaveIntegerBits(&backup, &pokemon2->name, 80);
|
||||
}
|
||||
|
|
@ -855,7 +863,7 @@ s32 RestorePokemonStruct2(u8* a1, s32 size)
|
|||
else {
|
||||
pokemon2->isTeamLeader = FALSE;
|
||||
}
|
||||
RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
|
||||
RestoreIntegerBits(&backup, &pokemon2->level, 7);
|
||||
|
||||
RestoreDungeonLocation(&backup, &pokemon2->dungeonLocation);
|
||||
RestoreIntegerBits(&backup, &pokemon2->IQ, 10);
|
||||
|
|
@ -868,13 +876,13 @@ s32 RestorePokemonStruct2(u8* a1, s32 size)
|
|||
RestoreIntegerBits(&backup, &pokemon2->offense.att[1], 8);
|
||||
RestoreIntegerBits(&backup, &pokemon2->offense.def[0], 8);
|
||||
RestoreIntegerBits(&backup, &pokemon2->offense.def[1], 8);
|
||||
RestoreIntegerBits(&backup, &pokemon2->unk18, 24);
|
||||
RestoreIntegerBits(&backup, &pokemon2->currExp, 24);
|
||||
sub_80941FC(&backup, &pokemon2->moves);
|
||||
RestoreItemSlot(&backup, &pokemon2->itemSlot);
|
||||
sub_809447C(&backup, &pokemon2->unk44);
|
||||
sub_809447C(&backup, &pokemon2->unk48);
|
||||
RestoreIntegerBits(&backup, &pokemon2->IQSkills, 24);
|
||||
RestoreIntegerBits(&backup, &pokemon2->unk50, 4);
|
||||
RestoreIntegerBits(&backup, &pokemon2->tacticIndex, 4);
|
||||
sub_808F428(&backup, &pokemon2->unk54);
|
||||
RestoreIntegerBits(&backup, &pokemon2->name, 80);
|
||||
}
|
||||
|
|
@ -884,12 +892,12 @@ s32 RestorePokemonStruct2(u8* a1, s32 size)
|
|||
|
||||
void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC)
|
||||
{
|
||||
RestoreIntegerBits(a1, &unkC->unk0, 7);
|
||||
RestoreIntegerBits(a1, &unkC->level, 7);
|
||||
}
|
||||
|
||||
void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC)
|
||||
{
|
||||
SaveIntegerBits(a1, &unkC->unk0, 7);
|
||||
SaveIntegerBits(a1, &unkC->level, 7);
|
||||
}
|
||||
|
||||
void sub_808F428(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2)
|
||||
|
|
@ -903,3 +911,210 @@ void sub_808F448(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2)
|
|||
SaveIntegerBits(a1, &a2->unk0, 10);
|
||||
SaveIntegerBits(a1, &a2->unk2, 5);
|
||||
}
|
||||
|
||||
void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatus, u8 param_3)
|
||||
{
|
||||
bool8 evolFlag;
|
||||
u8 friendArea;
|
||||
u8 uVar2;
|
||||
s32 numPokemon;
|
||||
struct unkStruct_8092638 local_40; // sp 0x0
|
||||
struct unkEvolve evolveConditions; // r7
|
||||
s32 index, index2;
|
||||
#ifndef NONMATCHING
|
||||
register s32 defaultReason asm("sl");
|
||||
#else
|
||||
s32 defaultReason;
|
||||
#endif
|
||||
|
||||
evolveStatus->evolutionConditionStatus = 0;
|
||||
for(index = MONSTER_BULBASAUR; index <= MONSTER_MAX; index++)
|
||||
{
|
||||
if ((s16)index == MONSTER_ALAKAZAM) {
|
||||
GetPokemonEvolveConditions(MONSTER_ALAKAZAM, &evolveConditions);
|
||||
}
|
||||
else {
|
||||
GetPokemonEvolveConditions(index, &evolveConditions);
|
||||
}
|
||||
if(((evolveConditions.preEvolution.evolveType != EVOLVE_TYPE_NONE) && (param_1->speciesNum == evolveConditions.preEvolution.evolveFrom)))
|
||||
break;
|
||||
};
|
||||
if (index == MONSTER_MAX + 1) {
|
||||
evolveStatus->evolutionConditionStatus = EVOLUTION_NO_MORE;
|
||||
}
|
||||
else {
|
||||
for(index = MONSTER_BULBASAUR, defaultReason = EVOLUTION_LACK_ITEM; index <= MONSTER_MAX; index++)
|
||||
{
|
||||
evolFlag = FALSE;
|
||||
index2 = (s16)index;
|
||||
GetPokemonEvolveConditions(index2, &evolveConditions);
|
||||
if ((evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_NONE) || (param_1->speciesNum != evolveConditions.preEvolution.evolveFrom)) continue;
|
||||
friendArea = ((u8 (*)(s32))GetFriendArea)(index2); // UB
|
||||
uVar2 = GetFriendArea(param_1->speciesNum);
|
||||
sub_8092638(friendArea,&local_40,FALSE,FALSE);
|
||||
if (!local_40.hasFriendArea) {
|
||||
evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_FRIEND_AREA;
|
||||
evolFlag = TRUE;
|
||||
}
|
||||
else {
|
||||
numPokemon = local_40.unk2;
|
||||
if (friendArea == uVar2) {
|
||||
numPokemon--;
|
||||
}
|
||||
if (local_40.numPokemon <= numPokemon) {
|
||||
evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_ROOM;
|
||||
evolFlag = TRUE;
|
||||
}
|
||||
}
|
||||
if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_LEVEL) {
|
||||
if ((evolveStatus->evolutionConditionStatus & EVOLUTION_GOOD)) continue;
|
||||
if (param_1->level < evolveConditions.evolutionRequirements.mainRequirement) {
|
||||
evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_LEVEL;
|
||||
evolFlag = TRUE;
|
||||
}
|
||||
}
|
||||
else if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_IQ) {
|
||||
if (param_1->IQ < evolveConditions.evolutionRequirements.mainRequirement) {
|
||||
evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_IQ;
|
||||
evolFlag = TRUE;
|
||||
}
|
||||
}
|
||||
else if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_ITEM) {
|
||||
if (param_3 != 0) {
|
||||
if ((evolveStatus->evoItem1 != evolveConditions.evolutionRequirements.mainRequirement) &&
|
||||
(evolveStatus->evoItem2 != evolveConditions.evolutionRequirements.mainRequirement)) {
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
evolFlag = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FindItemInInventory(evolveConditions.evolutionRequirements.mainRequirement) < 0) {
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
evolFlag = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (evolveConditions.evolutionRequirements.additionalRequirement == 4) {
|
||||
if (param_3 != 0) {
|
||||
if ((evolveStatus->evoItem1 != ITEM_LINK_CABLE) && (evolveStatus->evoItem2 != ITEM_LINK_CABLE))
|
||||
{
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (-1 < FindItemInInventory(ITEM_LINK_CABLE)) goto _0808F6CA;
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 5) {
|
||||
if ((param_1->offense).att[0] > (param_1->offense).def[0]) goto _0808F6CA;
|
||||
else continue;
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 6) {
|
||||
if ((param_1->offense).att[0] < (param_1->offense).def[0]) goto _0808F6CA;
|
||||
else continue;
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 7) {
|
||||
if ((param_1->offense).att[0] == (param_1->offense).def[0]) goto _0808F6CA;
|
||||
else continue;
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 8)
|
||||
{
|
||||
if (param_3 != 0) {
|
||||
if ((evolveStatus->evoItem1 != ITEM_SUN_RIBBON) && (evolveStatus->evoItem2 != ITEM_SUN_RIBBON))
|
||||
{
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
continue;
|
||||
}
|
||||
else goto _0808F6CA;
|
||||
}
|
||||
else {
|
||||
if (-1 < FindItemInInventory(ITEM_SUN_RIBBON)) goto _0808F6CA;
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 9) {
|
||||
if (param_3 != 0) {
|
||||
if ((evolveStatus->evoItem1 != ITEM_LUNAR_RIBBON) && (evolveStatus->evoItem2 != ITEM_LUNAR_RIBBON))
|
||||
{
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
continue;
|
||||
}
|
||||
else goto _0808F6CA;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (-1 < FindItemInInventory(ITEM_LUNAR_RIBBON)) goto _0808F6CA;
|
||||
evolveStatus->evolutionConditionStatus |= defaultReason;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 0xb) {
|
||||
if ((evolveStatus->unk6 & 1) == 0) goto _0808F6CA;
|
||||
else continue;
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 0xc) {
|
||||
if ((evolveStatus->unk6 & 1)) goto _0808F6CA;
|
||||
else continue;
|
||||
}
|
||||
else if (evolveConditions.evolutionRequirements.additionalRequirement == 10) {
|
||||
if (param_3 != 0) {
|
||||
if ((evolveStatus->evoItem1 == ITEM_BEAUTY_SCARF) || (evolveStatus->evoItem2 == ITEM_BEAUTY_SCARF)) goto _0808F6CA;
|
||||
else continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( FindItemInInventory(ITEM_BEAUTY_SCARF) < 0) evolFlag = TRUE;
|
||||
}
|
||||
}
|
||||
_0808F6CA:
|
||||
if (!evolFlag) {
|
||||
evolveStatus->evolutionConditionStatus |= EVOLUTION_GOOD;
|
||||
evolveStatus->targetEvolveSpecies = index2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_808F700(struct PokemonStruct *pokemon)
|
||||
{
|
||||
struct EvolveStatus evolveStatus;
|
||||
|
||||
sub_808F468(pokemon, &evolveStatus, 0);
|
||||
if ((evolveStatus.evolutionConditionStatus & EVOLUTION_GOOD)) {
|
||||
return 1;
|
||||
}
|
||||
else if ((evolveStatus.evolutionConditionStatus & EVOLUTION_NO_MORE)) {
|
||||
return 2;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_808F734(struct PokemonStruct *pokemon, s16 _species)
|
||||
{
|
||||
u32 uVar1;
|
||||
int iVar3;
|
||||
struct PokemonStruct pokeStruct;
|
||||
s32 species = _species;
|
||||
|
||||
iVar3 = 0;
|
||||
pokeStruct = *pokemon;
|
||||
uVar1 = sub_808F798(pokemon, species);
|
||||
if (species == MONSTER_NINJASK) {
|
||||
pokeStruct.isTeamLeader = FALSE;
|
||||
pokeStruct.heldItem.id = ITEM_NOTHING;
|
||||
BoundedCopyStringtoBuffer(pokeStruct.name, GetMonSpecies(MONSTER_SHEDINJA),POKEMON_NAME_LENGTH);
|
||||
iVar3 = sub_808F798(&pokeStruct,MONSTER_SHEDINJA);
|
||||
}
|
||||
if (iVar3 != 0) {
|
||||
sub_8097848();
|
||||
}
|
||||
return uVar1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "global.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "file_system.h"
|
||||
#include "item.h"
|
||||
#include "moves.h"
|
||||
|
|
@ -29,7 +30,6 @@ extern u16 gLevelCurrentPokeId;
|
|||
extern struct LevelData gLevelCurrentData[];
|
||||
|
||||
|
||||
extern s16 GetBaseSpecies(s16);
|
||||
extern int sprintf(char *, const char *, ...);
|
||||
extern u32 ReturnIntFromChar(u8 r0);
|
||||
extern void CopyAndResetMoves(void*, void*);
|
||||
|
|
@ -524,7 +524,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po
|
|||
u32 somestruct2_80943A0;
|
||||
|
||||
a1->unk0 = pokemon->unk0;
|
||||
a1->unkHasNextStage = pokemon->unkHasNextStage;
|
||||
a1->level = pokemon->level;
|
||||
a1->IQ = pokemon->IQ;
|
||||
a1->IQSkills = pokemon->IQSkills;
|
||||
sub_808E6F4(&a1->unk54);
|
||||
|
|
@ -532,7 +532,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po
|
|||
a1->isTeamLeader = pokemon->isTeamLeader;
|
||||
a1->unkA = a3;
|
||||
a1->speciesNum = pokemon->speciesNum;
|
||||
a1->unk50 = pokemon->unk24;
|
||||
a1->tacticIndex = pokemon->tacticIndex;
|
||||
a1->unk12 = pokemon->pokeHP;
|
||||
a1->unk10 = pokemon->pokeHP;
|
||||
|
||||
|
|
@ -541,7 +541,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po
|
|||
a1->offense.def[i] = pokemon->offense.def[i];
|
||||
}
|
||||
|
||||
a1->unk18 = pokemon->unk1C;
|
||||
a1->currExp = pokemon->currExp;
|
||||
CopyAndResetMoves(&a1->moves, &pokemon->moves);
|
||||
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
|
||||
|
|
@ -578,13 +578,13 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct
|
|||
s32 i;
|
||||
|
||||
pokemon->unk0 = a2->unk0;
|
||||
pokemon->unkHasNextStage = a2->unkHasNextStage;
|
||||
pokemon->level = a2->level;
|
||||
pokemon->IQ = a2->IQ;
|
||||
pokemon->IQSkills = a2->IQSkills;
|
||||
pokemon->dungeonLocation = a2->dungeonLocation;
|
||||
pokemon->isTeamLeader = a2->isTeamLeader;
|
||||
pokemon->speciesNum = a2->speciesNum;
|
||||
pokemon->unk24 = a2->unk50;
|
||||
pokemon->tacticIndex = a2->tacticIndex;
|
||||
pokemon->pokeHP = a2->unk12;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
|
|
@ -592,7 +592,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct
|
|||
pokemon->offense.def[i] = a2->offense.def[i];
|
||||
}
|
||||
|
||||
pokemon->unk1C = a2->unk18;
|
||||
pokemon->currExp = a2->currExp;
|
||||
CopyBareMoveData(pokemon->moves, &a2->moves);
|
||||
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
|
||||
|
|
@ -771,7 +771,7 @@ s32 sub_808E218(struct unkStruct_808E218_arg* a1, struct PokemonStruct* pokemon)
|
|||
ptr = DecompressMoveID(ptr, &result);
|
||||
value = *ptr++;
|
||||
|
||||
if (value > evolve_sequence[i].unkHasNextStage) {
|
||||
if (value > evolve_sequence[i].level) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -815,14 +815,14 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2)
|
|||
s32 i;
|
||||
|
||||
a2[0].specesNum = pokemon->speciesNum;
|
||||
a2[0].unkHasNextStage = pokemon->unkHasNextStage;
|
||||
a2[0].level = pokemon->level;
|
||||
|
||||
count = 1;
|
||||
species = pokemon->speciesNum;
|
||||
i = 0;
|
||||
|
||||
for (; i < 2; i++) {
|
||||
if (!pokemon->unkC[i].unk0) {
|
||||
if (!pokemon->unkC[i].level) {
|
||||
break;
|
||||
}
|
||||
species = GetPokemonEvolveFrom(species);
|
||||
|
|
@ -830,7 +830,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2)
|
|||
break;
|
||||
}
|
||||
a2[1 + i].speciesNum = species;
|
||||
a2[1 + i].unkHasNextStage = pokemon->unkC[i].unk0;
|
||||
a2[1 + i].level = pokemon->unkC[i].level;
|
||||
// wrong increment order:
|
||||
count++;
|
||||
}
|
||||
|
|
@ -843,7 +843,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2)
|
|||
struct unkPokeSubStruct_C* has_next_stage;
|
||||
|
||||
a2[0].speciesNum = pokemon->speciesNum;
|
||||
a2[0].unkHasNextStage = pokemon->unkHasNextStage;
|
||||
a2[0].level = pokemon->level;
|
||||
|
||||
count = 1;
|
||||
species = pokemon->speciesNum;
|
||||
|
|
@ -852,7 +852,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2)
|
|||
stage = &a2[1];
|
||||
|
||||
for (; i < 2; i++) {
|
||||
if (!has_next_stage->unk0) {
|
||||
if (!has_next_stage->level) {
|
||||
break;
|
||||
}
|
||||
species = GetPokemonEvolveFrom(species);
|
||||
|
|
@ -860,7 +860,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2)
|
|||
break;
|
||||
}
|
||||
stage->speciesNum = species;
|
||||
stage->unkHasNextStage = has_next_stage->unk0;
|
||||
stage->level = has_next_stage->level;
|
||||
stage++;
|
||||
count++;
|
||||
has_next_stage++;
|
||||
|
|
|
|||
|
|
@ -605,7 +605,7 @@ void DisplayMissionObjectives(void)
|
|||
mail = GetMailatIndex(local_94);
|
||||
sub_803B6B0(10,16,3,gUnknown_203B330->unk10);
|
||||
// %dF
|
||||
sprintfStatic(buffer,gUnknown_80E1F3C,mail->dungeon.floor);
|
||||
sprintfStatic(buffer,gUnknown_80E1F3C,mail->unk4.dungeon.floor);
|
||||
xxx_call_draw_string(0x15,16,buffer,gUnknown_203B330->unk10,0);
|
||||
// Rescue #C6%s#R
|
||||
sprintfStatic(buffer,gUnknown_80E1F40,GetMonSpecies(mail->clientSpecies));
|
||||
|
|
@ -624,11 +624,11 @@ void DisplayMissionObjectives(void)
|
|||
for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++)
|
||||
{
|
||||
jobInfo = GetJobSlotInfo(jobSlotIdx);
|
||||
if ((((jobInfo->dungeon.id == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0)
|
||||
if ((((jobInfo->unk4.dungeon.id == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0)
|
||||
) && (jobInfo->mailType != MAIL_TYPE_SUSPENDED_JOB)) && (jobInfo->mailType != MAIL_TYPE_UNK7)) {
|
||||
sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10);
|
||||
if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) {
|
||||
sprintfStatic(buffer1,gUnknown_80E1F3C,jobInfo->dungeon.floor);
|
||||
sprintfStatic(buffer1,gUnknown_80E1F3C,jobInfo->unk4.dungeon.floor);
|
||||
xxx_call_draw_string(21,yCoord,buffer1,gUnknown_203B330->unk10,0);
|
||||
}
|
||||
switch(jobInfo->missionType)
|
||||
|
|
|
|||
|
|
@ -635,7 +635,7 @@ u32 ConvertMenutoRescuePasswordState(u32 unused)
|
|||
u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *param_3)
|
||||
{
|
||||
if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) ||
|
||||
(param_3->dungeon.floor >= GetDungeonFloorCount(param_3->dungeon.id)) ||
|
||||
(param_3->unk4.dungeon.floor >= GetDungeonFloorCount(param_3->unk4.dungeon.id)) ||
|
||||
(param_3->clientSpecies == MONSTER_NONE) || (MONSTER_MAX < param_3->clientSpecies) ||
|
||||
(IsInvalidItemReward(param_3->item.id))) {
|
||||
return PASSWORD_ENTRY_INCORRECT_PASSWORD;
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
#include "rescue_team_info.h"
|
||||
#include "code_8092334.h"
|
||||
#include "text_util.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
EWRAM_DATA_2 struct RescueTeamData *gRescueTeamInfoRef = {0};
|
||||
EWRAM_DATA struct RescueTeamData gRescueTeamInfo = {0};
|
||||
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size);
|
||||
|
||||
extern const u8 *gRescueTeamRanks[];
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ typedef bool8 (*MoveCallback)(struct Entity *pokemon, struct Entity *target, str
|
|||
|
||||
struct NaturePowerMove
|
||||
{
|
||||
s16 moveID;
|
||||
u16 moveID;
|
||||
u16 unk2;
|
||||
MoveCallback move;
|
||||
};
|
||||
|
|
@ -218,7 +218,7 @@ bool8 TransformMoveAction(struct Entity * pokemon, struct Entity * target, struc
|
|||
}
|
||||
else {
|
||||
move->PP = 0;
|
||||
sub_8078E18(pokemon,target);
|
||||
TransformStatusTarget(pokemon,target);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1396,7 +1396,7 @@ void UpdateThankYouMailText(void)
|
|||
else
|
||||
gUnknown_203B2C4->unk53C.itemRewards[0] = ITEM_NOTHING; // unk558
|
||||
gUnknown_203B2C4->unk53C.quantity = 1; // unk55B
|
||||
gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0); // unk560
|
||||
gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); // unk560
|
||||
gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559
|
||||
gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A
|
||||
gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
#include "global.h"
|
||||
#include "constants/friend_area.h"
|
||||
#include "pokemon.h"
|
||||
#include "constants/input.h"
|
||||
#include "file_system.h"
|
||||
#include "menu.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "input.h"
|
||||
#include "team_inventory.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
|
|
@ -10,17 +16,45 @@
|
|||
#include "wigglytuff_shop.h"
|
||||
#include "felicity_bank.h"
|
||||
#include "code_80130A8.h"
|
||||
#include "code_8021774_pre.h"
|
||||
#include "code_801EE10_mid.h"
|
||||
#include "code_8021774.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_800D090.h"
|
||||
#include "event_flag.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
|
||||
extern struct UnkTextStruct2 gUnknown_80DC534;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC564;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC54C;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC534;
|
||||
struct unkStruct_203B280
|
||||
{
|
||||
/* 0x0 */ u8 friendAreas[NUM_FRIEND_AREAS];
|
||||
/* 0x3C */ u32 mode;
|
||||
struct MenuInputStruct unk40;
|
||||
s32 unk74;
|
||||
struct UnkTextStruct2 *unk78;
|
||||
struct UnkTextStruct2 unk7C[4];
|
||||
u8 unkDC[4];
|
||||
};
|
||||
EWRAM_DATA_2 struct unkStruct_203B280 *gUnknown_203B280 = {0};
|
||||
EWRAM_DATA_2 u32 gUnknown_203B284 = {0};
|
||||
EWRAM_DATA_2 u16 gUnknown_203B288 = {0};
|
||||
EWRAM_DATA_2 u16 gUnknown_203B28A = {0};
|
||||
|
||||
struct unkStruct_203B28C
|
||||
{
|
||||
struct MenuInputStructSub unk0;
|
||||
/* 0xC */ u8 friendArea;
|
||||
bool8 unkD;
|
||||
s16 unkE[0x10];
|
||||
u32 unk30[0x10];
|
||||
/* 0x70 */ s32 numPokemoninFriendArea;
|
||||
s32 unk74;
|
||||
struct UnkTextStruct2 *unk78;
|
||||
struct UnkTextStruct2 unk7C[4];
|
||||
u8 unkDC[4];
|
||||
};
|
||||
EWRAM_DATA_2 struct unkStruct_203B28C *gUnknown_203B28C = {0};
|
||||
|
||||
EWRAM_DATA_2 struct WigglytuffShop *gWigglytuffShop = {0};
|
||||
extern u8 *gFriendAreas;
|
||||
|
||||
extern u8 gUnknown_202E628[];
|
||||
extern u32 gUnknown_202DE30[2];
|
||||
|
|
@ -35,13 +69,31 @@ extern const u8 *gUnknown_80D4928[];
|
|||
extern const u8 *gUnknown_80D4934[];
|
||||
extern const u8 *gUnknown_80D4970[];
|
||||
extern const u8 *gUnknown_80D4978[];
|
||||
extern struct UnkTextStruct2 gUnknown_80DC464;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC47C;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC4BC;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC4D8;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC534;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC54C;
|
||||
extern struct UnkTextStruct2 gUnknown_80DC564;
|
||||
|
||||
extern u8 *gUnknown_80D49BC[];
|
||||
extern u8 gUnknown_80DC4A4[];
|
||||
extern u8 gUnknown_80DC494[];
|
||||
extern u8 gUnknown_80DC4AC[];
|
||||
extern u8 gUnknown_80DC4F0[];
|
||||
extern u8 gUnknown_80DC518[];
|
||||
extern u8 gUnknown_80DC524[];
|
||||
|
||||
u8 sub_8021700(u32);
|
||||
void sub_8092578(u8 *buffer, u8 index, u8 r2);
|
||||
extern void DrawTeamMoneyBox(u32);
|
||||
extern void sub_803AA34();
|
||||
extern u8 sub_803ABC8(void);
|
||||
extern u8 sub_802132C(void);
|
||||
extern void sub_8022380(void);
|
||||
bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 param_4);
|
||||
void sub_8023354(u8 param_1);
|
||||
extern bool8 sub_80023E4(u32);
|
||||
extern void CreateWigglytuffConfirmFriendAreaMenu(void);
|
||||
extern u8 sub_8099B94(void);
|
||||
extern void sub_8099AFC(u32, u32, u32);
|
||||
|
|
@ -65,6 +117,471 @@ void SetWigglytuffState(s32);
|
|||
void sub_8021D5C(void);
|
||||
void UpdateWigglytuffDialogue(void);
|
||||
|
||||
extern void sub_8008C54(u32);
|
||||
|
||||
void sub_8021878(void);
|
||||
void sub_8021894(void);
|
||||
void sub_8021820(void);
|
||||
void sub_8021A60(void);
|
||||
s32 sub_8021664(void);
|
||||
void sub_8021410(void);
|
||||
s32 sub_8021B58(s16 species);
|
||||
|
||||
extern void PlayMenuSoundEffect(u32);
|
||||
|
||||
bool8 sub_80211AC(u32 mode, u32 param_2)
|
||||
{
|
||||
if(sub_8021700(mode))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8);
|
||||
gUnknown_203B280->mode = mode;
|
||||
gUnknown_203B280->unk74 = param_2;
|
||||
gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74];
|
||||
sub_8006518(gUnknown_203B280->unk7C);
|
||||
gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C;
|
||||
gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B280->unk7C, 1, 1);
|
||||
sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2);
|
||||
if(gUnknown_203B284 == gUnknown_203B280->mode)
|
||||
{
|
||||
gUnknown_203B280->unk40.menuIndex = gUnknown_203B288;
|
||||
gUnknown_203B280->unk40.unk1E = gUnknown_203B28A;
|
||||
sub_8013984(&gUnknown_203B280->unk40);
|
||||
}
|
||||
sub_8021410();
|
||||
sub_8021494();
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_8021274(bool8 param_1)
|
||||
{
|
||||
if (!param_1) {
|
||||
sub_8013660(&gUnknown_203B280->unk40);
|
||||
return 0;
|
||||
}
|
||||
switch(GetKeyPress(&gUnknown_203B280->unk40))
|
||||
{
|
||||
case INPUT_B_BUTTON:
|
||||
PlayMenuSoundEffect(1);
|
||||
return 2;
|
||||
case INPUT_A_BUTTON:
|
||||
if ((gUnknown_203B280->mode == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventoryRef->teamMoney))
|
||||
{
|
||||
PlayMenuSoundEffect(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayMenuSoundEffect(0);
|
||||
}
|
||||
return 3;
|
||||
case INPUT_START_BUTTON:
|
||||
PlayMenuSoundEffect(4);
|
||||
return 4;
|
||||
default:
|
||||
if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) {
|
||||
sub_8021410();
|
||||
sub_8021494();
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_802132C(void)
|
||||
{
|
||||
return gUnknown_203B280->friendAreas[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex];
|
||||
}
|
||||
|
||||
void sub_8021354(bool8 param_1)
|
||||
{
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B280->unk7C,0,0);
|
||||
gUnknown_203B280->unk40.unk22 = sub_8021664();
|
||||
sub_8013984(&gUnknown_203B280->unk40);
|
||||
sub_8021410();
|
||||
sub_8021494();
|
||||
if (param_1) {
|
||||
AddMenuCursorSprite(&gUnknown_203B280->unk40);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80213A0(void)
|
||||
{
|
||||
if(gUnknown_203B280)
|
||||
{
|
||||
gUnknown_203B284 = gUnknown_203B280->mode;
|
||||
gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex;
|
||||
gUnknown_203B28A = gUnknown_203B280->unk40.unk1E;
|
||||
gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B280->unk7C, 1, 1);
|
||||
MemoryFree(gUnknown_203B280);
|
||||
gUnknown_203B280 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
NAKED
|
||||
void sub_8021410(void)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4,lr}\n"
|
||||
"\tldr r4, _08021490\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0xDC\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tstrb r1, [r0]\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0xDD\n"
|
||||
"\tstrb r2, [r0]\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0xDE\n"
|
||||
"\tmovs r1, 0xC\n"
|
||||
"\tstrb r1, [r0]\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0xDF\n"
|
||||
"\tstrb r2, [r0]\n"
|
||||
"\tbl ResetUnusedInputStruct\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x7C\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"\tbl sub_800641C\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x5A\n"
|
||||
"\tmovs r1, 0\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, 0x74]\n"
|
||||
"\tlsls r1, r3, 1\n"
|
||||
"\tadds r1, r3\n"
|
||||
"\tlsls r1, 3\n"
|
||||
"\tadds r1, r2, r1\n"
|
||||
"\tadds r1, 0x8A\n"
|
||||
"\tasrs r3, r0, 16\n"
|
||||
"\tlsrs r0, 16\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tldr r1, [r2, 0x74]\n"
|
||||
"\tlsls r0, r1, 1\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tlsls r0, 3\n"
|
||||
"\tadds r2, r0\n"
|
||||
"\tadds r3, 0x2\n"
|
||||
"\tadds r2, 0x8C\n"
|
||||
"\tstrh r3, [r2]\n"
|
||||
"\tbl ResetUnusedInputStruct\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tadds r0, 0x7C\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"
|
||||
"_08021490: .4byte gUnknown_203B280");
|
||||
|
||||
}
|
||||
|
||||
void sub_8021494(void)
|
||||
{
|
||||
u8 friendAreaIndex;
|
||||
s32 index;
|
||||
u8 buffer1 [80];
|
||||
u8 buffer2 [80];
|
||||
|
||||
sub_8008C54(gUnknown_203B280->unk74);
|
||||
sub_80073B8(gUnknown_203B280->unk74);
|
||||
xxx_call_draw_string(10,0,gUnknown_80DC494,gUnknown_203B280->unk74,0); // Friend Areas
|
||||
sub_8012BC4(gUnknown_203B280->unkDC[2] * 8 + 4,0,(gUnknown_203B280->unk40).unk1E + 1,1,7,gUnknown_203B280->unk74);
|
||||
|
||||
for(index = 0; index < (gUnknown_203B280->unk40).unk1A; index++)
|
||||
{
|
||||
friendAreaIndex = gUnknown_203B280->friendAreas[(gUnknown_203B280->unk40).unk1E * (gUnknown_203B280->unk40).unk1C + index];
|
||||
if (gUnknown_203B280->mode == 2) {
|
||||
sub_8092578(buffer1,friendAreaIndex,TRUE);
|
||||
|
||||
if (GetFriendAreaPrice(friendAreaIndex) <= gTeamInventoryRef->teamMoney) {
|
||||
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer1,gUnknown_203B280->unk74,0);
|
||||
}
|
||||
else {
|
||||
sprintfStatic(buffer2,gUnknown_80DC4A4,buffer1); // {RED} %s {END}
|
||||
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer2,gUnknown_203B280->unk74,0);
|
||||
}
|
||||
}
|
||||
else if (gUnknown_203B280->mode == 0) {
|
||||
if (gFriendAreas[friendAreaIndex] == 1) {
|
||||
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),GetFriendAreaName(friendAreaIndex),gUnknown_203B280->unk74,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintfStatic(buffer2,gUnknown_80DC4AC,GetFriendAreaName(friendAreaIndex)); // {GREEN} %s {END}
|
||||
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer2,gUnknown_203B280->unk74,0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),GetFriendAreaName(friendAreaIndex),gUnknown_203B280->unk74,0);
|
||||
}
|
||||
}
|
||||
sub_80073E0(gUnknown_203B280->unk74);
|
||||
}
|
||||
|
||||
s32 sub_8021664(void)
|
||||
{
|
||||
s32 index;
|
||||
s32 counter;
|
||||
|
||||
counter = 0;
|
||||
switch(gUnknown_203B280->mode)
|
||||
{
|
||||
case 0:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
gUnknown_203B280->friendAreas[counter] = index;
|
||||
counter++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if(gFriendAreas[index])
|
||||
{
|
||||
gUnknown_203B280->friendAreas[counter] = index;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if (gFriendAreas[index] == 0) {
|
||||
switch(GetFriendAreaUnlockCondition(index))
|
||||
{
|
||||
case UNLOCK_SHOP_STORY:
|
||||
gUnknown_203B280->friendAreas[counter] = index;
|
||||
counter++;
|
||||
break;
|
||||
case UNLOCK_SHOP_POST_GAME:
|
||||
if(sub_80023E4(6) != 0) {
|
||||
gUnknown_203B280->friendAreas[counter] = index;
|
||||
counter++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return counter;
|
||||
}
|
||||
|
||||
|
||||
u8 sub_8021700(u32 mode)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case 0:
|
||||
return FALSE;
|
||||
case 1:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if (gFriendAreas[index] != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
|
||||
{
|
||||
if (gFriendAreas[index] == 0) {
|
||||
switch(GetFriendAreaUnlockCondition(index))
|
||||
{
|
||||
case UNLOCK_SHOP_STORY:
|
||||
return FALSE;
|
||||
case UNLOCK_SHOP_POST_GAME:
|
||||
if(sub_80023E4(6) != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8021774(u8 friendArea, bool8 param_2, s32 param_3)
|
||||
{
|
||||
gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8);
|
||||
gUnknown_203B28C->friendArea = friendArea;
|
||||
gUnknown_203B28C->unkD = param_2;
|
||||
sub_801317C(&gUnknown_203B28C->unk0);
|
||||
sub_8021A60();
|
||||
gUnknown_203B28C->unk74 = param_3;
|
||||
gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3];
|
||||
sub_8006518(gUnknown_203B28C->unk7C);
|
||||
gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8;
|
||||
sub_8021820();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 sub_80217EC(void)
|
||||
{
|
||||
switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74))
|
||||
{
|
||||
case 2:
|
||||
PlayMenuSoundEffect(1);
|
||||
return 2;
|
||||
case 1:
|
||||
PlayMenuSoundEffect(0);
|
||||
return 3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8021820(void)
|
||||
{
|
||||
sub_8021878();
|
||||
sub_8021894();
|
||||
}
|
||||
|
||||
void sub_8021830(void)
|
||||
{
|
||||
if(gUnknown_203B28C)
|
||||
{
|
||||
gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B28C->unk7C, 1, 1);
|
||||
MemoryFree(gUnknown_203B28C);
|
||||
gUnknown_203B28C = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8021878(void)
|
||||
{
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B28C->unk7C, 1, 1);
|
||||
}
|
||||
|
||||
void sub_8021894(void)
|
||||
{
|
||||
u8 *string;
|
||||
u32 y;
|
||||
u32 x;
|
||||
s32 index;
|
||||
u8 buffer1 [256];
|
||||
u8 buffer2 [100];
|
||||
|
||||
sub_80073B8(gUnknown_203B28C->unk74);
|
||||
sub_8092578(buffer1,gUnknown_203B28C->friendArea,FALSE);
|
||||
xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0);
|
||||
string = GetFriendAreaDescription(gUnknown_203B28C->friendArea);
|
||||
xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0);
|
||||
if (gUnknown_203B28C->unkD != 0) {
|
||||
xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0);
|
||||
}
|
||||
else {
|
||||
xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants
|
||||
}
|
||||
sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4);
|
||||
if (gUnknown_203B28C->unkD != 0) {
|
||||
sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4);
|
||||
}
|
||||
else {
|
||||
sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4);
|
||||
}
|
||||
sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4);
|
||||
sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4);
|
||||
sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4);
|
||||
for(index = 0; index < gUnknown_203B28C->numPokemoninFriendArea; index++)
|
||||
{
|
||||
x = (index % 3) * 63 + 7;
|
||||
y = (index / 3) * 12 + 0x47;
|
||||
sub_808D930(buffer2, gUnknown_203B28C->unkE[index]);
|
||||
switch(gUnknown_203B28C->unk30[index])
|
||||
{
|
||||
case 0: // Not recruited/seen
|
||||
xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ???
|
||||
break;
|
||||
case 1: // Seen but not recruited
|
||||
xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s
|
||||
break;
|
||||
case 2:
|
||||
sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR}
|
||||
xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
sub_80073E0(gUnknown_203B28C->unk74);
|
||||
}
|
||||
|
||||
void sub_8021A60(void)
|
||||
{
|
||||
s32 sVar4;
|
||||
s32 iVar6;
|
||||
s32 index;
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
gUnknown_203B28C->numPokemoninFriendArea = 0;
|
||||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
gUnknown_203B28C->unkE[index] = 0;
|
||||
gUnknown_203B28C->unk30[index] = 0;
|
||||
}
|
||||
for(index = 0; index < 0x1A8; index++)
|
||||
{
|
||||
s32 index2 = (s16)index;
|
||||
if ((gUnknown_203B28C->friendArea == GetFriendArea(index2)) &&
|
||||
(index2 == GetBaseSpeciesNoUnown(index2))) {
|
||||
iVar6 = gUnknown_203B28C->numPokemoninFriendArea;
|
||||
gUnknown_203B28C->unkE[iVar6] = index2;
|
||||
gUnknown_203B28C->numPokemoninFriendArea = iVar6 + 1;
|
||||
}
|
||||
}
|
||||
for(index = 0; index < 0x1A8; index++)
|
||||
{
|
||||
if ((sub_8098134(index)) && (sVar4 = sub_8021B58(index), sVar4 != -1)) {
|
||||
gUnknown_203B28C->unk30[sVar4] = 1;
|
||||
}
|
||||
}
|
||||
for(index = 0; index < NUM_MONSTERS; index++)
|
||||
{
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[index];
|
||||
if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) &&
|
||||
(sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) {
|
||||
gUnknown_203B28C->unk30[sVar4] = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_8021B58(s16 species)
|
||||
{
|
||||
s32 baseSpecies;
|
||||
int index;
|
||||
|
||||
baseSpecies = GetBaseSpeciesNoUnown(species);
|
||||
for(index = 0; index < gUnknown_203B28C->numPokemoninFriendArea; index++)
|
||||
{
|
||||
if (baseSpecies == gUnknown_203B28C->unkE[index]) return index;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool8 CreateWigglytuffShop(bool32 isAsleep)
|
||||
{
|
||||
char *string;
|
||||
|
|
@ -248,16 +765,16 @@ void UpdateWigglytuffDialogue(void)
|
|||
break;
|
||||
case BUY_FRIEND_AREA:
|
||||
CreateWigglytuffConfirmFriendAreaMenu();
|
||||
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0);
|
||||
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE);
|
||||
gUnknown_202DE30[0] = gWigglytuffShop->friendAreaPrice;
|
||||
sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][5],0,5,gWigglytuffShop->unk1C,0,4,0,gWigglytuffShop->unkCC,0xc);
|
||||
break;
|
||||
case FRIEND_AREA_INFO:
|
||||
sub_8021774(gWigglytuffShop->chosenFriendArea,0,2);
|
||||
sub_8021774(gWigglytuffShop->chosenFriendArea,FALSE,2);
|
||||
break;
|
||||
case CONFIRM_BUY_FRIEND_AREA:
|
||||
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKD;
|
||||
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0);
|
||||
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE);
|
||||
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][6],0,gWigglytuffShop->unkCC,0x10d);
|
||||
break;
|
||||
case WIGGLYTUFF_UNKD:
|
||||
|
|
@ -295,7 +812,7 @@ void UpdateWigglytuffDialogue(void)
|
|||
sub_8023354(1);
|
||||
break;
|
||||
case DISPLAY_POKEMON_FRIEND_AREA_INFO:
|
||||
sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,0,0);
|
||||
sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,FALSE,FALSE);
|
||||
if (uStack_14.hasFriendArea) {
|
||||
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_HAS_FRIEND_AREA;
|
||||
}
|
||||
|
|
@ -324,7 +841,7 @@ void UpdateWigglytuffDialogue(void)
|
|||
}
|
||||
string = GetMonSpecies(gWigglytuffShop->chosenSpecies);
|
||||
strcpy(gAvailablePokemonNames,string);
|
||||
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0);
|
||||
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE);
|
||||
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][14],0,gWigglytuffShop->unkCC,0x10d);
|
||||
break;
|
||||
case WIGGLYTUFF_CHECK_HAS_FRIEND_AREA:
|
||||
|
|
|
|||
|
|
@ -1162,7 +1162,7 @@ void sub_8028FDC(void)
|
|||
{
|
||||
case 8:
|
||||
mail = GetMailatIndex(gUnknown_203B2C0->mailIndex);
|
||||
if(!sub_80A2824(mail->dungeon.id))
|
||||
if(!sub_80A2824(mail->unk4.dungeon.id))
|
||||
{
|
||||
SetFriendRescueCounterState(CANT_GO_TO_DUNGEON);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#include "code_8094F88.h"
|
||||
#include "menu_input.h"
|
||||
#include "code_80130A8.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
struct unkStruct_203B2C8
|
||||
{
|
||||
|
|
@ -52,7 +53,6 @@ extern void sub_802B624(void);
|
|||
extern void sub_802F204(struct unkStruct_802F204 *, u32);
|
||||
extern void sub_803C37C(struct DungeonLocation *, u32, u8 *);
|
||||
extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32);
|
||||
extern bool8 sub_80023E4(u32);
|
||||
|
||||
ALIGNED(4) const char gRescueTeamNamePlaceholder[] = "????";
|
||||
|
||||
|
|
@ -175,8 +175,8 @@ void sub_802B3E0(void)
|
|||
gUnknown_203B2C8->unk114.moneyReward = 0;
|
||||
sub_8097790();
|
||||
mail = GetMailatIndex(gUnknown_203B2C8->unk1);
|
||||
sub_803C37C(&mail->dungeon, 0, gUnknown_203B2C8->unk114.itemRewards);
|
||||
gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0);
|
||||
sub_803C37C(&mail->unk4.dungeon, 0, gUnknown_203B2C8->unk114.itemRewards);
|
||||
gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0);
|
||||
gUnknown_203B2C8->unk114.itemRewards[1] = ITEM_NOTHING;
|
||||
gUnknown_203B2C8->unk114.itemRewards[2] = ITEM_NOTHING;
|
||||
gUnknown_203B2C8->unk114.quantity = 10;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ void CreateMailMenu(void)
|
|||
y = sub_8013800(&gUnknown_203B2D8->input, index);
|
||||
sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38);
|
||||
PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct());
|
||||
sprintfStatic(buffer, GetPokemonMailHeadline(mail->dungeon.floor), gAvailablePokemonNames);
|
||||
sprintfStatic(buffer, GetPokemonMailHeadline(mail->unk4.dungeon.floor), gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ void sub_802CAA4(void) {
|
|||
{
|
||||
case 5:
|
||||
gUnknown_203B2F0->unk10C[loopMax].text = gUnknown_80DFD70; // Take Job
|
||||
if(sub_809693C(mail) || !sub_80A2824(mail->dungeon.id))
|
||||
if(sub_809693C(mail) || !sub_80A2824(mail->unk4.dungeon.id))
|
||||
{
|
||||
gUnknown_203B2F0->unk10C[loopMax].menuAction = -1;
|
||||
}
|
||||
|
|
@ -679,7 +679,7 @@ void sub_802D2A8(void)
|
|||
MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->mail->unk14,0x28);
|
||||
MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->mail->unk18,0x78);
|
||||
}
|
||||
switch(gUnknown_203B2F8->mail->wonderMail.dungeon.id)
|
||||
switch(gUnknown_203B2F8->mail->wonderMail.unk4.dungeon.id)
|
||||
{
|
||||
// NOTE: subtract 1 from each of the case as the input??
|
||||
case DUNGEON_ODDITY_CAVE: // 0x2B
|
||||
|
|
@ -730,8 +730,8 @@ void sub_802D2A8(void)
|
|||
case 0x10:
|
||||
sub_803B35C(&gUnknown_203B2F8->mail->wonderMail,&gUnknown_203B2F8->unk14);
|
||||
gUnknown_203B2F8->unk14.unk0[0] = 3;
|
||||
gUnknown_203B2F8->unk14.unk44 = 0;
|
||||
gUnknown_203B2F8->unk14.unk50[0] = gUnknown_203B2F8->mail->unk18;
|
||||
gUnknown_203B2F8->unk14.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
gUnknown_203B2F8->unk14.unk50 = gUnknown_203B2F8->mail->unk18;
|
||||
sub_802DE84(&gUnknown_203B2F8->unk14);
|
||||
break;
|
||||
}
|
||||
|
|
@ -928,7 +928,7 @@ void sub_802D940(void)
|
|||
{
|
||||
// Delete
|
||||
case 2:
|
||||
if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > MAIL_TYPE_SUSPENDED_JOB) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)))
|
||||
if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > MAIL_TYPE_SUSPENDED_JOB) && (gUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id)))
|
||||
{
|
||||
sub_802D1A0(7);
|
||||
}
|
||||
|
|
@ -1008,7 +1008,7 @@ bool8 sub_802DAA8(void)
|
|||
return TRUE;
|
||||
}
|
||||
else {
|
||||
if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)) return FALSE;
|
||||
if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id)) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1028,7 +1028,7 @@ _0802DAE8:
|
|||
{
|
||||
mailType = mail->mailType;
|
||||
if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) ||
|
||||
((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->dungeon.id)))) goto _0802DAE8;
|
||||
((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->unk4.dungeon.id)))) goto _0802DAE8;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,7 +125,6 @@ extern void ProceedToNextRewardSceneState(void);
|
|||
extern void sub_802F300(void);
|
||||
extern s32 sub_808D544(u32);
|
||||
extern u32 sub_801B60C(u32, u8, u8);
|
||||
extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
|
||||
void HandleMissionReward(void);
|
||||
const u8 *sub_80974A0(s16 index);
|
||||
|
||||
|
|
@ -348,8 +347,8 @@ void sub_802F088(void)
|
|||
temp = sub_803B344(gUnknown_203B30C->unk4);
|
||||
sub_803B35C(&temp->mail, &gUnknown_203B30C->unk8);
|
||||
gUnknown_203B30C->unk8.unk0[0] = 3;
|
||||
gUnknown_203B30C->unk8.unk44 = 0;
|
||||
gUnknown_203B30C->unk8.unk50[0] = temp->unk18;
|
||||
gUnknown_203B30C->unk8.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
gUnknown_203B30C->unk8.unk50 = temp->unk18;
|
||||
sub_802DE84(&gUnknown_203B30C->unk8);
|
||||
}
|
||||
}
|
||||
|
|
@ -555,7 +554,7 @@ void HandleMissionReward(void)
|
|||
SetRewardSceneState(PREP_ITEM_REWARD);
|
||||
}
|
||||
else {
|
||||
sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0);
|
||||
sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,FALSE);
|
||||
if (gUnknown_203B310->displayClientDialogueSprite) {
|
||||
sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d);
|
||||
gUnknown_203B310->nextState = UNLOCK_FRIEND_AREA;
|
||||
|
|
|
|||
|
|
@ -265,17 +265,17 @@ void sub_803092C(void)
|
|||
mail = GetMailatIndex(gUnknown_203B320->unk0[(gUnknown_203B320->input.unk1E * gUnknown_203B320->input.unk1C) + index]);
|
||||
local.unk0[0] = gUnknown_203B320->unk58;
|
||||
local.y = sub_8013800(&gUnknown_203B320->input,index);
|
||||
local.unk40 = 7;
|
||||
local.unk42 = 0;
|
||||
local.unk44 = 0;
|
||||
local.mailTitleType = 7;
|
||||
local.mailMissionType = MISSION_TYPE_FRIEND_RESCUE;
|
||||
local.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
|
||||
local.dungeon = &mail->dungeon;
|
||||
local.unk8 = &mail->unk4;
|
||||
local.playerName = mail->playerName;
|
||||
|
||||
local.clientSpecies = mail->clientSpecies;
|
||||
local.targetSpecies = mail->clientSpecies;
|
||||
local.targetItem = ITEM_NOTHING;
|
||||
local.unk2E = 5;
|
||||
local.rewardType = 5;
|
||||
|
||||
switch(mail->mailType)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -117,33 +117,33 @@ void sub_8030E48(void)
|
|||
mail = &gUnknown_203B480[gUnknown_203B324->mailIndex];
|
||||
sub_80073B8(gUnknown_203B324->unk10);
|
||||
stack.unk0[0] = gUnknown_203B324->unk10;
|
||||
stack.unk40 = 7;
|
||||
stack.unk42 = 0;
|
||||
stack.unk44 = 0;
|
||||
stack.dungeon = &mail->dungeon;
|
||||
stack.mailTitleType = 7;
|
||||
stack.mailMissionType = MISSION_TYPE_FRIEND_RESCUE;
|
||||
stack.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
stack.unk8 = &mail->unk4;
|
||||
stack.playerName = mail->playerName;
|
||||
stack.clientSpecies = mail->clientSpecies;
|
||||
stack.targetSpecies = mail->clientSpecies;
|
||||
stack.targetItem = ITEM_NOTHING;
|
||||
if (mail->item.id == ITEM_NOTHING) {
|
||||
stack.unk2E = 5;
|
||||
stack.rewardType = 5;
|
||||
}
|
||||
else {
|
||||
stack.unk2E = 2;
|
||||
stack.unk34 = mail->item.id;
|
||||
stack.rewardType = 2;
|
||||
stack.rewardItem = mail->item.id;
|
||||
}
|
||||
switch(mail->mailType)
|
||||
{
|
||||
case 2:
|
||||
case WONDER_MAIL_TYPE_AOK:
|
||||
stack.unk41 = 10;
|
||||
stack.mailDescriptionType = 10;
|
||||
break;
|
||||
case 5:
|
||||
stack.unk41 = 11;
|
||||
stack.mailDescriptionType = 11;
|
||||
break;
|
||||
case WONDER_MAIL_TYPE_NONE:
|
||||
default:
|
||||
stack.unk41 = 9;
|
||||
stack.mailDescriptionType = 9;
|
||||
break;
|
||||
}
|
||||
CreateRescueDescription(&stack);
|
||||
|
|
|
|||
|
|
@ -14,11 +14,7 @@ struct unkStruct_203B2FC
|
|||
// size: 0xA8
|
||||
/* 0x0 */ u32 state;
|
||||
/* 0x4 */ u32 fallbackState;
|
||||
u32 unk8;
|
||||
s16 unkC;
|
||||
s16 unkE;
|
||||
u8 unk10;
|
||||
u8 fill11[0x30 - 0x11];
|
||||
struct unkStruct_802F204 unk8;
|
||||
u8 jobSlotIndex;
|
||||
struct WonderMail *jobInfo;
|
||||
struct OpenedFile *faceFile;
|
||||
|
|
@ -38,7 +34,7 @@ struct unkStruct_203B300
|
|||
{
|
||||
// size: 0x7C
|
||||
struct MenuInputStructSub unk0;
|
||||
struct unkStruct_802C39C *unkC;
|
||||
struct unkStruct_802C39C *mail;
|
||||
u32 unk10;
|
||||
struct UnkTextStruct2 *unk14;
|
||||
struct UnkTextStruct2 unk18[4];
|
||||
|
|
@ -109,13 +105,13 @@ extern void sub_802DC28(u32);
|
|||
extern void sub_802F2C0(void);
|
||||
extern void sub_802DC28(u32);
|
||||
extern u32 sub_802F298(void);
|
||||
extern void sub_802F204(u32 *, u32);
|
||||
extern void sub_802F204(struct unkStruct_802F204*, u32);
|
||||
extern void sub_802DC40(void);
|
||||
extern void sub_802DC9C(void);
|
||||
struct WonderMail *GetJobSlotInfo(u8);
|
||||
extern void sub_8096AF8(u8 *, u32, u32);
|
||||
extern void sub_8096EEC(void);
|
||||
extern void sub_803C21C(struct WonderMail *, u32 *);
|
||||
extern void sub_803C21C(struct WonderMail *, struct unkStruct_802F204*);
|
||||
extern u32 sub_802C598(s32);
|
||||
extern void sub_802C688(void);
|
||||
extern void sub_8096C80(void);
|
||||
|
|
@ -306,12 +302,12 @@ void sub_802DE60(void)
|
|||
}
|
||||
}
|
||||
|
||||
u32 sub_802DE84(struct unkStruct_802C39C *r0)
|
||||
u32 sub_802DE84(struct unkStruct_802C39C *mail)
|
||||
{
|
||||
gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8);
|
||||
gUnknown_203B300->unkC = r0;
|
||||
gUnknown_203B300->mail = mail;
|
||||
sub_801317C(&gUnknown_203B300->unk0);
|
||||
gUnknown_203B300->unk10 = gUnknown_203B300->unkC->unk0[0];
|
||||
gUnknown_203B300->unk10 = gUnknown_203B300->mail->unk0[0];
|
||||
gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10];
|
||||
sub_8006518(gUnknown_203B300->unk18);
|
||||
gUnknown_203B300->unk18[gUnknown_203B300->unk10] = gUnknown_80E0264;
|
||||
|
|
@ -361,6 +357,6 @@ void sub_802DF6C(void)
|
|||
void sub_802DF88(void)
|
||||
{
|
||||
sub_80073B8(gUnknown_203B300->unk10);
|
||||
CreateRescueDescription(gUnknown_203B300->unkC);
|
||||
CreateRescueDescription(gUnknown_203B300->mail);
|
||||
sub_80073E0(gUnknown_203B300->unk10);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -228,21 +228,6 @@ gUnknown_203B278: /* 203B278 */
|
|||
|
||||
.include "src/gulpin_shop_1.o"
|
||||
|
||||
gUnknown_203B280: /* 203B280 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_203B284: /* 203B284 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_203B288: /* 203B288 */
|
||||
.space 0x2
|
||||
|
||||
gUnknown_203B28A: /* 203B28A */
|
||||
.space 0x2
|
||||
|
||||
gUnknown_203B28C: /* 203B28C */
|
||||
.space 0x4
|
||||
|
||||
.include "src/wigglytuff_shop.o"
|
||||
|
||||
gUnknown_203B294: /* 203B294 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user