diff options
author | Diegoisawesome <Diegoisawesome@users.noreply.github.com> | 2018-05-19 23:23:45 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-19 23:23:45 -0500 |
commit | ecfe49ec6147fec75969b769605ec09b4a87c66a (patch) | |
tree | e43fd78fc4f83d8345b1938e87f08d59454682a5 | |
parent | 0c1f85f2002e911f64a3b188fa30d8f465c0fc7e (diff) | |
parent | 9385036ff7cfe1941f3fcdbc3a76cbf06b95d67d (diff) |
Merge pull request #254 from DizzyEggg/decompile_menu_indicators
Decompile menu indicators
-rw-r--r-- | asm/menu_indicators.s | 1442 | ||||
-rw-r--r-- | data/menu_indicators.s | 93 | ||||
-rw-r--r-- | include/item_menu.h | 2 | ||||
-rw-r--r-- | include/list_menu.h | 33 | ||||
-rw-r--r-- | include/menu_indicators.h | 37 | ||||
-rw-r--r-- | include/sprite.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/daycare.c | 3 | ||||
-rw-r--r-- | src/decoration.c | 1 | ||||
-rwxr-xr-x | src/item_menu.c | 5 | ||||
-rw-r--r-- | src/list_menu.c | 832 | ||||
-rw-r--r-- | src/main_menu.c | 2 | ||||
-rw-r--r-- | src/mon_markings.c | 3 | ||||
-rw-r--r-- | src/player_pc.c | 4 | ||||
-rw-r--r-- | src/pokeblock.c | 1 | ||||
-rw-r--r-- | src/secret_base.c | 1 | ||||
-rw-r--r-- | sym_ewram.txt | 8 |
17 files changed, 870 insertions, 1601 deletions
diff --git a/asm/menu_indicators.s b/asm/menu_indicators.s deleted file mode 100644 index b923b53d0..000000000 --- a/asm/menu_indicators.s +++ /dev/null @@ -1,1442 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_81AF08C -sub_81AF08C: @ 81AF08C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r2, r1, r0 - cmp r3, 0x10 - bhi _081AF154 - lsls r0, r3, 2 - ldr r1, =_081AF0B8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081AF0B8: - .4byte _081AF0FC - .4byte _081AF0FC - .4byte _081AF100 - .4byte _081AF104 - .4byte _081AF108 - .4byte _081AF10C - .4byte _081AF110 - .4byte _081AF114 - .4byte _081AF118 - .4byte _081AF11C - .4byte _081AF122 - .4byte _081AF12A - .4byte _081AF130 - .4byte _081AF138 - .4byte _081AF140 - .4byte _081AF146 - .4byte _081AF14E -_081AF0FC: - ldr r0, [r2, 0x4] - b _081AF158 -_081AF100: - ldrh r0, [r2, 0xC] - b _081AF158 -_081AF104: - ldrh r0, [r2, 0xE] - b _081AF158 -_081AF108: - ldrb r0, [r2, 0x10] - b _081AF158 -_081AF10C: - ldrb r0, [r2, 0x11] - b _081AF158 -_081AF110: - ldrb r0, [r2, 0x12] - b _081AF158 -_081AF114: - ldrb r0, [r2, 0x13] - b _081AF158 -_081AF118: - ldrb r0, [r2, 0x14] - b _081AF124 -_081AF11C: - ldrb r0, [r2, 0x14] - lsrs r0, 4 - b _081AF158 -_081AF122: - ldrb r0, [r2, 0x15] -_081AF124: - lsls r0, 28 - lsrs r0, 28 - b _081AF158 -_081AF12A: - ldrb r0, [r2, 0x15] - lsrs r0, 4 - b _081AF158 -_081AF130: - ldrb r0, [r2, 0x16] - lsls r0, 29 - lsrs r0, 29 - b _081AF158 -_081AF138: - ldrb r0, [r2, 0x16] - lsls r0, 26 - lsrs r0, 29 - b _081AF158 -_081AF140: - ldrb r0, [r2, 0x16] - lsrs r0, 6 - b _081AF158 -_081AF146: - ldrb r0, [r2, 0x17] - lsls r0, 26 - lsrs r0, 26 - b _081AF158 -_081AF14E: - ldrb r0, [r2, 0x17] - lsrs r0, 6 - b _081AF158 -_081AF154: - movs r0, 0x1 - negs r0, r0 -_081AF158: - pop {r1} - bx r1 - thumb_func_end sub_81AF08C - - thumb_func_start sub_81AF15C -sub_81AF15C: @ 81AF15C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r3, r1, r0 - cmp r4, 0x10 - bhi _081AF25C - lsls r0, r4, 2 - ldr r1, =_081AF188 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081AF188: - .4byte _081AF1CC - .4byte _081AF1CC - .4byte _081AF1D0 - .4byte _081AF1D4 - .4byte _081AF1D8 - .4byte _081AF1DC - .4byte _081AF1E0 - .4byte _081AF1E4 - .4byte _081AF1E8 - .4byte _081AF1F4 - .4byte _081AF202 - .4byte _081AF20E - .4byte _081AF21C - .4byte _081AF228 - .4byte _081AF236 - .4byte _081AF244 - .4byte _081AF250 -_081AF1CC: - str r2, [r3, 0x4] - b _081AF25C -_081AF1D0: - strh r2, [r3, 0xC] - b _081AF25C -_081AF1D4: - strh r2, [r3, 0xE] - b _081AF25C -_081AF1D8: - strb r2, [r3, 0x10] - b _081AF25C -_081AF1DC: - strb r2, [r3, 0x11] - b _081AF25C -_081AF1E0: - strb r2, [r3, 0x12] - b _081AF25C -_081AF1E4: - strb r2, [r3, 0x13] - b _081AF25C -_081AF1E8: - movs r0, 0xF - ands r2, r0 - ldrb r1, [r3, 0x14] - movs r0, 0x10 - negs r0, r0 - b _081AF1FA -_081AF1F4: - lsls r2, 4 - ldrb r1, [r3, 0x14] - movs r0, 0xF -_081AF1FA: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x14] - b _081AF25C -_081AF202: - movs r0, 0xF - ands r2, r0 - ldrb r1, [r3, 0x15] - movs r0, 0x10 - negs r0, r0 - b _081AF214 -_081AF20E: - lsls r2, 4 - ldrb r1, [r3, 0x15] - movs r0, 0xF -_081AF214: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x15] - b _081AF25C -_081AF21C: - movs r0, 0x7 - ands r2, r0 - ldrb r1, [r3, 0x16] - movs r0, 0x8 - negs r0, r0 - b _081AF23C -_081AF228: - movs r0, 0x7 - ands r2, r0 - lsls r2, 3 - ldrb r1, [r3, 0x16] - movs r0, 0x39 - negs r0, r0 - b _081AF23C -_081AF236: - lsls r2, 6 - ldrb r1, [r3, 0x16] - movs r0, 0x3F -_081AF23C: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x16] - b _081AF25C -_081AF244: - movs r0, 0x3F - ands r2, r0 - ldrb r1, [r3, 0x17] - movs r0, 0x40 - negs r0, r0 - b _081AF256 -_081AF250: - lsls r2, 6 - ldrb r1, [r3, 0x17] - movs r0, 0x3F -_081AF256: - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x17] -_081AF25C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81AF15C - - thumb_func_start sub_81AF264 -sub_81AF264: @ 81AF264 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081AF276 - cmp r0, 0x1 - beq _081AF28A - b _081AF2E4 -_081AF276: - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _081AF2E4 -_081AF28A: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081AF29A - cmp r0, 0x1 - beq _081AF2C0 - ldrh r2, [r4, 0x38] - b _081AF2DE -_081AF29A: - movs r0, 0x34 - ldrsh r3, [r4, r0] - ldr r1, =gSineTable - ldrh r2, [r4, 0x38] - lsls r0, r2, 24 - lsrs r0, 23 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - muls r0, r3 - cmp r0, 0 - bge _081AF2B4 - adds r0, 0xFF -_081AF2B4: - asrs r0, 8 - strh r0, [r4, 0x24] - b _081AF2DE - .pool -_081AF2C0: - movs r0, 0x34 - ldrsh r3, [r4, r0] - ldr r1, =gSineTable - ldrh r2, [r4, 0x38] - lsls r0, r2, 24 - lsrs r0, 23 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - muls r0, r3 - cmp r0, 0 - bge _081AF2DA - adds r0, 0xFF -_081AF2DA: - asrs r0, 8 - strh r0, [r4, 0x26] -_081AF2DE: - ldrh r0, [r4, 0x36] - adds r0, r2, r0 - strh r0, [r4, 0x38] -_081AF2E4: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AF264 - - thumb_func_start AddScrollIndicatorArrowObject -AddScrollIndicatorArrowObject: @ 81AF2F0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x18 - adds r6, r0, 0 - ldr r5, [sp, 0x30] - lsls r6, 24 - lsrs r6, 24 - mov r8, r6 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r5, 16 - lsrs r5, 16 - mov r12, r5 - mov r4, sp - ldr r0, =gUnknown_08614244 - ldm r0!, {r5-r7} - stm r4!, {r5-r7} - ldm r0!, {r5-r7} - stm r4!, {r5-r7} - mov r0, sp - movs r4, 0 - strh r3, [r0] - mov r3, r12 - strh r3, [r0, 0x2] - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r3, r1 - adds r5, r3, 0 - adds r5, 0x3E - ldrb r1, [r5] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r5] - strh r4, [r3, 0x2E] - ldr r1, =gUnknown_086141FC - mov r5, r8 - lsls r6, r5, 2 - adds r6, r1 - ldrb r2, [r6] - lsls r1, r2, 28 - lsrs r1, 28 - strh r1, [r3, 0x30] - lsrs r2, 4 - strh r2, [r3, 0x32] - ldrb r1, [r6, 0x1] - strh r1, [r3, 0x34] - ldrh r1, [r6, 0x2] - strh r1, [r3, 0x36] - strh r4, [r3, 0x38] - add sp, 0x18 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end AddScrollIndicatorArrowObject - - thumb_func_start AddScrollIndicatorArrowPair -AddScrollIndicatorArrowPair: @ 81AF380 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - adds r6, r0, 0 - mov r9, r1 - ldr r0, =gUnknown_086142C8 - str r0, [sp, 0x4] - ldr r5, =0xffff0000 - ldr r0, [sp, 0x8] - ands r0, r5 - movs r1, 0x80 - lsls r1, 1 - orrs r0, r1 - ldrh r1, [r6, 0xA] - lsls r1, 16 - ldr r4, =0x0000ffff - ands r0, r4 - orrs r0, r1 - str r0, [sp, 0x8] - add r0, sp, 0x4 - bl LoadCompressedObjectPic - ldrh r2, [r6, 0xC] - cmp r2, r4 - bne _081AF3DC - ldr r0, =gUnknown_086142A8 - ldrb r1, [r6, 0xE] - lsls r1, 20 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - b _081AF3EE - .pool -_081AF3DC: - ldr r0, =gUnknown_086142A8 - str r0, [sp, 0xC] - add r0, sp, 0xC - ldr r1, [r0, 0x4] - ands r1, r5 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadSpritePalette -_081AF3EE: - ldr r0, =Task_ScrollIndicatorArrowPair - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r7, r0, r1 - movs r0, 0 - strb r0, [r7] - mov r0, r9 - str r0, [r7, 0x4] - ldrh r0, [r6, 0x6] - strh r0, [r7, 0x8] - ldrh r0, [r6, 0x8] - strh r0, [r7, 0xA] - ldrh r0, [r6, 0xA] - strh r0, [r7, 0xE] - ldrh r0, [r6, 0xC] - strh r0, [r7, 0x10] - ldrb r0, [r6] - ldrb r1, [r6, 0x1] - ldrb r2, [r6, 0x2] - ldrh r3, [r6, 0xA] - ldrh r4, [r6, 0xC] - str r4, [sp] - bl AddScrollIndicatorArrowObject - strb r0, [r7, 0xC] - ldrb r0, [r6, 0x3] - ldrb r1, [r6, 0x4] - ldrb r2, [r6, 0x5] - ldrh r3, [r6, 0xA] - ldrh r4, [r6, 0xC] - str r4, [sp] - bl AddScrollIndicatorArrowObject - strb r0, [r7, 0xD] - ldrh r1, [r6, 0xC] - ldr r0, =0x0000ffff - cmp r1, r0 - bne _081AF47C - ldr r5, =gSprites - ldrb r0, [r7, 0xC] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r3, [r6, 0xE] - lsls r3, 4 - ldrb r4, [r1, 0x5] - movs r2, 0xF - adds r0, r2, 0 - ands r0, r4 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r1, [r7, 0xD] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r6, 0xE] - lsls r1, 4 - ldrb r3, [r0, 0x5] - ands r2, r3 - orrs r2, r1 - strb r2, [r0, 0x5] -_081AF47C: - mov r0, r8 - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end AddScrollIndicatorArrowPair - - thumb_func_start AddScrollIndicatorArrowPairParametrized -AddScrollIndicatorArrowPairParametrized: @ 81AF4A0 - push {r4,lr} - adds r4, r1, 0 - subs r0, 0x2 - cmp r0, 0x1 - bhi _081AF4C4 - ldr r0, =gUnknown_0203CE8C - movs r1, 0x2 - strb r1, [r0] - strb r4, [r0, 0x1] - strb r2, [r0, 0x2] - movs r1, 0x3 - strb r1, [r0, 0x3] - strb r4, [r0, 0x4] - strb r3, [r0, 0x5] - b _081AF4D6 - .pool -_081AF4C4: - ldr r0, =gUnknown_0203CE8C - movs r1, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - strb r4, [r0, 0x2] - movs r1, 0x1 - strb r1, [r0, 0x3] - strb r3, [r0, 0x4] - strb r4, [r0, 0x5] -_081AF4D6: - adds r2, r0, 0 - movs r1, 0 - movs r0, 0 - strh r0, [r2, 0x6] - ldr r0, [sp, 0x8] - strh r0, [r2, 0x8] - ldr r0, [sp, 0xC] - strh r0, [r2, 0xA] - ldr r0, [sp, 0x10] - strh r0, [r2, 0xC] - strb r1, [r2, 0xE] - adds r0, r2, 0 - ldr r1, [sp, 0x14] - bl AddScrollIndicatorArrowPair - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end AddScrollIndicatorArrowPairParametrized - - thumb_func_start Task_ScrollIndicatorArrowPair -Task_ScrollIndicatorArrowPair: @ 81AF504 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r4, r1, r0 - ldr r0, [r4, 0x4] - ldrh r5, [r0] - ldrh r0, [r4, 0x8] - cmp r5, r0 - bne _081AF548 - ldr r0, =0x0000ffff - cmp r5, r0 - beq _081AF548 - ldr r3, =gSprites - ldrb r1, [r4, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - b _081AF55E - .pool -_081AF548: - ldr r3, =gSprites - ldrb r1, [r4, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 -_081AF55E: - strb r1, [r0] - ldrh r0, [r4, 0xA] - cmp r5, r0 - bne _081AF580 - ldrb r1, [r4, 0xD] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - b _081AF594 - .pool -_081AF580: - ldrb r1, [r4, 0xD] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 -_081AF594: - strb r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end Task_ScrollIndicatorArrowPair - - thumb_func_start Task_ScrollIndicatorArrowPairOnMainMenu -Task_ScrollIndicatorArrowPairOnMainMenu: @ 81AF59C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r4, r1, r0 - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081AF5E8 - ldr r3, =gSprites - ldrb r1, [r4, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldrb r1, [r4, 0xD] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - b _081AF612 - .pool -_081AF5E8: - ldr r3, =gSprites - ldrb r1, [r4, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldrb r1, [r4, 0xD] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 -_081AF612: - strb r1, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end Task_ScrollIndicatorArrowPairOnMainMenu - - thumb_func_start RemoveScrollIndicatorArrowPair -RemoveScrollIndicatorArrowPair: @ 81AF620 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r5, r0, r1 - ldrh r0, [r5, 0xE] - ldr r4, =0x0000ffff - cmp r0, r4 - beq _081AF63E - bl FreeSpriteTilesByTag -_081AF63E: - ldrh r0, [r5, 0x10] - cmp r0, r4 - beq _081AF648 - bl FreeSpritePaletteByTag -_081AF648: - ldrb r1, [r5, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, =gSprites - adds r0, r4 - bl DestroySprite - ldrb r1, [r5, 0xD] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - adds r0, r6, 0 - bl DestroyTask - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end RemoveScrollIndicatorArrowPair - - thumb_func_start ListMenuAddCursorObjectInternal -ListMenuAddCursorObjectInternal: @ 81AF680 - push {lr} - cmp r1, 0 - beq _081AF68A - cmp r1, 0x1 - beq _081AF690 -_081AF68A: - bl ListMenuAddRedOutlineCursorObject - b _081AF694 -_081AF690: - bl ListMenuAddRedArrowCursorObject -_081AF694: - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end ListMenuAddCursorObjectInternal - - thumb_func_start ListMenuUpdateCursorObject -@ void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 a4) -ListMenuUpdateCursorObject: @ 81AF69C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - cmp r3, 0 - beq _081AF6B4 - cmp r3, 0x1 - beq _081AF6BA - b _081AF6BE -_081AF6B4: - bl ListMenuUpdateRedOutlineCursorObject - b _081AF6BE -_081AF6BA: - bl ListMenuUpdateRedArrowCursorObject -_081AF6BE: - pop {r0} - bx r0 - thumb_func_end ListMenuUpdateCursorObject - - thumb_func_start ListMenuRemoveCursorObject -ListMenuRemoveCursorObject: @ 81AF6C4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r1, 0 - beq _081AF6D4 - cmp r1, 0x1 - beq _081AF6DA - b _081AF6DE -_081AF6D4: - bl ListMenuRemoveRedOutlineCursorObject - b _081AF6DE -_081AF6DA: - bl ListMenuRemoveRedArrowCursorObject -_081AF6DE: - pop {r0} - bx r0 - thumb_func_end ListMenuRemoveCursorObject - - thumb_func_start Task_RedOutlineCursor -Task_RedOutlineCursor: @ 81AF6E4 - bx lr - thumb_func_end Task_RedOutlineCursor - - thumb_func_start ListMenuGetRedOutlineCursorSpriteCount -ListMenuGetRedOutlineCursorSpriteCount: @ 81AF6E8 - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - movs r3, 0x4 - cmp r0, 0x10 - bls _081AF708 - movs r2, 0x8 - subs r0, 0x8 - cmp r2, r0 - bge _081AF708 -_081AF700: - adds r3, 0x2 - adds r2, 0x8 - cmp r2, r0 - blt _081AF700 -_081AF708: - cmp r1, 0x10 - bls _081AF71C - movs r2, 0x8 - subs r1, 0x8 - cmp r2, r1 - bge _081AF71C -_081AF714: - adds r3, 0x2 - adds r2, 0x8 - cmp r2, r1 - blt _081AF714 -_081AF71C: - lsls r0, r3, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end ListMenuGetRedOutlineCursorSpriteCount - - thumb_func_start ListMenuSetUpRedOutlineCursorSpriteOamTable -ListMenuSetUpRedOutlineCursorSpriteOamTable: @ 81AF724 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r3, r2, 0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - ldr r0, =gUnknown_0861425C - ldr r0, [r0] - str r0, [r3] - movs r1, 0x88 - strb r1, [r3] - strb r1, [r3, 0x1] - ldr r0, =gUnknown_08614260 - ldr r0, [r0] - str r0, [r3, 0x4] - mov r2, r8 - adds r2, 0x80 - strb r2, [r3, 0x4] - strb r1, [r3, 0x5] - ldr r0, =gUnknown_08614274 - ldr r0, [r0] - str r0, [r3, 0x8] - strb r1, [r3, 0x8] - mov r4, r9 - adds r4, 0x80 - strb r4, [r3, 0x9] - ldr r0, =gUnknown_08614278 - ldr r0, [r0] - str r0, [r3, 0xC] - strb r2, [r3, 0xC] - strb r4, [r3, 0xD] - movs r0, 0x4 - mov r12, r0 - mov r2, r8 - cmp r2, 0x10 - bls _081AF7B8 - movs r2, 0x8 - mov r5, r8 - subs r5, 0x8 - cmp r2, r5 - bge _081AF7B8 - ldr r0, =gUnknown_08614264 - ldr r0, [r0] - str r0, [sp] - ldr r0, =gUnknown_08614270 - ldr r6, [r0] - adds r1, r3, 0 - adds r1, 0x10 - movs r7, 0x88 - mov r10, r7 -_081AF796: - ldr r0, [sp] - str r0, [r1] - adds r0, r2, 0 - subs r0, 0x78 - strb r0, [r1] - mov r7, r10 - strb r7, [r1, 0x1] - adds r1, 0x4 - str r6, [r1] - strb r0, [r1] - strb r4, [r1, 0x1] - adds r1, 0x4 - movs r0, 0x2 - add r12, r0 - adds r2, 0x8 - cmp r2, r5 - blt _081AF796 -_081AF7B8: - mov r2, r9 - cmp r2, 0x10 - bls _081AF7F6 - movs r1, 0x8 - mov r4, r9 - subs r4, 0x8 - cmp r1, r4 - bge _081AF7F6 - ldr r0, =gUnknown_08614268 - ldr r6, [r0] - ldr r0, =gUnknown_0861426C - ldr r5, [r0] - mov r7, r12 - lsls r0, r7, 2 - adds r2, r0, r3 - movs r7, 0x88 - mov r3, r8 - adds r3, 0x80 -_081AF7DC: - str r6, [r2] - strb r7, [r2] - adds r0, r1, 0 - subs r0, 0x78 - strb r0, [r2, 0x1] - adds r2, 0x4 - str r5, [r2] - strb r3, [r2] - strb r0, [r2, 0x1] - adds r2, 0x4 - adds r1, 0x8 - cmp r1, r4 - blt _081AF7DC -_081AF7F6: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end ListMenuSetUpRedOutlineCursorSpriteOamTable - - thumb_func_start ListMenuAddRedOutlineCursorObject -ListMenuAddRedOutlineCursorObject: @ 81AF828 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - adds r6, r0, 0 - ldr r0, =gUnknown_08614338 - str r0, [sp, 0x18] - ldr r5, =0xffff0000 - add r0, sp, 0x18 - ldr r1, [r0, 0x4] - ands r1, r5 - movs r2, 0x80 - lsls r2, 1 - orrs r1, r2 - ldrh r2, [r6, 0x6] - lsls r2, 16 - ldr r3, =0x0000ffff - ands r1, r3 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadCompressedObjectPic - ldrh r2, [r6, 0x8] - ldr r7, =0x0000ffff - cmp r2, r7 - bne _081AF884 - ldr r0, =gUnknown_086142A8 - ldrb r1, [r6, 0xA] - lsls r1, 20 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - b _081AF896 - .pool -_081AF884: - ldr r0, =gUnknown_086142A8 - str r0, [sp, 0x20] - add r0, sp, 0x20 - ldr r1, [r0, 0x4] - ands r1, r5 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadSpritePalette -_081AF896: - ldr r0, =Task_RedOutlineCursor - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r5, r0, r1 - ldrh r0, [r6, 0x6] - movs r3, 0 - mov r8, r3 - strh r0, [r5, 0xE] - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x10] - ldrh r0, [r6, 0x2] - ldrh r1, [r6, 0x4] - bl ListMenuGetRedOutlineCursorSpriteCount - strb r0, [r5] - ldrb r0, [r5] - lsls r0, 2 - bl Alloc - adds r2, r0, 0 - str r2, [r5, 0x8] - str r2, [r5, 0x4] - ldrh r0, [r6, 0x2] - ldrh r1, [r6, 0x4] - bl ListMenuSetUpRedOutlineCursorSpriteOamTable - mov r1, sp - ldr r0, =gDummySpriteTemplate - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - mov r1, sp - ldrh r0, [r6, 0x6] - strh r0, [r1] - ldrh r0, [r6, 0x8] - strh r0, [r1, 0x2] - ldrb r1, [r6] - adds r1, 0x78 - ldrb r2, [r6, 0x1] - adds r2, 0x78 - mov r0, sp - movs r3, 0 - bl CreateSprite - strb r0, [r5, 0xC] - ldrb r1, [r5, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r7, =gSprites - adds r0, r7 - adds r1, r5, 0 - bl SetSubspriteTables - ldrb r0, [r5, 0xC] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x5] - ldrb r1, [r5, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - adds r0, 0x43 - mov r1, r8 - strb r1, [r0] - ldrb r1, [r5, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - adds r0, 0x42 - ldrb r2, [r0] - movs r1, 0x40 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldrh r1, [r6, 0x8] - ldr r0, =0x0000ffff - cmp r1, r0 - bne _081AF96E - ldrb r0, [r5, 0xC] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - ldrb r2, [r6, 0xA] - lsls r2, 4 - ldrb r3, [r1, 0x5] - movs r0, 0xF - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_081AF96E: - adds r0, r4, 0 - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end ListMenuAddRedOutlineCursorObject - - thumb_func_start ListMenuUpdateRedOutlineCursorObject -@ void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y) -ListMenuUpdateRedOutlineCursorObject: @ 81AF994 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r3, r0, 2 - adds r3, r0 - lsls r3, 3 - ldr r0, =gTasks + 0x8 - adds r3, r0 - ldr r5, =gSprites - ldrb r4, [r3, 0xC] - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r5 - adds r1, 0x78 - strh r1, [r0, 0x20] - ldrb r1, [r3, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r2, 0x78 - strh r2, [r0, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end ListMenuUpdateRedOutlineCursorObject - - thumb_func_start ListMenuRemoveRedOutlineCursorObject -ListMenuRemoveRedOutlineCursorObject: @ 81AF9D8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - ldr r0, [r4, 0x8] - bl Free - ldrh r0, [r4, 0xE] - ldr r6, =0x0000ffff - cmp r0, r6 - beq _081AF9FC - bl FreeSpriteTilesByTag -_081AF9FC: - ldrh r0, [r4, 0x10] - cmp r0, r6 - beq _081AFA06 - bl FreeSpritePaletteByTag -_081AFA06: - ldrb r1, [r4, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0 - bl DestroyTask - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end ListMenuRemoveRedOutlineCursorObject - - thumb_func_start ObjectCB_RedArrowCursor -ObjectCB_RedArrowCursor: @ 81AFA30 - push {lr} - adds r2, r0, 0 - ldr r1, =gSineTable - ldrh r3, [r2, 0x2E] - lsls r0, r3, 24 - lsrs r0, 23 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bge _081AFA48 - adds r0, 0x3F -_081AFA48: - asrs r0, 6 - strh r0, [r2, 0x24] - adds r0, r3, 0 - adds r0, 0x8 - strh r0, [r2, 0x2E] - pop {r0} - bx r0 - .pool - thumb_func_end ObjectCB_RedArrowCursor - - thumb_func_start Task_RedArrowCursor -Task_RedArrowCursor: @ 81AFA5C - bx lr - thumb_func_end Task_RedArrowCursor - - thumb_func_start ListMenuAddRedArrowCursorObject -ListMenuAddRedArrowCursorObject: @ 81AFA60 - push {r4-r7,lr} - sub sp, 0x28 - adds r5, r0, 0 - ldr r0, =gUnknown_08614378 - str r0, [sp, 0x18] - ldr r6, =0xffff0000 - add r0, sp, 0x18 - ldr r1, [r0, 0x4] - ands r1, r6 - movs r2, 0x80 - orrs r1, r2 - ldrh r2, [r5, 0x6] - lsls r2, 16 - ldr r4, =0x0000ffff - ands r1, r4 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadCompressedObjectPic - ldrh r2, [r5, 0x8] - cmp r2, r4 - bne _081AFAB4 - ldr r0, =gUnknown_086142A8 - ldrb r1, [r5, 0xA] - lsls r1, 20 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - b _081AFAC6 - .pool -_081AFAB4: - ldr r0, =gUnknown_086142A8 - str r0, [sp, 0x20] - add r0, sp, 0x20 - ldr r1, [r0, 0x4] - ands r1, r6 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadSpritePalette -_081AFAC6: - ldr r0, =Task_RedArrowCursor - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x8] - strh r0, [r4, 0x4] - mov r1, sp - ldr r0, =gUnknown_08614290 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - mov r1, sp - ldrh r0, [r5, 0x6] - strh r0, [r1] - ldrh r0, [r5, 0x8] - strh r0, [r1, 0x2] - ldrb r1, [r5] - ldrb r2, [r5, 0x1] - mov r0, sp - movs r3, 0 - bl CreateSprite - strb r0, [r4] - ldr r3, =gSprites - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r2, 0x8 - strh r2, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - strh r2, [r0, 0x26] - ldrh r1, [r5, 0x8] - ldr r0, =0x0000ffff - cmp r1, r0 - bne _081AFB46 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrb r2, [r5, 0xA] - lsls r2, 4 - ldrb r3, [r1, 0x5] - movs r0, 0xF - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_081AFB46: - adds r0, r6, 0 - add sp, 0x28 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end ListMenuAddRedArrowCursorObject - - thumb_func_start ListMenuUpdateRedArrowCursorObject -@ void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y) -ListMenuUpdateRedArrowCursorObject: @ 81AFB68 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r3, r0, 2 - adds r3, r0 - lsls r3, 3 - ldr r0, =gTasks + 0x8 - adds r3, r0 - ldr r5, =gSprites - ldrb r4, [r3] - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r5 - strh r1, [r0, 0x20] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end ListMenuUpdateRedArrowCursorObject - - thumb_func_start ListMenuRemoveRedArrowCursorObject -ListMenuRemoveRedArrowCursorObject: @ 81AFBA0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - ldrh r0, [r4, 0x2] - ldr r6, =0x0000ffff - cmp r0, r6 - beq _081AFBBE - bl FreeSpriteTilesByTag -_081AFBBE: - ldrh r0, [r4, 0x4] - cmp r0, r6 - beq _081AFBC8 - bl FreeSpritePaletteByTag -_081AFBC8: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0 - bl DestroyTask - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end ListMenuRemoveRedArrowCursorObject - - .align 2, 0 @ Don't pad with nop. diff --git a/data/menu_indicators.s b/data/menu_indicators.s deleted file mode 100644 index 24353b157..000000000 --- a/data/menu_indicators.s +++ /dev/null @@ -1,93 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_086141FC:: @ 86141FC - .byte 0, 2, 8, 0 - .byte 1, 2, -8, -1 - .byte 18, 2, 8, 0 - .byte 19, 2, -8, -1 - -gUnknown_0861420C:: @ 861420C - .2byte 0 - .2byte 0x4000 - .2byte 0 - .2byte 0 - -gUnknown_08614214:: @ 8614214 - obj_image_anim_frame 0, 30 - obj_image_anim_end - -gUnknown_0861421C:: @ 861421C - obj_image_anim_frame 0, 0x5e - obj_image_anim_end - -gUnknown_08614224:: @ 8614224 - obj_image_anim_frame 4, 30 - obj_image_anim_end - -gUnknown_0861422C:: @ 861422C - obj_image_anim_frame 4, 0x9e - obj_image_anim_end - -gUnknown_08614234:: @ 8614234 - .4byte gUnknown_08614214 - .4byte gUnknown_0861421C - .4byte gUnknown_08614224 - .4byte gUnknown_0861422C - -gUnknown_08614244:: @ 8614244 - spr_template 0, 0, gUnknown_0861420C, gUnknown_08614234, NULL, gDummySpriteAffineAnimTable, sub_81AF264 - -gUnknown_0861425C:: @ 861425C - .4byte 0x00000000 - -gUnknown_08614260:: @ 8614260 - .4byte 0x00100000 - -gUnknown_08614264:: @ 8614264 - .4byte 0x00200000 - -gUnknown_08614268:: @ 8614268 - .4byte 0x00300000 - -gUnknown_0861426C:: @ 861426C - .4byte 0x00400000 - -gUnknown_08614270:: @ 8614270 - .4byte 0x00500000 - -gUnknown_08614274:: @ 8614274 - .4byte 0x00600000 - -gUnknown_08614278:: @ 8614278 - .4byte 0x00700000 - -gUnknown_0861427C:: @ 861427C - .2byte 0 - .2byte 0x4000 - .2byte 0 - .2byte 0 - -gUnknown_08614284:: @ 8614284 - obj_image_anim_frame 0, 30 - obj_image_anim_end - -gUnknown_0861428C:: @ 861428C - .4byte gUnknown_08614284 - -gUnknown_08614290:: @ 8614290 - spr_template 0, 0, gUnknown_0861427C, gUnknown_0861428C, NULL, gDummySpriteAffineAnimTable, ObjectCB_RedArrowCursor - -gUnknown_086142A8:: @ 86142A8 - .incbin "graphics/interface/red_arrow.gbapal" - -gUnknown_086142C8:: @ 86142C8 - .incbin "graphics/interface/red_arrow_other.4bpp.lz" - -gUnknown_08614338:: @ 8614338 - .incbin "graphics/interface/selector_outline.4bpp.lz" - -gUnknown_08614378:: @ 8614378 - .incbin "graphics/interface/red_arrow.4bpp.lz" diff --git a/include/item_menu.h b/include/item_menu.h index 40c015a8e..8a474bc0f 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -7,7 +7,7 @@ struct BagStruct void (*bagCallback)(void); u8 location; u8 pocket; - u8 unk6[2]; + u16 unk6; u16 cursorPosition[5]; u16 scrollPosition[5]; }; diff --git a/include/list_menu.h b/include/list_menu.h index 0aa66a524..d8b526b61 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -58,6 +58,33 @@ struct UnknownListMenuWindowStruct u8 palNum; }; +struct ArrowStruct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u16 unk6; + u16 unk8; + u16 tileTag; + u16 palTag; + u8 palNum; +}; + +struct CursorStruct +{ + u8 unk0; + u8 unk1; + u16 unk2; + u16 unk4; + u16 tileTag; + u16 palTag; + u8 palNum; +}; + +extern struct ArrowStruct gUnknown_0203CE8C; extern struct ListMenuTemplate gMultiuseListMenuTemplate; s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); @@ -74,5 +101,11 @@ void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId); void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal); void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list); +s32 sub_81AF08C(u8 taskId, u8 field); +void sub_81AF15C(u8 taskId, u8 field, s32 value); +u8 AddScrollIndicatorArrowPair(const struct ArrowStruct *arrowInfo, u16 *arg1); +u8 AddScrollIndicatorArrowPairParametrized(u32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 tileTag, s32 palTag, void *arg7); +void RemoveScrollIndicatorArrowPair(u8 taskId); +void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId); #endif //GUARD_LIST_MENU_H diff --git a/include/menu_indicators.h b/include/menu_indicators.h deleted file mode 100644 index a099cffab..000000000 --- a/include/menu_indicators.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef GUARD_MENU_INDICATORS_H -#define GUARD_MENU_INDICATORS_H - -// Exported type declarations - -// Exported RAM declarations - -// Exported ROM declarations - -struct ArrowStruct -{ - u8 unk0[6]; - u16 unk6[4]; - u8 unkE; -}; - -struct CursorStruct -{ - u8 unk0; - u8 unk1; - u16 unk2; - u16 unk4; - u16 unk6; - u16 unk8; - u8 unkA; -}; - -void Task_ScrollIndicatorArrowPairOnMainMenu(u8); -u8 AddScrollIndicatorArrowPairParametrized(u8, u8, u8, u8, s32, u16, u16, u16 *); -void RemoveScrollIndicatorArrowPair(u8); -u8 AddScrollIndicatorArrowPair(const struct ArrowStruct*, void*); -void sub_81AF15C(u8, u8, u8); -void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind); -void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind); -u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind); - -#endif //GUARD_MENU_INDICATORS_H diff --git a/include/sprite.h b/include/sprite.h index b5a1b6ae5..4723b66e1 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -229,6 +229,7 @@ struct OamMatrix extern const struct OamData gDummyOamData; extern const union AnimCmd *const gDummySpriteAnimTable[]; extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; +extern const struct SpriteTemplate gDummySpriteTemplate; extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; diff --git a/ld_script.txt b/ld_script.txt index d053e670e..b57c05e09 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -245,7 +245,6 @@ SECTIONS { asm/battle_frontier_2.o(.text); src/item_menu.o(.text); src/list_menu.o(.text); - asm/menu_indicators.o(.text); src/unk_text_util.o(.text); src/save_location.o(.text); src/item_icon.o(.text); @@ -520,7 +519,7 @@ SECTIONS { src/menu.o(.rodata); data/battle_frontier_2.o(.rodata); src/item_menu.o(.rodata); - data/menu_indicators.o(.rodata); + src/list_menu.o(.rodata); src/save_location.o(.rodata); src/item_icon.o(.rodata); data/party_menu.o(.rodata); diff --git a/src/daycare.c b/src/daycare.c index d567ff79a..17928324f 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1,5 +1,6 @@ #include "global.h" #include "pokemon.h" +#include "battle.h" #include "daycare.h" #include "string_util.h" #include "constants/species.h" @@ -22,8 +23,6 @@ #define EGG_MOVES_ARRAY_COUNT 10 #define EGG_LVL_UP_MOVES_ARRAY_COUNT 50 -extern u16 gMoveToLearn; - // text extern const u8 gText_MaleSymbol4[]; extern const u8 gText_FemaleSymbol4[]; diff --git a/src/decoration.c b/src/decoration.c index 1fc94c80e..08287a3cc 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -21,7 +21,6 @@ #include "list_menu.h" #include "menu_helpers.h" #include "menu.h" -#include "menu_indicators.h" #include "sound.h" #include "event_scripts.h" #include "event_data.h" diff --git a/src/item_menu.c b/src/item_menu.c index 4742d07a1..c4b4b15b1 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -26,7 +26,6 @@ #include "malloc.h" #include "map_name_popup.h" #include "menu.h" -#include "menu_indicators.h" #include "money.h" #include "overworld.h" #include "palette.h" @@ -265,7 +264,7 @@ struct TempWallyStruct { }; EWRAM_DATA struct UnkBagStruct *gUnknown_0203CE54 = 0; -EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0, 0, 0, {0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}; +EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0}; EWRAM_DATA struct ListBuffer1 *gUnknown_0203CE74 = 0; EWRAM_DATA struct ListBuffer2 *gUnknown_0203CE78 = 0; EWRAM_DATA u16 gSpecialVar_ItemId = 0; @@ -750,7 +749,7 @@ void sub_81AB824(void) void bag_menu_add_list_scroll_arrow_indicators_maybe(void) { if (gUnknown_0203CE54->unk81B != 1 && gUnknown_0203CE54->unk81F == 0xFF) - gUnknown_0203CE54->unk81F = AddScrollIndicatorArrowPair(&gUnknown_08614094, gUnknown_0203CE58.unk6); + gUnknown_0203CE54->unk81F = AddScrollIndicatorArrowPair(&gUnknown_08614094, &gUnknown_0203CE58.unk6); } void sub_81AB89C(void) diff --git a/src/list_menu.c b/src/list_menu.c index c78d32bb3..de7de8269 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -5,11 +5,16 @@ #include "text_window.h" #include "main.h" #include "task.h" -#include "menu_indicators.h" +#include "trig.h" +#include "decompress.h" +#include "palette.h" +#include "malloc.h" #include "strings.h" #include "sound.h" #include "constants/songs.h" +// This file needs better labels and function names. + struct UnknownMysteryGiftLinkMenuStruct { s32 field_0; @@ -29,7 +34,71 @@ struct UnknownListMenuPals u8 field_3_7:1; }; -extern struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84; +struct UnkIndicatorsStruct +{ + u8 field_0; + u16 *field_4; + u16 field_8; + u16 field_A; + u16 field_C; + u16 field_E; + u8 field_10; + u8 field_11; + u8 field_12; + u8 field_13; + u8 field_14_0:4; + u8 field_14_1:4; + u8 field_15_0:4; + u8 field_15_1:4; + u8 field_16_0:3; + u8 field_16_1:3; + u8 field_16_2:2; + u8 field_17_0:6; + u8 field_17_1:2; +}; + +struct UnkIndicatorsStruct2 +{ + u8 field_0; + u16 *field_4; + u16 field_8; + u16 field_A; + u8 field_C; + u8 field_D; + u16 tileTag; + u16 palTag; + u16 field_12; + u16 field_14; + u16 field_16; + u16 field_18; + u16 field_1A; + u16 field_1C; + s16 field_1E; +}; + +struct UnkIndicatorsStruct3 +{ + struct SubspriteTable subspriteTable; + struct Subsprite *subspritesPtr; // not a const pointer + u8 spriteId; + u16 tileTag; + u16 palTag; +}; + +struct UnkIndicatorsStruct4 +{ + u8 field_0; + u16 tileTag; + u16 palTag; +}; + +struct UnkSmallIndicatorsStruct +{ + u8 field_0_0:4; + u8 field_0_1:4; + u8 field_1; + u16 field_2; +}; // this file's functions static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); @@ -38,11 +107,220 @@ static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOff static void ListMenuDrawCursor(struct ListMenu *list); static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2); static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind); +static void Task_ScrollIndicatorArrowPair(u8 taskId); +static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor); +static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor); +static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y); +static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y); +static void ListMenuRemoveRedOutlineCursorObject(u8 taskId); +static void ListMenuRemoveRedArrowCursorObject(u8 taskId); +static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind); +static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind); +static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind); +static void sub_81AF264(struct Sprite *sprite); +static void ObjectCB_RedArrowCursor(struct Sprite *sprite); + +// EWRAM vars + EWRAM_DATA struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84 = {0}; + EWRAM_DATA struct ArrowStruct gUnknown_0203CE8C = {0}; // IWRAM common struct UnknownListMenuPals gUnknown_03006300; struct ListMenuTemplate gMultiuseListMenuTemplate; +// const rom data +static const struct UnkSmallIndicatorsStruct gUnknown_086141FC[] = +{ + {0, 0, 2, 8}, + {1, 0, 2, -8}, + {2, 1, 2, 8}, + {3, 1, 2, -8}, +}; + +static const struct OamData sOamData_861420C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_8614214[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_861421C[] = +{ + ANIMCMD_FRAME(0, 30, 1, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8614224[] = +{ + ANIMCMD_FRAME(4, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_861422C[] = +{ + ANIMCMD_FRAME(4, 30, 0, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_8614234[] = +{ + sSpriteAnim_8614214, + sSpriteAnim_861421C, + sSpriteAnim_8614224, + sSpriteAnim_861422C +}; + +static const struct SpriteTemplate gUnknown_08614244 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_861420C, + .anims = sSpriteAnimTable_8614234, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81AF264, +}; + +static const struct Subsprite sSubsprite_861425C = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 0, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614260 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 1, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614264 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 2, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614268 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 3, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_861426C = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 4, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614270 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 5, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614274 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 6, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614278 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 7, + .priority = 0, +}; + +static const struct OamData sOamData_861427C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_8614284[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_861428C[] = +{ + sSpriteAnim_8614284 +}; + +static const struct SpriteTemplate gUnknown_08614290 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_861427C, + .anims = sSpriteAnimTable_861428C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = ObjectCB_RedArrowCursor, +}; + +static const u16 gUnknown_086142A8[] = INCBIN_U16("graphics/interface/red_arrow.gbapal"); +static const u8 gUnknown_086142C8[] = INCBIN_U8("graphics/interface/red_arrow_other.4bpp.lz"); +static const u8 gUnknown_08614338[] = INCBIN_U8("graphics/interface/selector_outline.4bpp.lz"); +static const u8 gUnknown_08614378[] = INCBIN_U8("graphics/interface/red_arrow.4bpp.lz"); + // code static void ListMenuDummyTask(u8 taskId) { @@ -415,9 +693,9 @@ static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind) cursor.unk1 = 0xA0; cursor.unk2 = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2; cursor.unk4 = GetFontAttribute(list->template.fontId, 1) + 2; - cursor.unk6 = 0x4000; - cursor.unk8 = 0xFFFF; - cursor.unkA = 0xF; + cursor.tileTag = 0x4000; + cursor.palTag = 0xFFFF; + cursor.palNum = 0xF; return ListMenuAddCursorObjectInternal(&cursor, cursorKind); } @@ -631,3 +909,547 @@ void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list) if (!arg1) PlaySE(SE_SELECT); } + +// unused +s32 sub_81AF08C(u8 taskId, u8 field) +{ + struct UnkIndicatorsStruct *data = (void*) gTasks[taskId].data; + + switch (field) + { + case 0: + case 1: + return (s32)(data->field_4); + case 2: + return data->field_C; + case 3: + return data->field_E; + case 4: + return data->field_10; + case 5: + return data->field_11; + case 6: + return data->field_12; + case 7: + return data->field_13; + case 8: + return data->field_14_0; + case 9: + return data->field_14_1; + case 10: + return data->field_15_0; + case 11: + return data->field_15_1; + case 12: + return data->field_16_0; + case 13: + return data->field_16_1; + case 14: + return data->field_16_2; + case 15: + return data->field_17_0; + case 16: + return data->field_17_1; + default: + return -1; + } +} + +// unused +void sub_81AF15C(u8 taskId, u8 field, s32 value) +{ + struct UnkIndicatorsStruct *data = (void*) &gTasks[taskId].data; + + switch (field) + { + case 0: + case 1: + data->field_4 = (void*)(value); + break; + case 2: + data->field_C = value; + break; + case 3: + data->field_E = value; + break; + case 4: + data->field_10 = value; + break; + case 5: + data->field_11 = value; + break; + case 6: + data->field_12 = value; + break; + case 7: + data->field_13 = value; + break; + case 8: + data->field_14_0 = value; + break; + case 9: + data->field_14_1 = value; + break; + case 10: + data->field_15_0 = value; + break; + case 11: + data->field_15_1 = value; + break; + case 12: + data->field_16_0 = value; + break; + case 13: + data->field_16_1 = value; + break; + case 14: + data->field_16_2 = value; + break; + case 15: + data->field_17_0 = value; + break; + case 16: + data->field_17_1 = value; + break; + } +} + +static void sub_81AF264(struct Sprite *sprite) +{ + s32 multiplier; + + switch (sprite->data[0]) + { + case 0: + StartSpriteAnim(sprite, sprite->data[1]); + sprite->data[0]++; + break; + case 1: + switch (sprite->data[2]) + { + case 0: + multiplier = sprite->data[3]; + sprite->pos2.x = (gSineTable[(u8)(sprite->data[5])] * multiplier) / 256; + break; + case 1: + multiplier = sprite->data[3]; + sprite->pos2.y = (gSineTable[(u8)(sprite->data[5])] * multiplier) / 256; + break; + } + sprite->data[5] += sprite->data[4]; + break; + } +} + +static u8 AddScrollIndicatorArrowObject(u8 arg0, u8 x, u8 y, u16 tileTag, u16 palTag) +{ + u8 spriteId; + struct SpriteTemplate spriteTemplate; + + spriteTemplate = gUnknown_08614244; + spriteTemplate.tileTag = tileTag; + spriteTemplate.paletteTag = palTag; + + spriteId = CreateSprite(&spriteTemplate, x, y, 0); + gSprites[spriteId].invisible = 1; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = gUnknown_086141FC[arg0].field_0_0; + gSprites[spriteId].data[2] = gUnknown_086141FC[arg0].field_0_1; + gSprites[spriteId].data[3] = gUnknown_086141FC[arg0].field_1; + gSprites[spriteId].data[4] = gUnknown_086141FC[arg0].field_2; + gSprites[spriteId].data[5] = 0; + + return spriteId; +} + +u8 AddScrollIndicatorArrowPair(const struct ArrowStruct *arrowInfo, u16 *arg1) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct UnkIndicatorsStruct2 *data; + u8 taskId; + + spriteSheet.data = gUnknown_086142C8; + spriteSheet.size = 0x100; + spriteSheet.tag = arrowInfo->tileTag; + LoadCompressedObjectPic(&spriteSheet); + + if (arrowInfo->palTag == 0xFFFF) + { + LoadPalette(gUnknown_086142A8, (16 * arrowInfo->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = gUnknown_086142A8; + spritePal.tag = arrowInfo->palTag; + LoadSpritePalette(&spritePal); + } + + taskId = CreateTask(Task_ScrollIndicatorArrowPair, 0); + data = (void*) gTasks[taskId].data; + + data->field_0 = 0; + data->field_4 = arg1; + data->field_8 = arrowInfo->unk6; + data->field_A = arrowInfo->unk8; + data->tileTag = arrowInfo->tileTag; + data->palTag = arrowInfo->palTag; + data->field_C = AddScrollIndicatorArrowObject(arrowInfo->unk0, arrowInfo->unk1, arrowInfo->unk2, arrowInfo->tileTag, arrowInfo->palTag); + data->field_D = AddScrollIndicatorArrowObject(arrowInfo->unk3, arrowInfo->unk4, arrowInfo->unk5, arrowInfo->tileTag, arrowInfo->palTag); + + if (arrowInfo->palTag == 0xFFFF) + { + gSprites[data->field_C].oam.paletteNum = arrowInfo->palNum; + gSprites[data->field_D].oam.paletteNum = arrowInfo->palNum; + } + + return taskId; +} + +u8 AddScrollIndicatorArrowPairParametrized(u32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 tileTag, s32 palTag, void *arg7) +{ + if (arg0 == 2 || arg0 == 3) + { + gUnknown_0203CE8C.unk0 = 2; + gUnknown_0203CE8C.unk1 = arg1; + gUnknown_0203CE8C.unk2 = arg2; + gUnknown_0203CE8C.unk3 = 3; + gUnknown_0203CE8C.unk4 = arg1; + gUnknown_0203CE8C.unk5 = arg3; + } + else + { + gUnknown_0203CE8C.unk0 = 0; + gUnknown_0203CE8C.unk1 = arg2; + gUnknown_0203CE8C.unk2 = arg1; + gUnknown_0203CE8C.unk3 = 1; + gUnknown_0203CE8C.unk4 = arg3; + gUnknown_0203CE8C.unk5 = arg1; + } + + gUnknown_0203CE8C.unk6 = 0; + gUnknown_0203CE8C.unk8 = arg4; + gUnknown_0203CE8C.tileTag = tileTag; + gUnknown_0203CE8C.palTag = palTag; + gUnknown_0203CE8C.palNum = 0; + + return AddScrollIndicatorArrowPair(&gUnknown_0203CE8C, arg7); +} + +static void Task_ScrollIndicatorArrowPair(u8 taskId) +{ + struct UnkIndicatorsStruct2 *data = (void*) gTasks[taskId].data; + u16 var = (*data->field_4); + + if (var == data->field_8 && var != 0xFFFF) + gSprites[data->field_C].invisible = 1; + else + gSprites[data->field_C].invisible = 0; + + if (var == data->field_A) + gSprites[data->field_D].invisible = 1; + else + gSprites[data->field_D].invisible = 0; +} + +void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId) +{ + struct UnkIndicatorsStruct2 *data = (void*) gTasks[taskId].data; + + if (data->field_1E != 0) + { + gSprites[data->field_C].invisible = 0; + gSprites[data->field_D].invisible = 1; + } + else + { + gSprites[data->field_C].invisible = 1; + gSprites[data->field_D].invisible = 0; + } +} + +void RemoveScrollIndicatorArrowPair(u8 taskId) +{ + struct UnkIndicatorsStruct2 *data = (void*) gTasks[taskId].data; + + if (data->tileTag != 0xFFFF) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != 0xFFFF) + FreeSpritePaletteByTag(data->palTag); + + DestroySprite(&gSprites[data->field_C]); + DestroySprite(&gSprites[data->field_D]); + + DestroyTask(taskId); +} + +static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + default: + return ListMenuAddRedOutlineCursorObject(cursor); + case 1: + return ListMenuAddRedArrowCursorObject(cursor); + } +} + +static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + ListMenuUpdateRedOutlineCursorObject(taskId, x, y); + break; + case 1: + ListMenuUpdateRedArrowCursorObject(taskId, x, y); + break; + } +} + +static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + ListMenuRemoveRedOutlineCursorObject(taskId); + break; + case 1: + ListMenuRemoveRedArrowCursorObject(taskId); + break; + } +} + +static void Task_RedOutlineCursor(u8 taskId) +{ + +} + +u8 ListMenuGetRedOutlineCursorSpriteCount(u16 arg0, u16 arg1) +{ + s32 i; + s32 count = 4; + + if (arg0 > 16) + { + for (i = 8; i < (arg0 - 8); i += 8) + count += 2; + } + if (arg1 > 16) + { + for (i = 8; i < (arg1 - 8); i += 8) + count += 2; + } + + return count; +} + +void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 arg0, u16 arg1, struct Subsprite *subsprites) +{ + s32 i, j, id = 0; + + subsprites[id] = sSubsprite_861425C; + subsprites[id].x = 136; + subsprites[id].y = 136; + id++; + + subsprites[id] = sSubsprite_8614260; + subsprites[id].x = arg0 + 128; + subsprites[id].y = 136; + id++; + + subsprites[id] = sSubsprite_8614274; + subsprites[id].x = 136; + subsprites[id].y = arg1 + 128; + id++; + + subsprites[id] = sSubsprite_8614278; + subsprites[id].x = arg0 + 128; + subsprites[id].y = arg1 + 128; + id++; + + if (arg0 > 16) + { + for (i = 8; i < arg0 - 8; i += 8) + { + subsprites[id] = sSubsprite_8614264; + subsprites[id].x = i - 120; + subsprites[id].y = 136; + id++; + + subsprites[id] = sSubsprite_8614270; + subsprites[id].x = i - 120; + subsprites[id].y = arg1 + 128; + id++; + } + } + + if (arg1 > 16) + { + for (j = 8; j < arg1 - 8; j += 8) + { + subsprites[id] = sSubsprite_8614268; + subsprites[id].x = 136; + subsprites[id].y = j - 120; + id++; + + subsprites[id] = sSubsprite_861426C; + subsprites[id].x = arg0 + 128; + subsprites[id].y = j - 120; + id++; + } + } +} + +static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct UnkIndicatorsStruct3 *data; + struct SpriteTemplate spriteTemplate; + u8 taskId; + + spriteSheet.data = gUnknown_08614338; + spriteSheet.size = 0x100; + spriteSheet.tag = cursor->tileTag; + LoadCompressedObjectPic(&spriteSheet); + + if (cursor->palTag == 0xFFFF) + { + LoadPalette(gUnknown_086142A8, (16 * cursor->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = gUnknown_086142A8; + spritePal.tag = cursor->palTag; + LoadSpritePalette(&spritePal); + } + + taskId = CreateTask(Task_RedOutlineCursor, 0); + data = (void*) gTasks[taskId].data; + + data->tileTag = cursor->tileTag; + data->palTag = cursor->palTag; + data->subspriteTable.subspriteCount = ListMenuGetRedOutlineCursorSpriteCount(cursor->unk2, cursor->unk4); + data->subspriteTable.subsprites = data->subspritesPtr = Alloc(data->subspriteTable.subspriteCount * 4); + ListMenuSetUpRedOutlineCursorSpriteOamTable(cursor->unk2, cursor->unk4, data->subspritesPtr); + + spriteTemplate = gDummySpriteTemplate; + spriteTemplate.tileTag = cursor->tileTag; + spriteTemplate.paletteTag = cursor->palTag; + + data->spriteId = CreateSprite(&spriteTemplate, cursor->unk0 + 120, cursor->unk1 + 120, 0); + SetSubspriteTables(&gSprites[data->spriteId], &data->subspriteTable); + gSprites[data->spriteId].oam.priority = 0; + gSprites[data->spriteId].subpriority = 0; + gSprites[data->spriteId].subspriteTableNum = 0; + + if (cursor->palTag == 0xFFFF) + { + gSprites[data->spriteId].oam.paletteNum = cursor->palNum; + } + + return taskId; +} + +static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y) +{ + struct UnkIndicatorsStruct3 *data = (void*) gTasks[taskId].data; + + gSprites[data->spriteId].pos1.x = x + 120; + gSprites[data->spriteId].pos1.y = y + 120; +} + +static void ListMenuRemoveRedOutlineCursorObject(u8 taskId) +{ + struct UnkIndicatorsStruct3 *data = (void*) gTasks[taskId].data; + + Free(data->subspritesPtr); + + if (data->tileTag != 0xFFFF) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != 0xFFFF) + FreeSpritePaletteByTag(data->palTag); + + DestroySprite(&gSprites[data->spriteId]); + DestroyTask(taskId); +} + +static void ObjectCB_RedArrowCursor(struct Sprite *sprite) +{ + sprite->pos2.x = gSineTable[(u8)(sprite->data[0])] / 64; + sprite->data[0] += 8; +} + +static void Task_RedArrowCursor(u8 taskId) +{ + +} + +static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct UnkIndicatorsStruct4 *data; + struct SpriteTemplate spriteTemplate; + u8 taskId; + + spriteSheet.data = gUnknown_08614378; + spriteSheet.size = 0x80; + spriteSheet.tag = cursor->tileTag; + LoadCompressedObjectPic(&spriteSheet); + + if (cursor->palTag == 0xFFFF) + { + LoadPalette(gUnknown_086142A8, (16 * cursor->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = gUnknown_086142A8; + spritePal.tag = cursor->palTag; + LoadSpritePalette(&spritePal); + } + + taskId = CreateTask(Task_RedArrowCursor, 0); + data = (void*) gTasks[taskId].data; + + data->tileTag = cursor->tileTag; + data->palTag = cursor->palTag; + + spriteTemplate = gUnknown_08614290; + spriteTemplate.tileTag = cursor->tileTag; + spriteTemplate.paletteTag = cursor->palTag; + + data->field_0 = CreateSprite(&spriteTemplate, cursor->unk0, cursor->unk1, 0); + gSprites[data->field_0].pos2.x = 8; + gSprites[data->field_0].pos2.y = 8; + + if (cursor->palTag == 0xFFFF) + { + gSprites[data->field_0].oam.paletteNum = cursor->palNum; + } + + return taskId; +} + +static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y) +{ + struct UnkIndicatorsStruct4 *data = (void*) gTasks[taskId].data; + + gSprites[data->field_0].pos1.x = x; + gSprites[data->field_0].pos1.y = y; +} + +static void ListMenuRemoveRedArrowCursorObject(u8 taskId) +{ + struct UnkIndicatorsStruct4 *data = (void*) gTasks[taskId].data; + + if (data->tileTag != 0xFFFF) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != 0xFFFF) + FreeSpritePaletteByTag(data->palTag); + + DestroySprite(&gSprites[data->field_0]); + DestroyTask(taskId); +} diff --git a/src/main_menu.c b/src/main_menu.c index 3d6c1df76..3490424af 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -16,7 +16,7 @@ #include "link.h" #include "main.h" #include "menu.h" -#include "menu_indicators.h" +#include "list_menu.h" #include "mystery_event_menu.h" #include "naming_screen.h" #include "option_menu.h" diff --git a/src/mon_markings.c b/src/mon_markings.c index 147872ab6..7f320002d 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -2,7 +2,8 @@ #include "dma3.h" #include "graphics.h" #include "main.h" -#include "menu_indicators.h" +#include "window.h" +#include "list_menu.h" #include "mon_markings.h" #include "constants/songs.h" #include "sound.h" diff --git a/src/player_pc.c b/src/player_pc.c index 2bdf527e7..c10c63dda 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -18,7 +18,6 @@ #include "malloc.h" #include "menu.h" #include "menu_helpers.h" -#include "menu_indicators.h" #include "overworld.h" #include "palette.h" #include "party_menu.h" @@ -43,9 +42,6 @@ struct Struct203BCC4 u8 spriteIds[7]; }; -// extern offset -void (*gFieldCallback)(void); - // static functions static void InitPlayerPCMenu(u8 taskId); static void PlayerPCProcessMenuInput(u8 taskId); diff --git a/src/pokeblock.c b/src/pokeblock.c index f57b2f0c2..216c9e2c5 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -24,7 +24,6 @@ #include "constants/songs.h" #include "sound.h" #include "berry.h" -#include "menu_indicators.h" #include "event_data.h" #include "battle_message.h" #include "safari_zone.h" diff --git a/src/secret_base.c b/src/secret_base.c index e2b7e20f1..66af4d4a2 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -10,7 +10,6 @@ #include "list_menu.h" #include "menu.h" #include "menu_helpers.h" -#include "menu_indicators.h" #include "constants/maps.h" #include "constants/songs.h" #include "constants/species.h" diff --git a/sym_ewram.txt b/sym_ewram.txt index 4d7ae4f19..80fbde512 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -836,13 +836,7 @@ gUnknown_0203CE54: @ 203CE54 .align 2 .include "src/item_menu.o" - -gUnknown_0203CE84: @ 203CE84 - .space 0x8 - -gUnknown_0203CE8C: @ 203CE8C - .space 0x10 - + .include "src/list_menu.o" .include "src/unk_text_util.o" .include "src/item_icon.o" |