diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tm_case.c | 500 |
1 files changed, 489 insertions, 11 deletions
diff --git a/src/tm_case.c b/src/tm_case.c index bc91de20f..b63260aaf 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -11,6 +11,12 @@ #include "new_menu_helpers.h" #include "list_menu.h" #include "item.h" +#include "item_menu.h" +#include "link.h" +#include "money.h" +#include "shop.h" +#include "teachy_tv.h" +#include "pokemon_storage_system.h" #include "string_util.h" #include "party_menu.h" #include "data2.h" @@ -39,7 +45,8 @@ struct UnkStruct_203B118 u8 unk_07; u8 unk_08; u16 unk_0a; - u8 filler_0c[6]; + const u8 * unk_0c; + u8 unk_10; s16 unk_12; u8 filler_14[8]; }; @@ -78,34 +85,70 @@ void sub_8132120(void); void sub_8132170(void); void sub_813226C(u8 taskId); void sub_81322D4(u8 taskId); +void sub_8132568(u8 taskId); +void sub_81326F8(u8 taskId); +void sub_8132714(u8 taskId); +void sub_8132758(u8 taskId); +void sub_8132780(u8 taskId); +void sub_81329C4(u8 taskId); +void sub_8132A34(u8 taskId); +void sub_8132AAC(u8 taskId); +void sub_8132B5C(s16 quantity, s32 value); +void sub_8132BC8(u8 taskId); +void sub_8132D34(u8 taskId); +void sub_8132E0C(u8 taskId); void sub_8132F20(u8 taskId); +void sub_8132F60(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_8133354(u8 windowId); +void sub_8133368(u8 windowId); +void sub_813337C(u8 taskId, u8 windowId, const u8 * str, TaskFunc func); void sub_81333C4(void); void sub_8133404(void); void sub_8133444(u16 itemId); void sub_81335B0(u8 windowId, u8 x, u8 y); +void sub_81335E0(void); +void sub_8133604(u8 taskId, const u8 *const *ptrs); +u8 sub_8133630(u8 * a0, u8 a1); +void sub_8133664(u8 * a0); u8 sub_813368C(u16 itemId); void sub_81337E4(u8 a0, u16 itemId); void sub_81338A8(void); -extern const struct BgTemplate gUnknown_8463134[3]; -extern const u32 gUnknown_8E845D8[]; -extern const u32 gUnknown_8E84A24[]; -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[]; - +// event scripts extern const u8 gUnknown_8416226[]; extern const u8 gFameCheckerText_ListMenuCursor[]; extern const u8 gUnknown_84162B9[]; +extern const u8 gUnknown_8416301[]; +extern const u8 gUnknown_841632A[]; +extern const u8 gUnknown_841635E[]; extern const u8 gUnknown_84166DB[]; extern const u8 gUnknown_84166E1[]; extern const u8 gUnknown_84166FF[]; extern const u8 gUnknown_8416703[]; +extern const u8 gUnknown_84168F1[]; +extern const u8 gUnknown_8416911[]; +extern const u8 gUnknown_8416936[]; +extern const u8 gUnknown_8416959[]; + +// my rodata +extern const struct BgTemplate gUnknown_8463134[3]; +extern void (*const gUnknown_8463140[])(u8 taskId); +extern const struct MenuAction gUnknown_8463150[]; +extern const u8 gUnknown_8463168[]; +extern const u8 gUnknown_846316B[]; +extern const u8 *const gUnknown_8463170[]; +extern const u8 gUnknown_8463178[]; +extern const u8 gUnknown_846317C[]; +extern const struct CompressedSpriteSheet gUnknown_8463218; + +// graphics +extern const u32 gUnknown_8E845D8[]; +extern const u32 gUnknown_8E84A24[]; +extern const u32 gUnknown_8E84B70[]; +extern const u32 gUnknown_8E84CB0[]; +extern const u32 gUnknown_8E84D20[]; void sub_81317F8(u8 a0, void (* a1)(void), u8 a2) { @@ -565,3 +608,438 @@ void sub_813226C(u8 taskId) DestroyTask(taskId); } } + +void sub_81322D4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s32 input; + + if (!gPaletteFade.active) + { + if (sub_80BF72C() != TRUE) + { + input = ListMenuHandleInput(data[0]); + get_coro_args_x18_x1A(data[0], &gUnknown_203B10C.unk_0a, &gUnknown_203B10C.unk_08); + if (JOY_NEW(SELECT_BUTTON) && gUnknown_203B10C.unk_05 == 1) + { + PlaySE(SE_SELECT); + gSpecialVar_ItemId = ITEM_NONE; + sub_8132230(taskId); + } + else + { + switch (input) + { + case -1: + break; + case -2: + PlaySE(SE_SELECT); + gSpecialVar_ItemId = 0; + sub_8132230(taskId); + break; + default: + PlaySE(SE_SELECT); + sub_8131F64(1); + sub_813208C(); + sub_8131F90(data[0], 2); + data[1] = input; + data[2] = sub_809A7B4(POCKET_TM_CASE, input); + gSpecialVar_ItemId = sub_809A798(POCKET_TM_CASE, input); + gTasks[taskId].func = gUnknown_8463140[gUnknown_203B10C.unk_04]; + break; + } + } + } + } +} + +void sub_81323E4(u8 taskId) +{ + sub_8131F64(0); + sub_8132018(); + gTasks[taskId].func = sub_81322D4; +} + +void sub_8132414(u8 taskId) +{ + u8 * strbuf; + sub_8133368(2); + if (!sub_80BF708() && InUnionRoom() != TRUE) + { + sub_8133630(&gUnknown_203B118->unk_07, 0); + gUnknown_203B118->unk_0c = gUnknown_8463168; + gUnknown_203B118->unk_10 = 3; + } + else + { + sub_8133630(&gUnknown_203B118->unk_07, 1); + gUnknown_203B118->unk_0c = gUnknown_846316B; + gUnknown_203B118->unk_10 = 2; + } + AddItemMenuActionTextPrinters(gUnknown_203B118->unk_07, 2, GetMenuCursorDimensionByFont(2, 0), 2, 0, GetFontAttribute(2, 1) + 2, gUnknown_203B118->unk_10, gUnknown_8463150, gUnknown_203B118->unk_0c); + ProgramAndPlaceMenuCursorOnWindow(gUnknown_203B118->unk_07, 2, 0, 2, GetFontAttribute(2, 1) + 2, gUnknown_203B118->unk_10, 0); + strbuf = Alloc(256); + sub_8131D48(strbuf, gSpecialVar_ItemId); + StringAppend(strbuf, gUnknown_8416301); + sub_81332EC(2, 2, strbuf, 0, 2, 1, 0, 0, 1); + Free(strbuf); + if (itemid_is_unique(gSpecialVar_ItemId)) + { + sub_81335B0(2, 0, 2); + CopyWindowToVram(2, 2); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + gTasks[taskId].func = sub_8132568; +} + +void sub_8132568(u8 taskId) +{ + s8 input; + + if (sub_80BF72C() != TRUE) + { + input = ProcessMenuInputNoWrapAround(); + switch (input) + { + case -1: + PlaySE(SE_SELECT); + gUnknown_8463150[gUnknown_203B118->unk_0c[gUnknown_203B118->unk_10 - 1]].func.void_u8(taskId); + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + gUnknown_8463150[gUnknown_203B118->unk_0c[input]].func.void_u8(taskId); + break; + } + } +} + +void sub_81325F0(u8 taskId) +{ + sub_8133664(&gUnknown_203B118->unk_07); + sub_810F4D8(2, 0); + ClearWindowTilemap(2); + PutWindowTilemap(0); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + if (CalculatePlayerPartyCount() == 0) + { + sub_81326F8(taskId); + } + else + { + gUnknown_3005E98 = sub_8125B40; + gUnknown_203B118->unk_00 = sub_8124C8C; + sub_8132230(taskId); + } +} + +void sub_813265C(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u16 itemId = sub_809A798(POCKET_TM_CASE, data[1]); + sub_8133664(&gUnknown_203B118->unk_07); + sub_810F4D8(2, 0); + ClearWindowTilemap(2); + PutWindowTilemap(1); + PutWindowTilemap(4); + PutWindowTilemap(5); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + if (!itemid_is_unique(itemId)) + { + if (CalculatePlayerPartyCount() == 0) + { + sub_81326F8(taskId); + } + else + { + gUnknown_203B118->unk_00 = sub_8126EDC; + sub_8132230(taskId); + } + } + else + { + sub_8132714(taskId); + } +} + +void sub_81326F8(u8 taskId) +{ + sub_813337C(taskId, 2, gUnknown_841632A, sub_8132758); +} + +void sub_8132714(u8 taskId) +{ + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_841635E); + sub_813337C(taskId, 2, gStringVar4, sub_8132758); +} + +void sub_8132758(u8 taskId) +{ + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_8132780(taskId); + } +} + +void sub_8132780(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_810713C(data[0], &gUnknown_203B10C.unk_0a, &gUnknown_203B10C.unk_08); + data[0] = ListMenuInit(&gUnknown_3005E70, gUnknown_203B10C.unk_0a, gUnknown_203B10C.unk_08); + sub_8131F90(data[0], 1); + sub_810F260(6, 0); + ClearWindowTilemap(6); + PutWindowTilemap(1); + PutWindowTilemap(4); + PutWindowTilemap(5); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + sub_81323E4(taskId); +} + +void sub_81327FC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_8133664(&gUnknown_203B118->unk_07); + sub_810F4D8(2, 0); + ClearWindowTilemap(2); + PutWindowTilemap(0); + sub_8131F90(data[0], 1); + PutWindowTilemap(1); + PutWindowTilemap(4); + PutWindowTilemap(5); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + sub_81323E4(taskId); +} + +void sub_8132868(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (!itemid_is_unique(sub_809A798(POCKET_TM_CASE, data[1]))) + { + gUnknown_203B118->unk_00 = c2_8123744; + sub_8132230(taskId); + } + else + { + sub_8132714(taskId); + } +} + +void sub_81328B8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (!itemid_is_unique(sub_809A798(POCKET_TM_CASE, data[1]))) + { + gUnknown_203B118->unk_00 = sub_808CE60; + sub_8132230(taskId); + } + else + { + sub_8132714(taskId); + } +} + +void sub_8132908(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (itemid_get_market_price(gSpecialVar_ItemId) == 0) + { + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_84168F1); + sub_813337C(taskId, sub_80BF8E4(), gStringVar4, sub_8132780); + } + else + { + data[8] = 1; + if (data[2] == 1) + { + sub_81335E0(); + sub_81329C4(taskId); + } + else + { + if (data[2] > 99) + data[2] = 99; + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_8416911); + sub_813337C(taskId, sub_80BF8E4(), gStringVar4, sub_8132AAC); + } + } +} + +void sub_81329C4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(sub_809A798(POCKET_TM_CASE, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gUnknown_8416936); + sub_813337C(taskId, sub_80BF8E4(), gStringVar4, sub_8132A34); +} + +void sub_8132A34(u8 taskId) +{ + sub_8133604(taskId, gUnknown_8463170); +} + +void sub_8132A48(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_810F4D8(8, 0); + sub_810F260(6, 0); + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(3); + PutWindowTilemap(4); + PutWindowTilemap(5); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + sub_8131F90(data[0], 1); + sub_81323E4(taskId); +} + +void sub_8132AAC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_8133354(7); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gUnknown_84162B9); + sub_81332EC(7, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + sub_8132B5C(1, itemid_get_market_price(sub_809A798(POCKET_TM_CASE, data[1])) / 2 * data[8]); + sub_81335E0(); + sub_8132054(); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + gTasks[taskId].func = sub_8132BC8; +} + +void sub_8132B5C(s16 quantity, s32 amount) +{ + FillWindowPixelBuffer(7, 0x11); + ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gUnknown_84162B9); + sub_81332EC(7, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + PrintMoneyAmount(7, 0x38, 0x0A, amount, 0); +} + +void sub_8132BC8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (sub_80BF848(&data[8], data[2]) == 1) + { + sub_8132B5C(data[8], itemid_get_market_price(sub_809A798(POCKET_TM_CASE, data[1])) / 2 * data[8]); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810F4D8(7, 0); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + sub_813208C(); + sub_81329C4(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810F4D8(7, 0); + sub_810F4D8(8, 0); + sub_810F260(6, 0); + PutWindowTilemap(3); + PutWindowTilemap(0); + PutWindowTilemap(1); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + sub_813208C(); + sub_8131F90(data[0], 1); + sub_81323E4(taskId); + } +} + +void sub_8132CAC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + PutWindowTilemap(0); + schedule_bg_copy_tilemap_to_vram(0); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(sub_809A798(POCKET_TM_CASE, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gUnknown_8416959); + sub_813337C(taskId, 2, gStringVar4, sub_8132D34); +} + +void sub_8132D34(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + PlaySE(0xF8); + RemoveBagItem(gSpecialVar_ItemId, data[8]); + AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); + sub_809C09C(gSpecialVar_ItemId, data[8], 2); + sub_810713C(data[0], &gUnknown_203B10C.unk_0a, &gUnknown_203B10C.unk_08); + sub_81320BC(); + sub_8132120(); + sub_8131C50(); + data[0] = ListMenuInit(&gUnknown_3005E70, gUnknown_203B10C.unk_0a, gUnknown_203B10C.unk_08); + sub_8131F90(data[0], 2); + PrintMoneyAmountInMoneyBox(8, GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_8132E0C; +} + +void sub_8132E0C(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810F4D8(8, 0); + sub_810F260(6, 0); + PutWindowTilemap(1); + PutWindowTilemap(3); + PutWindowTilemap(4); + PutWindowTilemap(5); + sub_8132780(taskId); + } +} + +void sub_8132E64(void) +{ + gUnknown_203B11C = AllocZeroed(sizeof(*gUnknown_203B11C)); + memcpy(gUnknown_203B11C->bagPocket_TMHM, gSaveBlock1Ptr->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); + memcpy(gUnknown_203B11C->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); + gUnknown_203B11C->unk_160 = gUnknown_203B10C.unk_08; + gUnknown_203B11C->unk_162 = gUnknown_203B10C.unk_0a; + ClearItemSlots(gSaveBlock1Ptr->bagPocket_TMHM, NELEMS(gSaveBlock1Ptr->bagPocket_TMHM)); + ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, NELEMS(gSaveBlock1Ptr->bagPocket_KeyItems)); + sub_81320AC(); + AddBagItem(ITEM_TM01, 1); + AddBagItem(ITEM_TM03, 1); + AddBagItem(ITEM_TM09, 1); + AddBagItem(ITEM_TM35, 1); + sub_81317F8(4, sub_815ABFC, 0); +} + +void sub_8132F20(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + data[8] = 0; + data[9] = 0; + gTasks[taskId].func = sub_8132F60; + } +} |