From 7eeba327bd6dc235a33f06a7779e3b3c52f04475 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 19 Jun 2019 18:03:24 -0400 Subject: Dump items and start decomp item_use --- src/item_use.c | 242 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 src/item_use.c (limited to 'src/item_use.c') diff --git a/src/item_use.c b/src/item_use.c new file mode 100644 index 000000000..bb259da51 --- /dev/null +++ b/src/item_use.c @@ -0,0 +1,242 @@ +#include "global.h" +#include "berry_pouch.h" +#include "bike.h" +#include "event_data.h" +#include "field_fadetransition.h" +#include "field_map_obj_helpers.h" +#include "field_player_avatar.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "item.h" +#include "item_menu.h" +#include "mail.h" +#include "map_obj_80688E4.h" +#include "map_obj_lock.h" +#include "metatile_behavior.h" +#include "new_menu_helpers.h" +#include "overworld.h" +#include "script.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "constants/flags.h" +#include "constants/items.h" +#include "constants/songs.h" + +EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL; + +void sub_80A1084(void); +void sub_80A109C(u8 taskId); +void sub_80A112C(u8 taskId); +void sub_80A11C0(u8 taskId); +bool8 sub_80A1194(void); +void sub_80A1208(void); +void ItemUseOnFieldCB_Bicycle(u8 taskId); +bool8 ItemUseCheckFunc_Rod(void); +void ItemUseOnFieldCB_Rod(u8 taskId); +void sub_813EC8C(u8 taskId); +void sub_80A1750(u8 taskId); + +extern void (*const gUnknown_83E2954[])(void); + +void sub_80A0FBC(u8 taskId) +{ + u8 itemType; + if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY) + itemType = gTasks[taskId].data[4] - 1; + else + itemType = ItemId_GetType(gSpecialVar_ItemId) - 1; + if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) + { + sub_813D934(gUnknown_83E2954[itemType]); + sub_813D808(taskId); + } + else + { + sub_8108EE0(gUnknown_83E2954[itemType]); + if (itemType == 1) + sub_8108CB4(); + sub_8108B50(taskId); + } +} + +void sub_80A103C(u8 taskId) +{ + if (gTasks[taskId].data[3] != 1) + { + gFieldCallback = sub_80A1084; + sub_80A0FBC(taskId); + } + else + sItemUseOnFieldCB(taskId); +} + +void sub_80A1084(void) +{ + sub_807DC00(); + CreateTask(sub_80A109C, 8); +} + +void sub_80A109C(u8 taskId) +{ + if (sub_807AA70() == TRUE) + { + sItemUseOnFieldCB(taskId); + } +} + +void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str) +{ + StringExpandPlaceholders(gStringVar4, str); + if (a1 == FALSE) + sub_8108E70(taskId, a2, gStringVar4, sub_810A1F8); + else + DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C); +} + +void sub_80A1110(u8 taskId, bool8 a1) +{ + sub_80A10C4(taskId, a1, 4, gUnknown_8416425); +} + +void sub_80A112C(u8 taskId) +{ + ClearDialogWindowAndFrame(0, 1); + DestroyTask(taskId); + sub_80696C0(); + ScriptContext2_Disable(); +} + +u8 sub_80A1150(u16 itemId) +{ + if (ItemId_GetPocket(itemId) == POCKET_TM_CASE) + return 1; + else if (ItemId_GetFieldFunc(itemId) == sub_80A1750) + return 2; + else + return 0; +} + +void sub_80A1184(void) +{ + gFieldCallback2 = sub_80A1194; +} + +bool8 sub_80A1194(void) +{ + player_bitmagic(); + ScriptContext2_Enable(); + sub_807DC00(); + CreateTask(sub_80A11C0, 10); + gUnknown_2031DE0 = 0; + return TRUE; +} + +void sub_80A11C0(u8 taskId) +{ + if (sub_807AA70() == TRUE) + { + UnfreezeMapObjects(); + ScriptContext2_Disable(); + DestroyTask(taskId); + } +} + +void sub_80A11E8(u8 taskId) +{ + sub_8108EE0(sub_80A1208); + sub_8108B50(taskId); +} + +void sub_80A1208(void) +{ + u16 buffer[18]; + + buffer[16] = gSpecialVar_ItemId; + sub_80BEBEC(buffer, UseFameCheckerFromMenu, 0); +} + +void sub_80A122C(u8 taskId) +{ + s16 x, y; + u8 behavior; + + PlayerGetDestCoords(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + + if (FlagGet(FLAG_0x830) == TRUE + || MetatileBehavior_ReturnFalse_17(behavior) == TRUE + || MetatileBehavior_ReturnFalse_18(behavior) == TRUE + || MetatileBehavior_ReturnFalse_15(behavior) == TRUE + || MetatileBehavior_ReturnFalse_16(behavior) == TRUE) + sub_80A10C4(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451); + else if (sub_8055C9C() == TRUE && !sub_80BD540()) + { + sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle; + sub_80A103C(taskId); + } + else + sub_80A1110(taskId, gTasks[taskId].data[3]); +} + +void ItemUseOnFieldCB_Bicycle(u8 taskId) +{ + if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + PlaySE(SE_JITENSYA); + sub_80BD5C8(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE); + sub_80696C0(); + ScriptContext2_Disable(); + DestroyTask(taskId); +} + +void sub_80A1338(u8 taskId) +{ + if (ItemUseCheckFunc_Rod() == TRUE) + { + sItemUseOnFieldCB = ItemUseOnFieldCB_Rod; + sub_80A103C(taskId); + } + else + sub_80A1110(taskId, gTasks[taskId].data[3]); +} + +bool8 ItemUseCheckFunc_Rod(void) +{ + s16 x, y; + u16 behavior; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + + if (MetatileBehavior_IsWaterfall(behavior)) + return FALSE; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4)) + return FALSE; + if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + if (IsPlayerFacingSurfableFishableWater()) + return TRUE; + } + else + { + if (MetatileBehavior_IsSurfable(behavior) && !MapGridIsImpassableAt(x, y)) + return TRUE; + if (MetatileBehavior_ReturnFalse_6(behavior) == TRUE) + return TRUE; + } + return FALSE; +} + +void ItemUseOnFieldCB_Rod(u8 taskId) +{ + sub_805D2C0(ItemId_GetSecondaryId(gSpecialVar_ItemId)); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_Itemfinder(u8 taskId) +{ + IncrementGameStat(GAME_STAT_USED_ITEMFINDER); + sItemUseOnFieldCB = sub_813EC8C; + sub_80A103C(taskId); +} -- cgit v1.2.3 From 164dd43a62f212132f02f1965c51a2ac52c49e4f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 20 Jun 2019 10:30:41 -0400 Subject: Rename item use funcs, first pass --- src/item_use.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/item_use.c') diff --git a/src/item_use.c b/src/item_use.c index bb259da51..66658b6eb 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -36,7 +36,7 @@ void ItemUseOnFieldCB_Bicycle(u8 taskId); bool8 ItemUseCheckFunc_Rod(void); void ItemUseOnFieldCB_Rod(u8 taskId); void sub_813EC8C(u8 taskId); -void sub_80A1750(u8 taskId); +void FieldUseFunc_SunStone(u8 taskId); extern void (*const gUnknown_83E2954[])(void); @@ -112,7 +112,7 @@ u8 sub_80A1150(u16 itemId) { if (ItemId_GetPocket(itemId) == POCKET_TM_CASE) return 1; - else if (ItemId_GetFieldFunc(itemId) == sub_80A1750) + else if (ItemId_GetFieldFunc(itemId) == FieldUseFunc_SunStone) return 2; else return 0; @@ -143,7 +143,7 @@ void sub_80A11C0(u8 taskId) } } -void sub_80A11E8(u8 taskId) +void FieldUseFunc_OrangeMail(u8 taskId) { sub_8108EE0(sub_80A1208); sub_8108B50(taskId); @@ -157,7 +157,7 @@ void sub_80A1208(void) sub_80BEBEC(buffer, UseFameCheckerFromMenu, 0); } -void sub_80A122C(u8 taskId) +void FieldUseFunc_MachBike(u8 taskId) { s16 x, y; u8 behavior; @@ -190,7 +190,7 @@ void ItemUseOnFieldCB_Bicycle(u8 taskId) DestroyTask(taskId); } -void sub_80A1338(u8 taskId) +void FieldUseFunc_OldRod(u8 taskId) { if (ItemUseCheckFunc_Rod() == TRUE) { -- cgit v1.2.3 From 12f3ceb0f7fb0ed580fa75bbba634307ca463d52 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 20 Jun 2019 11:02:09 -0400 Subject: item_use: through sub_80A16D0 --- src/item_use.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 4 deletions(-) (limited to 'src/item_use.c') diff --git a/src/item_use.c b/src/item_use.c index 66658b6eb..5ce0792de 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1,6 +1,8 @@ #include "global.h" #include "berry_pouch.h" +#include "berry_powder.h" #include "bike.h" +#include "coins.h" #include "event_data.h" #include "field_fadetransition.h" #include "field_map_obj_helpers.h" @@ -9,6 +11,7 @@ #include "fieldmap.h" #include "item.h" #include "item_menu.h" +#include "item_use.h" #include "mail.h" #include "map_obj_80688E4.h" #include "map_obj_lock.h" @@ -20,8 +23,10 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "constants/fanfares.h" #include "constants/flags.h" #include "constants/items.h" +#include "constants/moves.h" #include "constants/songs.h" EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL; @@ -35,8 +40,10 @@ void sub_80A1208(void); void ItemUseOnFieldCB_Bicycle(u8 taskId); bool8 ItemUseCheckFunc_Rod(void); void ItemUseOnFieldCB_Rod(u8 taskId); +void FieldUseFunc_EvoItem(u8 taskId); +void sub_80A1648(u8 taskId); +void sub_80A1674(u8 taskId); void sub_813EC8C(u8 taskId); -void FieldUseFunc_SunStone(u8 taskId); extern void (*const gUnknown_83E2954[])(void); @@ -90,7 +97,7 @@ void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str) { StringExpandPlaceholders(gStringVar4, str); if (a1 == FALSE) - sub_8108E70(taskId, a2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, a2, gStringVar4, sub_810A1F8); else DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C); } @@ -108,11 +115,11 @@ void sub_80A112C(u8 taskId) ScriptContext2_Disable(); } -u8 sub_80A1150(u16 itemId) +u8 GetItemCompatibilityRule(u16 itemId) { if (ItemId_GetPocket(itemId) == POCKET_TM_CASE) return 1; - else if (ItemId_GetFieldFunc(itemId) == FieldUseFunc_SunStone) + else if (ItemId_GetFieldFunc(itemId) == FieldUseFunc_EvoItem) return 2; else return 0; @@ -240,3 +247,76 @@ void ItemUseOutOfBattle_Itemfinder(u8 taskId) sItemUseOnFieldCB = sub_813EC8C; sub_80A103C(taskId); } + +void FieldUseFunc_CoinCase(u8 taskId) +{ + ConvertIntToDecimalStringN(gStringVar1, GetCoins(), STR_CONV_MODE_LEFT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gUnknown_8416537); + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); + if (gTasks[taskId].data[3] == 0) + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + else + DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C); +} + +void FieldUseFunc_PowderJar(u8 taskId) +{ + ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 5); + StringExpandPlaceholders(gStringVar4, gUnknown_8416644); + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); + if (gTasks[taskId].data[3] == 0) + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + else + DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C); +} + +void FieldUseFunc_PokeFlute(u8 taskId) +{ + bool8 wokeSomeoneUp = FALSE; + u8 i; + + for (i = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!ExecuteTableBasedItemEffect(&gPlayerParty[i], ITEM_AWAKENING, i, MOVE_NONE)) + wokeSomeoneUp = TRUE; + } + + if (wokeSomeoneUp) + { + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); + if (gTasks[taskId].data[3] == 0) + DisplayItemMessageInBag(taskId, 2, gUnknown_8416690, sub_80A1648); + else + DisplayItemMessageOnField(taskId, 2, gUnknown_8416690, sub_80A1648); + } + else + { + // Now that's a catchy tune! + if (gTasks[taskId].data[3] == 0) + DisplayItemMessageInBag(taskId, 2, gUnknown_841665C, sub_810A1F8); + else + DisplayItemMessageOnField(taskId, 2, gUnknown_841665C, sub_80A112C); + } +} + +void sub_80A1648(u8 taskId) +{ + PlayFanfareByFanfareNum(FANFARE_POKEFLUTE); + gTasks[taskId].func = sub_80A1674; +} + +void sub_80A1674(u8 taskId) +{ + if (WaitFanfare(FALSE)) + { + if (gTasks[taskId].data[3] == 0) + DisplayItemMessageInBag(taskId, 2, gUnknown_84166A7, sub_810A1F8); + else + DisplayItemMessageOnField(taskId, 2, gUnknown_84166A7, sub_80A112C); + } +} + +void sub_80A16D0(u8 taskId) +{ + sub_80A0FBC(taskId); +} -- cgit v1.2.3 From 7abbe42763835f43dc2b08f8292a4ef83c50c5e1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 20 Jun 2019 20:00:13 -0400 Subject: Finish item_use --- src/item_use.c | 566 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 562 insertions(+), 4 deletions(-) (limited to 'src/item_use.c') diff --git a/src/item_use.c b/src/item_use.c index 5ce0792de..5413a600f 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1,31 +1,45 @@ #include "global.h" +#include "battle.h" #include "berry_pouch.h" #include "berry_powder.h" #include "bike.h" #include "coins.h" #include "event_data.h" +#include "field_effect.h" #include "field_fadetransition.h" #include "field_map_obj_helpers.h" #include "field_player_avatar.h" +#include "field_specials.h" #include "field_weather.h" #include "fieldmap.h" #include "item.h" #include "item_menu.h" #include "item_use.h" +#include "itemfinder.h" #include "mail.h" +#include "main.h" +#include "malloc.h" #include "map_obj_80688E4.h" #include "map_obj_lock.h" #include "metatile_behavior.h" #include "new_menu_helpers.h" #include "overworld.h" +#include "palette.h" +#include "party_menu.h" +#include "quest_log.h" +#include "region_map.h" #include "script.h" #include "sound.h" #include "string_util.h" #include "strings.h" #include "task.h" +#include "teachy_tv.h" +#include "tm_case.h" +#include "vs_seeker.h" #include "constants/fanfares.h" #include "constants/flags.h" #include "constants/items.h" +#include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" @@ -43,7 +57,24 @@ void ItemUseOnFieldCB_Rod(u8 taskId); void FieldUseFunc_EvoItem(u8 taskId); void sub_80A1648(u8 taskId); void sub_80A1674(u8 taskId); -void sub_813EC8C(u8 taskId); +void InitTMCaseFromBag(void); +void Task_InitTMCaseFromField(u8 taskId); +void InitBerryPouchFromBag(void); +void Task_InitBerryPouchFromField(u8 taskId); +void InitBerryPouchFromBattle(void); +void InitTeachyTvFromBag(void); +void Task_InitTeachyTvFromField(u8 taskId); +void sub_80A19E8(u8 taskId); +void sub_80A1A44(void); +void sub_80A1B48(u8 taskId); +void sub_80A1C08(u8 taskId); +void sub_80A1C44(u8 taskId); +void sub_80A1CAC(void); +void sub_80A1CC0(u8 taskId); +void sub_80A1D58(void); +void sub_80A1D68(u8 taskId); +void sub_80A1EF4(u8 taskId); +void sub_80A1F48(u8 taskId); extern void (*const gUnknown_83E2954[])(void); @@ -158,10 +189,10 @@ void FieldUseFunc_OrangeMail(u8 taskId) void sub_80A1208(void) { - u16 buffer[18]; + struct MailStruct mail; - buffer[16] = gSpecialVar_ItemId; - sub_80BEBEC(buffer, UseFameCheckerFromMenu, 0); + mail.itemId = gSpecialVar_ItemId; + sub_80BEBEC(&mail, ReturnToBagFromKeyItem, 0); } void FieldUseFunc_MachBike(u8 taskId) @@ -320,3 +351,530 @@ void sub_80A16D0(u8 taskId) { sub_80A0FBC(taskId); } + +void FieldUseFunc_Medicine(u8 taskId) +{ + gUnknown_3005E98 = sub_81252D0; + sub_80A16D0(taskId); +} + +void FieldUseFunc_Ether(u8 taskId) +{ + gUnknown_3005E98 = sub_81256F8; + sub_80A16D0(taskId); +} + +void FieldUseFunc_PpUp(u8 taskId) +{ + gUnknown_3005E98 = dp05_pp_up; + sub_80A16D0(taskId); +} + +void FieldUseFunc_RareCandy(u8 taskId) +{ + gUnknown_3005E98 = dp05_rare_candy; + sub_80A16D0(taskId); +} + +void FieldUseFunc_EvoItem(u8 taskId) +{ + gUnknown_3005E98 = sub_8126B60; + sub_80A16D0(taskId); +} + +void FieldUseFunc_SacredAsh(u8 taskId) +{ + gUnknown_3005E98 = sub_8126894; + sub_80A0FBC(taskId); +} + +void FieldUseFunc_TmCase(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + sub_8108EE0(InitTMCaseFromBag); + sub_8108B50(taskId); + } + else + { + sub_80CCB68(); + fade_screen(1, 0); + gTasks[taskId].func = Task_InitTMCaseFromField; + } +} + +void InitTMCaseFromBag(void) +{ + InitTMCase(0, ReturnToBagFromKeyItem, 0); +} + +void Task_InitTMCaseFromField(u8 taskId) +{ + if (!gPaletteFade.active) + { + CleanupOverworldWindowsAndTilemaps(); + sub_80A1184(); + InitTMCase(0, CB2_ReturnToField, 1); + DestroyTask(taskId); + } +} + +void FieldUseFunc_BerryPouch(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + sub_8108EE0(InitBerryPouchFromBag); + sub_8108B50(taskId); + } + else + { + sub_80CCB68(); + fade_screen(1, 0); + gTasks[taskId].func = Task_InitBerryPouchFromField; + } +} + +void InitBerryPouchFromBag(void) +{ + InitBerryPouch(0, ReturnToBagFromKeyItem, 0); +} + +void Task_InitBerryPouchFromField(u8 taskId) +{ + if (!gPaletteFade.active) + { + CleanupOverworldWindowsAndTilemaps(); + sub_80A1184(); + InitBerryPouch(0, CB2_ReturnToField, 1); + DestroyTask(taskId); + } +} + +void BattleUseFunc_BerryPouch(u8 taskId) +{ + sub_8108EE0(InitBerryPouchFromBattle); + sub_8108B50(taskId); +} + +void InitBerryPouchFromBattle(void) +{ + InitBerryPouch(4, sub_8107ECC, 0); +} + +void FieldUseFunc_TeachyTv(u8 taskId) +{ + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); + if (gTasks[taskId].data[3] == 0) + { + sub_8108EE0(InitTeachyTvFromBag); + sub_8108B50(taskId); + } + else + { + sub_80CCB68(); + fade_screen(1, 0); + gTasks[taskId].func = Task_InitTeachyTvFromField; + } +} + +void InitTeachyTvFromBag(void) +{ + InitTeachyTvController(0, ReturnToBagFromKeyItem); +} + +void Task_InitTeachyTvFromField(u8 taskId) +{ + if (!gPaletteFade.active) + { + CleanupOverworldWindowsAndTilemaps(); + sub_80A1184(); + InitTeachyTvController(0, CB2_ReturnToField); + DestroyTask(taskId); + } +} + +void FieldUseFunc_SuperRepel(u8 taskId) +{ + if (VarGet(VAR_REPEL_STEP_COUNT) == 0) + { + PlaySE(SE_RU_GASYAN); + gTasks[taskId].func = sub_80A19E8; + } + else + // An earlier repel is still in effect + DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, sub_810A1F8); +} + +void sub_80A19E8(u8 taskId) +{ + if (!IsSEPlaying()) + { + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); + VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); + sub_80A1A44(); + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + } +} + +void sub_80A1A44(void) +{ + RemoveBagItem(gSpecialVar_ItemId, 1); + sub_8108DC8(ItemId_GetPocket(gSpecialVar_ItemId)); + sub_81089F4(ItemId_GetPocket(gSpecialVar_ItemId)); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gUnknown_841658C); +} + +void FieldUseFunc_BlackFlute(u8 taskId) +{ + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); + if (gSpecialVar_ItemId == ITEM_WHITE_FLUTE) + { + FlagSet(FLAG_WHITE_FLUTE_ACTIVE); + FlagClear(FLAG_BLACK_FLUTE_ACTIVE); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gUnknown_84165D2); + gTasks[taskId].func = sub_80A1B48; + gTasks[taskId].data[8] = 0; + } + else if (gSpecialVar_ItemId == ITEM_BLACK_FLUTE) + { + FlagSet(FLAG_BLACK_FLUTE_ACTIVE); + FlagClear(FLAG_WHITE_FLUTE_ACTIVE); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gUnknown_8416600); + gTasks[taskId].func = sub_80A1B48; + gTasks[taskId].data[8] = 0; + } +} + +void sub_80A1B48(u8 taskId) +{ + if (++gTasks[taskId].data[8] > 7) + { + PlaySE(SE_PN_ON); + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + } +} + +bool8 sub_80A1B8C(void) +{ + if (gMapHeader.escapeRope & 1) + return TRUE; + else + return FALSE; +} + +void ItemUseOutOfBattle_EscapeRope(u8 taskId) +{ + if (sub_80A1B8C() == TRUE) + { + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, gMapHeader.regionMapSectionId); + sItemUseOnFieldCB = sub_80A1C08; + sub_80A103C(taskId); + } + else + sub_80A1110(taskId, gTasks[taskId].data[3]); +} + +void sub_80A1C08(u8 taskId) +{ + sub_8054D70(); + sub_80A1A44(); + gTasks[taskId].data[0] = 0; + DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A1C44); +} + +void sub_80A1C44(u8 taskId) +{ + ResetInitialPlayerAvatarState(); + sub_8085620(); + DestroyTask(taskId); +} + +void FieldUseFunc_TownMap(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + sub_8108EE0(sub_80A1CAC); + sub_8108B50(taskId); + } + else + { + sub_80CCB68(); + fade_screen(1, 0); + gTasks[taskId].func = sub_80A1CC0; + } +} + +void sub_80A1CAC(void) +{ + sub_80BFF50(0, ReturnToBagFromKeyItem); +} + +void sub_80A1CC0(u8 taskId) +{ + if (!gPaletteFade.active) + { + CleanupOverworldWindowsAndTilemaps(); + sub_80A1184(); + sub_80BFF50(0, CB2_ReturnToField); + DestroyTask(taskId); + } +} + +void FieldUseFunc_FameChecker(u8 taskId) +{ + ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); + if (gTasks[taskId].data[3] == 0) + { + sub_8108EE0(sub_80A1D58); + sub_8108B50(taskId); + } + else + { + sub_80CCB68(); + fade_screen(1, 0); + gTasks[taskId].func = sub_80A1D68; + } +} + +void sub_80A1D58(void) +{ + UseFameChecker(ReturnToBagFromKeyItem); +} + +void sub_80A1D68(u8 taskId) +{ + if (!gPaletteFade.active) + { + CleanupOverworldWindowsAndTilemaps(); + sub_80A1184(); + UseFameChecker(CB2_ReturnToField); + DestroyTask(taskId); + } +} + +void FieldUseFunc_VsSeeker(u8 taskId) +{ + if ((gMapHeader.mapType != MAP_TYPE_ROUTE + && gMapHeader.mapType != MAP_TYPE_TOWN + && gMapHeader.mapType != MAP_TYPE_CITY) + || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(VIRIDIAN_FOREST) + && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(VIRIDIAN_FOREST) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(MT_EMBER_EXTERIOR) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(THREE_ISLAND_BERRY_FOREST) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SIX_ISLAND_PATTERN_BUSH)))) + { + sub_80A1110(taskId, gTasks[taskId].data[3]); + } + else + { + sItemUseOnFieldCB = Task_VsSeeker_0; + sub_80A103C(taskId); + } +} + +void sub_80A1E0C(u8 taskId) +{ + sub_80A112C(taskId); +} + +void BattleUseFunc_PokeBallEtc(u8 taskId) +{ + if (!IsPlayerPartyAndPokemonStorageFull()) + { + RemoveBagItem(gSpecialVar_ItemId, 1); + sub_8108CB4(); + sub_8108B50(taskId); + } + else + { + DisplayItemMessageInBag(taskId, 2, gUnknown_8416631, sub_810A1F8); + } +} + +void BattleUseFunc_PokeFlute(u8 taskId) +{ + sub_8108CB4(); + sub_8108B50(taskId); +} + +void BattleUseFunc_GuardSpec(u8 taskId) +{ + if (ExecuteTableBasedItemEffect(&gPlayerParty[gBattlerPartyIndexes[gBattlerInMenuId]], gSpecialVar_ItemId, gBattlerPartyIndexes[gBattlerInMenuId], 0)) + { + DisplayItemMessageInBag(taskId, 2, gUnknown_84169DC, sub_810A1F8); + } + else + { + gTasks[taskId].data[8] = 0; + gTasks[taskId].func = sub_80A1EF4; + } +} + +void sub_80A1EF4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (++data[8] > 7) + { + u16 itemId = gSpecialVar_ItemId; + PlaySE(SE_KAIFUKU); + RemoveBagItem(itemId, 1); + DisplayItemMessageInBag(taskId, 2, sub_8042DA4(itemId), sub_80A1F48); + } +} + +void sub_80A1F48(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + sub_8108CB4(); + sub_8108B50(taskId); + } +} + +void sub_80A1F78(u8 taskId) +{ + if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) + { + sub_813D934(sub_81279E0); + sub_813D808(taskId); + } + else + { + sub_8108EE0(sub_81279E0); + sub_8108B50(taskId); + } +} + +void BattleUseFunc_Medicine(u8 taskId) +{ + gUnknown_3005E98 = ItemUseCB_Medicine; + sub_80A1F78(taskId); +} + +void sub_80A1FD8(u8 taskId) +{ + gUnknown_3005E98 = sub_8126894; + sub_80A1F78(taskId); +} + +void BattleUseFunc_Ether(u8 taskId) +{ + gUnknown_3005E98 = sub_81256F8; + sub_80A1F78(taskId); +} + +void BattleUseFunc_PokeDoll(u8 taskId) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + { + sub_80A1A44(); + ItemUse_SetQuestLogEvent(4, 0, gSpecialVar_ItemId, 0xFFFF); + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_8108B50); + } + else + sub_80A1110(taskId, 0); +} + +void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) +{ + switch (GetItemEffectType(gSpecialVar_ItemId) - 1) + { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + gTasks[taskId].data[4] = 1; + FieldUseFunc_Medicine(taskId); + break; + case 9: + gTasks[taskId].data[4] = 1; + FieldUseFunc_SacredAsh(taskId); + break; + case 0: + gTasks[taskId].data[4] = 1; + FieldUseFunc_RareCandy(taskId); + break; + case 18: + case 19: + gTasks[taskId].data[4] = 1; + FieldUseFunc_PpUp(taskId); + break; + case 20: + gTasks[taskId].data[4] = 1; + FieldUseFunc_Ether(taskId); + break; + default: + gTasks[taskId].data[4] = 4; + FieldUseFunc_OakStopsYou(taskId); + } +} + +void ItemUseInBattle_EnigmaBerry(u8 taskId) +{ + switch (GetItemEffectType(gSpecialVar_ItemId)) + { + case 0: + BattleUseFunc_GuardSpec(taskId); + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 11: + BattleUseFunc_Medicine(taskId); + break; + case 21: + BattleUseFunc_Ether(taskId); + break; + default: + FieldUseFunc_OakStopsYou(taskId); + } +} + +void FieldUseFunc_OakStopsYou(u8 taskId) +{ + if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) + { + StringExpandPlaceholders(gStringVar4, gUnknown_8416425); + sub_813EB20(taskId, 4, gStringVar4, sub_813E2B8); + } + else + sub_80A1110(taskId, gTasks[taskId].data[3]); +} + +void ItemUse_SetQuestLogEvent(u8 eventId, struct Pokemon * pokemon, u16 itemId, u16 param) +{ + struct UnkStruct_ItemUseQuestLog + { + u16 itemId; + u16 unk2; + u16 species; + u16 param; + } * questLog = Alloc(sizeof(*questLog)); + + questLog->itemId = itemId; + questLog->param = param; + if (pokemon != NULL) + questLog->species = GetMonData(pokemon, MON_DATA_SPECIES2); + else + questLog->species = 0xFFFF; + sub_8113550(eventId, (void *)questLog); + Free(questLog); +} -- cgit v1.2.3 From a4f1de801550d35314b5ce51d54f30e4bdb8e767 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 21 Jun 2019 10:44:25 -0400 Subject: Some renaming --- src/item_use.c | 80 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) (limited to 'src/item_use.c') diff --git a/src/item_use.c b/src/item_use.c index 5413a600f..a7146b65e 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -73,8 +73,8 @@ void sub_80A1CAC(void); void sub_80A1CC0(u8 taskId); void sub_80A1D58(void); void sub_80A1D68(u8 taskId); -void sub_80A1EF4(u8 taskId); -void sub_80A1F48(u8 taskId); +void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId); +void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId); extern void (*const gUnknown_83E2954[])(void); @@ -87,15 +87,15 @@ void sub_80A0FBC(u8 taskId) itemType = ItemId_GetType(gSpecialVar_ItemId) - 1; if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) { - sub_813D934(gUnknown_83E2954[itemType]); - sub_813D808(taskId); + BerryPouch_SetExitCallback(gUnknown_83E2954[itemType]); + BerryPouch_StartFadeToExitCallback(taskId); } else { - sub_8108EE0(gUnknown_83E2954[itemType]); + ItemMenu_SetExitCallback(gUnknown_83E2954[itemType]); if (itemType == 1) sub_8108CB4(); - sub_8108B50(taskId); + ItemMenu_StartFadeToExitCallback(taskId); } } @@ -183,8 +183,8 @@ void sub_80A11C0(u8 taskId) void FieldUseFunc_OrangeMail(u8 taskId) { - sub_8108EE0(sub_80A1208); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(sub_80A1208); + ItemMenu_StartFadeToExitCallback(taskId); } void sub_80A1208(void) @@ -222,7 +222,7 @@ void ItemUseOnFieldCB_Bicycle(u8 taskId) { if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) PlaySE(SE_JITENSYA); - sub_80BD5C8(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE); + StartTransitionToFlipBikeState(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE); sub_80696C0(); ScriptContext2_Disable(); DestroyTask(taskId); @@ -360,7 +360,7 @@ void FieldUseFunc_Medicine(u8 taskId) void FieldUseFunc_Ether(u8 taskId) { - gUnknown_3005E98 = sub_81256F8; + gUnknown_3005E98 = ItemUseCB_PpRestore; sub_80A16D0(taskId); } @@ -392,8 +392,8 @@ void FieldUseFunc_TmCase(u8 taskId) { if (gTasks[taskId].data[3] == 0) { - sub_8108EE0(InitTMCaseFromBag); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(InitTMCaseFromBag); + ItemMenu_StartFadeToExitCallback(taskId); } else { @@ -423,8 +423,8 @@ void FieldUseFunc_BerryPouch(u8 taskId) { if (gTasks[taskId].data[3] == 0) { - sub_8108EE0(InitBerryPouchFromBag); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(InitBerryPouchFromBag); + ItemMenu_StartFadeToExitCallback(taskId); } else { @@ -452,8 +452,8 @@ void Task_InitBerryPouchFromField(u8 taskId) void BattleUseFunc_BerryPouch(u8 taskId) { - sub_8108EE0(InitBerryPouchFromBattle); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(InitBerryPouchFromBattle); + ItemMenu_StartFadeToExitCallback(taskId); } void InitBerryPouchFromBattle(void) @@ -466,8 +466,8 @@ void FieldUseFunc_TeachyTv(u8 taskId) ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) { - sub_8108EE0(InitTeachyTvFromBag); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(InitTeachyTvFromBag); + ItemMenu_StartFadeToExitCallback(taskId); } else { @@ -596,8 +596,8 @@ void FieldUseFunc_TownMap(u8 taskId) { if (gTasks[taskId].data[3] == 0) { - sub_8108EE0(sub_80A1CAC); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(sub_80A1CAC); + ItemMenu_StartFadeToExitCallback(taskId); } else { @@ -628,8 +628,8 @@ void FieldUseFunc_FameChecker(u8 taskId) ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) { - sub_8108EE0(sub_80A1D58); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(sub_80A1D58); + ItemMenu_StartFadeToExitCallback(taskId); } else { @@ -686,7 +686,7 @@ void BattleUseFunc_PokeBallEtc(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); sub_8108CB4(); - sub_8108B50(taskId); + ItemMenu_StartFadeToExitCallback(taskId); } else { @@ -697,7 +697,7 @@ void BattleUseFunc_PokeBallEtc(u8 taskId) void BattleUseFunc_PokeFlute(u8 taskId) { sub_8108CB4(); - sub_8108B50(taskId); + ItemMenu_StartFadeToExitCallback(taskId); } void BattleUseFunc_GuardSpec(u8 taskId) @@ -709,11 +709,11 @@ void BattleUseFunc_GuardSpec(u8 taskId) else { gTasks[taskId].data[8] = 0; - gTasks[taskId].func = sub_80A1EF4; + gTasks[taskId].func = Task_BattleUse_StatBooster_DelayAndPrint; } } -void sub_80A1EF4(u8 taskId) +void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -722,49 +722,49 @@ void sub_80A1EF4(u8 taskId) u16 itemId = gSpecialVar_ItemId; PlaySE(SE_KAIFUKU); RemoveBagItem(itemId, 1); - DisplayItemMessageInBag(taskId, 2, sub_8042DA4(itemId), sub_80A1F48); + DisplayItemMessageInBag(taskId, 2, Battle_PrintStatBoosterEffectMessage(itemId), Task_BattleUse_StatBooster_WaitButton_ReturnToBattle); } } -void sub_80A1F48(u8 taskId) +void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { sub_8108CB4(); - sub_8108B50(taskId); + ItemMenu_StartFadeToExitCallback(taskId); } } -void sub_80A1F78(u8 taskId) +void ItemUse_SwitchToPartyMenuInBattle(u8 taskId) { if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) { - sub_813D934(sub_81279E0); - sub_813D808(taskId); + BerryPouch_SetExitCallback(sub_81279E0); + BerryPouch_StartFadeToExitCallback(taskId); } else { - sub_8108EE0(sub_81279E0); - sub_8108B50(taskId); + ItemMenu_SetExitCallback(sub_81279E0); + ItemMenu_StartFadeToExitCallback(taskId); } } void BattleUseFunc_Medicine(u8 taskId) { gUnknown_3005E98 = ItemUseCB_Medicine; - sub_80A1F78(taskId); + ItemUse_SwitchToPartyMenuInBattle(taskId); } void sub_80A1FD8(u8 taskId) { gUnknown_3005E98 = sub_8126894; - sub_80A1F78(taskId); + ItemUse_SwitchToPartyMenuInBattle(taskId); } void BattleUseFunc_Ether(u8 taskId) { - gUnknown_3005E98 = sub_81256F8; - sub_80A1F78(taskId); + gUnknown_3005E98 = ItemUseCB_PpRestore; + ItemUse_SwitchToPartyMenuInBattle(taskId); } void BattleUseFunc_PokeDoll(u8 taskId) @@ -773,7 +773,7 @@ void BattleUseFunc_PokeDoll(u8 taskId) { sub_80A1A44(); ItemUse_SetQuestLogEvent(4, 0, gSpecialVar_ItemId, 0xFFFF); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_8108B50); + DisplayItemMessageInBag(taskId, 2, gStringVar4, ItemMenu_StartFadeToExitCallback); } else sub_80A1110(taskId, 0); @@ -853,7 +853,7 @@ void FieldUseFunc_OakStopsYou(u8 taskId) if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) { StringExpandPlaceholders(gStringVar4, gUnknown_8416425); - sub_813EB20(taskId, 4, gStringVar4, sub_813E2B8); + DisplayItemMessageInBerryPouch(taskId, 4, gStringVar4, sub_813E2B8); } else sub_80A1110(taskId, gTasks[taskId].data[3]); -- cgit v1.2.3