diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-07-03 12:40:04 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-07-07 01:46:05 +0800 |
commit | 503086bc7df2a832f49da321287e6b12b8e138fa (patch) | |
tree | 6f66f51376a6067e186f156ca7da60169606855e | |
parent | d97925df0edcac9212ba827b31ff75c7968703f3 (diff) |
finished menu_indicators
-rw-r--r-- | asm/battle_setup.s | 2 | ||||
-rw-r--r-- | asm/field_control_avatar.s | 6 | ||||
-rw-r--r-- | asm/menu_indicators.s | 1185 | ||||
-rw-r--r-- | data/menu_indicators.s | 46 | ||||
-rw-r--r-- | graphics/interface/red_arrow.pal | 19 | ||||
-rw-r--r-- | graphics/interface/red_arrow.png | bin | 0 -> 167 bytes | |||
-rw-r--r-- | graphics/interface/red_arrow_other.png | bin | 0 -> 197 bytes | |||
-rw-r--r-- | graphics/interface/selector_outline.png | bin | 0 -> 156 bytes | |||
-rw-r--r-- | include/field_poison.h | 2 | ||||
-rw-r--r-- | include/graphics.h | 16 | ||||
-rw-r--r-- | include/list_menu.h | 30 | ||||
-rw-r--r-- | include/menu_indicators.h | 53 | ||||
-rw-r--r-- | include/pokemon.h | 4 | ||||
-rw-r--r-- | include/sprite.h | 28 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/menu_indicators.c | 626 | ||||
-rw-r--r-- | src/mevent_8145654.c | 2 | ||||
-rw-r--r-- | src/pokemon.c | 4 | ||||
-rw-r--r-- | sym_ewram.txt | 4 |
19 files changed, 762 insertions, 1269 deletions
diff --git a/asm/battle_setup.s b/asm/battle_setup.s index 825367d05..db8b366b4 100644 --- a/asm/battle_setup.s +++ b/asm/battle_setup.s @@ -46,7 +46,7 @@ _0807F65E: ldr r0, _0807F68C @ =sub_800FD9C bl SetMainCallback2 bl sub_806D7E8 - bl DoPoisonFieldEffect_timer_set + bl ClearPoisonStepCounter adds r0, r5, 0 bl DestroyTask _0807F686: diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s index 226f65fd7..2eee6da2f 100644 --- a/asm/field_control_avatar.s +++ b/asm/field_control_avatar.s @@ -1901,8 +1901,8 @@ _0806D780: .4byte 0x00004021 _0806D784: .4byte gPlayerParty thumb_func_end AdjustFriendship_step - thumb_func_start DoPoisonFieldEffect_timer_set -DoPoisonFieldEffect_timer_set: @ 806D788 + thumb_func_start ClearPoisonStepCounter +ClearPoisonStepCounter: @ 806D788 push {lr} ldr r0, _0806D798 @ =0x00004022 movs r1, 0 @@ -1911,7 +1911,7 @@ DoPoisonFieldEffect_timer_set: @ 806D788 bx r0 .align 2, 0 _0806D798: .4byte 0x00004022 - thumb_func_end DoPoisonFieldEffect_timer_set + thumb_func_end ClearPoisonStepCounter thumb_func_start DoPoisonFieldEffect_step DoPoisonFieldEffect_step: @ 806D79C diff --git a/asm/menu_indicators.s b/asm/menu_indicators.s deleted file mode 100644 index d7b78b1b2..000000000 --- a/asm/menu_indicators.s +++ /dev/null @@ -1,1185 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8133904 -sub_8133904: @ 8133904 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08133916 - cmp r0, 0x1 - beq _0813392A - b _08133984 -_08133916: - 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 _08133984 -_0813392A: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0813393A - cmp r0, 0x1 - beq _08133960 - ldrh r2, [r4, 0x38] - b _0813397E -_0813393A: - movs r0, 0x34 - ldrsh r3, [r4, r0] - ldr r1, _0813395C @ =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 _08133954 - adds r0, 0xFF -_08133954: - asrs r0, 8 - strh r0, [r4, 0x24] - b _0813397E - .align 2, 0 -_0813395C: .4byte gSineTable -_08133960: - movs r0, 0x34 - ldrsh r3, [r4, r0] - ldr r1, _0813398C @ =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 _0813397A - adds r0, 0xFF -_0813397A: - asrs r0, 8 - strh r0, [r4, 0x26] -_0813397E: - ldrh r0, [r4, 0x36] - adds r0, r2, r0 - strh r0, [r4, 0x38] -_08133984: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813398C: .4byte gSineTable - thumb_func_end sub_8133904 - - thumb_func_start AddScrollIndicatorArrowObject -AddScrollIndicatorArrowObject: @ 8133990 - 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, _08133A14 @ =gUnknown_84632A4 - 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, _08133A18 @ =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, _08133A1C @ =gUnknown_846325C - 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 - .align 2, 0 -_08133A14: .4byte gUnknown_84632A4 -_08133A18: .4byte gSprites -_08133A1C: .4byte gUnknown_846325C - thumb_func_end AddScrollIndicatorArrowObject - - thumb_func_start AddScrollIndicatorArrowPair -AddScrollIndicatorArrowPair: @ 8133A20 - 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, _08133A6C @ =gUnknown_8463328 - str r0, [sp, 0x4] - ldr r5, _08133A70 @ =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, _08133A74 @ =0x0000ffff - ands r0, r4 - orrs r0, r1 - str r0, [sp, 0x8] - add r0, sp, 0x4 - bl LoadCompressedSpriteSheet - ldrh r2, [r6, 0xC] - cmp r2, r4 - bne _08133A7C - ldr r0, _08133A78 @ =gUnknown_8463308 - 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 _08133A8E - .align 2, 0 -_08133A6C: .4byte gUnknown_8463328 -_08133A70: .4byte 0xffff0000 -_08133A74: .4byte 0x0000ffff -_08133A78: .4byte gUnknown_8463308 -_08133A7C: - ldr r0, _08133B2C @ =gUnknown_8463308 - str r0, [sp, 0xC] - add r0, sp, 0xC - ldr r1, [r0, 0x4] - ands r1, r5 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadSpritePalette -_08133A8E: - ldr r0, _08133B30 @ =sub_8133BA4 - 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, _08133B34 @ =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, _08133B38 @ =0x0000ffff - cmp r1, r0 - bne _08133B1C - ldr r5, _08133B3C @ =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] -_08133B1C: - mov r0, r8 - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08133B2C: .4byte gUnknown_8463308 -_08133B30: .4byte sub_8133BA4 -_08133B34: .4byte gTasks+0x8 -_08133B38: .4byte 0x0000ffff -_08133B3C: .4byte gSprites - thumb_func_end AddScrollIndicatorArrowPair - - thumb_func_start AddScrollIndicatorArrowPairParameterized -AddScrollIndicatorArrowPairParameterized: @ 8133B40 - push {r4,lr} - adds r4, r1, 0 - subs r0, 0x2 - cmp r0, 0x1 - bhi _08133B64 - ldr r0, _08133B60 @ =gUnknown_203B130 - 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 _08133B76 - .align 2, 0 -_08133B60: .4byte gUnknown_203B130 -_08133B64: - ldr r0, _08133BA0 @ =gUnknown_203B130 - 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] -_08133B76: - 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 - .align 2, 0 -_08133BA0: .4byte gUnknown_203B130 - thumb_func_end AddScrollIndicatorArrowPairParameterized - - thumb_func_start sub_8133BA4 -sub_8133BA4: @ 8133BA4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08133BD4 @ =gTasks+0x8 - adds r4, r1, r0 - ldr r0, [r4, 0x4] - ldrh r5, [r0] - ldrh r0, [r4, 0x8] - cmp r5, r0 - bne _08133BDC - ldr r3, _08133BD8 @ =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 _08133BF2 - .align 2, 0 -_08133BD4: .4byte gTasks+0x8 -_08133BD8: .4byte gSprites -_08133BDC: - ldr r3, _08133C10 @ =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 -_08133BF2: - strb r1, [r0] - ldrh r0, [r4, 0xA] - cmp r5, r0 - bne _08133C14 - 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 _08133C28 - .align 2, 0 -_08133C10: .4byte gSprites -_08133C14: - 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 -_08133C28: - strb r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8133BA4 - - thumb_func_start RemoveScrollIndicatorArrowPair -RemoveScrollIndicatorArrowPair: @ 8133C30 - 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, _08133C84 @ =gTasks+0x8 - adds r5, r0, r1 - ldrh r0, [r5, 0xE] - ldr r4, _08133C88 @ =0x0000ffff - cmp r0, r4 - beq _08133C4E - bl FreeSpriteTilesByTag -_08133C4E: - ldrh r0, [r5, 0x10] - cmp r0, r4 - beq _08133C58 - bl FreeSpritePaletteByTag -_08133C58: - ldrb r1, [r5, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08133C8C @ =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 - .align 2, 0 -_08133C84: .4byte gTasks+0x8 -_08133C88: .4byte 0x0000ffff -_08133C8C: .4byte gSprites - thumb_func_end RemoveScrollIndicatorArrowPair - - thumb_func_start ListMenuAddCursorObjectInternal -ListMenuAddCursorObjectInternal: @ 8133C90 - push {lr} - cmp r1, 0 - beq _08133C9A - cmp r1, 0x1 - beq _08133CA0 -_08133C9A: - bl ListMenuAddRedOutlineCursorObject - b _08133CA4 -_08133CA0: - bl ListMenuAddRedArrowCursorObject -_08133CA4: - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end ListMenuAddCursorObjectInternal - - thumb_func_start ListMenuUpdateCursorObject -ListMenuUpdateCursorObject: @ 8133CAC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - cmp r3, 0 - beq _08133CC4 - cmp r3, 0x1 - beq _08133CCA - b _08133CCE -_08133CC4: - bl ListMenuUpdateRedOutlineCursorObject - b _08133CCE -_08133CCA: - bl ListMenuUpdateRedArrowCursorObject -_08133CCE: - pop {r0} - bx r0 - thumb_func_end ListMenuUpdateCursorObject - - thumb_func_start ListMenuRemoveCursorObject -ListMenuRemoveCursorObject: @ 8133CD4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r1, 0 - beq _08133CE4 - cmp r1, 0x1 - beq _08133CEA - b _08133CEE -_08133CE4: - bl ListMenuRemoveRedOutlineCursorObject - b _08133CEE -_08133CEA: - bl ListMenuRemoveRedArrowCursorObject -_08133CEE: - pop {r0} - bx r0 - thumb_func_end ListMenuRemoveCursorObject - - thumb_func_start nullsub_94 -nullsub_94: @ 8133CF4 - bx lr - thumb_func_end nullsub_94 - - thumb_func_start ListMenuGetRedOutlineCursorSpriteCount -ListMenuGetRedOutlineCursorSpriteCount: @ 8133CF8 - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - movs r3, 0x4 - cmp r0, 0x10 - bls _08133D18 - movs r2, 0x8 - subs r0, 0x8 - cmp r2, r0 - bge _08133D18 -_08133D10: - adds r3, 0x2 - adds r2, 0x8 - cmp r2, r0 - blt _08133D10 -_08133D18: - cmp r1, 0x10 - bls _08133D2C - movs r2, 0x8 - subs r1, 0x8 - cmp r2, r1 - bge _08133D2C -_08133D24: - adds r3, 0x2 - adds r2, 0x8 - cmp r2, r1 - blt _08133D24 -_08133D2C: - lsls r0, r3, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end ListMenuGetRedOutlineCursorSpriteCount - - thumb_func_start ListMenuSetUpRedOutlineCursorSpriteOamTable -ListMenuSetUpRedOutlineCursorSpriteOamTable: @ 8133D34 - 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, _08133E18 @ =gUnknown_84632BC - ldr r0, [r0] - str r0, [r3] - movs r1, 0x88 - strb r1, [r3] - strb r1, [r3, 0x1] - ldr r0, _08133E1C @ =gUnknown_84632C0 - ldr r0, [r0] - str r0, [r3, 0x4] - mov r2, r8 - adds r2, 0x80 - strb r2, [r3, 0x4] - strb r1, [r3, 0x5] - ldr r0, _08133E20 @ =gUnknown_84632D4 - ldr r0, [r0] - str r0, [r3, 0x8] - strb r1, [r3, 0x8] - mov r4, r9 - adds r4, 0x80 - strb r4, [r3, 0x9] - ldr r0, _08133E24 @ =gUnknown_84632D8 - 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 _08133DC8 - movs r2, 0x8 - mov r5, r8 - subs r5, 0x8 - cmp r2, r5 - bge _08133DC8 - ldr r0, _08133E28 @ =gUnknown_84632C4 - ldr r0, [r0] - str r0, [sp] - ldr r0, _08133E2C @ =gUnknown_84632D0 - ldr r6, [r0] - adds r1, r3, 0 - adds r1, 0x10 - movs r7, 0x88 - mov r10, r7 -_08133DA6: - 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 _08133DA6 -_08133DC8: - mov r2, r9 - cmp r2, 0x10 - bls _08133E06 - movs r1, 0x8 - mov r4, r9 - subs r4, 0x8 - cmp r1, r4 - bge _08133E06 - ldr r0, _08133E30 @ =gUnknown_84632C8 - ldr r6, [r0] - ldr r0, _08133E34 @ =gUnknown_84632CC - ldr r5, [r0] - mov r7, r12 - lsls r0, r7, 2 - adds r2, r0, r3 - movs r7, 0x88 - mov r3, r8 - adds r3, 0x80 -_08133DEC: - 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 _08133DEC -_08133E06: - 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 -_08133E18: .4byte gUnknown_84632BC -_08133E1C: .4byte gUnknown_84632C0 -_08133E20: .4byte gUnknown_84632D4 -_08133E24: .4byte gUnknown_84632D8 -_08133E28: .4byte gUnknown_84632C4 -_08133E2C: .4byte gUnknown_84632D0 -_08133E30: .4byte gUnknown_84632C8 -_08133E34: .4byte gUnknown_84632CC - thumb_func_end ListMenuSetUpRedOutlineCursorSpriteOamTable - - thumb_func_start ListMenuAddRedOutlineCursorObject -ListMenuAddRedOutlineCursorObject: @ 8133E38 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - adds r6, r0, 0 - ldr r0, _08133E84 @ =gUnknown_8463398 - str r0, [sp, 0x18] - ldr r5, _08133E88 @ =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, _08133E8C @ =0x0000ffff - ands r1, r3 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadCompressedSpriteSheet - ldrh r2, [r6, 0x8] - ldr r7, _08133E8C @ =0x0000ffff - cmp r2, r7 - bne _08133E94 - ldr r0, _08133E90 @ =gUnknown_8463308 - 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 _08133EA6 - .align 2, 0 -_08133E84: .4byte gUnknown_8463398 -_08133E88: .4byte 0xffff0000 -_08133E8C: .4byte 0x0000ffff -_08133E90: .4byte gUnknown_8463308 -_08133E94: - ldr r0, _08133F8C @ =gUnknown_8463308 - str r0, [sp, 0x20] - add r0, sp, 0x20 - ldr r1, [r0, 0x4] - ands r1, r5 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadSpritePalette -_08133EA6: - ldr r0, _08133F90 @ =nullsub_94 - 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, _08133F94 @ =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, _08133F98 @ =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, _08133F9C @ =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, _08133FA0 @ =0x0000ffff - cmp r1, r0 - bne _08133F7E - 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] -_08133F7E: - adds r0, r4, 0 - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08133F8C: .4byte gUnknown_8463308 -_08133F90: .4byte nullsub_94 -_08133F94: .4byte gTasks+0x8 -_08133F98: .4byte gDummySpriteTemplate -_08133F9C: .4byte gSprites -_08133FA0: .4byte 0x0000ffff - thumb_func_end ListMenuAddRedOutlineCursorObject - - thumb_func_start ListMenuUpdateRedOutlineCursorObject -ListMenuUpdateRedOutlineCursorObject: @ 8133FA4 - 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, _08133FE0 @ =gTasks+0x8 - adds r3, r0 - ldr r5, _08133FE4 @ =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 - .align 2, 0 -_08133FE0: .4byte gTasks+0x8 -_08133FE4: .4byte gSprites - thumb_func_end ListMenuUpdateRedOutlineCursorObject - - thumb_func_start ListMenuRemoveRedOutlineCursorObject -ListMenuRemoveRedOutlineCursorObject: @ 8133FE8 - 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, _08134034 @ =gTasks+0x8 - adds r4, r0, r1 - ldr r0, [r4, 0x8] - bl Free - ldrh r0, [r4, 0xE] - ldr r6, _08134038 @ =0x0000ffff - cmp r0, r6 - beq _0813400C - bl FreeSpriteTilesByTag -_0813400C: - ldrh r0, [r4, 0x10] - cmp r0, r6 - beq _08134016 - bl FreeSpritePaletteByTag -_08134016: - ldrb r1, [r4, 0xC] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0813403C @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0 - bl DestroyTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08134034: .4byte gTasks+0x8 -_08134038: .4byte 0x0000ffff -_0813403C: .4byte gSprites - thumb_func_end ListMenuRemoveRedOutlineCursorObject - - thumb_func_start ObjectCB_RedArrowCursor -ObjectCB_RedArrowCursor: @ 8134040 - push {lr} - adds r2, r0, 0 - ldr r1, _08134068 @ =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 _08134058 - adds r0, 0x3F -_08134058: - asrs r0, 6 - strh r0, [r2, 0x24] - adds r0, r3, 0 - adds r0, 0x8 - strh r0, [r2, 0x2E] - pop {r0} - bx r0 - .align 2, 0 -_08134068: .4byte gSineTable - thumb_func_end ObjectCB_RedArrowCursor - - thumb_func_start nullsub_95 -nullsub_95: @ 813406C - bx lr - thumb_func_end nullsub_95 - - thumb_func_start ListMenuAddRedArrowCursorObject -ListMenuAddRedArrowCursorObject: @ 8134070 - push {r4-r7,lr} - sub sp, 0x28 - adds r5, r0, 0 - ldr r0, _081340B4 @ =gUnknown_84633D8 - str r0, [sp, 0x18] - ldr r6, _081340B8 @ =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, _081340BC @ =0x0000ffff - ands r1, r4 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadCompressedSpriteSheet - ldrh r2, [r5, 0x8] - cmp r2, r4 - bne _081340C4 - ldr r0, _081340C0 @ =gUnknown_8463308 - 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 _081340D6 - .align 2, 0 -_081340B4: .4byte gUnknown_84633D8 -_081340B8: .4byte 0xffff0000 -_081340BC: .4byte 0x0000ffff -_081340C0: .4byte gUnknown_8463308 -_081340C4: - ldr r0, _08134160 @ =gUnknown_8463308 - str r0, [sp, 0x20] - add r0, sp, 0x20 - ldr r1, [r0, 0x4] - ands r1, r6 - orrs r1, r2 - str r1, [r0, 0x4] - bl LoadSpritePalette -_081340D6: - ldr r0, _08134164 @ =nullsub_95 - 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, _08134168 @ =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, _0813416C @ =gUnknown_84632F0 - 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, _08134170 @ =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, _08134174 @ =0x0000ffff - cmp r1, r0 - bne _08134156 - 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] -_08134156: - adds r0, r6, 0 - add sp, 0x28 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08134160: .4byte gUnknown_8463308 -_08134164: .4byte nullsub_95 -_08134168: .4byte gTasks+0x8 -_0813416C: .4byte gUnknown_84632F0 -_08134170: .4byte gSprites -_08134174: .4byte 0x0000ffff - thumb_func_end ListMenuAddRedArrowCursorObject - - thumb_func_start ListMenuUpdateRedArrowCursorObject -ListMenuUpdateRedArrowCursorObject: @ 8134178 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r3, r0, 2 - adds r3, r0 - lsls r3, 3 - ldr r0, _081341A8 @ =gTasks+0x8 - adds r3, r0 - ldr r5, _081341AC @ =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 - .align 2, 0 -_081341A8: .4byte gTasks+0x8 -_081341AC: .4byte gSprites - thumb_func_end ListMenuUpdateRedArrowCursorObject - - thumb_func_start ListMenuRemoveRedArrowCursorObject -ListMenuRemoveRedArrowCursorObject: @ 81341B0 - 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, _081341F4 @ =gTasks+0x8 - adds r4, r0, r1 - ldrh r0, [r4, 0x2] - ldr r6, _081341F8 @ =0x0000ffff - cmp r0, r6 - beq _081341CE - bl FreeSpriteTilesByTag -_081341CE: - ldrh r0, [r4, 0x4] - cmp r0, r6 - beq _081341D8 - bl FreeSpritePaletteByTag -_081341D8: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081341FC @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0 - bl DestroyTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081341F4: .4byte gTasks+0x8 -_081341F8: .4byte 0x0000ffff -_081341FC: .4byte gSprites - 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 dd8911c7d..000000000 --- a/data/menu_indicators.s +++ /dev/null @@ -1,46 +0,0 @@ - .section .rodata - .align 2 -gUnknown_846325C:: @ 846325C - .incbin "baserom.gba", 0x46325C, 0x48 - -gUnknown_84632A4:: @ 84632A4 - .incbin "baserom.gba", 0x4632A4, 0x18 - -gUnknown_84632BC:: @ 84632BC - .incbin "baserom.gba", 0x4632BC, 0x4 - -gUnknown_84632C0:: @ 84632C0 - .incbin "baserom.gba", 0x4632C0, 0x4 - -gUnknown_84632C4:: @ 84632C4 - .incbin "baserom.gba", 0x4632C4, 0x4 - -gUnknown_84632C8:: @ 84632C8 - .incbin "baserom.gba", 0x4632C8, 0x4 - -gUnknown_84632CC:: @ 84632CC - .incbin "baserom.gba", 0x4632CC, 0x4 - -gUnknown_84632D0:: @ 84632D0 - .incbin "baserom.gba", 0x4632D0, 0x4 - -gUnknown_84632D4:: @ 84632D4 - .incbin "baserom.gba", 0x4632D4, 0x4 - -gUnknown_84632D8:: @ 84632D8 - .incbin "baserom.gba", 0x4632D8, 0x18 - -gUnknown_84632F0:: @ 84632F0 - .incbin "baserom.gba", 0x4632F0, 0x18 - -gUnknown_8463308:: @ 8463308 - .incbin "baserom.gba", 0x463308, 0x20 - -gUnknown_8463328:: @ 8463328 - .incbin "baserom.gba", 0x463328, 0x70 - -gUnknown_8463398:: @ 8463398 - .incbin "baserom.gba", 0x463398, 0x40 - -gUnknown_84633D8:: @ 84633D8 - .incbin "baserom.gba", 0x4633D8, 0x44 diff --git a/graphics/interface/red_arrow.pal b/graphics/interface/red_arrow.pal new file mode 100644 index 000000000..f820b52bb --- /dev/null +++ b/graphics/interface/red_arrow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 164 197 +255 82 0 +131 32 0 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/interface/red_arrow.png b/graphics/interface/red_arrow.png Binary files differnew file mode 100644 index 000000000..91c8268b7 --- /dev/null +++ b/graphics/interface/red_arrow.png diff --git a/graphics/interface/red_arrow_other.png b/graphics/interface/red_arrow_other.png Binary files differnew file mode 100644 index 000000000..33fcf44b9 --- /dev/null +++ b/graphics/interface/red_arrow_other.png diff --git a/graphics/interface/selector_outline.png b/graphics/interface/selector_outline.png Binary files differnew file mode 100644 index 000000000..d9f3e1b8d --- /dev/null +++ b/graphics/interface/selector_outline.png diff --git a/include/field_poison.h b/include/field_poison.h index 4887fa27a..97d5f59ed 100644 --- a/include/field_poison.h +++ b/include/field_poison.h @@ -6,7 +6,7 @@ enum { FLDPSN_NONE, FLDPSN_PSN, - FLDPSN_FNT + FLDPSN_FNT, }; void ExecuteWhiteOut(void); diff --git a/include/graphics.h b/include/graphics.h index 1b2913164..e12a6755b 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -202,11 +202,11 @@ extern const u8 gItemPcBgPals[]; extern const u8 gItemPcTilemap[]; // item_menu_icons -extern const u8 gUnknown_8E8362C[]; -extern const u8 gUnknown_8E83DBC[]; -extern const u8 gUnknown_8E84560[]; -extern const u8 gFile_graphics_interface_bag_swap_sheet[]; -extern const u8 gFile_graphics_interface_bag_swap_palette[]; +extern const u32 gUnknown_8E8362C[]; +extern const u32 gUnknown_8E83DBC[]; +extern const u32 gUnknown_8E84560[]; +extern const u32 gFile_graphics_interface_bag_swap_sheet[]; +extern const u32 gFile_graphics_interface_bag_swap_palette[]; extern const u8 gFile_graphics_items_icons_question_mark_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_question_mark_palette[]; extern const u8 gFile_graphics_items_icons_master_ball_sheet[]; @@ -266,12 +266,10 @@ extern const u8 gFile_graphics_items_icon_palettes_soda_pop_palette[]; extern const u8 gFile_graphics_items_icons_lemonade_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_lemonade_palette[]; extern const u8 gFile_graphics_items_icons_moomoo_milk_sheet[]; -extern const u8 gFile_graphics_items_icon_palettes_moomoo_milk_palette[]; -extern const u8 gFile_graphics_items_icons_powder_sheet[]; +extern const u8 gFile_graphics_items_icon_palettes_moomoo_milk_palette[];; extern const u8 gFile_graphics_items_icon_palettes_energy_powder_palette[]; extern const u8 gFile_graphics_items_icons_energy_root_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_energy_root_palette[]; -extern const u8 gFile_graphics_items_icons_powder_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_heal_powder_palette[]; extern const u8 gFile_graphics_items_icons_revival_herb_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_revival_herb_palette[]; @@ -299,7 +297,7 @@ extern const u8 gFile_graphics_items_icons_berry_juice_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_berry_juice_palette[]; extern const u8 gFile_graphics_items_icons_sacred_ash_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_sacred_ash_palette[]; -extern const u8 gFile_graphics_items_icons_powder_sheet[]; +extern const u32 gFile_graphics_items_icons_powder_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_shoal_salt_palette[]; extern const u8 gFile_graphics_items_icons_shoal_shell_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_shell_palette[]; diff --git a/include/list_menu.h b/include/list_menu.h index 290b1d925..5614580eb 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -4,9 +4,21 @@ #include "global.h" #include "window.h" -// Exported type declarations +#define LIST_NOTHING_CHOSEN -1 +#define LIST_CANCEL -2 +#define LIST_HEADER -3 -// Exported RAM declarations +#define LIST_NO_MULTIPLE_SCROLL 0 +#define LIST_MULTIPLE_SCROLL_DPAD 1 +#define LIST_MULTIPLE_SCROLL_L_R 2 + +enum +{ + SCROLL_ARROW_LEFT, + SCROLL_ARROW_RIGHT, + SCROLL_ARROW_UP, + SCROLL_ARROW_DOWN, +}; struct ListMenuItem { @@ -38,8 +50,9 @@ struct ListMenuTemplate u8 cursorKind:2; // x40, x80 }; -struct ListMenu { - struct ListMenuTemplate _template; +struct ListMenu +{ + struct ListMenuTemplate template; u16 scrollOffset; u16 selectedRow; u8 unk_1C; @@ -48,6 +61,15 @@ struct ListMenu { u8 unk_1F; }; +struct ListMenuWindowRect +{ + u8 x; + u8 y; + u8 width; + u8 height; + u8 palNum; +}; + extern struct ListMenuTemplate gUnknown_03006310; extern struct ListMenuTemplate gMultiuseListMenuTemplate; diff --git a/include/menu_indicators.h b/include/menu_indicators.h index 76f25224c..fb6b65ecc 100644 --- a/include/menu_indicators.h +++ b/include/menu_indicators.h @@ -7,6 +7,18 @@ // Exported RAM declarations +struct ScrollIndicatorPair +{ + u8 field_0; + u16 *scrollOffset; + u16 fullyUpThreshold; + u16 fullyDownThreshold; + u8 topSpriteId; + u8 bottomSpriteId; + u16 tileTag; + u16 palTag; +}; + struct ScrollArrowsTemplate { u8 firstArrowType; @@ -22,9 +34,48 @@ struct ScrollArrowsTemplate u8 palNum; }; +struct ScrollIndicatorTemplate +{ + u8 animNum:4; + u8 bounceDir:4; + u8 multiplier; + s16 frequency; +}; + +struct CursorStruct +{ + u8 left; + u8 top; + u16 rowWidth; + u16 rowHeight; + u16 tileTag; + u16 palTag; + u8 palNum; +}; + +struct RedOutlineCursor +{ + struct SubspriteTable subspriteTable; + struct Subsprite *subspritesPtr; + u8 spriteId; + u16 tileTag; + u16 palTag; +}; + +struct RedArrowCursor +{ + u8 spriteId; + u16 tileTag; + u16 palTag; +}; + // Exported ROM declarations -u8 AddScrollIndicatorArrowPairParameterized(u8, u8, u8, u8, s32, u16, u16, u16 *); +u8 AddScrollIndicatorArrowPairParameterized(u32 arrowType, s32 commonPos, s32 firstPos, s32 secondPos, s32 fullyDownThreshold, s32 tileTag, s32 palTag, u16 *scrollOffset); u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate * template, u16 * a1); void RemoveScrollIndicatorArrowPair(u8); +u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind); +u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor); +void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y); +void ListMenuRemoveRedOutlineCursorObject(u8 taskId); #endif //GUARD_MENU_INDICATORS_H diff --git a/include/pokemon.h b/include/pokemon.h index ed0108159..558eedc67 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -625,8 +625,8 @@ u32 CanMonLearnTMHM(struct Pokemon *, u8); u32 CanSpeciesLearnTMHM(u16 species, u8 tm); u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves); void ClearBattleMonForms(void); -const u8 *GetMonFrontSpritePal(struct Pokemon *mon); -const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16, u32, u32); +const u32 *GetMonFrontSpritePal(struct Pokemon *mon); +const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16, u32, u32); const struct CompressedSpritePalette *sub_80409C8(u16, u32, u32); bool8 IsOtherTrainer(u32, u8 *); void SetWildMonHeldItem(void); diff --git a/include/sprite.h b/include/sprite.h index 5fa85ee21..27e5dc852 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -4,28 +4,30 @@ #include "global.h" #define MAX_SPRITES 64 +#define SPRITE_INVALID_TAG 0xFFFF struct SpriteSheet { - const u8 *data; // Raw uncompressed pixel data + const void *data; // Raw uncompressed pixel data u16 size; u16 tag; }; struct CompressedSpriteSheet { - const u8 *data; // LZ77 compressed pixel data + const u32 *data; // LZ77 compressed pixel data u16 size; // Uncompressed size of pixel data u16 tag; }; struct SpriteFrameImage { - const u8 *data; + const void *data; u16 size; }; #define obj_frame_tiles(ptr) {.data = (u8 *)ptr, .size = sizeof ptr} +#define overworld_frame(ptr, width, height, frame) {.data = (u8 *)ptr + (width * height * frame * 64)/2, .size = (width * height * 64)/2} struct SpritePalette { @@ -35,7 +37,7 @@ struct SpritePalette struct CompressedSpritePalette { - const u8 *data; // LZ77 compressed palette data + const u32 *data; // LZ77 compressed palette data u16 tag; }; @@ -102,6 +104,12 @@ struct AffineAnimJumpCmd u16 target; }; +struct AffineAnimEndCmdAlt +{ + s16 type; + u16 val; +}; + union AffineAnimCmd { s16 type; @@ -126,6 +134,8 @@ union AffineAnimCmd {.loop = {.type = AFFINEANIMCMDTYPE_LOOP, .count = _count}} #define AFFINEANIMCMD_JUMP(_target) \ {.jump = {.type = AFFINEANIMCMDTYPE_JUMP, .target = _target}} +#define AFFINEANIMCMD_END_ALT(_val) \ + {.end = {.type = AFFINEANIMCMDTYPE_END, .val = _val}} struct AffineAnimState { @@ -163,6 +173,8 @@ struct SubspriteTable struct Sprite; +typedef void (*SpriteCallback)(struct Sprite *); + struct SpriteTemplate { u16 tileTag; @@ -171,7 +183,7 @@ struct SpriteTemplate const union AnimCmd *const *anims; const struct SpriteFrameImage *images; const union AffineAnimCmd *const *affineAnims; - void (*callback)(struct Sprite *); + SpriteCallback callback; }; struct Sprite @@ -182,7 +194,7 @@ struct Sprite /*0x10*/ const union AffineAnimCmd *const *affineAnims; /*0x14*/ const struct SpriteTemplate *template; /*0x18*/ const struct SubspriteTable *subspriteTables; - /*0x1C*/ void (*callback)(struct Sprite *); + /*0x1C*/ SpriteCallback callback; /*0x20*/ struct Coords16 pos1; /*0x24*/ struct Coords16 pos2; @@ -232,14 +244,12 @@ struct OamMatrix s16 d; }; -typedef void (*SpriteCallback)(struct Sprite *); - extern const struct OamData gDummyOamData; extern const union AnimCmd *const gDummySpriteAnimTable[]; extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; - +extern const struct SpriteTemplate gDummySpriteTemplate; extern struct Sprite gSprites[]; void ResetSpriteData(void); diff --git a/ld_script.txt b/ld_script.txt index 1efef6267..ca5115630 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -246,7 +246,7 @@ SECTIONS { src/menu2.o(.text); src/oak_speech.o(.text); src/tm_case.o(.text); - asm/menu_indicators.o(.text); + src/menu_indicators.o(.text); asm/pokedex_area_markers.o(.text); asm/pokemon_summary_screen.o(.text); src/help_system.o(.text); @@ -437,7 +437,7 @@ SECTIONS { src/menu2.o(.rodata); src/oak_speech.o(.rodata); src/tm_case.o(.rodata); - data/menu_indicators.o(.rodata); + src/menu_indicators.o(.rodata); data/pokedex_area_markers.o(.rodata); data/pokemon_summary_screen.o(.rodata); src/help_system.o(.rodata); diff --git a/src/menu_indicators.c b/src/menu_indicators.c new file mode 100644 index 000000000..7b7fc2b27 --- /dev/null +++ b/src/menu_indicators.c @@ -0,0 +1,626 @@ +#include "global.h" +#include "malloc.h" +#include "main.h" +#include "task.h" +#include "decompress.h" +#include "palette.h" +#include "strings.h" +#include "sprite.h" +#include "window.h" +#include "trig.h" +#include "text_window.h" +#include "list_menu.h" +#include "menu_indicators.h" + +static EWRAM_DATA struct ScrollArrowsTemplate sTempScrollArrowTemplate = {0}; + +static void SpriteCallback_ScrollIndicatorArrow(struct Sprite *sprite); +static void SpriteCallback_RedArrowCursor(struct Sprite *sprite); +static void Task_ScrollIndicatorArrowPair(u8 taskId); +static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor); +static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y); +static void ListMenuRemoveRedArrowCursorObject(u8 taskId); + +static const struct ScrollIndicatorTemplate sScrollIndicatorTemplates[] = +{ + { + .animNum = 0, + .bounceDir = 0, + .multiplier = 2, + .frequency = 8, + }, + { + .animNum = 1, + .bounceDir = 0, + .multiplier = 2, + .frequency = -8, + }, + { + .animNum = 2, + .bounceDir = 1, + .multiplier = 2, + .frequency = 8, + }, + { + .animNum = 3, + .bounceDir = 1, + .multiplier = 2, + .frequency = -8, + }, +}; + +static const struct OamData sOamData_ScrollArrowIndicator = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_ScrollArrowIndicator0[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_ScrollArrowIndicator1[] = +{ + ANIMCMD_FRAME(0, 30, 1, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_ScrollArrowIndicator2[] = +{ + ANIMCMD_FRAME(4, 30), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_ScrollArrowIndicator3[] = +{ + ANIMCMD_FRAME(4, 30, 0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_ScrollArrowIndicator[] = +{ + sSpriteAnim_ScrollArrowIndicator0, + sSpriteAnim_ScrollArrowIndicator1, + sSpriteAnim_ScrollArrowIndicator2, + sSpriteAnim_ScrollArrowIndicator3, +}; + +static const struct SpriteTemplate sSpriteTemplate_ScrollArrowIndicator = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_ScrollArrowIndicator, + .anims = sSpriteAnimTable_ScrollArrowIndicator, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_ScrollIndicatorArrow, +}; + +static const struct Subsprite sSubsprite_RedOutline1 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 0, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_RedOutline2 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 1, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_RedOutline3 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 2, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_RedOutline4 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 3, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_RedOutline5 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 4, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_RedOutline6 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 5, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_RedOutline7 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 6, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_RedOutline8 = +{ + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 7, + .priority = 0, +}; + +static const struct OamData sOamData_RedArrowCursor = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_RedArrowCursor[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_RedArrowCursor[] = { sSpriteAnim_RedArrowCursor }; + +static const struct SpriteTemplate sSpriteTemplate_RedArrowCursor = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_RedArrowCursor, + .anims = sSpriteAnimTable_RedArrowCursor, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_RedArrowCursor, +}; + +static const u16 sRedArrowPal[] = INCBIN_U16("graphics/interface/red_arrow.gbapal"); +static const u32 sRedArrowOtherGfx[] = INCBIN_U32("graphics/interface/red_arrow_other.4bpp.lz"); +static const u32 sSelectorOutlineGfx[] = INCBIN_U32("graphics/interface/selector_outline.4bpp.lz"); +static const u32 sRedArrowGfx[] = INCBIN_U32("graphics/interface/red_arrow.4bpp.lz"); + +#define tState data[0] +#define tAnimNum data[1] +#define tBounceDir data[2] +#define tMultiplier data[3] +#define tFrequency data[4] +#define tSinePos data[5] + +static void SpriteCallback_ScrollIndicatorArrow(struct Sprite *sprite) +{ + s32 multiplier; + + switch (sprite->tState) + { + case 0: + StartSpriteAnim(sprite, sprite->tAnimNum); + sprite->tState++; + break; + case 1: + switch (sprite->tBounceDir) + { + case 0: + multiplier = sprite->tMultiplier; + sprite->pos2.x = (gSineTable[(u8)(sprite->tSinePos)] * multiplier) / 256; + break; + case 1: + multiplier = sprite->tMultiplier; + sprite->pos2.y = (gSineTable[(u8)(sprite->tSinePos)] * multiplier) / 256; + break; + } + sprite->tSinePos += sprite->tFrequency; + break; + } +} + +static u8 AddScrollIndicatorArrowObject(u8 arrowDir, u8 x, u8 y, u16 tileTag, u16 palTag) +{ + u8 spriteId; + struct SpriteTemplate spriteTemplate; + + spriteTemplate = sSpriteTemplate_ScrollArrowIndicator; + spriteTemplate.tileTag = tileTag; + spriteTemplate.paletteTag = palTag; + spriteId = CreateSprite(&spriteTemplate, x, y, 0); + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].tState = 0; + gSprites[spriteId].tAnimNum = sScrollIndicatorTemplates[arrowDir].animNum; + gSprites[spriteId].tBounceDir = sScrollIndicatorTemplates[arrowDir].bounceDir; + gSprites[spriteId].tMultiplier = sScrollIndicatorTemplates[arrowDir].multiplier; + gSprites[spriteId].tFrequency = sScrollIndicatorTemplates[arrowDir].frequency; + gSprites[spriteId].tSinePos = 0; + return spriteId; +} + +#undef tState +#undef tAnimNum +#undef tBounceDir +#undef tMultiplier +#undef tFrequency +#undef tSinePos + +u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 *scrollOffset) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct ScrollIndicatorPair *data; + u8 taskId; + + spriteSheet.data = sRedArrowOtherGfx; + spriteSheet.size = 0x100; + spriteSheet.tag = arrowInfo->tileTag; + LoadCompressedSpriteSheet(&spriteSheet); + if (arrowInfo->palTag == SPRITE_INVALID_TAG) + { + LoadPalette(sRedArrowPal, (16 * arrowInfo->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = sRedArrowPal; + spritePal.tag = arrowInfo->palTag; + LoadSpritePalette(&spritePal); + } + taskId = CreateTask(Task_ScrollIndicatorArrowPair, 0); + data = (struct ScrollIndicatorPair *)gTasks[taskId].data; + + data->field_0 = 0; + data->scrollOffset = scrollOffset; + data->fullyUpThreshold = arrowInfo->fullyUpThreshold; + data->fullyDownThreshold = arrowInfo->fullyDownThreshold; + data->tileTag = arrowInfo->tileTag; + data->palTag = arrowInfo->palTag; + data->topSpriteId = AddScrollIndicatorArrowObject(arrowInfo->firstArrowType, arrowInfo->firstX, arrowInfo->firstY, arrowInfo->tileTag, arrowInfo->palTag); + data->bottomSpriteId = AddScrollIndicatorArrowObject(arrowInfo->secondArrowType, arrowInfo->secondX, arrowInfo->secondY, arrowInfo->tileTag, arrowInfo->palTag); + + if (arrowInfo->palTag == SPRITE_INVALID_TAG) + { + gSprites[data->topSpriteId].oam.paletteNum = arrowInfo->palNum; + gSprites[data->bottomSpriteId].oam.paletteNum = arrowInfo->palNum; + } + return taskId; +} + +u8 AddScrollIndicatorArrowPairParameterized(u32 arrowType, s32 commonPos, s32 firstPos, s32 secondPos, s32 fullyDownThreshold, s32 tileTag, s32 palTag, u16 *scrollOffset) +{ + if (arrowType == SCROLL_ARROW_UP || arrowType == SCROLL_ARROW_DOWN) + { + sTempScrollArrowTemplate.firstArrowType = SCROLL_ARROW_UP; + sTempScrollArrowTemplate.firstX = commonPos; + sTempScrollArrowTemplate.firstY = firstPos; + sTempScrollArrowTemplate.secondArrowType = SCROLL_ARROW_DOWN; + sTempScrollArrowTemplate.secondX = commonPos; + sTempScrollArrowTemplate.secondY = secondPos; + } + else + { + sTempScrollArrowTemplate.firstArrowType = SCROLL_ARROW_LEFT; + sTempScrollArrowTemplate.firstX = firstPos; + sTempScrollArrowTemplate.firstY = commonPos; + sTempScrollArrowTemplate.secondArrowType = SCROLL_ARROW_RIGHT; + sTempScrollArrowTemplate.secondX = secondPos; + sTempScrollArrowTemplate.secondY = commonPos; + } + sTempScrollArrowTemplate.fullyUpThreshold = 0; + sTempScrollArrowTemplate.fullyDownThreshold = fullyDownThreshold; + sTempScrollArrowTemplate.tileTag = tileTag; + sTempScrollArrowTemplate.palTag = palTag; + sTempScrollArrowTemplate.palNum = 0; + + return AddScrollIndicatorArrowPair(&sTempScrollArrowTemplate, scrollOffset); +} + +static void Task_ScrollIndicatorArrowPair(u8 taskId) +{ + struct ScrollIndicatorPair *data = (struct ScrollIndicatorPair *)gTasks[taskId].data; + u16 currItem = (*data->scrollOffset); + + if (currItem == data->fullyUpThreshold) + gSprites[data->topSpriteId].invisible = TRUE; + else + gSprites[data->topSpriteId].invisible = FALSE; + + if (currItem == data->fullyDownThreshold) + gSprites[data->bottomSpriteId].invisible = TRUE; + else + gSprites[data->bottomSpriteId].invisible = FALSE; +} + +void RemoveScrollIndicatorArrowPair(u8 taskId) +{ + struct ScrollIndicatorPair *data = (struct ScrollIndicatorPair *)gTasks[taskId].data; + + if (data->tileTag != SPRITE_INVALID_TAG) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != SPRITE_INVALID_TAG) + FreeSpritePaletteByTag(data->palTag); + DestroySprite(&gSprites[data->topSpriteId]); + DestroySprite(&gSprites[data->bottomSpriteId]); + DestroyTask(taskId); +} + +u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + default: + return ListMenuAddRedOutlineCursorObject(cursor); + case 1: + return ListMenuAddRedArrowCursorObject(cursor); + } +} + +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; + } +} + +void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + ListMenuRemoveRedOutlineCursorObject(taskId); + break; + case 1: + ListMenuRemoveRedArrowCursorObject(taskId); + break; + } +} + +void Task_RedOutlineCursor(u8 taskId) +{ +} + +u8 ListMenuGetRedOutlineCursorSpriteCount(u16 rowWidth, u16 rowHeight) +{ + s32 i, count = 4; + + if (rowWidth > 16) + for (i = 8; i < (rowWidth - 8); i += 8) + count += 2; + if (rowHeight > 16) + for (i = 8; i < (rowHeight - 8); i += 8) + count += 2; + return count; +} + +void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, struct Subsprite *subsprites) +{ + s32 i, j, id = 0; + + subsprites[id] = sSubsprite_RedOutline1; + subsprites[id].x = 136; + subsprites[id].y = 136; + id++; + subsprites[id] = sSubsprite_RedOutline2; + subsprites[id].x = rowWidth + 128; + subsprites[id].y = 136; + id++; + subsprites[id] = sSubsprite_RedOutline7; + subsprites[id].x = 136; + subsprites[id].y = rowHeight + 128; + id++; + subsprites[id] = sSubsprite_RedOutline8; + subsprites[id].x = rowWidth + 128; + subsprites[id].y = rowHeight + 128; + id++; + if (rowWidth > 16) + { + for (i = 8; i < rowWidth - 8; i += 8) + { + subsprites[id] = sSubsprite_RedOutline3; + subsprites[id].x = i - 120; + subsprites[id].y = 136; + id++; + + subsprites[id] = sSubsprite_RedOutline6; + subsprites[id].x = i - 120; + subsprites[id].y = rowHeight + 128; + id++; + } + } + if (rowHeight > 16) + { + for (j = 8; j < rowHeight - 8; j += 8) + { + subsprites[id] = sSubsprite_RedOutline4; + subsprites[id].x = 136; + subsprites[id].y = j - 120; + id++; + subsprites[id] = sSubsprite_RedOutline5; + subsprites[id].x = rowWidth + 128; + subsprites[id].y = j - 120; + id++; + } + } +} + +u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct RedOutlineCursor *data; + struct SpriteTemplate spriteTemplate; + u8 taskId; + + spriteSheet.data = sSelectorOutlineGfx; + spriteSheet.size = 0x100; + spriteSheet.tag = cursor->tileTag; + LoadCompressedSpriteSheet(&spriteSheet); + if (cursor->palTag == SPRITE_INVALID_TAG) + { + LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = sRedArrowPal; + spritePal.tag = cursor->palTag; + LoadSpritePalette(&spritePal); + } + taskId = CreateTask(Task_RedOutlineCursor, 0); + data = (struct RedOutlineCursor *)gTasks[taskId].data; + data->tileTag = cursor->tileTag; + data->palTag = cursor->palTag; + data->subspriteTable.subspriteCount = ListMenuGetRedOutlineCursorSpriteCount(cursor->rowWidth, cursor->rowHeight); + data->subspriteTable.subsprites = data->subspritesPtr = Alloc(data->subspriteTable.subspriteCount * 4); + ListMenuSetUpRedOutlineCursorSpriteOamTable(cursor->rowWidth, cursor->rowHeight, data->subspritesPtr); + spriteTemplate = gDummySpriteTemplate; + spriteTemplate.tileTag = cursor->tileTag; + spriteTemplate.paletteTag = cursor->palTag; + data->spriteId = CreateSprite(&spriteTemplate, cursor->left + 120, cursor->top + 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 == SPRITE_INVALID_TAG) + gSprites[data->spriteId].oam.paletteNum = cursor->palNum; + return taskId; +} + +void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y) +{ + struct RedOutlineCursor *data = (struct RedOutlineCursor *)gTasks[taskId].data; + + gSprites[data->spriteId].pos1.x = x + 120; + gSprites[data->spriteId].pos1.y = y + 120; +} + +void ListMenuRemoveRedOutlineCursorObject(u8 taskId) +{ + struct RedOutlineCursor *data = (struct RedOutlineCursor *)gTasks[taskId].data; + + Free(data->subspritesPtr); + if (data->tileTag != SPRITE_INVALID_TAG) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != SPRITE_INVALID_TAG) + FreeSpritePaletteByTag(data->palTag); + DestroySprite(&gSprites[data->spriteId]); + DestroyTask(taskId); +} + +static void SpriteCallback_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 RedArrowCursor *data; + struct SpriteTemplate spriteTemplate; + u8 taskId; + + spriteSheet.data = sRedArrowGfx; + spriteSheet.size = 0x80; + spriteSheet.tag = cursor->tileTag; + LoadCompressedSpriteSheet(&spriteSheet); + if (cursor->palTag == SPRITE_INVALID_TAG) + { + LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = sRedArrowPal; + spritePal.tag = cursor->palTag; + LoadSpritePalette(&spritePal); + } + taskId = CreateTask(Task_RedArrowCursor, 0); + data = (struct RedArrowCursor *)gTasks[taskId].data; + data->tileTag = cursor->tileTag; + data->palTag = cursor->palTag; + spriteTemplate = sSpriteTemplate_RedArrowCursor; + spriteTemplate.tileTag = cursor->tileTag; + spriteTemplate.paletteTag = cursor->palTag; + data->spriteId = CreateSprite(&spriteTemplate, cursor->left, cursor->top, 0); + gSprites[data->spriteId].pos2.x = 8; + gSprites[data->spriteId].pos2.y = 8; + if (cursor->palTag == SPRITE_INVALID_TAG) + gSprites[data->spriteId].oam.paletteNum = cursor->palNum; + return taskId; +} + +static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y) +{ + struct RedArrowCursor *data = (struct RedArrowCursor *)gTasks[taskId].data; + + gSprites[data->spriteId].pos1.x = x; + gSprites[data->spriteId].pos1.y = y; +} + +static void ListMenuRemoveRedArrowCursorObject(u8 taskId) +{ + struct RedArrowCursor *data = (struct RedArrowCursor *)gTasks[taskId].data; + + if (data->tileTag != SPRITE_INVALID_TAG) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != SPRITE_INVALID_TAG) + FreeSpritePaletteByTag(data->palTag); + DestroySprite(&gSprites[data->spriteId]); + DestroyTask(taskId); +} diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index abd29ca11..de6e1caa5 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -97,7 +97,7 @@ const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapa const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal"); const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal"); const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal"); -const u8 gUnknown_8467EF4[] = INCBIN_U8("data/graphics/mevent/gfx_467EF4.4bpp.lz"); +const u32 gUnknown_8467EF4[] = INCBIN_U32("data/graphics/mevent/gfx_467EF4.4bpp.lz"); const struct CompressedSpriteSheet gUnknown_8467F58 = { gUnknown_8467EF4, 0x100, 0x8000 diff --git a/src/pokemon.c b/src/pokemon.c index 906b97cae..b9b5e6d76 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5423,7 +5423,7 @@ void PlayMapChosenOrBattleBGM(u16 songId) PlayNewMapMusic(GetMUS_ForBattle()); } -const u8 *GetMonFrontSpritePal(struct Pokemon *mon) +const u32 *GetMonFrontSpritePal(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); @@ -5431,7 +5431,7 @@ const u8 *GetMonFrontSpritePal(struct Pokemon *mon) return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality); } -const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality) +const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality) { u32 shinyValue; diff --git a/sym_ewram.txt b/sym_ewram.txt index 1ae10a52c..cba45dbc4 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1353,9 +1353,7 @@ gUnknown_203B0E8: @ 203B0E8 .include "src/oak_speech.o" .align 2 .include "src/tm_case.o" - -gUnknown_203B130: @ 203B130 - .space 0x10 + .include "src/menu_indicators.o" gUnknown_203B140: @ 203B140 .space 0x4 |