summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiegoisawesome <Diegoisawesome@users.noreply.github.com>2016-10-29 18:25:42 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-10-29 16:25:42 -0700
commitad7aa68d9b9b5bc388f1b391dd4754889c29e3a9 (patch)
tree71c814907ee3dd9d8e89b1913a19b5cd451b8b47
parentff71446e684593266418b99e6a22ae3141fbfa73 (diff)
(Almost) finished menu_cursor.c (#77)
-rw-r--r--asm/menu_cursor.s1118
-rw-r--r--data/data2.s66
-rw-r--r--ld_script.txt2
-rw-r--r--src/menu_cursor.c610
-rw-r--r--sym_ewram.txt2
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