diff --git a/include/battle_pyramid_bag.h b/include/battle_pyramid_bag.h index e3d65ef90d..df111b939f 100644 --- a/include/battle_pyramid_bag.h +++ b/include/battle_pyramid_bag.h @@ -41,10 +41,10 @@ void sub_81C5924(void); void sub_81C59BC(void); void sub_81C4EFC(void); void GoToBattlePyramidBagMenu(u8 a0, void (*callback)(void)); -void sub_81C6714(u8 taskId); +void Task_CloseBattlePyramidBagMessage(u8 taskId); void TryStoreHeldItemsInPyramidBag(void); void ChooseItemsToTossFromPyramidBag(void); -void sub_81C5B14(u8 taskId); +void CloseBattlePyramidBagAndSetCallback(u8 taskId); void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId)); #endif // GUARD_BATTLE_PYRAMID_BAG_H diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index a5bb770355..49fcedc617 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -3,7 +3,7 @@ // field 0 masks #define ITEM0_X_ATTACK 0x0F -#define ITEM0_HIGH_CRIT 0x30 // For Dire Hit, works the same way as move Focus Energy. +#define ITEM0_DIRE_HIT 0x30 // Works the same way as the move Focus Energy. #define ITEM0_SACRED_ASH 0x40 #define ITEM0_INFATUATION 0x80 @@ -23,7 +23,7 @@ #define ITEM3_POISON 0x10 #define ITEM3_SLEEP 0x20 #define ITEM3_LEVEL_UP 0x40 -#define ITEM3_MIST 0x80 // For Guard Specs, works the same way as move Mist. +#define ITEM3_GUARD_SPEC 0x80 // Works the same way as the move Mist. #define ITEM3_STATUS_ALL (ITEM3_CONFUSION | ITEM3_PARALYSIS | ITEM3_FREEZE | ITEM3_BURN | ITEM3_POISON | ITEM3_SLEEP) diff --git a/include/event_scripts.h b/include/event_scripts.h index 9e47223bf4..c2716a214a 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -582,4 +582,9 @@ extern const u8 SecretBase_EventScript_ShrubUseSecretPower[]; // trainer hill extern const u8 TrainerHill_EventScript_TrainerBattle[]; +// Item Use +extern u8 BerryTree_EventScript_ItemUsePlantBerry[]; +extern u8 BerryTree_EventScript_ItemUseWailmerPail[]; +extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[]; + #endif // GUARD_EVENT_SCRIPTS_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 804bb5d6e9..f521737b76 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -63,5 +63,6 @@ bool32 sub_808D1B4(void); bool32 sub_808D1E8(void); void SetPlayerInvisibility(bool8 invisible); u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); +void StartFishing(u8 taskId); #endif // GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/fieldmap.h b/include/fieldmap.h index be5610a469..dc81d17665 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -42,7 +42,7 @@ void copy_map_tileset2_to_vram_2(struct MapLayout const *mapLayout); void copy_map_tileset1_to_vram(const struct MapLayout *); void copy_map_tileset2_to_vram(const struct MapLayout *); struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection); -struct MapConnection *sub_8088A8C(s16 x, s16 y); +struct MapConnection *GetConnectionAtCoords(s16 x, s16 y); void SpriteCB_PokeballGlow(struct Sprite *); void SpriteCB_PokecenterMonitor(struct Sprite *); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index e6421f37c9..3913b96d84 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -143,6 +143,16 @@ struct MapHeader /* 0x1B */ u8 battleType; }; +// Flags for gMapHeader.flags, as defined in the map_header_flags macro +#define MAP_ALLOW_BIKE (1 << 0) +#define MAP_ALLOW_ESCAPE_ROPE (1 << 1) +#define MAP_ALLOW_RUN (1 << 2) +#define MAP_SHOW_MAP_NAME (1 << 3) +#define UNUSED_MAP_FLAGS (1 << 4 | 1 << 5 | 1 << 6 | 1 << 7) + +#define SHOW_MAP_NAME_ENABLED ((gMapHeader.flags & (MAP_SHOW_MAP_NAME | UNUSED_MAP_FLAGS)) == MAP_SHOW_MAP_NAME) + + struct EventObject { /*0x00*/ u32 active:1; diff --git a/include/item_menu.h b/include/item_menu.h index 508f94815d..089bff6cf3 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -74,7 +74,7 @@ void QuizLadyOpenBagMenu(void); void ApprenticeOpenBagMenu(void); void sub_81AABB0(void); void SetInitialScrollAndCursorPositions(u8 pocketId); -void bag_menu_mail_related(void); +void CB2_ReturnToBagMenuPocket(void); void CB2_BagMenuFromStartMenu(void); u8 GetItemListPosition(u8 pocketId); bool8 UseRegisteredKeyItemOnField(void); @@ -84,9 +84,13 @@ void DoWallyTutorialBagMenu(void); void ResetBagScrollPositions(void); void ChooseBerrySetCallback(void (*callback)(void)); void CB2_ChooseBerry(void); -void unknown_ItemMenu_Confirm(u8 taskId); +void Task_FadeAndCloseBagMenu(u8 taskId); void BagMenu_YesNo(u8, u8, const struct YesNoFuncTable*); -void sub_81AB9A8(u8 pocketId); +void BagMenu_InitListsMenu(u8 taskId); +void UpdatePocketItemList(u8 pocketId); +void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u8 taskId)); +void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback); + #endif //GUARD_item_menu_H diff --git a/include/item_use.h b/include/item_use.h index 5ce47a9bc3..0cb76e7d41 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -3,27 +3,13 @@ void ItemUseOutOfBattle_Mail(u8); void ItemUseOutOfBattle_Bike(u8); -void ItemUseOnFieldCB_Bike(u8); void ItemUseOutOfBattle_Rod(u8); -void ItemUseOnFieldCB_Rod(u8); void ItemUseOutOfBattle_Itemfinder(u8); -void ItemUseOnFieldCB_Itemfinder(u8); -void RunItemfinderResults(u8); -void ExitItemfinder(u8); -bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); -void sub_80C9720(u8); -void sub_80C9838(u8, s16, s16); -u8 GetPlayerDirectionTowardsHiddenItem(s16, s16); -void SetPlayerDirectionTowardsItem(u8); -void DisplayItemRespondingMessageAndExitItemfinder(u8); -void RotatePlayerAndExitItemfinder(u8); void ItemUseOutOfBattle_PokeblockCase(u8); void ItemUseOutOfBattle_CoinCase(u8); void ItemUseOutOfBattle_PowderJar(u8); void ItemUseOutOfBattle_SSTicket(u8); -void sub_80C9D00(u8); void ItemUseOutOfBattle_WailmerPail(u8); -void sub_80C9D74(u8); void ItemUseOutOfBattle_Medicine(u8); void ItemUseOutOfBattle_ReduceEV(u8); void ItemUseOutOfBattle_SacredAsh(u8); @@ -31,25 +17,21 @@ void ItemUseOutOfBattle_PPRecovery(u8); void ItemUseOutOfBattle_PPUp(u8); void ItemUseOutOfBattle_RareCandy(u8); void ItemUseOutOfBattle_TMHM(u8); -void sub_80C9EE4(u8); -void sub_80C9F10(u8); -void sub_80C9F80(u8); -void sub_80C9FC0(u8); void ItemUseOutOfBattle_Repel(u8); -void ItemUseOutOfBattle_BlackWhiteFlute(u8); -void task08_080A1C44(u8); -u8 CanUseEscapeRopeOnCurrMap(void); void ItemUseOutOfBattle_EscapeRope(u8); +void ItemUseOutOfBattle_BlackWhiteFlute(u8); void ItemUseOutOfBattle_EvolutionStone(u8); +void ItemUseOutOfBattle_Berry(u8); +void ItemUseOutOfBattle_EnigmaBerry(u8); +void ItemUseOutOfBattle_CannotUse(u8); void ItemUseInBattle_PokeBall(u8); void ItemUseInBattle_StatIncrease(u8); void ItemUseInBattle_Medicine(u8); void ItemUseInBattle_PPRecovery(u8); void ItemUseInBattle_Escape(u8); -void ItemUseOutOfBattle_EnigmaBerry(u8); void ItemUseInBattle_EnigmaBerry(u8); -void ItemUseOutOfBattle_CannotUse(u8); +void Task_UseDigEscapeRopeOnField(u8 taskId); +u8 CanUseEscapeRopeOnCurrMap(void); u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); -void ItemUseOutOfBattle_Berry(u8); #endif // GUARD_ITEM_USE_H diff --git a/include/menu.h b/include/menu.h index c5cef202ce..56865bcd9d 100644 --- a/include/menu.h +++ b/include/menu.h @@ -28,7 +28,6 @@ void DrawDialogueFrame(u8 windowId, bool8 copyToVram); void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram); u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 fgColor, u8 bgColor, u8 shadowColor); void PrintPlayerNameOnWindow(u8, const u8*, u16, u16); -void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback); void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram); void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram); void DisplayYesNoMenuDefaultYes(void); diff --git a/include/pokemon.h b/include/pokemon.h index 316fbc2b3a..2e28ae0f55 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -342,7 +342,7 @@ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e); bool8 HealStatusConditions(struct Pokemon *mon, u32 battlePartyId, u32 healMask, u8 battlerId); u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit); -u8 *sub_806CF78(u16 itemId); +u8 *UseStatIncreaseItem(u16 itemId); u8 GetNature(struct Pokemon *mon); u8 GetNatureFromPersonality(u32 personality); u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem); diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 6ef3591502..32f9620b7d 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -787,9 +787,9 @@ static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u return AI_ITEM_HEAL_HP; else if (itemEffect[3] & ITEM3_STATUS_ALL) return AI_ITEM_CURE_CONDITION; - else if (itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0) + else if (itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0) return AI_ITEM_X_STAT; - else if (itemEffect[3] & ITEM3_MIST) + else if (itemEffect[3] & ITEM3_GUARD_SPEC) return AI_ITEM_GUARD_SPECS; else return AI_ITEM_NOT_RECOGNIZABLE; @@ -907,7 +907,7 @@ static bool8 ShouldUseItem(void) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x8; if (itemEffects[2] & ITEM2_X_ACCURACY) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x20; - if (itemEffects[0] & ITEM0_HIGH_CRIT) + if (itemEffects[0] & ITEM0_DIRE_HIT) *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x80; shouldUse = TRUE; break; diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index bdd1b14621..7c650800b9 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -67,7 +67,7 @@ static void sub_81C700C(void); static void sub_81C6E98(void); static void sub_81C6F20(void); static void sub_81C6404(void); -static void sub_81C6E1C(void); +static void CloseBattlePyramidBagTextWindow(void); static bool8 sub_81C5238(void); static bool8 sub_81C5078(void); static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId); @@ -809,7 +809,7 @@ static void sub_81C5AB8(u8 y, u8 arg1) PrintOnWindow_Font1(0, gText_SelectorArrow2, 0, y, 0, 0, 0, arg1); } -void sub_81C5B14(u8 taskId) +void CloseBattlePyramidBagAndSetCallback(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = sub_81C5B4C; @@ -862,7 +862,7 @@ static void Task_HandlePyramidBagInput(u8 taskId) case LIST_CANCEL: PlaySE(SE_SELECT); gSpecialVar_ItemId = 0; - sub_81C5B14(taskId); + CloseBattlePyramidBagAndSetCallback(taskId); break; default: PlaySE(SE_SELECT); @@ -1043,7 +1043,7 @@ static void BagAction_UseOnField(u8 taskId) || ItemIsMail(gSpecialVar_ItemId) == TRUE) { sub_81C61A8(); - DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714); + DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage); } else if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) { @@ -1203,7 +1203,7 @@ static void BagAction_Give(u8 taskId) else if (!ItemId_GetImportance(gSpecialVar_ItemId)) { gPyramidBagResources->callback2 = CB2_ChooseMonToGiveItem; - sub_81C5B14(taskId); + CloseBattlePyramidBagAndSetCallback(taskId); } else { @@ -1223,15 +1223,15 @@ static void sub_81C66EC(u8 taskId) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sub_81C6714(taskId); + Task_CloseBattlePyramidBagMessage(taskId); } } -void sub_81C6714(u8 taskId) +void Task_CloseBattlePyramidBagMessage(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_81C6E1C(); + CloseBattlePyramidBagTextWindow(); PrintItemDescription(data[1]); sub_81C5A98(data[0], 0); SetTaskToMainPyramidBagInputHandler(taskId); @@ -1242,7 +1242,7 @@ static void sub_81C674C(u8 taskId) if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId)) DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC); else if (!ItemId_GetImportance(gSpecialVar_ItemId)) - sub_81C5B14(taskId); + CloseBattlePyramidBagAndSetCallback(taskId); else sub_81C66AC(taskId); } @@ -1462,7 +1462,7 @@ void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback schedule_bg_copy_tilemap_to_vram(1); } -static void sub_81C6E1C(void) +static void CloseBattlePyramidBagTextWindow(void) { ClearDialogWindowAndFrameToTransparent(2, FALSE); // This ClearWindowTilemap call is redundant, since ClearDialogWindowAndFrameToTransparent already calls it. diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 873d01dc75..89175c1bf7 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -527,7 +527,7 @@ static void Task_CloseBerryTagScreen(u8 taskId) DestroyFlavorCircleSprites(); Free(sBerryTag); FreeAllWindowBuffers(); - SetMainCallback2(bag_menu_mail_related); + SetMainCallback2(CB2_ReturnToBagMenuPocket); DestroyTask(taskId); } } diff --git a/src/bike.c b/src/bike.c index fad61ffabb..7397fed401 100644 --- a/src/bike.c +++ b/src/bike.c @@ -1056,7 +1056,7 @@ void Bike_HandleBumpySlopeJump(void) bool32 IsRunningDisallowed(u8 metatile) { - if (!(gMapHeader.flags & 4) || IsRunningDisallowedByMetatile(metatile) == TRUE) + if (!(gMapHeader.flags & MAP_ALLOW_RUN) || IsRunningDisallowedByMetatile(metatile) == TRUE) return TRUE; else return FALSE; diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 2c153b0ef8..698d97a436 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -236,7 +236,7 @@ const u8 gItemEffect_PPMax[9] = { }; const u8 gItemEffect_GuardSpec[8] = { - [3] = ITEM3_MIST, + [3] = ITEM3_GUARD_SPEC, [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, [6] = 1, [7] = 1, diff --git a/src/decoration.c b/src/decoration.c index df28e3b77b..d09f238d79 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -14,6 +14,7 @@ #include "graphics.h" #include "international_string_util.h" #include "item_icon.h" +#include "item_menu.h" #include "list_menu.h" #include "main.h" #include "menu.h" diff --git a/src/fieldmap.c b/src/fieldmap.c index f595803ff6..21bbaa8f86 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -859,7 +859,7 @@ int sub_8088A4C(struct MapConnection *connection, int x, int y) return FALSE; } -struct MapConnection *sub_8088A8C(s16 x, s16 y) +struct MapConnection *GetConnectionAtCoords(s16 x, s16 y) { int count; struct MapConnection *connection; diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c index b39d25182b..7f10e126ef 100644 --- a/src/fldeff_dig.c +++ b/src/fldeff_dig.c @@ -57,7 +57,7 @@ static void sub_8135780(void) } else { - taskId = CreateTask(task08_080A1C44, 8); + taskId = CreateTask(Task_UseDigEscapeRopeOnField, 8); gTasks[taskId].data[0] = 0; } } diff --git a/src/item_menu.c b/src/item_menu.c index 6b0226188c..97ef4f933a 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -136,7 +136,7 @@ void ItemMenu_Give(u8 taskId); void ItemMenu_Cancel(u8 taskId); void ItemMenu_UseInBattle(u8 taskId); void ItemMenu_CheckTag(u8 taskId); -void unknown_ItemMenu_Confirm(u8 taskId); +void Task_FadeAndCloseBagMenu(u8 taskId); void unknown_ItemMenu_Show(u8 taskId); void unknown_ItemMenu_Give2(u8 taskId); void unknown_ItemMenu_Confirm2(u8 taskId); @@ -216,7 +216,7 @@ const struct MenuAction sItemMenuActions[] = { {gMenuText_Walk, ItemMenu_UseOutOfBattle}, {gMenuText_Deselect, ItemMenu_Register}, {gMenuText_CheckTag, ItemMenu_CheckTag}, - {gMenuText_Confirm, unknown_ItemMenu_Confirm}, + {gMenuText_Confirm, Task_FadeAndCloseBagMenu}, {gMenuText_Show, unknown_ItemMenu_Show}, {gMenuText_Give2, unknown_ItemMenu_Give2}, {gMenuText_Confirm, unknown_ItemMenu_Confirm2}, @@ -241,7 +241,7 @@ const TaskFunc gUnknown_08614054[] = { unknown_item_menu_type, item_menu_type_2, DisplaySellItemAskString, - unknown_ItemMenu_Confirm, + Task_FadeAndCloseBagMenu, unknown_item_menu_type, DisplayDepositItemAskString, unknown_item_menu_type, @@ -942,7 +942,7 @@ void FreeBagItemListBuffers(void) Free(gBagMenu); } -void unknown_ItemMenu_Confirm(u8 taskId) +void Task_FadeAndCloseBagMenu(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = TaskCloseBagMenu_2; @@ -966,7 +966,7 @@ void TaskCloseBagMenu_2(u8 taskId) } } -void sub_81AB9A8(u8 pocketId) +void UpdatePocketItemList(u8 pocketId) { u16 i; struct BagPocket *pocket = &gBagPockets[pocketId]; @@ -997,7 +997,7 @@ void sub_81ABA6C(void) { u8 i; for (i = 0; i < POCKETS_COUNT; i++) - sub_81AB9A8(i); + UpdatePocketItemList(i); } void SetInitialScrollAndCursorPositions(u8 pocketId) @@ -1041,7 +1041,7 @@ void BagMenu_InitListsMenu(u8 taskId) u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; bag_menu_RemoveBagItem_message_window(4); DestroyListMenuTask(data[0], scrollPos, cursorPos); - sub_81AB9A8(gBagPositionStruct.pocket); + UpdatePocketItemList(gBagPositionStruct.pocket); SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); @@ -1117,7 +1117,7 @@ void Task_BagMenu(u8 taskId) } PlaySE(SE_SELECT); gSpecialVar_ItemId = select; - gTasks[taskId].func = unknown_ItemMenu_Confirm; + gTasks[taskId].func = Task_FadeAndCloseBagMenu; break; default: // A_BUTTON PlaySE(SE_SELECT); @@ -1744,7 +1744,7 @@ void Task_ActuallyToss(u8 taskId) PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, data[8]); DestroyListMenuTask(data[0], scrollPos, cursorPos); - sub_81AB9A8(gBagPositionStruct.pocket); + UpdatePocketItemList(gBagPositionStruct.pocket); SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); @@ -1784,7 +1784,7 @@ void ItemMenu_Give(u8 taskId) else { gBagMenu->mainCallback2 = CB2_ChooseMonToGiveItem; - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } } else @@ -1817,7 +1817,7 @@ void sub_81AD350(u8 taskId) void ItemMenu_CheckTag(u8 taskId) { gBagMenu->mainCallback2 = DoBerryTagScreen; - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } void ItemMenu_Cancel(u8 taskId) @@ -1841,7 +1841,7 @@ void ItemMenu_UseInBattle(u8 taskId) } } -void bag_menu_mail_related(void) +void CB2_ReturnToBagMenuPocket(void) { GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL); } @@ -1860,7 +1860,7 @@ void item_menu_type_2(u8 taskId) } else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) { - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } else { @@ -1873,11 +1873,13 @@ void item_menu_type_b(u8 taskId) if (ItemIsMail(gSpecialVar_ItemId) == TRUE) DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350); else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) - gTasks[taskId].func = unknown_ItemMenu_Confirm; + gTasks[taskId].func = Task_FadeAndCloseBagMenu; else BagMenu_PrintItemCantBeHeld(taskId); } +#define tUsingRegisteredKeyItem data[3] + bool8 UseRegisteredKeyItemOnField(void) { u8 taskId; @@ -1896,16 +1898,20 @@ bool8 UseRegisteredKeyItemOnField(void) sub_808BCF4(); gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem; taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8); - gTasks[taskId].data[3] = 1; + gTasks[taskId].tUsingRegisteredKeyItem = TRUE; return TRUE; } else + { gSaveBlock1Ptr->registeredItem = ITEM_NONE; + } } ScriptContext1_SetupScript(EventScript_SelectWithoutRegisteredItem); return TRUE; } +#undef tUsingRegisteredKeyItem + void DisplaySellItemAskString(u8 taskId) { s16* data = gTasks[taskId].data; @@ -2012,7 +2018,7 @@ void sub_81AD8C8(u8 taskId) RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); DestroyListMenuTask(data[0], scrollPos, cursorPos); - sub_81AB9A8(gBagPositionStruct.pocket); + UpdatePocketItemList(gBagPositionStruct.pocket); SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); @@ -2186,7 +2192,7 @@ void Task_WallyTutorialBagMenu(u8 taskId) BagMenu_RemoveSomeWindow(); DestroyListMenuTask(data[0], 0, 0); RestoreBagAfterWallyTutorial(); - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); break; default: data[8]++; @@ -2200,7 +2206,7 @@ void unknown_ItemMenu_Show(u8 taskId) gSpecialVar_0x8005 = gSpecialVar_ItemId; gSpecialVar_Result = 1; BagMenu_RemoveSomeWindow(); - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } void CB2_ApprenticeExitBagMenu(void) @@ -2214,7 +2220,7 @@ void unknown_ItemMenu_Give2(u8 taskId) RemoveBagItem(gSpecialVar_ItemId, 1); gSpecialVar_Result = 1; BagMenu_RemoveSomeWindow(); - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } void CB2_FavorLadyExitBagMenu(void) @@ -2227,7 +2233,7 @@ void unknown_ItemMenu_Confirm2(u8 taskId) { gSpecialVar_Result = 1; BagMenu_RemoveSomeWindow(); - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } void CB2_QuizLadyExitBagMenu(void) diff --git a/src/item_use.c b/src/item_use.c index 7a410aa7da..b352079cf8 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -10,6 +10,7 @@ #include "data.h" #include "event_data.h" #include "event_object_movement.h" +#include "event_scripts.h" #include "fieldmap.h" #include "field_effect.h" #include "field_player_avatar.h" @@ -43,49 +44,40 @@ #include "constants/vars.h" #include "event_obj_lock.h" -extern u8 BerryTree_EventScript_ItemUsePlantBerry[]; -extern u8 BerryTree_EventScript_ItemUseWailmerPail[]; -extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[]; - -void SetUpItemUseCallback(u8 taskId); -void MapPostLoadHook_UseItem(void); -void sub_80AF6D4(void); -void Task_CallItemUseOnFieldCallback(u8 taskId); -void BagMenu_InitListsMenu(u8 taskId); -void ItemUseOnFieldCB_Bike(u8 taskId); -void ItemUseOnFieldCB_Rod(u8 taskId); -void ItemUseOnFieldCB_Itemfinder(u8 taskId); -void sub_80FD504(u8 taskId); -void sub_80FD5CC(u8 taskId); -void sub_80FDA94(u8 taskId); -void sub_80FDADC(u8 taskId); -void sub_80FD7C8(u8 taskId); -void sub_80FDC00(u8 taskId); -void ItemUseOnFieldCB_Berry(u8 taskId); -void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId); -void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId); +static void SetUpItemUseCallback(u8 taskId); +static void FieldCB_UseItemOnField(void); +static void Task_CallItemUseOnFieldCallback(u8 taskId); +static void Task_UseItemfinder(u8 taskId); +static void Task_CloseItemfinderMessage(u8 taskId); +static void Task_HiddenItemNearby(u8 taskId); +static void Task_StandingOnHiddenItem(u8 taskId); +static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); +static u8 GetDirectionToHiddenItem(s16 distanceX, s16 distanceY); +static void PlayerFaceHiddenItem(u8 a); +static void CheckForHiddenItemsInMapConnection(u8 taskId); +static void sub_80FDC00(u8 taskId); +static void ItemUseOnFieldCB_Bike(u8 taskId); +static void ItemUseOnFieldCB_Rod(u8); +static void ItemUseOnFieldCB_Itemfinder(u8); +static void ItemUseOnFieldCB_Berry(u8 taskId); +static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId); +static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId); +static bool8 TryToWaterSudowoodo(void); static void BootUpSoundTMHM(u8 taskId); static void Task_ShowTMHMContainedMessage(u8 taskId); static void UseTMHMYesNo(u8 taskId); static void UseTMHM(u8 taskId); -void sub_80FE124(u8 taskId); -void sub_80FE164(u8 taskId); - -void DisplayItemMessage(u8 taskId, u8 a, const u8* str, void(*callback)(u8 taskId)); -void DisplayItemMessageOnField(u8 taskId, const u8* str, void(*callback)(u8 taskId)); -void sub_81C6714(u8 taskId); -void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId); -void StartFishing(u8 a); -bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); -u8 sub_80FD9B0(s16 a, s16 b); -void sub_80FDA24(u8 a); -void sub_80FD8E0(u8 taskId, s16 x, s16 y); -void sub_80FDBEC(void); -bool8 TryToWaterSudowoodo(void); -void ItemUseOutOfBattle_CannotUse(u8 taskId); +static void Task_StartUseRepel(u8 taskId); +static void Task_UseRepel(u8 taskId); +static void Task_CloseCantUseKeyItemMessage(u8 taskId); +static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 x, s16 y); +static void CB2_OpenPokeblockCaseOnField(void); // EWRAM variables -EWRAM_DATA static void(*gUnknown_0203A0F4)(u8 taskId) = NULL; +EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL; + +// Below is set TRUE by UseRegisteredKeyItemOnField +#define tUsingRegisteredKeyItem data[3] // .rodata @@ -96,7 +88,7 @@ static const MainCallback sItemUseCallbacks[] = NULL, }; -static const u8 gUnknown_085920E4[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST}; +static const u8 sClockwiseDirections[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST}; static const struct YesNoFuncTable sUseTMHMYesNoFuncTable = { @@ -106,7 +98,7 @@ static const struct YesNoFuncTable sUseTMHMYesNoFuncTable = // .text -void SetUpItemUseCallback(u8 taskId) +static void SetUpItemUseCallback(u8 taskId) { u8 type; if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY) @@ -116,39 +108,39 @@ void SetUpItemUseCallback(u8 taskId) if (!InBattlePyramid()) { gBagMenu->mainCallback2 = sItemUseCallbacks[type]; - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } else { gPyramidBagResources->callback2 = sItemUseCallbacks[type]; - sub_81C5B14(taskId); + CloseBattlePyramidBagAndSetCallback(taskId); } } -void SetUpItemUseOnFieldCallback(u8 taskId) +static void SetUpItemUseOnFieldCallback(u8 taskId) { - if (gTasks[taskId].data[3] != 1) + if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE) { - gFieldCallback = MapPostLoadHook_UseItem; + gFieldCallback = FieldCB_UseItemOnField; SetUpItemUseCallback(taskId); } else - gUnknown_0203A0F4(taskId); + sItemUseOnFieldCB(taskId); } -void MapPostLoadHook_UseItem(void) +static void FieldCB_UseItemOnField(void) { FadeInFromBlack(); CreateTask(Task_CallItemUseOnFieldCallback, 8); } -void Task_CallItemUseOnFieldCallback(u8 taskId) +static void Task_CallItemUseOnFieldCallback(u8 taskId) { if (IsWeatherNotFadingIn() == 1) - gUnknown_0203A0F4(taskId); + sItemUseOnFieldCB(taskId); } -void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, const u8 *str) +static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, const u8 *str) { StringExpandPlaceholders(gStringVar4, str); if (!isUsingRegisteredKeyItemOnField) @@ -156,23 +148,23 @@ void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnFiel if (!InBattlePyramid()) DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); else - DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714); + DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage); } else - DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField); + DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage); } -void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField) +static void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField) { DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_DadsAdvice); } -void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField) +static void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField) { DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_CantDismountBike); } -void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId) +static void Task_CloseCantUseKeyItemMessage(u8 taskId) { ClearDialogWindowAndFrame(0, 1); DestroyTask(taskId); @@ -190,17 +182,18 @@ u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) return 0; } -void sub_80FD254(void) +// Mail in the bag menu can't have a message but it can be checked (view the mail background, no message) +static void CB2_CheckMail(void) { struct MailStruct mail; mail.itemId = gSpecialVar_ItemId; - ReadMail(&mail, bag_menu_mail_related, 0); + ReadMail(&mail, CB2_ReturnToBagMenuPocket, 0); } void ItemUseOutOfBattle_Mail(u8 taskId) { - gBagMenu->mainCallback2 = sub_80FD254; - unknown_ItemMenu_Confirm(taskId); + gBagMenu->mainCallback2 = CB2_CheckMail; + Task_FadeAndCloseBagMenu(taskId); } void ItemUseOutOfBattle_Bike(u8 taskId) @@ -212,20 +205,20 @@ void ItemUseOutOfBattle_Bike(u8 taskId) PlayerGetDestCoords(&coordsX, &coordsY); behavior = MapGridGetMetatileBehaviorAt(coordsX, coordsY); if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE || MetatileBehavior_IsVerticalRail(behavior) == TRUE || MetatileBehavior_IsHorizontalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE) - DisplayCannotDismountBikeMessage(taskId, data[3]); + DisplayCannotDismountBikeMessage(taskId, tUsingRegisteredKeyItem); else { if (Overworld_IsBikingAllowed() == TRUE && IsBikingDisallowedByPlayer() == 0) { - gUnknown_0203A0F4 = ItemUseOnFieldCB_Bike; + sItemUseOnFieldCB = ItemUseOnFieldCB_Bike; SetUpItemUseOnFieldCallback(taskId); } else - DisplayDadsAdviceCannotUseItemMessage(taskId, data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, tUsingRegisteredKeyItem); } } -void ItemUseOnFieldCB_Bike(u8 taskId) +static void ItemUseOnFieldCB_Bike(u8 taskId) { if (!ItemId_GetSecondaryId(gSpecialVar_ItemId)) GetOnOffBike(2); @@ -236,7 +229,7 @@ void ItemUseOnFieldCB_Bike(u8 taskId) DestroyTask(taskId); } -bool32 CanFish(void) +static bool32 CanFish(void) { s16 x, y; u16 tileBehavior; @@ -270,14 +263,14 @@ void ItemUseOutOfBattle_Rod(u8 taskId) { if (CanFish() == TRUE) { - gUnknown_0203A0F4 = ItemUseOnFieldCB_Rod; + sItemUseOnFieldCB = ItemUseOnFieldCB_Rod; SetUpItemUseOnFieldCallback(taskId); } else - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } -void ItemUseOnFieldCB_Rod(u8 taskId) +static void ItemUseOnFieldCB_Rod(u8 taskId) { StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId)); DestroyTask(taskId); @@ -285,56 +278,65 @@ void ItemUseOnFieldCB_Rod(u8 taskId) void ItemUseOutOfBattle_Itemfinder(u8 var) { - IncrementGameStat(0x27); - gUnknown_0203A0F4 = ItemUseOnFieldCB_Itemfinder; + IncrementGameStat(GAME_STAT_USED_ITEMFINDER); + sItemUseOnFieldCB = ItemUseOnFieldCB_Itemfinder; SetUpItemUseOnFieldCallback(var); } -void ItemUseOnFieldCB_Itemfinder(u8 taskId) +static void ItemUseOnFieldCB_Itemfinder(u8 taskId) { if (ItemfinderCheckForHiddenItems(gMapHeader.events, taskId) == TRUE) - gTasks[taskId].func = sub_80FD504; + gTasks[taskId].func = Task_UseItemfinder; else - DisplayItemMessageOnField(taskId, gText_ItemFinderNothing, sub_80FD5CC); + DisplayItemMessageOnField(taskId, gText_ItemFinderNothing, Task_CloseItemfinderMessage); } -void sub_80FD504(u8 taskId) +// Define itemfinder task data +#define tItemDistanceX data[0] +#define tItemDistanceY data[1] +#define tItemFound data[2] +#define tCounter data[3] // Used to count delay between beeps and rotations during player spin +#define tItemfinderBeeps data[4] +#define tFacingDir data[5] + +static void Task_UseItemfinder(u8 taskId) { u8 playerDir; u8 playerDirToItem; u8 i; s16* data = gTasks[taskId].data; - if (!data[3]) + if (tCounter == 0) { - if (data[4] == 4) + if (tItemfinderBeeps == 4) { - playerDirToItem = sub_80FD9B0(data[0], data[1]); - if (playerDirToItem) + playerDirToItem = GetDirectionToHiddenItem(tItemDistanceX, tItemDistanceY); + if (playerDirToItem != DIR_NONE) { - sub_80FDA24(gUnknown_085920E4[playerDirToItem - 1]); - gTasks[taskId].func = sub_80FDA94; + PlayerFaceHiddenItem(sClockwiseDirections[playerDirToItem - 1]); + gTasks[taskId].func = Task_HiddenItemNearby; } else { + // Player is standing on hidden item playerDir = GetPlayerFacingDirection(); - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sClockwiseDirections); i++) { - if (playerDir == gUnknown_085920E4[i]) - data[5] = (i + 1) & 3; + if (playerDir == sClockwiseDirections[i]) + tFacingDir = (i + 1) & 3; } - gTasks[taskId].func = sub_80FDADC; - data[3] = 0; - data[2] = 0; + gTasks[taskId].func = Task_StandingOnHiddenItem; + tCounter = 0; + tItemFound = 0; } return; } PlaySE(SE_DAUGI); - data[4]++; + tItemfinderBeeps++; } - data[3] = (data[3] + 1) & 0x1F; + tCounter = (tCounter + 1) & 0x1F; } -void sub_80FD5CC(u8 taskId) +static void Task_CloseItemfinderMessage(u8 taskId) { ClearDialogWindowAndFrame(0, 1); ScriptUnfreezeEventObjects(); @@ -342,34 +344,36 @@ void sub_80FD5CC(u8 taskId) DestroyTask(taskId); } -bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId) +static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId) { - int distanceX, distanceY; - s16 x, y, i, newDistanceX, newDistanceY; - PlayerGetDestCoords(&x, &y); - gTasks[taskId].data[2] = FALSE; + int itemX, itemY; + s16 playerX, playerY, i, distanceX, distanceY; + PlayerGetDestCoords(&playerX, &playerY); + gTasks[taskId].tItemFound = FALSE; + for (i = 0; i < events->bgEventCount; i++) { + // Check if there are any hidden items on the current map that haven't been picked up if (events->bgEvents[i].kind == BG_EVENT_HIDDEN_ITEM && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START)) { - distanceX = (u16)events->bgEvents[i].x + 7; - newDistanceX = distanceX - x; - distanceY = (u16)events->bgEvents[i].y + 7; - newDistanceY = distanceY - y; + itemX = (u16)events->bgEvents[i].x + 7; + distanceX = itemX - playerX; + itemY = (u16)events->bgEvents[i].y + 7; + distanceY = itemY - playerY; - if ((u16)(newDistanceX + 7) < 15 && (newDistanceY >= -5) && (newDistanceY < 6)) - sub_80FD8E0(taskId, newDistanceX, newDistanceY); + if ((u16)(distanceX + 7) < 15 && (distanceY >= -5) && (distanceY < 6)) + SetDistanceOfClosestHiddenItem(taskId, distanceX, distanceY); } } - sub_80FD7C8(taskId); - if (gTasks[taskId].data[2] == TRUE) + CheckForHiddenItemsInMapConnection(taskId); + if (gTasks[taskId].tItemFound == TRUE) return TRUE; else return FALSE; } -bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y) +static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, s16 y) { u8 bgEventCount = events->bgEventCount; struct BgEvent *bgEvent = events->bgEvents; @@ -388,7 +392,7 @@ bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y) return FALSE; } -bool8 sub_80FD730(struct MapConnection *connection, int x, int y) +static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, int x, int y) { u16 localX, localY; @@ -399,7 +403,7 @@ bool8 sub_80FD730(struct MapConnection *connection, int x, int y) switch (connection->direction) { - // same weird temp variable behavior seen in sub_80FD6D4 + // same weird temp variable behavior seen in IsHiddenItemPresentAtCoords case 2: localOffset = connection->offset + 7; localX = x - localOffset; @@ -427,136 +431,145 @@ bool8 sub_80FD730(struct MapConnection *connection, int x, int y) default: return FALSE; } - return sub_80FD6D4(mapHeader->events, localX, localY); + return IsHiddenItemPresentAtCoords(mapHeader->events, localX, localY); } -void sub_80FD7C8(u8 taskId) +static void CheckForHiddenItemsInMapConnection(u8 taskId) { + s16 playerX, playerY; s16 x, y; - s16 curX, curY; s16 width = gMapHeader.mapLayout->width + 7; s16 height = gMapHeader.mapLayout->height + 7; s16 var1 = 7; s16 var2 = 7; - PlayerGetDestCoords(&x, &y); + PlayerGetDestCoords(&playerX, &playerY); - for (curX = x - 7; curX <= x + 7; curX++) + for (x = playerX - 7; x <= playerX + 7; x++) { - for (curY = y - 5; curY <= y + 5; curY++) + for (y = playerY - 5; y <= playerY + 5; y++) { - if (var1 > curX - || curX >= width - || var2 > curY - || curY >= height) + if (var1 > x + || x >= width + || var2 > y + || y >= height) { - struct MapConnection *conn = sub_8088A8C(curX, curY); - if (conn && sub_80FD730(conn, curX, curY) == TRUE) - sub_80FD8E0(taskId, curX - x, curY - y); + struct MapConnection *conn = GetConnectionAtCoords(x, y); + if (conn && IsHiddenItemPresentInConnection(conn, x, y) == TRUE) + SetDistanceOfClosestHiddenItem(taskId, x - playerX, y - playerY); } } } } -void sub_80FD8E0(u8 taskId, s16 x, s16 y) +static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 itemDistanceX, s16 itemDistanceY) { s16 *data = gTasks[taskId].data; - s16 var1, var2, var3, var4; + s16 oldItemAbsX, oldItemAbsY, newItemAbsX, newItemAbsY; - if (data[2] == FALSE) + if (tItemFound == FALSE) { - data[0] = x; - data[1] = y; - data[2] = TRUE; + // No other items found yet, set this one + tItemDistanceX = itemDistanceX; + tItemDistanceY = itemDistanceY; + tItemFound = TRUE; } else { - // data[0] and data[1] contain the player's coordinates. - // x and y contain the item's coordinates. - if (data[0] < 0) - var1 = data[0] * -1; // item is to the left - else - var1 = data[0]; // item is to the right + // Other items have been found, check if this one is closer - if (data[1] < 0) - var2 = data[1] * -1; // item is to the north + // Get absolute x distance of the already-found item + if (tItemDistanceX < 0) + oldItemAbsX = tItemDistanceX * -1; // WEST else - var2 = data[1]; // item is to the south + oldItemAbsX = tItemDistanceX; // EAST - if (x < 0) - var3 = x * -1; + // Get absolute y distance of the already-found item + if (tItemDistanceY < 0) + oldItemAbsY = tItemDistanceY * -1; // NORTH else - var3 = x; + oldItemAbsY = tItemDistanceY; // SOUTH - if (y < 0) - var4 = y * -1; + // Get absolute x distance of the newly-found item + if (itemDistanceX < 0) + newItemAbsX = itemDistanceX * -1; else - var4 = y; + newItemAbsX = itemDistanceX; - if (var1 + var2 > var3 + var4) + // Get absolute y distance of the newly-found item + if (itemDistanceY < 0) + newItemAbsY = itemDistanceY * -1; + else + newItemAbsY = itemDistanceY; + + + if (oldItemAbsX + oldItemAbsY > newItemAbsX + newItemAbsY) { - data[0] = x; - data[1] = y; + // New item is closer + tItemDistanceX = itemDistanceX; + tItemDistanceY = itemDistanceY; } else { - if (var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y))) + if (oldItemAbsX + oldItemAbsY == newItemAbsX + newItemAbsY + && (oldItemAbsY > newItemAbsY || (oldItemAbsY == newItemAbsY && tItemDistanceY < itemDistanceY))) { - data[0] = x; - data[1] = y; + // If items are equal distance, use whichever is closer on the Y axis or further south + tItemDistanceX = itemDistanceX; + tItemDistanceY = itemDistanceY; } } } } -u8 sub_80FD9B0(s16 itemX, s16 itemY) +static u8 GetDirectionToHiddenItem(s16 itemDistanceX, s16 itemDistanceY) { - s16 abX, abY; + s16 absX, absY; - if (itemX == 0 && itemY == 0) + if (itemDistanceX == 0 && itemDistanceY == 0) return DIR_NONE; // player is standing on the item. - // get absolute X distance. - if (itemX < 0) - abX = itemX * -1; + // Get absolute X distance. + if (itemDistanceX < 0) + absX = itemDistanceX * -1; else - abX = itemX; + absX = itemDistanceX; - // get absolute Y distance. - if (itemY < 0) - abY = itemY * -1; + // Get absolute Y distance. + if (itemDistanceY < 0) + absY = itemDistanceY * -1; else - abY = itemY; + absY = itemDistanceY; - if (abX > abY) + if (absX > absY) { - if (itemX < 0) + if (itemDistanceX < 0) return DIR_EAST; else return DIR_NORTH; } else { - if (abX < abY) + if (absX < absY) { - if (itemY < 0) + if (itemDistanceY < 0) return DIR_SOUTH; else return DIR_WEST; } - if (abX == abY) + if (absX == absY) { - if (itemY < 0) + if (itemDistanceY < 0) return DIR_SOUTH; else return DIR_WEST; } - return DIR_NONE; // should never get here. return something so it doesnt crash. + return DIR_NONE; // Unreachable } } -void sub_80FDA24(u8 direction) +static void PlayerFaceHiddenItem(u8 direction) { EventObjectClearHeldMovementIfFinished(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]); EventObjectClearHeldMovement(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]); @@ -564,39 +577,48 @@ void sub_80FDA24(u8 direction) PlayerTurnInPlace(direction); } -void sub_80FDA94(u8 taskId) +static void Task_HiddenItemNearby(u8 taskId) { if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]) == TRUE) - DisplayItemMessageOnField(taskId, gText_ItemFinderNearby, sub_80FD5CC); + DisplayItemMessageOnField(taskId, gText_ItemFinderNearby, Task_CloseItemfinderMessage); } -void sub_80FDADC(u8 taskId) +static void Task_StandingOnHiddenItem(u8 taskId) { s16 *data = gTasks[taskId].data; if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]) == TRUE - || data[2] == FALSE) + || tItemFound == FALSE) { - sub_80FDA24(gUnknown_085920E4[data[5]]); - data[2] = 1; - data[5] = (data[5] + 1) & 3; - data[3]++; + // Spin player around on item + PlayerFaceHiddenItem(sClockwiseDirections[tFacingDir]); + tItemFound = TRUE; + tFacingDir = (tFacingDir + 1) & 3; + tCounter++; - if (data[3] == 4) - DisplayItemMessageOnField(taskId, gText_ItemFinderOnTop, sub_80FD5CC); + if (tCounter == 4) + DisplayItemMessageOnField(taskId, gText_ItemFinderOnTop, Task_CloseItemfinderMessage); } } +// Undefine itemfinder task data +#undef tItemDistanceX +#undef tItemDistanceY +#undef tItemFound +#undef tCounter +#undef tItemfinderBeeps +#undef tFacingDir + void ItemUseOutOfBattle_PokeblockCase(u8 taskId) { - if (sub_81221AC() == TRUE) + if (sub_81221AC() == TRUE) // link func { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } - else if (gTasks[taskId].data[3] != TRUE) + else if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE) { - gBagMenu->mainCallback2 = sub_80FDBEC; - unknown_ItemMenu_Confirm(taskId); + gBagMenu->mainCallback2 = CB2_OpenPokeblockCaseOnField; + Task_FadeAndCloseBagMenu(taskId); } else { @@ -606,17 +628,17 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId) } } -void sub_80FDBEC(void) +static void CB2_OpenPokeblockCaseOnField(void) { - OpenPokeblockCase(0, bag_menu_mail_related); + OpenPokeblockCase(PBLOCK_CASE_FIELD, CB2_ReturnToBagMenuPocket); } -void sub_80FDC00(u8 taskId) +static void sub_80FDC00(u8 taskId) { if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - OpenPokeblockCase(0, CB2_ReturnToField); + OpenPokeblockCase(PBLOCK_CASE_FIELD, CB2_ReturnToField); DestroyTask(taskId); } } @@ -626,13 +648,13 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, GetCoins(), STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_CoinCase); - if (!gTasks[taskId].data[3]) + if (!gTasks[taskId].tUsingRegisteredKeyItem) { DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); } else { - DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField); + DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage); } } @@ -641,13 +663,13 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 5); StringExpandPlaceholders(gStringVar4, gText_PowderQty); - if (!gTasks[taskId].data[3]) + if (!gTasks[taskId].tUsingRegisteredKeyItem) { DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); } else { - DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField); + DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage); } } @@ -655,10 +677,10 @@ void ItemUseOutOfBattle_Berry(u8 taskId) { if (IsPlayerFacingEmptyBerryTreePatch() == TRUE) { - gUnknown_0203A0F4 = ItemUseOnFieldCB_Berry; - gFieldCallback = MapPostLoadHook_UseItem; + sItemUseOnFieldCB = ItemUseOnFieldCB_Berry; + gFieldCallback = FieldCB_UseItemOnField; gBagMenu->mainCallback2 = CB2_ReturnToField; - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } else { @@ -666,7 +688,7 @@ void ItemUseOutOfBattle_Berry(u8 taskId) } } -void ItemUseOnFieldCB_Berry(u8 taskId) +static void ItemUseOnFieldCB_Berry(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); ScriptContext2_Enable(); @@ -678,28 +700,28 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId) { if (TryToWaterSudowoodo() == TRUE) { - gUnknown_0203A0F4 = ItemUseOnFieldCB_WailmerPailSudowoodo; + sItemUseOnFieldCB = ItemUseOnFieldCB_WailmerPailSudowoodo; SetUpItemUseOnFieldCallback(taskId); } else if (TryToWaterBerryTree() == TRUE) { - gUnknown_0203A0F4 = ItemUseOnFieldCB_WailmerPailBerry; + sItemUseOnFieldCB = ItemUseOnFieldCB_WailmerPailBerry; SetUpItemUseOnFieldCallback(taskId); } else { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } } -void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) +static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) { ScriptContext2_Enable(); ScriptContext1_SetupScript(BerryTree_EventScript_ItemUseWailmerPail); DestroyTask(taskId); } -bool8 TryToWaterSudowoodo(void) +static bool8 TryToWaterSudowoodo(void) { u16 x, y; u8 z; @@ -713,7 +735,7 @@ bool8 TryToWaterSudowoodo(void) return TRUE; } -void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId) +static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId) { ScriptContext2_Enable(); ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_WaterSudowoodo); @@ -791,14 +813,14 @@ static void UseTMHM(u8 taskId) SetUpItemUseCallback(taskId); } -void sub_80FE058(void) +static void RemoveUsedItem(void) { RemoveBagItem(gSpecialVar_ItemId, 1); CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); if (!InBattlePyramid()) { - sub_81AB9A8(ItemId_GetPocket(gSpecialVar_ItemId)); + UpdatePocketItemList(ItemId_GetPocket(gSpecialVar_ItemId)); SetInitialScrollAndCursorPositions(ItemId_GetPocket(gSpecialVar_ItemId)); } else @@ -811,14 +833,14 @@ void sub_80FE058(void) void ItemUseOutOfBattle_Repel(u8 taskId) { if (VarGet(VAR_REPEL_STEP_COUNT) == 0) - gTasks[taskId].func = sub_80FE124; + gTasks[taskId].func = Task_StartUseRepel; else if (!InBattlePyramid()) DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, BagMenu_InitListsMenu); else - DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, sub_81C6714); + DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, Task_CloseBattlePyramidBagMessage); } -void sub_80FE124(u8 taskId) +static void Task_StartUseRepel(u8 taskId) { s16* data = gTasks[taskId].data; @@ -826,24 +848,24 @@ void sub_80FE124(u8 taskId) { data[8] = 0; PlaySE(SE_TU_SAA); - gTasks[taskId].func = sub_80FE164; + gTasks[taskId].func = Task_UseRepel; } } -void sub_80FE164(u8 taskId) +static void Task_UseRepel(u8 taskId) { if (!IsSEPlaying()) { VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); - sub_80FE058(); + RemoveUsedItem(); if (!InBattlePyramid()) DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); else - DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714); + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); } } -void sub_80FE1D0(u8 taskId) +static void Task_UsedBlackWhiteFlute(u8 taskId) { if(++gTasks[taskId].data[8] > 7) { @@ -851,7 +873,7 @@ void sub_80FE1D0(u8 taskId) if (!InBattlePyramid()) DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); else - DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714); + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); } } @@ -871,27 +893,27 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_UsedVar2WildRepelled); } gTasks[taskId].data[8] = 0; - gTasks[taskId].func = sub_80FE1D0; + gTasks[taskId].func = Task_UsedBlackWhiteFlute; } -void task08_080A1C44(u8 taskId) +void Task_UseDigEscapeRopeOnField(u8 taskId) { ResetInitialPlayerAvatarState(); StartEscapeRopeFieldEffect(); DestroyTask(taskId); } -void re_escape_rope(u8 taskId) +static void ItemUseOnFieldCB_EscapeRope(u8 taskId) { Overworld_ResetStateAfterDigEscRope(); - sub_80FE058(); + RemoveUsedItem(); gTasks[taskId].data[0] = 0; - DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44); + DisplayItemMessageOnField(taskId, gStringVar4, Task_UseDigEscapeRopeOnField); } bool8 CanUseEscapeRopeOnCurrMap(void) { - if (gMapHeader.flags & 2) + if (gMapHeader.flags & MAP_ALLOW_ESCAPE_ROPE) return TRUE; else return FALSE; @@ -901,12 +923,12 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId) { if (CanUseEscapeRopeOnCurrMap() == TRUE) { - gUnknown_0203A0F4 = re_escape_rope; + sItemUseOnFieldCB = ItemUseOnFieldCB_EscapeRope; SetUpItemUseOnFieldCallback(taskId); } else { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } } @@ -922,42 +944,43 @@ void ItemUseInBattle_PokeBall(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); if (!InBattlePyramid()) - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); else - sub_81C5B14(taskId); + CloseBattlePyramidBagAndSetCallback(taskId); } else if (!InBattlePyramid()) { DisplayItemMessage(taskId, 1, gText_BoxFull, BagMenu_InitListsMenu); } else - DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, sub_81C6714); + DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage); } -void sub_80FE408(u8 taskId) +static void Task_CloseStatIncreaseMessage(u8 taskId) { if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { if (!InBattlePyramid()) - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); else - sub_81C5B14(taskId); + CloseBattlePyramidBagAndSetCallback(taskId); } } -void sub_80FE440(u8 taskId) +static void Task_UseStatIncreaseItem(u8 taskId) { if(++gTasks[taskId].data[8] > 7) { PlaySE(SE_KAIFUKU); RemoveBagItem(gSpecialVar_ItemId, 1); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, sub_806CF78(gSpecialVar_ItemId), sub_80FE408); + DisplayItemMessage(taskId, 1, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage); else - DisplayItemMessageInBattlePyramid(taskId, sub_806CF78(gSpecialVar_ItemId), sub_80FE408); + DisplayItemMessageInBattlePyramid(taskId, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage); } } +// e.g. X Attack, Guard Spec void ItemUseInBattle_StatIncrease(u8 taskId) { u16 partyId = gBattlerPartyIndexes[gBattlerInMenuId]; @@ -967,11 +990,11 @@ void ItemUseInBattle_StatIncrease(u8 taskId) if (!InBattlePyramid()) DisplayItemMessage(taskId, 1, gText_WontHaveEffect, BagMenu_InitListsMenu); else - DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, sub_81C6714); + DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, Task_CloseBattlePyramidBagMessage); } else { - gTasks[taskId].func = sub_80FE440; + gTasks[taskId].func = Task_UseStatIncreaseItem; gTasks[taskId].data[8] = 0; } } @@ -981,12 +1004,12 @@ static void ItemUseInBattle_ShowPartyMenu(u8 taskId) if (!InBattlePyramid()) { gBagMenu->mainCallback2 = ChooseMonForInBattleItem; - unknown_ItemMenu_Confirm(taskId); + Task_FadeAndCloseBagMenu(taskId); } else { gPyramidBagResources->callback2 = ChooseMonForInBattleItem; - sub_81C5B14(taskId); + CloseBattlePyramidBagAndSetCallback(taskId); } } @@ -1009,20 +1032,21 @@ void ItemUseInBattle_PPRecovery(u8 taskId) ItemUseInBattle_ShowPartyMenu(taskId); } +// Fluffy Tail / Poke Doll void ItemUseInBattle_Escape(u8 taskId) { if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) { - sub_80FE058(); + RemoveUsedItem(); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, unknown_ItemMenu_Confirm); + DisplayItemMessage(taskId, 1, gStringVar4, Task_FadeAndCloseBagMenu); else - DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C5B14); + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBagAndSetCallback); } else { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } } @@ -1099,5 +1123,7 @@ void ItemUseInBattle_EnigmaBerry(u8 taskId) void ItemUseOutOfBattle_CannotUse(u8 taskId) { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } + +#undef tUsingRegisteredKeyItem diff --git a/src/overworld.c b/src/overworld.c index 3d7f71f786..1cb2643690 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -978,7 +978,7 @@ static u16 GetCenterScreenMetatileBehavior(void) bool32 Overworld_IsBikingAllowed(void) { - if (!(gMapHeader.flags & 1)) + if (!(gMapHeader.flags & MAP_ALLOW_BIKE)) return FALSE; else return TRUE; @@ -1702,7 +1702,7 @@ void sub_80861E8(void) static void sub_8086204(void) { - if ((gMapHeader.flags & 0xF8) == 8 && SecretBaseMapPopupEnabled() == TRUE) + if (SHOW_MAP_NAME_ENABLED && SecretBaseMapPopupEnabled() == TRUE) ShowMapNamePopup(); FieldCB_WarpExitFadeFromBlack(); } @@ -1948,7 +1948,7 @@ static bool32 load_map_stuff(u8 *state, u32 a2) (*state)++; break; case 11: - if ((gMapHeader.flags & 0xF8) == 8 && SecretBaseMapPopupEnabled() == TRUE) + if (SHOW_MAP_NAME_ENABLED && SecretBaseMapPopupEnabled() == TRUE) ShowMapNamePopup(); (*state)++; break; diff --git a/src/party_menu.c b/src/party_menu.c index 367e842954..53b5b5ca59 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5186,7 +5186,7 @@ u8 GetItemEffectType(u16 item) else itemEffect = gItemEffectTable[item - ITEM_POTION]; - if ((itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_MIST)) + if ((itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_GUARD_SPEC)) return ITEM_EFFECT_X_ITEM; else if (itemEffect[0] & ITEM0_SACRED_ASH) return ITEM_EFFECT_SACRED_ASH; diff --git a/src/pokeblock.c b/src/pokeblock.c index 342221880e..b9031e1730 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -451,7 +451,7 @@ void OpenPokeblockCase(u8 caseId, void (*callback)(void)) sPokeblockMenu->pokeblockOptionsIds = sActionsWhenGivingToLady; sPokeblockMenu->optionsNo = ARRAY_COUNT(sActionsWhenGivingToLady); break; - default: + default: // PBLOCK_CASE_FIELD sPokeblockMenu->pokeblockOptionsIds = sActionsOnField; sPokeblockMenu->optionsNo = ARRAY_COUNT(sActionsOnField); break; diff --git a/src/pokemon.c b/src/pokemon.c index 12820aa76e..15427e6ea8 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2043,7 +2043,8 @@ static const u8 sGetMonDataEVConstants[] = MON_DATA_SPATK_EV }; -static const u8 gUnknown_08329EC8[] = +// For stat-raising items +static const u8 sStatsToRaise[] = { STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC }; @@ -4691,7 +4692,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION; retVal = FALSE; } - if ((itemEffect[cmdIndex] & ITEM0_HIGH_CRIT) + if ((itemEffect[cmdIndex] & ITEM0_DIRE_HIT) && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) { gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; @@ -4745,7 +4746,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } break; case 3: - if ((itemEffect[cmdIndex] & ITEM3_MIST) + if ((itemEffect[cmdIndex] & ITEM3_GUARD_SPEC) && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) { gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5; @@ -5285,15 +5286,15 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) return offset; } -static void sub_806CF24(s32 arg0) +static void BufferStatRoseMessage(s32 arg0) { gBattlerTarget = gBattlerInMenuId; - StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_08329EC8[arg0]]); + StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[arg0]]); StringCopy(gBattleTextBuff2, gText_StatRose); BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2); } -u8 *sub_806CF78(u16 itemId) +u8 *UseStatIncreaseItem(u16 itemId) { int i; const u8 *itemEffect; @@ -5314,13 +5315,14 @@ u8 *sub_806CF78(u16 itemId) for (i = 0; i < 3; i++) { - if (itemEffect[i] & 0xF) - sub_806CF24(i * 2); - if (itemEffect[i] & 0xF0) + if (itemEffect[i] & (ITEM0_X_ATTACK | ITEM1_X_SPEED | ITEM2_X_SPATK)) + BufferStatRoseMessage(i * 2); + + if (itemEffect[i] & (ITEM0_DIRE_HIT | ITEM1_X_DEFEND | ITEM2_X_ACCURACY)) { - if (i) + if (i != 0) // Dire Hit is the only ITEM0 above { - sub_806CF24(i * 2 + 1); + BufferStatRoseMessage(i * 2 + 1); } else { @@ -5330,7 +5332,7 @@ u8 *sub_806CF78(u16 itemId) } } - if (itemEffect[3] & ITEM3_MIST) + if (itemEffect[3] & ITEM3_GUARD_SPEC) { gBattlerAttacker = gBattlerInMenuId; BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnShroudedInMist); diff --git a/src/region_map.c b/src/region_map.c index 75ce60056c..5694d4c7a8 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -997,7 +997,7 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void) break; case MAP_TYPE_UNDERGROUND: case MAP_TYPE_UNUSED_2: - if (gMapHeader.flags & 0x02) + if (gMapHeader.flags & MAP_ALLOW_ESCAPE_ROPE) { mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum); gRegionMap->mapSecId = mapHeader->regionMapSectionId; diff --git a/src/secret_base.c b/src/secret_base.c index 23c4ba0823..f2ac6cb720 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -16,6 +16,7 @@ #include "fldeff.h" #include "fldeff_misc.h" #include "international_string_util.h" +#include "item_menu.h" #include "link.h" #include "list_menu.h" #include "main.h"