From f115a376564655c2b34cae029c4d7b574d611a25 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 19 Sep 2024 11:33:00 -0500 Subject: [PATCH 01/11] =?UTF-8?q?Add=20functionality=20to=20Pok=C3=A9=20Fl?= =?UTF-8?q?ute=20and=20Town=20Map?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/item_use.h | 2 ++ include/strings.h | 3 +++ src/data/items.h | 4 ++-- src/item_use.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++ src/strings.c | 3 +++ 5 files changed, 69 insertions(+), 2 deletions(-) diff --git a/include/item_use.h b/include/item_use.h index c5a21862fd6d..d7871fd6f2c1 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -47,6 +47,8 @@ u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); void FieldUseFunc_VsSeeker(u8 taskId); void Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker(u8 taskId); void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField); +void ItemUseOutOfBattle_PokeFlute(u8 taskId); +void ItemUseOutOfBattle_TownMap(u8 taskId); enum { BALL_THROW_UNABLE_TWO_MONS, diff --git a/include/strings.h b/include/strings.h index 041f43d05b71..1daee64b2e46 100644 --- a/include/strings.h +++ b/include/strings.h @@ -877,6 +877,9 @@ extern const u8 gText_UsedVar2WildRepelled[]; extern const u8 gText_BoxFull[]; extern const u8 gText_WontHaveEffect[]; extern const u8 gText_NextFusionMon[]; +extern const u8 gText_PlayedPokeFluteCatchy[]; +extern const u8 gText_PlayedPokeFlute[]; +extern const u8 gText_PokeFluteAwakenedMon[]; extern const u8 gText_LevelSymbol[]; extern const u8 gText_PkmnInfo[]; diff --git a/src/data/items.h b/src/data/items.h index 27d98298995f..69094110f7e3 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -12262,7 +12262,7 @@ const struct Item gItemsInfo[] = .importance = 1, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_TownMap, .iconPic = gItemIcon_TownMap, .iconPalette = gItemIconPalette_TownMap, }, @@ -12442,7 +12442,7 @@ const struct Item gItemsInfo[] = .importance = 1, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_PokeFlute, .iconPic = gItemIcon_PokeFlute, .iconPalette = gItemIconPalette_PokeFlute, }, diff --git a/src/item_use.c b/src/item_use.c index fd74b7082b03..2fd356fac102 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1499,4 +1499,63 @@ void Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker(u8 taskId) Task_CloseCantUseKeyItemMessage(taskId); } +static void Task_DisplayPokeFluteMessage(u8 taskId) +{ + if (WaitFanfare(FALSE)) + { + if (gTasks[taskId].data[3] == 0) + DisplayItemMessage(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, CloseItemMessage); + else + DisplayItemMessageOnField(taskId, gText_PokeFluteAwakenedMon, Task_CloseCantUseKeyItemMessage); + } +} + +static void Task_PlayPokeFlute(u8 taskId) +{ + PlayFanfareByFanfareNum(FANFARE_RG_POKE_FLUTE); + gTasks[taskId].func = Task_DisplayPokeFluteMessage; +} + +void ItemUseOutOfBattle_PokeFlute(u8 taskId) +{ + bool8 wokeSomeoneUp = FALSE; + u8 i; + + for (i = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!ExecuteTableBasedItemEffect(&gPlayerParty[i], ITEM_AWAKENING, i, 0)) + wokeSomeoneUp = TRUE; + } + + if (wokeSomeoneUp) + { + if (gTasks[taskId].data[3] == 0) + DisplayItemMessage(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute); + else + DisplayItemMessageOnField(taskId, gText_PlayedPokeFlute, Task_PlayPokeFlute); + } + else + { + if (gTasks[taskId].data[3] == 0) + DisplayItemMessage(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, CloseItemMessage); + else + DisplayItemMessageOnField(taskId, gText_PlayedPokeFluteCatchy, Task_CloseCantUseKeyItemMessage); + } +} + +static void ItemUseOnFieldCB_TownMap(u8 taskId) +{ + LockPlayerFieldControls(); + ScriptContext_SetupScript(EventScript_RegionMap); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_TownMap(u8 taskId) +{ + sItemUseOnFieldCB = ItemUseOnFieldCB_TownMap; + gFieldCallback = FieldCB_UseItemOnField; + gBagMenu->newScreenCallback = CB2_ReturnToField; + Task_FadeAndCloseBagMenu(taskId); +} + #undef tUsingRegisteredKeyItem diff --git a/src/strings.c b/src/strings.c index 6009dbf5e6d3..1c601776d4ee 100644 --- a/src/strings.c +++ b/src/strings.c @@ -197,6 +197,9 @@ const u8 gText_TheBattle[] = _("the battle"); const u8 gText_ThePokemonList[] = _("the POKéMON LIST"); const u8 gText_TheShop[] = _("the shop"); const u8 gText_ThePC[] = _("the PC"); +const u8 gText_PlayedPokeFluteCatchy[] = _("Played the POKé FLUTE.\pNow, that's a catchy tune!{PAUSE_UNTIL_PRESS}"); +const u8 gText_PlayedPokeFlute[] = _("Played the POKé FLUTE."); +const u8 gText_PokeFluteAwakenedMon[] = _("The POKé FLUTE awakened sleeping\nPOKéMON.{PAUSE_UNTIL_PRESS}"); const u8 *const gBagMenu_ReturnToStrings[] = { From 0cf09f0cdb83cb3c29c0a9f207da92bddb79ac9f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 19 Sep 2024 12:39:40 -0500 Subject: [PATCH 02/11] Poke flute in-battle --- asm/macros/battle_script.inc | 8 +++ data/battle_scripts_2.s | 20 ++++++ include/constants/battle_string_ids.h | 5 +- include/constants/items.h | 1 + src/battle_ai_switch_items.c | 4 ++ src/battle_message.c | 7 ++ src/battle_script_commands.c | 95 +++++++++++++++++++++++++-- src/data/items.h | 1 + src/item_use.c | 2 +- 9 files changed, 136 insertions(+), 7 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 5982716bc91b..3732c44a54ce 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1727,6 +1727,14 @@ .4byte \failInstr .endm + .macro checkpokeflute + callnative BS_CheckPokeFlute + .endm + + .macro waitfanfare + callnative BS_WaitFanfare + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index be6c04e32eb9..b68a57066488 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -25,6 +25,7 @@ gBattlescriptsForUsingItem:: .4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_REVIVE .4byte BattleScript_ItemRestorePP @ EFFECT_ITEM_RESTORE_PP .4byte BattleScript_ItemIncreaseAllStats @ EFFECT_ITEM_INCREASE_ALL_STATS + .4byte BattleScript_UsePokeFlute @ EFFECT_ITEM_USE_POKE_FLUTE .align 2 gBattlescriptsForSafariActions:: @@ -110,6 +111,25 @@ BattleScript_ItemIncreaseStat:: waitmessage B_WAIT_TIME_LONG end +BattleScript_UsePokeFlute:: + checkpokeflute + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 1, BattleScript_PokeFluteWakeUp + printstring STRINGID_POKEFLUTECATCHY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_PokeFluteEnd + +BattleScript_PokeFluteWakeUp:: + printstring STRINGID_POKEFLUTE + waitmessage B_WAIT_TIME_LONG + fanfare MUS_RG_POKE_FLUTE + waitfanfare + printstring STRINGID_MONHEARINGFLUTEAWOKE + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_PLAYER2 + waitstate +BattleScript_PokeFluteEnd:: + finishaction + BattleScript_ItemSetMist:: call BattleScript_UseItemMessage setmist diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 9fbb70a22397..6017ecb8d876 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -712,8 +712,11 @@ #define STRINGID_FOGLIFTED 710 #define STRINGID_PKMNMADESHELLGLEAM 711 #define STRINGID_FICKLEBEAMDOUBLED 712 +#define STRINGID_POKEFLUTECATCHY 713 +#define STRINGID_POKEFLUTE 714 +#define STRINGID_MONHEARINGFLUTEAWOKE 715 -#define BATTLESTRINGS_COUNT 713 +#define BATTLESTRINGS_COUNT 716 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/constants/items.h b/include/constants/items.h index bc9fdf2dc401..c5bd7096a912 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -1077,6 +1077,7 @@ #define EFFECT_ITEM_REVIVE 9 #define EFFECT_ITEM_RESTORE_PP 10 #define EFFECT_ITEM_INCREASE_ALL_STATS 11 +#define EFFECT_ITEM_USE_POKE_FLUTE 12 // Enigma Berry dummy constant #define EFFECT_ITEM_ENIGMA_BERRY_EREADER 1 diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c33878465a8e..9a55caf4c511 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -2249,6 +2249,10 @@ static bool32 ShouldUseItem(u32 battler) if (gBattleStruct->itemPartyIndex[battler] != PARTY_SIZE) // Revive if possible. shouldUse = TRUE; break; + case EFFECT_ITEM_USE_POKE_FLUTE: + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + shouldUse = TRUE; + break; default: return FALSE; } diff --git a/src/battle_message.c b/src/battle_message.c index 727091cec608..e35d64e54509 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -517,6 +517,9 @@ static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_ static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); +static const u8 sText_PlayedFluteCatchyTune[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}.\pNow, that's a catchy tune!"); +static const u8 sText_PlayedThe[] = _("{B_PLAYER_NAME} played the\n{B_LAST_ITEM}."); +static const u8 sText_PkmnHearingFluteAwoke[] = _("The POKéMON hearing the FLUTE\nawoke!"); static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I'll do my best!"); // early declaration of strings @@ -1553,6 +1556,10 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ITEMWASUSEDUP - BATTLESTRINGS_TABLE_START] = sText_ItemWasUsedUp, [STRINGID_ATTACKERLOSTITSTYPE - BATTLESTRINGS_TABLE_START] = sText_AttackerLostItsType, [STRINGID_CLOAKEDINAHARSHLIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnIsCloakedInAHarshLight, + [STRINGID_POKEFLUTECATCHY - BATTLESTRINGS_TABLE_START] = sText_PlayedFluteCatchyTune, + [STRINGID_POKEFLUTE - BATTLESTRINGS_TABLE_START] = sText_PlayedThe, + [STRINGID_MONHEARINGFLUTEAWOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnHearingFluteAwoke, + }; const u16 gTrainerUsedItemStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 283f42a23b3a..8b1e58b2c0ad 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12378,14 +12378,19 @@ static void Cmd_updatestatusicon(void) if (gBattleControllerExecFlags) return; - if (cmd->battler != BS_ATTACKER_WITH_PARTNER) + if (cmd->battler == BS_PLAYER2) { - battler = GetBattlerForBattleScript(cmd->battler); - BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); - MarkBattlerForControllerExec(battler); + for (battler = gBattleControllerExecFlags; battler < gBattlersCount; battler++) + { + if (!(gAbsentBattlerFlags & (1u << battler))) + { + BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); + MarkBattlerForControllerExec(battler); + } + } gBattlescriptCurrInstr = cmd->nextInstr; } - else + else if (cmd->battler == BS_ATTACKER_WITH_PARTNER) { battler = gBattlerAttacker; if (!(gAbsentBattlerFlags & (1u << battler))) @@ -12404,6 +12409,13 @@ static void Cmd_updatestatusicon(void) } gBattlescriptCurrInstr = cmd->nextInstr; } + else + { + battler = GetBattlerForBattleScript(cmd->battler); + BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); + MarkBattlerForControllerExec(battler); + gBattlescriptCurrInstr = cmd->nextInstr; + } } static void Cmd_setmist(void) @@ -17236,3 +17248,76 @@ void BS_TryRevivalBlessing(void) MarkBattlerForControllerExec(gBattlerAttacker); } } + +void BS_CheckPokeFlute(void) +{ + NATIVE_ARGS(); + u8 battler; + s32 i; + u32 monToCheck, status; + u16 species; + u8 abilityNum; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + monToCheck = 0; + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleMons[i].ability != ABILITY_SOUNDPROOF) + { + gBattleMons[i].status1 &= ~STATUS1_SLEEP; + gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE; + + } + } + for (i = 0; i < PARTY_SIZE; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); + abilityNum = GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM); + status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && status & AILMENT_FNT + && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) + monToCheck |= (1 << i); + } + if (monToCheck) + { + battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + status = 0; + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); + MarkBattlerForControllerExec(battler); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + monToCheck = 0; + for (i = 0; i < PARTY_SIZE; i++) + { + species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG); + abilityNum = GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM); + status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); + + if (species != SPECIES_NONE + && species != SPECIES_EGG + && status & AILMENT_FNT + && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) + monToCheck |= (1 << i); + } + if (monToCheck) + { + battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + status = 0; + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); + MarkBattlerForControllerExec(battler); + gBattleCommunication[5] = 1; + } + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_WaitFanfare(void) +{ + NATIVE_ARGS(); + + if (!IsFanfareTaskInactive()) + return; + + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/data/items.h b/src/data/items.h index 69094110f7e3..e2de1d13b3cf 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -12443,6 +12443,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_PokeFlute, + .battleUsage = EFFECT_ITEM_USE_POKE_FLUTE, .iconPic = gItemIcon_PokeFlute, .iconPalette = gItemIconPalette_PokeFlute, }, diff --git a/src/item_use.c b/src/item_use.c index 2fd356fac102..07eb945908a7 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1284,7 +1284,7 @@ void ItemUseInBattle_BagMenu(u8 taskId) else { PlaySE(SE_SELECT); - if (!(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) + if (!(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER)) && ItemId_GetBattleUsage(gSpecialVar_ItemId) != EFFECT_ITEM_USE_POKE_FLUTE) RemoveUsedItem(); ScheduleBgCopyTilemapToVram(2); if (!InBattlePyramid()) From 1be49817e84483fa8d222fce4f9bea56ed4b5b38 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 23 Sep 2024 11:08:03 -0500 Subject: [PATCH 03/11] Address reviews --- src/battle_script_commands.c | 11 ++++++----- src/item_use.c | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b1e58b2c0ad..6cf23ac4c92a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -17255,19 +17255,19 @@ void BS_CheckPokeFlute(void) u8 battler; s32 i; u32 monToCheck, status; - u16 species; - u8 abilityNum; + u16 species, abilityNum; gBattleCommunication[MULTISTRING_CHOOSER] = 0; - monToCheck = 0; + for (i = 0; i < gBattlersCount; i++) { if (gBattleMons[i].ability != ABILITY_SOUNDPROOF) { gBattleMons[i].status1 &= ~STATUS1_SLEEP; gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE; - } } + + monToCheck = 0; for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); @@ -17287,6 +17287,7 @@ void BS_CheckPokeFlute(void) MarkBattlerForControllerExec(battler); gBattleCommunication[MULTISTRING_CHOOSER] = 1; } + monToCheck = 0; for (i = 0; i < PARTY_SIZE; i++) { @@ -17306,7 +17307,7 @@ void BS_CheckPokeFlute(void) status = 0; BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); MarkBattlerForControllerExec(battler); - gBattleCommunication[5] = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; } gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/item_use.c b/src/item_use.c index 07eb945908a7..495444f7afbb 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1284,7 +1284,7 @@ void ItemUseInBattle_BagMenu(u8 taskId) else { PlaySE(SE_SELECT); - if (!(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER)) && ItemId_GetBattleUsage(gSpecialVar_ItemId) != EFFECT_ITEM_USE_POKE_FLUTE) + if (ItemId_GetImportance(gSpecialVar_ItemId) > 0 || !(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) RemoveUsedItem(); ScheduleBgCopyTilemapToVram(2); if (!InBattlePyramid()) @@ -1518,8 +1518,8 @@ static void Task_PlayPokeFlute(u8 taskId) void ItemUseOutOfBattle_PokeFlute(u8 taskId) { - bool8 wokeSomeoneUp = FALSE; - u8 i; + bool32 wokeSomeoneUp = FALSE; + u32 i; for (i = 0; i < CalculatePlayerPartyCount(); i++) { From c8654ea536f5e815976f5641c298f0829ea498bc Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 23 Sep 2024 11:15:27 -0500 Subject: [PATCH 04/11] Update item_use.c --- src/item_use.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/item_use.c b/src/item_use.c index 495444f7afbb..b472890275af 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1284,7 +1284,7 @@ void ItemUseInBattle_BagMenu(u8 taskId) else { PlaySE(SE_SELECT); - if (ItemId_GetImportance(gSpecialVar_ItemId) > 0 || !(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) + if (!ItemId_GetImportance(gSpecialVar_ItemId) && !(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) RemoveUsedItem(); ScheduleBgCopyTilemapToVram(2); if (!InBattlePyramid()) From 69f3343e9c2b682cb17120168c96943839de4df9 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 23 Sep 2024 11:17:26 -0500 Subject: [PATCH 05/11] Update battle_message.c --- src/battle_message.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index e35d64e54509..6fb7721e806e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1559,7 +1559,6 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_POKEFLUTECATCHY - BATTLESTRINGS_TABLE_START] = sText_PlayedFluteCatchyTune, [STRINGID_POKEFLUTE - BATTLESTRINGS_TABLE_START] = sText_PlayedThe, [STRINGID_MONHEARINGFLUTEAWOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnHearingFluteAwoke, - }; const u16 gTrainerUsedItemStringIds[] = From dba9385b18d2e6fd8757e3f1f5098ddc6af45106 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 25 Sep 2024 11:58:50 -0500 Subject: [PATCH 06/11] Update battle_script_commands.c --- src/battle_script_commands.c | 57 +++++++++++++----------------------- 1 file changed, 21 insertions(+), 36 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6cf23ac4c92a..620921a6b590 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -17249,30 +17249,18 @@ void BS_TryRevivalBlessing(void) } } -void BS_CheckPokeFlute(void) +static void TryUpdatePartyStatus(struct Pokemon* party, u8 position) { - NATIVE_ARGS(); - u8 battler; s32 i; + u8 battler; u32 monToCheck, status; u16 species, abilityNum; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability != ABILITY_SOUNDPROOF) - { - gBattleMons[i].status1 &= ~STATUS1_SLEEP; - gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE; - } - } - monToCheck = 0; for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); - abilityNum = GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM); - status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); + status = GetMonData(&party[i], MON_DATA_STATUS); if (species != SPECIES_NONE && species != SPECIES_EGG && status & AILMENT_FNT @@ -17281,35 +17269,32 @@ void BS_CheckPokeFlute(void) } if (monToCheck) { - battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + battler = GetBattlerAtPosition(position); status = 0; BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); MarkBattlerForControllerExec(battler); gBattleCommunication[MULTISTRING_CHOOSER] = 1; } +} - monToCheck = 0; - for (i = 0; i < PARTY_SIZE; i++) - { - species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG); - abilityNum = GetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM); - status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); +void BS_CheckPokeFlute(void) +{ + NATIVE_ARGS(); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; - if (species != SPECIES_NONE - && species != SPECIES_EGG - && status & AILMENT_FNT - && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) - monToCheck |= (1 << i); - } - if (monToCheck) + s32 i; + for (i = 0; i < gBattlersCount; i++) { - battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - status = 0; - BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); - MarkBattlerForControllerExec(battler); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; + if (gBattleMons[i].ability != ABILITY_SOUNDPROOF) + { + gBattleMons[i].status1 &= ~STATUS1_SLEEP; + gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE; + } } + TryUpdatePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); + TryUpdatePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); + gBattlescriptCurrInstr = cmd->nextInstr; } From 76ac46cf4ed865a4d3b16c19e49276d707c55225 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 25 Sep 2024 12:04:50 -0500 Subject: [PATCH 07/11] Update battle_script_commands.c --- src/battle_script_commands.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 620921a6b590..074cd93f6984 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -17249,7 +17249,7 @@ void BS_TryRevivalBlessing(void) } } -static void TryUpdatePartyStatus(struct Pokemon* party, u8 position) +static void UpdatePartyStatus(struct Pokemon* party, u8 position) { s32 i; u8 battler; @@ -17292,8 +17292,8 @@ void BS_CheckPokeFlute(void) } } - TryUpdatePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); - TryUpdatePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); + UpdatePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); + UpdatePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); gBattlescriptCurrInstr = cmd->nextInstr; } From 55a9b19f4fb70dbc105fcb29c710580b898e3698 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 27 Sep 2024 10:00:31 -0500 Subject: [PATCH 08/11] Update battle_script_commands.c --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 074cd93f6984..00417838bc7e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -17285,7 +17285,7 @@ void BS_CheckPokeFlute(void) s32 i; for (i = 0; i < gBattlersCount; i++) { - if (gBattleMons[i].ability != ABILITY_SOUNDPROOF) + if (GetBattlerAbility(i) != ABILITY_SOUNDPROOF) { gBattleMons[i].status1 &= ~STATUS1_SLEEP; gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE; From 9cd79c5ab7c6bbb3dddc755ed5030255d3f967a7 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 2 Oct 2024 11:45:01 -0500 Subject: [PATCH 09/11] Update battle_script_commands.c --- src/battle_script_commands.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d3f27f4cb344..3564e2d7c661 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1988,7 +1988,7 @@ s32 CalcCritChanceStageGen1(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recor // Crit scaling if (moveCritStage > 0) critChance = critChance * highCritRatioScaler * moveCritStage; - + if (bonusCritStage > 0) critChance = critChance * bonusCritStage; @@ -11604,7 +11604,7 @@ static void Cmd_stockpiletohpheal(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - + gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } @@ -17438,7 +17438,7 @@ void BS_JumpIfCommanderActive(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void UpdatePartyStatus(struct Pokemon* party, u8 position) +static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position) { s32 i; u8 battler; @@ -17481,8 +17481,8 @@ void BS_CheckPokeFlute(void) } } - UpdatePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); - UpdatePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); + UpdatePokeFlutePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); + UpdatePokeFlutePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); gBattlescriptCurrInstr = cmd->nextInstr; } From b9cdba876457bf6f668eb7e5cb7f73489eb5f696 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 2 Oct 2024 14:15:54 -0500 Subject: [PATCH 10/11] Update battle_script_commands.c --- src/battle_script_commands.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3564e2d7c661..6c72004aeb9f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -17443,17 +17443,15 @@ static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position) s32 i; u8 battler; u32 monToCheck, status; - u16 species, abilityNum; + u16 species; monToCheck = 0; for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); - abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); status = GetMonData(&party[i], MON_DATA_STATUS); if (species != SPECIES_NONE && species != SPECIES_EGG - && status & AILMENT_FNT - && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) + && status & AILMENT_FNT) monToCheck |= (1 << i); } if (monToCheck) From 2f10abf39f2496fd853f6c332bac7563a6687e89 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 2 Oct 2024 14:18:08 -0500 Subject: [PATCH 11/11] Update battle_script_commands.c --- src/battle_script_commands.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6c72004aeb9f..3564e2d7c661 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -17443,15 +17443,17 @@ static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position) s32 i; u8 battler; u32 monToCheck, status; - u16 species; + u16 species, abilityNum; monToCheck = 0; for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); status = GetMonData(&party[i], MON_DATA_STATUS); if (species != SPECIES_NONE && species != SPECIES_EGG - && status & AILMENT_FNT) + && status & AILMENT_FNT + && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) monToCheck |= (1 << i); } if (monToCheck)