From 6d996efc9c67dc360f53c04c811e4c1cd661aa48 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sat, 21 Oct 2023 00:21:04 -0400 Subject: [PATCH] Decompile cursor_hand and spinning_arrow --- asm/code_80AC6AC.s | 211 +++++ asm/{code_80A882C.s => code_80ACDF0.s} | 1014 ------------------------ include/functions.h | 10 +- include/prepscreen.h | 2 +- include/variables.h | 4 +- ldscript.txt | 5 +- src/cursor_hand.c | 229 ++++++ src/prep_itemlist.c | 4 - src/soundroom.c | 3 - src/spinning_arrow.c | 253 ++++++ 10 files changed, 705 insertions(+), 1030 deletions(-) create mode 100644 asm/code_80AC6AC.s rename asm/{code_80A882C.s => code_80ACDF0.s} (84%) create mode 100644 src/cursor_hand.c create mode 100644 src/spinning_arrow.c diff --git a/asm/code_80AC6AC.s b/asm/code_80AC6AC.s new file mode 100644 index 000000000..b607e831d --- /dev/null +++ b/asm/code_80AC6AC.s @@ -0,0 +1,211 @@ + .INCLUDE "macro.inc" + + .SYNTAX UNIFIED + + THUMB_FUNC_START sub_80AC6AC +sub_80AC6AC: @ 0x080AC6AC + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, r9 + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x20 + str r0, [sp] + str r1, [sp, #4] + mov r9, r2 + mov sl, r3 + ldr r3, [sp, #0x40] + ldr r0, _080AC780 @ 0xFFFFFC00 + adds r0, r0, r3 + mov r8, r0 + mov r1, r8 + muls r1, r0, r1 + lsls r5, r3, #1 + movs r6, #0x80 + lsls r6, r6, #3 + adds r0, r5, r6 + muls r0, r1, r0 + asrs r1, r0, #0x1f + adds r4, r3, #0 + muls r4, r3, r4 + movs r2, #0xc0 + lsls r2, r2, #4 + subs r2, r2, r5 + muls r4, r2, r4 + asrs r5, r4, #0x1f + subs r6, r6, r3 + adds r2, r6, #0 + muls r2, r6, r2 + muls r2, r3, r2 + str r2, [sp, #0x18] + asrs r2, r2, #0x1f + str r2, [sp, #0x1c] + mov r2, r8 + muls r2, r3, r2 + muls r2, r3, r2 + str r2, [sp, #8] + asrs r2, r2, #0x1f + str r2, [sp, #0xc] + ldr r2, [sp, #4] + asrs r3, r2, #0x1f + bl __muldi3 + str r0, [sp, #0x10] + str r1, [sp, #0x14] + mov r2, r9 + asrs r3, r2, #0x1f + adds r1, r5, #0 + adds r0, r4, #0 + bl __muldi3 + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + adds r2, r2, r0 + adcs r3, r1 + str r2, [sp, #0x10] + str r3, [sp, #0x14] + mov r3, r9 + ldr r6, [sp] + subs r3, r3, r6 + mov r9, r3 + asrs r0, r3, #1 + adds r2, r0, #0 + mov r0, r9 + asrs r3, r0, #0x1f + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x1c] + bl __muldi3 + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + adds r2, r2, r0 + adcs r3, r1 + str r2, [sp, #0x10] + str r3, [sp, #0x14] + mov r3, sl + ldr r6, [sp, #4] + subs r3, r3, r6 + mov sl, r3 + asrs r0, r3, #1 + adds r2, r0, #0 + mov r0, sl + asrs r3, r0, #0x1f + ldr r0, [sp, #8] + ldr r1, [sp, #0xc] + bl __muldi3 + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + adds r0, r0, r2 + adcs r1, r3 + lsls r3, r1, #2 + lsrs r2, r0, #0x1e + adds r0, r3, #0 + orrs r0, r2 + add sp, #0x20 + pop {r3, r4, r5} + mov r8, r3 + mov r9, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_080AC780: .4byte 0xFFFFFC00 + + THUMB_FUNC_END sub_80AC6AC + + THUMB_FUNC_START sub_80AC784 +sub_80AC784: @ 0x080AC784 + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, r9 + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + mov sl, r0 + mov r9, r1 + adds r6, r2, #0 + mov r8, r3 + ldr r2, [sp, #0x38] + lsls r3, r2, #1 + adds r3, r3, r2 + lsls r0, r3, #1 + adds r4, r2, #0 + muls r4, r0, r4 + lsls r5, r3, #0xb + subs r0, r4, r5 + asrs r1, r0, #0x1f + subs r4, r5, r4 + str r4, [sp] + asrs r4, r4, #0x1f + str r4, [sp, #4] + muls r3, r2, r3 + lsls r4, r2, #0xc + subs r4, r3, r4 + movs r5, #0x80 + lsls r5, r5, #0xd + adds r4, r4, r5 + asrs r5, r4, #0x1f + lsls r2, r2, #0xb + subs r2, r3, r2 + str r2, [sp, #8] + asrs r2, r2, #0x1f + str r2, [sp, #0xc] + mov r2, r9 + asrs r3, r2, #0x1f + bl __muldi3 + str r0, [sp, #0x10] + str r1, [sp, #0x14] + adds r2, r6, #0 + asrs r3, r6, #0x1f + ldr r0, [sp] + ldr r1, [sp, #4] + bl __muldi3 + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + adds r2, r2, r0 + adcs r3, r1 + str r2, [sp, #0x10] + str r3, [sp, #0x14] + mov r3, sl + subs r6, r6, r3 + asrs r0, r6, #1 + adds r2, r0, #0 + asrs r3, r6, #0x1f + adds r1, r5, #0 + adds r0, r4, #0 + bl __muldi3 + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + adds r2, r2, r0 + adcs r3, r1 + str r2, [sp, #0x10] + str r3, [sp, #0x14] + mov r3, r8 + mov r5, r9 + subs r3, r3, r5 + mov r8, r3 + asrs r0, r3, #1 + adds r2, r0, #0 + mov r7, r8 + asrs r3, r7, #0x1f + ldr r0, [sp, #8] + ldr r1, [sp, #0xc] + bl __muldi3 + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + adds r0, r0, r2 + adcs r1, r3 + lsls r3, r1, #0xc + lsrs r2, r0, #0x14 + adds r0, r3, #0 + orrs r0, r2 + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov r9, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + + THUMB_FUNC_END sub_80AC784 + + .align 2, 0 diff --git a/asm/code_80A882C.s b/asm/code_80ACDF0.s similarity index 84% rename from asm/code_80A882C.s rename to asm/code_80ACDF0.s index b28d20baf..611f6a326 100644 --- a/asm/code_80A882C.s +++ b/asm/code_80ACDF0.s @@ -2,1020 +2,6 @@ .SYNTAX UNIFIED - THUMB_FUNC_START sub_80AC6AC -sub_80AC6AC: @ 0x080AC6AC - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, r9 - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x20 - str r0, [sp] - str r1, [sp, #4] - mov r9, r2 - mov sl, r3 - ldr r3, [sp, #0x40] - ldr r0, _080AC780 @ 0xFFFFFC00 - adds r0, r0, r3 - mov r8, r0 - mov r1, r8 - muls r1, r0, r1 - lsls r5, r3, #1 - movs r6, #0x80 - lsls r6, r6, #3 - adds r0, r5, r6 - muls r0, r1, r0 - asrs r1, r0, #0x1f - adds r4, r3, #0 - muls r4, r3, r4 - movs r2, #0xc0 - lsls r2, r2, #4 - subs r2, r2, r5 - muls r4, r2, r4 - asrs r5, r4, #0x1f - subs r6, r6, r3 - adds r2, r6, #0 - muls r2, r6, r2 - muls r2, r3, r2 - str r2, [sp, #0x18] - asrs r2, r2, #0x1f - str r2, [sp, #0x1c] - mov r2, r8 - muls r2, r3, r2 - muls r2, r3, r2 - str r2, [sp, #8] - asrs r2, r2, #0x1f - str r2, [sp, #0xc] - ldr r2, [sp, #4] - asrs r3, r2, #0x1f - bl __muldi3 - str r0, [sp, #0x10] - str r1, [sp, #0x14] - mov r2, r9 - asrs r3, r2, #0x1f - adds r1, r5, #0 - adds r0, r4, #0 - bl __muldi3 - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - adds r2, r2, r0 - adcs r3, r1 - str r2, [sp, #0x10] - str r3, [sp, #0x14] - mov r3, r9 - ldr r6, [sp] - subs r3, r3, r6 - mov r9, r3 - asrs r0, r3, #1 - adds r2, r0, #0 - mov r0, r9 - asrs r3, r0, #0x1f - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x1c] - bl __muldi3 - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - adds r2, r2, r0 - adcs r3, r1 - str r2, [sp, #0x10] - str r3, [sp, #0x14] - mov r3, sl - ldr r6, [sp, #4] - subs r3, r3, r6 - mov sl, r3 - asrs r0, r3, #1 - adds r2, r0, #0 - mov r0, sl - asrs r3, r0, #0x1f - ldr r0, [sp, #8] - ldr r1, [sp, #0xc] - bl __muldi3 - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - adds r0, r0, r2 - adcs r1, r3 - lsls r3, r1, #2 - lsrs r2, r0, #0x1e - adds r0, r3, #0 - orrs r0, r2 - add sp, #0x20 - pop {r3, r4, r5} - mov r8, r3 - mov r9, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - .align 2, 0 -_080AC780: .4byte 0xFFFFFC00 - - THUMB_FUNC_END sub_80AC6AC - - THUMB_FUNC_START sub_80AC784 -sub_80AC784: @ 0x080AC784 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, r9 - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x18 - mov sl, r0 - mov r9, r1 - adds r6, r2, #0 - mov r8, r3 - ldr r2, [sp, #0x38] - lsls r3, r2, #1 - adds r3, r3, r2 - lsls r0, r3, #1 - adds r4, r2, #0 - muls r4, r0, r4 - lsls r5, r3, #0xb - subs r0, r4, r5 - asrs r1, r0, #0x1f - subs r4, r5, r4 - str r4, [sp] - asrs r4, r4, #0x1f - str r4, [sp, #4] - muls r3, r2, r3 - lsls r4, r2, #0xc - subs r4, r3, r4 - movs r5, #0x80 - lsls r5, r5, #0xd - adds r4, r4, r5 - asrs r5, r4, #0x1f - lsls r2, r2, #0xb - subs r2, r3, r2 - str r2, [sp, #8] - asrs r2, r2, #0x1f - str r2, [sp, #0xc] - mov r2, r9 - asrs r3, r2, #0x1f - bl __muldi3 - str r0, [sp, #0x10] - str r1, [sp, #0x14] - adds r2, r6, #0 - asrs r3, r6, #0x1f - ldr r0, [sp] - ldr r1, [sp, #4] - bl __muldi3 - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - adds r2, r2, r0 - adcs r3, r1 - str r2, [sp, #0x10] - str r3, [sp, #0x14] - mov r3, sl - subs r6, r6, r3 - asrs r0, r6, #1 - adds r2, r0, #0 - asrs r3, r6, #0x1f - adds r1, r5, #0 - adds r0, r4, #0 - bl __muldi3 - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - adds r2, r2, r0 - adcs r3, r1 - str r2, [sp, #0x10] - str r3, [sp, #0x14] - mov r3, r8 - mov r5, r9 - subs r3, r3, r5 - mov r8, r3 - asrs r0, r3, #1 - adds r2, r0, #0 - mov r7, r8 - asrs r3, r7, #0x1f - ldr r0, [sp, #8] - ldr r1, [sp, #0xc] - bl __muldi3 - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - adds r0, r0, r2 - adcs r1, r3 - lsls r3, r1, #0xc - lsrs r2, r0, #0x14 - adds r0, r3, #0 - orrs r0, r2 - add sp, #0x18 - pop {r3, r4, r5} - mov r8, r3 - mov r9, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - - THUMB_FUNC_END sub_80AC784 - - THUMB_FUNC_START sub_80AC844 -sub_80AC844: @ 0x080AC844 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, r9 - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - mov sl, r0 - adds r5, r1, #0 - adds r4, r2, #0 - ldr r0, [sp, #0x24] - mov r8, r0 - ldr r7, [sp, #0x28] - ldr r1, [sp, #0x2c] - mov r9, r1 - movs r0, #3 - ands r0, r3 - bl BG_GetMapBuffer - str r0, [sp] - lsls r4, r4, #5 - adds r4, r4, r5 - lsls r4, r4, #1 - add sl, r4 - mov r2, r8 - cmp r2, #0 - bge _080AC886 - add r9, r8 - lsls r0, r2, #1 - mov r1, sl - subs r1, r1, r0 - mov sl, r1 - movs r2, #0 - mov r8, r2 -_080AC886: - cmp r7, #0 - bge _080AC89A - ldr r0, [sp, #0x30] - adds r0, r0, r7 - str r0, [sp, #0x30] - lsls r0, r7, #6 - mov r1, sl - subs r1, r1, r0 - mov sl, r1 - movs r7, #0 -_080AC89A: - movs r1, #0 - cmp r7, #0x1f - bgt _080AC8F4 - ldr r2, [sp, #0x30] - cmp r1, r2 - bge _080AC8F4 -_080AC8A6: - movs r5, #0 - adds r4, r1, #1 - mov r0, r8 - cmp r0, #0x1f - bgt _080AC8E6 - cmp r5, r9 - bge _080AC8E6 - adds r0, r7, r1 - movs r2, #0x1f - mov ip, r2 - ands r0, r2 - lsls r6, r0, #5 - mov r2, r8 - lsls r0, r1, #6 - mov r1, sl - adds r3, r0, r1 -_080AC8C6: - adds r0, r2, #0 - mov r1, ip - ands r0, r1 - adds r0, r6, r0 - lsls r0, r0, #1 - ldr r1, [sp] - adds r0, r0, r1 - ldrh r1, [r3] - strh r1, [r0] - adds r2, #1 - adds r3, #2 - adds r5, #1 - cmp r2, #0x1f - bgt _080AC8E6 - cmp r5, r9 - blt _080AC8C6 -_080AC8E6: - adds r1, r4, #0 - adds r0, r7, r4 - cmp r0, #0x1f - bgt _080AC8F4 - ldr r2, [sp, #0x30] - cmp r4, r2 - blt _080AC8A6 -_080AC8F4: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov r9, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - - THUMB_FUNC_END sub_80AC844 - - THUMB_FUNC_START sub_80AC904 -sub_80AC904: @ 0x080AC904 - push {r4, r5, r6, lr} - movs r2, #0 - adds r4, r0, #0 - adds r4, #0x3c - movs r3, #0 - movs r6, #0xf0 - adds r1, r0, #0 - adds r1, #0x2c - movs r5, #0xa0 -_080AC916: - adds r0, r4, r2 - strb r3, [r0] - strb r3, [r1] - strb r3, [r1, #1] - strb r6, [r1, #2] - strb r5, [r1, #3] - adds r1, #4 - adds r2, #1 - cmp r2, #3 - ble _080AC916 - pop {r4, r5, r6} - pop {r0} - bx r0 - - THUMB_FUNC_END sub_80AC904 - - THUMB_FUNC_START sub_80AC930 -sub_80AC930: @ 0x080AC930 - push {r4, r5, r6, r7, lr} - sub sp, #4 - adds r6, r0, #0 - movs r7, #0 - adds r4, r6, #0 - adds r4, #0x2c -_080AC93C: - adds r0, r6, #0 - adds r0, #0x3c - adds r0, r0, r7 - ldrb r5, [r0] - movs r0, #1 - ands r0, r5 - cmp r0, #0 - beq _080AC9AA - lsls r0, r7, #1 - adds r1, r6, #0 - adds r1, #0x40 - adds r1, r1, r0 - movs r2, #0 - ldrsh r3, [r1, r2] - adds r1, r6, #0 - adds r1, #0x48 - adds r1, r1, r0 - movs r0, #0 - ldrsh r2, [r1, r0] - ldrb r0, [r4] - cmp r3, r0 - blt _080AC9AA - ldrb r0, [r4, #2] - cmp r3, r0 - bge _080AC9AA - ldrb r0, [r4, #1] - cmp r2, r0 - blt _080AC9AA - ldrb r0, [r4, #3] - cmp r2, r0 - bge _080AC9AA - movs r0, #2 - ands r0, r5 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - beq _080AC99C - adds r1, r3, #0 - subs r1, #0xc - movs r0, #0 - str r0, [sp] - movs r0, #3 - ldr r3, _080AC998 @ gUnknown_08A20B44 - bl PutSprite - b _080AC9AA - .align 2, 0 -_080AC998: .4byte gUnknown_08A20B44 -_080AC99C: - adds r1, r3, #0 - subs r1, #0xc - str r0, [sp] - movs r0, #3 - ldr r3, _080AC9BC @ gUnknown_08A20B3C - bl PutSprite -_080AC9AA: - adds r4, #4 - adds r7, #1 - cmp r7, #3 - ble _080AC93C - add sp, #4 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_080AC9BC: .4byte gUnknown_08A20B3C - - THUMB_FUNC_END sub_80AC930 - - THUMB_FUNC_START sub_80AC9C0 -sub_80AC9C0: @ 0x080AC9C0 - push {lr} - adds r1, r0, #0 - ldr r0, _080AC9D0 @ gUnknown_08A20B4C - bl Proc_Start - pop {r1} - bx r1 - .align 2, 0 -_080AC9D0: .4byte gUnknown_08A20B4C - - THUMB_FUNC_END sub_80AC9C0 - - THUMB_FUNC_START sub_80AC9D4 -sub_80AC9D4: @ 0x080AC9D4 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - adds r7, r1, #0 - mov r8, r2 - lsls r3, r3, #0x18 - lsrs r6, r3, #0x18 - ldr r0, _080ACA38 @ gUnknown_08A20B4C - bl Proc_Find - adds r4, r0, #0 - cmp r4, #0 - beq _080ACA2E - adds r1, r4, #0 - adds r1, #0x3c - adds r1, r1, r5 - movs r3, #1 - movs r0, #1 - strb r0, [r1] - lsls r2, r5, #1 - adds r0, r4, #0 - adds r0, #0x40 - adds r0, r0, r2 - strh r7, [r0] - adds r0, r4, #0 - adds r0, #0x48 - adds r0, r0, r2 - mov r2, r8 - strh r2, [r0] - adds r0, r6, #0 - orrs r0, r3 - strb r0, [r1] - movs r0, #2 - ands r0, r6 - cmp r0, #0 - beq _080ACA2E - ldr r0, _080ACA3C @ gUnknown_0859EDB0 - ldr r1, _080ACA40 @ 0x060100C0 - bl Decompress - ldr r0, _080ACA44 @ gUnknown_0859EDEC - ldr r1, _080ACA48 @ 0x060104C0 - bl Decompress -_080ACA2E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_080ACA38: .4byte gUnknown_08A20B4C -_080ACA3C: .4byte gUnknown_0859EDB0 -_080ACA40: .4byte 0x060100C0 -_080ACA44: .4byte gUnknown_0859EDEC -_080ACA48: .4byte 0x060104C0 - - THUMB_FUNC_END sub_80AC9D4 - - THUMB_FUNC_START sub_80ACA4C -sub_80ACA4C: @ 0x080ACA4C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - adds r7, r3, #0 - ldr r0, _080ACA80 @ gUnknown_08A20B4C - bl Proc_Find - adds r1, r0, #0 - cmp r1, #0 - beq _080ACA7A - lsls r0, r4, #2 - adds r1, r1, r0 - adds r0, r1, #0 - adds r0, #0x2c - strb r5, [r0] - adds r0, #1 - strb r6, [r0] - adds r0, #1 - strb r7, [r0] - adds r1, #0x2f - ldr r0, [sp, #0x14] - strb r0, [r1] -_080ACA7A: - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_080ACA80: .4byte gUnknown_08A20B4C - - THUMB_FUNC_END sub_80ACA4C - - THUMB_FUNC_START sub_80ACA84 -sub_80ACA84: @ 0x080ACA84 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080ACAA0 @ gUnknown_08A20B4C - bl Proc_Find - cmp r0, #0 - beq _080ACA9A - adds r0, #0x3c - adds r0, r0, r4 - movs r1, #0 - strb r1, [r0] -_080ACA9A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACAA0: .4byte gUnknown_08A20B4C - - THUMB_FUNC_END sub_80ACA84 - - THUMB_FUNC_START sub_80ACAA4 -sub_80ACAA4: @ 0x080ACAA4 - push {lr} - ldr r0, _080ACAC4 @ gUnknown_08A20B4C - bl Proc_Find - cmp r0, #0 - beq _080ACAC0 - adds r1, r0, #0 - adds r1, #0x3c - movs r2, #0 - adds r0, #0x43 -_080ACAB8: - strb r2, [r0] - subs r0, #1 - cmp r0, r1 - bge _080ACAB8 -_080ACAC0: - pop {r0} - bx r0 - .align 2, 0 -_080ACAC4: .4byte gUnknown_08A20B4C - - THUMB_FUNC_END sub_80ACAA4 - - THUMB_FUNC_START sub_80ACAC8 -sub_80ACAC8: @ 0x080ACAC8 - push {lr} - ldr r0, _080ACAE0 @ gUnknown_08A20B4C - bl Proc_Find - cmp r0, #0 - beq _080ACADA - movs r1, #1 - bl Proc_Goto -_080ACADA: - pop {r0} - bx r0 - .align 2, 0 -_080ACAE0: .4byte gUnknown_08A20B4C - - THUMB_FUNC_END sub_80ACAC8 - - THUMB_FUNC_START sub_80ACAE4 -sub_80ACAE4: @ 0x080ACAE4 - push {lr} - ldr r0, _080ACAFC @ gUnknown_08A20B4C - bl Proc_Find - cmp r0, #0 - beq _080ACAF6 - movs r1, #0 - bl Proc_Goto -_080ACAF6: - pop {r0} - bx r0 - .align 2, 0 -_080ACAFC: .4byte gUnknown_08A20B4C - - THUMB_FUNC_END sub_80ACAE4 - - THUMB_FUNC_START sub_80ACB00 -sub_80ACB00: @ 0x080ACB00 - push {lr} - ldr r0, _080ACB10 @ gUnknown_08A20B4C - bl Proc_Find - bl Proc_End - pop {r0} - bx r0 - .align 2, 0 -_080ACB10: .4byte gUnknown_08A20B4C - - THUMB_FUNC_END sub_80ACB00 - - THUMB_FUNC_START sub_80ACB14 -sub_80ACB14: @ 0x080ACB14 - movs r1, #0 - str r1, [r0, #0x2c] - adds r2, r0, #0 - adds r2, #0x54 - strh r1, [r2] - str r1, [r0, #0x4c] - str r1, [r0, #0x44] - str r1, [r0, #0x3c] - str r1, [r0, #0x34] - str r1, [r0, #0x50] - str r1, [r0, #0x48] - str r1, [r0, #0x40] - str r1, [r0, #0x38] - str r1, [r0, #0x30] - bx lr - - THUMB_FUNC_END sub_80ACB14 - - THUMB_FUNC_START sub_80ACB34 -sub_80ACB34: @ 0x080ACB34 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, r9 - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r5, r0, #0 - ldr r7, [r5, #0x34] - ldr r0, [r5, #0x3c] - mov r8, r0 - ldr r1, [r5, #0x38] - mov r9, r1 - ldr r2, [r5, #0x40] - mov sl, r2 - ldr r0, [r5, #0x44] - adds r0, #1 - str r0, [r5, #0x44] - ldr r0, [r5, #0x48] - adds r0, #1 - str r0, [r5, #0x48] - movs r6, #0 -_080ACB5E: - lsls r3, r6, #2 - adds r0, r5, #0 - adds r0, #0x4c - adds r2, r0, r3 - ldr r0, [r2] - adds r4, r5, #0 - adds r4, #0x44 - cmp r0, #0 - beq _080ACB7E - adds r0, r4, r3 - ldr r1, [r0] - adds r1, #3 - str r1, [r0] - ldr r0, [r2] - adds r0, #1 - str r0, [r2] -_080ACB7E: - adds r1, r4, r3 - ldr r0, [r1] - asrs r0, r0, #3 - cmp r0, #5 - ble _080ACB8C - movs r0, #0 - str r0, [r1] -_080ACB8C: - adds r6, #1 - cmp r6, #1 - ble _080ACB5E - ldr r3, [r5, #0x2c] - cmp r3, #0 - bne _080ACC20 - ldr r2, [r5, #0x4c] - cmp r2, #0 - beq _080ACBAC - asrs r2, r2, #3 - subs r1, r2, #4 - ldr r0, [r5, #0x34] - adds r7, r0, r1 - cmp r2, #4 - bne _080ACBAC - str r3, [r5, #0x4c] -_080ACBAC: - ldr r2, [r5, #0x50] - cmp r2, #0 - beq _080ACBC4 - asrs r2, r2, #3 - subs r1, r2, #4 - ldr r0, [r5, #0x38] - subs r0, r0, r1 - mov r9, r0 - cmp r2, #4 - bne _080ACBC4 - movs r0, #0 - str r0, [r5, #0x50] -_080ACBC4: - ldr r0, [r5, #0x30] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _080ACBEE - ldr r1, _080ACCD4 @ 0x000001FF - ands r1, r7 - movs r2, #0xff - mov r0, r8 - ands r2, r0 - ldr r3, _080ACCD8 @ gUnknown_08A20B7C - adds r4, r5, #0 - adds r4, #0x54 - ldr r0, [r5, #0x44] - asrs r0, r0, #3 - ldrh r4, [r4] - adds r0, r0, r4 - str r0, [sp] - movs r0, #0xd - bl PutSpriteExt -_080ACBEE: - ldr r0, [r5, #0x30] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _080ACC20 - ldr r1, _080ACCD4 @ 0x000001FF - mov r2, r9 - ands r1, r2 - movs r0, #0x80 - lsls r0, r0, #5 - adds r1, r1, r0 - movs r2, #0xff - mov r0, sl - ands r2, r0 - ldr r3, _080ACCD8 @ gUnknown_08A20B7C - adds r4, r5, #0 - adds r4, #0x54 - ldr r0, [r5, #0x48] - asrs r0, r0, #3 - ldrh r4, [r4] - adds r0, r0, r4 - str r0, [sp] - movs r0, #0xd - bl PutSpriteExt -_080ACC20: - ldr r0, [r5, #0x2c] - cmp r0, #1 - bne _080ACCC2 - ldr r2, [r5, #0x4c] - cmp r2, #0 - beq _080ACC3E - asrs r2, r2, #3 - subs r1, r2, #4 - ldr r0, [r5, #0x3c] - adds r0, r0, r1 - mov r8, r0 - cmp r2, #4 - bne _080ACC3E - movs r0, #0 - str r0, [r5, #0x4c] -_080ACC3E: - ldr r2, [r5, #0x50] - cmp r2, #0 - beq _080ACC56 - asrs r2, r2, #3 - subs r1, r2, #4 - ldr r0, [r5, #0x40] - subs r0, r0, r1 - mov sl, r0 - cmp r2, #4 - bne _080ACC56 - movs r0, #0 - str r0, [r5, #0x50] -_080ACC56: - ldr r0, [r5, #0x30] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _080ACC88 - ldr r0, _080ACCD4 @ 0x000001FF - ands r7, r0 - movs r0, #0xff - mov r1, r8 - ands r1, r0 - mov r8, r1 - ldr r3, _080ACCDC @ gUnknown_08A20B8A - adds r1, r5, #0 - adds r1, #0x54 - ldr r0, [r5, #0x44] - asrs r0, r0, #3 - lsls r0, r0, #1 - ldrh r1, [r1] - adds r0, r0, r1 - str r0, [sp] - movs r0, #0xd - adds r1, r7, #0 - mov r2, r8 - bl PutSpriteExt -_080ACC88: - ldr r0, [r5, #0x30] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _080ACCC2 - ldr r0, _080ACCD4 @ 0x000001FF - mov r2, r9 - ands r2, r0 - mov r9, r2 - movs r1, #0x80 - lsls r1, r1, #6 - add r1, r9 - movs r0, #0xff - mov r2, sl - ands r2, r0 - mov sl, r2 - ldr r3, _080ACCDC @ gUnknown_08A20B8A - adds r2, r5, #0 - adds r2, #0x54 - ldr r0, [r5, #0x48] - asrs r0, r0, #3 - lsls r0, r0, #1 - ldrh r2, [r2] - adds r0, r0, r2 - str r0, [sp] - movs r0, #0xd - mov r2, sl - bl PutSpriteExt -_080ACCC2: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov r9, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_080ACCD4: .4byte 0x000001FF -_080ACCD8: .4byte gUnknown_08A20B7C -_080ACCDC: .4byte gUnknown_08A20B8A - - THUMB_FUNC_END sub_80ACB34 - - THUMB_FUNC_START sub_80ACCE0 -sub_80ACCE0: @ 0x080ACCE0 - push {lr} - adds r1, r0, #0 - ldr r0, _080ACCF0 @ gUnknown_08A20B94 - bl Proc_Start - pop {r1} - bx r1 - .align 2, 0 -_080ACCF0: .4byte gUnknown_08A20B94 - - THUMB_FUNC_END sub_80ACCE0 - - THUMB_FUNC_START sub_80ACCF4 -sub_80ACCF4: @ 0x080ACCF4 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r4, r1, #0 - adds r7, r2, #0 - ldr r0, _080ACD4C @ gUnknown_08A20B94 - bl Proc_Find - adds r5, r0, #0 - cmp r5, #0 - beq _080ACD44 - ldr r0, _080ACD50 @ Pal_MapBattleInfoNum - adds r1, r7, #0 - adds r1, #0x10 - lsls r1, r1, #5 - movs r2, #0x20 - bl CopyToPaletteBuffer - cmp r6, #0 - bne _080ACD24 - ldr r0, _080ACD54 @ gUnknown_08A1C7D8 - ldr r2, _080ACD58 @ 0x06010000 - adds r1, r4, r2 - bl Decompress -_080ACD24: - cmp r6, #1 - bne _080ACD32 - ldr r0, _080ACD5C @ gUnknown_08A1C704 - ldr r2, _080ACD58 @ 0x06010000 - adds r1, r4, r2 - bl Decompress -_080ACD32: - asrs r1, r4, #5 - movs r2, #0xf - ands r2, r7 - lsls r2, r2, #0xc - adds r1, r1, r2 - adds r2, r5, #0 - adds r2, #0x54 - strh r1, [r2] - str r6, [r5, #0x2c] -_080ACD44: - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - .align 2, 0 -_080ACD4C: .4byte gUnknown_08A20B94 -_080ACD50: .4byte Pal_MapBattleInfoNum -_080ACD54: .4byte gUnknown_08A1C7D8 -_080ACD58: .4byte 0x06010000 -_080ACD5C: .4byte gUnknown_08A1C704 - - THUMB_FUNC_END sub_80ACCF4 - - THUMB_FUNC_START sub_80ACD60 -sub_80ACD60: @ 0x080ACD60 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080ACD78 @ gUnknown_08A20B94 - bl Proc_Find - cmp r0, #0 - beq _080ACD70 - str r4, [r0, #0x30] -_080ACD70: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACD78: .4byte gUnknown_08A20B94 - - THUMB_FUNC_END sub_80ACD60 - - THUMB_FUNC_START sub_80ACD7C -sub_80ACD7C: @ 0x080ACD7C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - adds r7, r3, #0 - ldr r0, _080ACDA0 @ gUnknown_08A20B94 - bl Proc_Find - cmp r0, #0 - beq _080ACD98 - str r4, [r0, #0x34] - str r5, [r0, #0x3c] - str r6, [r0, #0x38] - str r7, [r0, #0x40] -_080ACD98: - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_080ACDA0: .4byte gUnknown_08A20B94 - - THUMB_FUNC_END sub_80ACD7C - - THUMB_FUNC_START sub_80ACDA4 -sub_80ACDA4: @ 0x080ACDA4 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080ACDD8 @ gUnknown_08A20B94 - bl Proc_Find - adds r1, r0, #0 - cmp r1, #0 - beq _080ACDD2 - cmp r4, #0 - bne _080ACDBC - movs r0, #1 - str r0, [r1, #0x4c] -_080ACDBC: - cmp r4, #1 - bne _080ACDC2 - str r4, [r1, #0x50] -_080ACDC2: - cmp r4, #2 - bne _080ACDCA - movs r0, #1 - str r0, [r1, #0x4c] -_080ACDCA: - cmp r4, #3 - bne _080ACDD2 - movs r0, #1 - str r0, [r1, #0x50] -_080ACDD2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACDD8: .4byte gUnknown_08A20B94 - - THUMB_FUNC_END sub_80ACDA4 - - THUMB_FUNC_START sub_80ACDDC -sub_80ACDDC: @ 0x080ACDDC - push {lr} - ldr r0, _080ACDEC @ gUnknown_08A20B94 - bl Proc_Find - bl Proc_End - pop {r0} - bx r0 - .align 2, 0 -_080ACDEC: .4byte gUnknown_08A20B94 - - THUMB_FUNC_END sub_80ACDDC - THUMB_FUNC_START sub_80ACDF0 sub_80ACDF0: @ 0x080ACDF0 movs r1, #0 diff --git a/include/functions.h b/include/functions.h index 286859df4..0910539a0 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1212,11 +1212,11 @@ void StartSupportScreen(ProcPtr); // ??? sub_80AC6AC(???); // ??? sub_80AC784(???); -void sub_80AC844(void*, int, int, int, int, int, int, int); +void sub_80AC844(u16 *, int, int, int, int, int, int, int); // ??? sub_80AC904(???); // ??? sub_80AC930(???); -void sub_80AC9C0(ProcPtr); -void sub_80AC9D4(int, int, int, int); +ProcPtr sub_80AC9C0(ProcPtr); +void sub_80AC9D4(int, int, int, u8); void sub_80ACA4C(int, int, int, int, int); void sub_80ACA84(u32 a); void sub_80ACAA4(void); @@ -1225,8 +1225,8 @@ void sub_80ACAE4(void); void sub_80ACB00(void); // ??? sub_80ACB14(???); // ??? sub_80ACB34(???); -void sub_80ACCE0(ProcPtr); -void sub_80ACCF4(int, int, int); +ProcPtr sub_80ACCE0(ProcPtr); +ProcPtr sub_80ACCF4(int, int, int); void sub_80ACD60(int mask); void sub_80ACD7C(int, int, int, int); void sub_80ACDA4(int); diff --git a/include/prepscreen.h b/include/prepscreen.h index 025cd24fa..6ab7f1cde 100644 --- a/include/prepscreen.h +++ b/include/prepscreen.h @@ -330,7 +330,7 @@ extern u8 gUnknown_08A1BBD0[]; // tsa? // extern ??? gUnknown_08A1BD40 // extern ??? gUnknown_08A1BD60 extern u8 gUnknown_08A1C704[]; // arrow gfx -// extern ??? gUnknown_08A1C7D8 +extern u8 gUnknown_08A1C7D8[]; // extern ??? gUnknown_08A1C8B4 // extern ??? gUnknown_08A1CD68 // extern ??? gUnknown_08A1CDC4 diff --git a/include/variables.h b/include/variables.h index b762f65bc..7d0c1de0c 100644 --- a/include/variables.h +++ b/include/variables.h @@ -610,8 +610,8 @@ extern struct ProcCmd CONST_DATA gProcScr_UpdateTraps[]; // extern ??? gUnknown_0859DBA0 extern u16 gGfx_MiscUiGraphics[]; extern u16 gPal_MiscUiGraphics[]; -// extern ??? gUnknown_0859EDB0 -// extern ??? gUnknown_0859EDEC +extern u8 gUnknown_0859EDB0[]; +extern u8 gUnknown_0859EDEC[]; // extern ??? gUnknown_0859EE20 // extern ??? gUnknown_0859EE40 // extern ??? gUnknown_0859EE60 diff --git a/ldscript.txt b/ldscript.txt index d2c568a75..f64ae86a9 100644 --- a/ldscript.txt +++ b/ldscript.txt @@ -258,7 +258,10 @@ SECTIONS asm/savedraw.o(.text); src/savedrawcursor.o(.text); src/difficultymenu.o(.text); - asm/code_80A882C.o(.text); + asm/code_80AC6AC.o(.text); + src/cursor_hand.o(.text); + src/spinning_arrow.o(.text); + asm/code_80ACDF0.o(.text); src/soundroom.o(.text); src/extramenu_unk.o(.text); src/bonusclaim.o(.text); diff --git a/src/cursor_hand.c b/src/cursor_hand.c new file mode 100644 index 000000000..d829d8299 --- /dev/null +++ b/src/cursor_hand.c @@ -0,0 +1,229 @@ +#include "global.h" + +#include "bmlib.h" +#include "ctc.h" +#include "hardware.h" + +struct Unk2C +{ + /* 00 */ u8 a; + /* 01 */ u8 b; + /* 02 */ u8 c; + /* 03 */ u8 d; +}; + +struct CursorHandProc +{ + /* 00 */ PROC_HEADER; + /* 29 */ STRUCT_PAD(0x29, 0x2c); + /* 2C */ struct Unk2C unk_2c[4]; + /* 3C */ u8 unk_3c[4]; + /* 40 */ s16 unk_40[4]; + /* 48 */ s16 unk_48[4]; +}; + +extern u16 gUnknown_08A20B3C[]; +extern u16 gUnknown_08A20B44[]; + +//! FE8U = 0x080AC844 +void sub_80AC844(u16 * buf, int xBase, int yBase, int bgIndex, int xOffset, int yOffset, int xMax, int yMax) +{ + int ix; + int iy; + + u16 * bgBuf = BG_GetMapBuffer(bgIndex & 3); + buf = buf + TILEMAP_INDEX(xBase, yBase); + + if (xOffset < 0) + { + xMax = xMax + xOffset; + buf = buf - xOffset; + xOffset = 0; + } + + if (yOffset < 0) + { + yMax = yMax + yOffset; + buf = buf - yOffset * 0x20; + yOffset = 0; + } + + for (iy = 0; yOffset + iy < 0x20 && iy < yMax; iy++) + { + for (ix = 0; xOffset + ix < 0x20 && ix < xMax; ix++) + { + bgBuf[TILEMAP_INDEX((xOffset + ix) & 0x1f, (yOffset + iy) & 0x1f)] = buf[TILEMAP_INDEX(ix, iy)]; + } + } + + return; +} + +//! FE8U = 0x080AC904 +void sub_80AC904(struct CursorHandProc * proc) +{ + int i; + + for (i = 0; i < 4; i++) + { + proc->unk_3c[i] = 0; + + proc->unk_2c[i].a = 0; + proc->unk_2c[i].b = 0; + proc->unk_2c[i].c = DISPLAY_WIDTH; + proc->unk_2c[i].d = DISPLAY_HEIGHT; + } + + return; +} + +//! FE8U = 0x080AC930 +void sub_80AC930(struct CursorHandProc * proc) +{ + int i; + + for (i = 0; i < 4; i++) + { + int x; + int y; + + if (!(proc->unk_3c[i] & 1)) + { + continue; + } + + x = proc->unk_40[i]; + y = proc->unk_48[i]; + + if (x < proc->unk_2c[i].a || x >= proc->unk_2c[i].c) + { + continue; + } + + if (y < proc->unk_2c[i].b || y >= proc->unk_2c[i].d) + { + continue; + } + + if (proc->unk_3c[i] & 2) + { + PutSprite(3, proc->unk_40[i] - 12, proc->unk_48[i], gUnknown_08A20B44, 0); + } + else + { + PutSprite(3, proc->unk_40[i] - 12, proc->unk_48[i], gUnknown_08A20B3C, 0); + } + } + + return; +} + +extern struct ProcCmd gUnknown_08A20B4C[]; + +//! FE8U = 0x080AC9C0 +ProcPtr sub_80AC9C0(ProcPtr parent) +{ + return Proc_Start(gUnknown_08A20B4C, parent); +} + +//! FE8U = 0x080AC9D4 +void sub_80AC9D4(int index, int x, int y, u8 flags) +{ + struct CursorHandProc * proc = Proc_Find(gUnknown_08A20B4C); + + if (proc != NULL) + { + proc->unk_3c[index] = 1; + proc->unk_40[index] = x; + proc->unk_48[index] = y; + proc->unk_3c[index] = flags | 1; + + if (flags & 2) + { + Decompress(gUnknown_0859EDB0, (void *)0x060100C0); + Decompress(gUnknown_0859EDEC, (void *)0x060104C0); + } + } + + return; +} + +//! FE8U = 0x080ACA4C +void sub_80ACA4C(int index, int a, int b, int c, int d) +{ + struct CursorHandProc * proc = Proc_Find(gUnknown_08A20B4C); + + if (proc != NULL) + { + proc->unk_2c[index].a = a; + proc->unk_2c[index].b = b; + proc->unk_2c[index].c = c; + proc->unk_2c[index].d = d; + } + + return; +} + +//! FE8U = 0x080ACA84 +void sub_80ACA84(u32 index) +{ + struct CursorHandProc * proc = Proc_Find(gUnknown_08A20B4C); + + if (proc != NULL) + { + proc->unk_3c[index] = 0; + } + + return; +} + +//! FE8U = 0x080ACAA4 +void sub_80ACAA4(void) +{ + struct CursorHandProc * proc = Proc_Find(gUnknown_08A20B4C); + + if (proc != NULL) + { + int i; + + for (i = 0; i < 8; i++) + { + proc->unk_3c[i] = 0; + } + } + + return; +} + +//! FE8U = 0x080ACAC8 +void sub_80ACAC8(void) +{ + struct CursorHandProc * proc = Proc_Find(gUnknown_08A20B4C); + + if (proc != NULL) + { + Proc_Goto(proc, 1); + } + + return; +} + +//! FE8U = 0x080ACAE4 +void sub_80ACAE4(void) +{ + struct CursorHandProc * proc = Proc_Find(gUnknown_08A20B4C); + + if (proc != NULL) + { + Proc_Goto(proc, 0); + } + + return; +} + +//! FE8U = 0x080ACB00 +void sub_80ACB00(void) +{ + Proc_End(Proc_Find(gUnknown_08A20B4C)); + return; +} diff --git a/src/prep_itemlist.c b/src/prep_itemlist.c index 0dcca150e..9d1e87f4f 100644 --- a/src/prep_itemlist.c +++ b/src/prep_itemlist.c @@ -41,10 +41,6 @@ void sub_809D300(void*, void*, int, void*); void sub_809D418(u16*, int); void sub_809D47C(struct Text*, u16*, int, struct Unit*); void sub_809D8D4(u16*, int, int); -void sub_80ACD7C(int, int, int, int); -void sub_80ACDA4(int); -void sub_80ACCE0(ProcPtr); -void sub_80ACCF4(int, int, int); void StoreConvoyWeaponIconGraphics(int, int); diff --git a/src/soundroom.c b/src/soundroom.c index 29f49042c..be2d03be0 100644 --- a/src/soundroom.c +++ b/src/soundroom.c @@ -87,9 +87,6 @@ void sub_80AFF30(void); void DrawSoundRoomSongTitle(int); ProcPtr DrawSoundRoomSprites(ProcPtr); -// TODO: Move elsewhere? -void sub_80AC844(void*, int, int, int, int, int, int, int); - // TODO: Decompile these next s8 sub_80AECEC(struct SoundRoomProc*, int); void sub_80AED64(struct SoundRoomProc*); diff --git a/src/spinning_arrow.c b/src/spinning_arrow.c new file mode 100644 index 000000000..a8fd64062 --- /dev/null +++ b/src/spinning_arrow.c @@ -0,0 +1,253 @@ +#include "global.h" + +#include "ctc.h" +#include "hardware.h" +#include "bmlib.h" +#include "prepscreen.h" // for graphics / palette declarations + +struct SpinningArrowProc +{ + /* 00 */ PROC_HEADER; + /* 2C */ int unk_2c; + /* 30 */ int unk_30; + /* 34 */ int unk_34[2]; + /* 3C */ int unk_3c[2]; + /* 44 */ int unk_44[2]; + /* 4C */ int unk_4c[2]; + /* 54 */ u16 unk_54; +}; + +//! FE8U = 0x080ACB14 +void sub_80ACB14(struct SpinningArrowProc * proc) +{ + proc->unk_2c = 0; + proc->unk_54 = 0; + + proc->unk_4c[0] = 0; + proc->unk_44[0] = 0; + proc->unk_3c[0] = 0; + proc->unk_34[0] = 0; + + proc->unk_4c[1] = 0; + proc->unk_44[1] = 0; + proc->unk_3c[1] = 0; + proc->unk_34[1] = 0; + + proc->unk_30 = 0; + + return; +} + +extern u16 gUnknown_08A20B7C[]; +extern u16 gUnknown_08A20B8A[]; + +//! FE8U = 0x080ACB34 +void sub_80ACB34(struct SpinningArrowProc * proc) +{ + int i; + + int xOam1_a = proc->unk_34[0]; + int yOam0_a = proc->unk_3c[0]; + + int xOam1_b = proc->unk_34[1]; + int yOam0_b = proc->unk_3c[1]; + + proc->unk_44[0]++; + proc->unk_44[1]++; + + for (i = 0; i < 2; i++) + { + if (proc->unk_4c[i] != 0) + { + proc->unk_44[i] += 3; + proc->unk_4c[i]++; + } + + if ((proc->unk_44[i] >> 3) > 5) + { + proc->unk_44[i] = 0; + } + } + + if (proc->unk_2c == 0) + { + if (proc->unk_4c[0] != 0) + { + int r1 = (proc->unk_4c[0] >> 3) - 4; + xOam1_a = proc->unk_34[0] + r1; + if ((proc->unk_4c[0] >> 3) == 4) + { + proc->unk_4c[0] = 0; + } + } + + if (proc->unk_4c[1] != 0) + { + int r1 = (proc->unk_4c[1] >> 3) - 4; + xOam1_b = proc->unk_34[1] - r1; + if ((proc->unk_4c[1] >> 3) == 4) + { + proc->unk_4c[1] = 0; + } + } + + if ((proc->unk_30 & 1) != 0) + { + PutSpriteExt( + 0xd, OAM1_X(xOam1_a), OAM0_Y(yOam0_a), gUnknown_08A20B7C, proc->unk_54 + (proc->unk_44[0] >> 3)); + } + + if ((proc->unk_30 & 2) != 0) + { + PutSpriteExt( + 0xd, OAM1_X(xOam1_b) + OAM1_HFLIP, OAM0_Y(yOam0_b), gUnknown_08A20B7C, + proc->unk_54 + (proc->unk_44[1] >> 3)); + } + } + + if (proc->unk_2c == 1) + { + if (proc->unk_4c[0] != 0) + { + int r1 = (proc->unk_4c[0] >> 3) - 4; + yOam0_a = proc->unk_3c[0] + r1; + if ((proc->unk_4c[0] >> 3) == 4) + { + proc->unk_4c[0] = 0; + } + } + + if (proc->unk_4c[1] != 0) + { + int r1 = (proc->unk_4c[1] >> 3) - 4; + yOam0_b = proc->unk_3c[1] - r1; + if ((proc->unk_4c[1] >> 3) == 4) + { + proc->unk_4c[1] = 0; + } + } + + if (proc->unk_30 & 1) + { + PutSpriteExt( + 0xd, OAM1_X(xOam1_a), OAM0_Y(yOam0_a), gUnknown_08A20B8A, proc->unk_54 + (proc->unk_44[0] >> 3) * 2); + } + + if (proc->unk_30 & 2) + { + PutSpriteExt( + 0xd, OAM1_X(xOam1_b) + OAM1_VFLIP, OAM0_Y(yOam0_b), gUnknown_08A20B8A, + proc->unk_54 + (proc->unk_44[1] >> 3) * 2); + } + } + + return; +} + +extern struct ProcCmd gUnknown_08A20B94[]; + +//! FE8U = 0x080ACCE0 +ProcPtr sub_80ACCE0(ProcPtr parent) +{ + return Proc_Start(gUnknown_08A20B94, parent); +} + +//! FE8U = 0x080ACCF4 +ProcPtr sub_80ACCF4(int kind, int chr, int palId) +{ + int oam2Chr; + int oam2Pal; + + struct SpinningArrowProc * proc = Proc_Find(gUnknown_08A20B94); + + if (proc != NULL) + { + ApplyPalette(Pal_MapBattleInfoNum, palId + 0x10); + + if (kind == 0) + { + Decompress(gUnknown_08A1C7D8, (void *)(chr + 0x06010000)); + } + + if (kind == 1) + { + Decompress(gUnknown_08A1C704, (void *)(chr + 0x06010000)); + } + + oam2Chr = chr >> 5; + oam2Pal = OAM2_PAL(palId); + proc->unk_54 = oam2Chr + oam2Pal; + + proc->unk_2c = kind; + } + + // return proc; +} + +//! FE8U = 0x080ACD60 +void sub_80ACD60(int flags) +{ + struct SpinningArrowProc * proc = Proc_Find(gUnknown_08A20B94); + + if (proc != NULL) + { + proc->unk_30 = flags; + } + + return; +} + +//! FE8U = 0x080ACD7C +void sub_80ACD7C(int x1, int y1, int x2, int y2) +{ + struct SpinningArrowProc * proc = Proc_Find(gUnknown_08A20B94); + + if (proc != NULL) + { + proc->unk_34[0] = x1; + proc->unk_3c[0] = y1; + + proc->unk_34[1] = x2; + proc->unk_3c[1] = y2; + } + + return; +} + +//! FE8U = 0x080ACDA4 +void sub_80ACDA4(int kind) +{ + struct SpinningArrowProc * proc = Proc_Find(gUnknown_08A20B94); + + if (proc != NULL) + { + if (kind == 0) + { + proc->unk_4c[0] = 1; + } + + if (kind == 1) + { + proc->unk_4c[1] = 1; + } + + if (kind == 2) + { + proc->unk_4c[0] = 1; + } + + if (kind == 3) + { + proc->unk_4c[1] = 1; + } + } + + return; +} + +//! FE8U = 0x080ACDDC +void sub_80ACDDC(void) +{ + Proc_End(Proc_Find(gUnknown_08A20B94)); + return; +}