mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-11 02:25:57 -05:00
more decomp
This commit is contained in:
@@ -1787,622 +1787,4 @@ _0806F8FE:
|
||||
bx r1
|
||||
thumb_func_end sub_806F660
|
||||
|
||||
thumb_func_start nullsub_96
|
||||
nullsub_96:
|
||||
bx lr
|
||||
thumb_func_end nullsub_96
|
||||
|
||||
thumb_func_start sub_806F910
|
||||
sub_806F910:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
movs r5, 0
|
||||
movs r6, 0
|
||||
movs r7, 0x40
|
||||
_0806F91C:
|
||||
ldr r0, _0806F9AC
|
||||
ldr r0, [r0]
|
||||
lsls r1, r6, 2
|
||||
ldr r2, _0806F9B0
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
adds r1, r6, 0x1
|
||||
mov r8, r1
|
||||
cmp r0, 0
|
||||
beq _0806F98A
|
||||
ldr r0, [r4, 0x70]
|
||||
movs r2, 0x4
|
||||
ldrsh r0, [r0, r2]
|
||||
bl GetBodySize
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x68
|
||||
strh r7, [r0]
|
||||
ldr r0, [r4, 0x70]
|
||||
ldr r2, _0806F9B4
|
||||
adds r0, r2
|
||||
strb r6, [r0]
|
||||
ldr r0, [r4, 0x70]
|
||||
adds r2, 0x1
|
||||
adds r0, r2
|
||||
strb r1, [r0]
|
||||
cmp r1, 0
|
||||
beq _0806F978
|
||||
ldr r3, _0806F9B8
|
||||
movs r2, 0x1
|
||||
_0806F966:
|
||||
cmp r5, 0x5
|
||||
bgt _0806F972
|
||||
adds r0, r5, r3
|
||||
strb r2, [r0]
|
||||
adds r7, 0x10
|
||||
adds r5, 0x1
|
||||
_0806F972:
|
||||
subs r1, 0x1
|
||||
cmp r1, 0
|
||||
bne _0806F966
|
||||
_0806F978:
|
||||
adds r0, r4, 0
|
||||
bl sub_806CEBC
|
||||
adds r1, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
adds r0, r4, 0
|
||||
bl sub_806CCB4
|
||||
_0806F98A:
|
||||
mov r6, r8
|
||||
cmp r6, 0x3
|
||||
ble _0806F91C
|
||||
cmp r5, 0x5
|
||||
bgt _0806F9A2
|
||||
ldr r2, _0806F9B8
|
||||
movs r1, 0
|
||||
_0806F998:
|
||||
adds r0, r5, r2
|
||||
strb r1, [r0]
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x5
|
||||
ble _0806F998
|
||||
_0806F9A2:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0806F9AC: .4byte gDungeon
|
||||
_0806F9B0: .4byte 0x0001357c
|
||||
_0806F9B4: .4byte 0x00000167
|
||||
_0806F9B8: .4byte gUnknown_202EE70
|
||||
thumb_func_end sub_806F910
|
||||
|
||||
thumb_func_start sub_806F9BC
|
||||
sub_806F9BC:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0xC
|
||||
lsls r0, 16
|
||||
asrs r4, r0, 16
|
||||
ldr r5, _0806FA40
|
||||
ldr r0, [r5]
|
||||
movs r1, 0xCB
|
||||
lsls r1, 3
|
||||
adds r0, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0806FA3C
|
||||
adds r0, r4, 0
|
||||
bl sub_808529C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806FA3C
|
||||
cmp r4, 0x97
|
||||
bne _0806F9F2
|
||||
ldr r0, [r5]
|
||||
movs r1, 0xCF
|
||||
lsls r1, 3
|
||||
adds r0, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
beq _0806FA3C
|
||||
_0806F9F2:
|
||||
movs r0, 0xCC
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
beq _0806FA3C
|
||||
ldr r0, _0806FA44
|
||||
cmp r4, r0
|
||||
beq _0806FA3C
|
||||
ldr r0, _0806FA48
|
||||
cmp r4, r0
|
||||
beq _0806FA3C
|
||||
movs r0, 0xD1
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
beq _0806FA3C
|
||||
ldr r0, _0806FA4C
|
||||
cmp r4, r0
|
||||
beq _0806FA3C
|
||||
adds r0, r4, 0
|
||||
bl GetUnk12
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0806FA50
|
||||
adds r0, r4, 0
|
||||
bl GetFriendArea
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r1, sp
|
||||
movs r2, 0
|
||||
movs r3, 0
|
||||
bl sub_8092638
|
||||
mov r0, sp
|
||||
ldrb r0, [r0, 0x4]
|
||||
cmp r0, 0
|
||||
bne _0806FA50
|
||||
_0806FA3C:
|
||||
movs r0, 0
|
||||
b _0806FA52
|
||||
.align 2, 0
|
||||
_0806FA40: .4byte gDungeon
|
||||
_0806FA44: .4byte 0x00000199
|
||||
_0806FA48: .4byte 0x000001a1
|
||||
_0806FA4C: .4byte 0x000001a3
|
||||
_0806FA50:
|
||||
movs r0, 0x1
|
||||
_0806FA52:
|
||||
add sp, 0xC
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_806F9BC
|
||||
|
||||
thumb_func_start sub_806FA5C
|
||||
sub_806FA5C:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x10
|
||||
mov r8, r0
|
||||
adds r5, r1, 0
|
||||
adds r6, r2, 0
|
||||
adds r0, r5, 0x4
|
||||
mov r1, r8
|
||||
adds r1, 0x4
|
||||
bl GetDirectionTowardsPosition
|
||||
adds r4, r0, 0
|
||||
movs r0, 0
|
||||
mov r10, r0
|
||||
movs r1, 0
|
||||
ldrsh r0, [r6, r1]
|
||||
bl GetFriendArea
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r9, r0
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x22
|
||||
mov r2, r10
|
||||
strb r2, [r0]
|
||||
mov r0, r8
|
||||
adds r1, r5, 0
|
||||
bl sub_807A0CC
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_806CE68
|
||||
ldr r0, _0806FAD4
|
||||
movs r3, 0
|
||||
ldrsh r1, [r6, r3]
|
||||
bl CopyCyanMonsterNametoBuffer
|
||||
ldr r0, _0806FAD8
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl sub_8052B8C
|
||||
cmp r0, 0
|
||||
bne _0806FAE4
|
||||
movs r4, 0
|
||||
ldrsh r1, [r6, r4]
|
||||
ldr r0, _0806FADC
|
||||
cmp r1, r0
|
||||
beq _0806FB28
|
||||
ldr r0, _0806FAE0
|
||||
ldr r1, [r0]
|
||||
mov r0, r8
|
||||
bl SendMessage
|
||||
b _0806FB28
|
||||
.align 2, 0
|
||||
_0806FAD4: .4byte gAvailablePokemonNames
|
||||
_0806FAD8: .4byte gUnknown_80F9FE8
|
||||
_0806FADC: .4byte 0x0000019d
|
||||
_0806FAE0: .4byte gUnknown_80FA004
|
||||
_0806FAE4:
|
||||
movs r7, 0
|
||||
ldr r3, _0806FB2C
|
||||
ldr r0, [r3]
|
||||
ldr r2, _0806FB30
|
||||
adds r0, r2
|
||||
ldrb r1, [r0]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0806FB1A
|
||||
mov r12, r3
|
||||
adds r4, r2, 0
|
||||
movs r2, 0
|
||||
movs r3, 0x1
|
||||
_0806FB00:
|
||||
adds r2, 0x64
|
||||
adds r7, 0x1
|
||||
cmp r7, 0x3
|
||||
bgt _0806FB1A
|
||||
mov r1, r12
|
||||
ldr r0, [r1]
|
||||
adds r0, r2, r0
|
||||
adds r0, r4
|
||||
ldrb r1, [r0]
|
||||
adds r0, r3, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0806FB00
|
||||
_0806FB1A:
|
||||
cmp r7, 0x4
|
||||
bne _0806FB38
|
||||
ldr r0, _0806FB34
|
||||
ldr r1, [r0]
|
||||
mov r0, r8
|
||||
bl SendMessage
|
||||
_0806FB28:
|
||||
movs r0, 0
|
||||
b _0806FCF0
|
||||
.align 2, 0
|
||||
_0806FB2C: .4byte gRecruitedPokemonRef
|
||||
_0806FB30: .4byte 0x00008df8
|
||||
_0806FB34: .4byte gUnknown_80FA030
|
||||
_0806FB38:
|
||||
mov r0, r9
|
||||
bl GetFriendAreaStatus
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0806FB4E
|
||||
mov r0, r9
|
||||
bl UnlockFriendArea
|
||||
movs r2, 0x1
|
||||
mov r10, r2
|
||||
_0806FB4E:
|
||||
movs r1, 0xFA
|
||||
lsls r1, 1
|
||||
adds r0, r5, 0
|
||||
mov r2, r8
|
||||
bl sub_8068FE0
|
||||
ldr r1, _0806FC40
|
||||
movs r0, 0x64
|
||||
muls r0, r7
|
||||
ldr r3, _0806FC44
|
||||
adds r0, r3
|
||||
ldr r1, [r1]
|
||||
adds r5, r1, r0
|
||||
movs r4, 0
|
||||
movs r0, 0x3
|
||||
strh r0, [r5]
|
||||
strb r4, [r5, 0x2]
|
||||
ldrh r0, [r6, 0xE]
|
||||
strb r0, [r5, 0x3]
|
||||
movs r0, 0x1
|
||||
strh r0, [r5, 0x8]
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x4C
|
||||
movs r1, 0
|
||||
bl SetDefaultIQSkills
|
||||
ldr r0, [r6, 0x44]
|
||||
str r0, [r5, 0x54]
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x50
|
||||
strb r4, [r0]
|
||||
ldr r0, _0806FC48
|
||||
strh r0, [r5, 0xA]
|
||||
strh r7, [r5, 0xC]
|
||||
ldrh r0, [r6]
|
||||
strh r0, [r5, 0xE]
|
||||
ldr r0, _0806FC4C
|
||||
ldr r0, [r0]
|
||||
ldr r4, _0806FC50
|
||||
adds r0, r4
|
||||
ldr r0, [r0]
|
||||
str r0, [r5, 0x4]
|
||||
ldrh r0, [r6, 0x8]
|
||||
strh r0, [r5, 0x10]
|
||||
ldrh r0, [r6, 0x8]
|
||||
strh r0, [r5, 0x12]
|
||||
ldr r0, [r6, 0x14]
|
||||
str r0, [r5, 0x44]
|
||||
ldr r0, [r6, 0x18]
|
||||
str r0, [r5, 0x48]
|
||||
movs r2, 0
|
||||
adds r7, r6, 0
|
||||
adds r7, 0x20
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xA
|
||||
adds r3, r6, 0
|
||||
adds r3, 0xC
|
||||
adds r1, r5, 0
|
||||
adds r1, 0x14
|
||||
_0806FBC4:
|
||||
adds r0, r4, r2
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
adds r0, r3, r2
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1, 0x2]
|
||||
adds r1, 0x1
|
||||
adds r2, 0x1
|
||||
cmp r2, 0x1
|
||||
ble _0806FBC4
|
||||
ldr r0, [r6, 0x10]
|
||||
str r0, [r5, 0x18]
|
||||
adds r1, r5, 0
|
||||
adds r1, 0x1C
|
||||
adds r0, r7, 0
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
ldr r0, [r6, 0x1C]
|
||||
str r0, [r5, 0x40]
|
||||
adds r4, r5, 0
|
||||
adds r4, 0x58
|
||||
movs r1, 0
|
||||
ldrsh r0, [r6, r1]
|
||||
bl GetMonSpecies
|
||||
adds r1, r0, 0
|
||||
adds r0, r4, 0
|
||||
movs r2, 0xA
|
||||
bl BoundedCopyStringtoBuffer
|
||||
bl sub_8097848
|
||||
movs r2, 0
|
||||
ldrsh r0, [r6, r2]
|
||||
movs r3, 0x4
|
||||
ldrsh r1, [r6, r3]
|
||||
movs r3, 0x6
|
||||
ldrsh r2, [r6, r3]
|
||||
add r3, sp, 0xC
|
||||
str r3, [sp]
|
||||
movs r3, 0
|
||||
str r3, [sp, 0x4]
|
||||
movs r3, 0x1
|
||||
str r3, [sp, 0x8]
|
||||
adds r3, r5, 0
|
||||
bl sub_806B8CC
|
||||
lsls r0, 24
|
||||
lsrs r7, r0, 24
|
||||
cmp r7, 0
|
||||
bne _0806FC58
|
||||
ldr r0, _0806FC54
|
||||
ldr r1, [r0]
|
||||
mov r0, r8
|
||||
bl SendMessage
|
||||
strh r7, [r5]
|
||||
b _0806FCEE
|
||||
.align 2, 0
|
||||
_0806FC40: .4byte gRecruitedPokemonRef
|
||||
_0806FC44: .4byte 0x00008df8
|
||||
_0806FC48: .4byte 0x0000ffff
|
||||
_0806FC4C: .4byte gDungeon
|
||||
_0806FC50: .4byte 0x00000644
|
||||
_0806FC54: .4byte gUnknown_80FA058
|
||||
_0806FC58:
|
||||
bl sub_8083D88
|
||||
movs r0, 0xA0
|
||||
movs r1, 0x46
|
||||
bl sub_803E708
|
||||
ldr r0, _0806FC78
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl sub_8052B8C
|
||||
cmp r0, 0x1
|
||||
bne _0806FC94
|
||||
b _0806FC88
|
||||
.align 2, 0
|
||||
_0806FC78: .4byte gUnknown_80FA090
|
||||
_0806FC7C:
|
||||
ldr r0, _0806FD00
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
_0806FC88:
|
||||
adds r0, r4, 0
|
||||
bl sub_805FBE8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806FC7C
|
||||
_0806FC94:
|
||||
ldr r4, _0806FD04
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
movs r2, 0
|
||||
bl sub_808D9DC
|
||||
ldr r0, _0806FD08
|
||||
ldr r1, [r0]
|
||||
mov r0, r8
|
||||
bl SendMessage
|
||||
mov r0, r10
|
||||
cmp r0, 0
|
||||
beq _0806FCD8
|
||||
bl xxx_call_GetLeader
|
||||
adds r1, r0, 0
|
||||
adds r0, r4, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
ldr r0, _0806FD0C
|
||||
mov r1, r9
|
||||
bl sub_8092558
|
||||
movs r0, 0xCE
|
||||
bl PlaySound
|
||||
ldr r0, _0806FD10
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
_0806FCD8:
|
||||
movs r1, 0
|
||||
ldrsh r0, [r6, r1]
|
||||
cmp r0, 0x97
|
||||
bne _0806FCEE
|
||||
ldr r2, _0806FD14
|
||||
ldr r1, [r2]
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0x4]
|
||||
ldr r1, [r2]
|
||||
movs r0, 0x3
|
||||
strb r0, [r1, 0x11]
|
||||
_0806FCEE:
|
||||
movs r0, 0x1
|
||||
_0806FCF0:
|
||||
add sp, 0x10
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0806FD00: .4byte gUnknown_80FA0C8
|
||||
_0806FD04: .4byte gAvailablePokemonNames
|
||||
_0806FD08: .4byte gUnknown_80FA0F0
|
||||
_0806FD0C: .4byte gUnknown_202E628
|
||||
_0806FD10: .4byte gUnknown_80FA120
|
||||
_0806FD14: .4byte gDungeon
|
||||
thumb_func_end sub_806FA5C
|
||||
|
||||
thumb_func_start sub_806FD18
|
||||
sub_806FD18:
|
||||
push {r4-r7,lr}
|
||||
ldr r4, [r0, 0x70]
|
||||
movs r6, 0x1
|
||||
negs r6, r6
|
||||
movs r1, 0x4
|
||||
ldrsh r0, [r4, r1]
|
||||
bl GetBodySize
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r4, r2]
|
||||
bl sub_806F9BC
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806FDEC
|
||||
bl sub_806F910
|
||||
movs r4, 0
|
||||
movs r0, 0x6
|
||||
subs r3, r0, r5
|
||||
ldr r7, _0806FD48
|
||||
b _0806FD4E
|
||||
.align 2, 0
|
||||
_0806FD48: .4byte gUnknown_202EE70
|
||||
_0806FD4C:
|
||||
adds r4, 0x1
|
||||
_0806FD4E:
|
||||
cmp r4, r3
|
||||
bgt _0806FD70
|
||||
movs r2, 0
|
||||
cmp r2, r5
|
||||
bge _0806FD6A
|
||||
adds r1, r4, r7
|
||||
b _0806FD64
|
||||
_0806FD5C:
|
||||
adds r1, 0x1
|
||||
adds r2, 0x1
|
||||
cmp r2, r5
|
||||
bge _0806FD6A
|
||||
_0806FD64:
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0
|
||||
beq _0806FD5C
|
||||
_0806FD6A:
|
||||
cmp r2, r5
|
||||
bne _0806FD4C
|
||||
adds r6, r4, 0
|
||||
_0806FD70:
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r6, r0
|
||||
beq _0806FDEC
|
||||
movs r4, 0
|
||||
ldr r3, _0806FDB4
|
||||
ldr r0, [r3]
|
||||
ldr r2, _0806FDB8
|
||||
adds r0, r2
|
||||
ldrb r1, [r0]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0806FDAC
|
||||
adds r6, r3, 0
|
||||
adds r5, r2, 0
|
||||
movs r2, 0
|
||||
movs r3, 0x1
|
||||
_0806FD94:
|
||||
adds r2, 0x64
|
||||
adds r4, 0x1
|
||||
cmp r4, 0x3
|
||||
bgt _0806FDAC
|
||||
ldr r0, [r6]
|
||||
adds r0, r2, r0
|
||||
adds r0, r5
|
||||
ldrb r1, [r0]
|
||||
adds r0, r3, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0806FD94
|
||||
_0806FDAC:
|
||||
cmp r4, 0x4
|
||||
beq _0806FDEC
|
||||
movs r4, 0
|
||||
b _0806FDBE
|
||||
.align 2, 0
|
||||
_0806FDB4: .4byte gRecruitedPokemonRef
|
||||
_0806FDB8: .4byte 0x00008df8
|
||||
_0806FDBC:
|
||||
adds r4, 0x1
|
||||
_0806FDBE:
|
||||
cmp r4, 0x3
|
||||
bgt _0806FDDA
|
||||
ldr r0, _0806FDE4
|
||||
ldr r0, [r0]
|
||||
lsls r1, r4, 2
|
||||
ldr r2, _0806FDE8
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0806FDBC
|
||||
_0806FDDA:
|
||||
cmp r4, 0x4
|
||||
beq _0806FDEC
|
||||
movs r0, 0x1
|
||||
b _0806FDEE
|
||||
.align 2, 0
|
||||
_0806FDE4: .4byte gDungeon
|
||||
_0806FDE8: .4byte 0x0001357c
|
||||
_0806FDEC:
|
||||
movs r0, 0
|
||||
_0806FDEE:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_806FD18
|
||||
|
||||
.align 2,0
|
||||
|
||||
@@ -2,18 +2,31 @@
|
||||
#include "structs/str_pokemon.h"
|
||||
#include "structs/struct_8069D4C.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_803E668.h"
|
||||
#include "code_8045A00.h"
|
||||
#include "code_80521D0.h"
|
||||
#include "code_806CD90.h"
|
||||
#include "code_8077274_1.h"
|
||||
#include "code_8097670.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "friend_area.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "position_util.h"
|
||||
#include "text_util.h"
|
||||
#include "dungeon_util_1.h"
|
||||
|
||||
extern u8 gUnknown_202E628[];
|
||||
extern u8 gUnknown_202E088[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gUnknown_202EE70[MAX_TEAM_BODY_SIZE];
|
||||
|
||||
extern u8 *gUnknown_80FA0F0[];
|
||||
extern u8 *gUnknown_80FA058[];
|
||||
extern u8 *gUnknown_80FA030[];
|
||||
extern u8 *gUnknown_80F9FE8[];
|
||||
extern u8 *gUnknown_80FA004[];
|
||||
extern u8 *gUnknown_80FA0C8[];
|
||||
extern u8 gUnknown_202E088[];
|
||||
extern u8 *gUnknown_80FA120[];
|
||||
@@ -25,6 +38,366 @@ u8 sub_806B8CC();
|
||||
bool8 sub_805FBE8(u8 *a0);
|
||||
extern s32 sub_8052B8C(u32, const u8 *, u32);
|
||||
extern void PrintFieldMessage(u32, const u8 *, u32);
|
||||
void sub_8083D88();
|
||||
u8 sub_808529C(s32);
|
||||
extern u8 GetBodySize(s16 index);
|
||||
void sub_806F910();
|
||||
|
||||
void nullsub_96(Entity *pokemon,Entity *target)
|
||||
{}
|
||||
|
||||
void sub_806F910(void)
|
||||
{
|
||||
u8 size;
|
||||
s32 counter;
|
||||
Entity *entity;
|
||||
int totalSize;
|
||||
int index;
|
||||
s32 sVar6;
|
||||
|
||||
totalSize = 0;
|
||||
|
||||
for(index = 0, sVar6 = 0x40; index < MAX_TEAM_MEMBERS; index++)
|
||||
{
|
||||
entity = gDungeon->teamPokemon[index];
|
||||
if (EntityExists(entity)) {
|
||||
size = GetBodySize(entity->info->apparentID);
|
||||
entity->unk68 = sVar6;
|
||||
entity->info->unk167 = index;
|
||||
entity->info->unk168 = size;
|
||||
for (counter = 0; counter < size; counter++) {
|
||||
if (totalSize < MAX_TEAM_BODY_SIZE) {
|
||||
gUnknown_202EE70[totalSize] = 1;
|
||||
sVar6 += 0x10;
|
||||
totalSize++;
|
||||
}
|
||||
}
|
||||
sub_806CCB4(entity,sub_806CEBC(entity));
|
||||
}
|
||||
}
|
||||
for (; totalSize < MAX_TEAM_BODY_SIZE; totalSize++) {
|
||||
gUnknown_202EE70[totalSize] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_806F9BC(s16 species)
|
||||
{
|
||||
u8 friendArea;
|
||||
s32 id;
|
||||
unkStruct_8092638 auStack_18;
|
||||
|
||||
id = species;
|
||||
if (((gDungeon->fill655[3] == 0) || (sub_808529C(id) == 0)) ||
|
||||
((id == MONSTER_MEW && (gDungeon->unk678 == 1)))) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == MONSTER_LATIAS)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == MONSTER_LATIOS)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == MONSTER_DEOXYS_ATTACK)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == MONSTER_DEOXYS_DEFENSE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == MONSTER_DEOXYS_SPEED)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
if (GetUnk12(id) == 0) {
|
||||
friendArea = GetFriendArea(id);
|
||||
sub_8092638(friendArea, &auStack_18, FALSE, FALSE);
|
||||
if (auStack_18.hasFriendArea == FALSE)
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_806FA5C(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *param_3)
|
||||
{
|
||||
u8 friendArea;
|
||||
bool8 flag;
|
||||
Entity *leader;
|
||||
PokemonStruct2 *pokeStruct2;
|
||||
int pokeIndex;
|
||||
Entity *local_2c;
|
||||
s32 iVar2;
|
||||
u32 direction;
|
||||
|
||||
|
||||
direction = GetDirectionTowardsPosition(&entity2->pos,&entity1->pos);
|
||||
flag = FALSE;
|
||||
friendArea = GetFriendArea(param_3->id);
|
||||
entity2->unk22 = 0;
|
||||
sub_807A0CC(entity1, entity2);
|
||||
sub_806CE68(entity2, direction);
|
||||
CopyCyanMonsterNametoBuffer(gAvailablePokemonNames,param_3->id);
|
||||
|
||||
if (sub_8052B8C(0,*gUnknown_80F9FE8,1) == 0) {
|
||||
if (param_3->id != MONSTER_JIRACHI) {
|
||||
SendMessage(entity1,*gUnknown_80FA004);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(pokeIndex = 0; pokeIndex < MAX_TEAM_MEMBERS; pokeIndex++)
|
||||
{
|
||||
if (((u8)(pokeIndex[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (pokeIndex == MAX_TEAM_MEMBERS) {
|
||||
SendMessage(entity1,*gUnknown_80FA030);
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
if (GetFriendAreaStatus(friendArea) == 0) {
|
||||
UnlockFriendArea(friendArea);
|
||||
flag = TRUE;
|
||||
}
|
||||
sub_8068FE0(entity2,500,entity1);
|
||||
pokeStruct2 = &gRecruitedPokemonRef->pokemon2[pokeIndex];
|
||||
pokeStruct2->unk0 = 3;
|
||||
pokeStruct2->isTeamLeader = FALSE;
|
||||
pokeStruct2->level = param_3->level;
|
||||
pokeStruct2->IQ = 1;
|
||||
SetDefaultIQSkills((u8 *)&(pokeStruct2->IQSkills),0);
|
||||
pokeStruct2->hiddenPower = param_3->hiddenPower;
|
||||
pokeStruct2->tacticIndex = 0;
|
||||
pokeStruct2->unkA = -1;
|
||||
pokeStruct2->unkC = pokeIndex;
|
||||
pokeStruct2->speciesNum = param_3->id;
|
||||
(pokeStruct2->dungeonLocation) = gDungeon->dungeonLocation;
|
||||
pokeStruct2->unk10 = param_3->HP;
|
||||
pokeStruct2->unk12 = param_3->HP;
|
||||
pokeStruct2->belly = param_3->belly;
|
||||
pokeStruct2->maxBelly = param_3->maxBelly;
|
||||
|
||||
for(iVar2 = 0; iVar2 < 2; iVar2++)
|
||||
{
|
||||
pokeStruct2->offense.att[iVar2] = param_3->att[iVar2];
|
||||
pokeStruct2->offense.def[iVar2] = param_3->def[iVar2];
|
||||
}
|
||||
|
||||
pokeStruct2->currExp = param_3->exp;
|
||||
pokeStruct2->moves = param_3->moves;
|
||||
|
||||
pokeStruct2->itemSlot = param_3->heldItem;
|
||||
BoundedCopyStringtoBuffer(pokeStruct2->name,GetMonSpecies(param_3->id),10);
|
||||
|
||||
sub_8097848();
|
||||
|
||||
if (sub_806B8CC(param_3->id,param_3->pos.x,param_3->pos.y,pokeStruct2,&local_2c,0,1) == 0) {
|
||||
SendMessage(entity1,*gUnknown_80FA058);
|
||||
pokeStruct2->unk0 = 0;
|
||||
}
|
||||
else {
|
||||
sub_8083D88();
|
||||
sub_803E708(0xa0,0x46);
|
||||
if (sub_8052B8C(0,*gUnknown_80FA090,1) == 1) {
|
||||
while (sub_805FBE8(pokeStruct2->name) == 0) {
|
||||
PrintFieldMessage(0,*gUnknown_80FA0C8,1);
|
||||
}
|
||||
}
|
||||
sub_808D9DC(gAvailablePokemonNames,pokeStruct2,0);
|
||||
SendMessage(entity1,*gUnknown_80FA0F0);
|
||||
if (flag != '\0') {
|
||||
leader = xxx_call_GetLeader();
|
||||
SetMessageArgument(gAvailablePokemonNames,leader,0);
|
||||
sub_8092558(gUnknown_202E628,friendArea);
|
||||
PlaySound(0xce);
|
||||
PrintFieldMessage(0,*gUnknown_80FA120,1);
|
||||
}
|
||||
if (param_3->id == MONSTER_MEW) {
|
||||
gDungeon->unk4 = 1;
|
||||
gDungeon->unk11 = 3;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/LByEy (93.86% matching - Seth)
|
||||
|
||||
#ifdef NONMATCHING
|
||||
bool8 sub_806FD18(Entity *param_1)
|
||||
{
|
||||
s32 size;
|
||||
s32 uVar3;
|
||||
int iVar4;
|
||||
EntityInfo *info;
|
||||
int index;
|
||||
|
||||
info = param_1->info;
|
||||
iVar4 = -1;
|
||||
size = GetBodySize((int)info->apparentID);
|
||||
if (sub_806F9BC((int)info->id) != 0) {
|
||||
sub_806F910();
|
||||
for (index = 0; index <= (6 - size); index++) {
|
||||
for(uVar3 = 0; uVar3 < size; uVar3++)
|
||||
{
|
||||
if (gUnknown_202EE70[index] != 0) break;
|
||||
iVar4 = index;
|
||||
}
|
||||
if (uVar3 == size) break;
|
||||
}
|
||||
if (iVar4 != -1) {
|
||||
|
||||
for(index = 0; index < 4; index++)
|
||||
{
|
||||
if (((u8)(index[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0) break;
|
||||
}
|
||||
|
||||
if (index != 4) {
|
||||
for(index = 0; index < 4; index++)
|
||||
{
|
||||
if(!EntityExists(gDungeon->teamPokemon[index])) break;
|
||||
}
|
||||
if (index != 4) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
bool8 sub_806FD18(Entity *param_1)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tldr r4, [r0, 0x70]\n"
|
||||
"\tmovs r6, 0x1\n"
|
||||
"\tnegs r6, r6\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tldrsh r0, [r4, r1]\n"
|
||||
"\tbl GetBodySize\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r5, r0, 24\n"
|
||||
"\tmovs r2, 0x2\n"
|
||||
"\tldrsh r0, [r4, r2]\n"
|
||||
"\tbl sub_806F9BC\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0806FDEC\n"
|
||||
"\tbl sub_806F910\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tmovs r0, 0x6\n"
|
||||
"\tsubs r3, r0, r5\n"
|
||||
"\tldr r7, _0806FD48\n"
|
||||
"\tb _0806FD4E\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0806FD48: .4byte gUnknown_202EE70\n"
|
||||
"_0806FD4C:\n"
|
||||
"\tadds r4, 0x1\n"
|
||||
"_0806FD4E:\n"
|
||||
"\tcmp r4, r3\n"
|
||||
"\tbgt _0806FD70\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tcmp r2, r5\n"
|
||||
"\tbge _0806FD6A\n"
|
||||
"\tadds r1, r4, r7\n"
|
||||
"\tb _0806FD64\n"
|
||||
"_0806FD5C:\n"
|
||||
"\tadds r1, 0x1\n"
|
||||
"\tadds r2, 0x1\n"
|
||||
"\tcmp r2, r5\n"
|
||||
"\tbge _0806FD6A\n"
|
||||
"_0806FD64:\n"
|
||||
"\tldrb r0, [r1]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0806FD5C\n"
|
||||
"_0806FD6A:\n"
|
||||
"\tcmp r2, r5\n"
|
||||
"\tbne _0806FD4C\n"
|
||||
"\tadds r6, r4, 0\n"
|
||||
"_0806FD70:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tcmp r6, r0\n"
|
||||
"\tbeq _0806FDEC\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tldr r3, _0806FDB4\n"
|
||||
"\tldr r0, [r3]\n"
|
||||
"\tldr r2, _0806FDB8\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tldrb r1, [r0]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0806FDAC\n"
|
||||
"\tadds r6, r3, 0\n"
|
||||
"\tadds r5, r2, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r3, 0x1\n"
|
||||
"_0806FD94:\n"
|
||||
"\tadds r2, 0x64\n"
|
||||
"\tadds r4, 0x1\n"
|
||||
"\tcmp r4, 0x3\n"
|
||||
"\tbgt _0806FDAC\n"
|
||||
"\tldr r0, [r6]\n"
|
||||
"\tadds r0, r2, r0\n"
|
||||
"\tadds r0, r5\n"
|
||||
"\tldrb r1, [r0]\n"
|
||||
"\tadds r0, r3, 0\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0806FD94\n"
|
||||
"_0806FDAC:\n"
|
||||
"\tcmp r4, 0x4\n"
|
||||
"\tbeq _0806FDEC\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tb _0806FDBE\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0806FDB4: .4byte gRecruitedPokemonRef\n"
|
||||
"_0806FDB8: .4byte 0x00008df8\n"
|
||||
"_0806FDBC:\n"
|
||||
"\tadds r4, 0x1\n"
|
||||
"_0806FDBE:\n"
|
||||
"\tcmp r4, 0x3\n"
|
||||
"\tbgt _0806FDDA\n"
|
||||
"\tldr r0, _0806FDE4\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tlsls r1, r4, 2\n"
|
||||
"\tldr r2, _0806FDE8\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tbl EntityExists\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0806FDBC\n"
|
||||
"_0806FDDA:\n"
|
||||
"\tcmp r4, 0x4\n"
|
||||
"\tbeq _0806FDEC\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0806FDEE\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0806FDE4: .4byte gDungeon\n"
|
||||
"_0806FDE8: .4byte 0x0001357c\n"
|
||||
"_0806FDEC:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0806FDEE:\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1"
|
||||
);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
bool8 sub_806FDF4(Entity *entity1,Entity *entity2,Entity **entityPtr)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user