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/berry_powder.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/data/items.json | 12 ++--- src/item_use.c | 88 +++++++++++++++++++++++++++++++++-- src/unk_815EDDC.c | 132 ---------------------------------------------------- 4 files changed, 222 insertions(+), 142 deletions(-) create mode 100644 src/berry_powder.c delete mode 100644 src/unk_815EDDC.c (limited to 'src') diff --git a/src/berry_powder.c b/src/berry_powder.c new file mode 100644 index 000000000..b3069d697 --- /dev/null +++ b/src/berry_powder.c @@ -0,0 +1,132 @@ +#include "global.h" +#include "event_data.h" +#include "load_save.h" +#include "menu.h" +#include "quest_log.h" +#include "script_menu.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "text_window.h" + +EWRAM_DATA u8 gUnknown_203F464 = 0; + +u32 sub_815EE3C(u32 * a0) +{ + return *a0 ^ gSaveBlock2Ptr->encryptionKey; +} + +void sub_815EE54(u32 * a0, u32 a1) +{ + *a0 = gSaveBlock2Ptr->encryptionKey ^ a1; +} + +void sub_815EE6C(u32 a0) +{ + ApplyNewEncryptionKeyToWord(&gSaveBlock2Ptr->berryCrush.berryPowderAmount, a0); +} + +bool8 sub_815EE88(u32 a0) +{ + if (sub_815EE3C(&gSaveBlock2Ptr->berryCrush.berryPowderAmount) < a0) + return FALSE; + else + return TRUE; +} + +bool8 sub_815EEB0(void) +{ + if (sub_815EE3C(&gSaveBlock2Ptr->berryCrush.berryPowderAmount) < gSpecialVar_0x8004) + return FALSE; + else + return TRUE; +} + +bool8 sub_815EEE0(u32 a0) +{ + u32 * ptr = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + u32 amount = sub_815EE3C(ptr) + a0; + if (amount > 99999) + { + sub_815EE54(ptr, 99999); + return FALSE; + } + else + { + sub_815EE54(ptr, amount); + return TRUE; + } +} + +bool8 sub_815EF20(u32 a0) +{ + u32 * ptr = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + if (!sub_815EE88(a0)) + return FALSE; + else + { + u32 amount = sub_815EE3C(ptr); + sub_815EE54(ptr, amount - a0); + return TRUE; + } +} + +bool8 sub_815EF5C(void) +{ + u32 * ptr = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; + if (!sub_815EE88(gSpecialVar_0x8004)) + return FALSE; + else + { + u32 amount = sub_815EE3C(ptr); + sub_815EE54(ptr, amount - gSpecialVar_0x8004); + return TRUE; + } +} + +u32 GetBerryPowder(void) +{ + return sub_815EE3C(&gSaveBlock2Ptr->berryCrush.berryPowderAmount); +} + +void sub_815EFBC(u8 windowId, u32 powder, u8 x, u8 y, u8 speed) +{ + ConvertIntToDecimalStringN(gStringVar1, powder, STR_CONV_MODE_RIGHT_ALIGN, 5); + AddTextPrinterParameterized(windowId, 0, gStringVar1, x, y, speed, NULL); +} + +void sub_815F014(u8 windowId, u16 baseBlock, u8 palette, u32 powder) +{ + SetWindowBorderStyle(windowId, FALSE, baseBlock, palette); + AddTextPrinterParameterized(windowId, 0, gOtherText_Powder, 0, 0, -1, NULL); + sub_815EFBC(windowId, powder, 39, 12, 0); +} + +void sub_815F070(void) +{ + sub_815EFBC(gUnknown_203F464, GetBerryPowder(), 39, 12, 0); +} + +void sub_815F094(void) +{ + struct WindowTemplate template; + struct WindowTemplate template2; + + if (sub_81119D4(sub_809D6D4) != TRUE) + { + SetWindowTemplateFields(&template, 0, 1, 1, 8, 3, 15, 32); + template2 = template; + gUnknown_203F464 = AddWindow(&template2); + FillWindowPixelBuffer(gUnknown_203F464, 0); + PutWindowTilemap(gUnknown_203F464); + TextWindow_SetStdFrame0_WithPal(gUnknown_203F464, 0x21D, 0xD0); + sub_815F014(gUnknown_203F464, 0x21D, 0xD, GetBerryPowder()); + } +} + +void sub_815F114(void) +{ + ClearWindowTilemap(gUnknown_203F464); + ClearMenuWindow(gUnknown_203F464, 1); + RemoveWindow(gUnknown_203F464); +} diff --git a/src/data/items.json b/src/data/items.json index 0f5aa5f19..8d176df3d 100644 --- a/src/data/items.json +++ b/src/data/items.json @@ -1499,7 +1499,7 @@ "exitsBagOnUse": 0, "pocket": "POCKET_ITEMS", "type": 1, - "fieldUseFunc": "FieldUseFunc_SunStone", + "fieldUseFunc": "FieldUseFunc_EvoItem", "battleUsage": 0, "battleUseFunc": "NULL", "secondaryId": 0 @@ -1515,7 +1515,7 @@ "exitsBagOnUse": 0, "pocket": "POCKET_ITEMS", "type": 1, - "fieldUseFunc": "FieldUseFunc_SunStone", + "fieldUseFunc": "FieldUseFunc_EvoItem", "battleUsage": 0, "battleUseFunc": "NULL", "secondaryId": 0 @@ -1531,7 +1531,7 @@ "exitsBagOnUse": 0, "pocket": "POCKET_ITEMS", "type": 1, - "fieldUseFunc": "FieldUseFunc_SunStone", + "fieldUseFunc": "FieldUseFunc_EvoItem", "battleUsage": 0, "battleUseFunc": "NULL", "secondaryId": 0 @@ -1547,7 +1547,7 @@ "exitsBagOnUse": 0, "pocket": "POCKET_ITEMS", "type": 1, - "fieldUseFunc": "FieldUseFunc_SunStone", + "fieldUseFunc": "FieldUseFunc_EvoItem", "battleUsage": 0, "battleUseFunc": "NULL", "secondaryId": 0 @@ -1563,7 +1563,7 @@ "exitsBagOnUse": 0, "pocket": "POCKET_ITEMS", "type": 1, - "fieldUseFunc": "FieldUseFunc_SunStone", + "fieldUseFunc": "FieldUseFunc_EvoItem", "battleUsage": 0, "battleUseFunc": "NULL", "secondaryId": 0 @@ -1579,7 +1579,7 @@ "exitsBagOnUse": 0, "pocket": "POCKET_ITEMS", "type": 1, - "fieldUseFunc": "FieldUseFunc_SunStone", + "fieldUseFunc": "FieldUseFunc_EvoItem", "battleUsage": 0, "battleUseFunc": "NULL", "secondaryId": 0 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); +} diff --git a/src/unk_815EDDC.c b/src/unk_815EDDC.c deleted file mode 100644 index 669bb2ddb..000000000 --- a/src/unk_815EDDC.c +++ /dev/null @@ -1,132 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "load_save.h" -#include "menu.h" -#include "quest_log.h" -#include "script_menu.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" -#include "text_window.h" - -EWRAM_DATA u8 gUnknown_203F464 = 0; - -u32 sub_815EE3C(u32 * a0) -{ - return *a0 ^ gSaveBlock2Ptr->encryptionKey; -} - -void sub_815EE54(u32 * a0, u32 a1) -{ - *a0 = gSaveBlock2Ptr->encryptionKey ^ a1; -} - -void sub_815EE6C(u32 a0) -{ - ApplyNewEncryptionKeyToWord(&gSaveBlock2Ptr->berryCrush.berryPowderAmount, a0); -} - -bool8 sub_815EE88(u32 a0) -{ - if (sub_815EE3C(&gSaveBlock2Ptr->berryCrush.berryPowderAmount) < a0) - return FALSE; - else - return TRUE; -} - -bool8 sub_815EEB0(void) -{ - if (sub_815EE3C(&gSaveBlock2Ptr->berryCrush.berryPowderAmount) < gSpecialVar_0x8004) - return FALSE; - else - return TRUE; -} - -bool8 sub_815EEE0(u32 a0) -{ - u32 * ptr = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; - u32 amount = sub_815EE3C(ptr) + a0; - if (amount > 99999) - { - sub_815EE54(ptr, 99999); - return FALSE; - } - else - { - sub_815EE54(ptr, amount); - return TRUE; - } -} - -bool8 sub_815EF20(u32 a0) -{ - u32 * ptr = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; - if (!sub_815EE88(a0)) - return FALSE; - else - { - u32 amount = sub_815EE3C(ptr); - sub_815EE54(ptr, amount - a0); - return TRUE; - } -} - -bool8 sub_815EF5C(void) -{ - u32 * ptr = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; - if (!sub_815EE88(gSpecialVar_0x8004)) - return FALSE; - else - { - u32 amount = sub_815EE3C(ptr); - sub_815EE54(ptr, amount - gSpecialVar_0x8004); - return TRUE; - } -} - -u32 sub_815EFA0(void) -{ - return sub_815EE3C(&gSaveBlock2Ptr->berryCrush.berryPowderAmount); -} - -void sub_815EFBC(u8 windowId, u32 powder, u8 x, u8 y, u8 speed) -{ - ConvertIntToDecimalStringN(gStringVar1, powder, STR_CONV_MODE_RIGHT_ALIGN, 5); - AddTextPrinterParameterized(windowId, 0, gStringVar1, x, y, speed, NULL); -} - -void sub_815F014(u8 windowId, u16 baseBlock, u8 palette, u32 powder) -{ - SetWindowBorderStyle(windowId, FALSE, baseBlock, palette); - AddTextPrinterParameterized(windowId, 0, gOtherText_Powder, 0, 0, -1, NULL); - sub_815EFBC(windowId, powder, 39, 12, 0); -} - -void sub_815F070(void) -{ - sub_815EFBC(gUnknown_203F464, sub_815EFA0(), 39, 12, 0); -} - -void sub_815F094(void) -{ - struct WindowTemplate template; - struct WindowTemplate template2; - - if (sub_81119D4(sub_809D6D4) != TRUE) - { - SetWindowTemplateFields(&template, 0, 1, 1, 8, 3, 15, 32); - template2 = template; - gUnknown_203F464 = AddWindow(&template2); - FillWindowPixelBuffer(gUnknown_203F464, 0); - PutWindowTilemap(gUnknown_203F464); - TextWindow_SetStdFrame0_WithPal(gUnknown_203F464, 0x21D, 0xD0); - sub_815F014(gUnknown_203F464, 0x21D, 0xD, sub_815EFA0()); - } -} - -void sub_815F114(void) -{ - ClearWindowTilemap(gUnknown_203F464); - ClearMenuWindow(gUnknown_203F464, 1); - RemoveWindow(gUnknown_203F464); -} -- cgit v1.2.3