diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-12-11 17:06:27 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-12-11 17:06:27 -0500 |
commit | 0d586d304dbae11eeb0809ef7a06e2d23db5010c (patch) | |
tree | da61101685e361f4c79ae7abb4048f3e33669bac /src | |
parent | f55abfddc54e936ccae318d0b4e6efe8f8998d42 (diff) |
sub_8103AC8
Diffstat (limited to 'src')
-rw-r--r-- | src/menu_indicators.c | 8 | ||||
-rw-r--r-- | src/pokedex_screen.c | 336 |
2 files changed, 336 insertions, 8 deletions
diff --git a/src/menu_indicators.c b/src/menu_indicators.c index 1d6589fb0..c07aaf772 100644 --- a/src/menu_indicators.c +++ b/src/menu_indicators.c @@ -50,7 +50,7 @@ static EWRAM_DATA struct ScrollArrowsTemplate sTempScrollArrowTemplate = {0}; static void SpriteCallback_ScrollIndicatorArrow(struct Sprite *sprite); static void SpriteCallback_RedArrowCursor(struct Sprite *sprite); static void Task_ScrollIndicatorArrowPair(u8 taskId); -static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor); +static u8 ListMenuAddRedArrowCursorObject(const struct CursorStruct *cursor); static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y); static void ListMenuRemoveRedArrowCursorObject(u8 taskId); @@ -422,7 +422,7 @@ void RemoveScrollIndicatorArrowPair(u8 taskId) DestroyTask(taskId); } -u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind) +u8 ListMenuAddCursorObjectInternal(const struct CursorStruct *cursor, u32 cursorKind) { switch (cursorKind) { @@ -528,7 +528,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st } } -u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) +u8 ListMenuAddRedOutlineCursorObject(const struct CursorStruct *cursor) { struct CompressedSpriteSheet spriteSheet; struct SpritePalette spritePal; @@ -601,7 +601,7 @@ static void Task_RedArrowCursor(u8 taskId) { } -static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) +static u8 ListMenuAddRedArrowCursorObject(const struct CursorStruct *cursor) { struct CompressedSpriteSheet spriteSheet; struct SpritePalette spritePal; diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 1951146fa..220d0c9ff 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -28,7 +28,9 @@ struct PokedexScreenData { u8 field_00; u8 field_01; - u8 filler_02[0x6]; + u8 field_02; + u8 field_03; + u8 filler_04[0x4]; u32 field_08; u32 field_0C; u16 field_10; @@ -37,9 +39,10 @@ struct PokedexScreenData u8 field_15; u8 field_16; u8 field_17; - u8 filler_18[0x10]; + u16 field_18[0x8]; u8 field_28; - u8 filler_29[0x2]; + u8 field_29; + u8 field_2A; u8 field_2B; u8 field_2C; u8 field_2D; @@ -61,6 +64,7 @@ struct PokedexScreenData u16 field_5A; u8 filler_5C[0x4]; u8 field_60; + u8 field_61; u16 field_62; u8 filler_64[0x2]; u16 field_66; @@ -88,15 +92,30 @@ void sub_8103924(const struct ListMenuTemplate * a0, u8 a1); u8 sub_81039F0(void); void sub_8103988(u8 a0); void sub_8103AC8(u8 taskId); +int sub_8104284(void); +u8 sub_8104234(void); +void sub_81042EC(u8 taskId); void sub_81047B0(u8 *a0); void sub_81047C8(u8 a0, u8 a1, const u8 *a2, u8 a3, u8 a4, u8 a5); void sub_810491C(u8 a0, u8 a1, u16 a2, u8 a3, u8 a4, u8 a5); void sub_8104A34(u8 windowId, u8 a1, u16 species, u8 a3, u8 y); u16 sub_8104BBC(u8 a0, u8 a1); void sub_8104C2C(const u8 *a0); -void sub_81042EC(u8 taskId); +void sub_8104E90(void); +void sub_8104F0C(u8 a0); +void sub_8105058(u8 a0); +void sub_8105178(u8 a0, u8 a1, u8 a2); +bool8 sub_81052D0(u8 a0); +void sub_8105594(u8 a0, u8 a1); +void sub_8105E1C(u8 a0); +void sub_8106014(void); +void sub_810603C(void); +bool8 sub_8106838(u8 a0, u8 a1); u8 sub_81068A0(u8 a0); +void sub_810699C(u8 a0); bool8 sub_8106A20(u16 a0); +void sub_81067C0(void); +void sub_8106B34(void); void sub_8106E78(const u8 *a0, s32 a1); extern const u32 gUnknown_8440274[]; @@ -124,6 +143,7 @@ extern const struct ScrollArrowsTemplate gUnknown_84520E4; extern const struct PokedexScreenWindowGfx gUnknown_84520F4[]; extern const struct ListMenuWindowRect gUnknown_845218C; extern const struct ScrollArrowsTemplate gUnknown_84521B4; +extern const struct CursorStruct gUnknown_84524C4; void sub_81024C0(void) { @@ -835,3 +855,311 @@ void sub_8103A40(u8 windowId, s32 itemId, u8 y) BlitMoveInfoIcon(gUnknown_203ACF0->field_40, gBaseStats[species].type2 + 1, 0x98, y); } } + +void sub_8103AC8(u8 taskId) +{ + int r4; + u8 *ptr; + switch (gUnknown_203ACF0->field_01) + { + case 0: + HideBg(3); + HideBg(2); + HideBg(1); + sub_810699C(gUnknown_203ACF0->field_28); + if (gUnknown_203ACF0->field_2B < gUnknown_203ACF0->field_29) + gUnknown_203ACF0->field_2B = gUnknown_203ACF0->field_29; + gUnknown_203ACF0->field_01 = 2; + break; + case 1: + sub_8104E90(); + HideBg(2); + HideBg(1); + switch (gUnknown_203ACF0->field_2F) + { + case 0: + default: + gTasks[taskId].func = sub_810287C; + break; + case 1: + gTasks[taskId].func = sub_8103238; + break; + } + gUnknown_203ACF0->field_01 = 0; + break; + case 2: + sub_8104F0C(0); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + sub_8105058(0xFF); + gUnknown_203ACF0->field_01 = 3; + break; + case 3: + BeginNormalPaletteFade(0xFFFF7FFF, 0, 16, 0, RGB_WHITEALPHA); + ShowBg(3); + ShowBg(2); + ShowBg(1); + gUnknown_203ACF0->field_01 = 4; + break; + case 4: + gUnknown_203ACF0->field_60 = sub_8104234(); + gUnknown_203ACF0->field_61 = ListMenuAddCursorObjectInternal(&gUnknown_84524C4, 0); + gUnknown_203ACF0->field_01 = 5; + break; + case 5: + sub_8105058(gUnknown_203ACF0->field_2D); + sub_8105178(gUnknown_203ACF0->field_61, gUnknown_203ACF0->field_2D, gUnknown_203ACF0->field_2C); + gUnknown_203ACF0->field_62 = gUnknown_203ACF0->field_2B; + r4 = 0; + if (JOY_NEW(A_BUTTON) && sub_8104AB0(gUnknown_203ACF0->field_18[gUnknown_203ACF0->field_2D], FLAG_GET_SEEN, 1)) + { + RemoveScrollIndicatorArrowPair(gUnknown_203ACF0->field_60); + ListMenuRemoveCursorObject(gUnknown_203ACF0->field_61, 0); + gUnknown_203ACF0->field_01 = 12; + } + else + { + if (!JOY_HELD(R_BUTTON) && JOY_REPT(DPAD_LEFT)) + { + if (gUnknown_203ACF0->field_2D != 0) + { + gUnknown_203ACF0->field_2D--; + PlaySE(SE_SELECT); + break; + } + else + r4 = 1; + } + if (!JOY_HELD(R_BUTTON) && JOY_REPT(DPAD_RIGHT)) + { + if (gUnknown_203ACF0->field_2D < gUnknown_203ACF0->field_2C - 1) + { + gUnknown_203ACF0->field_2D++; + PlaySE(SE_SELECT); + break; + } + else + r4 = 2; + } + if (r4 == 0) + r4 = sub_8104284(); + switch (r4) + { + case 0: + break; + case 1: + while (gUnknown_203ACF0->field_2B > gUnknown_203ACF0->field_29) + { + gUnknown_203ACF0->field_2B--; + if (sub_8106838(gUnknown_203ACF0->field_28, gUnknown_203ACF0->field_2B)) + { + gUnknown_203ACF0->field_01 = 8; + break; + } + } + if (gUnknown_203ACF0->field_01 != 8) + gUnknown_203ACF0->field_01 = 6; + break; + case 2: + while (gUnknown_203ACF0->field_2B < gUnknown_203ACF0->field_2A - 1) + { + gUnknown_203ACF0->field_2B++; + if (sub_8106838(gUnknown_203ACF0->field_28, gUnknown_203ACF0->field_2B)) + { + gUnknown_203ACF0->field_01 = 10; + break; + } + } + if (gUnknown_203ACF0->field_01 != 10) + gUnknown_203ACF0->field_01 = 6; + break; + } + if (JOY_NEW(B_BUTTON)) + { + gUnknown_203ACF0->field_01 = 6; + } + } + break; + case 6: + case 7: + RemoveScrollIndicatorArrowPair(gUnknown_203ACF0->field_60); + ListMenuRemoveCursorObject(gUnknown_203ACF0->field_61, 0); + BeginNormalPaletteFade(0xFFFF7FFF, 0, 0, 16, RGB_WHITEALPHA); + gUnknown_203ACF0->field_01 = 1; + break; + case 8: + case 10: + sub_8104E90(); + sub_8105058(0xFF); + ListMenuUpdateCursorObject(gUnknown_203ACF0->field_61, 0, 0xA0, 0); + gUnknown_203ACF0->field_2E = 0; + gUnknown_203ACF0->field_02 = 0; + gUnknown_203ACF0->field_01++; + break; + case 9: + if (sub_81052D0(0)) + { + gUnknown_203ACF0->field_2D = gUnknown_203ACF0->field_2C - 1; + gUnknown_203ACF0->field_01 = 5; + } + break; + case 11: + if (sub_81052D0(1)) + { + gUnknown_203ACF0->field_2D = 0; + gUnknown_203ACF0->field_01 = 5; + } + break; + case 12: + gUnknown_203ACF0->field_5A = gUnknown_203ACF0->field_18[gUnknown_203ACF0->field_2D]; + PlaySE(SE_SELECT); + gUnknown_203ACF0->field_01 = 14; + break; + case 13: + sub_8106014(); + gUnknown_203ACF0->field_01 = 4; + break; + case 14: + sub_8105E1C(0); + gUnknown_203ACF0->field_01 = 15; + break; + case 15: + gUnknown_203ACF0->field_02 = 0; + gUnknown_203ACF0->field_03 = 0; + gUnknown_203ACF0->field_01++; + // fallthrough + case 16: + if (gUnknown_203ACF0->field_03 < 6) + { + if (!gUnknown_203ACF0->field_02) + { + gUnknown_203ACF0->field_02--; + } + else + { + sub_8105594(0, gUnknown_203ACF0->field_03); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_02 = 4; + gUnknown_203ACF0->field_03++; + } + } + else + { + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 2, 30, 16); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + PlayCry2(gUnknown_203ACF0->field_5A, 0, 125, 10); + gUnknown_203ACF0->field_02 = 0; + gUnknown_203ACF0->field_01 = 17; + } + break; + case 17: + if (JOY_NEW(A_BUTTON)) + { + sub_8106014(); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 2, 30, 16); + CopyBgTilemapBufferToVram(1); + gUnknown_203ACF0->field_01 = 21; + } + else if (JOY_NEW(B_BUTTON)) + { + gUnknown_203ACF0->field_01 = 18; + } + else + { + sub_8106B34(); + } + break; + case 18: + sub_8104F0C(0); + sub_8105594(0, 6); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_01 = 19; + break; + case 19: + gUnknown_203ACF0->field_02 = 0; + gUnknown_203ACF0->field_03 = 6; + gUnknown_203ACF0->field_01++; + // fallthrough + case 20: + if (gUnknown_203ACF0->field_03) + { + if (gUnknown_203ACF0->field_02) + { + gUnknown_203ACF0->field_03--; + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 2, 30, 16); + sub_8105594(0, gUnknown_203ACF0->field_03); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_02 = 1; + } + else + gUnknown_203ACF0->field_02--; + } + else + { + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 2, 30, 16); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_01 = 13; + } + break; + case 21: + sub_810603C(); + gUnknown_203ACF0->field_01 = 22; + break; + case 22: + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_01 = 23; + break; + case 23: + if (JOY_NEW(A_BUTTON)) + { + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 2, 30, 16); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 2, 30, 16); + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 2, 30, 16); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_01 = 26; + } + else if (JOY_NEW(B_BUTTON)) + { + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 2, 30, 16); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 2, 30, 16); + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 2, 30, 16); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_01 = 24; + } + else + { + sub_8106B34(); + } + break; + case 24: + sub_81067C0(); + gUnknown_203ACF0->field_01 = 25; + break; + case 25: + sub_8105E1C(0); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + gUnknown_203ACF0->field_01 = 17; + break; + case 26: + sub_81067C0(); + gUnknown_203ACF0->field_01 = 18; + break; + } +} |