diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-08-13 19:21:07 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-13 19:21:07 -0500 |
commit | 3f0250648efc347ce6fab48e8bb814000c847b77 (patch) | |
tree | 41239fdef93e534d76181ba652390909efe6018c | |
parent | 00abce98dba72f1119b41e5f7f9b186fb30dbf64 (diff) | |
parent | 6f52c5238ccd0dad9a465102c950aa77cc7730c4 (diff) |
Merge pull request #390 from camthesaxman/fix_various
various cleanups
-rw-r--r-- | include/item_menu.h | 11 | ||||
-rw-r--r-- | src/berry_tag_screen.c | 243 | ||||
-rw-r--r-- | src/item_menu.c | 8 | ||||
-rw-r--r-- | src/pokemon_icon.c | 81 |
4 files changed, 109 insertions, 234 deletions
diff --git a/include/item_menu.h b/include/item_menu.h index 6950ed0ff..29618f347 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -3,6 +3,17 @@ #include "string_util.h" +struct PocketScrollState +{ + u8 cursorPos; + u8 scrollTop; + u8 numSlots; + u8 cursorMax; +}; + +extern struct PocketScrollState gBagPocketScrollStates[]; +extern struct ItemSlot *gCurrentBagPocketItemSlots; + void ResetBagScrollPositions(void); void ClearBag(void); void sub_80A3E0C(void); diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index ff430e7b2..50db5388c 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -61,9 +61,9 @@ static void sub_8146440(u8 taskId); static void sub_8146480(u8 taskid); static void sub_81464E4(void); static void sub_8146600(u8 berry); -// static void sub_81466A0(void); +static void sub_81466A0(void); static void sub_81466E8(u8 taskId, s8 direction); -// static void sub_8146798(u8 berry); +static void sub_8146798(u8 berry); static void sub_8146810(s8 berry); static void sub_81468BC(void); @@ -347,7 +347,7 @@ static void sub_8146600(u8 berry) gUnknown_0203932E[4] = sub_80A7E5C(208); } -void sub_81466A0(void) +static void sub_81466A0(void) { u16 i; @@ -361,105 +361,36 @@ void sub_81466A0(void) } } -__attribute__((naked)) static void sub_81466E8(u8 taskId, s8 direction) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r1, 24\n\ - lsrs r2, r1, 24\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - ldr r1, _08146748 @ =gTasks + 0x8\n\ - adds r6, r0, r1\n\ - ldr r4, _0814674C @ =gBagPocketScrollStates\n\ - movs r0, 0xC\n\ - adds r0, r4\n\ - mov r8, r0\n\ - ldrb r1, [r0, 0x1]\n\ - ldrb r0, [r4, 0xC]\n\ - adds r1, r0\n\ - cmp r1, 0\n\ - bne _08146718\n\ - lsls r0, r2, 24\n\ - cmp r0, 0\n\ - blt _0814678C\n\ -_08146718:\n\ - adds r0, r1, 0x1\n\ - lsls r5, r2, 24\n\ - mov r1, r8\n\ - ldrb r1, [r1, 0x2]\n\ - cmp r0, r1\n\ - bne _08146728\n\ - cmp r5, 0\n\ - bgt _0814678C\n\ -_08146728:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - mov r2, r8\n\ - ldrb r3, [r2, 0x1]\n\ - ldrb r4, [r4, 0xC]\n\ - mov r12, r4\n\ - adds r0, r3, r4\n\ - asrs r2, r5, 24\n\ - adds r1, r0, r2\n\ - cmp r1, 0\n\ - bge _08146750\n\ - negs r0, r0\n\ - strh r0, [r6, 0x2]\n\ - b _08146766\n\ - .align 2, 0\n\ -_08146748: .4byte gTasks + 0x8\n\ -_0814674C: .4byte gBagPocketScrollStates\n\ -_08146750:\n\ - mov r4, r8\n\ - ldrb r0, [r4, 0x2]\n\ - cmp r1, r0\n\ - blt _08146764\n\ - subs r0, r3\n\ - mov r1, r12\n\ - subs r0, r1\n\ - subs r0, 0x1\n\ - strh r0, [r6, 0x2]\n\ - b _08146766\n\ -_08146764:\n\ - strh r2, [r6, 0x2]\n\ -_08146766:\n\ - ldr r0, _08146780 @ =gTasks\n\ - lsls r1, r7, 2\n\ - adds r1, r7\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _08146784 @ =sub_8146798\n\ - str r0, [r1]\n\ - cmp r5, 0\n\ - bge _08146788\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - adds r0, r2, 0\n\ - b _0814678A\n\ - .align 2, 0\n\ -_08146780: .4byte gTasks\n\ -_08146784: .4byte sub_8146798\n\ -_08146788:\n\ - movs r0, 0x10\n\ -_0814678A:\n\ - strh r0, [r6]\n\ -_0814678C:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); + u8 berryPocket = 3; + s16 *data = gTasks[taskId].data; + + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0 + && direction < 0) + return; + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots + && direction > 0) + return; + + PlaySE(SE_SELECT); + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0) + data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos); + else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots) + data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1; + else + data[1] = direction; + + gTasks[taskId].func = sub_8146798; + + if (direction < 0) + data[0] = -16; + else + data[0] = 16; + } -void sub_8146798(u8 taskId) +static void sub_8146798(u8 taskId) { s16 *taskData = gTasks[taskId].data; @@ -478,94 +409,38 @@ void sub_8146798(u8 taskId) } } -__attribute__((naked)) static void sub_8146810(s8 berry) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - adds r4, r3, 0\n\ - lsls r0, r3, 24\n\ - asrs r1, r0, 24\n\ - cmp r1, 0\n\ - ble _08146848\n\ - ldr r0, _08146840 @ =gBagPocketScrollStates\n\ - adds r4, r0, 0\n\ - adds r4, 0xC\n\ - ldrb r2, [r0, 0xC]\n\ - adds r1, r2, r1\n\ - adds r6, r0, 0\n\ - cmp r1, 0x7\n\ - ble _08146844\n\ - adds r0, r3, 0\n\ - adds r0, 0xF9\n\ - adds r0, r2, r0\n\ - ldrb r1, [r4, 0x1]\n\ - adds r0, r1\n\ - strb r0, [r4, 0x1]\n\ - movs r0, 0x7\n\ - b _0814686E\n\ - .align 2, 0\n\ -_08146840: .4byte gBagPocketScrollStates\n\ -_08146844:\n\ - adds r0, r2, r3\n\ - b _0814686E\n\ -_08146848:\n\ - ldr r0, _08146868 @ =gBagPocketScrollStates\n\ - adds r5, r0, 0\n\ - adds r5, 0xC\n\ - ldrb r2, [r0, 0xC]\n\ - adds r1, r2, r1\n\ - adds r6, r0, 0\n\ - cmp r1, 0\n\ - bge _0814686C\n\ - adds r0, r2, r3\n\ - ldrb r1, [r5, 0x1]\n\ - adds r0, r1\n\ - movs r1, 0\n\ - strb r0, [r5, 0x1]\n\ - strb r1, [r6, 0xC]\n\ - b _08146870\n\ - .align 2, 0\n\ -_08146868: .4byte gBagPocketScrollStates\n\ -_0814686C:\n\ - adds r0, r2, r4\n\ -_0814686E:\n\ - strb r0, [r6, 0xC]\n\ -_08146870:\n\ - ldr r2, _081468AC @ =gScriptItemId\n\ - movs r0, 0x3\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r1, [r0, 0x1]\n\ - ldrb r0, [r0]\n\ - adds r1, r0\n\ - ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\ - ldr r0, [r0]\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - strh r0, [r2]\n\ - ldr r0, _081468B4 @ =gUnknown_0203932C\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _081468B8 @ =gSprites\n\ - adds r0, r1\n\ - bl DestroySprite\n\ - bl sub_81466A0\n\ - bl sub_80A7DD4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081468AC: .4byte gScriptItemId\n\ -_081468B0: .4byte gCurrentBagPocketItemSlots\n\ -_081468B4: .4byte gUnknown_0203932C\n\ -_081468B8: .4byte gSprites\n\ - .syntax divided\n"); + u8 berryPocket = 3; + + if (berry > 0) + { + if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7) + { + gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry; + gBagPocketScrollStates[berryPocket].cursorPos = 7; + } + else + { + gBagPocketScrollStates[berryPocket].cursorPos += berry; + } + } + else + { + if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0) + { + gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry; + gBagPocketScrollStates[berryPocket].cursorPos = 0; + } + else + { + gBagPocketScrollStates[berryPocket].cursorPos += berry; + } + } + gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId; + DestroySprite(&gSprites[gUnknown_0203932C]); + sub_81466A0(); + sub_80A7DD4(); } static void sub_81468BC(void) diff --git a/src/item_menu.c b/src/item_menu.c index 350ba3db4..fdc47ad67 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -56,14 +56,6 @@ extern void sub_804E990(u8); extern void sub_802E424(u8); extern void sub_8064E2C(void); -struct PocketScrollState -{ - u8 cursorPos; - u8 scrollTop; - u8 numSlots; - u8 cursorMax; -}; - struct UnknownStruct2 { u8 unk0; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 8994ea49e..9bb3386e1 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1024,17 +1024,17 @@ void sub_809D7E8(struct Sprite *); u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { u8 spriteId; - struct MonIconSpriteTemplate iconTemplate; - struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match - - iconTemplatePtr->oam = &sMonIconOamData; - iconTemplatePtr->image = gMonIconTable[species]; - iconTemplatePtr->anims = sMonIconAnims; - iconTemplatePtr->affineAnims = sMonIconAffineAnims; - iconTemplatePtr->callback = callback; - iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; + struct MonIconSpriteTemplate iconTemplate = + { + .oam = &sMonIconOamData, + .image = gMonIconTable[species], + .anims = sMonIconAnims, + .affineAnims = sMonIconAffineAnims, + .callback = callback, + .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species], + }; - spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); + spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); UpdateMonIconFrame(&gSprites[spriteId]); @@ -1067,17 +1067,17 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { u8 spriteId; - struct MonIconSpriteTemplate iconTemplate; - struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match - - iconTemplatePtr->oam = &sMonIconOamData; - iconTemplatePtr->image = gMonIconTable[species]; - iconTemplatePtr->anims = sMonIconAnims; - iconTemplatePtr->affineAnims = sMonIconAffineAnims; - iconTemplatePtr->callback = callback; - iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; + struct MonIconSpriteTemplate iconTemplate = + { + .oam = &sMonIconOamData, + .image = gMonIconTable[species], + .anims = sMonIconAnims, + .affineAnims = sMonIconAffineAnims, + .callback = callback, + .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species], + }; - spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); + spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); UpdateMonIconFrame(&gSprites[spriteId]); @@ -1197,7 +1197,7 @@ void sub_809D62C(struct Sprite *sprite) UpdateMonIconFrame(sprite); } -// TODO: try to find a way to avoid using goto and asm statement +// TODO: try to find a way to avoid using asm statement u8 UpdateMonIconFrame(struct Sprite *sprite) { u8 result = 0; @@ -1206,34 +1206,31 @@ u8 UpdateMonIconFrame(struct Sprite *sprite) { s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - if (frame != -2) - { - if (frame != -1) - goto copy; - goto end; - } - - sprite->animCmdIndex = 0; - goto end; - - copy: - RequestSpriteCopy( - (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame, - (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, - sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); + switch (frame) { - register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - sprite->animDelayCounter = duration; + case -1: + break; + case -2: + sprite->animCmdIndex = 0; + break; + default: + RequestSpriteCopy( + (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame, + (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); + { + register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; + sprite->animDelayCounter = duration; + } + sprite->animCmdIndex++; + result = sprite->animCmdIndex; + break; } - sprite->animCmdIndex++; - result = sprite->animCmdIndex; } else { sprite->animDelayCounter--; } - -end: return result; } |