diff options
author | YamaArashi <shadow962@live.com> | 2015-10-06 05:46:30 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2015-10-06 05:46:30 -0700 |
commit | 25342bcf33e2662a916b93e47e405df6024e30bd (patch) | |
tree | 0426703bc9a2873f2ff112022730eea61952bd70 /asm/gpu_obj.s | |
parent | b05c4231a9692eed9640b6503917592ebbfea797 (diff) |
split out some code
Diffstat (limited to 'asm/gpu_obj.s')
-rw-r--r-- | asm/gpu_obj.s | 4546 |
1 files changed, 4546 insertions, 0 deletions
diff --git a/asm/gpu_obj.s b/asm/gpu_obj.s new file mode 100644 index 000000000..eaa19f3cf --- /dev/null +++ b/asm/gpu_obj.s @@ -0,0 +1,4546 @@ + thumb_func_start reset_all_obj_data +reset_all_obj_data: @ 8006974 + push {r4,lr} + movs r0, 0 + movs r1, 0x80 + bl reset_super_sprites + bl obj_delete_all + bl copy_queue_clear + bl rotscale_reset_all + bl gpu_tile_obj_tags_reset + ldr r1, =0x02021b38 + movs r0, 0x40 + strb r0, [r1] + ldr r0, =0x02021b3a + movs r4, 0 + strh r4, [r0] + movs r0, 0 + bl gpu_tile_obj_alloc + ldr r0, =0x02021bbc + strh r4, [r0] + ldr r0, =0x02021bbe + strh r4, [r0] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end reset_all_obj_data + + thumb_func_start call_obj_callbacks +call_obj_callbacks: @ 80069C0 + push {r4-r7,lr} + movs r6, 0 + movs r7, 0x1 +_080069C6: + lsls r0, r6, 4 + adds r0, r6 + lsls r0, 2 + ldr r1, =0x02020630 + adds r4, r0, r1 + adds r5, r4, 0 + adds r5, 0x3E + ldrb r1, [r5] + adds r0, r7, 0 + ands r0, r1 + cmp r0, 0 + beq _080069F6 + ldr r1, [r4, 0x1C] + adds r0, r4, 0 + bl _call_via_r1 + ldrb r1, [r5] + adds r0, r7, 0 + ands r0, r1 + cmp r0, 0 + beq _080069F6 + adds r0, r4, 0 + bl obj_anim_step +_080069F6: + adds r0, r6, 0x1 + lsls r0, 24 + lsrs r6, r0, 24 + cmp r6, 0x3F + bls _080069C6 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end call_obj_callbacks + + thumb_func_start obj_sync_something +obj_sync_something: @ 8006A0C + push {r4,r5,lr} + bl update_obj_oam_coords + bl do_something_with_obj_priorites + bl determine_visible_sprites_maybe + ldr r5, =0x030022c0 + ldr r0, =0x00000439 + adds r5, r0 + ldrb r0, [r5] + lsls r4, r0, 31 + lsrs r4, 31 + movs r1, 0x1 + orrs r0, r1 + strb r0, [r5] + bl super_sprites_fill + bl copy_rotscale_coeffs_to_super_sprites + movs r2, 0x1 + ldrb r1, [r5] + movs r0, 0x2 + negs r0, r0 + ands r0, r1 + orrs r4, r0 + strb r4, [r5] + ldr r0, =0x02021834 + strb r2, [r0] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_sync_something + + thumb_func_start update_obj_oam_coords +update_obj_oam_coords: @ 8006A58 + push {r4-r7,lr} + movs r4, 0 + ldr r7, =0x02020630 + ldr r0, =0x000001ff + adds r5, r0, 0 + ldr r6, =0xfffffe00 +_08006A64: + lsls r0, r4, 4 + adds r0, r4 + lsls r0, 2 + adds r3, r0, r7 + adds r0, r3, 0 + adds r0, 0x3E + ldrb r1, [r0] + movs r0, 0x5 + ands r0, r1 + cmp r0, 0x1 + bne _08006B0A + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _08006AD8 + movs r2, 0x20 + ldrsh r1, [r3, r2] + movs r2, 0x24 + ldrsh r0, [r3, r2] + adds r1, r0 + adds r0, r3, 0 + adds r0, 0x28 + ldrb r0, [r0] + lsls r0, 24 + asrs r0, 24 + adds r1, r0 + ldr r0, =0x02021bbc + movs r2, 0 + ldrsh r0, [r0, r2] + adds r1, r0 + ands r1, r5 + ldrh r2, [r3, 0x2] + adds r0, r6, 0 + ands r0, r2 + orrs r0, r1 + strh r0, [r3, 0x2] + ldrh r1, [r3, 0x26] + ldrh r0, [r3, 0x22] + adds r1, r0 + adds r0, r3, 0 + adds r0, 0x29 + ldrb r0, [r0] + ldr r2, =0x02021bbe + adds r0, r1 + ldrb r2, [r2] + adds r0, r2 + b _08006B08 + .align 2, 0 + .pool +_08006AD8: + movs r2, 0x20 + ldrsh r1, [r3, r2] + movs r2, 0x24 + ldrsh r0, [r3, r2] + adds r1, r0 + adds r0, r3, 0 + adds r0, 0x28 + ldrb r0, [r0] + lsls r0, 24 + asrs r0, 24 + adds r1, r0 + ands r1, r5 + ldrh r2, [r3, 0x2] + adds r0, r6, 0 + ands r0, r2 + orrs r0, r1 + strh r0, [r3, 0x2] + ldrh r1, [r3, 0x26] + ldrh r0, [r3, 0x22] + adds r1, r0 + adds r0, r3, 0 + adds r0, 0x29 + ldrb r0, [r0] + adds r0, r1 +_08006B08: + strb r0, [r3] +_08006B0A: + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x3F + bls _08006A64 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end update_obj_oam_coords + + thumb_func_start do_something_with_obj_priorites +do_something_with_obj_priorites: @ 8006B1C + push {r4,lr} + movs r2, 0 + ldr r4, =0x02020630 + ldr r3, =0x02021774 +_08006B24: + lsls r0, r2, 4 + adds r0, r2 + lsls r0, 2 + adds r0, r4 + adds r1, r0, 0 + adds r1, 0x43 + ldrb r1, [r1] + ldrb r0, [r0, 0x5] + lsls r0, 28 + lsrs r0, 30 + lsls r0, 8 + orrs r1, r0 + lsls r0, r2, 1 + adds r0, r3 + strh r1, [r0] + adds r0, r2, 0x1 + lsls r0, 16 + lsrs r2, r0, 16 + cmp r2, 0x3F + bls _08006B24 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end do_something_with_obj_priorites + + thumb_func_start determine_visible_sprites_maybe +determine_visible_sprites_maybe: @ 8006B5C + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + movs r0, 0x1 + mov r12, r0 + ldr r1, =0x020217f4 + mov r10, r1 + ldr r3, =0xffffff00 + mov r9, r3 + ldr r6, =0xc0000300 + mov r8, r6 +_08006B78: + mov r5, r12 + mov r0, r12 + subs r0, 0x1 + add r0, r10 + ldrb r2, [r0] + lsls r0, r2, 4 + adds r0, r2 + lsls r0, 2 + ldr r7, =0x02020630 + adds r3, r0, r7 + mov r0, r12 + add r0, r10 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r4, r0, r7 + lsls r2, 1 + ldr r0, =0x02021774 + adds r2, r0 + ldrh r2, [r2] + str r2, [sp] + lsls r1, 1 + adds r1, r0 + ldrh r6, [r1] + ldrb r1, [r3] + ldrb r2, [r4] + adds r0, r1, 0 + cmp r0, 0x9F + ble _08006BBA + add r0, r9 + lsls r0, 16 + lsrs r1, r0, 16 +_08006BBA: + lsls r0, r2, 16 + asrs r0, 16 + cmp r0, 0x9F + ble _08006BC8 + add r0, r9 + lsls r0, 16 + lsrs r2, r0, 16 +_08006BC8: + ldr r0, [r3] + mov r7, r8 + ands r0, r7 + cmp r0, r8 + bne _08006BEC + ldrb r0, [r3, 0x1] + lsrs r0, 6 + cmp r0, 0 + beq _08006BDE + cmp r0, 0x2 + bne _08006BEC +_08006BDE: + lsls r0, r1, 16 + asrs r0, 16 + cmp r0, 0x80 + ble _08006BEC + add r0, r9 + lsls r0, 16 + lsrs r1, r0, 16 +_08006BEC: + ldr r0, [r4] + mov r3, r8 + ands r0, r3 + cmp r0, r8 + bne _08006C10 + ldrb r0, [r4, 0x1] + lsrs r0, 6 + cmp r0, 0 + beq _08006C02 + cmp r0, 0x2 + bne _08006C10 +_08006C02: + lsls r0, r2, 16 + asrs r0, 16 + cmp r0, 0x80 + ble _08006C10 + add r0, r9 + lsls r0, 16 + lsrs r2, r0, 16 +_08006C10: + movs r7, 0x1 + add r12, r7 + cmp r5, 0 + beq _08006CF6 + ldr r0, [sp] + cmp r0, r6 + bhi _08006C38 + cmp r0, r6 + bne _08006CF6 + b _08006CEE + .align 2, 0 + .pool +_08006C38: + mov r1, r10 + adds r3, r5, r1 + ldrb r4, [r3] + subs r2, r5, 0x1 + adds r1, r2, r1 + ldrb r0, [r1] + strb r0, [r3] + strb r4, [r1] + lsls r2, 24 + lsrs r5, r2, 24 + subs r0, r5, 0x1 + add r0, r10 + ldrb r2, [r0] + lsls r0, r2, 4 + adds r0, r2 + lsls r0, 2 + ldr r6, =0x02020630 + adds r3, r0, r6 + mov r7, r10 + adds r0, r5, r7 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r4, r0, r6 + lsls r2, 1 + ldr r0, =0x02021774 + adds r2, r0 + ldrh r2, [r2] + str r2, [sp] + lsls r1, 1 + adds r1, r0 + ldrh r6, [r1] + ldrb r1, [r3] + ldrb r2, [r4] + adds r0, r1, 0 + cmp r0, 0x9F + ble _08006C8A + add r0, r9 + lsls r0, 16 + lsrs r1, r0, 16 +_08006C8A: + lsls r0, r2, 16 + asrs r0, 16 + cmp r0, 0x9F + ble _08006C98 + add r0, r9 + lsls r0, 16 + lsrs r2, r0, 16 +_08006C98: + ldr r0, [r3] + mov r7, r8 + ands r0, r7 + cmp r0, r8 + bne _08006CBC + ldrb r0, [r3, 0x1] + lsrs r0, 6 + cmp r0, 0 + beq _08006CAE + cmp r0, 0x2 + bne _08006CBC +_08006CAE: + lsls r0, r1, 16 + asrs r0, 16 + cmp r0, 0x80 + ble _08006CBC + add r0, r9 + lsls r0, 16 + lsrs r1, r0, 16 +_08006CBC: + ldr r0, [r4] + mov r3, r8 + ands r0, r3 + cmp r0, r8 + bne _08006CE0 + ldrb r0, [r4, 0x1] + lsrs r0, 6 + cmp r0, 0 + beq _08006CD2 + cmp r0, 0x2 + bne _08006CE0 +_08006CD2: + lsls r0, r2, 16 + asrs r0, 16 + cmp r0, 0x80 + ble _08006CE0 + add r0, r9 + lsls r0, 16 + lsrs r2, r0, 16 +_08006CE0: + cmp r5, 0 + beq _08006CF6 + ldr r7, [sp] + cmp r7, r6 + bhi _08006C38 + cmp r7, r6 + bne _08006CF6 +_08006CEE: + lsls r1, 16 + lsls r0, r2, 16 + cmp r1, r0 + blt _08006C38 +_08006CF6: + mov r1, r12 + lsls r0, r1, 24 + lsrs r0, 24 + mov r12, r0 + cmp r0, 0x3F + bhi _08006D04 + b _08006B78 +_08006D04: + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end determine_visible_sprites_maybe + + thumb_func_start copy_rotscale_coeffs_to_super_sprites +copy_rotscale_coeffs_to_super_sprites: @ 8006D1C + push {r4-r6,lr} + movs r4, 0 + ldr r5, =0x030022c0 + ldr r6, =0x02021bc0 +_08006D24: + lsls r2, r4, 2 + lsls r1, r4, 5 + adds r1, r5 + lsls r3, r4, 3 + adds r3, r6 + ldrh r0, [r3] + strh r0, [r1, 0x3E] + adds r0, r2, 0x1 + lsls r0, 3 + adds r0, r5 + ldrh r1, [r3, 0x2] + strh r1, [r0, 0x3E] + adds r0, r2, 0x2 + lsls r0, 3 + adds r0, r5 + ldrh r1, [r3, 0x4] + strh r1, [r0, 0x3E] + adds r2, 0x3 + lsls r2, 3 + adds r2, r5 + ldrh r0, [r3, 0x6] + strh r0, [r2, 0x3E] + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x1F + bls _08006D24 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_rotscale_coeffs_to_super_sprites + + thumb_func_start super_sprites_fill +super_sprites_fill: @ 8006D68 + push {r4-r6,lr} + sub sp, 0x4 + movs r4, 0 + mov r0, sp + strb r4, [r0] +_08006D72: + ldr r0, =0x020217f4 + adds r0, r4, r0 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, =0x02020630 + adds r2, r0, r1 + adds r0, r2, 0 + adds r0, 0x3E + ldrb r1, [r0] + movs r0, 0x5 + ands r0, r1 + cmp r0, 0x1 + bne _08006D9E + adds r0, r2, 0 + mov r1, sp + bl super_sprite_add + lsls r0, 24 + cmp r0, 0 + bne _08006DD8 +_08006D9E: + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x3F + bls _08006D72 + mov r0, sp + ldr r4, =0x02021b38 + ldrb r0, [r0] + ldrb r1, [r4] + cmp r0, r1 + bcs _08006DD8 + mov r1, sp + ldr r5, =0x030022f8 + ldr r0, =0x082ec690 + ldr r2, [r0] + ldr r3, [r0, 0x4] +_08006DBE: + ldrb r0, [r1] + lsls r0, 3 + adds r0, r5 + str r2, [r0] + str r3, [r0, 0x4] + ldrb r0, [r1] + adds r0, 0x1 + strb r0, [r1] + lsls r0, 24 + lsrs r0, 24 + ldrb r6, [r4] + cmp r0, r6 + bcc _08006DBE +_08006DD8: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end super_sprites_fill + + thumb_func_start obj_add_from_template_forward_search +obj_add_from_template_forward_search: @ 8006DF4 + push {r4-r7,lr} + sub sp, 0x4 + adds r7, r0, 0 + lsls r3, 24 + lsrs r4, r3, 24 + movs r3, 0 + ldr r0, =0x02020630 + mov r12, r0 + lsls r5, r1, 16 + lsls r6, r2, 16 +_08006E08: + lsls r0, r3, 4 + adds r0, r3 + lsls r0, 2 + add r0, r12 + adds r0, 0x3E + ldrb r0, [r0] + lsls r0, 31 + cmp r0, 0 + bne _08006E34 + str r4, [sp] + adds r0, r3, 0 + adds r1, r7, 0 + asrs r2, r5, 16 + asrs r3, r6, 16 + bl template_read + lsls r0, 24 + lsrs r0, 24 + b _08006E40 + .align 2, 0 + .pool +_08006E34: + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x3F + bls _08006E08 + movs r0, 0x40 +_08006E40: + add sp, 0x4 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end obj_add_from_template_forward_search + + thumb_func_start obj_add_from_template_backward_search +obj_add_from_template_backward_search: @ 8006E48 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + adds r7, r0, 0 + lsls r3, 24 + lsrs r6, r3, 24 + movs r3, 0x3F + ldr r0, =0x02020630 + mov r8, r0 + movs r0, 0x1 + negs r0, r0 + mov r12, r0 + lsls r4, r1, 16 + lsls r5, r2, 16 +_08006E66: + lsls r0, r3, 16 + asrs r1, r0, 16 + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + add r0, r8 + adds r0, 0x3E + ldrb r0, [r0] + lsls r0, 31 + cmp r0, 0 + bne _08006E98 + lsls r0, r3, 24 + lsrs r0, 24 + str r6, [sp] + adds r1, r7, 0 + asrs r2, r4, 16 + asrs r3, r5, 16 + bl template_read + lsls r0, 24 + lsrs r0, 24 + b _08006EA6 + .align 2, 0 + .pool +_08006E98: + subs r0, r1, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + asrs r0, 16 + cmp r0, r12 + bgt _08006E66 + movs r0, 0x40 +_08006EA6: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end obj_add_from_template_backward_search + + thumb_func_start obj_add_empty_with_callback +obj_add_empty_with_callback: @ 8006EB4 + push {r4-r6,lr} + adds r6, r0, 0 + ldr r0, =0x082ec6ac + movs r1, 0 + movs r2, 0 + movs r3, 0x1F + bl obj_add_from_template_forward_search + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x40 + beq _08006EF4 + ldr r4, =0x02020630 + lsls r1, r5, 4 + adds r1, r5 + lsls r1, 2 + adds r2, r1, r4 + adds r2, 0x3E + ldrb r0, [r2] + movs r3, 0x4 + orrs r0, r3 + strb r0, [r2] + adds r4, 0x1C + adds r1, r4 + str r6, [r1] + adds r0, r5, 0 + b _08006EF6 + .align 2, 0 + .pool +_08006EF4: + movs r0, 0x40 +_08006EF6: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end obj_add_empty_with_callback + + thumb_func_start template_read +template_read: @ 8006EFC + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + mov r8, r1 + adds r5, r2, 0 + adds r6, r3, 0 + ldr r4, [sp, 0x20] + lsls r0, 24 + lsrs r0, 24 + mov r10, r0 + lsls r5, 16 + lsrs r5, 16 + lsls r6, 16 + lsrs r6, 16 + lsls r4, 24 + lsrs r4, 24 + lsls r0, 4 + add r0, r10 + lsls r0, 2 + ldr r1, =0x02020630 + adds r7, r0, r1 + adds r0, r7, 0 + bl obj_delete + adds r2, r7, 0 + adds r2, 0x3E + ldrb r0, [r2] + movs r1, 0x1 + orrs r0, r1 + strb r0, [r2] + movs r0, 0x3F + adds r0, r7 + mov r9, r0 + ldrb r0, [r0] + movs r1, 0x4 + orrs r0, r1 + movs r1, 0x8 + orrs r0, r1 + movs r1, 0x40 + orrs r0, r1 + mov r1, r9 + strb r0, [r1] + adds r0, r7, 0 + adds r0, 0x43 + strb r4, [r0] + mov r1, r8 + ldr r0, [r1, 0x4] + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [r7] + str r1, [r7, 0x4] + mov r1, r8 + ldr r0, [r1, 0x8] + str r0, [r7, 0x8] + ldr r0, [r1, 0x10] + str r0, [r7, 0x10] + str r1, [r7, 0x14] + ldr r0, [r1, 0x14] + str r0, [r7, 0x1C] + strh r5, [r7, 0x20] + strh r6, [r7, 0x22] + ldrb r3, [r7, 0x1] + lsrs r1, r3, 6 + ldrb r2, [r7, 0x3] + lsrs r2, 6 + lsls r3, 30 + lsrs r3, 30 + adds r0, r7, 0 + bl oam_center + mov r0, r8 + ldrh r1, [r0] + ldr r4, =0xffff0000 + lsrs r0, r4, 16 + cmp r1, r0 + bne _08006FF8 + mov r1, r8 + ldr r0, [r1, 0xC] + str r0, [r7, 0xC] + ldrh r0, [r0, 0x4] + lsrs r0, 5 + lsls r0, 24 + lsrs r0, 24 + bl gpu_tile_obj_alloc + lsls r0, 16 + lsrs r2, r0, 16 + asrs r0, 16 + asrs r1, r4, 16 + cmp r0, r1 + bne _08006FC8 + adds r0, r7, 0 + bl obj_delete + movs r0, 0x40 + b _08007040 + .align 2, 0 + .pool +_08006FC8: + ldr r1, =0x000003ff + adds r0, r1, 0 + ands r2, r0 + ldrh r1, [r7, 0x4] + ldr r0, =0xfffffc00 + ands r0, r1 + orrs r0, r2 + strh r0, [r7, 0x4] + mov r0, r9 + ldrb r1, [r0] + movs r0, 0x41 + negs r0, r0 + ands r0, r1 + mov r1, r9 + strb r0, [r1] + adds r1, r7, 0 + adds r1, 0x40 + movs r0, 0 + strh r0, [r1] + b _0800700C + .align 2, 0 + .pool +_08006FF8: + mov r1, r8 + ldrh r0, [r1] + bl gpu_tile_obj_tag_get_range_start + adds r1, r7, 0 + adds r1, 0x40 + strh r0, [r1] + adds r0, r7, 0 + bl sub_8008324 +_0800700C: + ldrb r0, [r7, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08007020 + adds r0, r7, 0 + bl obj_alloc_rotscale_entry +_08007020: + mov r0, r8 + ldrh r1, [r0, 0x2] + ldr r0, =0x0000ffff + cmp r1, r0 + beq _0800703E + mov r1, r8 + ldrh r0, [r1, 0x2] + bl gpu_pal_tags_index_of + lsls r0, 4 + ldrb r2, [r7, 0x5] + movs r1, 0xF + ands r1, r2 + orrs r1, r0 + strb r1, [r7, 0x5] +_0800703E: + mov r0, r10 +_08007040: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end template_read + + thumb_func_start obj_add_from_template_call_callback_once +obj_add_from_template_call_callback_once: @ 8007054 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + mov r10, r0 + lsls r3, 24 + lsrs r3, 24 + mov r9, r3 + movs r3, 0 + ldr r5, =0x02020630 + lsls r1, 16 + mov r12, r1 + lsls r2, 16 + mov r8, r2 +_08007074: + lsls r0, r3, 4 + adds r0, r3 + lsls r6, r0, 2 + adds r4, r6, r5 + adds r7, r4, 0 + adds r7, 0x3E + ldrb r0, [r7] + lsls r0, 31 + cmp r0, 0 + bne _080070CC + mov r0, r9 + str r0, [sp] + adds r0, r3, 0 + mov r1, r10 + mov r3, r12 + asrs r2, r3, 16 + mov r5, r8 + asrs r3, r5, 16 + bl template_read + lsls r0, 24 + lsrs r0, 24 + adds r5, r0, 0 + cmp r5, 0x40 + beq _080070D6 + ldr r1, =0x0202064c + adds r0, r6, r1 + ldr r1, [r0] + adds r0, r4, 0 + bl _call_via_r1 + ldrb r0, [r7] + lsls r0, 31 + cmp r0, 0 + beq _080070C0 + adds r0, r4, 0 + bl obj_anim_step +_080070C0: + adds r0, r5, 0 + b _080070D8 + .align 2, 0 + .pool +_080070CC: + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x3F + bls _08007074 +_080070D6: + movs r0, 0x40 +_080070D8: + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end obj_add_from_template_call_callback_once + + thumb_func_start obj_delete_and_free_tiles +obj_delete_and_free_tiles: @ 80070E8 + push {r4-r7,lr} + adds r5, r0, 0 + adds r0, 0x3E + ldrb r1, [r0] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08007144 + adds r0, r5, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + bne _0800713E + ldr r0, [r5, 0xC] + ldrh r2, [r0, 0x4] + lsrs r2, 5 + ldrh r0, [r5, 0x4] + lsls r0, 22 + lsrs r1, r0, 22 + adds r4, r1, r2 + adds r3, r1, 0 + cmp r3, r4 + bcs _0800713E + ldr r0, =0x02021b3c + mov r12, r0 + movs r6, 0x7 + movs r7, 0x1 +_08007122: + 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 + bcc _08007122 +_0800713E: + adds r0, r5, 0 + bl obj_delete +_08007144: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_delete_and_free_tiles + + thumb_func_start reset_super_sprites +reset_super_sprites: @ 8007150 + push {r4-r6,lr} + lsls r0, 24 + lsls r1, 24 + lsrs r4, r1, 24 + lsrs r3, r0, 24 + cmp r3, r4 + bcs _08007178 + ldr r6, =0x030022f8 + ldr r5, =0x082ec690 +_08007162: + lsls r0, r3, 3 + adds r0, r6 + ldr r1, [r5] + ldr r2, [r5, 0x4] + str r1, [r0] + str r2, [r0, 0x4] + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, r4 + bcc _08007162 +_08007178: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end reset_super_sprites + + thumb_func_start copy_super_sprites_to_oam +copy_super_sprites_to_oam: @ 8007188 + push {lr} + ldr r2, =0x030022c0 + ldr r1, =0x00000439 + adds r0, r2, r1 + ldrb r1, [r0] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + bne _080071A8 + adds r0, r2, 0 + adds r0, 0x38 + movs r1, 0xE0 + lsls r1, 19 + ldr r2, =0x04000100 + bl CpuSet +_080071A8: + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_super_sprites_to_oam + + thumb_func_start copy_queue_clear +copy_queue_clear: @ 80071B8 + push {r4,r5,lr} + ldr r0, =0x02021834 + movs r1, 0 + strb r1, [r0] + ldr r0, =0x02021835 + strb r1, [r0] + movs r2, 0 + ldr r4, =0x02021838 + movs r3, 0 + adds r5, r4, 0x4 +_080071CC: + lsls r0, r2, 1 + adds r0, r2 + lsls r0, 2 + adds r1, r0, r4 + str r3, [r1] + adds r0, r5 + str r3, [r0] + strh r3, [r1, 0x8] + adds r0, r2, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x3F + bls _080071CC + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_queue_clear + + thumb_func_start reset_rotscale_coeffs +reset_rotscale_coeffs: @ 80071F8 + push {r4,lr} + movs r1, 0 + ldr r4, =0x02021bc0 + movs r3, 0 + movs r2, 0x80 + lsls r2, 1 +_08007204: + lsls r0, r1, 3 + adds r0, r4 + strh r2, [r0] + strh r3, [r0, 0x2] + strh r3, [r0, 0x4] + strh r2, [r0, 0x6] + adds r0, r1, 0x1 + lsls r0, 24 + lsrs r1, r0, 24 + cmp r1, 0x1F + bls _08007204 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end reset_rotscale_coeffs + + thumb_func_start rotscale_set_direct +rotscale_set_direct: @ 8007224 + push {r4,r5,lr} + ldr r5, [sp, 0xC] + lsls r0, 24 + ldr r4, =0x02021bc0 + lsrs r0, 21 + adds r0, r4 + strh r1, [r0] + strh r2, [r0, 0x2] + strh r3, [r0, 0x4] + strh r5, [r0, 0x6] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end rotscale_set_direct + + thumb_func_start obj_delete +obj_delete: @ 8007244 + push {lr} + ldr r1, =0x082ec64c + movs r2, 0x44 + bl memcpy + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_delete + + thumb_func_start oam_center +oam_center: @ 8007258 + push {r4-r6,lr} + adds r6, r0, 0 + lsls r1, 24 + lsls r2, 24 + lsls r3, 24 + lsrs r3, 24 + ldr r4, =0x082ec634 + lsrs r2, 23 + lsrs r1, 21 + adds r2, r1 + adds r0, r2, r4 + ldrb r5, [r0] + adds r4, 0x1 + adds r2, r4 + ldrb r1, [r2] + movs r0, 0x2 + ands r3, r0 + cmp r3, 0 + beq _08007286 + lsls r0, r5, 25 + lsrs r5, r0, 24 + lsls r0, r1, 25 + lsrs r1, r0, 24 +_08007286: + adds r0, r6, 0 + adds r0, 0x28 + strb r5, [r0] + adds r0, 0x1 + strb r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end oam_center + + thumb_func_start gpu_tile_obj_alloc +gpu_tile_obj_alloc: @ 800729C + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + lsls r0, 16 + lsrs r4, r0, 16 + cmp r4, 0 + bne _080072F2 + ldr r0, =0x02021b3a + ldrh r3, [r0] + ldr r0, =0x000003ff + cmp r3, r0 + bhi _080072DA + ldr r7, =0x02021b3c + movs r6, 0x7 + adds r4, r0, 0 + movs r5, 0x1 +_080072BE: + lsrs r2, r3, 3 + adds r2, r7 + adds r0, r3, 0 + ands r0, r6 + adds r1, r5, 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 + bls _080072BE +_080072DA: + movs r0, 0 + b _080073A4 + .align 2, 0 + .pool +_080072EC: + movs r0, 0x1 + negs r0, r0 + b _080073A4 +_080072F2: + ldr r0, =0x02021b3a + ldrh r3, [r0] + ldr r0, =0x02021b3c + mov r9, r0 + movs r7, 0x7 + movs r6, 0x1 +_080072FE: + lsrs r0, r3, 3 + add r0, r9 + ldrb r1, [r0] + adds r0, r3, 0 + ands r0, r7 + asrs r1, r0 + ands r1, r6 + cmp r1, 0 + beq _08007332 + movs r5, 0x80 + lsls r5, 3 + ldr r2, =0x02021b3c +_08007316: + adds r0, r3, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + cmp r3, r5 + beq _080072EC + lsrs r0, 19 + adds r0, r2 + ldrb r1, [r0] + adds r0, r3, 0 + ands r0, r7 + asrs r1, r0 + ands r1, r6 + cmp r1, 0 + bne _08007316 +_08007332: + mov r8, r3 + movs r2, 0x1 + cmp r2, r4 + beq _0800736C + movs r1, 0x80 + lsls r1, 3 + mov r12, r1 + ldr r5, =0x02021b3c +_08007342: + adds r0, r3, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + cmp r3, r12 + beq _080072EC + lsrs r0, 19 + adds r0, r5 + ldrb r1, [r0] + adds r0, r3, 0 + ands r0, r7 + asrs r1, r0 + ands r1, r6 + cmp r1, 0 + bne _08007368 + adds r0, r2, 0x1 + lsls r0, 16 + lsrs r2, r0, 16 + cmp r2, r4 + bne _08007342 +_08007368: + cmp r2, r4 + bne _080072FE +_0800736C: + mov r1, r8 + lsls r0, r1, 16 + lsrs r3, r0, 16 + asrs r1, r0, 16 + adds r1, r4, r1 + adds r6, r0, 0 + cmp r3, r1 + bge _080073A2 + ldr r0, =0x02021b3c + mov r8, r0 + movs r7, 0x7 + adds r4, r1, 0 + movs r5, 0x1 +_08007386: + lsrs r2, r3, 3 + add r2, r8 + adds r1, r3, 0 + ands r1, r7 + adds r0, r5, 0 + lsls r0, r1 + ldrb r1, [r2] + orrs r0, r1 + strb r0, [r2] + adds r0, r3, 0x1 + lsls r0, 16 + lsrs r3, r0, 16 + cmp r3, r4 + blt _08007386 +_080073A2: + asrs r0, r6, 16 +_080073A4: + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end gpu_tile_obj_alloc + + thumb_func_start gpu_tile_obj_alloc_map_bit_op +gpu_tile_obj_alloc_map_bit_op: @ 80073B8 + push {r4-r6,lr} + lsls r0, 16 + lsrs r2, r0, 16 + lsls r1, 24 + lsrs r1, 24 + lsrs r0, 19 + lsls r0, 24 + lsrs r3, r0, 24 + adds r6, r3, 0 + movs r0, 0x7 + ands r2, r0 + adds r4, r2, 0 + movs r5, 0 + cmp r1, 0 + bne _080073F0 + movs r0, 0x1 + lsls r0, r2 + mvns r0, r0 + lsls r0, 24 + lsrs r2, r0, 24 + ldr r0, =0x02021b3c + adds r0, r3, r0 + ldrb r1, [r0] + ands r2, r1 + strb r2, [r0] + b _0800741C + .align 2, 0 + .pool +_080073F0: + cmp r1, 0x1 + bne _0800740C + lsls r1, r2 + lsls r0, r1, 24 + lsrs r2, r0, 24 + ldr r0, =0x02021b3c + adds r0, r3, r0 + ldrb r1, [r0] + orrs r2, r1 + strb r2, [r0] + b _0800741C + .align 2, 0 + .pool +_0800740C: + movs r0, 0x80 + lsls r0, 17 + lsls r0, r4 + lsrs r5, r0, 24 + ldr r0, =0x02021b3c + adds r0, r6, r0 + ldrb r0, [r0] + ands r5, r0 +_0800741C: + adds r0, r5, 0 + pop {r4-r6} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end gpu_tile_obj_alloc_map_bit_op + + thumb_func_start nullsub_12 +nullsub_12: @ 8007428 + bx lr + thumb_func_end nullsub_12 + + thumb_func_start copy_queue_process +copy_queue_process: @ 800742C + push {r4-r7,lr} + ldr r0, =0x02021834 + ldrb r0, [r0] + cmp r0, 0 + beq _08007474 + movs r4, 0 + ldr r1, =0x02021835 + ldrb r0, [r1] + cmp r0, 0 + beq _0800746E + ldr r6, =0x02021838 + adds r7, r6, 0x4 + adds r5, r1, 0 +_08007446: + lsls r1, r4, 1 + adds r1, r4 + lsls r1, 2 + adds r2, r1, r6 + ldr r0, [r2] + adds r1, r7 + ldr r1, [r1] + ldrh r2, [r2, 0x8] + lsrs r2, 1 + bl CpuSet + ldrb r1, [r5] + subs r1, 0x1 + strb r1, [r5] + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + lsls r1, 24 + cmp r1, 0 + bne _08007446 +_0800746E: + ldr r1, =0x02021834 + movs r0, 0 + strb r0, [r1] +_08007474: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_queue_process + + thumb_func_start copy_queue_add_oam_frame +copy_queue_add_oam_frame: @ 8007488 + push {r4-r6,lr} + adds r5, r2, 0 + lsls r0, 16 + lsrs r2, r0, 16 + lsls r1, 16 + lsrs r6, r1, 16 + ldr r4, =0x02021835 + ldrb r0, [r4] + cmp r0, 0x3F + bhi _080074D8 + ldr r3, =0x02021838 + adds r1, r0, 0 + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r3 + lsls r2, 3 + adds r2, r5 + ldr r1, [r2] + str r1, [r0] + ldrb r0, [r4] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r0, r3, 0x4 + adds r1, r0 + lsls r0, r6, 5 + ldr r5, =0x06010000 + adds r0, r5 + str r0, [r1] + ldrb r1, [r4] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r3 + ldrh r1, [r2, 0x4] + strh r1, [r0, 0x8] + ldrb r0, [r4] + adds r0, 0x1 + strb r0, [r4] +_080074D8: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_queue_add_oam_frame + + thumb_func_start copy_queue_add +copy_queue_add: @ 80074EC + push {r4-r6,lr} + adds r4, r0, 0 + adds r5, r1, 0 + lsls r2, 16 + lsrs r6, r2, 16 + ldr r3, =0x02021835 + ldrb r0, [r3] + cmp r0, 0x3F + bhi _0800752C + ldr r2, =0x02021838 + adds r1, r0, 0 + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + str r4, [r0] + ldrb r1, [r3] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r1, r2, 0x4 + adds r0, r1 + str r5, [r0] + ldrb r1, [r3] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + strh r6, [r0, 0x8] + ldrb r0, [r3] + adds r0, 0x1 + strb r0, [r3] +_0800752C: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_queue_add + + thumb_func_start copy_all_from_objects +copy_all_from_objects: @ 800753C + push {r4,lr} + adds r1, r0, 0 + ldr r3, =0x02020630 + movs r2, 0 + ldr r4, =0x000010ff +_08007546: + ldrb r0, [r3] + strb r0, [r1] + adds r1, 0x1 + adds r3, 0x1 + adds r2, 0x1 + cmp r2, r4 + bls _08007546 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_all_from_objects + + thumb_func_start copy_all_to_objects +copy_all_to_objects: @ 8007564 + push {r4,lr} + adds r1, r0, 0 + ldr r3, =0x02020630 + movs r2, 0 + ldr r4, =0x000010ff +_0800756E: + ldrb r0, [r1] + strb r0, [r3] + adds r1, 0x1 + adds r3, 0x1 + adds r2, 0x1 + cmp r2, r4 + bls _0800756E + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end copy_all_to_objects + + thumb_func_start obj_delete_all +obj_delete_all: @ 800758C + push {r4,r5,lr} + movs r4, 0 +_08007590: + lsls r0, r4, 4 + adds r0, r4 + lsls r0, 2 + ldr r5, =0x02020630 + adds r0, r5 + bl obj_delete + ldr r0, =0x020217f4 + adds r0, r4, r0 + strb r4, [r0] + adds r0, r4, 0x1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x3F + bls _08007590 + lsls r0, r4, 4 + adds r0, r4 + lsls r0, 2 + adds r0, r5 + bl obj_delete + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_delete_all + + thumb_func_start obj_free_tiles +obj_free_tiles: @ 80075C8 + push {lr} + ldr r2, [r0, 0x14] + ldrh r1, [r2] + ldr r0, =0x0000ffff + cmp r1, r0 + beq _080075DA + adds r0, r1, 0 + bl gpu_tile_obj_free_by_tag +_080075DA: + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_free_tiles + + thumb_func_start obj_free_pal +obj_free_pal: @ 80075E4 + push {lr} + ldr r0, [r0, 0x14] + ldrh r0, [r0, 0x2] + bl gpu_pal_free_tag + pop {r0} + bx r0 + thumb_func_end obj_free_pal + + thumb_func_start obj_free_rotscale_entry +obj_free_rotscale_entry: @ 80075F4 + push {r4,lr} + adds r4, r0, 0 + ldrb r0, [r4, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + beq _0800761A + ldrb r0, [r4, 0x3] + lsls r0, 26 + lsrs r0, 27 + bl rotscale_free_entry + ldrb r1, [r4, 0x1] + movs r0, 0x4 + negs r0, r0 + ands r0, r1 + strb r0, [r4, 0x1] +_0800761A: + pop {r4} + pop {r0} + bx r0 + thumb_func_end obj_free_rotscale_entry + + thumb_func_start obj_delete_and_free_resources +obj_delete_and_free_resources: @ 8007620 + push {r4,lr} + adds r4, r0, 0 + bl obj_free_tiles + adds r0, r4, 0 + bl obj_free_pal + adds r0, r4, 0 + bl obj_free_rotscale_entry + adds r0, r4, 0 + bl obj_delete_and_free_tiles + pop {r4} + pop {r0} + bx r0 + thumb_func_end obj_delete_and_free_resources + + thumb_func_start obj_anim_step +obj_anim_step: @ 8007640 + push {r4,r5,lr} + adds r4, r0, 0 + ldr r2, =0x082ec6c4 + adds r5, r4, 0 + adds r5, 0x3F + ldrb r1, [r5] + movs r0, 0x4 + ands r0, r1 + adds r0, r2 + ldr r1, [r0] + adds r0, r4, 0 + bl _call_via_r1 + ldr r0, =0x02021cc0 + ldrb r0, [r0] + cmp r0, 0 + bne _08007676 + ldr r0, =0x082ec6cc + ldrb r1, [r5] + lsls r1, 28 + lsrs r1, 31 + lsls r1, 2 + adds r1, r0 + ldr r1, [r1] + adds r0, r4, 0 + bl _call_via_r1 +_08007676: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_anim_step + + thumb_func_start obj_anim_image_begin +obj_anim_image_begin: @ 8007688 + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + adds r4, r0, 0 + adds r3, r4, 0 + adds r3, 0x2B + movs r2, 0 + strb r2, [r3] + adds r5, r4, 0 + adds r5, 0x3F + ldrb r1, [r5] + movs r0, 0x11 + negs r0, r0 + ands r0, r1 + strb r0, [r5] + adds r0, r4, 0 + adds r0, 0x2D + strb r2, [r0] + adds r2, r4, 0 + adds r2, 0x2A + ldrb r1, [r2] + ldr r0, [r4, 0x8] + lsls r1, 2 + adds r1, r0 + ldrb r0, [r3] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + ldrh r0, [r0] + mov r9, r0 + lsls r0, 16 + mov r8, r0 + asrs r1, r0, 16 + movs r0, 0x1 + negs r0, r0 + cmp r1, r0 + beq _0800776C + ldrb r1, [r5] + subs r0, 0x4 + ands r0, r1 + strb r0, [r5] + ldrb r1, [r2] + ldr r0, [r4, 0x8] + lsls r1, 2 + adds r1, r0 + ldrb r0, [r3] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + lsls r1, r0, 10 + lsrs r3, r1, 26 + lsls r1, r0, 9 + lsrs r7, r1, 31 + lsls r0, 8 + lsrs r6, r0, 31 + cmp r3, 0 + beq _08007704 + subs r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 +_08007704: + adds r2, r4, 0 + adds r2, 0x2C + movs r0, 0x3F + ands r3, r0 + ldrb r1, [r2] + subs r0, 0x7F + ands r0, r1 + orrs r0, r3 + strb r0, [r2] + ldrb r0, [r4, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + bne _0800772E + adds r0, r4, 0 + adds r1, r7, 0 + adds r2, r6, 0 + bl obj_set_horizonal_and_vertical_flip +_0800772E: + ldrb r1, [r5] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _0800775C + adds r0, r4, 0 + adds r0, 0x40 + ldrh r1, [r0] + add r1, r9 + ldr r2, =0x000003ff + adds r0, r2, 0 + ands r1, r0 + ldrh r2, [r4, 0x4] + ldr r0, =0xfffffc00 + ands r0, r2 + orrs r0, r1 + strh r0, [r4, 0x4] + b _0800776C + .align 2, 0 + .pool +_0800775C: + mov r1, r8 + lsrs r0, r1, 16 + ldrh r1, [r4, 0x4] + lsls r1, 22 + lsrs r1, 22 + ldr r2, [r4, 0xC] + bl copy_queue_add_oam_frame +_0800776C: + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end obj_anim_image_begin + + thumb_func_start obj_anim_image_continue +obj_anim_image_continue: @ 8007778 + push {r4,lr} + adds r4, r0, 0 + adds r0, 0x2C + ldrb r1, [r0] + movs r0, 0x3F + ands r0, r1 + cmp r0, 0 + beq _080077C8 + adds r0, r4, 0 + bl obj_anim_image_delay_progress + adds r0, r4, 0 + adds r0, 0x2A + ldrb r1, [r0] + ldr r0, [r4, 0x8] + lsls r1, 2 + adds r1, r0 + adds r0, r4, 0 + adds r0, 0x2B + ldrb r0, [r0] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + lsls r1, r0, 9 + lsrs r3, r1, 31 + lsls r0, 8 + lsrs r2, r0, 31 + ldrb r0, [r4, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + bne _0800780E + adds r0, r4, 0 + adds r1, r3, 0 + bl obj_set_horizonal_and_vertical_flip + b _0800780E +_080077C8: + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + bne _0800780E + adds r2, r4, 0 + adds r2, 0x2B + ldrb r0, [r2] + adds r0, 0x1 + strb r0, [r2] + adds r0, r4, 0 + adds r0, 0x2A + ldrb r0, [r0] + ldr r1, [r4, 0x8] + lsls r0, 2 + adds r0, r1 + ldrb r1, [r2] + ldr r0, [r0] + lsls r1, 2 + adds r1, r0 + movs r2, 0x3 + movs r3, 0 + ldrsh r0, [r1, r3] + cmp r0, 0 + bge _080077FE + adds r0, 0x3 + lsls r0, 16 + lsrs r2, r0, 16 +_080077FE: + ldr r0, =0x082ec6d4 + lsls r1, r2, 16 + asrs r1, 14 + adds r1, r0 + ldr r1, [r1] + adds r0, r4, 0 + bl _call_via_r1 +_0800780E: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_anim_image_continue + + thumb_func_start anim_image_3 +anim_image_3: @ 8007818 + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r4, r0, 0 + adds r0, 0x2A + ldrb r1, [r0] + ldr r0, [r4, 0x8] + lsls r1, 2 + adds r1, r0 + adds r0, r4, 0 + adds r0, 0x2B + ldrb r0, [r0] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + ldrh r7, [r0] + mov r8, r7 + ldr r0, [r0] + lsls r1, r0, 10 + lsrs r3, r1, 26 + lsls r1, r0, 9 + lsrs r6, r1, 31 + lsls r0, 8 + lsrs r5, r0, 31 + cmp r3, 0 + beq _08007852 + subs r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 +_08007852: + adds r2, r4, 0 + adds r2, 0x2C + movs r0, 0x3F + ands r3, r0 + ldrb r1, [r2] + subs r0, 0x7F + ands r0, r1 + orrs r0, r3 + strb r0, [r2] + ldrb r0, [r4, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + bne _0800787C + adds r0, r4, 0 + adds r1, r6, 0 + adds r2, r5, 0 + bl obj_set_horizonal_and_vertical_flip +_0800787C: + adds r0, r4, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _080078AC + adds r0, r4, 0 + adds r0, 0x40 + ldrh r1, [r0] + adds r1, r7 + ldr r2, =0x000003ff + adds r0, r2, 0 + ands r1, r0 + ldrh r2, [r4, 0x4] + ldr r0, =0xfffffc00 + ands r0, r2 + orrs r0, r1 + strh r0, [r4, 0x4] + b _080078BA + .align 2, 0 + .pool +_080078AC: + mov r0, r8 + ldrh r1, [r4, 0x4] + lsls r1, 22 + lsrs r1, 22 + ldr r2, [r4, 0xC] + bl copy_queue_add_oam_frame +_080078BA: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end anim_image_3 + + thumb_func_start anim_image_2 +anim_image_2: @ 80078C4 + adds r2, r0, 0 + adds r2, 0x2B + ldrb r1, [r2] + subs r1, 0x1 + strb r1, [r2] + adds r0, 0x3F + ldrb r1, [r0] + movs r2, 0x10 + orrs r1, r2 + strb r1, [r0] + bx lr + thumb_func_end anim_image_2 + + thumb_func_start anim_image_1 +anim_image_1: @ 80078DC + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r4, r0, 0 + adds r3, r4, 0 + adds r3, 0x2A + ldrb r1, [r3] + ldr r0, [r4, 0x8] + lsls r1, 2 + adds r1, r0 + adds r2, r4, 0 + adds r2, 0x2B + ldrb r0, [r2] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + lsls r0, 10 + lsrs r0, 26 + strb r0, [r2] + ldrb r0, [r3] + ldr r1, [r4, 0x8] + lsls r0, 2 + adds r0, r1 + ldrb r1, [r2] + ldr r0, [r0] + lsls r1, 2 + adds r1, r0 + ldrh r7, [r1] + mov r8, r7 + ldr r0, [r1] + lsls r1, r0, 10 + lsrs r3, r1, 26 + lsls r1, r0, 9 + lsrs r6, r1, 31 + lsls r0, 8 + lsrs r5, r0, 31 + cmp r3, 0 + beq _08007930 + subs r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 +_08007930: + adds r2, r4, 0 + adds r2, 0x2C + movs r0, 0x3F + ands r3, r0 + ldrb r1, [r2] + subs r0, 0x7F + ands r0, r1 + orrs r0, r3 + strb r0, [r2] + ldrb r0, [r4, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + bne _0800795A + adds r0, r4, 0 + adds r1, r6, 0 + adds r2, r5, 0 + bl obj_set_horizonal_and_vertical_flip +_0800795A: + adds r0, r4, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _0800798C + adds r0, r4, 0 + adds r0, 0x40 + ldrh r1, [r0] + adds r1, r7 + ldr r2, =0x000003ff + adds r0, r2, 0 + ands r1, r0 + ldrh r2, [r4, 0x4] + ldr r0, =0xfffffc00 + ands r0, r2 + orrs r0, r1 + strh r0, [r4, 0x4] + b _0800799A + .align 2, 0 + .pool +_0800798C: + mov r0, r8 + ldrh r1, [r4, 0x4] + lsls r1, 22 + lsrs r1, 22 + ldr r2, [r4, 0xC] + bl copy_queue_add_oam_frame +_0800799A: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end anim_image_1 + + thumb_func_start anim_image_0 +anim_image_0: @ 80079A4 + push {lr} + adds r1, r0, 0 + adds r0, 0x2D + ldrb r0, [r0] + cmp r0, 0 + beq _080079B8 + adds r0, r1, 0 + bl sub_80079FC + b _080079BE +_080079B8: + adds r0, r1, 0 + bl sub_80079C4 +_080079BE: + pop {r0} + bx r0 + thumb_func_end anim_image_0 + + thumb_func_start sub_80079C4 +sub_80079C4: @ 80079C4 + push {r4,lr} + adds r4, r0, 0 + adds r0, 0x2A + ldrb r1, [r0] + ldr r0, [r4, 0x8] + lsls r1, 2 + adds r1, r0 + adds r0, r4, 0 + adds r0, 0x2B + ldrb r0, [r0] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + ldr r0, [r0] + lsls r0, 10 + lsrs r0, 26 + adds r1, r4, 0 + adds r1, 0x2D + strb r0, [r1] + adds r0, r4, 0 + bl obj_anim_rewind_to_cmd00 + adds r0, r4, 0 + bl obj_anim_image_continue + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80079C4 + + thumb_func_start sub_80079FC +sub_80079FC: @ 80079FC + push {r4,lr} + adds r4, r0, 0 + adds r1, r4, 0 + adds r1, 0x2D + ldrb r0, [r1] + subs r0, 0x1 + strb r0, [r1] + adds r0, r4, 0 + bl obj_anim_rewind_to_cmd00 + adds r0, r4, 0 + bl obj_anim_image_continue + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80079FC + + thumb_func_start obj_anim_rewind_to_cmd00 +obj_anim_rewind_to_cmd00: @ 8007A1C + push {r4-r7,lr} + mov r12, r0 + adds r0, 0x2D + ldrb r0, [r0] + cmp r0, 0 + beq _08007A88 + mov r3, r12 + adds r3, 0x2B + ldrb r0, [r3] + subs r0, 0x1 + strb r0, [r3] + mov r5, r12 + adds r5, 0x2A + ldrb r1, [r5] + mov r2, r12 + ldr r0, [r2, 0x8] + lsls r1, 2 + adds r1, r0 + ldrb r0, [r3] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + subs r0, 0x4 + movs r7, 0 + ldrsh r0, [r0, r7] + movs r1, 0x3 + negs r1, r1 + adds r4, r3, 0 + cmp r0, r1 + beq _08007A82 + adds r6, r1, 0 + adds r2, r4, 0 +_08007A5C: + ldrb r0, [r2] + cmp r0, 0 + beq _08007A82 + subs r0, 0x1 + strb r0, [r3] + ldrb r1, [r5] + mov r7, r12 + ldr r0, [r7, 0x8] + lsls r1, 2 + adds r1, r0 + ldrb r0, [r2] + ldr r1, [r1] + lsls r0, 2 + adds r0, r1 + subs r0, 0x4 + movs r1, 0 + ldrsh r0, [r0, r1] + cmp r0, r6 + bne _08007A5C +_08007A82: + ldrb r0, [r4] + subs r0, 0x1 + strb r0, [r4] +_08007A88: + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end obj_anim_rewind_to_cmd00 + + thumb_func_start obj_anim_rotscale_begin +obj_anim_rotscale_begin: @ 8007A90 + push {r4-r7,lr} + sub sp, 0x8 + adds r6, r0, 0 + ldrb r0, [r6, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08007B12 + ldr r0, [r6, 0x10] + ldr r0, [r0] + movs r2, 0 + ldrsh r1, [r0, r2] + ldr r0, =0x00007fff + cmp r1, r0 + beq _08007B12 + adds r0, r6, 0 + bl obj_get_rotscale_entry_index + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + adds r0, r4, 0 + bl rotscale_reset_half + mov r5, sp + adds r0, r4, 0 + adds r1, r6, 0 + mov r2, sp + bl rotscale_load_frame + adds r7, r6, 0 + adds r7, 0x3F + ldrb r1, [r7] + movs r0, 0x9 + negs r0, r0 + ands r0, r1 + movs r1, 0x21 + negs r1, r1 + ands r0, r1 + strb r0, [r7] + adds r0, r4, 0 + mov r1, sp + bl sub_8008168 + ldr r1, =0x03000b70 + lsls r0, r4, 1 + adds r0, r4 + lsls r0, 2 + adds r0, r1 + ldrb r1, [r5, 0x5] + strb r1, [r0, 0x2] + ldrb r1, [r7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + beq _08007B12 + movs r0, 0x3A + ldrsh r1, [r6, r0] + movs r0, 0x3C + ldrsh r2, [r6, r0] + adds r0, r6, 0 + bl obj_update_pos2 +_08007B12: + add sp, 0x8 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_anim_rotscale_begin + + thumb_func_start obj_anim_rotscale_continue +obj_anim_rotscale_continue: @ 8007B24 + push {r4,r5,lr} + adds r4, r0, 0 + ldrb r0, [r4, 0x1] + lsls r0, 30 + lsrs r0, 30 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08007BC6 + adds r0, r4, 0 + bl obj_get_rotscale_entry_index + lsls r0, 24 + lsrs r2, r0, 24 + adds r5, r2, 0 + ldr r1, =0x03000b70 + lsls r0, r2, 1 + adds r0, r2 + lsls r0, 2 + adds r3, r0, r1 + ldrb r0, [r3, 0x2] + cmp r0, 0 + beq _08007B60 + adds r0, r2, 0 + adds r1, r4, 0 + bl sub_8007BD8 + b _08007BAA + .align 2, 0 + .pool +_08007B60: + adds r0, r4, 0 + adds r0, 0x2C + ldrb r1, [r0] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _08007BC6 + ldrb r0, [r3, 0x1] + adds r0, 0x1 + strb r0, [r3, 0x1] + ldrb r0, [r3] + ldr r1, [r4, 0x10] + lsls r0, 2 + adds r0, r1 + ldrb r1, [r3, 0x1] + ldr r0, [r0] + lsls r1, 3 + adds r1, r0 + movs r2, 0x3 + movs r0, 0 + ldrsh r1, [r1, r0] + ldr r0, =0x00007ffc + cmp r1, r0 + ble _08007B98 + ldr r2, =0xffff8003 + adds r0, r1, r2 + lsls r0, 16 + lsrs r2, r0, 16 +_08007B98: + ldr r0, =0x082ec6e4 + lsls r1, r2, 16 + asrs r1, 14 + adds r1, r0 + ldr r2, [r1] + adds r0, r5, 0 + adds r1, r4, 0 + bl _call_via_r2 +_08007BAA: + adds r0, r4, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + beq _08007BC6 + movs r0, 0x3A + ldrsh r1, [r4, r0] + movs r0, 0x3C + ldrsh r2, [r4, r0] + adds r0, r4, 0 + bl obj_update_pos2 +_08007BC6: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end obj_anim_rotscale_continue + + thumb_func_start sub_8007BD8 +sub_8007BD8: @ 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 obj_anim_rotscale_delay_progress + lsls r0, 24 + cmp r0, 0 + bne _08007C02 + adds r0, r4, 0 + adds r1, r5, 0 + mov r2, sp + bl rotscale_load_frame + adds r0, r4, 0 + mov r1, sp + bl rotscale_frame_apply_relative_and_sync +_08007C02: + add sp, 0x8 + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_8007BD8 + + thumb_func_start anim_rotscale_0 +anim_rotscale_0: @ 8007C0C + push {lr} + adds r3, r1, 0 + lsls r0, 24 + lsrs r2, r0, 24 + ldr r1, =0x03000b70 + 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 sub_8007C7C + b _08007C3C + .align 2, 0 + .pool +_08007C34: + adds r0, r2, 0 + adds r1, r3, 0 + bl sub_8007C40 +_08007C3C: + pop {r0} + bx r0 + thumb_func_end anim_rotscale_0 + + thumb_func_start sub_8007C40 +sub_8007C40: @ 8007C40 + push {r4,lr} + adds r4, r1, 0 + lsls r0, 24 + lsrs r0, 24 + ldr r1, =0x03000b70 + 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 obj_anim_rotscale_rewind_to_cmd00_maybe + adds r0, r4, 0 + bl obj_anim_rotscale_continue + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end sub_8007C40 + + thumb_func_start sub_8007C7C +sub_8007C7C: @ 8007C7C + push {r4,lr} + adds r4, r1, 0 + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03000b70 + 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 obj_anim_rotscale_rewind_to_cmd00_maybe + adds r0, r4, 0 + bl obj_anim_rotscale_continue + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end sub_8007C7C + + thumb_func_start obj_anim_rotscale_rewind_to_cmd00_maybe +obj_anim_rotscale_rewind_to_cmd00_maybe: @ 8007CAC + push {r4-r7,lr} + mov r12, r1 + lsls r0, 24 + lsrs r5, r0, 24 + ldr r1, =0x03000b70 + 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 + .align 2, 0 + .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 + .align 2, 0 + .pool + thumb_func_end obj_anim_rotscale_rewind_to_cmd00_maybe + + thumb_func_start anim_rotscale_1 +anim_rotscale_1: @ 8007D18 + push {r4-r6,lr} + sub sp, 0x8 + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + ldr r0, =0x03000b70 + 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 rotscale_load_frame + adds r0, r5, 0 + mov r1, sp + bl sub_8008168 + ldrb r0, [r6, 0x5] + strb r0, [r4, 0x2] + add sp, 0x8 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end anim_rotscale_1 + + thumb_func_start anim_rotscale_2 +anim_rotscale_2: @ 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, =0x03000b70 + 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 rotscale_frame_apply_relative_and_sync + add sp, 0x8 + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end anim_rotscale_2 + + thumb_func_start anim_rotscale_3 +anim_rotscale_3: @ 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 rotscale_load_frame + adds r0, r4, 0 + mov r1, sp + bl sub_8008168 + ldr r1, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end anim_rotscale_3 + + thumb_func_start rotscale_set_indirect +rotscale_set_indirect: @ 8007DD8 + lsls r0, 24 + ldr r2, =0x02021bc0 + 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 + .align 2, 0 + .pool + thumb_func_end rotscale_set_indirect + + thumb_func_start obj_get_rotscale_entry_index +obj_get_rotscale_entry_index: @ 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 obj_get_rotscale_entry_index + + thumb_func_start sub_8007E18 +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 +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 +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, =0x082ec6f4 + 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, =0x02021bc0 + 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, =0x082ec6f4 + 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, =0x02021bc0 + 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 + .align 2, 0 + .pool + thumb_func_end obj_update_pos2 + + thumb_func_start obj_set_horizonal_and_vertical_flip +obj_set_horizonal_and_vertical_flip: @ 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 obj_set_horizonal_and_vertical_flip + + thumb_func_start rotscale_reset_half +rotscale_reset_half: @ 8007F64 + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end rotscale_reset_half + + thumb_func_start rotscale_reset_full_1 +rotscale_reset_full_1: @ 8007F80 + lsls r0, 24 + lsrs r0, 24 + ldr r3, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end rotscale_reset_full_1 + + thumb_func_start rotscale_reset_full_2 +rotscale_reset_full_2: @ 8007FA8 + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end rotscale_reset_full_2 + + thumb_func_start rotscale_frame_apply_absolute +rotscale_frame_apply_absolute: @ 8007FD0 + lsls r0, 24 + lsrs r0, 24 + ldr r3, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end rotscale_frame_apply_absolute + + thumb_func_start obj_anim_image_delay_progress +obj_anim_image_delay_progress: @ 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 obj_anim_image_delay_progress + + thumb_func_start obj_anim_rotscale_delay_progress +obj_anim_rotscale_delay_progress: @ 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, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end obj_anim_rotscale_delay_progress + + thumb_func_start rotscale_frame_apply_relative_and_sync +rotscale_frame_apply_relative_and_sync: @ 800804C + push {r4-r6,lr} + sub sp, 0x10 + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + ldr r0, =0x03000b70 + 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 _082E709C + adds r0, r5, 0 + adds r1, r4, 0 + bl rotscale_set_indirect + add sp, 0x10 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end rotscale_frame_apply_relative_and_sync + + thumb_func_start divide_0x10000_by +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 rotscale_load_frame +rotscale_load_frame: @ 80080FC + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + ldr r3, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end rotscale_load_frame + + thumb_func_start sub_8008168 +sub_8008168: @ 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 rotscale_frame_apply_relative_and_sync + b _0800819E +_0800818E: + adds r0, r4, 0 + adds r1, r2, 0 + bl rotscale_frame_apply_absolute + adds r0, r4, 0 + mov r1, sp + bl rotscale_frame_apply_relative_and_sync +_0800819E: + add sp, 0x8 + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_8008168 + + thumb_func_start obj_anim_image_start +obj_anim_image_start: @ 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 obj_anim_image_start + + thumb_func_start obj_anim_image_start_if_different +obj_anim_image_start_if_different: @ 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 obj_anim_image_start +_080081D6: + pop {r0} + bx r0 + thumb_func_end obj_anim_image_start_if_different + + thumb_func_start obj_anim_image_seek +obj_anim_image_seek: @ 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 obj_anim_image_continue + 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 obj_anim_image_seek + + thumb_func_start sub_8008258 +sub_8008258: @ 8008258 + push {r4,r5,lr} + adds r5, r0, 0 + lsls r4, r1, 24 + lsrs r4, 24 + bl obj_get_rotscale_entry_index + 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 sub_8008258 + + thumb_func_start sub_8008284 +sub_8008284: @ 8008284 + push {r4,r5,lr} + adds r5, r0, 0 + lsls r1, 24 + lsrs r4, r1, 24 + bl obj_get_rotscale_entry_index + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03000b70 + 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 sub_8008258 +_080082AC: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end sub_8008284 + + thumb_func_start sub_80082B8 +sub_80082B8: @ 80082B8 + push {r4,r5,lr} + adds r5, r0, 0 + lsls r4, r1, 24 + lsrs r4, 24 + bl obj_get_rotscale_entry_index + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03000b70 + 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 + .align 2, 0 + .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 obj_get_rotscale_entry_index + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x03000b70 + 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 + .align 2, 0 + .pool + thumb_func_end sub_80082F0 + + thumb_func_start sub_8008324 +sub_8008324: @ 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 + .align 2, 0 + .pool + thumb_func_end sub_8008324 + + thumb_func_start rotscale_reset_all +rotscale_reset_all: @ 800837C + push {r4,lr} + ldr r1, =0x02021cc0 + movs r0, 0 + strb r0, [r1] + ldr r1, =0x03003018 + movs r0, 0 + str r0, [r1] + bl reset_rotscale_coeffs + 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 + .align 2, 0 + .pool + thumb_func_end rotscale_reset_all + + thumb_func_start rotscale_alloc_entry +rotscale_alloc_entry: @ 80083B0 + push {r4,lr} + movs r2, 0 + movs r1, 0x1 + ldr r0, =0x03003018 + 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 + .align 2, 0 + .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 rotscale_free_entry +rotscale_free_entry: @ 80083E8 + push {lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r2, r0, 24 + movs r0, 0 + movs r1, 0x1 + ldr r3, =0x03003018 + 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 rotscale_set_direct + add sp, 0x4 + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end rotscale_free_entry + + thumb_func_start obj_alloc_rotscale_entry +obj_alloc_rotscale_entry: @ 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 oam_center + 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 obj_alloc_rotscale_entry + + 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 _082E709C + adds r0, r6, 0 + adds r1, r4, 0 + bl rotscale_set_indirect + add sp, 0x10 + pop {r3} + mov r8, r3 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end sub_8008478 + + thumb_func_start gpu_tile_obj_alloc_tag_and_copy_to_vram +gpu_tile_obj_alloc_tag_and_copy_to_vram: @ 80084F8 + push {r4-r6,lr} + adds r5, r0, 0 + ldrh r0, [r5, 0x4] + lsrs r0, 5 + bl gpu_tile_obj_alloc + 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 gpu_tile_obj_tag_add + 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 + .align 2, 0 + .pool +_08008534: + movs r0, 0 +_08008536: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end gpu_tile_obj_alloc_tag_and_copy_to_vram + + thumb_func_start gpu_tile_obj_alloc_and_load_multiple +gpu_tile_obj_alloc_and_load_multiple: @ 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 gpu_tile_obj_alloc_tag_and_copy_to_vram + 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 gpu_tile_obj_alloc_and_load_multiple + + thumb_func_start gpu_tile_obj_free_by_tag +gpu_tile_obj_free_by_tag: @ 8008568 + push {r4-r7,lr} + mov r7, r8 + push {r7} + lsls r0, 16 + lsrs r0, 16 + bl gpu_tile_obj_tag_index_of + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0xFF + beq _080085C6 + ldr r0, =0x03000a70 + 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, =0x030009f0 + mov r8, r1 + lsls r5, r4, 1 + cmp r3, r0 + bge _080085BE + ldr r1, =0x02021b3c + 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 + .align 2, 0 + .pool + thumb_func_end gpu_tile_obj_free_by_tag + + thumb_func_start gpu_tile_obj_tags_reset +gpu_tile_obj_tags_reset: @ 80085E0 + push {r4-r7,lr} + movs r2, 0 + ldr r7, =0x030009f0 + ldr r0, =0x0000ffff + adds r6, r0, 0 + ldr r4, =0x03000a70 + 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 + .align 2, 0 + .pool + thumb_func_end gpu_tile_obj_tags_reset + + thumb_func_start gpu_tile_obj_tag_get_range_start +gpu_tile_obj_tag_get_range_start: @ 8008620 + push {lr} + lsls r0, 16 + lsrs r0, 16 + bl gpu_tile_obj_tag_index_of + lsls r0, 24 + lsrs r1, r0, 24 + cmp r1, 0xFF + beq _08008640 + ldr r0, =0x03000a70 + lsls r1, 2 + adds r1, r0 + ldrh r0, [r1] + b _08008642 + .align 2, 0 + .pool +_08008640: + ldr r0, =0x0000ffff +_08008642: + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end gpu_tile_obj_tag_get_range_start + + thumb_func_start gpu_tile_obj_tag_index_of +gpu_tile_obj_tag_index_of: @ 800864C + push {lr} + lsls r0, 16 + lsrs r2, r0, 16 + movs r1, 0 + ldr r3, =0x030009f0 +_08008656: + lsls r0, r1, 1 + adds r0, r3 + ldrh r0, [r0] + cmp r0, r2 + bne _08008668 + adds r0, r1, 0 + b _08008674 + .align 2, 0 + .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 gpu_tile_obj_tag_index_of + + thumb_func_start gpu_tile_obj_tag_get_by_range_start +gpu_tile_obj_tag_get_by_range_start: @ 8008678 + push {r4-r6,lr} + lsls r0, 16 + lsrs r3, r0, 16 + movs r2, 0 + ldr r6, =0x030009f0 + ldr r5, =0x0000ffff + ldr r4, =0x03000a70 +_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 + .align 2, 0 + .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 + .align 2, 0 + .pool + thumb_func_end gpu_tile_obj_tag_get_by_range_start + + thumb_func_start gpu_tile_obj_tag_add +gpu_tile_obj_tag_add: @ 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 gpu_tile_obj_tag_index_of + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x030009f0 + lsls r1, r0, 1 + adds r1, r2 + strh r4, [r1] + ldr r1, =0x03000a70 + 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 + .align 2, 0 + .pool + thumb_func_end gpu_tile_obj_tag_add + + thumb_func_start gpu_pal_allocator_reset +gpu_pal_allocator_reset: @ 800870C + push {r4,lr} + ldr r1, =0x0300301c + movs r0, 0 + strb r0, [r1] + movs r2, 0 + ldr r4, =0x03000cf0 + 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 + .align 2, 0 + .pool + thumb_func_end gpu_pal_allocator_reset + + thumb_func_start gpu_pal_obj_alloc_tag_and_apply +gpu_pal_obj_alloc_tag_and_apply: @ 8008744 + push {r4,r5,lr} + adds r5, r0, 0 + ldrh r0, [r5, 0x4] + bl gpu_pal_tags_index_of + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0xFF + beq _0800875A + adds r0, r4, 0 + b _0800878A +_0800875A: + ldr r0, =0x0000ffff + bl gpu_pal_tags_index_of + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0xFF + beq _08008788 + ldr r1, =0x03000cf0 + lsls r0, r4, 1 + adds r0, r1 + ldrh r1, [r5, 0x4] + strh r1, [r0] + ldr r0, [r5] + lsls r1, r4, 4 + bl gpu_pal_obj_load + adds r0, r4, 0 + b _0800878A + .align 2, 0 + .pool +_08008788: + movs r0, 0xFF +_0800878A: + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end gpu_pal_obj_alloc_tag_and_apply + + thumb_func_start gpu_pal_obj_alloc_and_load_multiple +gpu_pal_obj_alloc_and_load_multiple: @ 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 gpu_pal_obj_alloc_tag_and_apply + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0xFF + bne _08008798 +_080087B6: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end gpu_pal_obj_alloc_and_load_multiple + + thumb_func_start gpu_pal_obj_load +gpu_pal_obj_load: @ 80087BC + push {lr} + lsls r1, 16 + movs r2, 0x80 + lsls r2, 17 + adds r1, r2 + lsrs r1, 16 + movs r2, 0x20 + bl gpu_pal_apply + pop {r0} + bx r0 + thumb_func_end gpu_pal_obj_load + + thumb_func_start gpu_pal_alloc_new +gpu_pal_alloc_new: @ 80087D4 + push {r4,lr} + lsls r0, 16 + lsrs r4, r0, 16 + ldr r0, =0x0000ffff + bl gpu_pal_tags_index_of + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0xFF + beq _080087FC + ldr r1, =0x03000cf0 + lsls r0, r2, 1 + adds r0, r1 + strh r4, [r0] + adds r0, r2, 0 + b _080087FE + .align 2, 0 + .pool +_080087FC: + movs r0, 0xFF +_080087FE: + pop {r4} + pop {r1} + bx r1 + thumb_func_end gpu_pal_alloc_new + + thumb_func_start gpu_pal_tags_index_of +gpu_pal_tags_index_of: @ 8008804 + push {lr} + lsls r0, 16 + lsrs r2, r0, 16 + ldr r0, =0x0300301c + ldrb r1, [r0] + cmp r1, 0xF + bhi _08008836 + ldr r3, =0x03000cf0 +_08008814: + lsls r0, r1, 1 + adds r0, r3 + ldrh r0, [r0] + cmp r0, r2 + bne _0800882C + adds r0, r1, 0 + b _08008838 + .align 2, 0 + .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 gpu_pal_tags_index_of + + thumb_func_start gpu_pal_tag_by_index +gpu_pal_tag_by_index: @ 800883C + lsls r0, 24 + ldr r1, =0x03000cf0 + lsrs r0, 23 + adds r0, r1 + ldrh r0, [r0] + bx lr + .align 2, 0 + .pool + thumb_func_end gpu_pal_tag_by_index + + thumb_func_start gpu_pal_free_tag +gpu_pal_free_tag: @ 800884C + push {lr} + lsls r0, 16 + lsrs r0, 16 + bl gpu_pal_tags_index_of + lsls r0, 24 + lsrs r1, r0, 24 + cmp r1, 0xFF + beq _08008868 + ldr r0, =0x03000cf0 + lsls r1, 1 + adds r1, r0 + ldr r0, =0x0000ffff + strh r0, [r1] +_08008868: + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end gpu_pal_free_tag + + thumb_func_start obj_set_f18_to_r0_f42_to_40 +obj_set_f18_to_r0_f42_to_40: @ 8008874 + str r1, [r0, 0x18] + adds r0, 0x42 + movs r1, 0x40 + strb r1, [r0] + bx lr + thumb_func_end obj_set_f18_to_r0_f42_to_40 + + thumb_func_start super_sprite_add +super_sprite_add: @ 8008880 + push {r4,lr} + adds r4, r0, 0 + adds r3, r1, 0 + ldr r1, =0x02021b38 + ldrb r0, [r3] + ldrb r1, [r1] + cmp r0, r1 + bcc _08008898 + movs r0, 0x1 + b _080088E0 + .align 2, 0 + .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, =0x030022c0 + 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 + .align 2, 0 + .pool +_080088CC: + ldrb r1, [r3] + lsls r1, 3 + ldr r0, =0x030022f8 + adds r1, r0 + adds r0, r4, 0 + adds r2, r3, 0 + bl sub_80088EC + lsls r0, 24 + lsrs r0, 24 +_080088E0: + pop {r4} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end super_sprite_add + + thumb_func_start sub_80088EC +sub_80088EC: @ 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, =0x02021b38 + ldrb r1, [r2] + ldrb r0, [r0] + cmp r1, r0 + bcc _08008910 +_08008908: + movs r0, 0x1 + b _08008AE6 + .align 2, 0 + .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, =0x02021b38 + 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, =0x082ec754 + 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, =0x082ec754 + 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 + .align 2, 0 + .pool + thumb_func_end sub_80088EC |