diff --git a/include/applications/pokedex/formsub.h b/include/applications/pokedex/formsub.h new file mode 100644 index 0000000000..9cc6e5333e --- /dev/null +++ b/include/applications/pokedex/formsub.h @@ -0,0 +1,12 @@ +#ifndef POKEPLATINUM_POKEDEX_FORMSUB_H +#define POKEPLATINUM_POKEDEX_FORMSUB_H + +#include "applications/pokedex/pokedex_app.h" +#include "applications/pokedex/struct_ov21_021E68F4.h" + +#include "heap.h" + +void FormSub_Init(PokedexScreenManager *screenMan, PokedexApp *pokedexApp, enum HeapID heapID); +void FormSub_Free(PokedexScreenManager *screenMan); + +#endif // POKEPLATINUM_POKEDEX_FORMSUB_H diff --git a/include/applications/pokedex/ov21_021E8484.h b/include/applications/pokedex/ov21_021E8484.h deleted file mode 100644 index 3ad045499d..0000000000 --- a/include/applications/pokedex/ov21_021E8484.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef POKEPLATINUM_OV21_021E8484_H -#define POKEPLATINUM_OV21_021E8484_H - -#include "applications/pokedex/pokedex_app.h" -#include "applications/pokedex/struct_ov21_021E68F4.h" - -#include "heap.h" - -void ov21_021E8484(PokedexScreenManager *param0, PokedexApp *param1, enum HeapID heapID); -void ov21_021E84E4(PokedexScreenManager *param0); - -#endif // POKEPLATINUM_OV21_021E8484_H diff --git a/include/applications/pokedex/pokedex_main.h b/include/applications/pokedex/pokedex_main.h index 336444308f..599cf0f030 100644 --- a/include/applications/pokedex/pokedex_main.h +++ b/include/applications/pokedex/pokedex_main.h @@ -71,7 +71,7 @@ PokedexGraphicData *PokedexMain_GetGraphicData(PokedexApp *pokedexApp); PokedexScreenManager *ov21_021D1410(PokedexApp *pokedexApp, int param1); PokedexScreenManager *ov21_021D1430(PokedexApp *pokedexApp, int param1); void ov21_021D144C(Sprite *param0, int param1); -void ov21_021D1498(Sprite *param0, PokedexTextData *textData, int param2); +void PokedexMain_SetButtonY(Sprite *param0, PokedexTextData *textData, int setY); void ov21_021D1524(Sprite *param0, PokedexTextData *textData, int param2, int param3, int param4); void PokedexMain_SetHitTableRect(TouchScreenHitTable *hitTable, int top, int bottom, int left, int right); void PokedexMain_SetLoadingScreenParams(PokedexLoadingScreen *pokedexLoadingScreen, BgConfig *bgConfig, int layer, NNSG2dScreenData *screenData, int topStart, int topEnd, int bottomStart, int bottomEnd, int duration); diff --git a/include/applications/pokedex/struct_ov21_021E68F4.h b/include/applications/pokedex/struct_ov21_021E68F4.h index 71ddf27a43..bb17d23d90 100644 --- a/include/applications/pokedex/struct_ov21_021E68F4.h +++ b/include/applications/pokedex/struct_ov21_021E68F4.h @@ -4,7 +4,7 @@ #include "applications/pokedex/pokedex_updater.h" #include "applications/pokedex/struct_ov21_021D4660.h" -typedef struct { +typedef struct PokedexScreenManager { void *pageData; void *pageGraphics; PokedexDataFunction dataFunc[3]; diff --git a/include/unk_02012744.h b/include/unk_02012744.h index 30db86aa2c..97e7bd8606 100644 --- a/include/unk_02012744.h +++ b/include/unk_02012744.h @@ -16,9 +16,9 @@ void sub_020127BC(UnkStruct_02012744 *param0); FontOAM *sub_020127E8(const UnkStruct_020127E8 *param0); void sub_02012870(FontOAM *param0); int sub_02012898(const Window *param0, int param1, int heapID); -void sub_020128C4(FontOAM *param0, int param1, int param2); +void FontOAM_SetXY(FontOAM *fontOAM, int x, int y); void sub_02012938(FontOAM *param0); -void sub_020129A4(const FontOAM *param0, int *param1, int *param2); +void FontOAM_GetXY(const FontOAM *fontOAM, int *x, int *y); void sub_020129D0(FontOAM *param0, BOOL param1); void sub_02012A00(FontOAM *param0, u8 param1); void sub_02012A30(FontOAM *param0, u32 param1); diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index b276196065..94d989a5e9 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -810,7 +810,7 @@ Overlay pokedex Object main.nef.p/src_applications_pokedex_pokedex_height_check.c.o Object main.nef.p/src_applications_pokedex_ov21_021E68F4.c.o Object main.nef.p/src_applications_pokedex_ov21_021E737C.c.o - Object main.nef.p/src_applications_pokedex_ov21_021E8484.c.o + Object main.nef.p/src_applications_pokedex_formsub.c.o Object main.nef.p/src_applications_pokedex_ov21_021E8D48.c.o } diff --git a/src/applications/pokedex/formsub.c b/src/applications/pokedex/formsub.c new file mode 100644 index 0000000000..acaa33b245 --- /dev/null +++ b/src/applications/pokedex/formsub.c @@ -0,0 +1,659 @@ +#include "applications/pokedex/formsub.h" + +#include +#include + +#include "applications/pokedex/ov21_021DF734.h" +#include "applications/pokedex/ov21_021E29DC.h" +#include "applications/pokedex/pokedex_app.h" +#include "applications/pokedex/pokedex_data_manager.h" +#include "applications/pokedex/pokedex_graphics.h" +#include "applications/pokedex/pokedex_graphics_manager.h" +#include "applications/pokedex/pokedex_main.h" +#include "applications/pokedex/pokedex_sort.h" +#include "applications/pokedex/pokedex_sort_data.h" +#include "applications/pokedex/pokedex_text_manager.h" +#include "applications/pokedex/struct_ov21_021D4660.h" +#include "applications/pokedex/struct_ov21_021E68F4.h" + +#include "bg_window.h" +#include "brightness_controller.h" +#include "heap.h" +#include "narc.h" +#include "pltt_transfer.h" +#include "sprite.h" +#include "sprite_resource.h" +#include "sprite_transfer.h" +#include "sprite_util.h" +#include "system.h" +#include "touch_screen.h" +#include "touch_screen_actions.h" +#include "unk_02012744.h" +#include "vram_transfer.h" + +#include "res/graphics/pokedex/zukan.naix.h" +#include "res/text/bank/pokedex.h" + +/* + * Pokedex Forms Page Sub Screen + */ + +// constants used in this file +#define FORMSUB_GRAPHIC_ID 13000 +// form button constants +#define BUTTON_X 128 +#define BUTTON_Y 144 +#define BUTTON_WIDTH 228 +#define BUTTON_HEIGHT 64 +#define BUTTON_HITBOX_WIDTH 240 +#define BUTTON_HITBOX_HEIGHT 80 + +enum FormSubButtons { + FORMSUB_ANOTHER = 0, + MAX_FORMSUBBUTTONS, +}; + +typedef struct FormSubData { + int *unk_00; + PokedexSortData *sortData; + PokedexScreenManager *subScreen; + PokedexScreenManager *mainScreen; +} FormSubData; + +typedef struct Context { + void *formSubData; + void *formSubPageData; +} Context; + +typedef struct FormSubPageData { + TouchScreenActions *buttonTouchScreenActions; + TouchScreenHitTable *buttonHitTable; + Context context; + enum TouchScreenButtonState buttonState[MAX_FORMSUBBUTTONS]; + BOOL buttonPressed; +} FormSubPageData; + +typedef struct FormSubGraphics { + Sprite *buttonSprite; + PokedexTextData *buttonText; + SpriteResource *buttonSpriteResource[MAX_SPRITE_RESOURCE_GEN4]; + Sprite *unused[4]; + int backgroundState; + void *paletteFile; +} FormSubGraphics; + +static FormSubData *LoadAppData(enum HeapID heapID, PokedexApp *pokedexApp); +static PokedexGraphicData **LoadAppGraphics(enum HeapID heapID, PokedexApp *pokedexApp); +static UnkStruct_ov21_021D4660 *ScreenStates(enum HeapID heapID, PokedexApp *pokedexApp); +static void FreeFormSubData(FormSubData *formSubData); +static void FreeGraphicData(PokedexGraphicData **graphicData); +static void FreeScreenStates(UnkStruct_ov21_021D4660 *param0); +static int NumStates(void); +static BOOL FormSubDataEnter(PokedexDataManager *dataMan, void *data); +static BOOL FormSubDataUpdate(PokedexDataManager *dataMan, void *data); +static BOOL FormSubDataExit(PokedexDataManager *dataMan, void *data); +static BOOL FormSubGraphicsEnter(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan); +static BOOL FormSubGraphicsUpdate(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan); +static BOOL FormSubGraphicsExit(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan); +static void SetSpriteOAMModesXLU(FormSubGraphics *formSubGraphics); +static void SetSpriteOAMModesNormal(FormSubGraphics *formSubGraphics); +static void InitBlendTransition(FormSubGraphics *formSubGraphics, PokedexGraphicData **param1, const FormSubData *formSubData, BOOL isEntering); +static BOOL AdvanceBlendTransition(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData, const FormSubData *formSubData, BOOL isEntering); +static void SetTouchScreen(FormSubPageData *formSubPageData, FormSubData *formSubData, enum HeapID heapID); +static void SetButtonOutOfBounds(FormSubPageData *formSubPageData); +static void RunButtonAction(FormSubPageData *formSubPageData, FormSubData *formSubData); +static void FreeTouchScreen(FormSubPageData *formSubPageData); +static void ButtonTouchActions(u32 button, enum TouchScreenButtonState touchScreenButtonState, void *data); +static void UpdateButtonText(Sprite *sprite, PokedexTextData *textData, int y, int textPaletteOffsetUnpressed, int textPaletteOffsetPressed); +static void UpdateButtonDisplay(PokedexGraphicData **graphicData, FormSubGraphics *formSubGraphics, const FormSubPageData *formSubPageData, enum HeapID heapID); +static void AdvanceMainScreen(const FormSubData *formSubData); +static void CheckButtonKeyHeld(FormSubPageData *formSubPageData, FormSubData *formSubData); +static void CursorToButton(PokedexGraphicData **graphicdata, const FormSubData *formSubData); +static void TransformCursor(PokedexGraphicData **graphicdata, int x, int y, int width, int height); +static void LoadFormSubGraphics(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData, enum HeapID heapID); +static void FreeGraphics(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData, enum HeapID heapID); +static void LoadBackgroundTilemaps(PokedexGraphicData **graphicData, enum HeapID heapID); +static void LoadButtonSprite(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData, enum HeapID heapID); +static void FreeButtonSpriteResource(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData); +static void AnimateSprites(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData, enum HeapID heapID); +static void FreeButtonSprite(FormSubGraphics *formSubGraphics); +static void LoadButtonText(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData, enum HeapID heapID); +static void FreeTextData(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData); +static void UpdateButtonGraphics(PokedexGraphicData **graphicData, Sprite *sprite, PokedexTextData *textData, int buttonState, int y, int destAddr, int *backgroundState, enum HeapID heapID, int textPaletteOffsetUnpressed, int textPaletteOffsetPressed, void **paletteFile); + +void FormSub_Init(PokedexScreenManager *screenMan, PokedexApp *pokedexApp, enum HeapID heapID) +{ + FormSubData *formSubData = LoadAppData(heapID, pokedexApp); + PokedexGraphicData **pokedexGraphicData = LoadAppGraphics(heapID, pokedexApp); + UnkStruct_ov21_021D4660 *screenStates = ScreenStates(heapID, pokedexApp); + + screenMan->pageData = formSubData; + screenMan->pageGraphics = pokedexGraphicData; + screenMan->screenStates = screenStates; + screenMan->numStates = NumStates(); + + screenMan->dataFunc[0] = FormSubDataEnter; + screenMan->dataFunc[1] = FormSubDataUpdate; + screenMan->dataFunc[2] = FormSubDataExit; + screenMan->graphicsFunc[0] = FormSubGraphicsEnter; + screenMan->graphicsFunc[1] = FormSubGraphicsUpdate; + screenMan->graphicsFunc[2] = FormSubGraphicsExit; +} + +void FormSub_Free(PokedexScreenManager *screenMan) +{ + FreeFormSubData(screenMan->pageData); + FreeGraphicData(screenMan->pageGraphics); + FreeScreenStates(screenMan->screenStates); +} + +static FormSubData *LoadAppData(enum HeapID heapID, PokedexApp *pokedexApp) +{ + FormSubData *formSubData = Heap_Alloc(heapID, sizeof(FormSubData)); + + GF_ASSERT(formSubData); + memset(formSubData, 0, sizeof(FormSubData)); + + formSubData->unk_00 = ov21_021D13A0(pokedexApp); + formSubData->subScreen = ov21_021D1430(pokedexApp, 3); + formSubData->mainScreen = ov21_021D1410(pokedexApp, 3); + formSubData->sortData = PokedexMain_GetSortData(pokedexApp); + + return formSubData; +} + +static PokedexGraphicData **LoadAppGraphics(enum HeapID heapID, PokedexApp *pokedexApp) +{ + PokedexGraphicData **graphicData = Heap_Alloc(heapID, sizeof(PokedexGraphicData *)); + + GF_ASSERT(graphicData); + memset(graphicData, 0, sizeof(PokedexGraphicData *)); + + *graphicData = PokedexMain_GetGraphicData(pokedexApp); + + return graphicData; +} + +static UnkStruct_ov21_021D4660 *ScreenStates(enum HeapID heapID, PokedexApp *param1) +{ + return NULL; +} + +static void FreeFormSubData(FormSubData *formSubData) +{ + GF_ASSERT(formSubData); + Heap_Free(formSubData); +} + +static void FreeGraphicData(PokedexGraphicData **graphicData) +{ + GF_ASSERT(graphicData); + Heap_Free(graphicData); +} + +static void FreeScreenStates(UnkStruct_ov21_021D4660 *param0) +{ + return; +} + +static int NumStates(void) +{ + return 0; +} + +static BOOL FormSubDataEnter(PokedexDataManager *dataMan, void *data) +{ + FormSubData *formSubData = data; + + FormSubPageData *formSubPageData = Heap_Alloc(dataMan->heapID, sizeof(FormSubPageData)); + memset(formSubPageData, 0, sizeof(FormSubPageData)); + + formSubPageData->buttonState[FORMSUB_ANOTHER] = TOUCH_BUTTON_HELD_OUT_OF_BOUNDS + 1; + + SetTouchScreen(formSubPageData, formSubData, dataMan->heapID); + RunButtonAction(formSubPageData, formSubData); + + dataMan->pageData = formSubPageData; + + return TRUE; +} + +static BOOL FormSubDataUpdate(PokedexDataManager *dataMan, void *data) +{ + FormSubData *formSubData = data; + FormSubPageData *formSubPageData = dataMan->pageData; + + if (dataMan->exit == TRUE) { + return TRUE; + } + + if (dataMan->unchanged == TRUE) { + return FALSE; + } + + if (ov21_021E33AC(formSubData->subScreen)) { + SetButtonOutOfBounds(formSubPageData); + + if (ov21_021E33BC(formSubData->subScreen) && (ov21_021D3998(formSubData->sortData) == 2)) { + CheckButtonKeyHeld(formSubPageData, formSubData); + } + + RunButtonAction(formSubPageData, formSubData); + + if (formSubPageData->buttonPressed) { + AdvanceMainScreen(formSubData); + formSubPageData->buttonPressed = FALSE; + } + } + + return FALSE; +} + +static BOOL FormSubDataExit(PokedexDataManager *dataMan, void *data) +{ + FormSubPageData *formSubPageData = dataMan->pageData; + + FreeTouchScreen(formSubPageData); + Heap_Free(formSubPageData); + + return TRUE; +} + +static BOOL FormSubGraphicsEnter(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan) +{ + const FormSubData *formSubData = data; + PokedexGraphicData **graphicData = graphics; + FormSubGraphics *formSubGraphics = graphicsMan->pageGraphics; + + switch (graphicsMan->state) { + case 0: + graphicsMan->pageGraphics = Heap_Alloc(graphicsMan->heapID, sizeof(FormSubGraphics)); + memset(graphicsMan->pageGraphics, 0, sizeof(FormSubGraphics)); + graphicsMan->state++; + break; + case 1: + LoadFormSubGraphics(formSubGraphics, graphicData, graphicsMan->heapID); + InitBlendTransition(formSubGraphics, graphicData, formSubData, TRUE); + graphicsMan->state++; + break; + case 2: + if (AdvanceBlendTransition(formSubGraphics, graphicData, formSubData, TRUE)) { + graphicsMan->state++; + } + break; + case 3: + PokedexGraphics_SetStaticCursorSize(&(*graphicData)->cursorGraphics, FALSE); + return TRUE; + default: + break; + } + + return FALSE; +} + +static BOOL FormSubGraphicsUpdate(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan) +{ + const FormSubData *formSubData = data; + const FormSubPageData *formSubPageData = dataMan->pageData; + PokedexGraphicData **graphicData = graphics; + FormSubGraphics *formSubGraphics = graphicsMan->pageGraphics; + + if (ov21_021E33AC(formSubData->subScreen)) { + UpdateButtonDisplay(graphicData, formSubGraphics, formSubPageData, graphicsMan->heapID); + CursorToButton(graphicData, formSubData); + } + + return FALSE; +} + +static BOOL FormSubGraphicsExit(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan) +{ + const FormSubData *formSubData = data; + PokedexGraphicData **graphicData = graphics; + FormSubGraphics *formSubGraphics = graphicsMan->pageGraphics; + + switch (graphicsMan->state) { + case 0: + PokedexGraphics_SetStaticCursorSize(&(*graphicData)->cursorGraphics, TRUE); + InitBlendTransition(formSubGraphics, graphicData, formSubData, FALSE); + graphicsMan->state++; + break; + case 1: + if (AdvanceBlendTransition(formSubGraphics, graphicData, formSubData, FALSE)) { + graphicsMan->state++; + } + break; + case 2: + FreeGraphics(formSubGraphics, graphicData, graphicsMan->heapID); + graphicsMan->state++; + break; + case 3: + Heap_Free(graphicsMan->pageGraphics); + graphicsMan->state++; + break; + case 4: + return TRUE; + default: + break; + } + + return FALSE; +} + +static void SetSpriteOAMModesXLU(FormSubGraphics *formSubGraphics) +{ + Sprite_SetExplicitOAMMode(formSubGraphics->buttonSprite, GX_OAM_MODE_XLU); + sub_02012AF0(formSubGraphics->buttonText->fontOAM, GX_OAM_MODE_XLU); +} + +static void SetSpriteOAMModesNormal(FormSubGraphics *formSubGraphics) +{ + Sprite_SetExplicitOAMMode(formSubGraphics->buttonSprite, GX_OAM_MODE_NORMAL); + sub_02012AF0(formSubGraphics->buttonText->fontOAM, GX_OAM_MODE_NORMAL); +} + +static void InitBlendTransition(FormSubGraphics *formSubGraphics, PokedexGraphicData **param1, const FormSubData *formSubData, BOOL isEntering) +{ + SetSpriteOAMModesXLU(formSubGraphics); + + if (ov21_021E33A4(formSubData->subScreen)) { + if (isEntering) { + PokedexGraphics_InitBlendTransition(&(*param1)->blendSub, 1, -16, 0, 0, 16, (GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), (GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG1 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), 1); + } else { + PokedexGraphics_InitBlendTransition(&(*param1)->blendSub, 1, 0, -16, 16, 0, (GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), (GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG1 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), 1); + } + } +} + +static BOOL AdvanceBlendTransition(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData, const FormSubData *formSubData, BOOL isEntering) +{ + BOOL transitionComplete; + + if (ov21_021E33A4(formSubData->subScreen)) { + transitionComplete = PokedexGraphics_TakeBlendTransitionStep(&(*graphicData)->blendSub); + } else { + transitionComplete = BrightnessController_IsTransitionComplete(BRIGHTNESS_SUB_SCREEN); + } + + if (transitionComplete) { + if (isEntering) { + SetSpriteOAMModesNormal(formSubGraphics); + } + + return TRUE; + } + + return FALSE; +} + +static void SetTouchScreen(FormSubPageData *formSubPageData, FormSubData *formSubData, enum HeapID heapID) +{ + formSubPageData->buttonHitTable = Heap_Alloc(heapID, sizeof(TouchScreenHitTable)); + + PokedexMain_SetHitTableRect(formSubPageData->buttonHitTable, BUTTON_Y - (BUTTON_HITBOX_HEIGHT / 2), BUTTON_Y + (BUTTON_HITBOX_HEIGHT / 2), BUTTON_X - (BUTTON_HITBOX_WIDTH / 2), BUTTON_X + (BUTTON_HITBOX_WIDTH / 2)); + + formSubPageData->context.formSubData = formSubData; + formSubPageData->context.formSubPageData = formSubPageData; + formSubPageData->buttonTouchScreenActions = TouchScreenActions_RegisterHandler(formSubPageData->buttonHitTable, 1, ButtonTouchActions, &formSubPageData->context, heapID); +} + +static void SetButtonOutOfBounds(FormSubPageData *formSubPageData) +{ + formSubPageData->buttonState[FORMSUB_ANOTHER] = TOUCH_BUTTON_HELD_OUT_OF_BOUNDS; +} + +static void RunButtonAction(FormSubPageData *formSubPageData, FormSubData *formSubData) +{ + TouchScreenActions_HandleAction(formSubPageData->buttonTouchScreenActions); + + if (formSubPageData->buttonPressed) { + formSubPageData->buttonState[FORMSUB_ANOTHER] = TOUCH_BUTTON_HELD; + } +} + +static void FreeTouchScreen(FormSubPageData *formSubPageData) +{ + TouchScreenActions_Free(formSubPageData->buttonTouchScreenActions); + Heap_Free(formSubPageData->buttonHitTable); + + formSubPageData->buttonHitTable = NULL; +} + +static void ButtonTouchActions(u32 button, enum TouchScreenButtonState touchScreenButtonState, void *data) +{ + Context *context = data; + FormSubData *formSubData = context->formSubData; + FormSubPageData *formSubPageData = context->formSubPageData; + + formSubPageData->buttonState[button] = touchScreenButtonState; + + switch (touchScreenButtonState) { + case TOUCH_BUTTON_PRESSED: + switch (button) { + case FORMSUB_ANOTHER: + ov21_021E33B4(formSubData->subScreen, TRUE); + formSubPageData->buttonPressed = TRUE; + break; + default: + break; + } + break; + case TOUCH_BUTTON_HELD: + switch (button) { + case FORMSUB_ANOTHER: + formSubPageData->buttonPressed = TRUE; + break; + default: + break; + } + break; + default: + break; + } +} + +static void LoadFormSubGraphics(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData, enum HeapID heapID) +{ + LoadBackgroundTilemaps(graphicData, heapID); + LoadButtonSprite(formSubGraphics, graphicData, heapID); + AnimateSprites(formSubGraphics, graphicData, heapID); + LoadButtonText(formSubGraphics, graphicData, heapID); +} + +static void FreeGraphics(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData, enum HeapID heapID) +{ + PokedexGraphics_LoadGraphicNarcPaletteData(*graphicData, background_sub_2_NCLR, PAL_LOAD_SUB_BG, 4 * 32, 32, heapID); + FreeButtonSprite(formSubGraphics); + FreeTextData(formSubGraphics, graphicData); + FreeButtonSpriteResource(formSubGraphics, graphicData); + + if (formSubGraphics->paletteFile) { + Heap_Free(formSubGraphics->paletteFile); + } +} + +static void LoadBackgroundTilemaps(PokedexGraphicData **graphicData, enum HeapID heapID) +{ + NNSG2dScreenData *screenData; + + PokedexGraphics_LoadGraphicNarcCharacterData(*graphicData, entry_sub_NCGR_lz, (*graphicData)->bgConfig, BG_LAYER_SUB_2, 0, 0, TRUE, heapID); + + void *tilemap = PokedexGraphics_GetGraphicNarcTilemapData(*graphicData, forms_sub_NSCR_lz, TRUE, &screenData, heapID); + + Bg_LoadToTilemapRect((*graphicData)->bgConfig, BG_LAYER_SUB_2, screenData->rawData, 0, 0, screenData->screenWidth / 8, screenData->screenHeight / 8); + Heap_Free(tilemap); + Bg_ScheduleTilemapTransfer((*graphicData)->bgConfig, BG_LAYER_SUB_2); +} + +static void LoadButtonSprite(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData, enum HeapID heapID) +{ + PokedexGraphicData *graphicData = *pokedexGraphicData; + NARC *narc = PokedexGraphics_GetNARC(graphicData); + + formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_CHAR] = SpriteResourceCollection_AddTilesFrom(graphicData->spriteResourceCollection[SPRITE_RESOURCE_CHAR], narc, size_buttons_pressed_NCGR_lz, TRUE, size_buttons_pressed_NCGR_lz + FORMSUB_GRAPHIC_ID, NNS_G2D_VRAM_TYPE_2DSUB, heapID); + + SpriteTransfer_RequestCharAtEnd(formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_CHAR]); + SpriteResource_ReleaseData(formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_CHAR]); + + formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_CELL] = SpriteResourceCollection_AddFrom(graphicData->spriteResourceCollection[SPRITE_RESOURCE_CELL], narc, size_buttons_pressed_cell_NCER_lz, TRUE, size_buttons_pressed_cell_NCER_lz + FORMSUB_GRAPHIC_ID, SPRITE_RESOURCE_CELL, heapID); + formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_ANIM] = SpriteResourceCollection_AddFrom(graphicData->spriteResourceCollection[SPRITE_RESOURCE_ANIM], narc, size_buttons_pressed_anim_NANR_lz, TRUE, size_buttons_pressed_anim_NANR_lz + FORMSUB_GRAPHIC_ID, SPRITE_RESOURCE_ANIM, heapID); +} + +static void FreeButtonSpriteResource(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData) +{ + PokedexGraphicData *graphicData = *pokedexGraphicData; + + SpriteTransfer_ResetCharTransfer(formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_CHAR]); + SpriteResourceCollection_Remove(graphicData->spriteResourceCollection[SPRITE_RESOURCE_CHAR], formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_CHAR]); + SpriteResourceCollection_Remove(graphicData->spriteResourceCollection[SPRITE_RESOURCE_CELL], formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_CELL]); + SpriteResourceCollection_Remove(graphicData->spriteResourceCollection[SPRITE_RESOURCE_ANIM], formSubGraphics->buttonSpriteResource[SPRITE_RESOURCE_ANIM]); +} + +static void AnimateSprites(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData, enum HeapID heapID) +{ + SpriteResourcesHeader spriteResourcesHeader; + SpriteListTemplate spriteListTemplate; + PokedexGraphicData *graphicData = *pokedexGraphicData; + + SpriteResourcesHeader_Init(&spriteResourcesHeader, size_buttons_pressed_NCGR_lz + FORMSUB_GRAPHIC_ID, info_NCLR + 2100, size_buttons_pressed_cell_NCER_lz + FORMSUB_GRAPHIC_ID, size_buttons_pressed_anim_NANR_lz + FORMSUB_GRAPHIC_ID, 0xffffffff, 0xffffffff, FALSE, 2, graphicData->spriteResourceCollection[SPRITE_RESOURCE_CHAR], graphicData->spriteResourceCollection[SPRITE_RESOURCE_PLTT], graphicData->spriteResourceCollection[SPRITE_RESOURCE_CELL], graphicData->spriteResourceCollection[SPRITE_RESOURCE_ANIM], NULL, NULL); + + spriteListTemplate.list = graphicData->spriteList; + spriteListTemplate.resourceData = &spriteResourcesHeader; + spriteListTemplate.priority = 31; + spriteListTemplate.vramType = NNS_G2D_VRAM_TYPE_2DSUB; + spriteListTemplate.heapID = heapID; + + spriteListTemplate.position.x = BUTTON_X << FX32_SHIFT; + spriteListTemplate.position.y = BUTTON_Y << FX32_SHIFT; + spriteListTemplate.position.y += (HW_LCD_HEIGHT << FX32_SHIFT); + + formSubGraphics->buttonSprite = SpriteList_Add(&spriteListTemplate); + + Sprite_SetAnim(formSubGraphics->buttonSprite, 2); +} + +static void FreeButtonSprite(FormSubGraphics *formSubGraphics) +{ + Sprite_Delete(formSubGraphics->buttonSprite); +} + +static void LoadButtonText(FormSubGraphics *formSubGraphics, PokedexGraphicData **pokedexGraphicData, enum HeapID heapID) +{ + PokedexGraphicData *graphicData = *pokedexGraphicData; + + GF_ASSERT(formSubGraphics->buttonSprite); + + SpriteResource *spriteResource = SpriteResourceCollection_Find(graphicData->spriteResourceCollection[SPRITE_RESOURCE_PLTT], info_NCLR + 2100); + + PokedexDisplayBox displayBox; + displayBox.textMan = graphicData->textMan; + displayBox.paletteProxy = SpriteTransfer_GetPaletteProxy(spriteResource, NULL); + displayBox.y = -8; + displayBox.spriteResourcePriority = 2; + displayBox.spriteListPriority = 0; + displayBox.vramType = NNS_G2D_VRAM_TYPE_2DSUB; + displayBox.heapID = heapID; + + int plttOffset = PlttTransfer_GetPlttOffset(displayBox.paletteProxy, NNS_G2D_VRAM_TYPE_2DSUB); + Window *window = PokedexTextManager_NewWindow(graphicData->textMan, 16, 2); + u32 strWidth = PokedexTextManager_DisplayMessage(graphicData->textMan, window, TEXT_BANK_POKEDEX, pl_msg_pokedex_anotherform, 0, 0); + + displayBox.x = -(strWidth / 2); + displayBox.window = window; + displayBox.sprite = formSubGraphics->buttonSprite; + + formSubGraphics->buttonText = PokedexTextManager_NextTextData(&displayBox); + + sub_02012A60(formSubGraphics->buttonText->fontOAM, plttOffset + 4); + PokedexTextManager_FreeWindow(window); +} + +static void FreeTextData(FormSubGraphics *formSubGraphics, PokedexGraphicData **graphicData) +{ + PokedexTextManager_FreeTextData(formSubGraphics->buttonText); +} + +static void UpdateButtonGraphics(PokedexGraphicData **graphicData, Sprite *sprite, PokedexTextData *textData, int buttonState, int y, int destAddr, int *backgroundState, enum HeapID heapID, int textPaletteOffsetUnpressed, int textPaletteOffsetPressed, void **paletteFile) +{ + NNSG2dPaletteData *paletteData; + BOOL validFrame = FALSE; + int memberIndex; + + ov21_021D144C(sprite, buttonState); + UpdateButtonText(sprite, textData, y, textPaletteOffsetUnpressed, textPaletteOffsetPressed); + + switch (Sprite_GetAnimFrame(sprite)) { + case 0: + case 1: + if (*backgroundState != 0) { + validFrame = TRUE; + memberIndex = background_sub_2_NCLR; + *backgroundState = 0; + } + break; + case 2: + if (*backgroundState != 1) { + validFrame = TRUE; + memberIndex = background_sub_3_NCLR; + *backgroundState = 1; + } + break; + case 3: + if (*backgroundState != 2) { + validFrame = TRUE; + memberIndex = background_sub_1_NCLR; + *backgroundState = 2; + } + break; + } + + if (validFrame) { + if (*paletteFile) { + Heap_Free(*paletteFile); + } + + *paletteFile = PokedexGraphics_GetGraphicNarcPaletteData(*graphicData, memberIndex, &paletteData, heapID); + + GF_ASSERT(VramTransfer_Request(NNS_GFD_DST_2D_BG_PLTT_SUB, destAddr * 32, paletteData->pRawData, 32)); + } +} + +static void UpdateButtonText(Sprite *sprite, PokedexTextData *textData, int y, int textPaletteOffsetUnpressed, int textPaletteOffsetPressed) +{ + PokedexMain_SetButtonY(sprite, textData, y); + + if ((int)Sprite_GetAnimFrame(sprite) < 2) { + sub_02012AC0(textData->fontOAM, textPaletteOffsetUnpressed); + } else { + sub_02012AC0(textData->fontOAM, textPaletteOffsetPressed); + } +} + +static void UpdateButtonDisplay(PokedexGraphicData **graphicData, FormSubGraphics *formSubGraphics, const FormSubPageData *formSubPageData, enum HeapID heapID) +{ + UpdateButtonGraphics(graphicData, formSubGraphics->buttonSprite, formSubGraphics->buttonText, formSubPageData->buttonState[FORMSUB_ANOTHER], -8, 4, &formSubGraphics->backgroundState, heapID, 4, 1, &formSubGraphics->paletteFile); +} + +static void CheckButtonKeyHeld(FormSubPageData *formSubPageData, FormSubData *formSubData) +{ + if (gSystem.heldKeys & PAD_BUTTON_A) { + formSubPageData->buttonPressed = TRUE; + } +} + +static void CursorToButton(PokedexGraphicData **graphicdata, const FormSubData *formSubData) +{ + if (ov21_021E33BC(formSubData->subScreen) == 1) { + TransformCursor(graphicdata, BUTTON_X, BUTTON_Y, BUTTON_WIDTH, BUTTON_HEIGHT); + } +} + +static void TransformCursor(PokedexGraphicData **graphicdata, int x, int y, int width, int height) +{ + PokedexGraphics_TransformCursor(*graphicdata, x, y, width, height); +} + +static void AdvanceMainScreen(const FormSubData *formSubData) +{ + ov21_021DF7A0(formSubData->mainScreen, 1); +} diff --git a/src/applications/pokedex/ov21_021D5AEC.c b/src/applications/pokedex/ov21_021D5AEC.c index 7b77e0d4ab..bfb140da13 100644 --- a/src/applications/pokedex/ov21_021D5AEC.c +++ b/src/applications/pokedex/ov21_021D5AEC.c @@ -1163,7 +1163,7 @@ static void ov21_021D6C44(UnkStruct_ov21_021D71A8 *param0, PokedexGraphicData *p for (v0 = 0; v0 < 9; v0++) { if (param0->unk_28[v4]) { ov21_021D6CA4(param0->unk_00[v4], &v1, &v2); - sub_020128C4(param0->unk_28[v4]->fontOAM, v1, v2); + FontOAM_SetXY(param0->unk_28[v4]->fontOAM, v1, v2); v5 = Sprite_GetPriority(param0->unk_00[v4]); v5--; diff --git a/src/applications/pokedex/ov21_021E8484.c b/src/applications/pokedex/ov21_021E8484.c deleted file mode 100644 index 805795c8ed..0000000000 --- a/src/applications/pokedex/ov21_021E8484.c +++ /dev/null @@ -1,699 +0,0 @@ -#include "applications/pokedex/ov21_021E8484.h" - -#include -#include - -#include "applications/pokedex/ov21_021DF734.h" -#include "applications/pokedex/ov21_021E29DC.h" -#include "applications/pokedex/pokedex_app.h" -#include "applications/pokedex/pokedex_data_manager.h" -#include "applications/pokedex/pokedex_graphics.h" -#include "applications/pokedex/pokedex_graphics_manager.h" -#include "applications/pokedex/pokedex_main.h" -#include "applications/pokedex/pokedex_sort.h" -#include "applications/pokedex/pokedex_sort_data.h" -#include "applications/pokedex/pokedex_text_manager.h" -#include "applications/pokedex/struct_ov21_021D4660.h" -#include "applications/pokedex/struct_ov21_021E68F4.h" - -#include "bg_window.h" -#include "brightness_controller.h" -#include "heap.h" -#include "narc.h" -#include "pltt_transfer.h" -#include "sprite.h" -#include "sprite_resource.h" -#include "sprite_transfer.h" -#include "sprite_util.h" -#include "system.h" -#include "touch_screen.h" -#include "touch_screen_actions.h" -#include "unk_02012744.h" -#include "vram_transfer.h" - -#include "res/graphics/pokedex/zukan.naix.h" -#include "res/text/bank/pokedex.h" - -typedef struct { - int *unk_00; - PokedexSortData *unk_04; - PokedexScreenManager *unk_08; - PokedexScreenManager *unk_0C; -} UnkStruct_ov21_021E8570; - -typedef struct { - void *unk_00; - void *unk_04; -} UnkStruct_ov21_021E88E8; - -typedef struct { - TouchScreenActions *unk_00; - TouchScreenHitTable *unk_04; - UnkStruct_ov21_021E88E8 unk_08; - int unk_10[1]; - BOOL unk_14; -} UnkStruct_ov21_021E88B0; - -typedef struct { - Sprite *unk_00[1]; - PokedexTextData *unk_04[1]; - SpriteResource *unk_08[4]; - Sprite *unk_18[4]; - int unk_28[1]; - void *unk_2C[1]; -} UnkStruct_ov21_021E8794; - -static UnkStruct_ov21_021E8570 *ov21_021E84FC(enum HeapID heapID, PokedexApp *param1); -static PokedexGraphicData **ov21_021E8544(enum HeapID heapID, PokedexApp *param1); -static UnkStruct_ov21_021D4660 *ov21_021E856C(enum HeapID heapID, PokedexApp *param1); -static void ov21_021E8570(UnkStruct_ov21_021E8570 *param0); -static void ov21_021E8584(PokedexGraphicData **param0); -static void ov21_021E8598(UnkStruct_ov21_021D4660 *param0); -static int ov21_021E859C(void); -static int ov21_021E85A0(PokedexDataManager *dataMan, void *data); -static int ov21_021E85DC(PokedexDataManager *dataMan, void *data); -static int ov21_021E8640(PokedexDataManager *dataMan, void *data); -static int ov21_021E8654(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan); -static int ov21_021E86DC(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan); -static int ov21_021E870C(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan); -static void ov21_021E8794(UnkStruct_ov21_021E8794 *param0); -static void ov21_021E87AC(UnkStruct_ov21_021E8794 *param0); -static void ov21_021E87C4(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, const UnkStruct_ov21_021E8570 *param2, BOOL param3); -static BOOL ov21_021E8830(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, const UnkStruct_ov21_021E8570 *param2, BOOL param3); -static void ov21_021E886C(UnkStruct_ov21_021E88B0 *param0, UnkStruct_ov21_021E8570 *param1, enum HeapID heapID); -static void ov21_021E88B0(UnkStruct_ov21_021E88B0 *param0); -static void ov21_021E88B8(UnkStruct_ov21_021E88B0 *param0, UnkStruct_ov21_021E8570 *param1); -static void ov21_021E88D0(UnkStruct_ov21_021E88B0 *param0); -static void ov21_021E88E8(u32 param0, enum TouchScreenButtonState param1, void *param2); -static void ov21_021E8C94(Sprite *param0, PokedexTextData *textData, int param2, int param3, int param4); -static void ov21_021E8CBC(PokedexGraphicData **param0, UnkStruct_ov21_021E8794 *param1, const UnkStruct_ov21_021E88B0 *param2, int param3); -static void ov21_021E8D3C(const UnkStruct_ov21_021E8570 *param0); -static void ov21_021E8CF0(UnkStruct_ov21_021E88B0 *param0, UnkStruct_ov21_021E8570 *param1); -static void ov21_021E8D04(PokedexGraphicData **param0, const UnkStruct_ov21_021E8570 *param1); -static void ov21_021E8D28(PokedexGraphicData **param0, int param1, int param2, int param3, int param4); -static void ov21_021E891C(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int heapID); -static void ov21_021E894C(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int heapID); -static void ov21_021E898C(PokedexGraphicData **param0, int heapID); -static void ov21_021E89F4(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int param2); -static void ov21_021E8A74(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1); -static void ov21_021E8AA8(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int param2); -static void ov21_021E8B34(UnkStruct_ov21_021E8794 *param0); -static void ov21_021E8B40(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int param2); -static void ov21_021E8BDC(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1); - -void ov21_021E8484(PokedexScreenManager *param0, PokedexApp *param1, enum HeapID heapID) -{ - UnkStruct_ov21_021E8570 *v0; - PokedexGraphicData **v1; - UnkStruct_ov21_021D4660 *v2; - - v0 = ov21_021E84FC(heapID, param1); - v1 = ov21_021E8544(heapID, param1); - v2 = ov21_021E856C(heapID, param1); - - param0->pageData = v0; - param0->pageGraphics = v1; - param0->screenStates = v2; - param0->numStates = ov21_021E859C(); - - param0->dataFunc[0] = ov21_021E85A0; - param0->dataFunc[1] = ov21_021E85DC; - param0->dataFunc[2] = ov21_021E8640; - param0->graphicsFunc[0] = ov21_021E8654; - param0->graphicsFunc[1] = ov21_021E86DC; - param0->graphicsFunc[2] = ov21_021E870C; -} - -void ov21_021E84E4(PokedexScreenManager *param0) -{ - ov21_021E8570(param0->pageData); - ov21_021E8584(param0->pageGraphics); - ov21_021E8598(param0->screenStates); -} - -static UnkStruct_ov21_021E8570 *ov21_021E84FC(enum HeapID heapID, PokedexApp *param1) -{ - UnkStruct_ov21_021E8570 *v0 = Heap_Alloc(heapID, sizeof(UnkStruct_ov21_021E8570)); - - GF_ASSERT(v0); - memset(v0, 0, sizeof(UnkStruct_ov21_021E8570)); - - v0->unk_00 = ov21_021D13A0(param1); - v0->unk_08 = ov21_021D1430(param1, 3); - v0->unk_0C = ov21_021D1410(param1, 3); - v0->unk_04 = PokedexMain_GetSortData(param1); - - return v0; -} - -static PokedexGraphicData **ov21_021E8544(enum HeapID heapID, PokedexApp *param1) -{ - PokedexGraphicData **v0; - PokedexScreenManager *v1; - - v0 = Heap_Alloc(heapID, sizeof(PokedexGraphicData **)); - - GF_ASSERT(v0); - memset(v0, 0, sizeof(PokedexGraphicData **)); - - *v0 = PokedexMain_GetGraphicData(param1); - - return v0; -} - -static UnkStruct_ov21_021D4660 *ov21_021E856C(enum HeapID heapID, PokedexApp *param1) -{ - return NULL; -} - -static void ov21_021E8570(UnkStruct_ov21_021E8570 *param0) -{ - GF_ASSERT(param0); - Heap_Free(param0); -} - -static void ov21_021E8584(PokedexGraphicData **param0) -{ - GF_ASSERT(param0); - Heap_Free(param0); -} - -static void ov21_021E8598(UnkStruct_ov21_021D4660 *param0) -{ - return; -} - -static int ov21_021E859C(void) -{ - return 0; -} - -static int ov21_021E85A0(PokedexDataManager *dataMan, void *data) -{ - UnkStruct_ov21_021E8570 *v0 = data; - UnkStruct_ov21_021E88B0 *v1 = dataMan->pageData; - int v2; - - v1 = Heap_Alloc(dataMan->heapID, sizeof(UnkStruct_ov21_021E88B0)); - memset(v1, 0, sizeof(UnkStruct_ov21_021E88B0)); - - for (v2 = 0; v2 < 1; v2++) { - v1->unk_10[v2] = (3 + 1); - } - - ov21_021E886C(v1, v0, dataMan->heapID); - ov21_021E88B8(v1, v0); - - dataMan->pageData = v1; - - return 1; -} - -static int ov21_021E85DC(PokedexDataManager *dataMan, void *data) -{ - UnkStruct_ov21_021E8570 *v0 = data; - UnkStruct_ov21_021E88B0 *v1 = dataMan->pageData; - - if (dataMan->exit == 1) { - return 1; - } - - if (dataMan->unchanged == 1) { - return 0; - } - - if (ov21_021E33AC(v0->unk_08)) { - ov21_021E88B0(v1); - - if (ov21_021E33BC(v0->unk_08) && (ov21_021D3998(v0->unk_04) == 2)) { - ov21_021E8CF0(v1, v0); - } - - ov21_021E88B8(v1, v0); - - if (v1->unk_14) { - ov21_021E8D3C(v0); - v1->unk_14 = 0; - } - } - - return 0; -} - -static int ov21_021E8640(PokedexDataManager *dataMan, void *data) -{ - UnkStruct_ov21_021E8570 *v0 = data; - UnkStruct_ov21_021E88B0 *v1 = dataMan->pageData; - - ov21_021E88D0(v1); - Heap_Free(v1); - - return 1; -} - -static int ov21_021E8654(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan) -{ - const UnkStruct_ov21_021E8570 *v0 = data; - const UnkStruct_ov21_021E88B0 *v1 = dataMan->pageData; - PokedexGraphicData **v2 = graphics; - UnkStruct_ov21_021E8794 *v3 = graphicsMan->pageGraphics; - - switch (graphicsMan->state) { - case 0: - graphicsMan->pageGraphics = Heap_Alloc(graphicsMan->heapID, sizeof(UnkStruct_ov21_021E8794)); - memset(graphicsMan->pageGraphics, 0, sizeof(UnkStruct_ov21_021E8794)); - graphicsMan->state++; - break; - case 1: - ov21_021E891C(v3, v2, graphicsMan->heapID); - ov21_021E87C4(v3, v2, v0, 1); - graphicsMan->state++; - break; - case 2: - if (ov21_021E8830(v3, v2, v0, 1)) { - graphicsMan->state++; - } - break; - case 3: - PokedexGraphics_SetStaticCursorSize(&(*v2)->cursorGraphics, 0); - return 1; - default: - break; - } - - return 0; -} - -static int ov21_021E86DC(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan) -{ - const UnkStruct_ov21_021E8570 *v0 = data; - const UnkStruct_ov21_021E88B0 *v1 = dataMan->pageData; - PokedexGraphicData **v2 = graphics; - UnkStruct_ov21_021E8794 *v3 = graphicsMan->pageGraphics; - - if (ov21_021E33AC(v0->unk_08)) { - ov21_021E8CBC(v2, v3, v1, graphicsMan->heapID); - ov21_021E8D04(v2, v0); - } - - return 0; -} - -static int ov21_021E870C(void *graphics, PokedexGraphicsManager *graphicsMan, const void *data, const PokedexDataManager *dataMan) -{ - const UnkStruct_ov21_021E8570 *v0 = data; - const UnkStruct_ov21_021E88B0 *v1 = dataMan->pageData; - PokedexGraphicData **v2 = graphics; - UnkStruct_ov21_021E8794 *v3 = graphicsMan->pageGraphics; - - switch (graphicsMan->state) { - case 0: - PokedexGraphics_SetStaticCursorSize(&(*v2)->cursorGraphics, 1); - ov21_021E87C4(v3, v2, v0, 0); - graphicsMan->state++; - break; - case 1: - if (ov21_021E8830(v3, v2, v0, 0)) { - graphicsMan->state++; - } - break; - case 2: - ov21_021E894C(v3, v2, graphicsMan->heapID); - graphicsMan->state++; - break; - case 3: - Heap_Free(graphicsMan->pageGraphics); - graphicsMan->state++; - break; - case 4: - return 1; - default: - break; - } - - return 0; -} - -static void ov21_021E8794(UnkStruct_ov21_021E8794 *param0) -{ - int v0; - - for (v0 = 0; v0 < 1; v0++) { - Sprite_SetExplicitOAMMode(param0->unk_00[v0], GX_OAM_MODE_XLU); - sub_02012AF0(param0->unk_04[v0]->fontOAM, GX_OAM_MODE_XLU); - } -} - -static void ov21_021E87AC(UnkStruct_ov21_021E8794 *param0) -{ - int v0; - - for (v0 = 0; v0 < 1; v0++) { - Sprite_SetExplicitOAMMode(param0->unk_00[v0], GX_OAM_MODE_NORMAL); - sub_02012AF0(param0->unk_04[v0]->fontOAM, GX_OAM_MODE_NORMAL); - } -} - -static void ov21_021E87C4(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, const UnkStruct_ov21_021E8570 *param2, BOOL param3) -{ - ov21_021E8794(param0); - - if (ov21_021E33A4(param2->unk_08)) { - if (param3) { - PokedexGraphics_InitBlendTransition(&(*param1)->blendSub, 1, -16, 0, 0, 16, (GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), (GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG1 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), 1); - } else { - PokedexGraphics_InitBlendTransition(&(*param1)->blendSub, 1, 0, -16, 16, 0, (GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), (GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG1 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_BD), 1); - } - } -} - -static BOOL ov21_021E8830(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, const UnkStruct_ov21_021E8570 *param2, BOOL param3) -{ - BOOL v0; - - if (ov21_021E33A4(param2->unk_08)) { - v0 = PokedexGraphics_TakeBlendTransitionStep(&(*param1)->blendSub); - } else { - v0 = BrightnessController_IsTransitionComplete(BRIGHTNESS_SUB_SCREEN); - } - - if (v0) { - if (param3) { - ov21_021E87AC(param0); - } - - return 1; - } - - return 0; -} - -static void ov21_021E886C(UnkStruct_ov21_021E88B0 *param0, UnkStruct_ov21_021E8570 *param1, enum HeapID heapID) -{ - param0->unk_04 = Heap_Alloc(heapID, sizeof(TouchScreenHitTable) * 1); - - PokedexMain_SetHitTableRect(¶m0->unk_04[0], 144 - (80 / 2), 144 + (80 / 2), 128 - (240 / 2), 128 + (240 / 2)); - - param0->unk_08.unk_00 = param1; - param0->unk_08.unk_04 = param0; - param0->unk_00 = TouchScreenActions_RegisterHandler(param0->unk_04, 1, ov21_021E88E8, ¶m0->unk_08, heapID); -} - -static void ov21_021E88B0(UnkStruct_ov21_021E88B0 *param0) -{ - int v0; - - for (v0 = 0; v0 < 1; v0++) { - param0->unk_10[v0] = 3; - } -} - -static void ov21_021E88B8(UnkStruct_ov21_021E88B0 *param0, UnkStruct_ov21_021E8570 *param1) -{ - TouchScreenActions_HandleAction(param0->unk_00); - - if (param0->unk_14) { - param0->unk_10[0] = 2; - } -} - -static void ov21_021E88D0(UnkStruct_ov21_021E88B0 *param0) -{ - TouchScreenActions_Free(param0->unk_00); - Heap_Free(param0->unk_04); - - param0->unk_04 = NULL; -} - -static void ov21_021E88E8(u32 param0, enum TouchScreenButtonState param1, void *param2) -{ - UnkStruct_ov21_021E88E8 *v0 = param2; - UnkStruct_ov21_021E8570 *v1 = v0->unk_00; - UnkStruct_ov21_021E88B0 *v2 = v0->unk_04; - - v2->unk_10[param0] = param1; - - switch (param1) { - case TOUCH_BUTTON_PRESSED: - switch (param0) { - case 0: - ov21_021E33B4(v1->unk_08, 1); - v2->unk_14 = 1; - break; - default: - break; - } - break; - case TOUCH_BUTTON_HELD: - switch (param0) { - case 0: - v2->unk_14 = 1; - break; - default: - break; - } - break; - default: - break; - } -} - -static void ov21_021E891C(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int heapID) -{ - ov21_021E898C(param1, heapID); - ov21_021E89F4(param0, param1, heapID); - ov21_021E8AA8(param0, param1, heapID); - ov21_021E8B40(param0, param1, heapID); -} - -static void ov21_021E894C(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int heapID) -{ - int v0; - - PokedexGraphics_LoadGraphicNarcPaletteData(*param1, background_sub_2_NCLR, 4, 4 * 32, 32, heapID); - ov21_021E8B34(param0); - ov21_021E8BDC(param0, param1); - ov21_021E8A74(param0, param1); - - for (v0 = 0; v0 < 1; v0++) { - if (param0->unk_2C[v0]) { - Heap_Free(param0->unk_2C[v0]); - } - } -} - -static void ov21_021E898C(PokedexGraphicData **param0, int heapID) -{ - void *v0; - NNSG2dScreenData *v1; - - PokedexGraphics_LoadGraphicNarcCharacterData(*param0, entry_sub_NCGR_lz, (*param0)->bgConfig, 6, 0, 0, TRUE, heapID); - - v0 = PokedexGraphics_GetGraphicNarcTilemapData(*param0, forms_sub_NSCR_lz, TRUE, &v1, heapID); - - Bg_LoadToTilemapRect((*param0)->bgConfig, 6, v1->rawData, 0, 0, v1->screenWidth / 8, v1->screenHeight / 8); - Heap_Free(v0); - Bg_ScheduleTilemapTransfer((*param0)->bgConfig, 6); -} - -static void ov21_021E89F4(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int param2) -{ - PokedexGraphicData *v0 = *param1; - NARC *v1 = PokedexGraphics_GetNARC(v0); - - param0->unk_08[0] = SpriteResourceCollection_AddTilesFrom(v0->spriteResourceCollection[0], v1, size_buttons_pressed_NCGR_lz, TRUE, size_buttons_pressed_NCGR_lz + 13000, NNS_G2D_VRAM_TYPE_2DSUB, param2); - - SpriteTransfer_RequestCharAtEnd(param0->unk_08[0]); - SpriteResource_ReleaseData(param0->unk_08[0]); - - param0->unk_08[2] = SpriteResourceCollection_AddFrom(v0->spriteResourceCollection[2], v1, size_buttons_pressed_cell_NCER_lz, TRUE, size_buttons_pressed_cell_NCER_lz + 13000, 2, param2); - param0->unk_08[3] = SpriteResourceCollection_AddFrom(v0->spriteResourceCollection[3], v1, size_buttons_pressed_anim_NANR_lz, TRUE, size_buttons_pressed_anim_NANR_lz + 13000, 3, param2); -} - -static void ov21_021E8A74(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1) -{ - PokedexGraphicData *v0 = *param1; - - SpriteTransfer_ResetCharTransfer(param0->unk_08[0]); - SpriteResourceCollection_Remove(v0->spriteResourceCollection[0], param0->unk_08[0]); - SpriteResourceCollection_Remove(v0->spriteResourceCollection[2], param0->unk_08[2]); - SpriteResourceCollection_Remove(v0->spriteResourceCollection[3], param0->unk_08[3]); -} - -static void ov21_021E8AA8(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int param2) -{ - SpriteResourcesHeader v0; - SpriteListTemplate v1; - PokedexGraphicData *v2 = *param1; - int v3; - - SpriteResourcesHeader_Init(&v0, size_buttons_pressed_NCGR_lz + 13000, info_NCLR + 2100, size_buttons_pressed_cell_NCER_lz + 13000, size_buttons_pressed_anim_NANR_lz + 13000, 0xffffffff, 0xffffffff, FALSE, 2, v2->spriteResourceCollection[0], v2->spriteResourceCollection[1], v2->spriteResourceCollection[2], v2->spriteResourceCollection[3], NULL, NULL); - - v1.list = v2->spriteList; - v1.resourceData = &v0; - v1.priority = 31; - v1.vramType = NNS_G2D_VRAM_TYPE_2DSUB; - v1.heapID = param2; - - v1.position.x = 128 << FX32_SHIFT; - v1.position.y = 144 << FX32_SHIFT; - v1.position.y += (192 << FX32_SHIFT); - - param0->unk_00[0] = SpriteList_Add(&v1); - - Sprite_SetAnim(param0->unk_00[0], 2); -} - -static void ov21_021E8B34(UnkStruct_ov21_021E8794 *param0) -{ - int v0; - - for (v0 = 0; v0 < 1; v0++) { - Sprite_Delete(param0->unk_00[v0]); - } -} - -static void ov21_021E8B40(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1, int param2) -{ - Window *v0; - PokedexDisplayBox displayBox; - SpriteResource *v2; - PokedexGraphicData *v3 = *param1; - int v4; - u32 v5; - - GF_ASSERT(param0->unk_00[0]); - - v2 = SpriteResourceCollection_Find(v3->spriteResourceCollection[1], info_NCLR + 2100); - - displayBox.textMan = v3->textMan; - displayBox.paletteProxy = SpriteTransfer_GetPaletteProxy(v2, NULL); - displayBox.y = -8; - displayBox.spriteResourcePriority = 2; - displayBox.spriteListPriority = 0; - displayBox.vramType = NNS_G2D_VRAM_TYPE_2DSUB; - displayBox.heapID = param2; - - v4 = PlttTransfer_GetPlttOffset(displayBox.paletteProxy, NNS_G2D_VRAM_TYPE_2DSUB); - v0 = PokedexTextManager_NewWindow(v3->textMan, 16, 2); - v5 = PokedexTextManager_DisplayMessage(v3->textMan, v0, TEXT_BANK_POKEDEX, pl_msg_pokedex_anotherform, 0, 0); - - displayBox.x = -(v5 / 2); - displayBox.window = v0; - displayBox.sprite = param0->unk_00[0]; - - param0->unk_04[0] = PokedexTextManager_NextTextData(&displayBox); - - sub_02012A60(param0->unk_04[0]->fontOAM, v4 + 4); - PokedexTextManager_FreeWindow(v0); -} - -static void ov21_021E8BDC(UnkStruct_ov21_021E8794 *param0, PokedexGraphicData **param1) -{ - int v0; - - for (v0 = 0; v0 < 1; v0++) { - PokedexTextManager_FreeTextData(param0->unk_04[v0]); - } -} - -static void ov21_021E8BE8(PokedexGraphicData **param0, Sprite *param1, PokedexTextData *textData, int param3, int param4, int param5, int *param6, int heapID, int param8, int param9, void **param10) -{ - int v0; - NNSG2dPaletteData *v1; - BOOL v2; - BOOL v3 = 0; - int v4; - - ov21_021D144C(param1, param3); - ov21_021E8C94(param1, textData, param4, param8, param9); - - v0 = Sprite_GetAnimFrame(param1); - - switch (v0) { - case 0: - case 1: - if (*param6 != 0) { - v3 = 1; - v4 = background_sub_2_NCLR; - *param6 = 0; - } - break; - case 2: - if (*param6 != 1) { - v3 = 1; - v4 = background_sub_3_NCLR; - *param6 = 1; - } - break; - case 3: - if (*param6 != 2) { - v3 = 1; - v4 = background_sub_1_NCLR; - *param6 = 2; - } - break; - } - - if (v3) { - if (*param10) { - Heap_Free(*param10); - } - - *param10 = PokedexGraphics_GetGraphicNarcPaletteData(*param0, v4, &v1, heapID); - - v2 = VramTransfer_Request(NNS_GFD_DST_2D_BG_PLTT_SUB, param5 * 32, v1->pRawData, 32); - GF_ASSERT(v2); - } -} - -static void ov21_021E8C94(Sprite *param0, PokedexTextData *textData, int param2, int param3, int param4) -{ - int v0; - - ov21_021D1498(param0, textData, param2); - v0 = Sprite_GetAnimFrame(param0); - - if (v0 < 2) { - sub_02012AC0(textData->fontOAM, param3); - } else { - sub_02012AC0(textData->fontOAM, param4); - } -} - -static void ov21_021E8CBC(PokedexGraphicData **param0, UnkStruct_ov21_021E8794 *param1, const UnkStruct_ov21_021E88B0 *param2, int param3) -{ - int v0; - int v1; - - for (v0 = 0; v0 < 1; v0++) { - v1 = 4; - - ov21_021E8BE8(param0, param1->unk_00[v0], param1->unk_04[v0], param2->unk_10[v0], -8, v1, ¶m1->unk_28[v0], param3, 4, 1, ¶m1->unk_2C[v0]); - } -} - -static void ov21_021E8CF0(UnkStruct_ov21_021E88B0 *param0, UnkStruct_ov21_021E8570 *param1) -{ - if (gSystem.heldKeys & PAD_BUTTON_A) { - param0->unk_14 = 1; - } -} - -static void ov21_021E8D04(PokedexGraphicData **param0, const UnkStruct_ov21_021E8570 *param1) -{ - if (ov21_021E33BC(param1->unk_08) == 1) { - ov21_021E8D28(param0, 128, 144, 228, 64); - } -} - -static void ov21_021E8D28(PokedexGraphicData **param0, int param1, int param2, int param3, int param4) -{ - PokedexGraphicData *v0 = *param0; - PokedexGraphics_TransformCursor(v0, param1, param2, param3, param4); -} - -static void ov21_021E8D3C(const UnkStruct_ov21_021E8570 *param0) -{ - ov21_021DF7A0(param0->unk_0C, 1); -} diff --git a/src/applications/pokedex/pokedex_main.c b/src/applications/pokedex/pokedex_main.c index b10bf4a321..a669238b42 100644 --- a/src/applications/pokedex/pokedex_main.c +++ b/src/applications/pokedex/pokedex_main.c @@ -7,6 +7,7 @@ #include "struct_defs/struct_02099F80.h" #include "applications/pokedex/crysub.h" +#include "applications/pokedex/formsub.h" #include "applications/pokedex/funcptr_ov21_021E9B74.h" #include "applications/pokedex/funcptr_ov21_021E9B9C.h" #include "applications/pokedex/ov21_021D423C.h" @@ -24,7 +25,6 @@ #include "applications/pokedex/ov21_021E3FFC.h" #include "applications/pokedex/ov21_021E68F4.h" #include "applications/pokedex/ov21_021E737C.h" -#include "applications/pokedex/ov21_021E8484.h" #include "applications/pokedex/pokedex_app.h" #include "applications/pokedex/pokedex_graphics.h" #include "applications/pokedex/pokedex_height_check.h" @@ -222,7 +222,7 @@ const static UnkFuncPtr_ov21_021E9B74 Unk_ov21_021E9B34[8] = { ov21_021DDD2C, CrySub_Init, ov21_021E68F4, - ov21_021E8484 + FormSub_Init }; const static UnkFuncPtr_ov21_021E9B9C Unk_ov21_021E9B9C[10] = { @@ -246,7 +246,7 @@ const static UnkFuncPtr_ov21_021E9B9C Unk_ov21_021E9B54[8] = { ov21_021DDD8C, CrySub_Free, ov21_021E6954, - ov21_021E84E4 + FormSub_Free }; PokedexApp *PokedexMain_NewPokedexApp(enum HeapID heapID, const PokedexOverlayArgs *pokedexOverlayArgs) @@ -509,31 +509,31 @@ void ov21_021D144C(Sprite *param0, int param1) } } -void ov21_021D1498(Sprite *param0, PokedexTextData *textData, int param2) +void PokedexMain_SetButtonY(Sprite *sprite, PokedexTextData *textData, int setY) { - int v0 = Sprite_GetAnimFrame(param0); - int v1, v2; + int frame = Sprite_GetAnimFrame(sprite); + int x, y; - switch (v0) { + switch (frame) { case 0: - sub_020129A4(textData->fontOAM, &v1, &v2); - v2 = param2; - sub_020128C4(textData->fontOAM, v1, v2); + FontOAM_GetXY(textData->fontOAM, &x, &y); + y = setY; + FontOAM_SetXY(textData->fontOAM, x, y); break; case 1: - sub_020129A4(textData->fontOAM, &v1, &v2); - v2 = param2 + -2; - sub_020128C4(textData->fontOAM, v1, v2); + FontOAM_GetXY(textData->fontOAM, &x, &y); + y = setY + -2; + FontOAM_SetXY(textData->fontOAM, x, y); break; case 2: - sub_020129A4(textData->fontOAM, &v1, &v2); - v2 = param2 + -4; - sub_020128C4(textData->fontOAM, v1, v2); + FontOAM_GetXY(textData->fontOAM, &x, &y); + y = setY + -4; + FontOAM_SetXY(textData->fontOAM, x, y); break; case 3: - sub_020129A4(textData->fontOAM, &v1, &v2); - v2 = param2 + -2; - sub_020128C4(textData->fontOAM, v1, v2); + FontOAM_GetXY(textData->fontOAM, &x, &y); + y = setY + -2; + FontOAM_SetXY(textData->fontOAM, x, y); break; } } @@ -542,7 +542,7 @@ void ov21_021D1524(Sprite *param0, PokedexTextData *textData, int param2, int pa { int v0; - ov21_021D1498(param0, textData, param2); + PokedexMain_SetButtonY(param0, textData, param2); v0 = Sprite_GetAnimFrame(param0); if (v0 < 2) { diff --git a/src/battle/ov16_0226871C.c b/src/battle/ov16_0226871C.c index edfadc7174..18e55fb3f0 100644 --- a/src/battle/ov16_0226871C.c +++ b/src/battle/ov16_0226871C.c @@ -1835,7 +1835,7 @@ static void ov16_02269668(UnkStruct_ov16_02268A14 *param0, int param1, int param ov16_0226A698(param0); v8 = ov16_0226A7A4(param0, v7, v5, v6->unk_04, v6->unk_06, v6->unk_03); - sub_020129A4(param0->unk_4CC[0].unk_00, &v9, &v10); + FontOAM_GetXY(param0->unk_4CC[0].unk_00, &v9, &v10); if (v5 == 4) { v9 += param0->unk_4CC[0].unk_10 + 32 / 2; @@ -2678,7 +2678,7 @@ static void ov16_0226A98C(UnkStruct_ov16_02268A14 *param0, UnkStruct_ov16_0226A9 v4 = sub_020127E8(&v0); sub_02012AC0(v4, param5); - sub_020128C4(v4, param7, param8); + FontOAM_SetXY(v4, param7, param8); if (param10 == NULL) { Window_Remove(&v1); @@ -3236,8 +3236,8 @@ static void ov16_0226B390(SysTask *param0, void *param1) switch (v0->unk_67C.unk_00) { case 0: ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 2); - sub_020129A4(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, v2, v3 + -2); if ((v0->unk_67C.unk_04_val3.unk_0E != 0xff) && (v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E] != NULL)) { ManagedSprite_OffsetPositionXY(v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E], 0, -2); @@ -3256,8 +3256,8 @@ static void ov16_0226B390(SysTask *param0, void *param1) v0->unk_67C.unk_00++; case 2: ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 1); - sub_020129A4(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, v2, v3 + 1); if ((v0->unk_67C.unk_04_val3.unk_0E != 0xff) && (v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E] != NULL)) { ManagedSprite_OffsetPositionXY(v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E], 0, 1); @@ -3338,12 +3338,12 @@ static void ov16_0226B4E0(SysTask *param0, void *param1) ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 2); if (v0->unk_67C.unk_04_val3.unk_08 != 0xff) { - sub_020129A4(v0->unk_4CC[v4].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v4].unk_00, v2, v3 + -2); - sub_020129A4(v0->unk_4CC[v5].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v5].unk_00, v2, v3 + -2); - sub_020129A4(v0->unk_4CC[v6].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v6].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_4CC[v4].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v4].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_4CC[v5].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v5].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_4CC[v6].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v6].unk_00, v2, v3 + -2); if (v9 != 0) { Sprite_OffsetPositionXY(v0->moveSelectSprites[v7]->sprite, 0, -2); @@ -3353,8 +3353,8 @@ static void ov16_0226B4E0(SysTask *param0, void *param1) } } } else { - sub_020129A4(v0->unk_4CC[4].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[4].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_4CC[4].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[4].unk_00, v2, v3 + -2); } v0->unk_67C.unk_00++; @@ -3372,12 +3372,12 @@ static void ov16_0226B4E0(SysTask *param0, void *param1) ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 1); if (v0->unk_67C.unk_04_val3.unk_08 != 0xff) { - sub_020129A4(v0->unk_4CC[v4].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v4].unk_00, v2, v3 + 1); - sub_020129A4(v0->unk_4CC[v5].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v5].unk_00, v2, v3 + 1); - sub_020129A4(v0->unk_4CC[v6].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[v6].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_4CC[v4].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v4].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_4CC[v5].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v5].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_4CC[v6].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[v6].unk_00, v2, v3 + 1); if (v9 != 0) { Sprite_OffsetPositionXY(v0->moveSelectSprites[v7]->sprite, 0, 1); @@ -3387,8 +3387,8 @@ static void ov16_0226B4E0(SysTask *param0, void *param1) } } } else { - sub_020129A4(v0->unk_4CC[4].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[4].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_4CC[4].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[4].unk_00, v2, v3 + 1); } v0->unk_67C.unk_00++; @@ -3423,8 +3423,8 @@ static void ov16_0226B780(SysTask *param0, void *param1) ov16_0226B31C(v0, Unk_ov16_022703D4[i], &Unk_ov16_0227033C[i], 4, 2); if (v0->unk_4CC[0 + i].unk_00 != NULL) { - sub_020129A4(v0->unk_4CC[0 + i].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[0 + i].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_4CC[0 + i].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[0 + i].unk_00, v2, v3 + -2); } if (v0->unk_60C[i] != NULL) { @@ -3452,8 +3452,8 @@ static void ov16_0226B780(SysTask *param0, void *param1) ov16_0226B31C(v0, Unk_ov16_022703D4[i], &Unk_ov16_0227033C[i], 4, 1); if (v0->unk_4CC[0 + i].unk_00 != NULL) { - sub_020129A4(v0->unk_4CC[0 + i].unk_00, &v2, &v3); - sub_020128C4(v0->unk_4CC[0 + i].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_4CC[0 + i].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_4CC[0 + i].unk_00, v2, v3 + 1); } if (v0->unk_60C[i] != NULL) { diff --git a/src/meson.build b/src/meson.build index c375d2fb39..52cf5bf2f1 100644 --- a/src/meson.build +++ b/src/meson.build @@ -620,7 +620,7 @@ pokeplatinum_c = files( 'applications/pokedex/pokedex_height_check.c', 'applications/pokedex/ov21_021E68F4.c', 'applications/pokedex/ov21_021E737C.c', - 'applications/pokedex/ov21_021E8484.c', + 'applications/pokedex/formsub.c', 'applications/pokedex/ov21_021E8D48.c', 'overlay022/ov22_02254DE0.c', 'overlay022/ov22_02255094.c', diff --git a/src/overlay010/ov10_0221F800.c b/src/overlay010/ov10_0221F800.c index 2a91c40066..03ced03aa4 100644 --- a/src/overlay010/ov10_0221F800.c +++ b/src/overlay010/ov10_0221F800.c @@ -1590,7 +1590,7 @@ static void ov10_022213B8(UnkStruct_ov10_0221FB28 *param0) static void ov10_02221440(UnkStruct_ov10_0221FB28 *param0, u32 param1, s16 param2, s16 param3) { - sub_020128C4(param0->unk_B3C[param1], param0->unk_B60[param1] + param2, param0->unk_B64[param1] + param3); + FontOAM_SetXY(param0->unk_B3C[param1], param0->unk_B60[param1] + param2, param0->unk_B64[param1] + param3); } static void ov10_0222146C(UnkStruct_ov10_0221FB28 *param0) diff --git a/src/overlay017/ov17_0223F118.c b/src/overlay017/ov17_0223F118.c index 14e2d91b12..d202d409d8 100644 --- a/src/overlay017/ov17_0223F118.c +++ b/src/overlay017/ov17_0223F118.c @@ -155,7 +155,7 @@ void ov17_0223F1E8(int heapID, BgConfig *param1, SpriteManager *param2, UnkStruc sub_02012A90(v4, param8); } - sub_020128C4(v4, param10, param11); + FontOAM_SetXY(v4, param10, param11); Window_Remove(&v1); param4->unk_00 = v4; @@ -176,7 +176,7 @@ void ov17_0223F2F8(UnkStruct_ov17_0223F2E4 *param0, int param1, int param2, int } param2 += 0 - 8; - sub_020128C4(param0->unk_00, param1, param2); + FontOAM_SetXY(param0->unk_00, param1, param2); } Strbuf *ov17_0223F310(u32 param0, u32 heapID) diff --git a/src/overlay017/ov17_0223F7E4.c b/src/overlay017/ov17_0223F7E4.c index b7d6f43b76..d5205399b6 100644 --- a/src/overlay017/ov17_0223F7E4.c +++ b/src/overlay017/ov17_0223F7E4.c @@ -1039,7 +1039,7 @@ static void ov17_02240138(UnkStruct_ov17_0223F7E4 *param0, UnkStruct_ov17_022401 v4 = sub_020127E8(&v0); sub_02012AC0(v4, param5); - sub_020128C4(v4, param7, param8); + FontOAM_SetXY(v4, param7, param8); if (param10 == NULL) { Window_Remove(&v1); @@ -1212,8 +1212,8 @@ static void ov17_0224051C(SysTask *param0, void *param1) switch (v0->unk_2CC.unk_00) { case 0: ov17_022403B0(v0, v0->unk_2CC.unk_04_val1.unk_0C, v0->unk_2CC.unk_04_val1.unk_10, v0->unk_2CC.unk_04_val1.unk_18, 2); - sub_020129A4(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, v2, v3 + -2); for (v4 = 0; v4 < 3; v4++) { if (v0->unk_2CC.unk_04_val1.unk_00[v4] != NULL) { @@ -1235,8 +1235,8 @@ static void ov17_0224051C(SysTask *param0, void *param1) case 2: ov17_022403B0(v0, v0->unk_2CC.unk_04_val1.unk_0C, v0->unk_2CC.unk_04_val1.unk_10, v0->unk_2CC.unk_04_val1.unk_18, 1); - sub_020129A4(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v0->unk_2CC.unk_04_val1.unk_19].unk_00, v2, v3 + 1); for (v4 = 0; v4 < 3; v4++) { if (v0->unk_2CC.unk_04_val1.unk_00[v4] != NULL) { @@ -1321,12 +1321,12 @@ static void ov17_02240658(SysTask *param0, void *param1) ov17_022403B0(v0, v0->unk_2CC.unk_04_val1.unk_0C, v0->unk_2CC.unk_04_val1.unk_10, v0->unk_2CC.unk_04_val1.unk_18, 2); if (1) { - sub_020129A4(v0->unk_40[v4].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v4].unk_00, v2, v3 + -2); - sub_020129A4(v0->unk_40[v5].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v5].unk_00, v2, v3 + -2); - sub_020129A4(v0->unk_40[v6].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v6].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_40[v4].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v4].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_40[v5].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v5].unk_00, v2, v3 + -2); + FontOAM_GetXY(v0->unk_40[v6].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v6].unk_00, v2, v3 + -2); if (v8 != 0) { Sprite_OffsetPositionXY(v0->unk_118[v7]->sprite, 0, -2); @@ -1356,12 +1356,12 @@ static void ov17_02240658(SysTask *param0, void *param1) ov17_022403B0(v0, v0->unk_2CC.unk_04_val1.unk_0C, v0->unk_2CC.unk_04_val1.unk_10, v0->unk_2CC.unk_04_val1.unk_18, 1); if (1) { - sub_020129A4(v0->unk_40[v4].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v4].unk_00, v2, v3 + 1); - sub_020129A4(v0->unk_40[v5].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v5].unk_00, v2, v3 + 1); - sub_020129A4(v0->unk_40[v6].unk_00, &v2, &v3); - sub_020128C4(v0->unk_40[v6].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_40[v4].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v4].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_40[v5].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v5].unk_00, v2, v3 + 1); + FontOAM_GetXY(v0->unk_40[v6].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_40[v6].unk_00, v2, v3 + 1); if (v8 != 0) { Sprite_OffsetPositionXY(v0->unk_118[v7]->sprite, 0, 1); diff --git a/src/overlay017/ov17_022492DC.c b/src/overlay017/ov17_022492DC.c index 0dc4af4732..b95f9a6ed1 100644 --- a/src/overlay017/ov17_022492DC.c +++ b/src/overlay017/ov17_022492DC.c @@ -709,7 +709,7 @@ static void ov17_02249BC4(UnkStruct_ov17_022492DC *param0, UnkStruct_ov17_02249B v4 = sub_020127E8(&v0); sub_02012AC0(v4, param5); - sub_020128C4(v4, param7, param8); + FontOAM_SetXY(v4, param7, param8); Window_Remove(&v1); param1->unk_00 = v4; @@ -797,8 +797,8 @@ static void ov17_02249DA0(SysTask *param0, void *param1) case 0: v0->unk_8C.unk_04_val1.unk_00 = ov17_02249B08(v0, 4, v0->unk_8C.unk_04_val1.unk_2C, v0->unk_8C.unk_04_val1.unk_1C[0], v0->unk_8C.unk_04_val1.unk_04[0], v0->unk_8C.unk_04_val1.unk_2E); - sub_020129A4(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, &v2, &v3); - sub_020128C4(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, v2, v3 + 16); + FontOAM_GetXY(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, v2, v3 + 16); for (v4 = 0; v4 < 3; v4++) { if (v0->unk_8C.unk_04_val1.unk_10[v4] != NULL) { @@ -826,8 +826,8 @@ static void ov17_02249DA0(SysTask *param0, void *param1) case 3: v0->unk_8C.unk_04_val1.unk_00 = ov17_02249B08(v0, 4, v0->unk_8C.unk_04_val1.unk_2C, v0->unk_8C.unk_04_val1.unk_1C[1], v0->unk_8C.unk_04_val1.unk_04[1], v0->unk_8C.unk_04_val1.unk_2E); - sub_020129A4(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, &v2, &v3); - sub_020128C4(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, v2, v3 + -4); + FontOAM_GetXY(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, v2, v3 + -4); for (v4 = 0; v4 < 3; v4++) { if (v0->unk_8C.unk_04_val1.unk_10[v4] != NULL) { @@ -855,8 +855,8 @@ static void ov17_02249DA0(SysTask *param0, void *param1) case 6: v0->unk_8C.unk_04_val1.unk_00 = ov17_02249B08(v0, 4, v0->unk_8C.unk_04_val1.unk_2C, v0->unk_8C.unk_04_val1.unk_1C[2], v0->unk_8C.unk_04_val1.unk_04[2], v0->unk_8C.unk_04_val1.unk_2E); - sub_020129A4(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, &v2, &v3); - sub_020128C4(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, v2, v3 + (-(16 + -4))); + FontOAM_GetXY(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, &v2, &v3); + FontOAM_SetXY(v0->unk_1C[v0->unk_8C.unk_04_val1.unk_30].unk_00, v2, v3 + (-(16 + -4))); for (v4 = 0; v4 < 3; v4++) { if (v0->unk_8C.unk_04_val1.unk_10[v4] != NULL) { diff --git a/src/overlay017/ov17_0224A0FC.c b/src/overlay017/ov17_0224A0FC.c index b09662a5b2..e9ee04d913 100644 --- a/src/overlay017/ov17_0224A0FC.c +++ b/src/overlay017/ov17_0224A0FC.c @@ -708,9 +708,9 @@ static void ov17_0224A8D4(SysTask *param0, void *param1) switch (v0->unk_10) { case 0: - sub_020129A4(v0->unk_04->unk_00, &v1, &v2); + FontOAM_GetXY(v0->unk_04->unk_00, &v1, &v2); v2 += -4; - sub_020128C4(v0->unk_04->unk_00, v1, v2); + FontOAM_SetXY(v0->unk_04->unk_00, v1, v2); ManagedSprite_OffsetPositionXY(v0->unk_00, 0, -4); v0->unk_0C++; diff --git a/src/overlay022/ov22_02259C58.c b/src/overlay022/ov22_02259C58.c index f77b3727f9..88d7efeeb4 100644 --- a/src/overlay022/ov22_02259C58.c +++ b/src/overlay022/ov22_02259C58.c @@ -406,15 +406,15 @@ static void ov22_0225A2D0(UnkStruct_ov22_02259C58 *param0, int param1) static void ov22_0225A2F4(UnkStruct_ov22_0225A154 *param0, int param1) { if (param1 == 0) { - sub_020128C4(param0->unk_10, 0, 15); + FontOAM_SetXY(param0->unk_10, 0, 15); sub_02012A60(param0->unk_10, 4); } else { if (param1 == 1) { - sub_020128C4(param0->unk_10, 0, 19); + FontOAM_SetXY(param0->unk_10, 0, 19); } if (param1 == 3) { - sub_020128C4(param0->unk_10, 0, 19); + FontOAM_SetXY(param0->unk_10, 0, 19); sub_02012A60(param0->unk_10, 3); } } diff --git a/src/overlay062/ov62_022300D8.c b/src/overlay062/ov62_022300D8.c index f161c54432..5568ad48c4 100644 --- a/src/overlay062/ov62_022300D8.c +++ b/src/overlay062/ov62_022300D8.c @@ -325,7 +325,7 @@ void ov62_022307C0(UnkStruct_0208C06C *param0) for (v0 = 0; v0 < 5; v0++) { ov62_02230E68(v1->unk_00[v0].unk_00, 42 + 8, (25 + (36 * 4) + (16 * (5 - (param0->unk_534.unk_1AC)))) + 48); - sub_020128C4(param0->unk_534.unk_00[v0].unk_14, 36, -8); + FontOAM_SetXY(param0->unk_534.unk_00[v0].unk_14, 36, -8); } v0 = 0; @@ -477,7 +477,7 @@ void ov62_02230AF0(UnkStruct_0208C06C *param0) for (v0 = 0; v0 < param0->unk_534.unk_1A4; v0++) { ManagedSprite_SetAnim(param0->unk_534.unk_00[v0].unk_00, param0->unk_534.unk_190[v0]->unk_0C); ov62_02230FC8(param0, ¶m0->unk_534.unk_00[v0], param0->unk_534.unk_190[v0]->unk_08, param0->unk_534.unk_190[v0]); - sub_020128C4(param0->unk_534.unk_00[v0].unk_14, 36, -8); + FontOAM_SetXY(param0->unk_534.unk_00[v0].unk_14, 36, -8); sub_020129D0(param0->unk_534.unk_00[v0].unk_14, 1); ManagedSprite_SetDrawFlag(param0->unk_534.unk_00[v0].unk_00, 1); } diff --git a/src/overlay062/ov62_02231690.c b/src/overlay062/ov62_02231690.c index 2d974b53bd..e1047d4223 100644 --- a/src/overlay062/ov62_02231690.c +++ b/src/overlay062/ov62_02231690.c @@ -2512,7 +2512,7 @@ void ov62_0223454C(UnkStruct_0208C06C *param0, UnkStruct_ov62_022312B0 *param1, ov62_0223118C(param1, ¶m0->unk_14, param2); ov62_0223124C(param1, ¶m0->unk_14, param3); ManagedSprite_SetPositionXY(param1->unk_08, param4, param5); - sub_020128C4(param1->unk_0C, param6, param7); + FontOAM_SetXY(param1->unk_0C, param6, param7); sub_020129D0(param1->unk_0C, param9); ManagedSprite_SetAnim(param1->unk_08, param8); } diff --git a/src/overlay062/ov62_02234A10.c b/src/overlay062/ov62_02234A10.c index 42155f1369..56bf17c6fb 100644 --- a/src/overlay062/ov62_02234A10.c +++ b/src/overlay062/ov62_02234A10.c @@ -297,7 +297,7 @@ BOOL ov62_02235008(UnkStruct_0208C06C *param0) ov62_02230E68(param0->unk_534.unk_C8[v1].unk_00, 42, (25 + (36 * (5 - 1)) + (16 * (5 - (param0->unk_534.unk_1AC))))); ManagedSprite_GetPositionFxXY(param0->unk_534.unk_C8[v1].unk_00, &v0->unk_00[v1].unk_0C, &v2); ManagedSprite_SetPositionFxXY(param0->unk_534.unk_C8[v1].unk_00, v0->unk_00[v1].unk_0C, (25 + (36 * (5 - 1)) + (16 * (5 - (param0->unk_534.unk_1AC)))) * FX32_ONE); - sub_020128C4(param0->unk_534.unk_C8[v1].unk_14, 36, -8); + FontOAM_SetXY(param0->unk_534.unk_C8[v1].unk_14, 36, -8); sub_020129D0(param0->unk_534.unk_C8[v1].unk_14, 1); } @@ -340,7 +340,7 @@ BOOL ov62_02235008(UnkStruct_0208C06C *param0) v0->unk_00[v3].unk_04 += (-4 * 1); ManagedSprite_SetPositionFxXY(param0->unk_534.unk_C8[v3].unk_00, v7, v8); - sub_020128C4(param0->unk_534.unk_C8[v3].unk_14, 36, -8); + FontOAM_SetXY(param0->unk_534.unk_C8[v3].unk_14, 36, -8); } if (v4 == param0->unk_534.unk_1AC) { param0->unk_08++; diff --git a/src/overlay062/ov62_02235278.c b/src/overlay062/ov62_02235278.c index 26162bbdc0..a060907689 100644 --- a/src/overlay062/ov62_02235278.c +++ b/src/overlay062/ov62_02235278.c @@ -209,7 +209,7 @@ void ov62_022354A4(SysTask *param0, void *param1) } ov62_02230E68(v0->unk_20, v1, v2); - sub_020128C4(v0->unk_24, 36, -8); + FontOAM_SetXY(v0->unk_24, 36, -8); *(v0->unk_2C) = 1; } break; diff --git a/src/overlay062/ov62_02235E64.c b/src/overlay062/ov62_02235E64.c index 5470157e87..4f462abf55 100644 --- a/src/overlay062/ov62_02235E64.c +++ b/src/overlay062/ov62_02235E64.c @@ -739,7 +739,7 @@ static void ov62_02236C20(UnkStruct_0208C06C *param0) ManagedSprite_SetAnim(v0->unk_158[0].unk_08, 0); ManagedSprite_SetPositionXY(v0->unk_158[0].unk_08, 80, 232); - sub_020128C4(v0->unk_158[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_158[0].unk_0C, 36, -8); sub_020129D0(v0->unk_158[0].unk_0C, 1); } diff --git a/src/overlay062/ov62_02236CBC.c b/src/overlay062/ov62_02236CBC.c index 5a96d2984c..002e64779f 100644 --- a/src/overlay062/ov62_02236CBC.c +++ b/src/overlay062/ov62_02236CBC.c @@ -79,7 +79,7 @@ static void ov62_02236CBC(UnkStruct_0208C06C *param0, int param1) ManagedSprite_SetPositionXY(v0->unk_9C[1].unk_08, 80, 232); } - sub_020128C4(v0->unk_9C[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_9C[1].unk_0C, 36, -8); } static void ov62_02236CF8(UnkStruct_0208C06C *param0, int param1) @@ -107,7 +107,7 @@ static void ov62_02236D48(UnkStruct_0208C06C *param0) ov62_0223124C(&v0->unk_9C[1], ¶m0->unk_14, 3); ManagedSprite_SetPositionXY(v0->unk_9C[1].unk_08, 128, 232); - sub_020128C4(v0->unk_9C[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_9C[1].unk_0C, 36, -8); sub_020129D0(v0->unk_9C[1].unk_0C, 1); v0->unk_94[1] = ov62_022313E0(param0, NNS_G2D_VRAM_TYPE_2DSUB); diff --git a/src/overlay062/ov62_02237D24.c b/src/overlay062/ov62_02237D24.c index 8ffa6b5a84..945abe217d 100644 --- a/src/overlay062/ov62_02237D24.c +++ b/src/overlay062/ov62_02237D24.c @@ -1311,8 +1311,8 @@ static void ov62_0223958C(UnkStruct_0208C06C *param0, int param1) ManagedSprite_SetPositionXY(v0->unk_198[0].unk_08, 80, 232); } - sub_020128C4(v0->unk_198[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_198[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_198[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_198[1].unk_0C, 36, -8); } static void ov62_02239608(UnkStruct_0208C06C *param0) @@ -1333,8 +1333,8 @@ static void ov62_02239608(UnkStruct_0208C06C *param0) ManagedSprite_SetAnim(v0->unk_198[1].unk_08, 4); ManagedSprite_SetPositionXY(v0->unk_198[0].unk_08, 32, 232); ManagedSprite_SetPositionXY(v0->unk_198[1].unk_08, 128, 232); - sub_020128C4(v0->unk_198[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_198[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_198[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_198[1].unk_0C, 36, -8); sub_020129D0(v0->unk_198[0].unk_0C, 1); sub_020129D0(v0->unk_198[1].unk_0C, 1); diff --git a/src/overlay062/ov62_02239D60.c b/src/overlay062/ov62_02239D60.c index ec760b043c..d2cf806ec9 100644 --- a/src/overlay062/ov62_02239D60.c +++ b/src/overlay062/ov62_02239D60.c @@ -580,8 +580,8 @@ static void ov62_0223A4C8(UnkStruct_0208C06C *param0, int param1) ManagedSprite_SetPositionXY(v0->unk_348[0].unk_08, 80, 232); } - sub_020128C4(v0->unk_348[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_348[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_348[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_348[1].unk_0C, 36, -8); } static BOOL ov62_0223A544(UnkStruct_0208C06C *param0) diff --git a/src/overlay062/ov62_0223CAEC.c b/src/overlay062/ov62_0223CAEC.c index 9d7c788b54..f41e3d96fa 100644 --- a/src/overlay062/ov62_0223CAEC.c +++ b/src/overlay062/ov62_0223CAEC.c @@ -521,8 +521,8 @@ static void ov62_0223D3A8(UnkStruct_0208C06C *param0, int param1) ManagedSprite_SetPositionXY(v0->unk_A4[1].unk_08, 80, 232); } - sub_020128C4(v0->unk_A4[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_A4[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_A4[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_A4[1].unk_0C, 36, -8); } static void ov62_0223D424(UnkStruct_0208C06C *param0) @@ -541,8 +541,8 @@ static void ov62_0223D424(UnkStruct_0208C06C *param0) ManagedSprite_SetPositionXY(v0->unk_A4[0].unk_08, 32, 232); ManagedSprite_SetPositionXY(v0->unk_A4[1].unk_08, 128, 232); - sub_020128C4(v0->unk_A4[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_A4[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_A4[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_A4[1].unk_0C, 36, -8); sub_020129D0(v0->unk_A4[0].unk_0C, 0); sub_020129D0(v0->unk_A4[1].unk_0C, 1); diff --git a/src/overlay062/ov62_0223DFA8.c b/src/overlay062/ov62_0223DFA8.c index 149a4b3bf2..f860e1eb53 100644 --- a/src/overlay062/ov62_0223DFA8.c +++ b/src/overlay062/ov62_0223DFA8.c @@ -224,8 +224,8 @@ static void ov62_0223E01C(UnkStruct_0208C06C *param0) ManagedSprite_SetAnim(v0->unk_114[1].unk_08, 3); ManagedSprite_SetPositionXY(v0->unk_114[0].unk_08, 32, 232); ManagedSprite_SetPositionXY(v0->unk_114[1].unk_08, 128, 232); - sub_020128C4(v0->unk_114[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_114[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_114[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_114[1].unk_0C, 36, -8); sub_020129D0(v0->unk_114[0].unk_0C, 1); sub_020129D0(v0->unk_114[1].unk_0C, 1); @@ -870,7 +870,7 @@ static void ov62_0223EF60(UnkStruct_0208C06C *param0) ManagedSprite_SetPositionXY(v0->unk_114[v1].unk_08, 42 + 8, (25 + (36 * (v1)) + (16 * (5 - 4))) + 64); ManagedSprite_SetAnim(v0->unk_114[v1].unk_08, v3[v1]); - sub_020128C4(v0->unk_114[v1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_114[v1].unk_0C, 36, -8); sub_020129D0(v0->unk_114[v1].unk_0C, 1); } } @@ -913,8 +913,8 @@ static void ov62_0223F0A8(UnkStruct_0208C06C *param0, int param1) ManagedSprite_SetPositionXY(v0->unk_114[0].unk_08, 80, 232); } - sub_020128C4(v0->unk_114[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_114[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_114[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_114[1].unk_0C, 36, -8); } static void ov62_0223F124(UnkStruct_0208C06C *param0) diff --git a/src/overlay062/ov62_02241204.c b/src/overlay062/ov62_02241204.c index 4a710bbfcb..9d6ccf1528 100644 --- a/src/overlay062/ov62_02241204.c +++ b/src/overlay062/ov62_02241204.c @@ -3148,7 +3148,7 @@ static void ov62_02244BE4(UnkStruct_0208C06C *param0) ManagedSprite_SetPositionXY(v0->unk_10[v1].unk_08, 42 + 8, (25 + (36 * (v1)) + (16 * (5 - 4))) + 64); ManagedSprite_SetAnim(v0->unk_10[v1].unk_08, v3[v1]); - sub_020128C4(v0->unk_10[v1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[v1].unk_0C, 36, -8); sub_020129D0(v0->unk_10[v1].unk_0C, 1); } } @@ -3925,8 +3925,8 @@ static void ov62_02245AC8(UnkStruct_0208C06C *param0, int param1) ManagedSprite_SetPositionXY(v0->unk_10[1].unk_08, 80, 232 - 64); } - sub_020128C4(v0->unk_10[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_10[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[1].unk_0C, 36, -8); } static void ov62_02245B24(UnkStruct_0208C06C *param0) @@ -3945,8 +3945,8 @@ static void ov62_02245B24(UnkStruct_0208C06C *param0) ManagedSprite_SetPositionXY(v0->unk_10[0].unk_08, 32, 232 - 64); ManagedSprite_SetPositionXY(v0->unk_10[1].unk_08, 128, 232 - 64); - sub_020128C4(v0->unk_10[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_10[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[1].unk_0C, 36, -8); sub_020129D0(v0->unk_10[0].unk_0C, 1); sub_020129D0(v0->unk_10[1].unk_0C, 1); ManagedSprite_SetAnim(v0->unk_10[0].unk_08, 0); @@ -3982,8 +3982,8 @@ static void ov62_02245C08(UnkStruct_0208C06C *param0, int param1) ManagedSprite_SetPositionXY(v0->unk_10[0].unk_08, 80, 232); } - sub_020128C4(v0->unk_10[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_10[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[1].unk_0C, 36, -8); } static void ov62_02245C64(UnkStruct_0208C06C *param0) @@ -4012,8 +4012,8 @@ static void ov62_02245C64(UnkStruct_0208C06C *param0) ManagedSprite_SetPositionXY(v0->unk_10[0].unk_08, 32, 232); ManagedSprite_SetPositionXY(v0->unk_10[1].unk_08, 128, 232); - sub_020128C4(v0->unk_10[0].unk_0C, 36, -8); - sub_020128C4(v0->unk_10[1].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[0].unk_0C, 36, -8); + FontOAM_SetXY(v0->unk_10[1].unk_0C, 36, -8); sub_020129D0(v0->unk_10[0].unk_0C, 1); sub_020129D0(v0->unk_10[1].unk_0C, 1); diff --git a/src/overlay065/ov65_0222DCE0.c b/src/overlay065/ov65_0222DCE0.c index 952985e03b..35c37bea55 100644 --- a/src/overlay065/ov65_0222DCE0.c +++ b/src/overlay065/ov65_0222DCE0.c @@ -6042,7 +6042,7 @@ static void ov65_02234E50(UnkStruct_ov65_02234E50 *param0, u32 param1) Sprite_SetAnimFrame(param0->unk_21C[param1], 5 - 1); if (param1 == 1) { - sub_020128C4(param0->unk_234, -18, Unk_ov65_0223893C[0]); + FontOAM_SetXY(param0->unk_234, -18, Unk_ov65_0223893C[0]); } } @@ -6065,7 +6065,7 @@ static BOOL ov65_02234E8C(UnkStruct_ov65_02234E50 *param0, u32 param1, u32 param v1 = Sprite_GetAnimFrame(param0->unk_21C[param1]); if (param1 == 1) { - sub_020128C4(param0->unk_234, -18, Unk_ov65_0223893C[v1]); + FontOAM_SetXY(param0->unk_234, -18, Unk_ov65_0223893C[v1]); } if (v1 >= 3) { diff --git a/src/overlay076/ov76_0223D338.c b/src/overlay076/ov76_0223D338.c index 678919b2b1..78f52aea2c 100644 --- a/src/overlay076/ov76_0223D338.c +++ b/src/overlay076/ov76_0223D338.c @@ -467,8 +467,8 @@ static void ov76_0223D984(FontOAM *param0, int param1, int param2) int v1; if (param0 != NULL) { - sub_020129A4(param0, &v0, &v1); - sub_020128C4(param0, v0 + param1, v1 + param2); + FontOAM_GetXY(param0, &v0, &v1); + FontOAM_SetXY(param0, v0 + param1, v1 + param2); } } diff --git a/src/overlay104/ov104_0223DC7C.c b/src/overlay104/ov104_0223DC7C.c index 1a7a403c9e..4d03c2f670 100644 --- a/src/overlay104/ov104_0223DC7C.c +++ b/src/overlay104/ov104_0223DC7C.c @@ -465,7 +465,7 @@ static void ov104_0223E29C(UnkStruct_ov104_0223DD30 *param0, UnkStruct_ov104_022 v4 = sub_020127E8(&v0); sub_02012AC0(v4, param5); - sub_020128C4(v4, param7, param8); + FontOAM_SetXY(v4, param7, param8); if (param10 == NULL) { Window_Remove(&v1); diff --git a/src/overlay113/ov113_0225C700.c b/src/overlay113/ov113_0225C700.c index ba6cce36bb..6e9f777f97 100644 --- a/src/overlay113/ov113_0225C700.c +++ b/src/overlay113/ov113_0225C700.c @@ -1526,7 +1526,7 @@ static void ov113_0225E15C(UnkStruct_ov113_0225DBCC *param0, UnkStruct_ov113_022 v4 = sub_020127E8(&v0); sub_02012AC0(v4, param5); - sub_020128C4(v4, param7, param8); + FontOAM_SetXY(v4, param7, param8); Window_Remove(&v1); param1->unk_00 = v4; diff --git a/src/overlay117/ov117_02263AF0.c b/src/overlay117/ov117_02263AF0.c index 602cdca6a1..0f87025f31 100644 --- a/src/overlay117/ov117_02263AF0.c +++ b/src/overlay117/ov117_02263AF0.c @@ -2051,7 +2051,7 @@ void ov117_02265DB8(BgConfig *param0, SpriteManager *param1, UnkStruct_02012744 sub_02012A90(v4, param7); } - sub_020128C4(v4, param9, param10); + FontOAM_SetXY(v4, param9, param10); Window_Remove(&v1); param3->unk_00 = v4; @@ -2086,9 +2086,9 @@ void ov117_02265EC8(UnkStruct_ov117_02265EC8 *param0) v6 = v5 - v2; } - sub_020129A4(param0->unk_04[v0][0].unk_00, &v3, &v4); - sub_020128C4(param0->unk_04[v0][0].unk_00, v3, 168 - v5); - sub_020128C4(param0->unk_04[v0][1].unk_00, v3, 168 - v6); + FontOAM_GetXY(param0->unk_04[v0][0].unk_00, &v3, &v4); + FontOAM_SetXY(param0->unk_04[v0][0].unk_00, v3, 168 - v5); + FontOAM_SetXY(param0->unk_04[v0][1].unk_00, v3, 168 - v6); } } @@ -2232,7 +2232,7 @@ void ov117_02266150(UnkStruct_ov117_02261280 *param0) GF_ASSERT(param0->unk_15A8.unk_108[v1].unk_00 == NULL); v0 = MessageLoader_GetNewStrbuf(param0->unk_80, 4 + (v4 % 10)); v4 /= 10; - sub_020129A4(param0->unk_15A8.unk_04[v1][0].unk_00, &v2, &v3); + FontOAM_GetXY(param0->unk_15A8.unk_04[v1][0].unk_00, &v2, &v3); ov117_02265DB8(param0->unk_2C, param0->unk_28, param0->unk_90, ¶m0->unk_15A8.unk_108[v1], v0, FONT_SYSTEM, TEXT_COLOR(14, 15, 0), 0, 10003, v2, 168, 0, 1, 12, 2 * 1); Strbuf_Free(v0); } diff --git a/src/unk_02012744.c b/src/unk_02012744.c index 077cc2df8c..bba14864b6 100644 --- a/src/unk_02012744.c +++ b/src/unk_02012744.c @@ -21,8 +21,8 @@ typedef struct FontOAM { UnkStruct_02012CE0_sub1 *unk_00; int unk_04; const Sprite *unk_08; - int unk_0C; - int unk_10; + int x; + int y; } FontOAM; typedef struct UnkStruct_02012744_t { @@ -140,8 +140,8 @@ FontOAM *sub_020127E8(const UnkStruct_020127E8 *param0) GF_ASSERT(v0); v0->unk_08 = param0->unk_10; - v0->unk_0C = param0->unk_18; - v0->unk_10 = param0->unk_1C; + v0->x = param0->unk_18; + v0->y = param0->unk_1C; v1.unk_0C = &v1; v1.unk_10 = &v1; @@ -185,34 +185,31 @@ int sub_02012898(const Window *param0, int param1, int heapID) return v1; } -void sub_020128C4(FontOAM *param0, int param1, int param2) +void FontOAM_SetXY(FontOAM *fontOAM, int x, int y) { - int v0; - VecFx32 v1; - const VecFx32 *v2; + GF_ASSERT(fontOAM); - GF_ASSERT(param0); + fontOAM->x = x; + fontOAM->y = y; - param0->unk_0C = param1; - param0->unk_10 = param2; + x *= FX32_ONE; + y *= FX32_ONE; - param1 *= FX32_ONE; - param2 *= FX32_ONE; + if (fontOAM->unk_08) { + const VecFx32 *fontPos = Sprite_GetPosition(fontOAM->unk_08); - if (param0->unk_08) { - v2 = Sprite_GetPosition(param0->unk_08); - - param1 += v2->x; - param2 += v2->y; + x += fontPos->x; + y += fontPos->y; } - v1.z = 0; + VecFx32 spritePos; + spritePos.z = 0; - for (v0 = 0; v0 < param0->unk_04; v0++) { - v1.x = param1 + (param0->unk_00[v0].unk_04 << FX32_SHIFT); - v1.y = param2 + (param0->unk_00[v0].unk_08 << FX32_SHIFT); + for (int v0 = 0; v0 < fontOAM->unk_04; v0++) { + spritePos.x = x + (fontOAM->unk_00[v0].unk_04 << FX32_SHIFT); + spritePos.y = y + (fontOAM->unk_00[v0].unk_08 << FX32_SHIFT); - Sprite_SetPosition(param0->unk_00[v0].unk_00, &v1); + Sprite_SetPosition(fontOAM->unk_00[v0].unk_00, &spritePos); } } @@ -226,8 +223,8 @@ void sub_02012938(FontOAM *param0) GF_ASSERT(param0); if (param0->unk_08) { - v3 = param0->unk_0C << FX32_SHIFT; - v4 = param0->unk_10 << FX32_SHIFT; + v3 = param0->x << FX32_SHIFT; + v4 = param0->y << FX32_SHIFT; v2 = Sprite_GetPosition(param0->unk_08); v3 += v2->x; @@ -244,14 +241,14 @@ void sub_02012938(FontOAM *param0) } } -void sub_020129A4(const FontOAM *param0, int *param1, int *param2) +void FontOAM_GetXY(const FontOAM *fontOAM, int *x, int *y) { - GF_ASSERT(param0); - GF_ASSERT(param1); - GF_ASSERT(param2); + GF_ASSERT(fontOAM); + GF_ASSERT(x); + GF_ASSERT(y); - *param1 = param0->unk_0C; - *param2 = param0->unk_10; + *x = fontOAM->x; + *y = fontOAM->y; } void sub_020129D0(FontOAM *param0, BOOL param1) @@ -364,8 +361,8 @@ FontOAM *sub_02012B60(const UnkStruct_020127E8 *param0, const UnkStruct_02012B20 GF_ASSERT(v0); v0->unk_08 = param0->unk_10; - v0->unk_0C = param0->unk_18; - v0->unk_10 = param0->unk_1C; + v0->x = param0->unk_18; + v0->y = param0->unk_1C; v1 = Heap_AllocAtEnd(param0->heapID, sizeof(NNSG2dImageProxy) * param1->unk_14); diff --git a/src/unk_0208A3F4.c b/src/unk_0208A3F4.c index f15488aeee..5100588aac 100644 --- a/src/unk_0208A3F4.c +++ b/src/unk_0208A3F4.c @@ -374,7 +374,7 @@ static void sub_0208AC80(FontOAM *param0, int param1, int param2) int v1; if (param0 != NULL) { - sub_020128C4(param0, param1, param2); + FontOAM_SetXY(param0, param1, param2); } }