From 97987bc1b7eca5ab4d8fce0852d7954877082e29 Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Sun, 20 Nov 2022 08:11:13 +0800 Subject: [PATCH 1/3] Document src/region-map.c --- include/region_map.h | 2 +- src/region_map.c | 271 ++++++++++++++++++++++--------------------- 2 files changed, 139 insertions(+), 134 deletions(-) diff --git a/include/region_map.h b/include/region_map.h index ccbb6d2fc..fec528e1b 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -14,7 +14,7 @@ enum { u8 *GetMapName(u8 *dest, u16 mapsec, u16 fill); u8 *GetMapNameGeneric(u8 *dest, u16 mapsec); u8 *GetMapNameGeneric_(u8 *dest, u16 mapsec); -void InitRegionMapWithExitCB(u8 a0, void (*a1)(void)); +void InitRegionMapWithExitCB(u8 type, void (*callback)(void)); void CB2_OpenFlyMap(void); #endif // GUARD_REGION_MAP_H diff --git a/src/region_map.c b/src/region_map.c index a767ade9a..07232a3f6 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -76,6 +76,15 @@ enum { MAPPERM_COUNT }; +enum { + MAPEDGE_TOP_LEFT, + MAPEDGE_MID_LEFT, + MAPEDGE_BOT_LEFT, + MAPEDGE_TOP_RIGHT, + MAPEDGE_MID_RIGHT, + MAPEDGE_BOT_RIGHT, +}; + #define FREE_IF_NOT_NULL(ptr) ({ \ if (ptr) { \ FREE_AND_SET_NULL(ptr); \ @@ -264,7 +273,7 @@ struct RegionMapGpuRegs struct FlyMap { u8 state; - u8 unknown; // Never read + u8 unused; // Never read bool8 selectedDestination; }; @@ -302,9 +311,9 @@ static u8 GetSelectedRegionMap(void); static void InitSwitchMapMenu(u8, u8, TaskFunc); static void Task_SwitchMapMenu(u8); static void FreeSwitchMapMenu(u8); -static bool8 sub_80C12EC(void); +static bool8 BrightenScreenForSwitchMapMenu(void); static void LoadSwitchMapTilemap(u8, u16 *); -static void DrawSwitchMapSelectionHighlight(void); +static void SetGpuRegsToDimScreen(void); static bool8 DimScreenForSwitchMapMenu(void); static bool8 HandleSwitchMapInput(void); static bool8 CreateSwitchMapCursor(void); @@ -324,7 +333,7 @@ static void Task_MapOpenAnim(u8); static void FreeMapOpenCloseAnim(void); static void FreeMapEdgeSprites(void); static bool8 MoveMapEdgesOutward(void); -static void sub_80C2B48(void); +static void SetGpuWindowDimsToMapEdges(void); static void DoMapCloseAnim(u8); static void Task_MapCloseAnim(u8); static bool8 MoveMapEdgesInward(void); @@ -387,12 +396,7 @@ static const u16 sPlayerIcon_RedPal[] = INCBIN_U16("graphics/region_map/player_i static const u16 sPlayerIcon_LeafPal[] = INCBIN_U16("graphics/region_map/player_icon_leaf.gbapal"); static const u16 sMiscIcon_Pal[] = INCBIN_U16("graphics/region_map/misc_icon.gbapal"); // For dungeon and fly icons static const u16 sRegionMap_Pal[] = INCBIN_U16("graphics/region_map/region_map.gbapal"); -static const u16 unref_83EF37C[] = { - RGB(0, 0, 31), - RGB(0, 12, 31), - RGB_WHITE, - RGB_WHITE -}; +static const u16 sUnusedPalette[] = { RGB(0, 0, 31), RGB(0, 12, 31), RGB_WHITE, RGB_WHITE }; static const u16 sSwitchMapCursor_Pal[] = INCBIN_U16("graphics/region_map/switch_map_cursor.gbapal"); static const u16 sMapEdge_Pal[] = INCBIN_U16("graphics/region_map/map_edge.gbapal"); static const u32 sSwitchMapCursorLeft_Gfx[] = INCBIN_U32("graphics/region_map/switch_map_cursor_left.4bpp.lz"); @@ -727,7 +731,7 @@ static const union AnimCmd *const sAnims_MapEdge[] = { sAnim_MapEdge }; -static const struct GpuWindowParams gUnknown_83F1C34 = { +static const struct GpuWindowParams sMapWindowDim = { .left = 24, .top = 16, .right = 216, @@ -952,12 +956,12 @@ static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) } } -static void sub_80BFEA0(void) +static void TintMapEdgesPalette(void) { - u16 pal[16]; - CpuCopy16(&sRegionMap_Pal[32], pal, sizeof(pal)); - RegionMap_DarkenPalette(pal, NELEMS(pal), 95); - LoadPalette(pal, 32, sizeof(pal)); + u16 mapEdgesPal[16]; + CpuCopy16(&sRegionMap_Pal[0x20], mapEdgesPal, sizeof(mapEdgesPal)); + RegionMap_DarkenPalette(mapEdgesPal, NELEMS(mapEdgesPal), 95); + LoadPalette(mapEdgesPal, 0x20, sizeof(mapEdgesPal)); LoadPalette(&sRegionMap_Pal[0x2F], 0x2F, sizeof(sRegionMap_Pal[0x2F])); } @@ -1105,7 +1109,7 @@ static bool8 LoadRegionMapGfx(void) break; case 1: LoadPalette(sRegionMap_Pal, 0, sizeof(sRegionMap_Pal)); - sub_80BFEA0(); + TintMapEdgesPalette(); if (sRegionMap->type != REGIONMAP_TYPE_NORMAL) { LoadPalette(&sTopBar_Pal[15], 16 * 0, sizeof(sTopBar_Pal[15])); @@ -1276,7 +1280,7 @@ static void Task_RegionMap(u8 taskId) DoMapCloseAnim(taskId); // FIXME: goto required to match // sRegionMap->mainState++; - goto _080C0798; + goto INCREMENT_MAIN_STATE_AND_BREAK; } else { @@ -1285,7 +1289,7 @@ static void Task_RegionMap(u8 taskId) break; case 5: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - _080C0798: + INCREMENT_MAIN_STATE_AND_BREAK: sRegionMap->mainState++; break; default: @@ -1420,7 +1424,9 @@ static void UpdateMapsecNameBox(void) ResetGpuRegs(); SetBldCnt(0, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_OBJ, BLDCNT_EFFECT_DARKEN); SetBldY(BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2); - SetWinIn(57, 57); + SetWinIn( + (WININ_WIN0_BG0 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR), + (WININ_WIN1_BG0 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR) >> 8); SetWinOut(WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[WIN_MAP_NAME]); SetGpuWindowDims(WIN_DUNGEON_NAME, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); @@ -1589,7 +1595,7 @@ static void ResetGpuRegsForSwitchMapMenu(void) SetBldAlpha(16 - sSwitchMapMenu->alpha, sSwitchMapMenu->alpha); } -static bool8 sub_80C1014(void) +static bool8 FadeSwitchMapMenuIn(void) { if (sSwitchMapMenu->alpha < 16) { @@ -1603,7 +1609,7 @@ static bool8 sub_80C1014(void) } } -static bool8 sub_80C1058(void) +static bool8 FadeSwitchMapMenuOut(void) { if (sSwitchMapMenu->alpha >= 2) { @@ -1649,9 +1655,9 @@ static void Task_SwitchMapMenu(u8 taskId) sSwitchMapMenu->mainState++; break; case 6: - if (sub_80C1014() == TRUE) + if (FadeSwitchMapMenuIn() == TRUE) { - DrawSwitchMapSelectionHighlight(); + SetGpuRegsToDimScreen(); sSwitchMapMenu->mainState++; } break; @@ -1681,7 +1687,7 @@ static void Task_SwitchMapMenu(u8 taskId) } break; case 10: - if (sub_80C12EC() == TRUE) + if (BrightenScreenForSwitchMapMenu() == TRUE) { FreeSwitchMapCursor(); ResetGpuRegsForSwitchMapMenu(); @@ -1689,7 +1695,7 @@ static void Task_SwitchMapMenu(u8 taskId) } break; case 11: - if (sub_80C1058() == TRUE) + if (FadeSwitchMapMenuOut() == TRUE) { sSwitchMapMenu->mainState++; } @@ -1716,7 +1722,7 @@ static void FreeSwitchMapMenu(u8 taskId) FREE_IF_NOT_NULL(sSwitchMapMenu); } -static bool8 sub_80C12EC(void) +static bool8 BrightenScreenForSwitchMapMenu(void) { if (sSwitchMapMenu->blendY != 0) { @@ -1748,7 +1754,7 @@ static void LoadSwitchMapTilemap(u8 bg, u16 *map) } } -static void DrawSwitchMapSelectionHighlight(void) +static void SetGpuRegsToDimScreen(void) { struct GpuWindowParams data; data.left = sSwitchMapMenu->highlight.left = 72; @@ -1757,7 +1763,7 @@ static void DrawSwitchMapSelectionHighlight(void) data.bottom = sSwitchMapMenu->highlight.bottom = sSwitchMapMenu->highlight.top + 32; ResetGpuRegs(); SetBldCnt(0, (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_OBJ), BLDCNT_EFFECT_DARKEN); - SetWinIn(31, 21); + SetWinIn((WININ_WIN0_BG_ALL | WININ_WIN0_OBJ), (WININ_WIN1_BG0 | WININ_WIN1_BG2 | WININ_WIN1_OBJ) >> 8); SetWinOut(WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); SetDispCnt(1, FALSE); SetGpuWindowDims(1, &data); @@ -1765,7 +1771,7 @@ static void DrawSwitchMapSelectionHighlight(void) static bool8 DimScreenForSwitchMapMenu(void) { - if (sSwitchMapMenu->blendY < (BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2)) + if (sSwitchMapMenu->blendY < 6) { sSwitchMapMenu->blendY++; SetBldY(sSwitchMapMenu->blendY); @@ -1797,7 +1803,7 @@ static bool8 HandleSwitchMapInput(void) sSwitchMapMenu->currentSelection++; changedSelection = TRUE; } - if (JOY_NEW(A_BUTTON) && sSwitchMapMenu->blendY == (BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2)) + if (JOY_NEW(A_BUTTON) && sSwitchMapMenu->blendY == 6) { PlaySE(SE_M_SWIFT); sSwitchMapMenu->chosenRegion = sSwitchMapMenu->currentSelection; @@ -2111,7 +2117,7 @@ static void InitScreenForDungeonMapPreview(void) ResetGpuRegs(); SetBldCnt(0, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_OBJ, BLDCNT_EFFECT_DARKEN); SetBldY(sDungeonMapPreview->blendY); - SetWinIn(0, 13); + SetWinIn(0, (WININ_WIN1_BG0 | WININ_WIN1_BG2 | WININ_WIN1_BG3) >> 8); SetWinOut(WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); SetDispCnt(1, FALSE); x = GetMapCursorX(); @@ -2126,7 +2132,7 @@ static void InitScreenForDungeonMapPreview(void) sDungeonMapPreview->bottomIncrement = (136 - sDungeonMapPreview->bottom) / 8; } -static bool8 UpdateDungeonMapPreview(bool8 a0) +static bool8 UpdateDungeonMapPreview(bool8 a0) // todo: rename a0 { struct GpuWindowParams data; @@ -2139,7 +2145,7 @@ static bool8 UpdateDungeonMapPreview(bool8 a0) sDungeonMapPreview->right += sDungeonMapPreview->rightIncrement; sDungeonMapPreview->bottom += sDungeonMapPreview->bottomIncrement; sDungeonMapPreview->updateCounter++; - if (sDungeonMapPreview->blendY < (BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2)) + if (sDungeonMapPreview->blendY < 6) sDungeonMapPreview->blendY++; } else @@ -2175,7 +2181,6 @@ static bool8 UpdateDungeonMapPreview(bool8 a0) static void SpriteCB_MapEdge(struct Sprite *sprite) { - } static void CreateMapEdgeSprite(u8 mapEdgeNum, u8 tileTag, u8 palTag) @@ -2249,28 +2254,28 @@ static bool8 LoadMapEdgeGfx(void) switch (sMapOpenCloseAnim->loadGfxState) { case 0: - LZ77UnCompWram(sMapEdge_TopLeft, sMapOpenCloseAnim->mapEdges[0]->tiles); - CreateMapEdgeSprite(0, 4, 4); + LZ77UnCompWram(sMapEdge_TopLeft, sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->tiles); + CreateMapEdgeSprite(MAPEDGE_TOP_LEFT, 4, 4); break; case 1: - LZ77UnCompWram(sMapEdge_MidLeft, sMapOpenCloseAnim->mapEdges[1]->tiles); - CreateMapEdgeSprite(1, 5, 5); + LZ77UnCompWram(sMapEdge_MidLeft, sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->tiles); + CreateMapEdgeSprite(MAPEDGE_MID_LEFT, 5, 5); break; case 2: - LZ77UnCompWram(sMapEdge_BottomLeft, sMapOpenCloseAnim->mapEdges[2]->tiles); - CreateMapEdgeSprite(2, 6, 6); + LZ77UnCompWram(sMapEdge_BottomLeft, sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->tiles); + CreateMapEdgeSprite(MAPEDGE_BOT_LEFT, 6, 6); break; case 3: - LZ77UnCompWram(sMapEdge_TopRight, sMapOpenCloseAnim->mapEdges[3]->tiles); - CreateMapEdgeSprite(3, 7, 7); + LZ77UnCompWram(sMapEdge_TopRight, sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->tiles); + CreateMapEdgeSprite(MAPEDGE_TOP_RIGHT, 7, 7); break; case 4: - LZ77UnCompWram(sMapEdge_MidRight, sMapOpenCloseAnim->mapEdges[4]->tiles); - CreateMapEdgeSprite(4, 8, 8); + LZ77UnCompWram(sMapEdge_MidRight, sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->tiles); + CreateMapEdgeSprite(MAPEDGE_MID_RIGHT, 8, 8); break; case 5: - LZ77UnCompWram(sMapEdge_BottomRight, sMapOpenCloseAnim->mapEdges[5]->tiles); - CreateMapEdgeSprite(5, 9, 9); + LZ77UnCompWram(sMapEdge_BottomRight, sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->tiles); + CreateMapEdgeSprite(MAPEDGE_BOT_RIGHT, 9, 9); break; case 6: LZ77UnCompWram(sMapEdge_Gfx, sMapOpenCloseAnim->tiles); @@ -2291,24 +2296,24 @@ static bool8 LoadMapEdgeGfx(void) static void InitScreenForMapOpenAnim(void) { struct GpuWindowParams data; - data.left = sMapOpenCloseAnim->mapEdges[0]->x + 8; + data.left = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->x + 8; data.top = 16; - data.right = sMapOpenCloseAnim->mapEdges[3]->x - 8; + data.right = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->x - 8; data.bottom = 160; SetBldCnt(0, BLDCNT_TGT1_BG1, BLDCNT_EFFECT_NONE); - SetWinIn(18, 0); + SetWinIn((WININ_WIN0_BG1 | WININ_WIN0_OBJ), 0); SetWinOut(WINOUT_WIN01_OBJ); SetGpuWindowDims(0, &data); SetDispCnt(0, FALSE); } -static void sub_80C253C(void) +static void SetGpuRegsToFadeMapToWhite(void) { - struct GpuWindowParams data = gUnknown_83F1C34; + struct GpuWindowParams data = sMapWindowDim; ResetGpuRegs(); SetBldCnt(BLDCNT_TGT2_BG1 >> 8, (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_BD), BLDCNT_EFFECT_LIGHTEN); SetBldY(sMapOpenCloseAnim->blendY); - SetWinIn(55, 0); + SetWinIn((WININ_WIN0_ALL & ~WININ_WIN0_BG3), 0); SetWinOut(WINOUT_WIN01_BG1 | WINOUT_WIN01_OBJ); SetGpuWindowDims(0, &data); SetDispCnt(0, FALSE); @@ -2374,7 +2379,7 @@ static void Task_MapOpenAnim(u8 taskId) ShowBg(3); ShowBg(1); SetMapEdgeInvisibility(NELEMS(sMapOpenCloseAnim->mapEdges), FALSE); - sub_80C2B48(); + SetGpuWindowDimsToMapEdges(); sMapOpenCloseAnim->openState++; break; case 5: @@ -2394,8 +2399,8 @@ static void Task_MapOpenAnim(u8 taskId) sMapOpenCloseAnim->openState++; break; case 8: - sMapOpenCloseAnim->blendY = (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3); - sub_80C253C(); + sMapOpenCloseAnim->blendY = 15; + SetGpuRegsToFadeMapToWhite(); SetBg0andBg3Hidden(FALSE); SetFlyIconInvisibility(GetSelectedRegionMap(), NELEMS(sMapIcons->flyIcons), FALSE); SetDungeonIconInvisibility(GetSelectedRegionMap(), NELEMS(sMapIcons->dungeonIcons), FALSE); @@ -2430,7 +2435,7 @@ static void Task_MapOpenAnim(u8 taskId) sMapOpenCloseAnim->openState++; break; case 12: - if (sMapOpenCloseAnim->blendY == BLDCNT_TGT1_BG1) + if (sMapOpenCloseAnim->blendY == 2) { SetMapEdgeInvisibility(NELEMS(sMapOpenCloseAnim->mapEdges), TRUE); sMapOpenCloseAnim->openState++; @@ -2456,79 +2461,79 @@ static void Task_MapOpenAnim(u8 taskId) static bool8 MoveMapEdgesOutward(void) { - sub_80C2B48(); - if (sMapOpenCloseAnim->mapEdges[0]->sprite->x == 0) + SetGpuWindowDimsToMapEdges(); + if (sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x == 0) { return TRUE; } else if (sMapOpenCloseAnim->moveState > 17) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 1; } else if (sMapOpenCloseAnim->moveState > 14) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 2; } else if (sMapOpenCloseAnim->moveState > 10) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 3; } else if (sMapOpenCloseAnim->moveState > 6) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 5; } else { - sMapOpenCloseAnim->mapEdges[0]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[1]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[2]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[3]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[4]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[5]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x += 8; } sMapOpenCloseAnim->moveState++; return FALSE; } -static void sub_80C2B48(void) +static void SetGpuWindowDimsToMapEdges(void) { struct GpuWindowParams data; - data.left = sMapOpenCloseAnim->mapEdges[0]->sprite->x; + data.left = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x; data.top = 16; - data.right = sMapOpenCloseAnim->mapEdges[3]->sprite->x; + data.right = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x; data.bottom = 160; SetGpuWindowDims(0, &data); } -static void sub_80C2B9C(void) +static void InitScreenForMapCloseAnim(void) { struct GpuWindowParams data; - data.left = sMapOpenCloseAnim->mapEdges[0]->x + 16; + data.left = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->x + 16; data.top = 16; - data.right = sMapOpenCloseAnim->mapEdges[3]->x - 16; + data.right = sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->x - 16; data.bottom = 160; SetBldCnt(0, BLDCNT_TGT1_BG1, BLDCNT_EFFECT_NONE); - SetWinIn(18, 0); + SetWinIn((WININ_WIN0_BG1 | WININ_WIN0_OBJ), 0); SetWinOut(WINOUT_WIN01_OBJ); SetGpuWindowDims(0, &data); SetDispCnt(0, FALSE); @@ -2578,11 +2583,11 @@ static void Task_MapCloseAnim(u8 taskId) sMapOpenCloseAnim->closeState++; break; case 4: - sub_80C253C(); + SetGpuRegsToFadeMapToWhite(); sMapOpenCloseAnim->closeState++; break; case 5: - if (sMapOpenCloseAnim->blendY == (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3)) + if (sMapOpenCloseAnim->blendY == 15) { SetBldY(sMapOpenCloseAnim->blendY); sMapOpenCloseAnim->closeState++; @@ -2594,8 +2599,8 @@ static void Task_MapCloseAnim(u8 taskId) } break; case 6: - sub_80C2B9C(); - sub_80C2B48(); + InitScreenForMapCloseAnim(); + SetGpuWindowDimsToMapEdges(); PlaySE(SE_CARD_FLIPPING); sMapOpenCloseAnim->closeState++; break; @@ -2612,55 +2617,55 @@ static void Task_MapCloseAnim(u8 taskId) static bool8 MoveMapEdgesInward(void) { - sub_80C2B48(); - if (sMapOpenCloseAnim->mapEdges[0]->sprite->x == 104) + SetGpuWindowDimsToMapEdges(); + if (sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x == 104) { return TRUE; } else if (sMapOpenCloseAnim->moveState > 17) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 1; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 1; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 1; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 1; } else if (sMapOpenCloseAnim->moveState > 14) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 2; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 2; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 2; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 2; } else if (sMapOpenCloseAnim->moveState > 10) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 3; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 3; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 3; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 3; } else if (sMapOpenCloseAnim->moveState > 6) { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 5; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 5; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 5; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 5; } else { - sMapOpenCloseAnim->mapEdges[0]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[1]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[2]->sprite->x += 8; - sMapOpenCloseAnim->mapEdges[3]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[4]->sprite->x -= 8; - sMapOpenCloseAnim->mapEdges[5]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_LEFT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_LEFT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_LEFT]->sprite->x += 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_TOP_RIGHT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_MID_RIGHT]->sprite->x -= 8; + sMapOpenCloseAnim->mapEdges[MAPEDGE_BOT_RIGHT]->sprite->x -= 8; } sMapOpenCloseAnim->moveState++; return FALSE; @@ -3994,7 +3999,7 @@ static void InitFlyMap(void) { sFlyMap = AllocZeroed(sizeof(struct FlyMap)); sFlyMap->state = 0; - sFlyMap->unknown = 0; + sFlyMap->unused = 0; } static void FreeFlyMap(u8 taskId) From 1ebe523b29ba59d401b517f61c7ea5209e91af29 Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Sun, 20 Nov 2022 08:16:07 +0800 Subject: [PATCH 2/3] Document src/title_screen.c --- graphics/title_screen/blank_obj.png | Bin 148 -> 0 bytes graphics/title_screen/blank_sprite.png | Bin 0 -> 103 bytes ...blank_fire_sprite.png => blank_flames.png} | Bin graphics/title_screen/firered/fire_sprite.png | Bin 539 -> 0 bytes graphics/title_screen/firered/flames.png | Bin 0 -> 534 bytes .../firered/{fire_sprite.pal => slash.pal} | 0 .../title_screen/firered/slash_sprite.pal | 19 - .../leafgreen/blank_leaf_sprite.png | Bin 135 -> 0 bytes .../title_screen/leafgreen/leaf_sprite.png | Bin 350 -> 0 bytes graphics/title_screen/leafgreen/leaves.png | Bin 0 -> 294 bytes .../leafgreen/{leaf_sprite.pal => slash.pal} | 0 .../title_screen/leafgreen/slash_sprite.pal | 19 - graphics/title_screen/leafgreen/streak.png | Bin 0 -> 230 bytes graphics/title_screen/slash.png | Bin 0 -> 276 bytes graphics/title_screen/slash_sprite.png | Bin 188 -> 0 bytes .../{unk_83BFBE4.bin => unused1.bin} | Bin .../{unk_83C0408.bin => unused2.bin} | Bin .../{unk_83C0C00.bin => unused3.bin} | Bin .../{unk_83C139C.bin => unused4.bin} | Bin .../{unk_83C1BB8.bin => unused5.bin} | Bin .../{unk_83C2380.bin => unused6.bin} | Bin include/graphics.h | 4 +- src/graphics.c | 8 +- src/title_screen.c | 762 ++++++++++-------- 24 files changed, 434 insertions(+), 378 deletions(-) delete mode 100644 graphics/title_screen/blank_obj.png create mode 100644 graphics/title_screen/blank_sprite.png rename graphics/title_screen/firered/{blank_fire_sprite.png => blank_flames.png} (100%) delete mode 100644 graphics/title_screen/firered/fire_sprite.png create mode 100644 graphics/title_screen/firered/flames.png rename graphics/title_screen/firered/{fire_sprite.pal => slash.pal} (100%) delete mode 100644 graphics/title_screen/firered/slash_sprite.pal delete mode 100644 graphics/title_screen/leafgreen/blank_leaf_sprite.png delete mode 100644 graphics/title_screen/leafgreen/leaf_sprite.png create mode 100644 graphics/title_screen/leafgreen/leaves.png rename graphics/title_screen/leafgreen/{leaf_sprite.pal => slash.pal} (100%) delete mode 100644 graphics/title_screen/leafgreen/slash_sprite.pal create mode 100644 graphics/title_screen/leafgreen/streak.png create mode 100644 graphics/title_screen/slash.png delete mode 100644 graphics/title_screen/slash_sprite.png rename graphics/title_screen/{unk_83BFBE4.bin => unused1.bin} (100%) rename graphics/title_screen/{unk_83C0408.bin => unused2.bin} (100%) rename graphics/title_screen/{unk_83C0C00.bin => unused3.bin} (100%) rename graphics/title_screen/{unk_83C139C.bin => unused4.bin} (100%) rename graphics/title_screen/{unk_83C1BB8.bin => unused5.bin} (100%) rename graphics/title_screen/{unk_83C2380.bin => unused6.bin} (100%) diff --git a/graphics/title_screen/blank_obj.png b/graphics/title_screen/blank_obj.png deleted file mode 100644 index 682c224323a44b4aca64afba080b8004fee8aa5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QU(D&A+AAZx9mN7cFB@8)y>UU zuipFr&FlYFg(b}r-M&Vq09~`(k z{dDSOKF&)|*8h=t&(d$-CY_qM{WqH&%SyI+cS`>}L;&t;ucLK6U1fZ|zwV!fPN#iRfL00000000000000008-7g1>}|c0004@ zNkl07*qoM6N<$f>Jx?@c;k- literal 0 HcmV?d00001 diff --git a/graphics/title_screen/firered/fire_sprite.pal b/graphics/title_screen/firered/slash.pal similarity index 100% rename from graphics/title_screen/firered/fire_sprite.pal rename to graphics/title_screen/firered/slash.pal diff --git a/graphics/title_screen/firered/slash_sprite.pal b/graphics/title_screen/firered/slash_sprite.pal deleted file mode 100644 index 815547f37..000000000 --- a/graphics/title_screen/firered/slash_sprite.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -82 205 180 -0 0 0 -255 255 189 -255 246 139 -255 213 65 -255 172 0 -197 164 49 -115 180 139 -98 189 156 -90 197 164 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -82 205 180 diff --git a/graphics/title_screen/leafgreen/blank_leaf_sprite.png b/graphics/title_screen/leafgreen/blank_leaf_sprite.png deleted file mode 100644 index d783c12041999b07eb0bf66092aab85dfa537b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^96;>A0wfrY&u<9_QhuH;jv*3L&-N(_9dO`a{%mnU zVu$>c|J*ibWkt7^-jy_(slsH!xc-7_*QJOHQ!UrczPY7ZoyBp&6IFHVx69||7H&Ky jnm4DV-+HF)`oEERhj|WLTzP-b4`hR?mPz+4 zE%!P;`~Pgp|Fc2gnzw8z{(pALw>8!8rep!tLI6;4)p5OLKn`O`kY6x^!?PP{K+YXc z7sn8b-nAjOd5Y9NTHd_`HTk-v2>J|uz7I>tz z`N}KK4x0^;4+B+VR6^&j>d>isvgl~;m1OnUz5T+jbt@Tt52$6xHtcnn^)Gyan%WDk z$ce4)&v!qL&|3WT_dm4_*QaN*ZE#y&xA2{Z|LdQj+ePYf%<7&B#@;?)rp|J9%AA8I z7l{6QI`8M&WdF%_MX#Ine{vmBz4haq#jKM0do|h0b0j^YcK8^5jlY+bnf*%eg+z%+ tcG{1S{v&Uuf9*Hfe}0FY&Dql(ym>AkqzczPDpCT4fTydU%Q~loCIB!mmd^kH diff --git a/graphics/title_screen/leafgreen/leaves.png b/graphics/title_screen/leafgreen/leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..0887ab78e12d6fcfe9083e98380bad582614a55b GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zkZhg&9bGIrw=GkTMAH32}W^9VM{DYs!DiqUa+*`RODTecMcKRe~yn(B8`vVdwK0I0a?xZW}#XQQW!V@L(#(U54a!v;Lu zxqLxoO-_0n`tSVr;Z~V6L)L2A%usuwbIgxDJTv=v|1gwaywP#2UHGqnMdS62&LSTK ztX(wKxkTPaSDJn0RjlAUC-5~{@%Cn+{Y~NiEw85}UGng8|7Ufd?|E@7S7yh1KlKaJ zCES0V-7|e}mom@Y$?(j{Gq5aYP0g1XUQa_#_8vUCz+`?{_l#raC#LGH$B=8fhAs3{#z#9v$Wjn`0W3)DgVy~eQVybrTG8ZDc{yqznhXZy^`MvsGhyV)7O># z8MiPetN4in7eRK2m$*ih1m~xflqVLYGPwJ=0G**wmRh7>tY=c#y5u2HiMgkXV~9j} za>4NS%G}E0G|-o z|NsBLd-tyJqy0&s2xCc*UoeBivm0qZ4tt5GuPggAZecDX#i`a&%YZ`SC9V-A!TD(= z<%vb94DLQIKwA~cQi~Lf^-Ky|mplY2Df4u34DmR=_1r<;1_cq8z?Tlc^@FT0aLb*! z&uS*Q)8T}7*{yH3x$pZw|MfU{@%`^#+*4X4rm)IfVF4nkjuwFqR*4lXKqPjeh2sRP z$O{&c7cC4kScPV=2LiUFg%K4{a>H&x ZhHe=ZMdmrr7XeLS@O1TaS?83{1OP7aMtJ}L diff --git a/graphics/title_screen/unk_83BFBE4.bin b/graphics/title_screen/unused1.bin similarity index 100% rename from graphics/title_screen/unk_83BFBE4.bin rename to graphics/title_screen/unused1.bin diff --git a/graphics/title_screen/unk_83C0408.bin b/graphics/title_screen/unused2.bin similarity index 100% rename from graphics/title_screen/unk_83C0408.bin rename to graphics/title_screen/unused2.bin diff --git a/graphics/title_screen/unk_83C0C00.bin b/graphics/title_screen/unused3.bin similarity index 100% rename from graphics/title_screen/unk_83C0C00.bin rename to graphics/title_screen/unused3.bin diff --git a/graphics/title_screen/unk_83C139C.bin b/graphics/title_screen/unused4.bin similarity index 100% rename from graphics/title_screen/unk_83C139C.bin rename to graphics/title_screen/unused4.bin diff --git a/graphics/title_screen/unk_83C1BB8.bin b/graphics/title_screen/unused5.bin similarity index 100% rename from graphics/title_screen/unk_83C1BB8.bin rename to graphics/title_screen/unused5.bin diff --git a/graphics/title_screen/unk_83C2380.bin b/graphics/title_screen/unused6.bin similarity index 100% rename from graphics/title_screen/unk_83C2380.bin rename to graphics/title_screen/unused6.bin diff --git a/include/graphics.h b/include/graphics.h index 31c168b65..e86ea2e27 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4310,8 +4310,8 @@ extern const u8 gGraphics_TitleScreen_BoxArtMonMap[]; extern u16 gGraphics_TitleScreen_BackgroundPals[]; // If this is const, title_screen.c does not match extern const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[]; extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[]; -extern const u16 gGraphics_TitleScreen_FireOrLeafPals[]; -extern const u32 gGraphics_TitleScreen_BlankObjTiles[]; +extern const u16 gTitleScreen_Slash_Pal[]; +extern const u32 gTitleScreen_BlankSprite_Tiles[]; // battle_gfx_sfx_util extern const u32 gHealthboxSinglesPlayerGfx[]; diff --git a/src/graphics.c b/src/graphics.c index c188da6b4..0cdca0e46 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1364,8 +1364,7 @@ const u8 gGraphics_TitleScreen_BoxArtMonMap[] = INCBIN_U8("graphics/title_screen const u16 gGraphics_TitleScreen_BackgroundPals[] = INCBIN_U16("graphics/title_screen/firered/background.gbapal"); const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[] = INCBIN_U8("graphics/title_screen/copyright_press_start.4bpp.lz"); const u8 gGraphics_TitleScreen_CopyrightPressStartMap[] = INCBIN_U8("graphics/title_screen/copyright_press_start.bin.lz"); -const u16 gGraphics_TitleScreen_FireOrLeafPals[] = INCBIN_U16("graphics/title_screen/firered/fire_sprite.gbapal"); -const u32 gGraphics_TitleScreen_BlankObjTiles[] = INCBIN_U32("graphics/title_screen/blank_obj.4bpp.lz"); +const u16 gTitleScreen_Slash_Pal[] = INCBIN_U16("graphics/title_screen/firered/slash.gbapal"); #endif #ifdef LEAFGREEN @@ -1378,10 +1377,11 @@ const u8 gGraphics_TitleScreen_BoxArtMonMap[] = INCBIN_U8("graphics/title_screen const u16 gGraphics_TitleScreen_BackgroundPals[] = INCBIN_U16("graphics/title_screen/leafgreen/background.gbapal"); const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[] = INCBIN_U8("graphics/title_screen/copyright_press_start.4bpp.lz"); const u8 gGraphics_TitleScreen_CopyrightPressStartMap[] = INCBIN_U8("graphics/title_screen/copyright_press_start.bin.lz"); -const u16 gGraphics_TitleScreen_FireOrLeafPals[] = INCBIN_U16("graphics/title_screen/leafgreen/leaf_sprite.gbapal"); -const u32 gGraphics_TitleScreen_BlankObjTiles[] = INCBIN_U32("graphics/title_screen/blank_obj.4bpp.lz"); +const u16 gTitleScreen_Slash_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/slash.gbapal"); #endif +const u32 gTitleScreen_BlankSprite_Tiles[] = INCBIN_U32("graphics/title_screen/blank_sprite.4bpp.lz"); + const u16 gCreditsAllRightsReservedGfxPal[] = INCBIN_U16("graphics/credits/unk_8EAE548.gbapal"); const u8 gCreditsAllRightsReservedGfxTiles[] = INCBIN_U8("graphics/credits/unk_8EAE548.4bpp.lz"); const u8 gCreditsAllRightsReservedGfxMap[] = INCBIN_U8("graphics/credits/unk_8EAE548.bin.lz"); diff --git a/src/title_screen.c b/src/title_screen.c index eb65b00f7..3f7c51414 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -23,7 +23,7 @@ enum TitleScreenScene TITLESCREENSCENE_FLASHSPRITE, TITLESCREENSCENE_FADEIN, TITLESCREENSCENE_RUN, - TITLESCREENSCEEN_RESTART, + TITLESCREENSCENE_RESTART, TITLESCREENSCENE_CRY }; @@ -40,52 +40,57 @@ static void CB2_TitleScreenRun(void); static void VBlankCB(void); static void Task_TitleScreenTimer(u8 taskId); static void Task_TitleScreenMain(u8 taskId); -static void SetTitleScreenScene(s16 * data, u8 a1); -static void SetTitleScreenScene_Init(s16 * data); -static void SetTitleScreenScene_FlashSprite(s16 * data); -static void SetTitleScreenScene_FadeIn(s16 * data); -static void SetTitleScreenScene_Run(s16 * data); +static void SetTitleScreenScene(s16 *data, u8 sceneNum); +static void SetTitleScreenScene_Init(s16 *data); +static void SetTitleScreenScene_FlashSprite(s16 *data); +static void SetTitleScreenScene_FadeIn(s16 *data); +static void SetTitleScreenScene_Run(s16 *data); static void SetGpuRegsForTitleScreenRun(void); -static void SetTitleScreenScene_Restart(s16 * data); -static void SetTitleScreenScene_Cry(s16 * data); +static void SetTitleScreenScene_Restart(s16 *data); +static void SetTitleScreenScene_Cry(s16 *data); static void Task_TitleScreen_SlideWin0(u8 taskId); static void Task_TitleScreen_BlinkPressStart(u8 taskId); static void SignalEndTitleScreenPaletteSomethingTask(void); -static void UpdateScanlineEffectRegBuffer(s16 a0); +static void UpdateScanlineEffectRegBuffer(s16 y); static void ScheduleStopScanlineEffect(void); static void LoadMainTitleScreenPalsAndResetBgs(void); static void CB2_FadeOutTransitionToSaveClearScreen(void); -static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite *sprite); static void CB2_FadeOutTransitionToBerryFix(void); static void LoadSpriteGfxAndPals(void); -static void Task_FlameOrLeafSpawner(u8 taskId); +#if defined(FIRERED) +static void SpriteCallback_TitleScreenFlame(struct Sprite *sprite); +static void Task_FlameSpawner(u8 taskId); +#elif defined(LEAFGREEN) +static void SpriteCallback_TitleScreenLeaf(struct Sprite *sprite); +static void Task_LeafSpawner(u8 taskId); +#endif static void TitleScreen_srand(u8 taskId, u8 field, u16 seed); static u16 TitleScreen_rand(u8 taskId, u8 field); static u32 CreateBlankSprite(void); -static void SetPalOnOrCreateBlankSprite(bool32 a0); +static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite); static u8 CreateSlashSprite(void); static void ScheduleHideSlashSprite(u8 spriteId); static bool32 IsSlashSpriteHidden(u8 spriteId); static void SpriteCallback_Slash(struct Sprite *sprite); -// bg3 static const u8 sBorderBgTiles[] = INCBIN_U8("graphics/title_screen/border_bg.4bpp.lz"); + #if defined(FIRERED) static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/firered/border_bg.bin.lz"); #elif defined(LEAFGREEN) static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/leafgreen/border_bg.bin.lz"); #endif -//sprites -static const u32 sSlashSpriteTiles[] = INCBIN_U32("graphics/title_screen/slash_sprite.4bpp.lz"); +static const u32 sTitleScreen_Slash_Gfx[] = INCBIN_U32("graphics/title_screen/slash.4bpp.lz"); + #if defined(FIRERED) -static const u16 sSlashSpritePals[] = INCBIN_U16("graphics/title_screen/firered/slash_sprite.gbapal"); -static const u32 sFireSpriteTiles[] = INCBIN_U32("graphics/title_screen/firered/fire_sprite.4bpp.lz"); -static const u32 sBlankFireSpriteTiles[] = INCBIN_U32("graphics/title_screen/firered/blank_fire_sprite.4bpp.lz"); +static const u16 sTitleScreen_Flames_Pal[] = INCBIN_U16("graphics/title_screen/firered/flames.gbapal"); +static const u32 sTitleScreen_Flames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/flames.4bpp.lz"); +static const u32 sTitleScreen_BlankFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/blank_flames.4bpp.lz"); #elif defined(LEAFGREEN) -static const u16 sSlashSpritePals[] = INCBIN_U16("graphics/title_screen/leafgreen/slash_sprite.gbapal"); -static const u32 sLeafSpriteTiles[] = INCBIN_U32("graphics/title_screen/leafgreen/leaf_sprite.4bpp.lz"); -static const u32 sBlankLeafSpriteTiles[] = INCBIN_U32("graphics/title_screen/leafgreen/blank_leaf_sprite.4bpp.lz"); +static const u16 sTitleScreen_Leaves_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/leaves.gbapal"); +static const u32 sTitleScreen_Leaves_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/leaves.4bpp.lz"); +static const u32 sTitleScreen_Streak_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/streak.4bpp.lz"); #endif static const struct OamData sOamData_FlameOrLeaf = { @@ -98,85 +103,99 @@ static const struct OamData sOamData_FlameOrLeaf = { }; #if defined(FIRERED) -static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = { - ANIMCMD_FRAME(0x00, 3), - ANIMCMD_FRAME(0x04, 6), - ANIMCMD_FRAME(0x08, 6), - ANIMCMD_FRAME(0x0c, 6), - ANIMCMD_FRAME(0x10, 6), - ANIMCMD_FRAME(0x14, 6), - ANIMCMD_FRAME(0x18, 6), - ANIMCMD_FRAME(0x1c, 6), - ANIMCMD_FRAME(0x20, 6), - ANIMCMD_FRAME(0x24, 6), +static const union AnimCmd sSpriteAnim_Flame[] = { + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(8, 6), + ANIMCMD_FRAME(12, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(20, 6), + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(28, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(36, 6), ANIMCMD_END }; -static const union AnimCmd sSpriteAnims_FlameOrLeaf_1[] = { - ANIMCMD_FRAME(0x18, 6), - ANIMCMD_FRAME(0x1c, 6), - ANIMCMD_FRAME(0x20, 6), - ANIMCMD_FRAME(0x24, 6), +static const union AnimCmd sSpriteAnim_Flame_Unused[] = { + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(28, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(36, 6), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = { - sSpriteAnims_FlameOrLeaf_0, - sSpriteAnims_FlameOrLeaf_1 +static const union AnimCmd *const sSpriteAnim_FlameOrLeaf[] = { + sSpriteAnim_Flame, + sSpriteAnim_Flame_Unused, }; #elif defined(LEAFGREEN) -static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = { - ANIMCMD_FRAME(0x00, 8), - ANIMCMD_FRAME(0x04, 8), - ANIMCMD_FRAME(0x08, 8), - ANIMCMD_FRAME(0x0c, 8), - ANIMCMD_FRAME(0x10, 8), - ANIMCMD_FRAME(0x14, 8), - ANIMCMD_FRAME(0x18, 8), - ANIMCMD_FRAME(0x1c, 8), - ANIMCMD_FRAME(0x20, 8), - ANIMCMD_FRAME(0x24, 8), - ANIMCMD_FRAME(0x28, 8), +static const union AnimCmd sSpriteAnim_Leaf[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_FRAME(12, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(20, 8), + ANIMCMD_FRAME(24, 8), + ANIMCMD_FRAME(28, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(36, 8), + ANIMCMD_FRAME(40, 8), ANIMCMD_JUMP(0) }; -static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = { - sSpriteAnims_FlameOrLeaf_0 +static const union AnimCmd *const sSpriteAnim_FlameOrLeaf[] = { + sSpriteAnim_Leaf }; #endif -static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = { - .tileTag = 0, - .paletteTag = 0, +enum { + TILE_TAG_FLAME_OR_LEAF, + TILE_TAG_BLANK_OR_STREAK, + TILE_TAG_BLANK, + TILE_TAG_SLASH, +}; + +enum { + PAL_TAG_DEFAULT, + PAL_TAG_UNUSED, + PAL_TAG_SLASH, +}; + +static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf = { + .tileTag = TILE_TAG_FLAME_OR_LEAF, + .paletteTag = PAL_TAG_DEFAULT, .oam = &sOamData_FlameOrLeaf, - .anims = sSpriteAnimTable_FlameOrLeaf, + .anims = sSpriteAnim_FlameOrLeaf, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; #if defined(FIRERED) -static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { - .tileTag = 1, - .paletteTag = 0, +static const struct SpriteTemplate sSpriteTemplate_BlankFlame = { + .tileTag = TILE_TAG_BLANK_OR_STREAK, + .paletteTag = PAL_TAG_DEFAULT, .oam = &sOamData_FlameOrLeaf, - .anims = sSpriteAnimTable_FlameOrLeaf, + .anims = sSpriteAnim_FlameOrLeaf, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; + #elif defined(LEAFGREEN) -static const struct OamData sOamData_LG_83BF950 = { +static const struct OamData sOamData_Streak = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 3 }; -static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { - .tileTag = 1, - .paletteTag = 0, - .oam = &sOamData_LG_83BF950, +static const struct SpriteTemplate sSpriteTemplate_Streak = { + .tileTag = TILE_TAG_BLANK_OR_STREAK, + .paletteTag = PAL_TAG_DEFAULT, + .oam = &sOamData_Streak, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -184,7 +203,7 @@ static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { }; #endif -static const struct OamData sOamData_UnknownEmptySprite = { +static const struct OamData sOamData_BlankSprite = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_V_RECTANGLE, .size = ST_OAM_SIZE_3, @@ -193,10 +212,10 @@ static const struct OamData sOamData_UnknownEmptySprite = { .paletteNum = 0 }; -static const struct SpriteTemplate sUnknownEmptySprite = { - .tileTag = 2, - .paletteTag = 2, - .oam = &sOamData_UnknownEmptySprite, +static const struct SpriteTemplate sSpriteTemplate_BlankSprite = { + .tileTag = TILE_TAG_BLANK, + .paletteTag = PAL_TAG_SLASH, + .oam = &sOamData_BlankSprite, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -213,8 +232,8 @@ static const struct OamData sOamData_SlashSprite = { }; static const struct SpriteTemplate sSlashSpriteTemplate = { - .tileTag = 3, - .paletteTag = 2, + .tileTag = TILE_TAG_SLASH, + .paletteTag = PAL_TAG_SLASH, .oam = &sOamData_SlashSprite, .anims = gDummySpriteAnimTable, .images = NULL, @@ -258,62 +277,66 @@ static const struct BgTemplate sBgTemplates[] = { } }; -static void (*const sSceneFuncs[])(s16 * data) = { - SetTitleScreenScene_Init, - SetTitleScreenScene_FlashSprite, - SetTitleScreenScene_FadeIn, - SetTitleScreenScene_Run, - SetTitleScreenScene_Restart, - SetTitleScreenScene_Cry +static void (*const sSceneFuncs[])(s16 *data) = { + [TITLESCREENSCENE_INIT] = SetTitleScreenScene_Init, + [TITLESCREENSCENE_FLASHSPRITE] = SetTitleScreenScene_FlashSprite, + [TITLESCREENSCENE_FADEIN] = SetTitleScreenScene_FadeIn, + [TITLESCREENSCENE_RUN] = SetTitleScreenScene_Run, + [TITLESCREENSCENE_RESTART] = SetTitleScreenScene_Restart, + [TITLESCREENSCENE_CRY] = SetTitleScreenScene_Cry }; #if defined(FIRERED) static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sFireSpriteTiles, 0x500, 0}, - {sBlankFireSpriteTiles, 0x500, 1}, - {gGraphics_TitleScreen_BlankObjTiles, 0x400, 2}, - {sSlashSpriteTiles, 0x800, 3} + {sTitleScreen_Flames_Gfx, 0x500, TILE_TAG_FLAME_OR_LEAF}, + {sTitleScreen_BlankFlames_Gfx, 0x500, TILE_TAG_BLANK_OR_STREAK}, + {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, + {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} }; -#elif defined(LEAFGREEN) -static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sLeafSpriteTiles, 0x580, 0}, - {sBlankLeafSpriteTiles, 0x100, 1}, - {gGraphics_TitleScreen_BlankObjTiles, 0x400, 2}, - {sSlashSpriteTiles, 0x800, 3} -}; -#endif static const struct SpritePalette sSpritePals[] = { - {sSlashSpritePals, 0}, - {gGraphics_TitleScreen_FireOrLeafPals, 2}, + {sTitleScreen_Flames_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, {} }; -#if defined(FIRERED) -static const u8 gUnknown_83BFBD4[] = { - 0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90 +static const u8 sFlameXPositions[] = { + 4, 16, 26, 32, 48, 200, 216, 224, 232, 60, 76, 92, 108, 128, 144, 0 }; #elif defined(LEAFGREEN) -static const u16 gUnknown_LG_83BFA10[] = { +static const struct CompressedSpriteSheet sSpriteSheets[] = { + {sTitleScreen_Leaves_Gfx, 0x580, TILE_TAG_FLAME_OR_LEAF}, + {sTitleScreen_Streak_Gfx, 0x100, TILE_TAG_BLANK_OR_STREAK}, + {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, + {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} +}; + +static const struct SpritePalette sSpritePals[] = { + {sTitleScreen_Leaves_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, + {} +}; + +static const u16 sStreakYPositions[] = { 40, 80, 110, 60, 90, 70, 100, 50 }; #endif -static const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/title_screen/unk_83BFBE4.bin.lz"); -static const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/title_screen/unk_83C0408.bin.lz"); -static const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/title_screen/unk_83C0C00.bin.lz"); -static const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/title_screen/unk_83C139C.bin.lz"); -static const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/title_screen/unk_83C1BB8.bin.lz"); -static const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/title_screen/unk_83C2380.bin.lz"); +static const u32 sUnused_Tilemap1[] = INCBIN_U32("graphics/title_screen/unused1.bin.lz"); +static const u32 sUnused_Tilemap2[] = INCBIN_U32("graphics/title_screen/unused2.bin.lz"); +static const u32 sUnused_Tilemap3[] = INCBIN_U32("graphics/title_screen/unused3.bin.lz"); +static const u32 sUnused_Tilemap4[] = INCBIN_U32("graphics/title_screen/unused4.bin.lz"); +static const u32 sUnused_Tilemap5[] = INCBIN_U32("graphics/title_screen/unused5.bin.lz"); +static const u32 sUnused_Tilemap6[] = INCBIN_U32("graphics/title_screen/unused6.bin.lz"); -static const u32 *const gUnknown_83C2BA4[] = { - gUnknown_83BFBE4, - gUnknown_83C0408, - gUnknown_83C0C00, - gUnknown_83C139C, - gUnknown_83C1BB8, - gUnknown_83C2380 +static const u32 *const sUnused_Tilemaps[] = { + sUnused_Tilemap1, + sUnused_Tilemap2, + sUnused_Tilemap3, + sUnused_Tilemap4, + sUnused_Tilemap5, + sUnused_Tilemap6, }; void CB2_InitTitleScreen(void) @@ -338,7 +361,7 @@ void CB2_InitTitleScreen(void) ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); - sTitleScreenTimerTaskId = 0xFF; + sTitleScreenTimerTaskId = TASK_NONE; break; case 1: LoadPalette(gGraphics_TitleScreen_GameTitleLogoPals, 0, 0x1A0); @@ -358,7 +381,7 @@ void CB2_InitTitleScreen(void) case 2: if (!FreeTempTileDataBuffersIfPossible()) { - BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK); + BlendPalettes(PALETTES_BG, 16, RGB_BLACK); CreateTask(Task_TitleScreenMain, 4); sTitleScreenTimerTaskId = CreateTask(Task_TitleScreenTimer, 2); SetVBlankCallback(VBlankCB); @@ -401,46 +424,52 @@ static void VBlankCB(void) TransferPlttBuffer(); ScanlineEffect_InitHBlankDmaTransfer(); - if (sTitleScreenTimerTaskId != 0xFF) + if (sTitleScreenTimerTaskId != TASK_NONE) gTasks[sTitleScreenTimerTaskId].data[0]++; } static void Task_TitleScreenTimer(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (data[0] >= 2700) { - sTitleScreenTimerTaskId = 0xFF; + sTitleScreenTimerTaskId = TASK_NONE; DestroyTask(taskId); } } +// task data for Task_TitleScreenMain and the scenes +#define tSceneNum data[0] +#define tState data[1] +#define tHasCreatedBlankSprite data[5] +#define tSlashSpriteId data[6] + static void Task_TitleScreenMain(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON | START_BUTTON) - && data[0] != 3 && data[0] != 4 && data[0] != 5) + && tSceneNum != TITLESCREENSCENE_RUN + && tSceneNum != TITLESCREENSCENE_RESTART + && tSceneNum != TITLESCREENSCENE_CRY) { ScheduleStopScanlineEffect(); LoadMainTitleScreenPalsAndResetBgs(); - SetPalOnOrCreateBlankSprite(data[5]); + SetPalOnOrCreateBlankSprite(tHasCreatedBlankSprite); SetTitleScreenScene(data, TITLESCREENSCENE_RUN); } else - { - sSceneFuncs[data[0]](data); - } + sSceneFuncs[tSceneNum](data); } -static void SetTitleScreenScene(s16 * data, u8 a1) +static void SetTitleScreenScene(s16 *data, u8 sceneNum) { - data[1] = 0; - data[0] = a1; + tState = 0; + tSceneNum = sceneNum; } -static void SetTitleScreenScene_Init(s16 * data) +static void SetTitleScreenScene_Init(s16 *data) { struct ScanlineEffectParams params; @@ -462,16 +491,16 @@ static void SetTitleScreenScene_Init(s16 * data) SetTitleScreenScene(data, TITLESCREENSCENE_FLASHSPRITE); } -static void SetTitleScreenScene_FlashSprite(s16 * data) +static void SetTitleScreenScene_FlashSprite(s16 *data) { - switch (data[1]) + switch (tState) { case 0: SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 0); - data[2] = 0x80; + data[2] = 128; UpdateScanlineEffectRegBuffer(data[2]); - data[1]++; + tState++; break; case 1: data[2] -= 4; @@ -479,7 +508,7 @@ static void SetTitleScreenScene_FlashSprite(s16 * data) if (data[2] < 0) { gScanlineEffect.state = 3; - data[1]++; + tState++; } break; case 2: @@ -489,29 +518,28 @@ static void SetTitleScreenScene_FlashSprite(s16 * data) } } -static void SetTitleScreenScene_FadeIn(s16 * data) +static void SetTitleScreenScene_FadeIn(s16 *data) { - u32 r4; - switch (data[1]) + switch (tState) { case 0: data[2] = 0; - data[1]++; + tState++; break; case 1: data[2]++; if (data[2] > 10) { - TintPalette_GrayScale2(gPlttBufferUnfaded + 0xD0, 0x10); - BeginNormalPaletteFade(0x00002000, 9, 0x10, 0, RGB_BLACK); - data[1]++; + TintPalette_GrayScale2(gPlttBufferUnfaded + 0xD0, 16); + BeginNormalPaletteFade(1 << 0xD, 9, 16, 0, RGB_BLACK); + tState++; } break; case 2: if (!gPaletteFade.active) { data[2] = 0; - data[1]++; + tState++; } break; case 3: @@ -519,16 +547,16 @@ static void SetTitleScreenScene_FadeIn(s16 * data) if (data[2] > 36) { CreateTask(Task_TitleScreen_SlideWin0, 3); - BlendPalettesGradually(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); + BlendPalettesGradually(1 << 0xD, -4, 1, 16, RGB(30, 30, 31), 0, 0); data[2] = 0; - data[1]++; + tState++; } break; case 4: if (!IsBlendPalettesGraduallyTaskActive(0)) { - BlendPalettesGradually(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -4, 15, 0, RGB(30, 30, 31), 0, 0); + tState++; } break; case 5: @@ -536,15 +564,15 @@ static void SetTitleScreenScene_FadeIn(s16 * data) if (data[2] > 20) { data[2] = 0; - BlendPalettesGradually(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -4, 1, 16, RGB(30, 30, 31), 0, 0); + tState++; } break; case 6: if (!IsBlendPalettesGraduallyTaskActive(0)) { - BlendPalettesGradually(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -4, 15, 0, RGB(30, 30, 31), 0, 0); + tState++; } break; case 7: @@ -552,21 +580,22 @@ static void SetTitleScreenScene_FadeIn(s16 * data) if (data[2] > 20) { data[2] = 0; - BlendPalettesGradually(0x2000, -3, 0x00, 0x10, RGB(30, 30, 31), 0, 0); - data[1]++; + BlendPalettesGradually(1 << 0xD, -3, 0, 16, RGB(30, 30, 31), 0, 0); + tState++; } break; case 8: if (!IsBlendPalettesGraduallyTaskActive(0)) { - data[5] = 1; - r4 = (0x10000 << CreateBlankSprite()) | 0x00001FFF; - BlendPalettes(r4, 0x10, RGB(30, 30, 31)); - BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31)); + u32 palettes; + tHasCreatedBlankSprite = TRUE; + palettes = (PALETTES_BG & ~(1 << 0xD) & ~(1 << 0xE) & ~(1 << 0xF)) | (0x10000 << CreateBlankSprite()); + BlendPalettes(palettes, 16, RGB(30, 30, 31)); + BeginNormalPaletteFade(palettes, 1, 16, 0, RGB(30, 30, 31)); ShowBg(0); - CpuCopy16(gGraphics_TitleScreen_BoxArtMonPals, gPlttBufferUnfaded + 0xD0, 0x20); - BlendPalettesGradually(0x2000, 1, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); - data[1]++; + CpuCopy16(gGraphics_TitleScreen_BoxArtMonPals, gPlttBufferUnfaded + 0xD0, 32); + BlendPalettesGradually(1 << 0xD, 1, 15, 0, RGB(30, 30, 31), 0, 0); + tState++; } break; case 9: @@ -581,29 +610,33 @@ static void SetTitleScreenScene_FadeIn(s16 * data) #define KEYSTROKE_DELSAVE (B_BUTTON | SELECT_BUTTON | DPAD_UP) #define KEYSTROKE_BERRY_FIX (B_BUTTON | SELECT_BUTTON) -static void SetTitleScreenScene_Run(s16 * data) +static void SetTitleScreenScene_Run(s16 *data) { - switch (data[1]) + switch (tState) { case 0: SetHelpContext(HELPCONTEXT_TITLE_SCREEN); CreateTask(Task_TitleScreen_BlinkPressStart, 0); - CreateTask(Task_FlameOrLeafSpawner, 5); +#if defined(FIRERED) + CreateTask(Task_FlameSpawner, 5); +#elif defined(LEAFGREEN) + CreateTask(Task_LeafSpawner, 5); +#endif SetGpuRegsForTitleScreenRun(); - data[6] = CreateSlashSprite(); + tSlashSpriteId = CreateSlashSprite(); HelpSystem_Enable(); - data[1]++; + tState++; // fallthrough case 1: if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE) { - ScheduleHideSlashSprite(data[6]); + ScheduleHideSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToSaveClearScreen); } else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX) { - ScheduleHideSlashSprite(data[6]); + ScheduleHideSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToBerryFix); } @@ -613,7 +646,7 @@ static void SetTitleScreenScene_Run(s16 * data) } else if (!FuncIsActiveTask(Task_TitleScreenTimer)) { - SetTitleScreenScene(data, TITLESCREENSCEEN_RESTART); + SetTitleScreenScene(data, TITLESCREENSCENE_RESTART); } break; } @@ -622,21 +655,21 @@ static void SetTitleScreenScene_Run(s16 * data) static void SetGpuRegsForTitleScreenRun(void) { SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); - SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x3F, 0x1F)); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WINOBJ_ALL); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 13); } -static void SetTitleScreenScene_Restart(s16 * data) +static void SetTitleScreenScene_Restart(s16 *data) { - switch (data[1]) + switch (tState) { case 0: - ScheduleHideSlashSprite(data[6]); - data[1]++; + ScheduleHideSlashSprite(tSlashSpriteId); + tState++; break; case 1: - if (!gPaletteFade.active && !IsSlashSpriteHidden(data[6])) + if (!gPaletteFade.active && !IsSlashSpriteHidden(tSlashSpriteId)) { FadeOutMapMusic(10); BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 0x10, RGB_BLACK); @@ -649,7 +682,7 @@ static void SetTitleScreenScene_Restart(s16 * data) { DestroyTask(FindTaskIdByFunc(Task_TitleScreen_BlinkPressStart)); data[2] = 0; - data[1]++; + tState++; } break; case 3: @@ -657,7 +690,7 @@ static void SetTitleScreenScene_Restart(s16 * data) if (data[2] >= 20) { DestroyTask(FindTaskIdByFunc(Task_TitleScreen_BlinkPressStart)); - data[1]++; + tState++; } break; case 4: @@ -668,28 +701,28 @@ static void SetTitleScreenScene_Restart(s16 * data) } } -static void SetTitleScreenScene_Cry(s16 * data) +static void SetTitleScreenScene_Cry(s16 *data) { - switch (data[1]) + switch (tState) { case 0: if (!gPaletteFade.active) { PlayCry_Normal(TITLE_SPECIES, 0); - ScheduleHideSlashSprite(data[6]); + ScheduleHideSlashSprite(tSlashSpriteId); data[2] = 0; - data[1]++; + tState++; } break; case 1: if (data[2] < 90) data[2]++; - else if (!IsSlashSpriteHidden(data[6])) + else if (!IsSlashSpriteHidden(tSlashSpriteId)) { - BeginNormalPaletteFade(0x0FFFFFFF, 0, 0, 0x10, RGB_WHITE); + BeginNormalPaletteFade((PALETTES_ALL & ~(1 << 0x1C) & ~(1 << 0x1D) & ~(1 << 0x1E) & ~(1 << 0x1F)), 0, 0, 16, RGB_WHITE); SignalEndTitleScreenPaletteSomethingTask(); FadeOutBGM(4); - data[1]++; + tState++; } break; case 2: @@ -711,30 +744,35 @@ static void SetTitleScreenScene_Cry(s16 * data) } } +#undef tSceneNum +#undef tState +#undef tHasCreatedBlankSprite +#undef tSlashSpriteId + static void Task_TitleScreen_SlideWin0(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (data[0]) { case 0: SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0x00, 0x3F)); - SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x00, 0x37)); - SetGpuReg(REG_OFFSET_WIN0V, 0xA0); - SetGpuReg(REG_OFFSET_WIN0H, 0x00); - BlendPalettes(0x00004000, 0, RGB_BLACK); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, DISPLAY_HEIGHT)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0)); + BlendPalettes(1 << 0xE, 0, RGB_BLACK); data[0]++; break; case 1: - data[1] += 0x180; + data[1] += 24 << 4; data[2] = data[1] >> 4; - if (data[2] >= 0xF0) + if (data[2] >= DISPLAY_WIDTH) { - data[2] = 0xF0; + data[2] = DISPLAY_WIDTH; data[0]++; } - SetGpuReg(REG_OFFSET_WIN0H, data[2]); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, data[2])); break; case 2: data[3]++; @@ -745,15 +783,15 @@ static void Task_TitleScreen_SlideWin0(u8 taskId) } break; case 3: - SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 0x3B)); - SetGpuReg(REG_OFFSET_WIN0H, 0xF0F0); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH)); ChangeBgX(2, -0xF000, 0); - BlendPalettes(0x00008000, 0, RGB_BLACK); - data[1] = 0xF00; + BlendPalettes(1 << 0xF, 0, RGB_BLACK); + data[1] = 10 * 24 << 4; data[0]++; break; case 4: - data[1] -= 0x180; + data[1] -= 24 << 4; data[2] = data[1] >> 4; if (data[2] <= 0) { @@ -761,7 +799,7 @@ static void Task_TitleScreen_SlideWin0(u8 taskId) data[0]++; } ChangeBgX(2, -data[2] << 8, 0); - SetGpuReg(REG_OFFSET_WIN0H, (data[2] << 8) | 0xF0); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(data[2], DISPLAY_WIDTH)); break; case 5: ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); @@ -772,7 +810,7 @@ static void Task_TitleScreen_SlideWin0(u8 taskId) static void Task_TitleScreen_BlinkPressStart(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; s32 i; if (data[15] && gPaletteFade.active) @@ -820,39 +858,33 @@ static void SignalEndTitleScreenPaletteSomethingTask(void) gTasks[taskId].data[15] = TRUE; } -static void UpdateScanlineEffectRegBuffer(s16 a0) +static void UpdateScanlineEffectRegBuffer(s16 y) { s32 i; - if (a0 >= 0) - { - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0] = 16; - } + if (y >= 0) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][y] = 16; for (i = 0; i < 16; i++) { - if (a0 + i >= 0) - { - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 + i] = 15 - i; - } - if (a0 - i >= 0) - { - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 - i] = 15 - i; - } + if (y + i >= 0) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][y + i] = 15 - i; + + if (y - i >= 0) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][y - i] = 15 - i; + } - for (i = a0 + 16; i < 160; i++) + + for (i = y + 16; i < 160; i++) { if (i >= 0) - { gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; - } } - for (i = a0 - 16; i >= 0; i--) + + for (i = y - 16; i >= 0; i--) { if (i >= 0) - { gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; - } } } @@ -869,7 +901,7 @@ static void LoadMainTitleScreenPalsAndResetBgs(void) u8 taskId; taskId = FindTaskIdByFunc(Task_TitleScreen_SlideWin0); - if (taskId != 0xFF) + if (taskId != TASK_NONE) DestroyTask(taskId); DestroyBlendPalettesGraduallyTask(); @@ -910,24 +942,30 @@ static void LoadSpriteGfxAndPals(void) LoadSpritePalettes(sSpritePals); } -static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite *sprite) +#if defined(FIRERED) + +#define sPosX data[0] +#define sSpeedX data[1] +#define sPosY data[2] +#define sSpeedY data[3] + +static void SpriteCallback_TitleScreenFlame(struct Sprite *sprite) { - s16 * data = sprite->data; - sprite->data[0] -= data[1]; - sprite->x = sprite->data[0] >> 4; + s16 *data = sprite->data; + sPosX -= sSpeedX; + sprite->x = sPosX >> 4; if (sprite->x < -8) { DestroySprite(sprite); return; } - data[2] += data[3]; - sprite->y = data[2] >> 4; - if (sprite->y < 0x10 || sprite->y > 0xc8) + sPosY += sSpeedY; + sprite->y = sPosY >> 4; + if (sprite->y < 16 || sprite->y > 200) { DestroySprite(sprite); return; } -#if defined(FIRERED) if (sprite->animEnded) { DestroySprite(sprite); @@ -938,178 +976,228 @@ static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite *sprite) StartSpriteAnim(sprite, 0); sprite->invisible = FALSE; } -#elif defined(LEAFGREEN) - if (!data[5]) - { - s32 r2; - s32 r1; - data[6]++; - r2 = data[1] * data[6]; - r1 = data[6] * data[3]; - r2 = (r2 * r2) >> 4; - r1 = (r1 * r1) >> 4; - if (r2 + r1 >= 0x510) - data[5] = TRUE; - } -#endif } -#if defined(FIRERED) -static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId) +static bool32 CreateFlameSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 createFlame) { u8 spriteId; - if (templateId) - { - spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, x, y, 0); - } + if (createFlame) + spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf, x, y, 0); else - { - spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, x, y, 0); - } + spriteId = CreateSprite(&sSpriteTemplate_BlankFlame, x, y, 0); + if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data[0] = x << 4; - gSprites[spriteId].data[1] = xspeed; - gSprites[spriteId].data[2] = y << 4; - gSprites[spriteId].data[3] = yspeed; + gSprites[spriteId].sPosX = x * 16; + gSprites[spriteId].sSpeedX = xspeed; + gSprites[spriteId].sPosY = y * 16; + gSprites[spriteId].sSpeedY = yspeed; gSprites[spriteId].data[4] = 0; gSprites[spriteId].data[5] = (xspeed * yspeed) % 16; - gSprites[spriteId].data[6] = templateId; - gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf; + gSprites[spriteId].data[6] = createFlame; + gSprites[spriteId].callback = SpriteCallback_TitleScreenFlame; return TRUE; } return FALSE; } -static void Task_FlameOrLeafSpawner(u8 taskId) +#undef sPosX +#undef sSpeedX +#undef sPosY +#undef sSpeedY + +#define tState data[0] +#define tTimer data[1] +#define tDelay data[2] +#define tOff_Seed 3 // data[3] and data[4] +#define tOffsetX data[5] + +static void Task_FlameSpawner(u8 taskId) { - s16 * data = gTasks[taskId].data; - s32 x, y, xspeed, yspeed, templateId; + s16 *data = gTasks[taskId].data; + s32 x, y, xspeed, yspeed; s32 i; - switch (data[0]) + switch (tState) { case 0: TitleScreen_srand(taskId, 3, 30840); - data[0]++; + tState++; break; case 1: - data[1]++; - if (data[1] >= data[2]) + tTimer++; + if (tTimer >= tDelay) { - data[1] = 0; + tTimer = 0; TitleScreen_rand(taskId, 3); - data[2] = 18; + tDelay = 18; xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; - y = (TitleScreen_rand(taskId, 3) % 3) + 0x74; + y = (TitleScreen_rand(taskId, 3) % 3) + 116; x = TitleScreen_rand(taskId, 3) % 240; - CreateFlameOrLeafSprite( + CreateFlameSprite( x, y, xspeed, yspeed, - (TitleScreen_rand(taskId, 3) % 16) < 8 ? 0 : 1 + (TitleScreen_rand(taskId, 3) % 16) < 8 ? FALSE : TRUE ); for (i = 0; i < 15; i++) { - CreateFlameOrLeafSprite( - data[5] + gUnknown_83BFBD4[i], + CreateFlameSprite( + tOffsetX + sFlameXPositions[i], y, xspeed, yspeed, - 1 + TRUE ); xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; } - data[5]++; - if (data[5] > 3) - data[5] = 0; + tOffsetX++; + if (tOffsetX > 3) + tOffsetX = 0; } } } +#undef tState +#undef tTimer +#undef tDelay +#undef tOff_Seed +#undef tOffsetX + #elif defined(LEAFGREEN) -static void CreateFlameOrLeafSprite(s32 y0, s32 x1, s32 y1) +#define sPosX data[0] +#define sSpeedX data[1] +#define sPosY data[2] +#define sSpeedY data[3] + +static void SpriteCallback_TitleScreenLeaf(struct Sprite *sprite) { - u8 spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, 0xF0, y0, 0); - if (spriteId != MAX_SPRITES) + s16 *data = sprite->data; + sprite->sPosX -= sSpeedX; + sprite->x = sprite->sPosX >> 4; + if (sprite->x < -8) { - gSprites[spriteId].data[0] = 0xF00; - gSprites[spriteId].data[1] = x1; - gSprites[spriteId].data[2] = y0 << 4; - gSprites[spriteId].data[3] = y1; - gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf; + DestroySprite(sprite); + return; + } + sPosY += sSpeedY; + sprite->y = sPosY >> 4; + if (sprite->y < 16 || sprite->y > 200) + { + DestroySprite(sprite); + return; + } + if (!data[5]) + { // meaningless, since data[5] and data[6] are never used outside this block + s32 r2; + s32 r1; + data[6]++; + r2 = sSpeedX * data[6]; + r1 = sSpeedY * data[6]; + r2 = (r2 * r2) >> 4; + r1 = (r1 * r1) >> 4; + if (r2 + r1 >= 81 << 4) + data[5] = TRUE; } } -static void SpriteCallback_LG_8079800(struct Sprite *sprite) +static void CreateLeafSprite(s32 y, s32 xspeed, s32 yspeed) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf, DISPLAY_WIDTH, y, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].sPosX = DISPLAY_WIDTH * 16; + gSprites[spriteId].sSpeedX = xspeed; + gSprites[spriteId].sPosY = y * 16; + gSprites[spriteId].sSpeedY = yspeed; + gSprites[spriteId].callback = SpriteCallback_TitleScreenLeaf; + } +} + +#undef sPosX +#undef sSpeedX +#undef sPosY +#undef sSpeedY + +static void SpriteCallback_Streak(struct Sprite *sprite) { sprite->x -= 7; if (sprite->x < -16) { - sprite->x = 0x100; + sprite->x = DISPLAY_WIDTH + 16; sprite->data[7]++; - if (sprite->data[7] >= NELEMS(gUnknown_LG_83BFA10)) + if (sprite->data[7] >= ARRAY_COUNT(sStreakYPositions)) sprite->data[7] = 0; - sprite->y = gUnknown_LG_83BFA10[sprite->data[7]]; + sprite->y = sStreakYPositions[sprite->data[7]]; } } -static void sub_LG_8079844(void) +static void CreateStreakSprites(void) { int i; u8 spriteId; for (i = 0; i < 4; i++) { - spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, 0x100 + 0x28 * i, gUnknown_LG_83BFA10[i], 0xFF); + spriteId = CreateSprite(&sSpriteTemplate_Streak, DISPLAY_WIDTH + 16 + 40 * i, sStreakYPositions[i], 0xFF); if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[7] = i; - gSprites[spriteId].callback = SpriteCallback_LG_8079800; + gSprites[spriteId].callback = SpriteCallback_Streak; } } } -static void Task_FlameOrLeafSpawner(u8 taskId) -{ - s16 * data = gTasks[taskId].data; - s32 rval; - s32 r6; - s32 r4; - s32 r0; +#define tState data[0] +#define tTimer data[1] +#define tDelay data[2] +#define tOff_Seed 3 // data[3] and data[4] - switch (data[0]) +static void Task_LeafSpawner(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 rval; + s32 xspeed; + s32 yspeed; + s32 y; + + switch (tState) { case 0: - sub_LG_8079844(); - TitleScreen_srand(taskId, 3, 30840); - data[0]++; + CreateStreakSprites(); + TitleScreen_srand(taskId, tOff_Seed, 30840); + tState++; break; case 1: - data[1]++; - if (data[1] >= data[2]) + tTimer++; + if (tTimer >= tDelay) { - data[1] = 0; - data[2] = (TitleScreen_rand(taskId, 3) % 6) + 6; - rval = TitleScreen_rand(taskId, 3) % 30; - r6 = 16; + tTimer = 0; + tDelay = (TitleScreen_rand(taskId, tOff_Seed) % 6) + 6; + rval = TitleScreen_rand(taskId, tOff_Seed) % 30; + xspeed = 16; if (rval >= 6) { - r6 = 48; + xspeed = 48; if (rval < 12) - r6 = 24; + xspeed = 24; } - r4 = (TitleScreen_rand(taskId, 3) % 4) - 2; - r0 = (TitleScreen_rand(taskId, 3) % 88) + 32; - CreateFlameOrLeafSprite(r0, r6, r4); + yspeed = (TitleScreen_rand(taskId, tOff_Seed) % 4) - 2; + y = (TitleScreen_rand(taskId, tOff_Seed) % 88) + 32; + CreateLeafSprite(y, xspeed, yspeed); } break; } } +#undef tState +#undef tData1 +#undef tData2 +#undef tData3And4 + #endif //FRLG static void TitleScreen_srand(u8 taskId, u8 field, u16 seed) @@ -1129,30 +1217,34 @@ static u16 TitleScreen_rand(u8 taskId, u8 field) static u32 CreateBlankSprite(void) { - CreateSprite(&sUnknownEmptySprite, 0x18, 0x90, 0); - return IndexOfSpritePaletteTag(2); + CreateSprite(&sSpriteTemplate_BlankSprite, 24, 144, 0); + return IndexOfSpritePaletteTag(PAL_TAG_SLASH); } -static void SetPalOnOrCreateBlankSprite(bool32 mode) +static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite) { u32 palIdx; - if (mode) + if (hasCreatedBlankSprite) { - palIdx = IndexOfSpritePaletteTag(2); - LoadPalette(gGraphics_TitleScreen_FireOrLeafPals, palIdx * 16 + 0x100, 0x20); + palIdx = IndexOfSpritePaletteTag(PAL_TAG_SLASH); + LoadPalette(gTitleScreen_Slash_Pal, palIdx * 16 + 0x100, 0x20); } else CreateBlankSprite(); } +#define sState data[0] +#define sTimer data[1] +#define sHidden data[2] + static u8 CreateSlashSprite(void) { - u8 spriteId = CreateSprite(&sSlashSpriteTemplate, -0x20, 0x1B, 1); + u8 spriteId = CreateSprite(&sSlashSpriteTemplate, -32, 27, 1); if (spriteId != MAX_SPRITES) { gSprites[spriteId].callback = SpriteCallback_Slash; - gSprites[spriteId].data[1] = 540; + gSprites[spriteId].sTimer = 540; } return spriteId; } @@ -1160,54 +1252,52 @@ static u8 CreateSlashSprite(void) static void ScheduleHideSlashSprite(u8 spriteId) { if (spriteId != MAX_SPRITES) - gSprites[spriteId].data[2] = TRUE; + gSprites[spriteId].sHidden = TRUE; } static bool32 IsSlashSpriteHidden(u8 spriteId) { if (spriteId != MAX_SPRITES) - return gSprites[spriteId].data[0] ^ 2 ? TRUE : FALSE; + return gSprites[spriteId].sState ^ 2 ? TRUE : FALSE; else return FALSE; } static void SpriteCallback_Slash(struct Sprite *sprite) { - switch (sprite->data[0]) + switch (sprite->sState) { case 0: - if (sprite->data[2]) + if (sprite->sHidden) { sprite->invisible = TRUE; - sprite->data[0] = 2; + sprite->sState = 2; } - sprite->data[1]--; - if (sprite->data[1] == 0) + sprite->sTimer--; + if (sprite->sTimer == 0) { sprite->invisible = FALSE; - sprite->data[0] = 1; + sprite->sState = 1; } break; case 1: sprite->x += 9; if (sprite->x == 67) - { sprite->y -= 7; - } + if (sprite->x == 148) - { sprite->y += 7; - } + if (sprite->x > 272) { sprite->invisible = TRUE; - if (sprite->data[2]) - sprite->data[0] = 2; + if (sprite->sHidden) + sprite->sState = 2; else { - sprite->x = -0x20; - sprite->data[1] = 540; - sprite->data[0] = 0; + sprite->x = -32; + sprite->sTimer = 540; + sprite->sState = 0; } } break; @@ -1215,3 +1305,7 @@ static void SpriteCallback_Slash(struct Sprite *sprite) break; } } + +#undef sState +#undef sTimer +#undef sHidden From 20e7148ade50e98db76c004efc7ebc9db9c5a706 Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Sun, 20 Nov 2022 20:50:40 +0800 Subject: [PATCH 3/3] Address review comments --- src/region_map.c | 24 ++++++++-------- src/title_screen.c | 72 +++++++++++++++++++++++----------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/region_map.c b/src/region_map.c index 07232a3f6..23f354c71 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1428,11 +1428,11 @@ static void UpdateMapsecNameBox(void) (WININ_WIN0_BG0 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR), (WININ_WIN1_BG0 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR) >> 8); SetWinOut(WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[WIN_MAP_NAME]); - SetGpuWindowDims(WIN_DUNGEON_NAME, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); - SetDispCnt(WIN_MAP_NAME, FALSE); + SetGpuWindowDims(0, &sMapsecNameWindowDims[WIN_MAP_NAME]); + SetGpuWindowDims(1, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); + SetDispCnt(0, FALSE); if (GetDungeonMapsecUnderCursor() != MAPSEC_NONE) - SetDispCnt(WIN_DUNGEON_NAME, FALSE); + SetDispCnt(1, FALSE); } static void DisplayCurrentMapName(void) @@ -1441,7 +1441,7 @@ static void DisplayCurrentMapName(void) FillWindowPixelBuffer(WIN_MAP_NAME, PIXEL_FILL(0)); if (GetMapsecUnderCursor() == MAPSEC_NONE) { - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[CLEAR_NAME]); + SetGpuWindowDims(0, &sMapsecNameWindowDims[CLEAR_NAME]); } else { @@ -1449,13 +1449,13 @@ static void DisplayCurrentMapName(void) AddTextPrinterParameterized3(WIN_MAP_NAME, FONT_2, 2, 2, sTextColor_White, 0, sRegionMap->mapName); PutWindowTilemap(WIN_MAP_NAME); CopyWindowToVram(WIN_MAP_NAME, COPYWIN_GFX); - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[WIN_MAP_NAME]); + SetGpuWindowDims(0, &sMapsecNameWindowDims[WIN_MAP_NAME]); } } static void DrawDungeonNameBox(void) { - SetGpuWindowDims(WIN_DUNGEON_NAME, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); + SetGpuWindowDims(1, &sMapsecNameWindowDims[WIN_DUNGEON_NAME]); } static void DisplayCurrentDungeonName(void) @@ -1465,13 +1465,13 @@ static void DisplayCurrentDungeonName(void) sRegionMap->dungeonWinTop = FALSE; sRegionMap->dungeonWinRight = 24; sRegionMap->dungeonWinBottom = 32; - SetDispCnt(WIN_DUNGEON_NAME, TRUE); + SetDispCnt(1, TRUE); ClearWindowTilemap(WIN_DUNGEON_NAME); mapsecId = GetDungeonMapsecUnderCursor(); if (mapsecId != MAPSEC_NONE) { descOffset = mapsecId - MAPSECS_KANTO; - SetDispCnt(WIN_DUNGEON_NAME, FALSE); + SetDispCnt(1, FALSE); sRegionMap->dungeonWinTop = TRUE; sRegionMap->dungeonWinLeft = StringLength(sMapNames[descOffset]); sRegionMap->dungeonWinRight = sRegionMap->dungeonWinLeft * 10 + 50; @@ -1718,7 +1718,7 @@ static void FreeSwitchMapMenu(u8 taskId) PrintTopBarTextRight(gText_RegionMap_AButtonSwitch); UpdateMapsecNameBox(); DrawDungeonNameBox(); - SetGpuWindowDims(WIN_MAP_NAME, &sMapsecNameWindowDims[CLEAR_NAME]); + SetGpuWindowDims(0, &sMapsecNameWindowDims[CLEAR_NAME]); FREE_IF_NOT_NULL(sSwitchMapMenu); } @@ -2132,11 +2132,11 @@ static void InitScreenForDungeonMapPreview(void) sDungeonMapPreview->bottomIncrement = (136 - sDungeonMapPreview->bottom) / 8; } -static bool8 UpdateDungeonMapPreview(bool8 a0) // todo: rename a0 +static bool8 UpdateDungeonMapPreview(bool8 closing) { struct GpuWindowParams data; - if (!a0) + if (!closing) { if (sDungeonMapPreview->updateCounter < 8) { diff --git a/src/title_screen.c b/src/title_screen.c index 3f7c51414..7c379bc34 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -69,8 +69,8 @@ static u16 TitleScreen_rand(u8 taskId, u8 field); static u32 CreateBlankSprite(void); static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite); static u8 CreateSlashSprite(void); -static void ScheduleHideSlashSprite(u8 spriteId); -static bool32 IsSlashSpriteHidden(u8 spriteId); +static void DeactivateSlashSprite(u8 spriteId); +static bool32 IsSlashSpriteDeactivated(u8 spriteId); static void SpriteCallback_Slash(struct Sprite *sprite); static const u8 sBorderBgTiles[] = INCBIN_U8("graphics/title_screen/border_bg.4bpp.lz"); @@ -81,16 +81,16 @@ static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/firered/border static const u8 sBorderBgMap[] = INCBIN_U8("graphics/title_screen/leafgreen/border_bg.bin.lz"); #endif -static const u32 sTitleScreen_Slash_Gfx[] = INCBIN_U32("graphics/title_screen/slash.4bpp.lz"); +static const u32 sSlash_Gfx[] = INCBIN_U32("graphics/title_screen/slash.4bpp.lz"); #if defined(FIRERED) -static const u16 sTitleScreen_Flames_Pal[] = INCBIN_U16("graphics/title_screen/firered/flames.gbapal"); -static const u32 sTitleScreen_Flames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/flames.4bpp.lz"); -static const u32 sTitleScreen_BlankFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/blank_flames.4bpp.lz"); +static const u16 sFlames_Pal[] = INCBIN_U16("graphics/title_screen/firered/flames.gbapal"); +static const u32 sFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/flames.4bpp.lz"); +static const u32 sBlankFlames_Gfx[] = INCBIN_U32("graphics/title_screen/firered/blank_flames.4bpp.lz"); #elif defined(LEAFGREEN) -static const u16 sTitleScreen_Leaves_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/leaves.gbapal"); -static const u32 sTitleScreen_Leaves_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/leaves.4bpp.lz"); -static const u32 sTitleScreen_Streak_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/streak.4bpp.lz"); +static const u16 sLeaves_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/leaves.gbapal"); +static const u32 sLeaves_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/leaves.4bpp.lz"); +static const u32 sStreak_Gfx[] = INCBIN_U32("graphics/title_screen/leafgreen/streak.4bpp.lz"); #endif static const struct OamData sOamData_FlameOrLeaf = { @@ -288,15 +288,15 @@ static void (*const sSceneFuncs[])(s16 *data) = { #if defined(FIRERED) static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sTitleScreen_Flames_Gfx, 0x500, TILE_TAG_FLAME_OR_LEAF}, - {sTitleScreen_BlankFlames_Gfx, 0x500, TILE_TAG_BLANK_OR_STREAK}, + {sFlames_Gfx, 0x500, TILE_TAG_FLAME_OR_LEAF}, + {sBlankFlames_Gfx, 0x500, TILE_TAG_BLANK_OR_STREAK}, {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, - {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} + {sSlash_Gfx, 0x800, TILE_TAG_SLASH} }; static const struct SpritePalette sSpritePals[] = { - {sTitleScreen_Flames_Pal, PAL_TAG_DEFAULT}, - {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, + {sFlames_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, {} }; @@ -306,15 +306,15 @@ static const u8 sFlameXPositions[] = { #elif defined(LEAFGREEN) static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sTitleScreen_Leaves_Gfx, 0x580, TILE_TAG_FLAME_OR_LEAF}, - {sTitleScreen_Streak_Gfx, 0x100, TILE_TAG_BLANK_OR_STREAK}, + {sLeaves_Gfx, 0x580, TILE_TAG_FLAME_OR_LEAF}, + {sStreak_Gfx, 0x100, TILE_TAG_BLANK_OR_STREAK}, {gTitleScreen_BlankSprite_Tiles, 0x400, TILE_TAG_BLANK}, - {sTitleScreen_Slash_Gfx, 0x800, TILE_TAG_SLASH} + {sSlash_Gfx, 0x800, TILE_TAG_SLASH} }; static const struct SpritePalette sSpritePals[] = { - {sTitleScreen_Leaves_Pal, PAL_TAG_DEFAULT}, - {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, + {sLeaves_Pal, PAL_TAG_DEFAULT}, + {gTitleScreen_Slash_Pal, PAL_TAG_SLASH}, {} }; @@ -630,13 +630,13 @@ static void SetTitleScreenScene_Run(s16 *data) case 1: if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE) { - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToSaveClearScreen); } else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX) { - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(CB2_FadeOutTransitionToBerryFix); } @@ -665,11 +665,11 @@ static void SetTitleScreenScene_Restart(s16 *data) switch (tState) { case 0: - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); tState++; break; case 1: - if (!gPaletteFade.active && !IsSlashSpriteHidden(tSlashSpriteId)) + if (!gPaletteFade.active && !IsSlashSpriteDeactivated(tSlashSpriteId)) { FadeOutMapMusic(10); BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 0x10, RGB_BLACK); @@ -709,7 +709,7 @@ static void SetTitleScreenScene_Cry(s16 *data) if (!gPaletteFade.active) { PlayCry_Normal(TITLE_SPECIES, 0); - ScheduleHideSlashSprite(tSlashSpriteId); + DeactivateSlashSprite(tSlashSpriteId); data[2] = 0; tState++; } @@ -717,7 +717,7 @@ static void SetTitleScreenScene_Cry(s16 *data) case 1: if (data[2] < 90) data[2]++; - else if (!IsSlashSpriteHidden(tSlashSpriteId)) + else if (!IsSlashSpriteDeactivated(tSlashSpriteId)) { BeginNormalPaletteFade((PALETTES_ALL & ~(1 << 0x1C) & ~(1 << 0x1D) & ~(1 << 0x1E) & ~(1 << 0x1F)), 0, 0, 16, RGB_WHITE); SignalEndTitleScreenPaletteSomethingTask(); @@ -1034,7 +1034,7 @@ static void Task_FlameSpawner(u8 taskId) xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; y = (TitleScreen_rand(taskId, 3) % 3) + 116; - x = TitleScreen_rand(taskId, 3) % 240; + x = TitleScreen_rand(taskId, 3) % DISPLAY_WIDTH; CreateFlameSprite( x, y, @@ -1234,9 +1234,9 @@ static void SetPalOnOrCreateBlankSprite(bool32 hasCreatedBlankSprite) CreateBlankSprite(); } -#define sState data[0] -#define sTimer data[1] -#define sHidden data[2] +#define sState data[0] +#define sTimer data[1] +#define sDeactivate data[2] static u8 CreateSlashSprite(void) { @@ -1249,13 +1249,13 @@ static u8 CreateSlashSprite(void) return spriteId; } -static void ScheduleHideSlashSprite(u8 spriteId) +static void DeactivateSlashSprite(u8 spriteId) { if (spriteId != MAX_SPRITES) - gSprites[spriteId].sHidden = TRUE; + gSprites[spriteId].sDeactivate = TRUE; } -static bool32 IsSlashSpriteHidden(u8 spriteId) +static bool32 IsSlashSpriteDeactivated(u8 spriteId) { if (spriteId != MAX_SPRITES) return gSprites[spriteId].sState ^ 2 ? TRUE : FALSE; @@ -1268,7 +1268,7 @@ static void SpriteCallback_Slash(struct Sprite *sprite) switch (sprite->sState) { case 0: - if (sprite->sHidden) + if (sprite->sDeactivate) { sprite->invisible = TRUE; sprite->sState = 2; @@ -1288,10 +1288,10 @@ static void SpriteCallback_Slash(struct Sprite *sprite) if (sprite->x == 148) sprite->y += 7; - if (sprite->x > 272) + if (sprite->x > DISPLAY_WIDTH + 32) { sprite->invisible = TRUE; - if (sprite->sHidden) + if (sprite->sDeactivate) sprite->sState = 2; else { @@ -1308,4 +1308,4 @@ static void SpriteCallback_Slash(struct Sprite *sprite) #undef sState #undef sTimer -#undef sHidden +#undef sDeactivate