From e11fa09632e87594b599455517bf7d3521758b65 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 2 Dec 2020 18:46:29 -0300 Subject: [PATCH 01/24] Implemented Intrepid Sword and Dauntless Shield and... -Renamed BattleScript_TargetAbilityStatRaise to BattleScript_TargetAbilityStatRaiseOnMoveEnd -Added a copy, BattleScript_TargetAbilityStatRaiseOnSwitchin Their labels reflect the instances of a battle in which they can be called. --- data/battle_scripts_1.s | 12 +++++++++++- include/battle_scripts.h | 3 ++- src/battle_util.c | 28 +++++++++++++++++++++++----- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6f1ceb63be..fa59e58ce6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7082,7 +7082,17 @@ BattleScript_AngryPointActivates:: waitmessage 0x40 return -BattleScript_TargetAbilityStatRaise:: +BattleScript_TargetAbilityStatRaiseOnSwitchin:: + call BattleScript_AbilityPopUp + statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_TARGETABILITYSTATRAISE + waitmessage 0x40 + end3 + +BattleScript_TargetAbilityStatRaiseOnMoveEnd:: call BattleScript_AbilityPopUp statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL setgraphicalstatchangevalues diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 3566a1c4d2..7799e721fb 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -249,7 +249,7 @@ extern const u8 BattleScript_SturdiedMsg[]; extern const u8 BattleScript_GravityEnds[]; extern const u8 BattleScript_MoveStatDrain[]; extern const u8 BattleScript_MoveStatDrain_PPLoss[]; -extern const u8 BattleScript_TargetAbilityStatRaise[]; +extern const u8 BattleScript_TargetAbilityStatRaiseOnMoveEnd[]; extern const u8 BattleScript_AngryPointActivates[]; extern const u8 BattleScript_AttackerAbilityStatRaise[]; extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[]; @@ -350,5 +350,6 @@ extern const u8 BattleScript_EmergencyExitWild[]; extern const u8 BattleScript_EmergencyExitWildNoPopUp[]; extern const u8 BattleScript_CheekPouchActivates[]; extern const u8 BattleScript_AnnounceAirLockCloudNine[]; +extern const u8 BattleScript_TargetAbilityStatRaiseOnSwitchin[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/src/battle_util.c b/src/battle_util.c index b929b7499d..ef414b7110 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3936,6 +3936,24 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_INTREPID_SWORD: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = 1; + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchin); + effect++; + } + break; + case ABILITY_DAUNTLESS_SHIELD: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + gSpecialStatuses[battler].switchInAbilityDone = 1; + SET_STATCHANGER(STAT_DEF, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchin); + effect++; + } + break; } break; case ABILITYEFFECT_ENDTURN: // 1 @@ -4249,7 +4267,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { SET_STATCHANGER(STAT_ATK, 1, FALSE); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaise; + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; effect++; } break; @@ -4262,7 +4280,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { SET_STATCHANGER(STAT_SPEED, 1, FALSE); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaise; + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; effect++; } break; @@ -4275,7 +4293,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { SET_STATCHANGER(STAT_DEF, 2, FALSE); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaise; + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; effect++; } break; @@ -4287,7 +4305,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { SET_STATCHANGER(STAT_DEF, 1, FALSE); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaise; + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; effect++; } break; @@ -4304,7 +4322,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { SET_STATCHANGER(STAT_SPATK, 1, FALSE); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaise; + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; effect++; } break; From 3d8308844c92e3d1ae09d8129d731f65ae8f23b4 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 2 Dec 2020 19:09:59 -0300 Subject: [PATCH 02/24] Implemented Libero Kappa. --- 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 747dcb4844..45761ce0f7 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1273,7 +1273,7 @@ static void Cmd_attackcanceler(void) // Check Protean activation. GET_MOVE_TYPE(gCurrentMove, moveType); - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_PROTEAN + if ((GetBattlerAbility(gBattlerAttacker) == ABILITY_PROTEAN || GetBattlerAbility(gBattlerAttacker) == ABILITY_LIBERO) && (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType || (gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY)) && gCurrentMove != MOVE_STRUGGLE) From 0c4c6fc7786d8cb572d4ef66e62697203f1cff06 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 2 Dec 2020 22:53:00 -0300 Subject: [PATCH 03/24] Implemented Cotton Down --- data/battle_scripts_1.s | 19 +++++++++++++++++++ include/battle_scripts.h | 1 + src/battle_util.c | 15 +++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index fa59e58ce6..769ef1daae 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6189,6 +6189,25 @@ BattleScript_IllusionOff:: waitmessage 0x40 return +BattleScript_CottonDownActivates:: + setbyte gBattlerTarget, 0x1 +BattleScript_CottonDownLoop: + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | STAT_BUFF_ALLOW_PTR, BattleScript_CottonDownActivatesLoopIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CottonDownEnd + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + setbyte gBattleCommunication STAT_SPEED + stattextbuffer BS_TARGET + printfromtable gStatDownStringIds + waitmessage 0x40 +BattleScript_CottonDownActivatesLoopIncrement: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop +BattleScript_CottonDownEnd: + end3 + BattleScript_AnticipationActivates:: pause 0x5 call BattleScript_AbilityPopUp diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 7799e721fb..62c5ce2e0e 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -351,5 +351,6 @@ extern const u8 BattleScript_EmergencyExitWildNoPopUp[]; extern const u8 BattleScript_CheekPouchActivates[]; extern const u8 BattleScript_AnnounceAirLockCloudNine[]; extern const u8 BattleScript_TargetAbilityStatRaiseOnSwitchin[]; +extern const u8 BattleScript_CottonDownActivates[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/src/battle_util.c b/src/battle_util.c index ef414b7110..9372fe6942 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4608,6 +4608,21 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_COTTON_DOWN: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerTarget].hp != 0 + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED) + { + for (i = 0; i < gBattlersCount; i++) + { + gBattlerAttacker = i; + BattleScriptPushCursorAndCallback(BattleScript_CottonDownActivates); + effect++; + break; + } + } + break; } break; case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker From 9e1d7cc8273775698fe4bc294308a95615e8b59c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 2 Dec 2020 23:09:35 -0300 Subject: [PATCH 04/24] Implemented Ball Fetch --- data/battle_scripts_1.s | 5 +++++ include/battle.h | 2 ++ include/battle_scripts.h | 1 + include/constants/battle_string_ids.h | 3 ++- src/battle_main.c | 5 +++++ src/battle_message.c | 2 ++ src/battle_script_commands.c | 5 +++++ src/battle_util.c | 14 ++++++++++++++ 8 files changed, 36 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 769ef1daae..8c7f31f1eb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6165,6 +6165,11 @@ BattleScript_AttackerFormChangeEnd3:: call BattleScript_AttackerFormChange end3 +BattleScript_BallFetch:: + printstring STRINGID_FETCHEDPOKEBALL + waitmessage 0x40 + end3 + BattleScript_TargetFormChange:: pause 0x5 copybyte gBattlerAbility, gBattlerTarget diff --git a/include/battle.h b/include/battle.h index a6e201a239..5783f50938 100644 --- a/include/battle.h +++ b/include/battle.h @@ -827,5 +827,7 @@ extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; extern u8 gMultiUsePlayerCursor; extern u8 gNumberOfMovesToChoose; extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT]; +extern bool8 gHasFetchedBall; +extern u8 gLastUsedBall; #endif // GUARD_BATTLE_H diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 62c5ce2e0e..9fa4256b47 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -352,5 +352,6 @@ extern const u8 BattleScript_CheekPouchActivates[]; extern const u8 BattleScript_AnnounceAirLockCloudNine[]; extern const u8 BattleScript_TargetAbilityStatRaiseOnSwitchin[]; extern const u8 BattleScript_CottonDownActivates[]; +extern const u8 BattleScript_BallFetch[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 9348d67d5d..4d3ba62a82 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -558,8 +558,9 @@ #define STRINGID_AURABREAKENTERS 554 #define STRINGID_COMATOSEENTERS 555 #define STRINGID_SCREENCLEANERENTERS 556 +#define STRINGID_FETCHEDPOKEBALL 557 -#define BATTLESTRINGS_COUNT 557 +#define BATTLESTRINGS_COUNT 558 //// multichoice message IDs // switch in ability message diff --git a/src/battle_main.c b/src/battle_main.c index 48129c5230..e2c23bd2a3 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -228,6 +228,8 @@ EWRAM_DATA u32 gFieldStatuses = 0; EWRAM_DATA struct FieldTimer gFieldTimers = {0}; EWRAM_DATA u8 gBattlerAbility = 0; EWRAM_DATA u16 gPartnerSpriteId = 0; +EWRAM_DATA bool8 gHasFetchedBall = FALSE; +EWRAM_DATA bool8 gLastUsedBall = 0; // IWRAM common vars void (*gPreBattleCallback1)(void); @@ -2886,6 +2888,9 @@ static void BattleStartClearSetData(void) gLastUsedMove = 0; gFieldStatuses = 0; + gHasFetchedBall = FALSE; + gLastUsedBall = 0; + gBattlerAttacker = 0; gBattlerTarget = 0; gBattleWeather = 0; diff --git a/src/battle_message.c b/src/battle_message.c index 22561dd07c..c62674d536 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -685,9 +685,11 @@ static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all\nother POKéMON's auras!"); static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!"); static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!"); +static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has fetched\nyour {B_LAST_ITEM}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_FETCHEDPOKEBALL - 12] = sText_FetchedPokeBall, [STRINGID_STATWASNOTLOWERED - 12] = sText_StatWasNotLowered, [STRINGID_CLOAKEDINAFREEZINGLIGHT - 12] = sText_CloakedInAFreezingLight, [STRINGID_DESTINYKNOTACTIVATES - 12] = sText_DestinyKnotActivates, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 45761ce0f7..13a919a534 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11990,6 +11990,11 @@ static void Cmd_handleballthrow(void) } else // not caught { + if (!gHasFetchedBall) + { + gLastUsedBall = gLastUsedItem; + gBattleResults.catchAttempts[gLastUsedBall]++; + } if (IsCriticalCapture()) gBattleCommunication[MULTISTRING_CHOOSER] = shakes + 3; else diff --git a/src/battle_util.c b/src/battle_util.c index 9372fe6942..cb22de62e1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4126,6 +4126,20 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_BALL_FETCH: + if (gBattleMons[battler].item == ITEM_NONE + && gBattleResults.catchAttempts[gLastUsedBall] >= 1 + && !gHasFetchedBall) + { + gBattleScripting.battler = battler; + BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedBall); + MarkBattlerForControllerExec(battler); + gHasFetchedBall = TRUE; + gLastUsedItem = gLastUsedBall; + BattleScriptPushCursorAndCallback(BattleScript_BallFetch); + effect++; + } + break; } } break; From 9e8913c69831190cb7decc9d47f7240fd57390e4 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 2 Dec 2020 23:23:34 -0300 Subject: [PATCH 05/24] Implemented Propeller Tail --- src/battle_util.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index cb22de62e1..62dc7977fb 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -140,7 +140,8 @@ void HandleAction_UseMove(void) if (gSideTimers[side].followmeTimer != 0 && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) - && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + && gBattleMons[gSideTimers[side].followmeTarget].hp != 0 + && GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL) { gBattlerTarget = gSideTimers[side].followmeTarget; } @@ -158,9 +159,9 @@ void HandleAction_UseMove(void) if (side != GetBattlerSide(gActiveBattler) && *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler && ((GetBattlerAbility(gActiveBattler) == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) - || (GetBattlerAbility(gActiveBattler) == ABILITY_STORM_DRAIN && moveType == TYPE_WATER) - ) - && GetBattlerTurnOrderNum(gActiveBattler) < var) + || (GetBattlerAbility(gActiveBattler) == ABILITY_STORM_DRAIN && moveType == TYPE_WATER)) + && GetBattlerTurnOrderNum(gActiveBattler) < var + && GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL) { var = GetBattlerTurnOrderNum(gActiveBattler); } From e2f4ca27b0eed0480ec040ee0b38bf27dc1f27a5 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 5 Dec 2020 02:43:29 -0300 Subject: [PATCH 06/24] BattleScript_TargetAbilityStatRaiseOnSwitchin -> BattleScript_TargetAbilityStatRaiseOnSwitchIn --- data/battle_scripts_1.s | 2 +- include/battle_scripts.h | 2 +- src/battle_util.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8c7f31f1eb..a030cdb674 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7106,7 +7106,7 @@ BattleScript_AngryPointActivates:: waitmessage 0x40 return -BattleScript_TargetAbilityStatRaiseOnSwitchin:: +BattleScript_TargetAbilityStatRaiseOnSwitchIn:: call BattleScript_AbilityPopUp statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL setgraphicalstatchangevalues diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 9fa4256b47..ecaaf52c47 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -350,7 +350,7 @@ extern const u8 BattleScript_EmergencyExitWild[]; extern const u8 BattleScript_EmergencyExitWildNoPopUp[]; extern const u8 BattleScript_CheekPouchActivates[]; extern const u8 BattleScript_AnnounceAirLockCloudNine[]; -extern const u8 BattleScript_TargetAbilityStatRaiseOnSwitchin[]; +extern const u8 BattleScript_TargetAbilityStatRaiseOnSwitchIn[]; extern const u8 BattleScript_CottonDownActivates[]; extern const u8 BattleScript_BallFetch[]; diff --git a/src/battle_util.c b/src/battle_util.c index 62dc7977fb..b60310c4f6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3942,7 +3942,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { gSpecialStatuses[battler].switchInAbilityDone = 1; SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchin); + BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchIn); effect++; } break; @@ -3951,7 +3951,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { gSpecialStatuses[battler].switchInAbilityDone = 1; SET_STATCHANGER(STAT_DEF, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchin); + BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchIn); effect++; } break; From 6bbd88049a8c0ff3c98e55db9db91a988356056b Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 5 Dec 2020 03:03:55 -0300 Subject: [PATCH 07/24] Ball Fetch tweaks --- data/battle_scripts_1.s | 1 + src/battle_main.c | 2 +- src/battle_message.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a030cdb674..80dc1bdbb4 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6166,6 +6166,7 @@ BattleScript_AttackerFormChangeEnd3:: end3 BattleScript_BallFetch:: + call BattleScript_AbilityPopUp printstring STRINGID_FETCHEDPOKEBALL waitmessage 0x40 end3 diff --git a/src/battle_main.c b/src/battle_main.c index e2c23bd2a3..000bed5113 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -229,7 +229,7 @@ EWRAM_DATA struct FieldTimer gFieldTimers = {0}; EWRAM_DATA u8 gBattlerAbility = 0; EWRAM_DATA u16 gPartnerSpriteId = 0; EWRAM_DATA bool8 gHasFetchedBall = FALSE; -EWRAM_DATA bool8 gLastUsedBall = 0; +EWRAM_DATA u8 gLastUsedBall = 0; // IWRAM common vars void (*gPreBattleCallback1)(void); diff --git a/src/battle_message.c b/src/battle_message.c index c62674d536..3bc300d2cd 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -685,7 +685,7 @@ static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all\nother POKéMON's auras!"); static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!"); static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!"); -static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has fetched\nyour {B_LAST_ITEM}!"); +static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { From 002973d37368998c79de2188f11aae4c2fcf3f94 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 5 Dec 2020 13:50:47 -0300 Subject: [PATCH 08/24] Renamed BattleScript_TargetAbilityStatRaiseOnSwitchIn This battlescript is meant to be called within the case ABILITYEFFECT_ON_SWITCHIN of AbilityBattleEffects, which refers to the currently selected battler as Battler instead of Attacker or Target. --- data/battle_scripts_1.s | 2 +- include/battle_scripts.h | 2 +- src/battle_util.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 80dc1bdbb4..e9664a46f9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7107,7 +7107,7 @@ BattleScript_AngryPointActivates:: waitmessage 0x40 return -BattleScript_TargetAbilityStatRaiseOnSwitchIn:: +BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: call BattleScript_AbilityPopUp statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL setgraphicalstatchangevalues diff --git a/include/battle_scripts.h b/include/battle_scripts.h index ecaaf52c47..864825ed6f 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -350,7 +350,7 @@ extern const u8 BattleScript_EmergencyExitWild[]; extern const u8 BattleScript_EmergencyExitWildNoPopUp[]; extern const u8 BattleScript_CheekPouchActivates[]; extern const u8 BattleScript_AnnounceAirLockCloudNine[]; -extern const u8 BattleScript_TargetAbilityStatRaiseOnSwitchIn[]; +extern const u8 BattleScript_BattlerAbilityStatRaiseOnSwitchIn[]; extern const u8 BattleScript_CottonDownActivates[]; extern const u8 BattleScript_BallFetch[]; diff --git a/src/battle_util.c b/src/battle_util.c index b60310c4f6..19171e7fdf 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3942,7 +3942,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { gSpecialStatuses[battler].switchInAbilityDone = 1; SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchIn); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); effect++; } break; @@ -3951,7 +3951,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { gSpecialStatuses[battler].switchInAbilityDone = 1; SET_STATCHANGER(STAT_DEF, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_TargetAbilityStatRaiseOnSwitchIn); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); effect++; } break; From 6a0fee9c56f35325966dca92476d1ed35479674b Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 5 Dec 2020 14:03:13 -0300 Subject: [PATCH 09/24] Fixed Intrepid Sword and Dauntless Shield And also introduced a new BattleString for BattleScript_BattlerAbilityStatRaiseOnSwitchIn --- data/battle_scripts_1.s | 5 +++-- include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e9664a46f9..78992eb262 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7108,12 +7108,13 @@ BattleScript_AngryPointActivates:: return BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: + copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 waitanimation - printstring STRINGID_TARGETABILITYSTATRAISE + printstring STRINGID_BATTLERABILITYRAISEDSTAT waitmessage 0x40 end3 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 4d3ba62a82..75a2fddc5e 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -559,8 +559,9 @@ #define STRINGID_COMATOSEENTERS 555 #define STRINGID_SCREENCLEANERENTERS 556 #define STRINGID_FETCHEDPOKEBALL 557 +#define STRINGID_BATTLERABILITYRAISEDSTAT 558 -#define BATTLESTRINGS_COUNT 558 +#define BATTLESTRINGS_COUNT 559 //// multichoice message IDs // switch in ability message diff --git a/src/battle_message.c b/src/battle_message.c index 3bc300d2cd..e51d85fe36 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -686,9 +686,11 @@ static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!"); static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!"); static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); +static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_BATTLERABILITYRAISEDSTAT - 12] = sText_BattlerAbilityRaisedStat, [STRINGID_FETCHEDPOKEBALL - 12] = sText_FetchedPokeBall, [STRINGID_STATWASNOTLOWERED - 12] = sText_StatWasNotLowered, [STRINGID_CLOAKEDINAFREEZINGLIGHT - 12] = sText_CloakedInAFreezingLight, From c83c67ff8e30360b4c6786ba644f3d706c0acf5e Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 5 Dec 2020 14:14:26 -0300 Subject: [PATCH 10/24] Implemented Stalwart --- src/battle_util.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 19171e7fdf..9527ac6c02 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -141,7 +141,8 @@ void HandleAction_UseMove(void) && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) && gBattleMons[gSideTimers[side].followmeTarget].hp != 0 - && GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL) + && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL + || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)) { gBattlerTarget = gSideTimers[side].followmeTarget; } @@ -161,7 +162,8 @@ void HandleAction_UseMove(void) && ((GetBattlerAbility(gActiveBattler) == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) || (GetBattlerAbility(gActiveBattler) == ABILITY_STORM_DRAIN && moveType == TYPE_WATER)) && GetBattlerTurnOrderNum(gActiveBattler) < var - && GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL) + && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL + || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)) { var = GetBattlerTurnOrderNum(gActiveBattler); } From c9824a8dd9e2f502441a8ade0395a0cdca6fdc93 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 7 Dec 2020 15:03:52 -0300 Subject: [PATCH 11/24] Fixed Cotton Down It was tough, but the nightmare is finally over. Ghoulslash, Blurose, Cancer Fairy, thanks to all of you guys! --- data/battle_scripts_1.s | 23 ++++++++++++++--------- src/battle_util.c | 13 +++++-------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 78992eb262..ddfa5e594c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6196,23 +6196,28 @@ BattleScript_IllusionOff:: return BattleScript_CottonDownActivates:: - setbyte gBattlerTarget, 0x1 + call BattleScript_AbilityPopUp + copybyte gEffectBattler, gBattlerTarget + savetarget + setbyte gBattlerTarget, 0x0 BattleScript_CottonDownLoop: setstatchanger STAT_SPEED, 1, TRUE - statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | STAT_BUFF_ALLOW_PTR, BattleScript_CottonDownActivatesLoopIncrement - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CottonDownEnd - call BattleScript_AbilityPopUp + jumpifbyteequal gBattlerTarget, gEffectBattler, BattleScript_CottonDownLoopIncrement + statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_CottonDownTargetSpeedCantGoLower setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - setbyte gBattleCommunication STAT_SPEED - stattextbuffer BS_TARGET printfromtable gStatDownStringIds waitmessage 0x40 -BattleScript_CottonDownActivatesLoopIncrement: + goto BattleScript_CottonDownLoopIncrement +BattleScript_CottonDownTargetSpeedCantGoLower: + printstring STRINGID_STATSWONTDECREASE + waitmessage 0x40 +BattleScript_CottonDownLoopIncrement: addbyte gBattlerTarget, 0x1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop -BattleScript_CottonDownEnd: - end3 +BattleScript_CottonDownReturn: + restoretarget + return BattleScript_AnticipationActivates:: pause 0x5 diff --git a/src/battle_util.c b/src/battle_util.c index 9527ac6c02..ff93b4120d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4627,17 +4627,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move break; case ABILITY_COTTON_DOWN: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gBattleMons[gBattlerTarget].hp != 0 + && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED) { - for (i = 0; i < gBattlersCount; i++) - { - gBattlerAttacker = i; - BattleScriptPushCursorAndCallback(BattleScript_CottonDownActivates); - effect++; - break; - } + gEffectBattler = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CottonDownActivates; + effect++; } break; } From 322918e28004673a9ca95d328e29f7ba12bbb18a Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 10 Dec 2020 18:27:35 -0300 Subject: [PATCH 12/24] Implemented Steam Engine And I also made the BattleScript created for Anger Point a bit more neutral friendly so it can be reused on situations like this. --- data/battle_scripts_1.s | 4 ++-- include/battle_scripts.h | 2 +- include/constants/battle_string_ids.h | 2 +- src/battle_message.c | 4 ++-- src/battle_util.c | 15 ++++++++++++++- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ddfa5e594c..69af61a12e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7103,12 +7103,12 @@ BattleScript_MummyActivates:: waitmessage 0x40 return -BattleScript_AngryPointActivates:: +BattleScript_TargetsStatWasMaxedOut:: call BattleScript_AbilityPopUp statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printstring STRINGID_ANGRYPOINTACTIVATES + printstring STRINGID_TARGETSSTATWASMAXEDOUT waitmessage 0x40 return diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 864825ed6f..097e907c55 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -250,7 +250,7 @@ extern const u8 BattleScript_GravityEnds[]; extern const u8 BattleScript_MoveStatDrain[]; extern const u8 BattleScript_MoveStatDrain_PPLoss[]; extern const u8 BattleScript_TargetAbilityStatRaiseOnMoveEnd[]; -extern const u8 BattleScript_AngryPointActivates[]; +extern const u8 BattleScript_TargetsStatWasMaxedOut[]; extern const u8 BattleScript_AttackerAbilityStatRaise[]; extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[]; extern const u8 BattleScript_PoisonHealActivates[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 75a2fddc5e..526a68c588 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -452,7 +452,7 @@ #define STRINGID_PSYCHICTERRAINENDS 448 #define STRINGID_GRASSYTERRAINENDS 449 #define STRINGID_TARGETABILITYSTATRAISE 450 -#define STRINGID_ANGRYPOINTACTIVATES 451 +#define STRINGID_TARGETSSTATWASMAXEDOUT 451 #define STRINGID_ATTACKERABILITYSTATRAISE 452 #define STRINGID_POISONHEALHPUP 453 #define STRINGID_BADDREAMSDMG 454 diff --git a/src/battle_message.c b/src/battle_message.c index e51d85fe36..9ca2b7cce1 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -584,7 +584,7 @@ static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfr static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield."); static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield."); static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared\nfrom the battlefield."); -static const u8 sText_AngryPointActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits attack!"); +static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits {B_BUFF1}!"); static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX}\na little bit!"); static const u8 sText_BadDreamsDmg[] = _("{B_DEF_NAME_WITH_PREFIX} is tormented\nby {B_ATK_ABILITY}!"); static const u8 sText_MoldBreakerEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!"); @@ -1160,7 +1160,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PSYCHICTERRAINENDS - 12] = sText_PsychicTerrainEnds, [STRINGID_GRASSYTERRAINENDS - 12] = sText_GrassyTerrainEnds, [STRINGID_TARGETABILITYSTATRAISE - 12] = sText_TargetAbilityRaisedStat, - [STRINGID_ANGRYPOINTACTIVATES - 12] = sText_AngryPointActivates, + [STRINGID_TARGETSSTATWASMAXEDOUT - 12] = sText_TargetsStatWasMaxedOut, [STRINGID_ATTACKERABILITYSTATRAISE - 12] = sText_AttackerAbilityRaisedStat, [STRINGID_POISONHEALHPUP - 12] = sText_PoisonHealHpUp, [STRINGID_BADDREAMSDMG - 12] = sText_BadDreamsDmg, diff --git a/src/battle_util.c b/src/battle_util.c index ff93b4120d..c1270453ff 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4425,7 +4425,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { SET_STATCHANGER(STAT_ATK, 12 - gBattleMons[battler].statStages[STAT_ATK], FALSE); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AngryPointActivates; + gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut; effect++; } break; @@ -4637,6 +4637,19 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_STEAM_ENGINE: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && gBattleMons[battler].statStages[STAT_SPEED] != 12 + && (moveType == TYPE_FIRE || moveType == TYPE_WATER)) + { + SET_STATCHANGER(STAT_SPEED, 12 - gBattleMons[battler].statStages[STAT_SPEED], FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut; + effect++; + } + break; } break; case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker From 7d8b8083e809810468a55a8a6e244f609f32772e Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 11 Dec 2020 16:41:53 -0300 Subject: [PATCH 13/24] Implemented Sand Spit --- data/battle_scripts_1.s | 9 +++++++++ include/battle_scripts.h | 1 + include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ src/battle_util.c | 13 +++++++++++++ 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 69af61a12e..c03384cfbd 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6738,6 +6738,15 @@ BattleScript_SandstreamActivates:: call BattleScript_WeatherFormChanges end3 +BattleScript_SandSpitActivates:: + pause 0x20 + call BattleScript_AbilityPopUp + printstring STRINGID_ASANDSTORMKICKEDUP + waitstate + playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES, NULL + call BattleScript_WeatherFormChanges + return + BattleScript_ShedSkinActivates:: call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXCUREDYPROBLEM diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 097e907c55..f97c992c98 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -353,5 +353,6 @@ extern const u8 BattleScript_AnnounceAirLockCloudNine[]; extern const u8 BattleScript_BattlerAbilityStatRaiseOnSwitchIn[]; extern const u8 BattleScript_CottonDownActivates[]; extern const u8 BattleScript_BallFetch[]; +extern const u8 BattleScript_SandSpitActivates[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 526a68c588..7f1737ac1c 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -560,8 +560,9 @@ #define STRINGID_SCREENCLEANERENTERS 556 #define STRINGID_FETCHEDPOKEBALL 557 #define STRINGID_BATTLERABILITYRAISEDSTAT 558 +#define STRINGID_ASANDSTORMKICKEDUP 559 -#define BATTLESTRINGS_COUNT 559 +#define BATTLESTRINGS_COUNT 560 //// multichoice message IDs // switch in ability message diff --git a/src/battle_message.c b/src/battle_message.c index 9ca2b7cce1..2fec453b0d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -687,9 +687,11 @@ static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} i static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!"); static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); +static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ASANDSTORMKICKEDUP - 12] = sText_ASandstormKickedUp, [STRINGID_BATTLERABILITYRAISEDSTAT - 12] = sText_BattlerAbilityRaisedStat, [STRINGID_FETCHEDPOKEBALL - 12] = sText_FetchedPokeBall, [STRINGID_STATWASNOTLOWERED - 12] = sText_StatWasNotLowered, diff --git a/src/battle_util.c b/src/battle_util.c index c1270453ff..73304c8fe3 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4650,6 +4650,19 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_SAND_SPIT: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && !(WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SANDSTORM_ANY) + && TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE)) + { + gBattleScripting.battler = gActiveBattler = battler; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SandSpitActivates; + effect++; + } + break; } break; case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker From 2b0702ec04a5c0e3b3a036ef7ee587b36c1763d3 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 11 Dec 2020 19:00:30 -0300 Subject: [PATCH 14/24] Implemented Perish Body Inspired by Raguzero's implementation. --- data/battle_scripts_1.s | 7 +++++++ include/battle_scripts.h | 1 + include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ src/battle_util.c | 22 ++++++++++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index c03384cfbd..5701d223e2 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5733,6 +5733,13 @@ BattleScript_PerishSongTakesLife:: tryfaintmon BS_ATTACKER, FALSE, NULL end2 +BattleScript_PerishBodyActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSWILLPERISHIN3TURNS + waitmessage 0x40 + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 + return + BattleScript_PerishSongCountGoesDown:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage 0x40 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index f97c992c98..2d4fb2ed28 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -354,5 +354,6 @@ extern const u8 BattleScript_BattlerAbilityStatRaiseOnSwitchIn[]; extern const u8 BattleScript_CottonDownActivates[]; extern const u8 BattleScript_BallFetch[]; extern const u8 BattleScript_SandSpitActivates[]; +extern const u8 BattleScript_PerishBodyActivates[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 7f1737ac1c..297233eb07 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -561,8 +561,9 @@ #define STRINGID_FETCHEDPOKEBALL 557 #define STRINGID_BATTLERABILITYRAISEDSTAT 558 #define STRINGID_ASANDSTORMKICKEDUP 559 +#define STRINGID_PKMNSWILLPERISHIN3TURNS 560 -#define BATTLESTRINGS_COUNT 560 +#define BATTLESTRINGS_COUNT 561 //// multichoice message IDs // switch in ability message diff --git a/src/battle_message.c b/src/battle_message.c index 2fec453b0d..ea574f0e99 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -688,9 +688,11 @@ static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field wer static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!"); +static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_PKMNSWILLPERISHIN3TURNS - 12] = sText_PkmnsWillPerishIn3Turns, [STRINGID_ASANDSTORMKICKEDUP - 12] = sText_ASandstormKickedUp, [STRINGID_BATTLERABILITYRAISEDSTAT - 12] = sText_BattlerAbilityRaisedStat, [STRINGID_FETCHEDPOKEBALL - 12] = sText_FetchedPokeBall, diff --git a/src/battle_util.c b/src/battle_util.c index 73304c8fe3..65f55001b9 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4663,6 +4663,28 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_PERISH_BODY: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && IsBattlerAlive(battler) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && !(gStatuses3[gBattlerAttacker] & STATUS3_PERISH_SONG)) + { + if (!(gStatuses3[battler] & STATUS3_PERISH_SONG)) + { + gStatuses3[battler] |= STATUS3_PERISH_SONG; + gDisableStructs[battler].perishSongTimer = 3; + gDisableStructs[battler].perishSongTimerStartValue = 3; + } + gStatuses3[gBattlerAttacker] |= STATUS3_PERISH_SONG; + gDisableStructs[gBattlerAttacker].perishSongTimer = 3; + gDisableStructs[gBattlerAttacker].perishSongTimerStartValue = 3; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_PerishBodyActivates; + effect++; + } + break; } break; case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker From c930a63c84d5c66deda4299765af53da99244a14 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 11 Dec 2020 19:46:33 -0300 Subject: [PATCH 15/24] Implemented Punk Rock --- include/constants/pokemon.h | 1 + src/battle_util.c | 8 ++++++++ src/data/battle_moves.h | 26 +++++++++++++------------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 3341223858..0edb1608e0 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -264,6 +264,7 @@ #define FLAG_DANCE (1 << 21) #define FLAG_DMG_IN_AIR (1 << 22) // X2 dmg on air, always hits target on air #define FLAG_HIT_IN_AIR (1 << 23) // dmg is normal, always hits target on air +#define FLAG_PUNK_ROCK_AFFECTED (1 << 24) // To do: Add it to Eerie Spell's move data. // Split defines. #define SPLIT_PHYSICAL 0x0 diff --git a/src/battle_util.c b/src/battle_util.c index 65f55001b9..87ce6bce7b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6777,6 +6777,10 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (moveType == TYPE_NORMAL && gBattleStruct->ateBoost[battlerAtk]) MulModifier(&modifier, UQ_4_12(1.2)); break; + case ABILITY_PUNK_ROCK: + if (gBattleMoves[move].flags & FLAG_PUNK_ROCK_AFFECTED) + MulModifier(&modifier, UQ_4_12(1.3)); + break; } // field abilities @@ -7222,6 +7226,10 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, if (gBattleMons[battlerDef].species == SPECIES_CHERRIM && WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && !usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); break; + case ABILITY_PUNK_ROCK: + if (gBattleMoves[move].flags & FLAG_PUNK_ROCK_AFFECTED) + MulModifier(&modifier, UQ_4_12(1.3)); + break; } // ally's abilities diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 0b0c0b5530..046d110352 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -2720,7 +2720,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -3993,7 +3993,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -4764,7 +4764,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -6354,7 +6354,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -7715,7 +7715,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -7729,7 +7729,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -8479,7 +8479,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -8593,7 +8593,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -8876,7 +8876,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -9050,7 +9050,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -9637,7 +9637,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = STATUS1_BURN, }, @@ -10016,7 +10016,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -10936,7 +10936,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, .split = SPLIT_SPECIAL, }, From 8e187d1d5babe4d9669e40e1cbd8157b8605790b Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 12 Dec 2020 19:39:35 -0300 Subject: [PATCH 16/24] Implemented Ice Scales --- src/battle_util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/battle_util.c b/src/battle_util.c index 87ce6bce7b..2fb5181c6b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -7087,6 +7087,10 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT); } break; + case ABILITY_ICE_SCALES: + if (IS_MOVE_SPECIAL(move)) + MulModifier(&modifier, UQ_4_12(0.5)); + break; } // ally's abilities From 1f10b94a110dfeac93cf27fa2e112504e096e5dd Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 12 Dec 2020 20:09:50 -0300 Subject: [PATCH 17/24] Implemented Power Spot --- src/battle_util.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle_util.c b/src/battle_util.c index 2fb5181c6b..2c4ce033dc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -7102,6 +7102,9 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM) MulModifier(&modifier, UQ_4_12(1.5)); break; + case ABILITY_POWER_SPOT: + MulModifier(&modifier, UQ_4_12(1.3)); + break; } } From dc34ad7e83cc5dee7a3d9cba7d0e0047eedcc826 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 12 Dec 2020 21:24:39 -0300 Subject: [PATCH 18/24] Tweaked abilitypopup usage on Cotton Down's BattleScript --- data/battle_scripts_1.s | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5701d223e2..78e8dec751 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6203,6 +6203,7 @@ BattleScript_IllusionOff:: return BattleScript_CottonDownActivates:: + setbyte sFIXED_ABILITY_POPUP, TRUE call BattleScript_AbilityPopUp copybyte gEffectBattler, gBattlerTarget savetarget @@ -6224,6 +6225,7 @@ BattleScript_CottonDownLoopIncrement: jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop BattleScript_CottonDownReturn: restoretarget + destroyabilitypopup return BattleScript_AnticipationActivates:: From a417a1b2b91353af7784d6f6af096b632aac4c30 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 19 Dec 2020 16:18:39 -0300 Subject: [PATCH 19/24] Corrected Punk Rock's checks --- include/constants/pokemon.h | 1 - src/battle_util.c | 4 ++-- src/data/battle_moves.h | 26 +++++++++++++------------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 0edb1608e0..3341223858 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -264,7 +264,6 @@ #define FLAG_DANCE (1 << 21) #define FLAG_DMG_IN_AIR (1 << 22) // X2 dmg on air, always hits target on air #define FLAG_HIT_IN_AIR (1 << 23) // dmg is normal, always hits target on air -#define FLAG_PUNK_ROCK_AFFECTED (1 << 24) // To do: Add it to Eerie Spell's move data. // Split defines. #define SPLIT_PHYSICAL 0x0 diff --git a/src/battle_util.c b/src/battle_util.c index 2c4ce033dc..124fc96e10 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6778,7 +6778,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(1.2)); break; case ABILITY_PUNK_ROCK: - if (gBattleMoves[move].flags & FLAG_PUNK_ROCK_AFFECTED) + if ((gBattleMoves[move].flags & FLAG_SOUND) && !IS_MOVE_STATUS(move)) MulModifier(&modifier, UQ_4_12(1.3)); break; } @@ -7234,7 +7234,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_PUNK_ROCK: - if (gBattleMoves[move].flags & FLAG_PUNK_ROCK_AFFECTED) + if ((gBattleMoves[move].flags & FLAG_SOUND) && !IS_MOVE_STATUS(move)) MulModifier(&modifier, UQ_4_12(1.3)); break; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 046d110352..0b0c0b5530 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -2720,7 +2720,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -3993,7 +3993,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -4764,7 +4764,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -6354,7 +6354,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, }, @@ -7715,7 +7715,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, .split = SPLIT_SPECIAL, }, @@ -7729,7 +7729,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -8479,7 +8479,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, }, @@ -8593,7 +8593,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -8876,7 +8876,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -9050,7 +9050,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -9637,7 +9637,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .argument = STATUS1_BURN, }, @@ -10016,7 +10016,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, }, @@ -10936,7 +10936,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND | FLAG_PUNK_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, }, From 819001c1023e00dd3e7e7cb6dd751b0f873b3a2f Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 19 Dec 2020 19:15:12 -0300 Subject: [PATCH 20/24] Removed redundant check in Punk Rock's effect --- src/battle_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 124fc96e10..a53b6d56db 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6778,7 +6778,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(1.2)); break; case ABILITY_PUNK_ROCK: - if ((gBattleMoves[move].flags & FLAG_SOUND) && !IS_MOVE_STATUS(move)) + if (gBattleMoves[move].flags & FLAG_SOUND) MulModifier(&modifier, UQ_4_12(1.3)); break; } @@ -7234,7 +7234,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_PUNK_ROCK: - if ((gBattleMoves[move].flags & FLAG_SOUND) && !IS_MOVE_STATUS(move)) + if (gBattleMoves[move].flags & FLAG_SOUND) MulModifier(&modifier, UQ_4_12(1.3)); break; } From 3246c20be5641df7e47f65f91a4584c5f5cb7a39 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 5 Jan 2021 19:51:52 -0300 Subject: [PATCH 21/24] Moved Power Spot's effect to CalcMoveBasePowerAfterModifiers --- src/battle_util.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 73157ac125..427c8c0d2d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6802,6 +6802,9 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (IS_MOVE_SPECIAL(move)) MulModifier(&modifier, UQ_4_12(1.3)); break; + case ABILITY_POWER_SPOT: + MulModifier(&modifier, UQ_4_12(1.3)); + break; } } @@ -7102,9 +7105,6 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM && IS_MOVE_PHYSICAL(move)) MulModifier(&modifier, UQ_4_12(1.5)); break; - case ABILITY_POWER_SPOT: - MulModifier(&modifier, UQ_4_12(1.3)); - break; } } From 339aa95c1de12036e701cc593acd697909c404cf Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 7 Jan 2021 04:30:34 -0300 Subject: [PATCH 22/24] Review corrections -Intrepid Sword and Dauntless Shield are now properly affecting the user -Slightly tweaked Ball Fetch's effect, since an operation involving gBattleResults.catchAttempts was being done twice unnecessarily. --- data/battle_scripts_1.s | 2 +- src/battle_script_commands.c | 4 +--- src/battle_util.c | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a64c551e8e..2b9aa31295 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7154,7 +7154,7 @@ BattleScript_TargetsStatWasMaxedOut:: BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp - statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL setgraphicalstatchangevalues playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 waitanimation diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 047caa8ccc..4a3fb47e21 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12008,10 +12008,8 @@ static void Cmd_handleballthrow(void) else // not caught { if (!gHasFetchedBall) - { gLastUsedBall = gLastUsedItem; - gBattleResults.catchAttempts[gLastUsedBall]++; - } + if (IsCriticalCapture()) gBattleCommunication[MULTISTRING_CHOOSER] = shakes + 3; else diff --git a/src/battle_util.c b/src/battle_util.c index 427c8c0d2d..c122288db5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4131,7 +4131,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move break; case ABILITY_BALL_FETCH: if (gBattleMons[battler].item == ITEM_NONE - && gBattleResults.catchAttempts[gLastUsedBall] >= 1 + && gBattleResults.catchAttempts[gLastUsedBall - ITEM_ULTRA_BALL] >= 1 && !gHasFetchedBall) { gBattleScripting.battler = battler; From de9b0328ecf10854b9f713c75e412c6588e4b9ef Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 7 Jan 2021 16:19:56 -0300 Subject: [PATCH 23/24] Corrections to Steam Engine --- src/battle_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index c122288db5..a9e7910ec0 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4644,9 +4644,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && gBattleMons[battler].statStages[STAT_SPEED] != 12 && (moveType == TYPE_FIRE || moveType == TYPE_WATER)) { - SET_STATCHANGER(STAT_SPEED, 12 - gBattleMons[battler].statStages[STAT_SPEED], FALSE); + SET_STATCHANGER(STAT_SPEED, 6, FALSE); BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut; + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd; effect++; } break; From 8511ed57e47ecd73d19468f1757f5dbe956823c8 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 7 Jan 2021 17:56:23 -0300 Subject: [PATCH 24/24] Tweaked Steam Engine's battle string --- data/battle_scripts_1.s | 2 +- include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2b9aa31295..159410dcf3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7168,7 +7168,7 @@ BattleScript_TargetAbilityStatRaiseOnMoveEnd:: setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 waitanimation - printstring STRINGID_TARGETABILITYSTATRAISE + printstring STRINGID_ABILITYRAISEDSTATDRASTICALLY waitmessage 0x40 return diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 297233eb07..a572975018 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -562,8 +562,9 @@ #define STRINGID_BATTLERABILITYRAISEDSTAT 558 #define STRINGID_ASANDSTORMKICKEDUP 559 #define STRINGID_PKMNSWILLPERISHIN3TURNS 560 +#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 561 -#define BATTLESTRINGS_COUNT 561 +#define BATTLESTRINGS_COUNT 562 //// multichoice message IDs // switch in ability message diff --git a/src/battle_message.c b/src/battle_message.c index 2d9ff1884d..1ffa245d3e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -689,9 +689,11 @@ static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fou static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!"); static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!"); +static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} drastically!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ABILITYRAISEDSTATDRASTICALLY - 12] = sText_AbilityRaisedStatDrastically, [STRINGID_PKMNSWILLPERISHIN3TURNS - 12] = sText_PkmnsWillPerishIn3Turns, [STRINGID_ASANDSTORMKICKEDUP - 12] = sText_ASandstormKickedUp, [STRINGID_BATTLERABILITYRAISEDSTAT - 12] = sText_BattlerAbilityRaisedStat,