diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2018-05-15 20:22:19 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2018-05-15 20:22:19 +0200 |
commit | 0cf3836a0376f539108ce10a4cf4d31b758d0ac4 (patch) | |
tree | f04c5e406722c1c549953a90237217ad21533c10 /src | |
parent | 7735fb2ad38ea84e43e1264fe882981706675e88 (diff) |
decompile menu helpers
Diffstat (limited to 'src')
-rw-r--r-- | src/menu_helpers.c | 255 |
1 files changed, 155 insertions, 100 deletions
diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 8e8197a12..178fbb5fa 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -17,19 +17,85 @@ #include "constants/items.h" #include "constants/maps.h" -extern u8 gUnknown_0203A140; -extern TaskFunc gUnknown_0300117C; -extern struct YesNoFuncTable gUnknown_0203A138; - -extern const struct CompressedSpriteSheet gUnknown_0859F514; -extern const struct CompressedSpritePalette gUnknown_0859F51C; - -extern bool32 InUnionRoom(void); extern bool32 sub_800B504(void); +extern const u8 gBagSwapLineGfx[]; +extern const u8 gBagSwapLinePal[]; + // this file's functions -void Task_ContinueTaskAfterMessagePrints(u8 taskId); -void Task_CallYesOrNoCallback(u8 taskId); +static void Task_ContinueTaskAfterMessagePrints(u8 taskId); +static void Task_CallYesOrNoCallback(u8 taskId); + +// EWRAM vars +EWRAM_DATA static struct YesNoFuncTable gUnknown_0203A138 = {0}; +EWRAM_DATA static u8 gUnknown_0203A140 = 0; + +// IWRAM bss vars +IWRAM_DATA static TaskFunc gUnknown_0300117C; + +// const rom data +static const struct OamData sOamData_859F4E8 = +{ + .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_859F4F0[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_859F4F8[] = +{ + ANIMCMD_FRAME(4, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_859F500[] = +{ + ANIMCMD_FRAME(0, 0, 1, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_859F508[] = +{ + sSpriteAnim_859F4F0, + sSpriteAnim_859F4F8, + sSpriteAnim_859F500 +}; + +static const struct CompressedSpriteSheet gUnknown_0859F514 = +{ + gBagSwapLineGfx, 0x100, 109 +}; + +static const struct CompressedSpritePalette gUnknown_0859F51C = +{ + gBagSwapLinePal, 109 +}; + +static const struct SpriteTemplate gUnknown_0859F524 = +{ + .tileTag = 109, + .paletteTag = 109, + .oam = &sOamData_859F4E8, + .anims = sSpriteAnimTable_859F508, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; // code void ResetVramOamAndBgCntRegs(void) @@ -82,7 +148,7 @@ bool16 RunTextPrintersRetIsActive(u8 textPrinterId) return IsTextPrinterActive(textPrinterId); } -void Task_ContinueTaskAfterMessagePrints(u8 taskId) +static void Task_ContinueTaskAfterMessagePrints(u8 taskId) { if (!RunTextPrintersRetIsActive(gUnknown_0203A140)) gUnknown_0300117C(taskId); @@ -101,7 +167,7 @@ void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *templa gTasks[taskId].func = Task_CallYesOrNoCallback; } -void Task_CallYesOrNoCallback(u8 taskId) +static void Task_CallYesOrNoCallback(u8 taskId) { switch (ProcessMenuInputNoWrap_()) { @@ -296,105 +362,94 @@ void sub_812225C(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3) } } -#ifdef NONMATCHING void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4) { - if (arg2 & 1) - { + u8 i; + if (arg4 % 2 != 0) + { + if ((*arg1) >= arg4 / 2) + { + for (i = 0; i < (*arg1) - (arg4 / 2); i++) + { + if ((*arg0) + arg2 == arg3) + break; + (*arg1)--; + (*arg0)++; + } + } } else { - + if ((*arg1) >= (arg4 / 2) + 1) + { + for (i = 0; i <= (*arg1) - (arg4 / 2); i++) + { + if ((*arg0) + arg2 == arg3) + break; + (*arg1)--; + (*arg0)++; + } + } } } -#else -NAKED -void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - adds r5, r0, 0\n\ - adds r4, r1, 0\n\ - ldr r0, [sp, 0x14]\n\ - lsls r2, 24\n\ - lsrs r7, r2, 24\n\ - lsls r3, 24\n\ - lsrs r6, r3, 24\n\ - lsls r2, r0, 24\n\ - lsrs r0, r2, 24\n\ - movs r1, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _081222F0\n\ - lsrs r2, 25\n\ - ldrh r0, [r4]\n\ - cmp r0, r2\n\ - bcc _08122322\n\ - movs r1, 0\n\ - subs r0, r2\n\ - cmp r1, r0\n\ - bge _08122322\n\ - ldrh r0, [r5]\n\ - adds r0, r7\n\ - cmp r0, r6\n\ - beq _08122322\n\ -_081222CC:\n\ - ldrh r0, [r4]\n\ - subs r0, 0x1\n\ - strh r0, [r4]\n\ - ldrh r0, [r5]\n\ - adds r0, 0x1\n\ - strh r0, [r5]\n\ - adds r0, r1, 0x1\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldrh r0, [r4]\n\ - subs r0, r2\n\ - cmp r1, r0\n\ - bge _08122322\n\ - ldrh r0, [r5]\n\ - adds r0, r7\n\ - cmp r0, r6\n\ - bne _081222CC\n\ - b _08122322\n\ -_081222F0:\n\ - ldrh r3, [r4]\n\ - lsrs r2, 25\n\ - adds r0, r2, 0x1\n\ - cmp r3, r0\n\ - blt _08122322\n\ - movs r1, 0\n\ - subs r0, r3, r2\n\ - b _08122316\n\ -_08122300:\n\ - ldrh r0, [r4]\n\ - subs r0, 0x1\n\ - strh r0, [r4]\n\ - ldrh r0, [r5]\n\ - adds r0, 0x1\n\ - strh r0, [r5]\n\ - adds r0, r1, 0x1\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldrh r0, [r4]\n\ - subs r0, r2\n\ -_08122316:\n\ - cmp r1, r0\n\ - bgt _08122322\n\ - ldrh r0, [r5]\n\ - adds r0, r7\n\ - cmp r0, r6\n\ - bne _08122300\n\ -_08122322:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0"); -} -#endif // NONMATCHING void LoadListMenuArrowsGfx(void) { LoadCompressedObjectPic(&gUnknown_0859F514); LoadCompressedObjectPalette(&gUnknown_0859F51C); } + +void sub_8122344(u8 *spriteIds, u8 count) +{ + u8 i; + + for (i = 0; i < count; i++) + { + spriteIds[i] = CreateSprite(&gUnknown_0859F524, i * 16, 0, 0); + if (i != 0) + StartSpriteAnim(&gSprites[spriteIds[i]], 1); + + gSprites[spriteIds[i]].invisible = 1; + } +} + +void sub_81223B0(u8 *spriteIds, u8 count) +{ + u8 i; + + for (i = 0; i < count; i++) + { + if (i == count - 1) + DestroySpriteAndFreeResources(&gSprites[spriteIds[i]]); + else + DestroySprite(&gSprites[spriteIds[i]]); + } +} + +void sub_81223FC(u8 *spriteIds, u8 count, bool8 invisible) +{ + u8 i; + + for (i = 0; i < count; i++) + { + gSprites[spriteIds[i]].invisible = invisible; + } +} + +void sub_8122448(u8 *spriteIds, u8 count, s16 x, u16 y) +{ + u8 i; + bool8 unknownBit = count & 0x80; + count &= ~(0x80); + + for (i = 0; i < count; i++) + { + if (i == count - 1 && unknownBit) + gSprites[spriteIds[i]].pos2.x = x - 8; + else + gSprites[spriteIds[i]].pos2.x = x; + + gSprites[spriteIds[i]].pos1.y = 1 + y; + } +} |