diff options
author | Diegoisawesome <Diegoisawesome@users.noreply.github.com> | 2016-10-29 18:25:42 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-10-29 16:25:42 -0700 |
commit | ad7aa68d9b9b5bc388f1b391dd4754889c29e3a9 (patch) | |
tree | 71c814907ee3dd9d8e89b1913a19b5cd451b8b47 | |
parent | ff71446e684593266418b99e6a22ae3141fbfa73 (diff) |
(Almost) finished menu_cursor.c (#77)
-rw-r--r-- | asm/menu_cursor.s | 1118 | ||||
-rw-r--r-- | data/data2.s | 66 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/menu_cursor.c | 610 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
5 files changed, 645 insertions, 1153 deletions
diff --git a/asm/menu_cursor.s b/asm/menu_cursor.s deleted file mode 100644 index 3ae01310d..000000000 --- a/asm/menu_cursor.s +++ /dev/null @@ -1,1118 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_814A590 -sub_814A590: @ 814A590 - ldr r0, _0814A5AC @ =gUnknown_0203A3D0 - movs r1, 0x40 - strb r1, [r0] - ldr r0, _0814A5B0 @ =gUnknown_0203A3D1 - strb r1, [r0] - ldr r0, _0814A5B4 @ =gUnknown_0203A3D2 - strb r1, [r0] - ldr r0, _0814A5B8 @ =gUnknown_0203A3D3 - movs r1, 0 - strb r1, [r0] - ldr r0, _0814A5BC @ =gUnknown_0203A3D4 - strb r1, [r0] - bx lr - .align 2, 0 -_0814A5AC: .4byte gUnknown_0203A3D0 -_0814A5B0: .4byte gUnknown_0203A3D1 -_0814A5B4: .4byte gUnknown_0203A3D2 -_0814A5B8: .4byte gUnknown_0203A3D3 -_0814A5BC: .4byte gUnknown_0203A3D4 - thumb_func_end sub_814A590 - - thumb_func_start sub_814A5C0 -sub_814A5C0: @ 814A5C0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 24 - lsrs r5, r2, 24 - lsls r3, 16 - lsrs r7, r3, 16 - lsls r4, 24 - lsrs r4, 24 - mov r9, r4 - ldr r0, _0814A678 @ =gUnknown_0203A3D0 - ldrb r0, [r0] - cmp r0, 0x40 - bne _0814A5F2 - ldr r0, _0814A67C @ =gUnknown_0203A3D1 - ldrb r0, [r0] - cmp r0, 0x40 - beq _0814A5F6 -_0814A5F2: - bl sub_814A7FC -_0814A5F6: - movs r4, 0x1 - ldr r0, _0814A680 @ =0x0000ffff - cmp r6, r0 - bne _0814A61C - ldr r1, _0814A684 @ =gUnknown_0203A360 - movs r0, 0xF - ands r0, r5 - lsls r0, 1 - adds r0, r1 - strh r7, [r0] - ldr r0, _0814A688 @ =gUnknown_0842F240 - bl LoadSpritePalette - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0814A61C - ldr r6, _0814A68C @ =0x0000fff0 - movs r4, 0 -_0814A61C: - movs r7, 0xF - adds r0, r5, 0 - ands r0, r7 - lsls r0, 3 - ldr r1, _0814A690 @ =gUnknown_0842F140 - adds r0, r1 - bl LoadSpriteSheetDeferred - lsls r0, r4, 1 - adds r0, r4 - lsls r0, 3 - ldr r4, _0814A694 @ =gSpriteTemplate_842F250 - adds r0, r4 - movs r1, 0 - movs r2, 0xA0 - mov r3, r8 - bl CreateSprite - ldr r5, _0814A678 @ =gUnknown_0203A3D0 - strb r0, [r5] - adds r4, 0x30 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0xA0 - mov r3, r8 - bl CreateSprite - ldr r1, _0814A67C @ =gUnknown_0203A3D1 - strb r0, [r1] - ldrb r0, [r5] - cmp r0, 0x40 - beq _0814A6AE - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A698 @ =gSprites - adds r4, r0, r1 - ldr r0, _0814A680 @ =0x0000ffff - cmp r6, r0 - bne _0814A69C - ldrb r1, [r4, 0x5] - adds r0, r7, 0 - ands r0, r1 - strb r0, [r4, 0x5] - b _0814A6AE - .align 2, 0 -_0814A678: .4byte gUnknown_0203A3D0 -_0814A67C: .4byte gUnknown_0203A3D1 -_0814A680: .4byte 0x0000ffff -_0814A684: .4byte gUnknown_0203A360 -_0814A688: .4byte gUnknown_0842F240 -_0814A68C: .4byte 0x0000fff0 -_0814A690: .4byte gUnknown_0842F140 -_0814A694: .4byte gSpriteTemplate_842F250 -_0814A698: .4byte gSprites -_0814A69C: - adds r0, r6, 0 - bl IndexOfSpritePaletteTag - lsls r0, 4 - ldrb r2, [r4, 0x5] - adds r1, r7, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x5] -_0814A6AE: - ldr r1, _0814A6D4 @ =gUnknown_0203A3D1 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814A72C - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A6D8 @ =gSprites - adds r4, r0, r1 - ldr r0, _0814A6DC @ =0x0000ffff - cmp r6, r0 - bne _0814A6E0 - ldrb r1, [r4, 0x5] - movs r0, 0xF - ands r0, r1 - strb r0, [r4, 0x5] - b _0814A6F2 - .align 2, 0 -_0814A6D4: .4byte gUnknown_0203A3D1 -_0814A6D8: .4byte gSprites -_0814A6DC: .4byte 0x0000ffff -_0814A6E0: - adds r0, r6, 0 - bl IndexOfSpritePaletteTag - lsls r0, 4 - ldrb r2, [r4, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x5] -_0814A6F2: - movs r3, 0x80 - lsls r3, 19 - ldrh r1, [r3] - movs r0, 0xC0 - lsls r0, 7 - ands r0, r1 - cmp r0, 0 - bne _0814A70C - ldr r0, _0814A744 @ =REG_WINOUT - ldrb r1, [r0] - movs r2, 0x1F - orrs r1, r2 - strb r1, [r0] -_0814A70C: - ldr r1, _0814A748 @ =gUnknown_0203A3D3 - ldrh r0, [r3] - lsrs r0, 15 - strb r0, [r1] - ldr r1, _0814A74C @ =gUnknown_0203A3D4 - ldr r2, _0814A750 @ =0x0400004b - ldrb r0, [r2] - strb r0, [r1] - ldrh r0, [r3] - movs r4, 0x80 - lsls r4, 8 - adds r1, r4, 0 - orrs r0, r1 - strh r0, [r3] - movs r0, 0x10 - strb r0, [r2] -_0814A72C: - mov r0, r9 - bl sub_814A958 - ldr r0, _0814A754 @ =gUnknown_0203A3D0 - ldrb r0, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0814A744: .4byte REG_WINOUT -_0814A748: .4byte gUnknown_0203A3D3 -_0814A74C: .4byte gUnknown_0203A3D4 -_0814A750: .4byte 0x0400004b -_0814A754: .4byte gUnknown_0203A3D0 - thumb_func_end sub_814A5C0 - - thumb_func_start sub_814A758 -sub_814A758: @ 814A758 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp] - movs r1, 0 - movs r3, 0 - bl sub_814A5C0 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r4, 0x40 - beq _0814A79A - ldr r0, _0814A7A4 @ =gUnknown_0203A3D0 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0814A7A8 @ =gSprites - adds r1, r0 - lsls r3, r5, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] -_0814A79A: - adds r0, r4, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0814A7A4: .4byte gUnknown_0203A3D0 -_0814A7A8: .4byte gSprites - thumb_func_end sub_814A758 - - thumb_func_start unref_sub_814A7AC -unref_sub_814A7AC: @ 814A7AC - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r7, r2, 24 - movs r3, 0 - movs r2, 0xF - movs r1, 0 - ldr r6, _0814A7F8 @ =gPlttBufferUnfaded - movs r5, 0xF -_0814A7C6: - lsls r0, r1, 1 - adds r0, r6 - ldrh r0, [r0] - cmp r0, r4 - bne _0814A7DA - lsrs r0, r1, 4 - lsls r0, 24 - lsrs r3, r0, 24 - adds r2, r1, 0 - ands r2, r5 -_0814A7DA: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0xFF - bls _0814A7C6 - mov r0, r12 - adds r1, r3, 0 - adds r3, r7, 0 - bl sub_814A758 - lsls r0, 24 - lsrs r0, 24 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0814A7F8: .4byte gPlttBufferUnfaded - thumb_func_end unref_sub_814A7AC - - thumb_func_start sub_814A7FC -sub_814A7FC: @ 814A7FC - push {r4,lr} - ldr r4, _0814A860 @ =gUnknown_0203A3D0 - ldrb r0, [r4] - cmp r0, 0x40 - beq _0814A820 - ldr r0, _0814A864 @ =gUnknown_0842F140 - bl LoadTilesForSpriteSheet - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A868 @ =gSprites - adds r0, r1 - bl DestroySpriteAndFreeResources - movs r0, 0x40 - strb r0, [r4] -_0814A820: - ldr r4, _0814A86C @ =gUnknown_0203A3D1 - ldrb r0, [r4] - cmp r0, 0x40 - beq _0814A858 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A868 @ =gSprites - adds r0, r1 - bl DestroySpriteAndFreeResources - movs r0, 0x40 - strb r0, [r4] - ldr r0, _0814A870 @ =gUnknown_0203A3D3 - ldrb r0, [r0] - cmp r0, 0 - bne _0814A850 - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _0814A874 @ =0x00007fff - ands r0, r1 - strh r0, [r2] -_0814A850: - ldr r0, _0814A878 @ =0x0400004b - ldr r1, _0814A87C @ =gUnknown_0203A3D4 - ldrb r1, [r1] - strb r1, [r0] -_0814A858: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0814A860: .4byte gUnknown_0203A3D0 -_0814A864: .4byte gUnknown_0842F140 -_0814A868: .4byte gSprites -_0814A86C: .4byte gUnknown_0203A3D1 -_0814A870: .4byte gUnknown_0203A3D3 -_0814A874: .4byte 0x00007fff -_0814A878: .4byte 0x0400004b -_0814A87C: .4byte gUnknown_0203A3D4 - thumb_func_end sub_814A7FC - - thumb_func_start sub_814A880 -sub_814A880: @ 814A880 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, r5, 0 - lsls r1, 24 - lsrs r4, r1, 24 - adds r6, r4, 0 - ldr r1, _0814A8F8 @ =gUnknown_0203A3D0 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814A8C0 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A8FC @ =gSprites - adds r2, r0, r1 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - adds r0, r2, 0 - adds r0, 0x28 - movs r1, 0 - strb r1, [r0] - adds r0, 0x1 - strb r1, [r0] - strh r5, [r2, 0x20] - strh r4, [r2, 0x22] -_0814A8C0: - ldr r1, _0814A900 @ =gUnknown_0203A3D1 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814A8F2 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A8FC @ =gSprites - adds r2, r0, r1 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - adds r0, r2, 0 - adds r0, 0x28 - movs r1, 0 - strb r1, [r0] - adds r0, 0x1 - strb r1, [r0] - strh r7, [r2, 0x20] - strh r6, [r2, 0x22] -_0814A8F2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0814A8F8: .4byte gUnknown_0203A3D0 -_0814A8FC: .4byte gSprites -_0814A900: .4byte gUnknown_0203A3D1 - thumb_func_end sub_814A880 - - thumb_func_start sub_814A904 -sub_814A904: @ 814A904 - push {lr} - ldr r1, _0814A94C @ =gUnknown_0203A3D0 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814A926 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A950 @ =gSprites - adds r0, r1 - adds r2, r0, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0814A926: - ldr r1, _0814A954 @ =gUnknown_0203A3D1 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814A946 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814A950 @ =gSprites - adds r0, r1 - adds r2, r0, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0814A946: - pop {r0} - bx r0 - .align 2, 0 -_0814A94C: .4byte gUnknown_0203A3D0 -_0814A950: .4byte gSprites -_0814A954: .4byte gUnknown_0203A3D1 - thumb_func_end sub_814A904 - - thumb_func_start sub_814A958 -sub_814A958: @ 814A958 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - ldr r4, _0814A9C4 @ =gSubspriteTable_203A380 - ldr r2, _0814A9C8 @ =0x0000ffff - lsrs r0, 24 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r1, 0x2 - str r0, [r4] - str r1, [r4, 0x4] - strh r2, [r4] - adds r4, 0x8 - movs r7, 0x1 - movs r2, 0x1 - ldr r1, [sp] - subs r0, r1, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _0814AA3A - ldr r0, _0814A9CC @ =gUnknown_0842F780 - mov r12, r0 - mov r8, r1 - movs r1, 0x8 - negs r1, r1 - mov r10, r1 - ldr r5, _0814A9D0 @ =gUnknown_0842F788 - mov r9, r5 -_0814A99E: - lsls r0, r3, 16 - asrs r3, r0, 16 - cmp r3, 0x1F - ble _0814A9D4 - mov r6, r12 - ldr r0, [r6] - ldr r1, [r6, 0x4] - str r0, [r4] - str r1, [r4, 0x4] - strh r2, [r4] - lsls r0, r2, 16 - movs r1, 0x80 - lsls r1, 14 - adds r0, r1 - lsrs r2, r0, 16 - ldr r3, [sp] - lsls r5, r3, 16 - b _0814AA20 - .align 2, 0 -_0814A9C4: .4byte gSubspriteTable_203A380 -_0814A9C8: .4byte 0x0000ffff -_0814A9CC: .4byte gUnknown_0842F780 -_0814A9D0: .4byte gUnknown_0842F788 -_0814A9D4: - ldr r6, [sp] - lsls r5, r6, 16 - mov r0, r8 - cmp r0, 0x27 - ble _0814AA0A - cmp r3, 0x8 - ble _0814AA0A - mov r6, r12 - ldr r0, [r6] - ldr r1, [r6, 0x4] - str r0, [r4] - str r1, [r4, 0x4] - lsls r1, r2, 16 - asrs r1, 16 - adds r2, r1, 0 - subs r2, 0x20 - adds r0, r3, 0 - mov r6, r10 - ands r0, r6 - adds r2, r0 - strh r2, [r4] - movs r0, 0x18 - ands r0, r3 - adds r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - b _0814AA20 -_0814AA0A: - mov r3, r9 - ldr r0, [r3] - ldr r1, [r3, 0x4] - str r0, [r4] - str r1, [r4, 0x4] - strh r2, [r4] - lsls r0, r2, 16 - movs r6, 0x80 - lsls r6, 12 - adds r0, r6 - lsrs r2, r0, 16 -_0814AA20: - adds r4, 0x8 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - asrs r1, r5, 16 - lsls r0, r2, 16 - asrs r0, 16 - subs r1, r0 - lsls r1, 16 - lsrs r3, r1, 16 - asrs r1, 16 - cmp r1, 0x7 - bgt _0814A99E -_0814AA3A: - ldr r5, _0814AAA8 @ =gUnknown_0842F790 - ldr r0, [r5] - ldr r1, [r5, 0x4] - str r0, [r4] - str r1, [r4, 0x4] - lsls r1, r2, 16 - asrs r1, 16 - subs r1, 0x7 - lsls r0, r3, 16 - asrs r0, 16 - adds r0, r1 - strh r0, [r4] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r6, _0814AAAC @ =gUnknown_0203A3D0 - ldrb r0, [r6] - cmp r0, 0x40 - beq _0814AA78 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AAB0 @ =gSprites - adds r2, r0, r1 - lsls r1, r7, 3 - ldr r0, _0814AAB4 @ =gSubspriteTables_842F5C0 - adds r1, r0 - adds r0, r2, 0 - bl SetSubspriteTables -_0814AA78: - ldr r1, _0814AAB8 @ =gUnknown_0203A3D1 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814AA98 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AAB0 @ =gSprites - adds r2, r0, r1 - lsls r1, r7, 3 - ldr r0, _0814AAB4 @ =gSubspriteTables_842F5C0 - adds r1, r0 - adds r0, r2, 0 - bl SetSubspriteTables -_0814AA98: - 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 -_0814AAA8: .4byte gUnknown_0842F790 -_0814AAAC: .4byte gUnknown_0203A3D0 -_0814AAB0: .4byte gSprites -_0814AAB4: .4byte gSubspriteTables_842F5C0 -_0814AAB8: .4byte gUnknown_0203A3D1 - thumb_func_end sub_814A958 - - thumb_func_start sub_814AABC -sub_814AABC: @ 814AABC - push {lr} - adds r2, r0, 0 - ldr r1, _0814AAEC @ =gUnknown_0203A3D0 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814AAD4 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0814AAF0 @ =gSprites - adds r1, r0 - str r2, [r1, 0x1C] -_0814AAD4: - ldr r1, _0814AAF4 @ =gUnknown_0203A3D1 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814AAE8 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0814AAF0 @ =gSprites - adds r1, r0 - str r2, [r1, 0x1C] -_0814AAE8: - pop {r0} - bx r0 - .align 2, 0 -_0814AAEC: .4byte gUnknown_0203A3D0 -_0814AAF0: .4byte gSprites -_0814AAF4: .4byte gUnknown_0203A3D1 - thumb_func_end sub_814AABC - - thumb_func_start sub_814AAF8 -sub_814AAF8: @ 814AAF8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r0, 16 - mov r12, r0 - ldr r1, _0814AB70 @ =gUnknown_0203A3D0 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814AB66 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AB74 @ =gSprites - adds r4, r0, r1 - ldr r0, [r4, 0x14] - ldrh r1, [r0, 0x2] - ldr r0, _0814AB78 @ =0x0000ffff - cmp r1, r0 - bne _0814AB66 - movs r2, 0 - movs r3, 0xF - movs r1, 0 - ldrb r5, [r4, 0x5] - ldr r0, _0814AB7C @ =gUnknown_0842F140 - mov r8, r0 - ldr r7, _0814AB80 @ =gPlttBufferUnfaded - movs r6, 0xF -_0814AB32: - lsls r0, r1, 1 - adds r0, r7 - ldrh r0, [r0] - cmp r0, r12 - bne _0814AB46 - lsrs r0, r1, 4 - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r1, 0 - ands r3, r6 -_0814AB46: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0xFF - bls _0814AB32 - lsls r2, 4 - movs r1, 0xF - adds r0, r1, 0 - ands r0, r5 - orrs r0, r2 - strb r0, [r4, 0x5] - ands r3, r1 - lsls r0, r3, 3 - add r0, r8 - bl RequestSpriteSheetCopy -_0814AB66: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0814AB70: .4byte gUnknown_0203A3D0 -_0814AB74: .4byte gSprites -_0814AB78: .4byte 0x0000ffff -_0814AB7C: .4byte gUnknown_0842F140 -_0814AB80: .4byte gPlttBufferUnfaded - thumb_func_end sub_814AAF8 - - thumb_func_start sub_814AB84 -sub_814AB84: @ 814AB84 - push {r4,r5,lr} - ldr r5, _0814ABCC @ =gUnknown_0203A3D1 - ldrb r0, [r5] - cmp r0, 0x40 - beq _0814ABC4 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0814ABD0 @ =gSprites - adds r4, r0 - adds r0, r4, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl DestroySprite - movs r0, 0x40 - strb r0, [r5] - ldr r0, _0814ABD4 @ =gUnknown_0203A3D3 - ldrb r0, [r0] - cmp r0, 0 - bne _0814ABBC - movs r2, 0x80 - lsls r2, 19 - ldrh r1, [r2] - ldr r0, _0814ABD8 @ =0x00007fff - ands r0, r1 - strh r0, [r2] -_0814ABBC: - ldr r0, _0814ABDC @ =0x0400004b - ldr r1, _0814ABE0 @ =gUnknown_0203A3D4 - ldrb r1, [r1] - strb r1, [r0] -_0814ABC4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0814ABCC: .4byte gUnknown_0203A3D1 -_0814ABD0: .4byte gSprites -_0814ABD4: .4byte gUnknown_0203A3D3 -_0814ABD8: .4byte 0x00007fff -_0814ABDC: .4byte 0x0400004b -_0814ABE0: .4byte gUnknown_0203A3D4 - thumb_func_end sub_814AB84 - - thumb_func_start unref_sub_814ABE4 -unref_sub_814ABE4: @ 814ABE4 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _0814AC40 @ =gUnknown_0842F5BC - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _0814AC44 @ =gSubspriteTable_203A380 - movs r2, 0x28 - bl CpuSet - ldr r1, _0814AC48 @ =gUnknown_0203A3D0 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814AC18 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AC4C @ =gSprites - adds r2, r0, r1 - lsls r1, r4, 3 - ldr r0, _0814AC50 @ =gUnknown_0842F758 - adds r1, r0 - adds r0, r2, 0 - bl SetSubspriteTables -_0814AC18: - ldr r1, _0814AC54 @ =gUnknown_0203A3D1 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814AC38 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AC4C @ =gSprites - adds r2, r0, r1 - lsls r1, r4, 3 - ldr r0, _0814AC50 @ =gUnknown_0842F758 - adds r1, r0 - adds r0, r2, 0 - bl SetSubspriteTables -_0814AC38: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0814AC40: .4byte gUnknown_0842F5BC -_0814AC44: .4byte gSubspriteTable_203A380 -_0814AC48: .4byte gUnknown_0203A3D0 -_0814AC4C: .4byte gSprites -_0814AC50: .4byte gUnknown_0842F758 -_0814AC54: .4byte gUnknown_0203A3D1 - thumb_func_end unref_sub_814ABE4 - - thumb_func_start CreateBlendedOutlineCursor -CreateBlendedOutlineCursor: @ 814AC58 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 16 - lsrs r5, r1, 16 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 16 - lsrs r6, r3, 16 - lsls r4, 24 - lsrs r4, 24 - mov r9, r4 - ldr r0, _0814ACF8 @ =gUnknown_0203A3D2 - ldrb r0, [r0] - cmp r0, 0x40 - beq _0814AC86 - bl sub_814AD44 -_0814AC86: - movs r4, 0x1 - ldr r0, _0814ACFC @ =0x0000ffff - cmp r5, r0 - bne _0814ACAC - ldr r1, _0814AD00 @ =gUnknown_0203A360 - movs r0, 0xF - ands r0, r7 - lsls r0, 1 - adds r0, r1 - strh r6, [r0] - ldr r0, _0814AD04 @ =gUnknown_0842F248 - bl LoadSpritePalette - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0814ACAC - ldr r5, _0814AD08 @ =0x0000fff1 - movs r4, 0 -_0814ACAC: - movs r6, 0xF - adds r0, r7, 0 - ands r0, r6 - lsls r0, 3 - ldr r1, _0814AD0C @ =gUnknown_0842F1C0 - adds r0, r1 - bl LoadSpriteSheetDeferred - lsls r0, r4, 1 - adds r0, r4 - lsls r0, 3 - ldr r1, _0814AD10 @ =gSpriteTemplate_842F298 - adds r0, r1 - movs r1, 0 - movs r2, 0xA0 - mov r3, r8 - bl CreateSprite - ldr r1, _0814ACF8 @ =gUnknown_0203A3D2 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0814AD2A - ldrb r1, [r1] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AD14 @ =gSprites - adds r4, r0, r1 - ldr r0, _0814ACFC @ =0x0000ffff - cmp r5, r0 - bne _0814AD18 - ldrb r1, [r4, 0x5] - adds r0, r6, 0 - ands r0, r1 - strb r0, [r4, 0x5] - b _0814AD2A - .align 2, 0 -_0814ACF8: .4byte gUnknown_0203A3D2 -_0814ACFC: .4byte 0x0000ffff -_0814AD00: .4byte gUnknown_0203A360 -_0814AD04: .4byte gUnknown_0842F248 -_0814AD08: .4byte 0x0000fff1 -_0814AD0C: .4byte gUnknown_0842F1C0 -_0814AD10: .4byte gSpriteTemplate_842F298 -_0814AD14: .4byte gSprites -_0814AD18: - adds r0, r5, 0 - bl IndexOfSpritePaletteTag - lsls r0, 4 - ldrb r2, [r4, 0x5] - adds r1, r6, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x5] -_0814AD2A: - mov r0, r9 - bl sub_814ADF4 - ldr r0, _0814AD40 @ =gUnknown_0203A3D2 - ldrb r0, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0814AD40: .4byte gUnknown_0203A3D2 - thumb_func_end CreateBlendedOutlineCursor - - thumb_func_start sub_814AD44 -sub_814AD44: @ 814AD44 - push {r4,lr} - ldr r4, _0814AD70 @ =gUnknown_0203A3D2 - ldrb r0, [r4] - cmp r0, 0x40 - beq _0814AD68 - ldr r0, _0814AD74 @ =gUnknown_0842F1C0 - bl LoadTilesForSpriteSheet - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AD78 @ =gSprites - adds r0, r1 - bl DestroySpriteAndFreeResources - movs r0, 0x40 - strb r0, [r4] -_0814AD68: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0814AD70: .4byte gUnknown_0203A3D2 -_0814AD74: .4byte gUnknown_0842F1C0 -_0814AD78: .4byte gSprites - thumb_func_end sub_814AD44 - - thumb_func_start sub_814AD7C -sub_814AD7C: @ 814AD7C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r1, _0814ADC0 @ =gUnknown_0203A3D2 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814ADB8 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814ADC4 @ =gSprites - adds r2, r0, r1 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - adds r0, r2, 0 - adds r0, 0x28 - movs r1, 0 - strb r1, [r0] - adds r0, 0x1 - strb r1, [r0] - strh r5, [r2, 0x20] - strh r4, [r2, 0x22] -_0814ADB8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0814ADC0: .4byte gUnknown_0203A3D2 -_0814ADC4: .4byte gSprites - thumb_func_end sub_814AD7C - - thumb_func_start sub_814ADC8 -sub_814ADC8: @ 814ADC8 - push {lr} - ldr r1, _0814ADEC @ =gUnknown_0203A3D2 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814ADE8 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814ADF0 @ =gSprites - adds r0, r1 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_0814ADE8: - pop {r0} - bx r0 - .align 2, 0 -_0814ADEC: .4byte gUnknown_0203A3D2 -_0814ADF0: .4byte gSprites - thumb_func_end sub_814ADC8 - - thumb_func_start sub_814ADF4 -sub_814ADF4: @ 814ADF4 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x12 - bls _0814AE00 - movs r2, 0 -_0814AE00: - ldr r1, _0814AE24 @ =gUnknown_0203A3D2 - ldrb r0, [r1] - cmp r0, 0x40 - beq _0814AE1E - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0814AE28 @ =gSprites - adds r0, r1 - lsls r1, r2, 3 - ldr r2, _0814AE2C @ =gUnknown_0842F6C0 - adds r1, r2 - bl SetSubspriteTables -_0814AE1E: - pop {r0} - bx r0 - .align 2, 0 -_0814AE24: .4byte gUnknown_0203A3D2 -_0814AE28: .4byte gSprites -_0814AE2C: .4byte gUnknown_0842F6C0 - thumb_func_end sub_814ADF4 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data2.s b/data/data2.s index 9fc0ed995..d31f20534 100644 --- a/data/data2.s +++ b/data/data2.s @@ -31718,38 +31718,38 @@ gUnknown_0842F5BC:: @ 842F5BC .align 2 gSubspriteTables_842F5C0:: @ 842F5C0 - .4byte 1, gSubspriteTable_203A380 - .4byte 1, gSubspriteTable_203A380 - .4byte 2, gSubspriteTable_203A380 - .4byte 3, gSubspriteTable_203A380 - .4byte 4, gSubspriteTable_203A380 - .4byte 5, gSubspriteTable_203A380 - .4byte 6, gSubspriteTable_203A380 - .4byte 7, gSubspriteTable_203A380 - .4byte 8, gSubspriteTable_203A380 - .4byte 9, gSubspriteTable_203A380 - .4byte 10, gSubspriteTable_203A380 - .4byte 11, gSubspriteTable_203A380 - .4byte 12, gSubspriteTable_203A380 - .4byte 13, gSubspriteTable_203A380 - .4byte 14, gSubspriteTable_203A380 - .4byte 15, gSubspriteTable_203A380 - .4byte 1, gSubspriteTable_203A380 - .4byte 17, gSubspriteTable_203A380 - .4byte 18, gSubspriteTable_203A380 - .4byte 19, gSubspriteTable_203A380 - .4byte 20, gSubspriteTable_203A380 - .4byte 21, gSubspriteTable_203A380 - .4byte 22, gSubspriteTable_203A380 - .4byte 23, gSubspriteTable_203A380 - .4byte 24, gSubspriteTable_203A380 - .4byte 25, gSubspriteTable_203A380 - .4byte 26, gSubspriteTable_203A380 - .4byte 27, gSubspriteTable_203A380 - .4byte 28, gSubspriteTable_203A380 - .4byte 29, gSubspriteTable_203A380 - .4byte 30, gSubspriteTable_203A380 - .4byte 31, gSubspriteTable_203A380 + .4byte 1, gMenuCursorSubsprites + .4byte 1, gMenuCursorSubsprites + .4byte 2, gMenuCursorSubsprites + .4byte 3, gMenuCursorSubsprites + .4byte 4, gMenuCursorSubsprites + .4byte 5, gMenuCursorSubsprites + .4byte 6, gMenuCursorSubsprites + .4byte 7, gMenuCursorSubsprites + .4byte 8, gMenuCursorSubsprites + .4byte 9, gMenuCursorSubsprites + .4byte 10, gMenuCursorSubsprites + .4byte 11, gMenuCursorSubsprites + .4byte 12, gMenuCursorSubsprites + .4byte 13, gMenuCursorSubsprites + .4byte 14, gMenuCursorSubsprites + .4byte 15, gMenuCursorSubsprites + .4byte 1, gMenuCursorSubsprites + .4byte 17, gMenuCursorSubsprites + .4byte 18, gMenuCursorSubsprites + .4byte 19, gMenuCursorSubsprites + .4byte 20, gMenuCursorSubsprites + .4byte 21, gMenuCursorSubsprites + .4byte 22, gMenuCursorSubsprites + .4byte 23, gMenuCursorSubsprites + .4byte 24, gMenuCursorSubsprites + .4byte 25, gMenuCursorSubsprites + .4byte 26, gMenuCursorSubsprites + .4byte 27, gMenuCursorSubsprites + .4byte 28, gMenuCursorSubsprites + .4byte 29, gMenuCursorSubsprites + .4byte 30, gMenuCursorSubsprites + .4byte 31, gMenuCursorSubsprites .align 2 gUnknown_0842F6C0:: @ 842F6C0 @@ -31775,7 +31775,7 @@ gUnknown_0842F6C0:: @ 842F6C0 .align 2 gUnknown_0842F758:: @ 842F758 - .4byte 3, gSubspriteTable_203A380 + .4byte 3, gMenuCursorSubsprites .4byte 0, 2 .4byte 0, 66 .4byte 0, 105 diff --git a/ld_script.txt b/ld_script.txt index b570a5ddb..3f58224a0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -190,7 +190,7 @@ SECTIONS { asm/rom_81473B8.o(.text); src/clear_save_data_menu.o(.text); asm/rom_8148B8C.o(.text); - asm/menu_cursor.o(.text); + src/menu_cursor.o(.text); } =0 script_data : diff --git a/src/menu_cursor.c b/src/menu_cursor.c new file mode 100644 index 000000000..88d43f468 --- /dev/null +++ b/src/menu_cursor.c @@ -0,0 +1,610 @@ +#include "global.h" +#include "sprite.h" +#include "palette.h" + +extern struct SpriteSheet gUnknown_0842F140[]; +extern struct SpriteSheet gUnknown_0842F1C0[]; +extern struct SpritePalette gUnknown_0842F240; +extern struct SpritePalette gUnknown_0842F248; +extern struct SpriteTemplate gSpriteTemplate_842F250[]; +extern struct SpriteTemplate gSpriteTemplate_842F298[]; + +extern struct Subsprite *gUnknown_0842F5BC[]; + +extern struct SubspriteTable gSubspriteTables_842F5C0[]; +extern struct SubspriteTable gUnknown_0842F6C0[]; +extern struct SubspriteTable gUnknown_0842F758[]; + +extern struct Subsprite gUnknown_0842F780; +extern struct Subsprite gUnknown_0842F788; +extern struct Subsprite gUnknown_0842F790; + +extern u16 gUnknown_0203A360[]; + +extern struct Subsprite gMenuCursorSubsprites[]; + +extern u8 gUnknown_0203A3D0; +extern u8 gUnknown_0203A3D1; +extern u8 gUnknown_0203A3D2; +extern u8 gUnknown_0203A3D3; +extern u8 gUnknown_0203A3D4; + +void sub_814A7FC(void); +void sub_814A958(u8 a1); +void sub_814AD44(void); +void sub_814ADF4(u8 a1); + +void sub_814A590(void) +{ + gUnknown_0203A3D0 = 0x40; + gUnknown_0203A3D1 = 0x40; + gUnknown_0203A3D2 = 0x40; + gUnknown_0203A3D3 = 0; + gUnknown_0203A3D4 = 0; +} + +u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) +{ + int v9; + struct Sprite *v10; + + if (gUnknown_0203A3D0 != 0x40 || gUnknown_0203A3D1 != 0x40) + sub_814A7FC(); + + v9 = 1; + if (a2 == 0xFFFF) + { + gUnknown_0203A360[a3 & 0xF] = a4; + if (LoadSpritePalette(&gUnknown_0842F240) != 0xFF) + { + a2 = 0xFFF0; + v9 = 0; + } + } + + LoadSpriteSheetDeferred(&gUnknown_0842F140[a3 & 0xF]); + gUnknown_0203A3D0 = CreateSprite(&gSpriteTemplate_842F250[v9], 0, 0xA0, a1); + gUnknown_0203A3D1 = CreateSprite(&gSpriteTemplate_842F250[2], 0, 0xA0, a1); + if (gUnknown_0203A3D0 != 0x40) + { + v10 = &gSprites[gUnknown_0203A3D0]; + if (a2 == 0xFFFF) + v10->oam.paletteNum = 0; + else + v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); + } + if (gUnknown_0203A3D1 != 0x40) + { + v10 = &gSprites[gUnknown_0203A3D1]; + if (a2 == 0xFFFF) + v10->oam.paletteNum = 0; + else + v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); + + if (!(REG_DISPCNT & (DISPCNT_WIN0_ON | DISPCNT_WIN1_ON))) + *(u8 *)(REG_ADDR_WINOUT) |= 0x1F; + gUnknown_0203A3D3 = REG_DISPCNT >> 0xF; + gUnknown_0203A3D4 = *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1); + REG_DISPCNT |= DISPCNT_OBJWIN_ON; + *(u8 *)(REG_ADDR_WINOUT + 1) = 0x10; + } + sub_814A958(a5); + return gUnknown_0203A3D0; +} + +u8 sub_814A758(u8 a1, u8 a2, u8 a3, u8 a4) +{ + u8 result; + struct Sprite *spr; + + result = sub_814A5C0(a1, 0, a3, 0, a4); + if (result != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->oam.paletteNum = a2; + } + return result; +} + +u8 unref_sub_814A7AC(u8 a1, u16 a2, u8 a3) +{ + u16 i; + u8 val1 = 0; + u16 val2 = 0xF; + + for (i = 0; i <= 0xFF; i++) + { + if (gPlttBufferUnfaded[i] == a2) + { + val1 = (u8)(i >> 4); + val2 = i & 0xF; + } + } + + return sub_814A758(a1, val1, val2, a3); +} + +void sub_814A7FC(void) +{ + if (gUnknown_0203A3D0 != 0x40) + { + LoadTilesForSpriteSheet(&gUnknown_0842F140[0]); + DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D0]); + gUnknown_0203A3D0 = 0x40; + } + + if (gUnknown_0203A3D1 != 0x40) + { + DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D1]); + gUnknown_0203A3D1 = 0x40; + if (!gUnknown_0203A3D3) + REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; + *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1) = gUnknown_0203A3D4; + } + + return; +} + +void sub_814A880(u8 a1, u8 a2) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->invisible = 0; + spr->centerToCornerVecX = 0; + spr->centerToCornerVecY = 0; + spr->pos1.x = a1; + spr->pos1.y = a2; + } + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + spr->invisible = 0; + spr->centerToCornerVecX = 0; + spr->centerToCornerVecY = 0; + spr->pos1.x = a1; + spr->pos1.y = a2; + } + + return; +} + +void sub_814A904(void) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->invisible = 1; + } + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + spr->invisible = 1; + } + + return; +} + +#ifdef NONMATCHING +// Fix pls +void sub_814A958(u8 a1) +{ + struct Subsprite *cursub; + u8 v2; // r7@1 + s16 v3; // r2@1 + s32 v5; // r0@1 + s32 v6; // r3@1 + s32 v7; // r5@3 + int v8; // r7@9 + s16 negone; + + cursub = &gMenuCursorSubsprites[0]; + negone = -1; + cursub = (struct Subsprite){0,2}; + cursub->x = negone; + cursub++; + + v2 = 1; + v3 = 1; + v5 = (a1 - 1) << 0x10; + v6 = v5 >> 0x10; + if ((v5 >> 0x10) > 7) + { + do + { + if (v6 > 0x1F) + { + *cursub = gUnknown_0842F780; + cursub->x = v3; + v3 = ((v3 << 16) + 0x200000) >> 16; + v7 = a1 << 16; + } + else + { + v7 = a1 << 16; + if (a1 <= 0x27 || v6 <= 0x8) + { + *cursub = gUnknown_0842F788; + cursub->x = v3; + v3 = ((v3 << 16) + 0x80000) >> 16; + } + else + { + *cursub = gUnknown_0842F780; + cursub->x = v3 - 0x20 + (v6 & 0xFFF8); + v3 = (v3 + (v6 & 0x18)) & negone; + } + } + + cursub++; + v2 = v2 + 1; + v6 = ((v7 >> 16) - v3) & 0xFFFF; + } + while (v7 - v3 > 7); + } + *cursub = gUnknown_0842F790; + cursub->x = v6 + v3 - 7; + v8 = v2 + 1; + if (gUnknown_0203A3D0 != 0x40) + SetSubspriteTables(&gSprites[gUnknown_0203A3D0], &gSubspriteTables_842F5C0[v8]); + if (gUnknown_0203A3D1 != 0x40) + SetSubspriteTables(&gSprites[gUnknown_0203A3D1], &gSubspriteTables_842F5C0[v8]); + return; +} +#else +__attribute__((naked)) +void sub_814A958(u8 a1) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + ldr r4, _0814A9C4\n\ + ldr r2, _0814A9C8\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r1, 0x2\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + adds r4, 0x8\n\ + movs r7, 0x1\n\ + movs r2, 0x1\n\ + ldr r1, [sp]\n\ + subs r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x7\n\ + ble _0814AA3A\n\ + ldr r0, _0814A9CC\n\ + mov r12, r0\n\ + mov r8, r1\n\ + movs r1, 0x8\n\ + negs r1, r1\n\ + mov r10, r1\n\ + ldr r5, _0814A9D0\n\ + mov r9, r5\n\ +_0814A99E:\n\ + lsls r0, r3, 16\n\ + asrs r3, r0, 16\n\ + cmp r3, 0x1F\n\ + ble _0814A9D4\n\ + mov r6, r12\n\ + ldr r0, [r6]\n\ + ldr r1, [r6, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + lsls r0, r2, 16\n\ + movs r1, 0x80\n\ + lsls r1, 14\n\ + adds r0, r1\n\ + lsrs r2, r0, 16\n\ + ldr r3, [sp]\n\ + lsls r5, r3, 16\n\ + b _0814AA20\n\ + .align 2, 0\n\ +_0814A9C4: .4byte gMenuCursorSubsprites\n\ +_0814A9C8: .4byte 0x0000ffff\n\ +_0814A9CC: .4byte gUnknown_0842F780\n\ +_0814A9D0: .4byte gUnknown_0842F788\n\ +_0814A9D4:\n\ + ldr r6, [sp]\n\ + lsls r5, r6, 16\n\ + mov r0, r8\n\ + cmp r0, 0x27\n\ + ble _0814AA0A\n\ + cmp r3, 0x8\n\ + ble _0814AA0A\n\ + mov r6, r12\n\ + ldr r0, [r6]\n\ + ldr r1, [r6, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + adds r2, r1, 0\n\ + subs r2, 0x20\n\ + adds r0, r3, 0\n\ + mov r6, r10\n\ + ands r0, r6\n\ + adds r2, r0\n\ + strh r2, [r4]\n\ + movs r0, 0x18\n\ + ands r0, r3\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + lsrs r2, r1, 16\n\ + b _0814AA20\n\ +_0814AA0A:\n\ + mov r3, r9\n\ + ldr r0, [r3]\n\ + ldr r1, [r3, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + lsls r0, r2, 16\n\ + movs r6, 0x80\n\ + lsls r6, 12\n\ + adds r0, r6\n\ + lsrs r2, r0, 16\n\ +_0814AA20:\n\ + adds r4, 0x8\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + asrs r1, r5, 16\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + subs r1, r0\n\ + lsls r1, 16\n\ + lsrs r3, r1, 16\n\ + asrs r1, 16\n\ + cmp r1, 0x7\n\ + bgt _0814A99E\n\ +_0814AA3A:\n\ + ldr r5, _0814AAA8\n\ + ldr r0, [r5]\n\ + ldr r1, [r5, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + subs r1, 0x7\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + adds r0, r1\n\ + strh r0, [r4]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r6, _0814AAAC\n\ + ldrb r0, [r6]\n\ + cmp r0, 0x40\n\ + beq _0814AA78\n\ + adds r1, r0, 0\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0814AAB0\n\ + adds r2, r0, r1\n\ + lsls r1, r7, 3\n\ + ldr r0, _0814AAB4\n\ + adds r1, r0\n\ + adds r0, r2, 0\n\ + bl SetSubspriteTables\n\ +_0814AA78:\n\ + ldr r1, _0814AAB8\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x40\n\ + beq _0814AA98\n\ + adds r1, r0, 0\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0814AAB0\n\ + adds r2, r0, r1\n\ + lsls r1, r7, 3\n\ + ldr r0, _0814AAB4\n\ + adds r1, r0\n\ + adds r0, r2, 0\n\ + bl SetSubspriteTables\n\ +_0814AA98:\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0814AAA8: .4byte gUnknown_0842F790\n\ +_0814AAAC: .4byte gUnknown_0203A3D0\n\ +_0814AAB0: .4byte gSprites\n\ +_0814AAB4: .4byte gSubspriteTables_842F5C0\n\ +_0814AAB8: .4byte gUnknown_0203A3D1\n\ + .syntax divided\n"); +} +#endif + +void sub_814AABC(void (*callback)(struct Sprite *)) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->callback = callback; + } + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + spr->callback = callback; + } + + return; +} + +void sub_814AAF8(u16 a1) +{ + struct Sprite *spr; + u8 v2; + u8 v3; + u16 v4; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + if (spr->template->paletteTag == 0xFFFF) + { + for (v2 = 0, v3 = 0xF, v4 = 0; v4 <= 0xFF; v4++) + { + if (gPlttBufferUnfaded[v4] == a1) + { + v2 = v4 >> 4; + v3 = v4 & 0xF; + } + } + spr->oam.paletteNum = v2; + RequestSpriteSheetCopy(&gUnknown_0842F140[v3 & 0xF]); + } + } + return; +} + +void sub_814AB84(void) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + FreeSpriteOamMatrix(spr); + DestroySprite(spr); + gUnknown_0203A3D1 = 0x40; + + if (!gUnknown_0203A3D3) + REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; + *(u8 *)(REG_ADDR_WINOUT + 1) = gUnknown_0203A3D4; + } + return; +} + +void unref_sub_814ABE4(int a1) +{ + struct Sprite *spr; + + CpuSet(gUnknown_0842F5BC[a1], &gMenuCursorSubsprites, 0x28); + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + SetSubspriteTables(spr, &gUnknown_0842F758[a1]); + } + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + SetSubspriteTables(spr, &gUnknown_0842F758[a1]); + } + return; +} + +u8 CreateBlendedOutlineCursor(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) +{ + int v8; + struct Sprite *spr; + u8 var1 = gUnknown_0203A3D2; + + if (var1 != 0x40) + sub_814AD44(); + + v8 = 1; + + if (a2 == 0xFFFF) + { + gUnknown_0203A360[a3 & 0xF] = a4; + if (LoadSpritePalette(&gUnknown_0842F248) != 0xFF ) + { + a2 = 0xFFF1; + v8 = 0; + } + } + + LoadSpriteSheetDeferred(&gUnknown_0842F1C0[a3 & 0xF]); + gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 0xA0, a1); + + if (gUnknown_0203A3D2 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D2]; + + if (a2 == 0xFFFF) + spr->oam.paletteNum = 0; + else + spr->oam.paletteNum = IndexOfSpritePaletteTag(a2); + } + sub_814ADF4(a5); + + return gUnknown_0203A3D2; +} + +void sub_814AD44(void) +{ + if (gUnknown_0203A3D2 != 0x40) + { + LoadTilesForSpriteSheet(&gUnknown_0842F1C0[0]); + DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D2]); + gUnknown_0203A3D2 = 0x40; + } + return; +} + +void sub_814AD7C(u8 a1, u8 a2) +{ + struct Sprite *spr; + if (gUnknown_0203A3D2 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D2]; + spr->invisible = 0; + spr->centerToCornerVecX = 0; + spr->centerToCornerVecY = 0; + spr->pos1.x = a1; + spr->pos1.y = a2; + } + return; +} + +void sub_814ADC8() +{ + struct Sprite *spr; + if (gUnknown_0203A3D2 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D2]; + spr->invisible = 1; + } + return; +} + +void sub_814ADF4(u8 a1) +{ + if (a1 > 0x12) + a1 = 0; + + if (gUnknown_0203A3D2 != 0x40) + SetSubspriteTables(&gSprites[gUnknown_0203A3D2], &gUnknown_0842F6C0[a1]); + return; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index ba6ac562d..e3650a008 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1167,7 +1167,7 @@ gUnknown_02039760: @ 2039760 gUnknown_0203A360: @ 203A360 .space 0x20 -gSubspriteTable_203A380: @ 203A380 +gMenuCursorSubsprites: @ 203A380 .space 0x50 gUnknown_0203A3D0: @ 203A3D0 |