code_8069E0C decompiled

This commit is contained in:
DizzyEggg 2024-11-26 13:52:31 +01:00
parent 414d291d57
commit f8bb665a92
3 changed files with 298 additions and 908 deletions

View File

@ -1,907 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_806C51C
sub_806C51C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x50
adds r6, r0, 0
ldr r0, [r6, 0x70]
mov r8, r0
ldr r0, _0806C544
ldr r1, [r0]
ldr r2, _0806C548
adds r0, r1, r2
ldr r0, [r0]
cmp r0, r6
bne _0806C54C
movs r3, 0
str r3, [sp, 0x38]
b _0806C554
.align 2, 0
_0806C544: .4byte gDungeon
_0806C548: .4byte 0x000181f8
_0806C54C:
ldr r4, _0806C5AC
adds r0, r1, r4
ldrb r0, [r0]
str r0, [sp, 0x38]
_0806C554:
mov r0, r8
adds r0, 0xC8
ldrb r1, [r0]
str r0, [sp, 0x40]
cmp r1, 0x2
bne _0806C564
movs r7, 0x1
str r7, [sp, 0x38]
_0806C564:
adds r0, r6, 0
adds r0, 0x6B
adds r1, r6, 0
adds r1, 0x6A
ldrb r2, [r0]
str r0, [sp, 0x48]
mov r9, r1
adds r5, r6, 0
adds r5, 0x6D
adds r0, 0x1
str r0, [sp, 0x4C]
adds r4, r6, 0
adds r4, 0x6F
subs r1, 0x47
str r1, [sp, 0x44]
mov r3, r9
ldrb r3, [r3]
cmp r2, r3
bne _0806C676
ldrb r0, [r5]
ldr r7, [sp, 0x4C]
ldrb r7, [r7]
cmp r0, r7
bne _0806C654
ldrb r0, [r4]
cmp r0, 0
bne _0806C654
movs r2, 0
ldrh r1, [r6, 0x28]
movs r0, 0x80
lsls r0, 6
ands r0, r1
cmp r0, 0
beq _0806C5B0
movs r0, 0
b _0806C5B2
.align 2, 0
_0806C5AC: .4byte 0x00018210
_0806C5B0:
lsrs r0, r1, 15
_0806C5B2:
cmp r0, 0
bne _0806C5B8
movs r2, 0x1
_0806C5B8:
adds r0, r6, 0
adds r0, 0x23
str r0, [sp, 0x44]
cmp r2, 0
beq _0806C654
adds r0, r6, 0
bl sub_806CEBC
lsls r0, 24
lsrs r3, r0, 24
adds r1, r6, 0
adds r1, 0x21
movs r0, 0x1
strb r0, [r1]
mov r1, r8
adds r1, 0xFE
ldrb r0, [r1]
cmp r0, 0x63
bne _0806C620
ldr r1, [sp, 0x48]
ldrb r0, [r1]
cmp r0, 0xC
bhi _0806C61C
mov r0, r8
adds r0, 0xC0
ldrb r0, [r0]
cmp r0, 0x1
bne _0806C5F4
movs r2, 0x2
b _0806C600
_0806C5F4:
ldr r2, [sp, 0x44]
ldrb r0, [r2]
movs r2, 0x1
cmp r0, 0x2
bhi _0806C600
movs r2, 0
_0806C600:
ldr r1, _0806C618
movs r0, 0xD
muls r0, r2
ldr r7, [sp, 0x48]
ldrb r7, [r7]
adds r0, r7
adds r0, r1
ldrb r0, [r0]
cmp r0, 0x7
bne _0806C622
adds r0, r3, 0
b _0806C622
.align 2, 0
_0806C618: .4byte gUnknown_8106EC8
_0806C61C:
movs r0, 0x63
b _0806C622
_0806C620:
ldrb r0, [r1]
_0806C622:
cmp r0, 0x63
beq _0806C654
mov r1, r9
strb r0, [r1]
ldrb r1, [r5]
movs r0, 0x7
ands r0, r1
ldr r2, [sp, 0x4C]
strb r0, [r2]
movs r0, 0x1
strb r0, [r4]
mov r7, r9
ldrb r0, [r7]
cmp r0, 0x6
bne _0806C654
adds r1, r6, 0
adds r1, 0x6E
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
lsls r0, 24
lsrs r0, 24
cmp r0, 0x10
bne _0806C654
strb r3, [r7]
_0806C654:
ldr r1, [sp, 0x48]
ldrb r0, [r1]
mov r2, r9
ldrb r2, [r2]
cmp r0, r2
bne _0806C676
ldrb r0, [r5]
ldr r3, [sp, 0x4C]
ldrb r3, [r3]
cmp r0, r3
bne _0806C676
ldrb r0, [r4]
movs r7, 0x28
adds r7, r6
mov r10, r7
cmp r0, 0
beq _0806C714
_0806C676:
mov r1, r9
ldrb r0, [r1]
ldr r2, [sp, 0x48]
strb r0, [r2]
ldr r3, [sp, 0x4C]
mov r10, r3
ldrb r0, [r3]
strb r0, [r5]
movs r7, 0
strb r7, [r4]
adds r0, r6, 0
adds r0, 0x68
movs r1, 0
ldrsh r7, [r0, r1]
mov r2, r8
movs r3, 0x4
ldrsh r0, [r2, r3]
mov r4, r9
ldrb r1, [r4]
bl sub_808DA44
lsls r0, 24
cmp r0, 0
beq _0806C6A8
movs r7, 0
_0806C6A8:
ldr r0, [sp, 0x38]
cmp r0, 0
bne _0806C6D6
bl Rand32Bit
movs r4, 0x3
ands r4, r0
adds r5, r6, 0
adds r5, 0x28
ldr r1, [r6, 0x64]
mov r3, r9
ldrb r2, [r3]
mov r0, r10
ldrb r3, [r0]
str r7, [sp]
str r4, [sp, 0x4]
ldr r4, [sp, 0x38]
str r4, [sp, 0x8]
adds r0, r5, 0
bl AxResInitFile
mov r10, r5
b _0806C704
_0806C6D6:
ldr r0, _0806C774
bl GetSpriteData
adds r5, r0, 0
bl Rand32Bit
movs r1, 0x3
ands r1, r0
adds r4, r6, 0
adds r4, 0x28
mov r0, r9
ldrb r2, [r0]
ldr r0, [sp, 0x4C]
ldrb r3, [r0]
str r7, [sp]
str r1, [sp, 0x4]
movs r1, 0
str r1, [sp, 0x8]
adds r0, r4, 0
adds r1, r5, 0
bl AxResInitFile
mov r10, r4
_0806C704:
mov r2, r9
ldrb r0, [r2]
cmp r0, 0x6
beq _0806C714
adds r1, r6, 0
adds r1, 0x6E
movs r0, 0
strb r0, [r1]
_0806C714:
ldr r0, _0806C778
ldr r1, [r0]
ldr r3, _0806C77C
adds r0, r1, r3
ldrb r0, [r0]
cmp r0, 0
beq _0806C784
ldr r4, [sp, 0x48]
ldrb r0, [r4]
cmp r0, 0x7
bne _0806C73C
mov r7, r8
movs r1, 0x4
ldrsh r0, [r7, r1]
bl GetMovementType
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
bne _0806C7E2
_0806C73C:
movs r0, 0xAE
lsls r0, 1
add r0, r8
ldrb r0, [r0]
cmp r0, 0
beq _0806C76A
movs r0, 0xB0
lsls r0, 1
add r0, r8
ldrb r0, [r0]
cmp r0, 0
bne _0806C7E2
ldr r0, _0806C780
add r0, r8
ldrb r0, [r0]
cmp r0, 0
beq _0806C76A
mov r0, r10
bl RunAxAnimationFrame
mov r0, r10
bl RunAxAnimationFrame
_0806C76A:
mov r0, r10
bl RunAxAnimationFrame
b _0806C7E2
.align 2, 0
_0806C774: .4byte 0x000001a5
_0806C778: .4byte gDungeon
_0806C77C: .4byte 0x0001356c
_0806C780: .4byte 0x0000015f
_0806C784:
mov r0, r8
adds r0, 0xB0
ldrb r0, [r0]
cmp r0, 0x1
beq _0806C7E2
cmp r0, 0x6
beq _0806C7E2
ldr r2, _0806C7B4
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
beq _0806C7BC
ldr r3, _0806C7B8
adds r0, r1, r3
ldrb r0, [r0]
cmp r0, 0
bne _0806C7BC
mov r0, r10
bl RunAxAnimationFrame
mov r0, r10
bl RunAxAnimationFrame
b _0806C7DC
.align 2, 0
_0806C7B4: .4byte 0x0000066c
_0806C7B8: .4byte 0x0001c05f
_0806C7BC:
ldr r4, [sp, 0x48]
ldrb r0, [r4]
cmp r0, 0
beq _0806C7C8
cmp r0, 0x7
bne _0806C7DC
_0806C7C8:
ldr r0, [r6, 0x70]
movs r7, 0x82
lsls r7, 1
adds r0, r7
ldr r0, [r0]
cmp r0, 0x1
ble _0806C7DC
mov r0, r10
bl RunAxAnimationFrame
_0806C7DC:
mov r0, r10
bl RunAxAnimationFrame
_0806C7E2:
ldr r1, [r6, 0xC]
ldr r0, [r6, 0x14]
cmp r1, r0
bne _0806C800
ldr r1, [r6, 0x10]
ldr r0, [r6, 0x18]
cmp r1, r0
bne _0806C800
ldr r1, [sp, 0x44]
ldrb r0, [r1]
cmp r0, 0x9
bhi _0806C806
adds r0, 0x1
strb r0, [r1]
b _0806C806
_0806C800:
movs r0, 0
ldr r2, [sp, 0x44]
strb r0, [r2]
_0806C806:
ldr r0, [r6, 0xC]
str r0, [r6, 0x14]
ldr r2, [r6, 0x10]
str r2, [r6, 0x18]
cmp r0, 0
bge _0806C814
adds r0, 0xFF
_0806C814:
asrs r1, r0, 8
ldr r0, _0806C88C
ldr r3, [r0]
ldr r4, _0806C890
adds r0, r3, r4
movs r7, 0
ldrsh r0, [r0, r7]
subs r1, r0
str r1, [sp, 0x2C]
ldr r0, [r6, 0x1C]
subs r0, r2, r0
movs r1, 0xBA
lsls r1, 1
add r1, r8
ldr r1, [r1]
subs r0, r1
cmp r0, 0
bge _0806C83A
adds r0, 0xFF
_0806C83A:
asrs r1, r0, 8
ldr r4, _0806C894
adds r0, r3, r4
movs r7, 0
ldrsh r3, [r0, r7]
subs r1, r3
str r1, [sp, 0x30]
adds r0, r2, 0
cmp r0, 0
bge _0806C850
adds r0, 0xFF
_0806C850:
asrs r0, 8
subs r0, r3
mov r9, r0
lsrs r0, 31
add r0, r9
asrs r0, 1
mov r9, r0
movs r0, 0xAB
lsls r0, 1
add r0, r8
ldrb r0, [r0]
cmp r0, 0
bne _0806C870
movs r0, 0x1
negs r0, r0
add r9, r0
_0806C870:
movs r0, 0xAE
lsls r0, 1
add r0, r8
ldrb r0, [r0]
cmp r0, 0
bne _0806C898
adds r0, r6, 0
bl sub_8042768
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x34]
b _0806C8D8
.align 2, 0
_0806C88C: .4byte gDungeon
_0806C890: .4byte 0x000181f0
_0806C894: .4byte 0x000181f2
_0806C898:
ldr r0, _0806C8B8
add r0, r8
ldrb r0, [r0]
cmp r0, 0
beq _0806C8C6
ldr r0, _0806C8BC
ldr r0, [r0]
movs r1, 0x4
ands r0, r1
cmp r0, 0
beq _0806C8C0
ldr r1, [sp, 0x2C]
adds r1, 0x1
str r1, [sp, 0x2C]
b _0806C8C6
.align 2, 0
_0806C8B8: .4byte 0x0000015d
_0806C8BC: .4byte gUnknown_202EDCC
_0806C8C0:
ldr r2, [sp, 0x2C]
subs r2, 0x1
str r2, [sp, 0x2C]
_0806C8C6:
movs r1, 0
movs r0, 0xAF
lsls r0, 1
add r0, r8
ldrb r0, [r0]
cmp r0, 0
bne _0806C8D6
movs r1, 0x1
_0806C8D6:
str r1, [sp, 0x34]
_0806C8D8:
ldr r0, [r6, 0xC]
cmp r0, 0
bge _0806C8E0
adds r0, 0xFF
_0806C8E0:
lsls r0, 8
lsrs r0, 16
ldr r1, _0806C998
ldr r2, [sp, 0x28]
ands r2, r1
orrs r2, r0
str r2, [sp, 0x28]
ldr r1, [r6, 0x10]
ldr r0, [r6, 0x1C]
subs r1, r0
movs r5, 0xBA
lsls r5, 1
add r5, r8
ldr r0, [r5]
subs r0, r1, r0
cmp r0, 0
bge _0806C904
adds r0, 0xFF
_0806C904:
lsls r0, 8
lsrs r0, 16
lsls r0, 16
ldr r1, _0806C99C
ands r2, r1
orrs r2, r0
str r2, [sp, 0x28]
add r0, sp, 0xC
mov r1, r10
bl sub_8005700
mov r4, r8
adds r4, 0x98
ldr r0, [r4]
add r1, sp, 0x28
ldr r2, _0806C9A0
ldr r2, [r2]
ldr r3, _0806C9A4
adds r2, r3
ldrb r3, [r2]
add r2, sp, 0xC
bl sub_800F958
adds r0, r6, 0
bl EntityGetStatusSprites
adds r2, r0, 0
ldr r4, [r4]
mov r0, r8
movs r1, 0x4
ldrsh r7, [r0, r1]
movs r3, 0
ldr r0, [sp, 0x34]
cmp r0, 0
beq _0806C958
movs r0, 0xA6
lsls r0, 1
add r0, r8
ldrb r1, [r0]
negs r0, r1
orrs r0, r1
lsrs r3, r0, 31
_0806C958:
adds r0, r4, 0
adds r1, r7, 0
bl UpdateDungeonPokemonSprite
adds r0, r6, 0
mov r1, r9
bl sub_8042EC8
movs r0, 0xAE
lsls r0, 1
add r0, r8
ldrb r1, [r0]
cmp r1, 0
bne _0806C9BA
mov r0, r8
adds r0, 0xFF
ldrb r0, [r0]
cmp r0, 0x1
bne _0806C9AC
ldr r1, [r5]
ldr r0, _0806C9A8
cmp r1, r0
bgt _0806C9BA
movs r2, 0x80
lsls r2, 4
adds r0, r1, r2
str r0, [r5]
movs r1, 0xC8
lsls r1, 8
cmp r0, r1
ble _0806C9BA
b _0806C9B8
.align 2, 0
_0806C998: .4byte 0xffff0000
_0806C99C: .4byte 0x0000ffff
_0806C9A0: .4byte gDungeon
_0806C9A4: .4byte 0x00018208
_0806C9A8: .4byte 0x0000c7ff
_0806C9AC:
ldr r0, [r5]
ldr r3, _0806CA5C
adds r0, r3
str r0, [r5]
cmp r0, 0
bge _0806C9BA
_0806C9B8:
str r1, [r5]
_0806C9BA:
ldr r4, [sp, 0x34]
cmp r4, 0
bne _0806C9C2
b _0806CBDE
_0806C9C2:
movs r4, 0
adds r0, r6, 0
bl sub_806CF54
lsls r0, 24
lsrs r7, r0, 24
add r1, sp, 0x1C
ldr r2, _0806CA60
strh r2, [r1]
ldr r0, _0806CA64
strh r0, [r1, 0x2]
strh r2, [r1, 0x4]
strh r4, [r1, 0x6]
strh r4, [r1, 0x8]
ldr r0, _0806CA68
ldr r0, [r0]
ldr r2, _0806CA6C
adds r0, r2
ldrb r0, [r0]
lsls r0, 10
strh r0, [r1, 0xA]
mov r3, r8
ldrb r0, [r3, 0x6]
adds r5, r1, 0
cmp r0, 0
beq _0806CA08
ldr r1, _0806CA70
adds r0, r1, 0
ldrh r2, [r3, 0x4]
adds r0, r2
lsls r0, 16
lsrs r0, 16
cmp r0, 0x2
bhi _0806CA08
movs r4, 0x1
_0806CA08:
mov r0, r8
adds r0, 0xE4
ldrb r0, [r0]
cmp r0, 0x1
bne _0806CA22
ldr r0, _0806CA68
ldr r0, [r0]
ldr r3, _0806CA74
adds r0, r3
ldrb r0, [r0]
cmp r0, 0
bne _0806CA22
movs r4, 0x1
_0806CA22:
cmp r4, 0
beq _0806CA32
ldrh r1, [r5, 0x6]
movs r4, 0x80
lsls r4, 3
adds r0, r4, 0
orrs r0, r1
strh r0, [r5, 0x6]
_0806CA32:
movs r0, 0
str r0, [sp, 0x3C]
mov r1, r8
ldrb r0, [r1, 0x6]
cmp r0, 0
beq _0806CA46
ldr r2, [sp, 0x40]
ldrb r0, [r2]
cmp r0, 0x2
bne _0806CA4A
_0806CA46:
movs r3, 0x1
str r3, [sp, 0x3C]
_0806CA4A:
mov r0, r8
adds r0, 0x40
ldrb r0, [r0]
cmp r0, 0x4A
beq _0806CA58
cmp r0, 0x47
bne _0806CA78
_0806CA58:
movs r0, 0x1
b _0806CA7A
.align 2, 0
_0806CA5C: .4byte 0xfffff400
_0806CA60: .4byte 0x0000f3ff
_0806CA64: .4byte 0x0000ffff
_0806CA68: .4byte gDungeon
_0806CA6C: .4byte 0x00018208
_0806CA70: .4byte 0xfffffe5f
_0806CA74: .4byte 0x0001820f
_0806CA78:
movs r0, 0
_0806CA7A:
cmp r0, 0
bne _0806CA88
mov r0, r8
adds r0, 0xA4
ldrb r0, [r0]
cmp r0, 0x1
bne _0806CA8C
_0806CA88:
movs r4, 0x1
str r4, [sp, 0x3C]
_0806CA8C:
mov r0, r8
adds r0, 0xFF
ldrb r0, [r0]
cmp r0, 0x2
beq _0806CB16
mov r0, r8
adds r0, 0xB0
ldrb r1, [r0]
cmp r1, 0x6
beq _0806CAAC
subs r0, 0x4
ldrb r0, [r0]
cmp r0, 0x4
beq _0806CAAC
cmp r1, 0x2
bne _0806CABA
_0806CAAC:
ldr r0, _0806CAC4
ldr r0, [r0]
movs r1, 0x2
ands r0, r1
ldr r1, [sp, 0x2C]
adds r1, r0
str r1, [sp, 0x2C]
_0806CABA:
ldr r2, [sp, 0x38]
cmp r2, 0
beq _0806CACC
ldr r0, _0806CAC8
b _0806CAD2
.align 2, 0
_0806CAC4: .4byte gUnknown_202EDCC
_0806CAC8: .4byte 0x000001a5
_0806CACC:
mov r3, r8
movs r4, 0x4
ldrsh r0, [r3, r4]
_0806CAD2:
movs r1, 0
bl GetPokemonOverworldPalette
lsls r0, 24
lsrs r2, r0, 24
adds r0, r6, 0
adds r0, 0x22
ldrb r1, [r0]
cmp r1, 0
bne _0806CAF8
str r2, [sp]
str r5, [sp, 0x4]
mov r0, r10
ldr r1, [sp, 0x2C]
ldr r2, [sp, 0x30]
mov r3, r9
bl DoAxFrame_800558C
b _0806CB16
_0806CAF8:
cmp r1, 0x1
bne _0806CB16
ldr r0, _0806CBF0
ldr r0, [r0]
ands r0, r1
cmp r0, 0
beq _0806CB16
str r2, [sp]
str r5, [sp, 0x4]
mov r0, r10
ldr r1, [sp, 0x2C]
ldr r2, [sp, 0x30]
mov r3, r9
bl DoAxFrame_800558C
_0806CB16:
ldr r0, [r6, 0xC]
cmp r0, 0
bge _0806CB1E
adds r0, 0xFF
_0806CB1E:
asrs r0, 8
ldrh r1, [r6, 0x38]
adds r0, r1
movs r1, 0xB8
lsls r1, 1
add r1, r8
strh r0, [r1]
ldr r0, [r6, 0x10]
cmp r0, 0
bge _0806CB34
adds r0, 0xFF
_0806CB34:
asrs r0, 8
ldrh r2, [r6, 0x3A]
adds r0, r2
movs r3, 0xB9
lsls r3, 1
add r3, r8
strh r0, [r3]
movs r4, 0
ldrsh r2, [r1, r4]
ldr r0, _0806CBF4
ldr r1, [r0]
ldr r4, _0806CBF8
adds r0, r1, r4
movs r4, 0
ldrsh r0, [r0, r4]
subs r4, r2, r0
movs r0, 0
ldrsh r2, [r3, r0]
ldr r3, _0806CBFC
adds r1, r3
movs r3, 0
ldrsh r0, [r1, r3]
subs r5, r2, r0
movs r0, 0x20
negs r0, r0
cmp r4, r0
blt _0806CBDE
cmp r5, r0
blt _0806CBDE
ldr r0, _0806CC00
cmp r4, r0
bgt _0806CBDE
cmp r5, 0xBF
bgt _0806CBDE
cmp r7, 0x6
beq _0806CBDE
adds r0, r6, 0
adds r0, 0x22
ldrb r0, [r0]
cmp r0, 0
bne _0806CBDE
ldr r0, [sp, 0x3C]
lsls r2, r0, 3
adds r2, r0
lsls r2, 3
lsls r0, r7, 1
adds r0, r7
lsls r0, 2
ldr r1, _0806CC04
adds r0, r1
adds r3, r2, r0
movs r0, 0xAB
lsls r0, 1
add r0, r8
ldrb r0, [r0]
cmp r0, 0
beq _0806CBDE
movs r2, 0x8
ldrsh r1, [r3, r2]
adds r1, r4, r1
ldr r0, _0806CC08
ands r1, r0
ldrh r2, [r3, 0x2]
movs r0, 0xFE
lsls r0, 8
ands r0, r2
orrs r0, r1
strh r0, [r3, 0x2]
movs r4, 0xA
ldrsh r1, [r3, r4]
adds r1, r5, r1
ldr r0, _0806CC0C
ands r1, r0
lsls r1, 4
ldrh r2, [r3, 0x6]
movs r0, 0xF
ands r0, r2
orrs r0, r1
strh r0, [r3, 0x6]
adds r0, r3, 0
movs r1, 0
movs r2, 0
movs r3, 0
bl AddSprite
_0806CBDE:
add sp, 0x50
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0806CBF0: .4byte gUnknown_202EDCC
_0806CBF4: .4byte gDungeon
_0806CBF8: .4byte 0x000181f0
_0806CBFC: .4byte 0x000181f2
_0806CC00: .4byte 0x0000010f
_0806CC04: .4byte gUnknown_202ED28
_0806CC08: .4byte 0x000001ff
_0806CC0C: .4byte 0x00000fff
thumb_func_end sub_806C51C
.align 2,0

View File

@ -241,7 +241,6 @@ SECTIONS {
src/code_8069D4C.o(.text);
src/targeting.o(.text);
src/code_8069E0C.o(.text);
asm/code_8069E0C.o(.text);
src/code_806CD90.o(.text);
src/type_effectiveness.o(.text);
src/code_806E8B0.o(.text);

View File

@ -3,6 +3,8 @@
#include "code_803E668.h"
#include "code_8045A00.h"
#include "code_805D8C8.h"
#include "code_804267C.h"
#include "random.h"
#include "constants/ability.h"
#include "constants/move_id.h"
#include "constants/status.h"
@ -2042,4 +2044,300 @@ s32 sub_806C4D4(s32 _species, s32 level, s32 categoryIndex)
return defensiveCount;
}
extern const u8 gUnknown_8106EC8[][13];
extern s32 gUnknown_202EDCC;
extern void sub_800F958(s32 dungeonSpriteID, DungeonPos *pos, DungeonPos *statusOffsets, u32 a3);
extern void sub_8005700(DungeonPos *a0, struct axObject *a1);
u32 EntityGetStatusSprites(Entity *entity);
void UpdateDungeonPokemonSprite(int id, short species, int status, char visible);
extern void sub_8042EC8(Entity *a0, s32 a1);
void DoAxFrame_800558C(struct axObject *a0, s32 spriteX, s32 spriteY, u32 a3, u32 paletteNum, u16 *spriteMasks);
struct unkStruct_202ED28
{
SpriteOAM sprite;
s16 unk8;
s16 unkA;
};
extern struct unkStruct_202ED28 gUnknown_202ED28[][6];
static inline u16 GetUnkFlag(Entity *entity)
{
if ((entity->axObj.axdata.flags & 0x2000))
return 0;
else
return entity->axObj.axdata.flags >> 15;
}
void sub_806C51C(Entity *entity)
{
s32 x, y, y2;
bool8 var_3C;
bool8 decoySprite;
s32 var_34;
DungeonPos pos1;
DungeonPos posArray[4];
u32 statusSprites;
bool8 r4;
u8 r7;
u16 spriteMasks[6];
s32 xSprite, ySprite;
EntityInfo *entInfo = GetEntInfo(entity);
if (gDungeon->unk181e8.cameraTarget == entity) {
decoySprite = FALSE;
}
else {
decoySprite = gDungeon->unk181e8.hallucinating;
}
if (entInfo->curseClassStatus.status == STATUS_DECOY) {
decoySprite = TRUE;
}
if (entity->axObj.unk43_animId2 == entity->axObj.unk42_animId1 && entity->axObj.unk45_orientation == entity->axObj.unk44_direction1 && entity->axObj.unk47 == 0) {
bool8 r2 = FALSE;
if (!GetUnkFlag(entity))
r2 = TRUE;
if (r2) {
s32 r0;
s32 r3 = sub_806CEBC(entity);
entity->fill21 = 1;
if (entInfo->unkFE == 99) {
if (entity->axObj.unk43_animId2 <= 12) {
s32 r2;
if (entInfo->bideClassStatus.status == STATUS_BIDE) {
r2 = 2;
}
else if (entity->fill23 < 3) {
r2 = 0;
}
else {
r2 = 1;
}
r0 = gUnknown_8106EC8[r2][entity->axObj.unk43_animId2];
if (r0 == 7) {
r0 = r3;
}
}
else {
r0 = 99;
}
}
else {
r0 = entInfo->unkFE;
}
if (r0 != 99) {
entity->axObj.unk42_animId1 = r0;
entity->axObj.unk44_direction1 = entity->axObj.unk45_orientation & DIRECTION_MASK;
entity->axObj.unk47 = 1;
if (entity->axObj.unk42_animId1 == 6 && ++entity->axObj.unk46 == 16) {
entity->axObj.unk42_animId1 = r3;
}
}
}
}
if (entity->axObj.unk43_animId2 != entity->axObj.unk42_animId1 || entity->axObj.unk45_orientation != entity->axObj.unk44_direction1 || entity->axObj.unk47 != 0) {
s32 r7;
entity->axObj.unk43_animId2 = entity->axObj.unk42_animId1;
entity->axObj.unk45_orientation = entity->axObj.unk44_direction1;
entity->axObj.unk47 = 0;
r7 = entity->axObj.unk40_maybeAnimTimer;
if (sub_808DA44(entInfo->apparentID, entity->axObj.unk42_animId1)) {
r7 = 0;
}
if (!decoySprite) {
s32 rnd = Rand32Bit() & 3;
AxResInitFile(&entity->axObj.axdata, entity->axObj.spriteFile, entity->axObj.unk42_animId1, entity->axObj.unk44_direction1, r7, rnd, FALSE);
}
else {
OpenedFile *spriteData = GetSpriteData(MONSTER_DECOY);
s32 rnd = Rand32Bit() & 3;
AxResInitFile(&entity->axObj.axdata, spriteData, entity->axObj.unk42_animId1, entity->axObj.unk44_direction1, r7, rnd, FALSE);
}
if (entity->axObj.unk42_animId1 != 6) {
entity->axObj.unk46 = 0;
}
}
if (gDungeon->unk1356C) {
if (entity->axObj.unk43_animId2 != 7 || GetMovementType(entInfo->apparentID) == 2) {
if (entInfo->unk15C != 0) {
if (entInfo->unk160 == 0) {
if (entInfo->unk15F != 0) {
RunAxAnimationFrame(&entity->axObj);
RunAxAnimationFrame(&entity->axObj);
RunAxAnimationFrame(&entity->axObj);
}
else {
RunAxAnimationFrame(&entity->axObj);
}
}
}
else {
RunAxAnimationFrame(&entity->axObj);
}
}
}
else {
if (entInfo->frozenClassStatus.status != STATUS_FROZEN && entInfo->frozenClassStatus.status != STATUS_PETRIFIED) {
if (gDungeon->unk644.unk28 != 0 && gDungeon->unk1BDD4.unk1C05F == 0) {
RunAxAnimationFrame(&entity->axObj);
RunAxAnimationFrame(&entity->axObj);
}
else if ((entity->axObj.unk43_animId2 == 0 || entity->axObj.unk43_animId2 == 7) && GetEntInfo(entity)->speedStage > 1) {
RunAxAnimationFrame(&entity->axObj);
}
RunAxAnimationFrame(&entity->axObj);
}
}
if (entity->pixelPos.x == entity->prevPixelPos.x && entity->pixelPos.y == entity->prevPixelPos.y) {
if (entity->fill23 < 10) {
entity->fill23++;
}
}
else {
entity->fill23 = 0;
}
entity->prevPixelPos.x = entity->pixelPos.x;
entity->prevPixelPos.y = entity->pixelPos.y;
x = (entity->pixelPos.x / 256) - gDungeon->unk181e8.cameraPixelPos.x;
y = (((entity->pixelPos.y - entity->unk1C) - entInfo->unk174.raw) / 256) - gDungeon->unk181e8.cameraPixelPos.y;
y2 = (entity->pixelPos.y / 256) - gDungeon->unk181e8.cameraPixelPos.y;
y2 /= 2;
if (entInfo->unk156 == 0) {
y2--;
}
if (entInfo->unk15C == 0) {
var_3C = sub_8042768(entity);
}
else {
if (entInfo->unk15D != 0) {
if (gUnknown_202EDCC & 4) {
x++;
}
else {
x--;
}
}
var_3C = (entInfo->unk15E == 0);
}
pos1.x = entity->pixelPos.x / 256;
pos1.y = ((entity->pixelPos.y - entity->unk1C) - entInfo->unk174.raw) / 256;
sub_8005700(posArray, &entity->axObj);
sub_800F958(entInfo->unk98, &pos1, posArray, gDungeon->unk181e8.unk18208);
statusSprites = EntityGetStatusSprites(entity);
UpdateDungeonPokemonSprite(entInfo->unk98, entInfo->apparentID, statusSprites, (var_3C && entInfo->unk14C));
sub_8042EC8(entity, y2);
if (entInfo->unk15C == 0) {
if (entInfo->unkFF == 1) {
if (entInfo->unk174.raw <= IntToF248_2(199.999).raw) {
entInfo->unk174.raw += IntToF248_2(8).raw;
if (entInfo->unk174.raw > IntToF248_2(200).raw) {
entInfo->unk174.raw = IntToF248_2(200).raw;
}
}
}
else {
entInfo->unk174.raw -= IntToF248_2(12).raw;
if (entInfo->unk174.raw < IntToF248_2(0).raw) {
entInfo->unk174.raw = IntToF248_2(0).raw;
}
}
}
if (!var_3C)
return;
r4 = FALSE;
r7 = sub_806CF54(entity);
spriteMasks[0] = 0xF3FF;
spriteMasks[1] = 0xFFFF;
spriteMasks[2] = 0xF3FF;
spriteMasks[3] = 0;
spriteMasks[4] = 0;
spriteMasks[5] = gDungeon->unk181e8.unk18208 << 10;
if (entInfo->isNotTeamMember && (entInfo->apparentID == MONSTER_DEOXYS_ATTACK || entInfo->apparentID == MONSTER_DEOXYS_DEFENSE || entInfo->apparentID == MONSTER_DEOXYS_SPEED)) {
r4 = TRUE;
}
if (entInfo->invisibleClassStatus.status == STATUS_INVISIBLE && !gDungeon->unk181e8.unk1820F) {
r4 = TRUE;
}
if (r4) {
spriteMasks[3] |= 0x400;
}
var_34 = 0;
if (!entInfo->isNotTeamMember || entInfo->curseClassStatus.status == STATUS_DECOY) {
var_34 = 1;
}
if (IsClientOrTeamBase(entInfo->joinedAt.id) || entInfo->monsterBehavior == 1) {
var_34 = 1;
}
if (entInfo->unkFF != 2) {
s32 overworldPal;
if (entInfo->frozenClassStatus.status == STATUS_PETRIFIED || entInfo->burnClassStatus.status == STATUS_PARALYSIS || entInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) {
x += gUnknown_202EDCC & 2;
}
if (decoySprite) {
overworldPal = GetPokemonOverworldPalette(MONSTER_DECOY, 0);
}
else {
overworldPal = GetPokemonOverworldPalette(entInfo->apparentID, 0);
}
if (entity->unk22 == 0) {
DoAxFrame_800558C(&entity->axObj, x, y, y2, overworldPal, spriteMasks);
}
else if (entity->unk22 == 1 && (gUnknown_202EDCC & 1)) {
DoAxFrame_800558C(&entity->axObj, x, y, y2, overworldPal, spriteMasks);
}
}
entInfo->pixelPos.x = (entity->pixelPos.x / 256) + entity->axObj.axdata.sub1.shadow.x;
entInfo->pixelPos.y = (entity->pixelPos.y / 256) + entity->axObj.axdata.sub1.shadow.y;
xSprite = entInfo->pixelPos.x - gDungeon->unk181e8.cameraPixelPos.x;
ySprite = entInfo->pixelPos.y - gDungeon->unk181e8.cameraPixelPos.y;
if (xSprite >= -32 && ySprite >= -32 && xSprite <= 271 && ySprite <= 191 && r7 != 6 && entity->unk22 == 0) {
struct unkStruct_202ED28 *spriteStructPtr = &gUnknown_202ED28[var_34][r7];
if (entInfo->unk156 != 0) {
u32 finalXSprite, finalYSprite;
finalXSprite = xSprite + spriteStructPtr->unk8;
finalXSprite &= SPRITEOAM_MASK_X;
spriteStructPtr->sprite.attrib2 &= ~SPRITEOAM_MASK_X;
spriteStructPtr->sprite.attrib2 |= finalXSprite;
finalYSprite = ySprite + spriteStructPtr->unkA;
finalYSprite &= SPRITEOAM_MAX_UNK6_4;
finalYSprite <<= SPRITEOAM_SHIFT_UNK6_4;
spriteStructPtr->sprite.unk6 &= 0xF;
spriteStructPtr->sprite.unk6 |= finalYSprite;
AddSprite(&spriteStructPtr->sprite, 0, NULL, NULL);
}
}
}
//