pokeemerald/asm/sprite.s
2017-09-02 01:42:44 +02:00

2109 lines
35 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start AffineAnimDelay
@ void AffineAnimDelay(u8 index, struct obj *object)
AffineAnimDelay: @ 8007BD8
push {r4,r5,lr}
sub sp, 0x8
adds r5, r1, 0
lsls r0, 24
lsrs r4, r0, 24
adds r0, r5, 0
adds r1, r4, 0
bl DecrementAffineAnimDelayCounter
lsls r0, 24
cmp r0, 0
bne _08007C02
adds r0, r4, 0
adds r1, r5, 0
mov r2, sp
bl GetAffineAnimFrame
adds r0, r4, 0
mov r1, sp
bl ApplyAffineAnimFrameRelativeAndUpdateMatrix
_08007C02:
add sp, 0x8
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end AffineAnimDelay
thumb_func_start AffineAnimCmd_loop
@ void AffineAnimCmd_loop(u8 index, struct obj *object)
AffineAnimCmd_loop: @ 8007C0C
push {lr}
adds r3, r1, 0
lsls r0, 24
lsrs r2, r0, 24
ldr r1, =sAffineAnimStates
lsls r0, r2, 1
adds r0, r2
lsls r0, 2
adds r0, r1
ldrb r0, [r0, 0x3]
cmp r0, 0
beq _08007C34
adds r0, r2, 0
adds r1, r3, 0
bl ContinueAffineAnimLoop
b _08007C3C
.pool
_08007C34:
adds r0, r2, 0
adds r1, r3, 0
bl BeginAffineAnimLoop
_08007C3C:
pop {r0}
bx r0
thumb_func_end AffineAnimCmd_loop
thumb_func_start BeginAffineAnimLoop
@ void BeginAffineAnimLoop(u8 index, struct obj *object)
BeginAffineAnimLoop: @ 8007C40
push {r4,lr}
adds r4, r1, 0
lsls r0, 24
lsrs r0, 24
ldr r1, =sAffineAnimStates
lsls r3, r0, 1
adds r3, r0
lsls r3, 2
adds r3, r1
ldrb r2, [r3]
ldr r1, [r4, 0x10]
lsls r2, 2
adds r2, r1
ldrb r1, [r3, 0x1]
ldr r2, [r2]
lsls r1, 3
adds r1, r2
ldrh r1, [r1, 0x2]
strb r1, [r3, 0x3]
adds r1, r4, 0
bl JumpToTopOfRotScalAnimLoop
adds r0, r4, 0
bl ContinueAffineAnim
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end BeginAffineAnimLoop
thumb_func_start ContinueAffineAnimLoop
@ void ContinueAffineAnimLoop(u8 index, struct obj *object)
ContinueAffineAnimLoop: @ 8007C7C
push {r4,lr}
adds r4, r1, 0
lsls r0, 24
lsrs r0, 24
ldr r2, =sAffineAnimStates
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
adds r1, r2
ldrb r2, [r1, 0x3]
subs r2, 0x1
strb r2, [r1, 0x3]
adds r1, r4, 0
bl JumpToTopOfRotScalAnimLoop
adds r0, r4, 0
bl ContinueAffineAnim
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end ContinueAffineAnimLoop
thumb_func_start JumpToTopOfRotScalAnimLoop
@ void JumpToTopOfRotScalAnimLoop(u8 index, struct obj *object)
JumpToTopOfRotScalAnimLoop: @ 8007CAC
push {r4-r7,lr}
mov r12, r1
lsls r0, 24
lsrs r5, r0, 24
ldr r1, =sAffineAnimStates
lsls r3, r5, 1
adds r0, r3, r5
lsls r0, 2
adds r2, r0, r1
ldrb r0, [r2, 0x3]
adds r6, r1, 0
cmp r0, 0
beq _08007D0C
ldrb r0, [r2, 0x1]
subs r0, 0x1
strb r0, [r2, 0x1]
adds r4, r3, 0
b _08007CDC
.pool
_08007CD4:
cmp r2, 0
beq _08007D00
subs r0, r2, 0x1
strb r0, [r3, 0x1]
_08007CDC:
adds r0, r4, r5
lsls r0, 2
adds r3, r0, r6
ldrb r0, [r3]
mov r2, r12
ldr r1, [r2, 0x10]
lsls r0, 2
adds r0, r1
ldrb r2, [r3, 0x1]
ldr r1, [r0]
lsls r0, r2, 3
adds r0, r1
subs r0, 0x8
movs r7, 0
ldrsh r1, [r0, r7]
ldr r0, =0x00007ffd
cmp r1, r0
bne _08007CD4
_08007D00:
adds r1, r4, r5
lsls r1, 2
adds r1, r6
ldrb r0, [r1, 0x1]
subs r0, 0x1
strb r0, [r1, 0x1]
_08007D0C:
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end JumpToTopOfRotScalAnimLoop
thumb_func_start AffineAnimCmd_jump
@ void AffineAnimCmd_jump(u8 index, struct obj *object)
AffineAnimCmd_jump: @ 8007D18
push {r4-r6,lr}
sub sp, 0x8
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
ldr r0, =sAffineAnimStates
lsls r4, r5, 1
adds r4, r5
lsls r4, 2
adds r4, r0
ldrb r2, [r4]
ldr r0, [r1, 0x10]
lsls r2, 2
adds r2, r0
ldrb r0, [r4, 0x1]
ldr r2, [r2]
lsls r0, 3
adds r0, r2
ldrh r0, [r0, 0x2]
strb r0, [r4, 0x1]
mov r6, sp
adds r0, r5, 0
mov r2, sp
bl GetAffineAnimFrame
adds r0, r5, 0
mov r1, sp
bl ApplyAffineAnimFrame
ldrb r0, [r6, 0x5]
strb r0, [r4, 0x2]
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end AffineAnimCmd_jump
thumb_func_start AffineAnimCmd_end
@ void AffineAnimCmd_end(u8 index, struct obj *object)
AffineAnimCmd_end: @ 8007D64
push {lr}
sub sp, 0x8
lsls r0, 24
lsrs r0, 24
movs r2, 0
movs r3, 0
str r2, [sp]
str r3, [sp, 0x4]
adds r1, 0x3F
ldrb r2, [r1]
movs r3, 0x20
orrs r2, r3
strb r2, [r1]
ldr r2, =sAffineAnimStates
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
adds r1, r2
ldrb r2, [r1, 0x1]
subs r2, 0x1
strb r2, [r1, 0x1]
mov r1, sp
bl ApplyAffineAnimFrameRelativeAndUpdateMatrix
add sp, 0x8
pop {r0}
bx r0
.pool
thumb_func_end AffineAnimCmd_end
thumb_func_start AffineAnimCmd_frame
@ void AffineAnimCmd_frame(u8 index, struct obj *object)
AffineAnimCmd_frame: @ 8007DA0
push {r4,r5,lr}
sub sp, 0x8
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
mov r5, sp
adds r0, r4, 0
mov r2, sp
bl GetAffineAnimFrame
adds r0, r4, 0
mov r1, sp
bl ApplyAffineAnimFrame
ldr r1, =sAffineAnimStates
lsls r0, r4, 1
adds r0, r4
lsls r0, 2
adds r0, r1
ldrb r1, [r5, 0x5]
strb r1, [r0, 0x2]
add sp, 0x8
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end AffineAnimCmd_frame
thumb_func_start CopyOamMatrix
@ void CopyOamMatrix(u8 rotscale_entry_index, s16 rotscale_data[])
CopyOamMatrix: @ 8007DD8
lsls r0, 24
ldr r2, =gOamMatrices
lsrs r0, 21
adds r0, r2
ldrh r2, [r1]
strh r2, [r0]
ldrh r2, [r1, 0x2]
strh r2, [r0, 0x2]
ldrh r2, [r1, 0x4]
strh r2, [r0, 0x4]
ldrh r1, [r1, 0x6]
strh r1, [r0, 0x6]
bx lr
.pool
thumb_func_end CopyOamMatrix
thumb_func_start GetSpriteMatrixNum
@ int GetSpriteMatrixNum(struct obj *obj)
GetSpriteMatrixNum: @ 8007DF8
push {lr}
adds r2, r0, 0
movs r3, 0
ldrb r0, [r2, 0x1]
lsls r0, 30
lsrs r0, 30
movs r1, 0x1
ands r0, r1
cmp r0, 0
beq _08007E12
ldrb r0, [r2, 0x3]
lsls r0, 26
lsrs r3, r0, 27
_08007E12:
adds r0, r3, 0
pop {r1}
bx r1
thumb_func_end GetSpriteMatrixNum
thumb_func_start sub_8007E18
@ void sub_8007E18(struct obj *obj, s16 a2, s16 a3)
sub_8007E18: @ 8007E18
strh r1, [r0, 0x3A]
strh r2, [r0, 0x3C]
adds r0, 0x3F
ldrb r1, [r0]
movs r2, 0x80
orrs r1, r2
strb r1, [r0]
bx lr
thumb_func_end sub_8007E18
thumb_func_start sub_8007E28
@ int sub_8007E28(int a1, int a2, int a3)
sub_8007E28: @ 8007E28
push {r4,r5,lr}
adds r3, r0, 0
adds r5, r2, 0
subs r0, r1, r3
cmp r0, 0
bge _08007E3A
negs r0, r0
asrs r4, r0, 9
b _08007E3E
_08007E3A:
asrs r0, 9
negs r4, r0
_08007E3E:
adds r0, r5, 0
muls r0, r1
adds r1, r3, 0
bl __udivsi3
adds r0, r4
subs r0, r5, r0
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8007E28
thumb_func_start obj_update_pos2
@ void obj_update_pos2(struct obj *obj, int a2, int a3)
obj_update_pos2: @ 8007E54
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
adds r5, r0, 0
adds r6, r1, 0
mov r8, r2
ldrb r1, [r5, 0x3]
lsls r0, r1, 26
lsrs r7, r0, 27
movs r0, 0x80
lsls r0, 4
mov r9, r0
cmp r6, r9
beq _08007EA2
ldr r2, =gUnknown_082EC6F4
lsrs r1, 6
lsls r1, 3
ldrb r0, [r5, 0x1]
lsrs r0, 6
lsls r0, 5
adds r1, r0
adds r1, r2
ldr r0, [r1]
lsls r4, r0, 8
lsls r0, 16
ldr r2, =gOamMatrices
lsls r1, r7, 3
adds r1, r2
movs r2, 0
ldrsh r1, [r1, r2]
bl __divsi3
adds r1, r0, 0
adds r0, r4, 0
adds r2, r6, 0
bl sub_8007E28
strh r0, [r5, 0x24]
_08007EA2:
cmp r8, r9
beq _08007EDA
ldr r2, =gUnknown_082EC6F4
ldrb r1, [r5, 0x3]
lsrs r1, 6
lsls r1, 3
ldrb r0, [r5, 0x1]
lsrs r0, 6
lsls r0, 5
adds r1, r0
adds r2, 0x4
adds r1, r2
ldr r0, [r1]
lsls r4, r0, 8
lsls r0, 16
ldr r2, =gOamMatrices
lsls r1, r7, 3
adds r1, r2
movs r2, 0x6
ldrsh r1, [r1, r2]
bl __divsi3
adds r1, r0, 0
adds r0, r4, 0
mov r2, r8
bl sub_8007E28
strh r0, [r5, 0x26]
_08007EDA:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end obj_update_pos2
thumb_func_start SetSpriteOamFlipBits
@ void SetSpriteOamFlipBits(struct obj *obj, u8 a2, char a3)
SetSpriteOamFlipBits: @ 8007EF0
push {r4-r6,lr}
mov r6, r8
push {r6}
lsls r1, 24
lsrs r1, 24
lsls r2, 24
lsrs r2, 24
ldrb r6, [r0, 0x3]
lsls r3, r6, 26
lsrs r3, 27
movs r4, 0x7
ands r3, r4
lsls r3, 1
subs r4, 0x46
mov r8, r4
mov r5, r8
ands r5, r6
orrs r5, r3
strb r5, [r0, 0x3]
lsls r4, r5, 26
lsrs r4, 27
movs r6, 0x3F
adds r6, r0
mov r12, r6
ldrb r3, [r6]
lsls r3, 31
lsrs r3, 31
eors r1, r3
movs r6, 0x1
ands r1, r6
lsls r1, 3
orrs r4, r1
lsls r4, 1
mov r3, r8
ands r3, r5
orrs r3, r4
strb r3, [r0, 0x3]
lsls r4, r3, 26
lsrs r4, 27
mov r5, r12
ldrb r1, [r5]
lsls r1, 30
lsrs r1, 31
eors r2, r1
ands r2, r6
lsls r2, 4
orrs r4, r2
lsls r4, 1
mov r6, r8
ands r3, r6
orrs r3, r4
strb r3, [r0, 0x3]
pop {r3}
mov r8, r3
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end SetSpriteOamFlipBits
thumb_func_start AffineAnimStateRestartAnim
@ void AffineAnimStateRestartAnim(u8 index)
AffineAnimStateRestartAnim: @ 8007F64
lsls r0, 24
lsrs r0, 24
ldr r2, =sAffineAnimStates
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
adds r1, r2
movs r0, 0
strb r0, [r1, 0x1]
strb r0, [r1, 0x2]
strb r0, [r1, 0x3]
bx lr
.pool
thumb_func_end AffineAnimStateRestartAnim
thumb_func_start rotscale_reset_full_1
@ void rotscale_reset_full_1(u8 index, u8 a2)
rotscale_reset_full_1: @ 8007F80
lsls r0, 24
lsrs r0, 24
ldr r3, =sAffineAnimStates
lsls r2, r0, 1
adds r2, r0
lsls r2, 2
adds r2, r3
movs r3, 0
strb r1, [r2]
strb r3, [r2, 0x1]
strb r3, [r2, 0x2]
strb r3, [r2, 0x3]
movs r0, 0x80
lsls r0, 1
strh r0, [r2, 0x4]
strh r0, [r2, 0x6]
strh r3, [r2, 0x8]
bx lr
.pool
thumb_func_end rotscale_reset_full_1
thumb_func_start rotscale_reset_full_2
@ void rotscale_reset_full_2(u8 index)
rotscale_reset_full_2: @ 8007FA8
lsls r0, 24
lsrs r0, 24
ldr r2, =sAffineAnimStates
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
adds r1, r2
movs r0, 0
strb r0, [r1]
strb r0, [r1, 0x1]
strb r0, [r1, 0x2]
strb r0, [r1, 0x3]
movs r2, 0x80
lsls r2, 1
strh r2, [r1, 0x4]
strh r2, [r1, 0x6]
strh r0, [r1, 0x8]
bx lr
.pool
thumb_func_end rotscale_reset_full_2
thumb_func_start rotscale_frame_apply_absolute
@ void rotscale_frame_apply_absolute(u8 index, int a2)
rotscale_frame_apply_absolute: @ 8007FD0
lsls r0, 24
lsrs r0, 24
ldr r3, =sAffineAnimStates
lsls r2, r0, 1
adds r2, r0
lsls r2, 2
adds r2, r3
ldrh r0, [r1]
strh r0, [r2, 0x4]
ldrh r0, [r1, 0x2]
strh r0, [r2, 0x6]
ldrb r0, [r1, 0x4]
lsls r0, 8
strh r0, [r2, 0x8]
bx lr
.pool
thumb_func_end rotscale_frame_apply_absolute
thumb_func_start DecrementAnimDelayCounter
DecrementAnimDelayCounter: @ 8007FF4
push {lr}
adds r3, r0, 0
adds r3, 0x2C
ldrb r2, [r3]
movs r0, 0x40
ands r0, r2
cmp r0, 0
bne _08008018
lsls r0, r2, 26
lsrs r0, 26
subs r0, 0x1
movs r1, 0x3F
ands r0, r1
movs r1, 0x40
negs r1, r1
ands r1, r2
orrs r1, r0
strb r1, [r3]
_08008018:
pop {r0}
bx r0
thumb_func_end DecrementAnimDelayCounter
thumb_func_start DecrementAffineAnimDelayCounter
@ u8 DecrementAffineAnimDelayCounter(struct obj *object, u8 index)
DecrementAffineAnimDelayCounter: @ 800801C
push {lr}
lsls r1, 24
lsrs r2, r1, 24
adds r3, r0, 0
adds r3, 0x2C
ldrb r1, [r3]
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _08008040
ldr r0, =sAffineAnimStates
lsls r1, r2, 1
adds r1, r2
lsls r1, 2
adds r1, r0
ldrb r0, [r1, 0x2]
subs r0, 0x1
strb r0, [r1, 0x2]
_08008040:
ldrb r0, [r3]
lsrs r0, 7
pop {r1}
bx r1
.pool
thumb_func_end DecrementAffineAnimDelayCounter
thumb_func_start ApplyAffineAnimFrameRelativeAndUpdateMatrix
@ void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 index, int a2)
ApplyAffineAnimFrameRelativeAndUpdateMatrix: @ 800804C
push {r4-r6,lr}
sub sp, 0x10
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
ldr r0, =sAffineAnimStates
lsls r4, r5, 1
adds r4, r5
lsls r4, 2
adds r4, r0
ldrh r0, [r1]
ldrh r2, [r4, 0x4]
adds r0, r2
strh r0, [r4, 0x4]
ldrh r0, [r1, 0x2]
ldrh r2, [r4, 0x6]
adds r0, r2
strh r0, [r4, 0x6]
ldrb r0, [r1, 0x4]
lsls r0, 8
ldrh r1, [r4, 0x8]
adds r0, r1
ldr r2, =0xffffff00
adds r1, r2, 0
ands r0, r1
strh r0, [r4, 0x8]
movs r1, 0x4
ldrsh r0, [r4, r1]
bl divide_0x10000_by
lsls r0, 16
lsrs r0, 16
ldr r6, =0xffff0000
ldr r1, [sp]
ands r1, r6
orrs r1, r0
str r1, [sp]
movs r2, 0x6
ldrsh r0, [r4, r2]
bl divide_0x10000_by
lsls r0, 16
ldr r2, =0x0000ffff
ldr r1, [sp]
ands r1, r2
orrs r1, r0
str r1, [sp]
ldrh r1, [r4, 0x8]
ldr r0, [sp, 0x4]
ands r0, r6
orrs r0, r1
str r0, [sp, 0x4]
add r4, sp, 0x8
mov r0, sp
adds r1, r4, 0
movs r2, 0x1
movs r3, 0x2
bl ObjAffineSet
adds r0, r5, 0
adds r1, r4, 0
bl CopyOamMatrix
add sp, 0x10
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end ApplyAffineAnimFrameRelativeAndUpdateMatrix
thumb_func_start divide_0x10000_by
@ int divide_0x10000_by(int n)
divide_0x10000_by: @ 80080E4
push {lr}
adds r1, r0, 0
movs r0, 0x80
lsls r0, 9
lsls r1, 16
asrs r1, 16
bl __divsi3
lsls r0, 16
asrs r0, 16
pop {r1}
bx r1
thumb_func_end divide_0x10000_by
thumb_func_start GetAffineAnimFrame
@ void GetAffineAnimFrame(u8 index, struct obj *obj, rotscale_frame *a3)
GetAffineAnimFrame: @ 80080FC
push {r4,lr}
lsls r0, 24
lsrs r0, 24
ldr r3, =sAffineAnimStates
lsls r4, r0, 1
adds r4, r0
lsls r4, 2
adds r4, r3
ldrb r3, [r4]
ldr r0, [r1, 0x10]
lsls r3, 2
adds r3, r0
ldrb r0, [r4, 0x1]
ldr r3, [r3]
lsls r0, 3
adds r0, r3
ldrh r0, [r0]
strh r0, [r2]
ldrb r3, [r4]
ldr r0, [r1, 0x10]
lsls r3, 2
adds r3, r0
ldrb r0, [r4, 0x1]
ldr r3, [r3]
lsls r0, 3
adds r0, r3
ldrh r0, [r0, 0x2]
strh r0, [r2, 0x2]
ldrb r3, [r4]
ldr r0, [r1, 0x10]
lsls r3, 2
adds r3, r0
ldrb r0, [r4, 0x1]
ldr r3, [r3]
lsls r0, 3
adds r0, r3
ldrb r0, [r0, 0x4]
strb r0, [r2, 0x4]
ldrb r3, [r4]
ldr r0, [r1, 0x10]
lsls r3, 2
adds r3, r0
ldrb r0, [r4, 0x1]
ldr r1, [r3]
lsls r0, 3
adds r0, r1
ldrb r0, [r0, 0x5]
strb r0, [r2, 0x5]
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end GetAffineAnimFrame
thumb_func_start ApplyAffineAnimFrame
ApplyAffineAnimFrame: @ 8008168
push {r4,lr}
sub sp, 0x8
adds r2, r1, 0
lsls r0, 24
lsrs r4, r0, 24
movs r0, 0
movs r1, 0
str r0, [sp]
str r1, [sp, 0x4]
ldrb r0, [r2, 0x5]
cmp r0, 0
beq _0800818E
subs r0, 0x1
strb r0, [r2, 0x5]
adds r0, r4, 0
adds r1, r2, 0
bl ApplyAffineAnimFrameRelativeAndUpdateMatrix
b _0800819E
_0800818E:
adds r0, r4, 0
adds r1, r2, 0
bl rotscale_frame_apply_absolute
adds r0, r4, 0
mov r1, sp
bl ApplyAffineAnimFrameRelativeAndUpdateMatrix
_0800819E:
add sp, 0x8
pop {r4}
pop {r0}
bx r0
thumb_func_end ApplyAffineAnimFrame
thumb_func_start StartObjectImageAnim
@ void StartObjectImageAnim(struct obj *object, u8 whichAnim)
StartObjectImageAnim: @ 80081A8
adds r2, r0, 0
adds r2, 0x2A
strb r1, [r2]
adds r0, 0x3F
ldrb r1, [r0]
movs r2, 0x4
orrs r1, r2
movs r2, 0x11
negs r2, r2
ands r1, r2
strb r1, [r0]
bx lr
thumb_func_end StartObjectImageAnim
thumb_func_start StartObjectImageAnimIfDifferent
@ void StartObjectImageAnimIfDifferent(struct obj *object, u8 whichAnim)
StartObjectImageAnimIfDifferent: @ 80081C0
push {lr}
adds r2, r0, 0
lsls r1, 24
lsrs r1, 24
adds r0, 0x2A
ldrb r0, [r0]
cmp r0, r1
beq _080081D6
adds r0, r2, 0
bl StartObjectImageAnim
_080081D6:
pop {r0}
bx r0
thumb_func_end StartObjectImageAnimIfDifferent
thumb_func_start SeekObjectImageAnim
@ void SeekObjectImageAnim(struct obj *object, u8 cmdIndex)
SeekObjectImageAnim: @ 80081DC
push {r4-r7,lr}
adds r3, r0, 0
lsls r1, 24
lsrs r1, 24
adds r4, r3, 0
adds r4, 0x2C
ldrb r0, [r4]
lsls r0, 25
lsrs r6, r0, 31
subs r1, 0x1
adds r0, r3, 0
adds r0, 0x2B
strb r1, [r0]
ldrb r1, [r4]
movs r7, 0x40
negs r7, r7
adds r0, r7, 0
ands r0, r1
strb r0, [r4]
adds r2, r3, 0
adds r2, 0x3F
ldrb r1, [r2]
movs r0, 0x5
negs r0, r0
ands r0, r1
movs r1, 0x11
negs r1, r1
ands r0, r1
strb r0, [r2]
ldrb r1, [r4]
movs r5, 0x41
negs r5, r5
adds r0, r5, 0
ands r0, r1
strb r0, [r4]
adds r0, r3, 0
bl ContinueAnim
ldrb r2, [r4]
movs r0, 0x3F
ands r0, r2
cmp r0, 0
beq _08008244
lsls r0, r2, 26
lsrs r0, 26
adds r0, 0x1
movs r1, 0x3F
ands r0, r1
adds r1, r7, 0
ands r1, r2
orrs r1, r0
strb r1, [r4]
_08008244:
lsls r2, r6, 6
ldrb r1, [r4]
adds r0, r5, 0
ands r0, r1
orrs r0, r2
strb r0, [r4]
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end SeekObjectImageAnim
thumb_func_start StartObjectRotScalAnim
@ void StartObjectRotScalAnim(struct obj *object, u8 whichAnim)
StartObjectRotScalAnim: @ 8008258
push {r4,r5,lr}
adds r5, r0, 0
lsls r4, r1, 24
lsrs r4, 24
bl GetSpriteMatrixNum
lsls r0, 24
lsrs r0, 24
adds r1, r4, 0
bl rotscale_reset_full_1
adds r5, 0x3F
ldrb r0, [r5]
movs r1, 0x8
orrs r0, r1
movs r1, 0x21
negs r1, r1
ands r0, r1
strb r0, [r5]
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end StartObjectRotScalAnim
thumb_func_start StartObjectRotScalAnimIfDifferent
@ void StartObjectRotScalAnimIfDifferent(struct obj *object, u8 whichAnim)
StartObjectRotScalAnimIfDifferent: @ 8008284
push {r4,r5,lr}
adds r5, r0, 0
lsls r1, 24
lsrs r4, r1, 24
bl GetSpriteMatrixNum
lsls r0, 24
lsrs r0, 24
ldr r2, =sAffineAnimStates
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
adds r1, r2
ldrb r0, [r1]
cmp r0, r4
beq _080082AC
adds r0, r5, 0
adds r1, r4, 0
bl StartObjectRotScalAnim
_080082AC:
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end StartObjectRotScalAnimIfDifferent
thumb_func_start sub_80082B8
sub_80082B8: @ 80082B8
push {r4,r5,lr}
adds r5, r0, 0
lsls r4, r1, 24
lsrs r4, 24
bl GetSpriteMatrixNum
lsls r0, 24
lsrs r0, 24
ldr r2, =sAffineAnimStates
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
adds r1, r2
strb r4, [r1]
adds r5, 0x3F
ldrb r0, [r5]
movs r1, 0x8
orrs r0, r1
movs r1, 0x21
negs r1, r1
ands r0, r1
strb r0, [r5]
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end sub_80082B8
thumb_func_start sub_80082F0
sub_80082F0: @ 80082F0
push {r4,r5,lr}
adds r5, r0, 0
lsls r1, 24
lsrs r4, r1, 24
bl GetSpriteMatrixNum
lsls r0, 24
lsrs r0, 24
ldr r2, =sAffineAnimStates
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
adds r1, r2
ldrb r0, [r1]
cmp r0, r4
beq _08008318
adds r0, r5, 0
adds r1, r4, 0
bl sub_80082B8
_08008318:
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end sub_80082F0
thumb_func_start SetSpriteSheetFrameTileNum
SetSpriteSheetFrameTileNum: @ 8008324
push {lr}
adds r3, r0, 0
adds r0, 0x3F
ldrb r1, [r0]
movs r0, 0x40
ands r0, r1
cmp r0, 0
beq _08008370
adds r0, r3, 0
adds r0, 0x2A
ldrb r1, [r0]
ldr r0, [r3, 0x8]
lsls r1, 2
adds r1, r0
adds r0, r3, 0
adds r0, 0x2B
ldrb r0, [r0]
ldr r1, [r1]
lsls r0, 2
adds r0, r1
ldrh r2, [r0]
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bge _08008358
movs r2, 0
_08008358:
adds r0, r3, 0
adds r0, 0x40
ldrh r1, [r0]
adds r1, r2
ldr r2, =0x000003ff
adds r0, r2, 0
ands r1, r0
ldrh r2, [r3, 0x4]
ldr r0, =0xfffffc00
ands r0, r2
orrs r0, r1
strh r0, [r3, 0x4]
_08008370:
pop {r0}
bx r0
.pool
thumb_func_end SetSpriteSheetFrameTileNum
thumb_func_start ResetAffineAnimData
@ void ResetAffineAnimData()
ResetAffineAnimData: @ 800837C
push {r4,lr}
ldr r1, =gAffineAnimsDisabled
movs r0, 0
strb r0, [r1]
ldr r1, =gUnknown_03003018
movs r0, 0
str r0, [r1]
bl ResetOamMatrices
movs r4, 0
_08008390:
adds r0, r4, 0
bl rotscale_reset_full_2
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x1F
bls _08008390
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end ResetAffineAnimData
thumb_func_start rotscale_alloc_entry
@ u8 rotscale_alloc_entry()
rotscale_alloc_entry: @ 80083B0
push {r4,lr}
movs r2, 0
movs r1, 0x1
ldr r0, =gUnknown_03003018
ldr r4, [r0]
adds r3, r0, 0
_080083BC:
adds r0, r4, 0
ands r0, r1
cmp r0, 0
bne _080083D4
ldr r0, [r3]
orrs r0, r1
str r0, [r3]
adds r0, r2, 0
b _080083E2
.pool
_080083D4:
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
lsls r1, 1
cmp r2, 0x1F
bls _080083BC
movs r0, 0xFF
_080083E2:
pop {r4}
pop {r1}
bx r1
thumb_func_end rotscale_alloc_entry
thumb_func_start FreeOamMatrix
@ void FreeOamMatrix(u8 rotscale_index)
FreeOamMatrix: @ 80083E8
push {lr}
sub sp, 0x4
lsls r0, 24
lsrs r2, r0, 24
movs r0, 0
movs r1, 0x1
ldr r3, =gUnknown_03003018
cmp r0, r2
bcs _08008406
_080083FA:
adds r0, 0x1
lsls r0, 24
lsrs r0, 24
lsls r1, 1
cmp r0, r2
bcc _080083FA
_08008406:
ldr r0, [r3]
bics r0, r1
str r0, [r3]
movs r1, 0x80
lsls r1, 1
str r1, [sp]
adds r0, r2, 0
movs r2, 0
movs r3, 0
bl SetOamMatrix
add sp, 0x4
pop {r0}
bx r0
.pool
thumb_func_end FreeOamMatrix
thumb_func_start InitSpriteAffineAnim
@ void InitSpriteAffineAnim(struct obj *obj)
InitSpriteAffineAnim: @ 8008428
push {r4,r5,lr}
adds r4, r0, 0
bl rotscale_alloc_entry
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0xFF
beq _08008470
ldrb r3, [r4, 0x1]
lsrs r1, r3, 6
ldrb r2, [r4, 0x3]
lsrs r2, 6
lsls r3, 30
lsrs r3, 30
adds r0, r4, 0
bl CalcCenterToCornerVec
movs r0, 0x1F
adds r1, r5, 0
ands r1, r0
lsls r1, 1
ldrb r2, [r4, 0x3]
movs r0, 0x3F
negs r0, r0
ands r0, r2
orrs r0, r1
strb r0, [r4, 0x3]
adds r2, r4, 0
adds r2, 0x3F
ldrb r0, [r2]
movs r1, 0x8
orrs r0, r1
strb r0, [r2]
adds r0, r5, 0
bl rotscale_reset_full_2
_08008470:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end InitSpriteAffineAnim
thumb_func_start sub_8008478
sub_8008478: @ 8008478
push {r4-r6,lr}
mov r6, r8
push {r6}
sub sp, 0x10
adds r6, r0, 0
adds r0, r1, 0
adds r4, r2, 0
adds r5, r3, 0
lsls r6, 24
lsrs r6, 24
lsls r4, 16
lsrs r4, 16
lsls r5, 16
lsrs r5, 16
lsls r0, 16
asrs r0, 16
bl divide_0x10000_by
lsls r0, 16
lsrs r0, 16
ldr r1, =0xffff0000
mov r8, r1
ldr r1, [sp]
mov r2, r8
ands r1, r2
orrs r1, r0
str r1, [sp]
lsls r4, 16
asrs r4, 16
adds r0, r4, 0
bl divide_0x10000_by
lsls r0, 16
ldr r2, =0x0000ffff
ldr r1, [sp]
ands r1, r2
orrs r1, r0
str r1, [sp]
ldr r0, [sp, 0x4]
mov r1, r8
ands r0, r1
orrs r0, r5
str r0, [sp, 0x4]
add r4, sp, 0x8
mov r0, sp
adds r1, r4, 0
movs r2, 0x1
movs r3, 0x2
bl ObjAffineSet
adds r0, r6, 0
adds r1, r4, 0
bl CopyOamMatrix
add sp, 0x10
pop {r3}
mov r8, r3
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end sub_8008478
thumb_func_start LoadObjectPic
@ u16 LoadObjectPic(struct obj_tiles *pic)
LoadObjectPic: @ 80084F8
push {r4-r6,lr}
adds r5, r0, 0
ldrh r0, [r5, 0x4]
lsrs r0, 5
bl AllocSpriteTiles
lsls r4, r0, 16
asrs r6, r4, 16
cmp r6, 0
blt _08008534
ldrh r0, [r5, 0x6]
lsrs r4, 16
ldrh r2, [r5, 0x4]
lsrs r2, 5
adds r1, r4, 0
bl CreateSpriteAtTileRange
ldr r0, [r5]
lsls r1, r6, 5
ldr r2, =0x06010000
adds r1, r2
ldrh r2, [r5, 0x4]
lsrs r2, 1
bl CpuSet
adds r0, r4, 0
b _08008536
.pool
_08008534:
movs r0, 0
_08008536:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end LoadObjectPic
thumb_func_start LoadObjectPics
@ void LoadObjectPics(struct obj_tiles *pics)
LoadObjectPics: @ 800853C
push {r4,r5,lr}
adds r5, r0, 0
movs r4, 0
ldr r0, [r5]
cmp r0, 0
beq _08008560
_08008548:
lsls r0, r4, 3
adds r0, r5, r0
bl LoadObjectPic
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
lsls r0, r4, 3
adds r0, r5
ldr r0, [r0]
cmp r0, 0
bne _08008548
_08008560:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end LoadObjectPics
thumb_func_start FreeSpriteTilesByTag
@ void FreeSpriteTilesByTag(u16 tag)
FreeSpriteTilesByTag: @ 8008568
push {r4-r7,lr}
mov r7, r8
push {r7}
lsls r0, 16
lsrs r0, 16
bl IndexOfObjectTilesTag
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0xFF
beq _080085C6
ldr r0, =gUnknown_03000A70
lsls r1, r4, 2
adds r2, r1, r0
adds r0, 0x2
adds r1, r0
ldrh r0, [r1]
ldrh r3, [r2]
adds r0, r3, r0
ldr r1, =gUnknown_030009F0
mov r8, r1
lsls r5, r4, 1
cmp r3, r0
bge _080085BE
ldr r1, =gSpriteTileAllocBitmap
mov r12, r1
movs r6, 0x7
movs r7, 0x1
adds r4, r0, 0
_080085A2:
lsrs r2, r3, 3
add r2, r12
adds r0, r3, 0
ands r0, r6
adds r1, r7, 0
lsls r1, r0
ldrb r0, [r2]
bics r0, r1
strb r0, [r2]
adds r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
cmp r3, r4
blt _080085A2
_080085BE:
mov r0, r8
adds r1, r5, r0
ldr r0, =0x0000ffff
strh r0, [r1]
_080085C6:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end FreeSpriteTilesByTag
thumb_func_start FreeSpriteTileRanges
@ void FreeSpriteTileRanges()
FreeSpriteTileRanges: @ 80085E0
push {r4-r7,lr}
movs r2, 0
ldr r7, =gUnknown_030009F0
ldr r0, =0x0000ffff
adds r6, r0, 0
ldr r4, =gUnknown_03000A70
movs r3, 0
adds r5, r4, 0x2
_080085F0:
lsls r1, r2, 1
adds r1, r7
ldrh r0, [r1]
orrs r0, r6
strh r0, [r1]
lsls r1, r2, 2
adds r0, r1, r4
strh r3, [r0]
adds r1, r5
strh r3, [r1]
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x3F
bls _080085F0
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end FreeSpriteTileRanges
thumb_func_start GetSpriteTileStartByTag
@ u16 GetSpriteTileStartByTag(u16 tag)
GetSpriteTileStartByTag: @ 8008620
push {lr}
lsls r0, 16
lsrs r0, 16
bl IndexOfObjectTilesTag
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0xFF
beq _08008640
ldr r0, =gUnknown_03000A70
lsls r1, 2
adds r1, r0
ldrh r0, [r1]
b _08008642
.pool
_08008640:
ldr r0, =0x0000ffff
_08008642:
pop {r1}
bx r1
.pool
thumb_func_end GetSpriteTileStartByTag
thumb_func_start IndexOfObjectTilesTag
@ u8 IndexOfObjectTilesTag(u16 tag)
IndexOfObjectTilesTag: @ 800864C
push {lr}
lsls r0, 16
lsrs r2, r0, 16
movs r1, 0
ldr r3, =gUnknown_030009F0
_08008656:
lsls r0, r1, 1
adds r0, r3
ldrh r0, [r0]
cmp r0, r2
bne _08008668
adds r0, r1, 0
b _08008674
.pool
_08008668:
adds r0, r1, 0x1
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0x3F
bls _08008656
movs r0, 0xFF
_08008674:
pop {r1}
bx r1
thumb_func_end IndexOfObjectTilesTag
thumb_func_start GetTagByObjectTileRangeStart
@ u16 GetTagByObjectTileRangeStart(u16 rangeStart)
GetTagByObjectTileRangeStart: @ 8008678
push {r4-r6,lr}
lsls r0, 16
lsrs r3, r0, 16
movs r2, 0
ldr r6, =gUnknown_030009F0
ldr r5, =0x0000ffff
ldr r4, =gUnknown_03000A70
_08008686:
lsls r0, r2, 1
adds r1, r0, r6
ldrh r0, [r1]
cmp r0, r5
beq _080086AC
lsls r0, r2, 2
adds r0, r4
ldrh r0, [r0]
cmp r0, r3
bne _080086AC
ldrh r0, [r1]
b _080086B8
.pool
_080086AC:
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x3F
bls _08008686
ldr r0, =0x0000ffff
_080086B8:
pop {r4-r6}
pop {r1}
bx r1
.pool
thumb_func_end GetTagByObjectTileRangeStart
thumb_func_start CreateSpriteAtTileRange
@ void CreateSpriteAtTileRange(u16 tag, u16 start, u16 count)
CreateSpriteAtTileRange: @ 80086C4
push {r4-r6,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r6, r2, 0
lsls r4, 16
lsrs r4, 16
lsls r5, 16
lsrs r5, 16
lsls r6, 16
lsrs r6, 16
ldr r0, =0x0000ffff
bl IndexOfObjectTilesTag
lsls r0, 24
lsrs r0, 24
ldr r2, =gUnknown_030009F0
lsls r1, r0, 1
adds r1, r2
strh r4, [r1]
ldr r1, =gUnknown_03000A70
lsls r0, 2
adds r2, r0, r1
strh r5, [r2]
adds r1, 0x2
adds r0, r1
strh r6, [r0]
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end CreateSpriteAtTileRange
thumb_func_start ResetObjectPaletteAllocator
@ void ResetObjectPaletteAllocator()
ResetObjectPaletteAllocator: @ 800870C
push {r4,lr}
ldr r1, =gUnknown_0300301C
movs r0, 0
strb r0, [r1]
movs r2, 0
ldr r4, =gUnknown_03000CF0
ldr r0, =0x0000ffff
adds r3, r0, 0
_0800871C:
lsls r0, r2, 1
adds r0, r4
ldrh r1, [r0]
orrs r1, r3
strh r1, [r0]
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0xF
bls _0800871C
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end ResetObjectPaletteAllocator
thumb_func_start LoadTaggedObjectPalette
@ u8 LoadTaggedObjectPalette(struct TaggedObjectPalette *palette)
LoadTaggedObjectPalette: @ 8008744
push {r4,r5,lr}
adds r5, r0, 0
ldrh r0, [r5, 0x4]
bl IndexOfSpritePaletteTag
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0xFF
beq _0800875A
adds r0, r4, 0
b _0800878A
_0800875A:
ldr r0, =0x0000ffff
bl IndexOfSpritePaletteTag
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0xFF
beq _08008788
ldr r1, =gUnknown_03000CF0
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r5, 0x4]
strh r1, [r0]
ldr r0, [r5]
lsls r1, r4, 4
bl LoadObjectPalette
adds r0, r4, 0
b _0800878A
.pool
_08008788:
movs r0, 0xFF
_0800878A:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end LoadTaggedObjectPalette
thumb_func_start LoadTaggedObjectPalettes
@ void LoadTaggedObjectPalettes(struct TaggedObjectPalette *palettes)
LoadTaggedObjectPalettes: @ 8008790
push {r4,r5,lr}
adds r5, r0, 0
movs r4, 0
b _0800879E
_08008798:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
_0800879E:
lsls r0, r4, 3
adds r1, r0, r5
ldr r0, [r1]
cmp r0, 0
beq _080087B6
adds r0, r1, 0
bl LoadTaggedObjectPalette
lsls r0, 24
lsrs r0, 24
cmp r0, 0xFF
bne _08008798
_080087B6:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end LoadTaggedObjectPalettes
thumb_func_start LoadObjectPalette
@ void LoadObjectPalette(void *src, u16 destOffset)
LoadObjectPalette: @ 80087BC
push {lr}
lsls r1, 16
movs r2, 0x80
lsls r2, 17
adds r1, r2
lsrs r1, 16
movs r2, 0x20
bl LoadPalette
pop {r0}
bx r0
thumb_func_end LoadObjectPalette
thumb_func_start AllocObjectPalette
@ u8 AllocObjectPalette(u16 tag)
AllocObjectPalette: @ 80087D4
push {r4,lr}
lsls r0, 16
lsrs r4, r0, 16
ldr r0, =0x0000ffff
bl IndexOfSpritePaletteTag
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0xFF
beq _080087FC
ldr r1, =gUnknown_03000CF0
lsls r0, r2, 1
adds r0, r1
strh r4, [r0]
adds r0, r2, 0
b _080087FE
.pool
_080087FC:
movs r0, 0xFF
_080087FE:
pop {r4}
pop {r1}
bx r1
thumb_func_end AllocObjectPalette
thumb_func_start IndexOfSpritePaletteTag
@ u8 IndexOfSpritePaletteTag(u16 tag)
IndexOfSpritePaletteTag: @ 8008804
push {lr}
lsls r0, 16
lsrs r2, r0, 16
ldr r0, =gUnknown_0300301C
ldrb r1, [r0]
cmp r1, 0xF
bhi _08008836
ldr r3, =gUnknown_03000CF0
_08008814:
lsls r0, r1, 1
adds r0, r3
ldrh r0, [r0]
cmp r0, r2
bne _0800882C
adds r0, r1, 0
b _08008838
.pool
_0800882C:
adds r0, r1, 0x1
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0xF
bls _08008814
_08008836:
movs r0, 0xFF
_08008838:
pop {r1}
bx r1
thumb_func_end IndexOfSpritePaletteTag
thumb_func_start GetObjectPaletteTagBySlot
@ u16 GetObjectPaletteTagBySlot(u8 paletteSlot)
GetObjectPaletteTagBySlot: @ 800883C
lsls r0, 24
ldr r1, =gUnknown_03000CF0
lsrs r0, 23
adds r0, r1
ldrh r0, [r0]
bx lr
.pool
thumb_func_end GetObjectPaletteTagBySlot
thumb_func_start FreeSpritePaletteByTag
@ void FreeSpritePaletteByTag(int tag)
FreeSpritePaletteByTag: @ 800884C
push {lr}
lsls r0, 16
lsrs r0, 16
bl IndexOfSpritePaletteTag
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0xFF
beq _08008868
ldr r0, =gUnknown_03000CF0
lsls r1, 1
adds r1, r0
ldr r0, =0x0000ffff
strh r0, [r1]
_08008868:
pop {r0}
bx r0
.pool
thumb_func_end FreeSpritePaletteByTag
thumb_func_start SetSpriteOamTables_NoPriorityFromTable
@ void SetSpriteOamTables_NoPriorityFromTable(struct obj *object, u32 spriteOamTables)
SetSpriteOamTables_NoPriorityFromTable: @ 8008874
str r1, [r0, 0x18]
adds r0, 0x42
movs r1, 0x40
strb r1, [r0]
bx lr
thumb_func_end SetSpriteOamTables_NoPriorityFromTable
thumb_func_start AddSpriteToOamBuffer
@ u8 AddSpriteToOamBuffer(struct obj *obj, u8 *spriteIndex)
AddSpriteToOamBuffer: @ 8008880
push {r4,lr}
adds r4, r0, 0
adds r3, r1, 0
ldr r1, =gOamLimit
ldrb r0, [r3]
ldrb r1, [r1]
cmp r0, r1
bcc _08008898
movs r0, 0x1
b _080088E0
.pool
_08008898:
ldr r0, [r4, 0x18]
cmp r0, 0
beq _080088AC
adds r0, r4, 0
adds r0, 0x42
ldrb r1, [r0]
movs r0, 0xC0
ands r0, r1
cmp r0, 0
bne _080088CC
_080088AC:
ldr r0, =gMain
ldrb r2, [r3]
lsls r2, 3
adds r0, 0x38
adds r2, r0
ldr r0, [r4]
ldr r1, [r4, 0x4]
str r0, [r2]
str r1, [r2, 0x4]
ldrb r0, [r3]
adds r0, 0x1
strb r0, [r3]
movs r0, 0
b _080088E0
.pool
_080088CC:
ldrb r1, [r3]
lsls r1, 3
ldr r0, =gUnknown_030022F8
adds r1, r0
adds r0, r4, 0
adds r2, r3, 0
bl AddSubspritesToOamBuffer
lsls r0, 24
lsrs r0, 24
_080088E0:
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end AddSpriteToOamBuffer
thumb_func_start AddSubspritesToOamBuffer
@ u8 AddSubspritesToOamBuffer(struct obj *object, struct sprite *sprite, u8 *spriteIndex)
AddSubspritesToOamBuffer: @ 80088EC
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x1C
adds r3, r0, 0
str r1, [sp]
mov r8, r2
ldr r0, =gOamLimit
ldrb r1, [r2]
ldrb r0, [r0]
cmp r1, r0
bcc _08008910
_08008908:
movs r0, 0x1
b _08008AE6
.pool
_08008910:
adds r0, r3, 0
adds r0, 0x42
ldrb r1, [r0]
lsls r1, 26
lsrs r1, 23
ldr r2, [r3, 0x18]
adds r7, r2, r1
mov r12, r3
str r0, [sp, 0x18]
cmp r7, 0
beq _0800892C
ldr r0, [r7, 0x4]
cmp r0, 0
bne _08008942
_0800892C:
mov r2, r12
ldr r0, [r2]
ldr r1, [r2, 0x4]
ldr r2, [sp]
str r0, [r2]
str r1, [r2, 0x4]
mov r1, r8
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
b _08008AE4
_08008942:
mov r2, r12
ldrh r0, [r2, 0x4]
lsls r0, 22
lsrs r0, 22
str r0, [sp, 0x4]
ldrb r0, [r7]
str r0, [sp, 0xC]
ldrb r0, [r2, 0x3]
lsls r0, 26
lsrs r0, 27
asrs r1, r0, 3
str r1, [sp, 0x10]
movs r1, 0x1
ldr r2, [sp, 0x10]
ands r2, r1
str r2, [sp, 0x10]
asrs r0, 4
mov r10, r0
ands r0, r1
mov r10, r0
mov r1, r12
ldrh r0, [r1, 0x2]
lsls r0, 23
lsrs r0, 23
adds r1, 0x28
ldrb r1, [r1]
lsls r1, 24
asrs r1, 24
subs r0, r1
lsls r0, 16
lsrs r2, r0, 16
mov r1, r12
ldrb r0, [r1]
adds r1, 0x29
ldrb r1, [r1]
lsls r1, 24
asrs r1, 24
subs r0, r1
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x8]
movs r0, 0
mov r9, r0
ldr r1, [sp, 0xC]
cmp r9, r1
bcc _080089A0
b _08008AE4
_080089A0:
lsls r0, r2, 16
asrs r0, 16
str r0, [sp, 0x14]
_080089A6:
mov r2, r8
ldrb r0, [r2]
ldr r1, =gOamLimit
ldrb r1, [r1]
cmp r0, r1
bcs _08008908
ldr r0, [r7, 0x4]
mov r2, r9
lsls r6, r2, 2
adds r2, r6, r0
movs r0, 0
ldrsb r0, [r2, r0]
lsls r0, 16
lsrs r4, r0, 16
movs r0, 0x1
ldrsb r0, [r2, r0]
lsls r0, 16
lsrs r5, r0, 16
ldr r0, [sp, 0x10]
cmp r0, 0
beq _080089FC
ldr r0, [r2]
lsls r1, r0, 12
lsrs r1, 30
lsls r1, 2
lsls r0, 14
lsrs r0, 30
lsls r0, 4
adds r1, r0
ldr r0, =gUnknown_082EC754
adds r1, r0
ldrb r1, [r1]
lsls r1, 24
asrs r1, 24
lsls r0, r4, 16
asrs r0, 16
adds r0, r1
lsls r0, 16
lsrs r4, r0, 16
mvns r0, r4
adds r0, 0x1
lsls r0, 16
lsrs r4, r0, 16
_080089FC:
mov r1, r10
cmp r1, 0
beq _08008A2E
ldr r0, [r2]
lsls r1, r0, 12
lsrs r1, 30
lsls r1, 2
lsls r0, 14
lsrs r0, 30
lsls r0, 4
adds r1, r0
ldr r2, =gUnknown_082EC754
adds r1, r2
ldrb r1, [r1, 0x1]
lsls r1, 24
asrs r1, 24
lsls r0, r5, 16
asrs r0, 16
adds r0, r1
lsls r0, 16
lsrs r5, r0, 16
mvns r0, r5
adds r0, 0x1
lsls r0, 16
lsrs r5, r0, 16
_08008A2E:
mov r1, r9
lsls r0, r1, 3
ldr r2, [sp]
adds r3, r0, r2
mov r2, r12
ldr r0, [r2]
ldr r1, [r2, 0x4]
str r0, [r3]
str r1, [r3, 0x4]
ldr r0, [r7, 0x4]
adds r0, r6, r0
ldr r1, [r0]
lsls r1, 14
lsrs r1, 30
lsls r1, 6
ldrb r2, [r3, 0x1]
movs r0, 0x3F
ands r0, r2
orrs r0, r1
strb r0, [r3, 0x1]
ldr r0, [r7, 0x4]
adds r0, r6, r0
ldr r1, [r0]
lsls r1, 12
lsrs r1, 30
lsls r1, 6
ldrb r2, [r3, 0x3]
movs r0, 0x3F
ands r0, r2
orrs r0, r1
strb r0, [r3, 0x3]
lsls r1, r4, 16
asrs r1, 16
ldr r0, [sp, 0x14]
adds r1, r0, r1
ldr r2, =0x000001ff
adds r0, r2, 0
ands r1, r0
ldrh r2, [r3, 0x2]
ldr r0, =0xfffffe00
ands r0, r2
orrs r0, r1
strh r0, [r3, 0x2]
ldr r1, [sp, 0x8]
adds r0, r1, r5
strb r0, [r3]
ldr r0, [r7, 0x4]
adds r0, r6, r0
ldr r1, [r0]
lsls r1, 2
lsrs r1, 22
ldr r2, [sp, 0x4]
adds r1, r2, r1
ldr r2, =0x000003ff
adds r0, r2, 0
ands r1, r0
ldrh r2, [r3, 0x4]
ldr r0, =0xfffffc00
ands r0, r2
orrs r0, r1
strh r0, [r3, 0x4]
ldr r0, [sp, 0x18]
ldrb r1, [r0]
movs r0, 0xC0
ands r0, r1
cmp r0, 0x80
beq _08008ACA
ldr r0, [r7, 0x4]
adds r0, r6, r0
ldr r1, [r0]
lsrs r1, 30
lsls r1, 2
ldrb r2, [r3, 0x5]
movs r0, 0xD
negs r0, r0
ands r0, r2
orrs r0, r1
strb r0, [r3, 0x5]
_08008ACA:
mov r0, r9
adds r0, 0x1
lsls r0, 24
lsrs r0, 24
mov r9, r0
mov r1, r8
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
ldr r2, [sp, 0xC]
cmp r9, r2
bcs _08008AE4
b _080089A6
_08008AE4:
movs r0, 0
_08008AE6:
add sp, 0x1C
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.pool
thumb_func_end AddSubspritesToOamBuffer
.align 2, 0 @ Don't pad with nop.