diff options
Diffstat (limited to 'src/tm_case.c')
-rw-r--r-- | src/tm_case.c | 160 |
1 files changed, 153 insertions, 7 deletions
diff --git a/src/tm_case.c b/src/tm_case.c index 011af5d94..60f9c5bcb 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -8,13 +8,17 @@ #include "text.h" #include "menu.h" #include "menu_helpers.h" +#include "new_menu_helpers.h" #include "list_menu.h" #include "item.h" #include "string_util.h" #include "party_menu.h" #include "data2.h" #include "scanline_effect.h" +#include "sound.h" +#include "menu_indicators.h" #include "constants/items.h" +#include "constants/songs.h" struct UnkStruct_203B10C { @@ -34,7 +38,8 @@ struct UnkStruct_203B118 u8 unk_06; u8 unk_07; u8 unk_08; - u8 filler_09[9]; + u16 unk_0a; + u8 filler_0c[6]; s16 unk_12; u8 filler_14[8]; }; @@ -65,6 +70,8 @@ void sub_8131C50(void); void sub_8131D48(u8 * dest, u16 itemId); void sub_8131E18(s32 itemIndex, bool8 onInit, struct ListMenu *list); void sub_8131E68(u8 windowId, s32 itemId, u8 y); +void sub_8131F0C(s32 itemIndex); +void sub_8131FB0(u8 a0, u8 a1); void sub_8132018(void); void sub_81320BC(void); void sub_8132120(void); @@ -72,9 +79,13 @@ void sub_8132170(void); void sub_81322D4(u8 taskId); void sub_8132F20(u8 taskId); void sub_8133244(void); +void sub_81332EC(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); void sub_81333C4(void); void sub_8133404(void); +void sub_8133444(u16 itemId); +void sub_81335B0(u8 windowId, u8 x, u8 y); u8 sub_813368C(u16 itemId); +void sub_81337E4(u8 a0, u16 itemId); void sub_81338A8(void); extern const struct BgTemplate gUnknown_8463134[3]; @@ -84,12 +95,15 @@ extern const u32 gUnknown_8E84B70[]; extern const u32 gUnknown_8E84CB0[]; extern const u32 gUnknown_8E84D20[]; extern const struct CompressedSpriteSheet gUnknown_8463218; +extern const u8 gUnknown_8463178[]; +extern const u8 gUnknown_846317C[]; +extern const u8 gUnknown_8416226[]; +extern const u8 gFameCheckerText_ListMenuCursor[]; +extern const u8 gUnknown_84162B9[]; extern const u8 gUnknown_84166DB[]; +extern const u8 gUnknown_84166E1[]; extern const u8 gUnknown_84166FF[]; -extern const u8 gUnknown_8463178[]; -extern const u8 gUnknown_8416226[]; -extern const u8 gUnknown_846317C[]; extern const u8 gUnknown_8416703[]; void sub_81317F8(u8 a0, void (* a1)(void), u8 a2) @@ -183,7 +197,7 @@ bool8 sub_81318C0(void) gMain.state++; break; case 9: - sub_809A5E4(&gUnknown_20398A4); + sub_809A5E4(&gBagPockets[POCKET_TM_CASE - 1]); gMain.state++; break; case 10: @@ -307,14 +321,14 @@ bool8 sub_8131B20(void) void sub_8131C10(void) { - struct BagPocket * pocket = &gUnknown_20398A4; + struct BagPocket * pocket = &gBagPockets[POCKET_TM_CASE - 1]; gUnknown_203B124 = Alloc((pocket->capacity + 1) * sizeof(struct ListMenuItem)); gUnknown_203B128 = Alloc(gUnknown_203B118->unk_06 * 29); } void sub_8131C50(void) { - struct BagPocket * pocket = &gUnknown_20398A4; + struct BagPocket * pocket = &gBagPockets[POCKET_TM_CASE - 1]; u16 i; for (i = 0; i < gUnknown_203B118->unk_06; i++) @@ -366,3 +380,135 @@ void sub_8131D48(u8 * dest, u16 itemId) StringAppend(gStringVar4, gMoveNames[ItemIdToBattleMoveId(itemId)]); StringCopy(dest, gStringVar4); } + +void sub_8131E18(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + u16 itemId; + + if (itemIndex == -2) + itemId = 0; + else + itemId = sub_809A798(POCKET_TM_CASE, itemIndex); + + if (onInit != TRUE) + { + PlaySE(SE_SELECT); + sub_81337E4(gUnknown_203B118->unk_04, itemId); + } + sub_8131F0C(itemIndex); + sub_8133444(itemId); +} + +void sub_8131E68(u8 windowId, s32 itemId, u8 y) +{ + if (itemId != -2) + { + if (!itemid_is_unique(sub_809A798(POCKET_TM_CASE, itemId))) + { + ConvertIntToDecimalStringN(gStringVar1, sub_809A7B4(POCKET_TM_CASE, itemId), STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gUnknown_84162B9); + sub_81332EC(windowId, 0, gStringVar4, 0x7E, y, 0, 0, 0xFF, 1); + } + else + { + sub_81335B0(windowId, 8, y); + } + } +} + +void sub_8131F0C(s32 itemIndex) +{ + const u8 * str; + if (itemIndex != -2) + { + str = ItemId_GetDescription(sub_809A798(POCKET_TM_CASE, itemIndex)); + } + else + { + str = gUnknown_84166E1; + } + FillWindowPixelBuffer(1, 0); + sub_81332EC(1, 2, str, 2, 3, 1, 0, 0, 0); +} + +void sub_8131F64(s32 a0) +{ + sub_80F6B08(2, 0, 12, 30, 8, 2 * a0 + 1); + schedule_bg_copy_tilemap_to_vram(2); +} + +void sub_8131F90(u8 a0, u8 a1) +{ + sub_8131FB0(ListMenuGetYCoordForPrintingArrowCursor(a0), a1); +} + +void sub_8131FB0(u8 a0, u8 a1) +{ + if (a1 == 0xFF) + { + FillWindowPixelRect(0, 0, 0, a0, GetFontAttribute(2, 0), GetFontAttribute(2, 1)); + CopyWindowToVram(0, 2); + } + else + { + sub_81332EC(0, 2, gFameCheckerText_ListMenuCursor, 0, a0, 0, 0, 0, a1); + } +} + +void sub_8132018(void) +{ + gUnknown_203B118->unk_08 = AddScrollIndicatorArrowPairParametrized(2, 0xA0, 0x08, 0x58, gUnknown_203B118->unk_06 - gUnknown_203B118->unk_05 + 1, 0x6E, 0x6E, &gUnknown_203B10C.unk_0a); +} + +void sub_8132054(void) +{ + gUnknown_203B118->unk_0a = 1; + gUnknown_203B118->unk_08 = AddScrollIndicatorArrowPairParametrized(2, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gUnknown_203B118->unk_0a); +} + +void sub_813208C(void) +{ + if (gUnknown_203B118->unk_08 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203B118->unk_08); + gUnknown_203B118->unk_08 = 0xFF; + } +} + +void sub_81320AC(void) +{ + gUnknown_203B10C.unk_08 = 0; + gUnknown_203B10C.unk_0a = 0; +} + +void sub_81320BC(void) +{ + struct BagPocket * pocket = &gBagPockets[POCKET_TM_CASE - 1]; + u16 i; + + sub_809A584(pocket->itemSlots, pocket->capacity); + gUnknown_203B118->unk_06 = 0; + for (i = 0; i < pocket->capacity; i++) + { + if (pocket->itemSlots[i].itemId == ITEM_NONE) + break; + gUnknown_203B118->unk_06++; + } + gUnknown_203B118->unk_05 = min(gUnknown_203B118->unk_06 + 1, 5); +} + +void sub_8132120(void) +{ + if (gUnknown_203B10C.unk_0a != 0) + { + if (gUnknown_203B10C.unk_0a + gUnknown_203B118->unk_05 > gUnknown_203B118->unk_06 + 1) + gUnknown_203B10C.unk_0a = gUnknown_203B118->unk_06 + 1 - gUnknown_203B118->unk_05; + } + if (gUnknown_203B10C.unk_0a + gUnknown_203B10C.unk_08 >= gUnknown_203B118->unk_06 + 1) + { + if (gUnknown_203B118->unk_06 + 1 < 2) + gUnknown_203B10C.unk_08 = 0; + else + gUnknown_203B10C.unk_08 = gUnknown_203B118->unk_06; + } +} |