From 7dc95a0103af08c95c9093b6efa6c77af77a2538 Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Sun, 13 Sep 2020 04:22:50 -0300 Subject: Undo PokeCodec's PRs This commit undoes most of PokeCodec's PRs after the debate in chat. Some harmless or completely superseded PRs have been left alone, as there is not much benefit in attempting to undo them. Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136, #1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179, #1180, #1181, #1182 and #1183. --- src/pokenav_main_menu.c | 183 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 141 insertions(+), 42 deletions(-) (limited to 'src/pokenav_main_menu.c') diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index f2b9b0dcc..0e2425d4e 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -436,10 +436,9 @@ static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) if (ChangeBgY(0, 384, 2) <= 0) { ChangeBgY(0, 0, 0); - return LT_FINISH; + return 4; } - - return LT_PAUSE; + return 2; } void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) @@ -459,9 +458,11 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) { break; } - - index = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + else + { + index = (index * 16) + 0x100; + CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + } } } @@ -470,41 +471,139 @@ void sub_81C7990(u32 a0, u16 a1) CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); } -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette) -{ - - if (a4 == 0) - { - CpuCopy16(a0, palette, a2 * 2); - } - else if (a4 >= a3) - { - CpuCopy16(a1, palette, a2 * 2); - } - else - { - int r, g, b; - int r1, g1, b1; - while (a2--) - { - r = GET_R(*a0); - g = GET_G(*a0); - b = GET_B(*a0); - - r1 = ((((GET_R(*a1) << 8) - (r << 8)) / a3) * a4) >> 8; - g1 = ((((GET_G(*a1) << 8) - (g << 8)) / a3) * a4) >> 8; - b1 = ((((GET_B(*a1) << 8) - (b << 8)) / a3) * a4) >> 8; - - r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r1 - g = (g + g1) & 0x1F; //See above - b = (b + b1) & 0x1F; //See above - - *palette = RGB2(r, g, b); //See above comment - - a0++, a1++; - palette++; - } - } +NAKED +void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + mov r10, r2\n\ + str r3, [sp, 0x8]\n\ + ldr r0, [sp, 0x2C]\n\ + cmp r0, 0\n\ + bne _081C79E4\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp]\n\ + b _081C79F4\n\ + .pool\n\ +_081C79E4:\n\ + ldr r2, [sp, 0x2C]\n\ + ldr r0, [sp, 0x8]\n\ + cmp r2, r0\n\ + blt _081C7A00\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp, 0x4]\n\ +_081C79F4:\n\ + ldr r1, [sp, 0x30]\n\ + bl CpuSet\n\ + b _081C7AAE\n\ + .pool\n\ +_081C7A00:\n\ + movs r2, 0x1\n\ + negs r2, r2\n\ + add r10, r2\n\ + b _081C7AA6\n\ +_081C7A08:\n\ + ldr r1, [sp]\n\ + ldrh r0, [r1]\n\ + movs r2, 0x1F\n\ + mov r9, r2\n\ + mov r1, r9\n\ + ands r1, r0\n\ + mov r9, r1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 21\n\ + movs r1, 0x1F\n\ + ands r1, r2\n\ + mov r8, r1\n\ + lsrs r7, r0, 26\n\ + movs r2, 0x1F\n\ + ands r7, r2\n\ + ldr r0, [sp, 0x4]\n\ + ldrh r4, [r0]\n\ + movs r0, 0x1F\n\ + ands r0, r4\n\ + mov r1, r9\n\ + subs r0, r1\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r2, [sp, 0x2C]\n\ + adds r6, r0, 0\n\ + muls r6, r2\n\ + asrs r6, 8\n\ + lsls r4, 16\n\ + lsrs r0, r4, 21\n\ + movs r1, 0x1F\n\ + ands r0, r1\n\ + mov r2, r8\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + adds r5, r0, 0\n\ + muls r5, r1\n\ + asrs r5, 8\n\ + lsrs r4, 26\n\ + movs r2, 0x1F\n\ + ands r4, r2\n\ + subs r4, r7\n\ + lsls r4, 8\n\ + adds r0, r4, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + add r6, r9\n\ + movs r2, 0x1F\n\ + ands r6, r2\n\ + add r5, r8\n\ + ands r5, r2\n\ + adds r0, r7, r0\n\ + ands r0, r2\n\ + lsls r0, 10\n\ + lsls r5, 5\n\ + orrs r0, r5\n\ + orrs r0, r6\n\ + ldr r1, [sp, 0x30]\n\ + strh r0, [r1]\n\ + ldr r2, [sp]\n\ + adds r2, 0x2\n\ + str r2, [sp]\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x2\n\ + str r0, [sp, 0x4]\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x30]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + add r10, r1\n\ +_081C7AA6:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r10, r0\n\ + bne _081C7A08\n\ +_081C7AAE:\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0"); } void PokenavFadeScreen(s32 fadeType) @@ -681,7 +780,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); LZ77UnCompWram(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); - RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); + RequestDma3Copy(gDecompressionBuffer, (void *)VRAM + 0x10000 + (GetSpriteTileStartByTag(2) * 32), size, 1); structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].size; if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) -- cgit v1.2.3 From 2b2be90a5266e294342e1759dddfe8af4d6f39f2 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 10 Oct 2020 16:17:34 -0600 Subject: start pokenav documentation --- src/pokenav_main_menu.c | 146 ++++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 73 deletions(-) (limited to 'src/pokenav_main_menu.c') diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index f2b9b0dcc..806300539 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -15,9 +15,9 @@ struct PokenavMainMenuResources { - void (*unk0)(u32); - u32 (*unk4)(void); - u32 unk8; + void (*loopTask)(u32); + u32 (*isLoopTaskActiveFunc)(void); + u32 unused; u32 currentTaskId; u32 helpBarWindowId; u32 palettes; @@ -47,8 +47,8 @@ static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); static void InitPokenavMainMenuResources(void); static void InitHoennMapHeaderSprites(void); static void InitHelpBar(void); -static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0); -static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0); +static u32 LoopedTask_SlideMenuHeaderUp(s32 a0); +static u32 LoopedTask_SlideMenuHeaderDown(s32 a0); static void DrawHelpBar(u32 windowId); static void SpriteCB_SpinningPokenav(struct Sprite* sprite); static u32 LoopedTask_InitPokenavMenu(s32 a0); @@ -294,7 +294,7 @@ bool32 InitPokenavMainMenu(void) { struct PokenavMainMenuResources *structPtr; - structPtr = AllocSubstruct(0, sizeof(struct PokenavMainMenuResources)); + structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct PokenavMainMenuResources)); if (structPtr == NULL) return FALSE; @@ -306,14 +306,14 @@ bool32 InitPokenavMainMenu(void) u32 PokenavMainMenuLoopedTaskIsActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); return IsLoopedTaskActive(structPtr->currentTaskId); } void ShutdownPokenav(void) { PlaySE(SE_POKENAV_OFF); - sub_81CAADC(); + ResetBldCnt_(); BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); } @@ -345,7 +345,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) ResetTempTileDataBuffers(); return LT_INC_AND_CONTINUE; case 1: - structPtr = GetSubstructPtr(0); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0); SetBgTilemapBuffer(0, structPtr->tilemapBuffer); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); @@ -371,46 +371,46 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) } } -void sub_81C7834(void *func1, void *func2) // Fix types later. +void SetActiveMenuLoopTasks(void *createLoopTask, void *isLoopTaskActive) // Fix types later. { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->unk0 = func1; - structPtr->unk4 = func2; - structPtr->unk8 = 0; + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->loopTask = createLoopTask; + structPtr->isLoopTaskActiveFunc = isLoopTaskActive; + structPtr->unused = 0; } -void sub_81C7850(u32 a0) +void RunMainMenuLoopedTask(u32 a0) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->unk8 = 0; - structPtr->unk0(a0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->unused = 0; + structPtr->loopTask(a0); } -u32 sub_81C786C(void) +u32 IsActiveMenuLoopTaskActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - return structPtr->unk4(); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return structPtr->isLoopTaskActiveFunc(); } -void sub_81C7880(void) +void SlideMenuHeaderUp(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_ScrollMenuHeaderDown, 4); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); } -void sub_81C78A0(void) +void SlideMenuHeaderDown(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_ScrollMenuHeaderUp, 4); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); } bool32 MainMenuLoopedTaskIsBusy(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); return IsLoopedTaskActive(structPtr->currentTaskId); } -static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) +static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) { switch (a0) { @@ -431,7 +431,7 @@ static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) } } -static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) +static u32 LoopedTask_SlideMenuHeaderDown(s32 a0) { if (ChangeBgY(0, 384, 2) <= 0) { @@ -465,35 +465,35 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) } } -void sub_81C7990(u32 a0, u16 a1) +void PokenavFillPalette(u32 palIndex, u16 fillValue) { - CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); + CpuFill16(fillValue, gPlttBufferFaded + 0x100 + (palIndex * 16), 16 * sizeof(u16)); } -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette) +void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) { if (a4 == 0) { - CpuCopy16(a0, palette, a2 * 2); + CpuCopy16(src, palette, size * 2); } else if (a4 >= a3) { - CpuCopy16(a1, palette, a2 * 2); + CpuCopy16(dest, palette, size * 2); } else { int r, g, b; int r1, g1, b1; - while (a2--) + while (size--) { - r = GET_R(*a0); - g = GET_G(*a0); - b = GET_B(*a0); + r = GET_R(*src); + g = GET_G(*src); + b = GET_B(*src); - r1 = ((((GET_R(*a1) << 8) - (r << 8)) / a3) * a4) >> 8; - g1 = ((((GET_G(*a1) << 8) - (g << 8)) / a3) * a4) >> 8; - b1 = ((((GET_B(*a1) << 8) - (b << 8)) / a3) * a4) >> 8; + r1 = ((((GET_R(*dest) << 8) - (r << 8)) / a3) * a4) >> 8; + g1 = ((((GET_G(*dest) << 8) - (g << 8)) / a3) * a4) >> 8; + b1 = ((((GET_B(*dest) << 8) - (b << 8)) / a3) * a4) >> 8; r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r1 g = (g + g1) & 0x1F; //See above @@ -501,7 +501,7 @@ void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *pale *palette = RGB2(r, g, b); //See above comment - a0++, a1++; + src++, dest++; palette++; } } @@ -509,7 +509,7 @@ void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *pale void PokenavFadeScreen(s32 fadeType) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); switch (fadeType) { @@ -548,7 +548,7 @@ void InitBgTemplates(const struct BgTemplate *templates, int count) static void InitHelpBar(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); InitWindows(&sHelpBarWindowTemplate[0]); structPtr->helpBarWindowId = 0; @@ -559,7 +559,7 @@ static void InitHelpBar(void) void PrintHelpBarText(u32 textId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DrawHelpBar(structPtr->helpBarWindowId); AddTextPrinterParameterized3(structPtr->helpBarWindowId, 1, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); @@ -580,7 +580,7 @@ static void InitPokenavMainMenuResources(void) { s32 i; u8 spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++) LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]); @@ -593,7 +593,7 @@ static void InitPokenavMainMenuResources(void) static void CleanupPokenavMainMenuResources(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DestroySprite(structPtr->spinningPokenav); FreeSpriteTilesByTag(0); @@ -608,7 +608,7 @@ static void SpriteCB_SpinningPokenav(struct Sprite *sprite) struct Sprite *PauseSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); structPtr->spinningPokenav->callback = SpriteCallbackDummy; return structPtr->spinningPokenav; @@ -616,7 +616,7 @@ struct Sprite *PauseSpinningPokenavSprite(void) void ResumeSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); structPtr->spinningPokenav->pos1.x = 220; structPtr->spinningPokenav->pos1.y = 12; @@ -629,7 +629,7 @@ void ResumeSpinningPokenavSprite(void) static void InitHoennMapHeaderSprites(void) { s32 i, spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); AllocSpritePalette(1); @@ -658,9 +658,9 @@ void LoadLeftHeaderGfxForIndex(u32 menuGfxId) LoadLeftHeaderGfxForSubMenu(menuGfxId - POKENAV_GFX_SUBMENUS_START); } -void sub_81C7E14(u32 menuGfxId) +void UpdateRegionMapRightHeaderTiles(u32 menuGfxId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT) structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; @@ -676,7 +676,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) if (menuGfxId >= POKENAV_GFX_SUBMENUS_START) return; - structPtr = GetSubstructPtr(0); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); tag = sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].tag; size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); @@ -704,33 +704,33 @@ static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId) RequestDma3Copy(&gDecompressionBuffer[0x1000], (void *)VRAM + 0x10800 + (GetSpriteTileStartByTag(2) * 32), size, 1); } -void sub_81C7FA0(u32 menuGfxId, bool32 arg1, bool32 arg2) +void ShowLeftHeaderGfx(u32 menuGfxId, bool32 isMain, bool32 isOnRightSide) { - u32 var; + u32 tileTop; - if (!arg1) - var = 0x30; + if (!isMain) + tileTop = 0x30; else - var = 0x10; + tileTop = 0x10; if (menuGfxId < POKENAV_GFX_SUBMENUS_START) - ShowLeftHeaderSprites(var, arg2); + ShowLeftHeaderSprites(tileTop, isOnRightSide); else - ShowLeftHeaderSubmenuSprites(var, arg2); + ShowLeftHeaderSubmenuSprites(tileTop, isOnRightSide); } -void sub_81C7FC4(u32 arg0, bool32 arg1) +void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide) { - if (arg0 < 6) - HideLeftHeaderSprites(arg1); + if (id < POKENAV_GFX_PARTY_MENU) + HideLeftHeaderSprites(onRightSide); else - HideLeftHeaderSubmenuSprites(arg1); + HideLeftHeaderSubmenuSprites(onRightSide); } -void sub_81C7FDC(void) +void SetLeftHeaderSpritesInvisibility(void) { s32 i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { @@ -739,9 +739,9 @@ void sub_81C7FDC(void) } } -bool32 sub_81C8010(void) +bool32 AreLeftHeaderSpritesMoving(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (structPtr->leftHeaderSprites[0]->callback == SpriteCallbackDummy && structPtr->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) return FALSE; @@ -752,7 +752,7 @@ bool32 sub_81C8010(void) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 32; @@ -769,7 +769,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 16; @@ -786,7 +786,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) static void HideLeftHeaderSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 32, end = -96; @@ -802,7 +802,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide) static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 16, end = -96; -- cgit v1.2.3 From 44c2d15ca9f3b1b758fc70acdf6d0cf1cf74cf5f Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 22:07:30 -0400 Subject: re-match sub_81C79BC (from #1177) also re-define RBG macros --- src/pokenav_main_menu.c | 168 ++++++++++-------------------------------------- 1 file changed, 35 insertions(+), 133 deletions(-) (limited to 'src/pokenav_main_menu.c') diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 0e2425d4e..a100e2c23 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -471,139 +471,41 @@ void sub_81C7990(u32 a0, u16 a1) CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); } -NAKED -void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - str r0, [sp]\n\ - str r1, [sp, 0x4]\n\ - mov r10, r2\n\ - str r3, [sp, 0x8]\n\ - ldr r0, [sp, 0x2C]\n\ - cmp r0, 0\n\ - bne _081C79E4\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp]\n\ - b _081C79F4\n\ - .pool\n\ -_081C79E4:\n\ - ldr r2, [sp, 0x2C]\n\ - ldr r0, [sp, 0x8]\n\ - cmp r2, r0\n\ - blt _081C7A00\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp, 0x4]\n\ -_081C79F4:\n\ - ldr r1, [sp, 0x30]\n\ - bl CpuSet\n\ - b _081C7AAE\n\ - .pool\n\ -_081C7A00:\n\ - movs r2, 0x1\n\ - negs r2, r2\n\ - add r10, r2\n\ - b _081C7AA6\n\ -_081C7A08:\n\ - ldr r1, [sp]\n\ - ldrh r0, [r1]\n\ - movs r2, 0x1F\n\ - mov r9, r2\n\ - mov r1, r9\n\ - ands r1, r0\n\ - mov r9, r1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 21\n\ - movs r1, 0x1F\n\ - ands r1, r2\n\ - mov r8, r1\n\ - lsrs r7, r0, 26\n\ - movs r2, 0x1F\n\ - ands r7, r2\n\ - ldr r0, [sp, 0x4]\n\ - ldrh r4, [r0]\n\ - movs r0, 0x1F\n\ - ands r0, r4\n\ - mov r1, r9\n\ - subs r0, r1\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r2, [sp, 0x2C]\n\ - adds r6, r0, 0\n\ - muls r6, r2\n\ - asrs r6, 8\n\ - lsls r4, 16\n\ - lsrs r0, r4, 21\n\ - movs r1, 0x1F\n\ - ands r0, r1\n\ - mov r2, r8\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - adds r5, r0, 0\n\ - muls r5, r1\n\ - asrs r5, 8\n\ - lsrs r4, 26\n\ - movs r2, 0x1F\n\ - ands r4, r2\n\ - subs r4, r7\n\ - lsls r4, 8\n\ - adds r0, r4, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - muls r0, r1\n\ - asrs r0, 8\n\ - add r6, r9\n\ - movs r2, 0x1F\n\ - ands r6, r2\n\ - add r5, r8\n\ - ands r5, r2\n\ - adds r0, r7, r0\n\ - ands r0, r2\n\ - lsls r0, 10\n\ - lsls r5, 5\n\ - orrs r0, r5\n\ - orrs r0, r6\n\ - ldr r1, [sp, 0x30]\n\ - strh r0, [r1]\n\ - ldr r2, [sp]\n\ - adds r2, 0x2\n\ - str r2, [sp]\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x2\n\ - str r0, [sp, 0x4]\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x30]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - add r10, r1\n\ -_081C7AA6:\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r10, r0\n\ - bne _081C7A08\n\ -_081C7AAE:\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0"); +void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette) +{ + + if (a4 == 0) + { + CpuCopy16(a0, palette, a2 * 2); + } + else if (a4 >= a3) + { + CpuCopy16(a1, palette, a2 * 2); + } + else + { + int r, g, b; + int r1, g1, b1; + while (a2--) + { + r = GET_R(*a0); + g = GET_G(*a0); + b = GET_B(*a0); + + r1 = ((((GET_R(*a1) << 8) - (r << 8)) / a3) * a4) >> 8; + g1 = ((((GET_G(*a1) << 8) - (g << 8)) / a3) * a4) >> 8; + b1 = ((((GET_B(*a1) << 8) - (b << 8)) / a3) * a4) >> 8; + + r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r1 + g = (g + g1) & 0x1F; //See above + b = (b + b1) & 0x1F; //See above + + *palette = RGB2(r, g, b); //See above comment + + a0++, a1++; + palette++; + } + } } void PokenavFadeScreen(s32 fadeType) -- cgit v1.2.3 From 8bf401c2272b7c4182f54cb1285f6067fb5247f9 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 2 Nov 2020 18:43:11 -0500 Subject: address comments --- src/pokenav_main_menu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/pokenav_main_menu.c') diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index a100e2c23..fc7004a88 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -436,9 +436,9 @@ static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) if (ChangeBgY(0, 384, 2) <= 0) { ChangeBgY(0, 0, 0); - return 4; + return LT_FINISH; } - return 2; + return LT_PAUSE; } void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) @@ -682,7 +682,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); LZ77UnCompWram(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); - RequestDma3Copy(gDecompressionBuffer, (void *)VRAM + 0x10000 + (GetSpriteTileStartByTag(2) * 32), size, 1); + RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].size; if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) -- cgit v1.2.3