From 41aba418384a9b077186768c0e2eef706ca34049 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:35:48 +0100 Subject: [PATCH] Attackstring hitmarker clean up (#8136) --- data/battle_scripts_1.s | 1 - include/constants/battle.h | 3 +-- src/battle_main.c | 4 ---- src/battle_script_commands.c | 16 ++++++++-------- src/battle_util.c | 11 ++++------- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5ab5bb81d1..28542a95fb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3013,7 +3013,6 @@ BattleScript_PowerHerbActivation: BattleScript_EffectTwoTurnsAttack:: jumpifvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn tryfiretwoturnmovewithoutcharging BS_ATTACKER, BattleScript_EffectHit @ e.g. Solar Beam - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_ATTACKSTRING_PRINTED, BattleScript_EffectHit @ if it's not the first hit call BattleScript_FirstChargingTurn tryfiretwoturnmoveaftercharging BS_ATTACKER, BattleScript_TwoTurnMovesSecondTurn @ e.g. Electro Shot jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_TwoTurnMovesSecondPowerHerbActivates, TRUE diff --git a/include/constants/battle.h b/include/constants/battle.h index e5c1a3a3c2..7e7de5bcf8 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -246,10 +246,9 @@ enum SemiInvulnerableExclusion EXCLUDE_COMMANDER, }; -#define HITMARKER_DESTINYBOND (1 << 6) #define HITMARKER_NO_ANIMATIONS (1 << 7) // set from battleSceneOff. Never changed during battle #define HITMARKER_UNUSED_8 (1 << 8) -#define HITMARKER_ATTACKSTRING_PRINTED (1 << 9) +#define HITMARKER_UNUSED_9 (1 << 9) #define HITMARKER_UNUSED_10 (1 << 10) #define HITMARKER_UNUSED_11 (1 << 11) #define HITMARKER_UNUSED_12 (1 << 12) diff --git a/src/battle_main.c b/src/battle_main.c index ac86590724..09714392f0 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4006,7 +4006,6 @@ void BattleTurnPassed(void) TurnValuesCleanUp(FALSE); gHitMarker &= ~HITMARKER_UNABLE_TO_USE_MOVE; - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gHitMarker &= ~HITMARKER_PLAYER_FAINTED; gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; @@ -5408,10 +5407,7 @@ static void RunTurnActionsFunctions(void) else { if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battler - { - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gHitMarker &= ~HITMARKER_UNABLE_TO_USE_MOVE; - } } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3b6c7b410d..e41a4f297b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6314,13 +6314,6 @@ static void Cmd_moveend(void) { gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; gBattleStruct->lastMoveTarget[gBattlerAttacker] = gBattlerTarget; - if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) - { - gLastPrintedMoves[gBattlerAttacker] = gChosenMove; - gLastUsedMove = gCurrentMove; - if (IsMaxMove(gCurrentMove)) - gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; - } } enum BattleMoveEffects originalEffect = GetMoveEffect(originallyUsedMove); if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) @@ -6356,6 +6349,12 @@ static void Cmd_moveend(void) { gLastLandedMoves[gBattlerTarget] = gCurrentMove; gLastHitByType[gBattlerTarget] = GetBattleMoveType(gCurrentMove); + if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) + { + gLastUsedMove = gCurrentMove; + if (IsMaxMove(gCurrentMove)) + gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; + } } } else @@ -6431,7 +6430,8 @@ static void Cmd_moveend(void) if (moveEffect == EFFECT_EXPLOSION || moveEffect == EFFECT_MISTY_EXPLOSION || moveEffect == EFFECT_MAGNITUDE - || moveEffect == EFFECT_SYNCHRONOISE) + || moveEffect == EFFECT_SYNCHRONOISE + || gBattleMoveEffects[moveEffect].battleScript == BattleScript_EffectTwoTurnsAttack) BattleScriptPush(gBattleMoveEffects[EFFECT_HIT].battleScript); else BattleScriptPush(GetMoveBattleScript(gCurrentMove)); diff --git a/src/battle_util.c b/src/battle_util.c index d8e9c2c5d5..b3450ab78a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -914,9 +914,7 @@ void HandleAction_NothingIsFainted(void) gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_STATUS_ABILITY_EFFECT - | HITMARKER_OBEYS); + gHitMarker &= ~(HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_OBEYS); } void HandleAction_ActionFinished(void) @@ -927,9 +925,7 @@ void HandleAction_ActionFinished(void) gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_STATUS_ABILITY_EFFECT - | HITMARKER_OBEYS); + gHitMarker &= ~(HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_OBEYS); ClearDamageCalcResults(); gCurrentMove = 0; @@ -2475,8 +2471,9 @@ static enum MoveCanceller CancellerStanceChangeTwo(struct BattleContext *ctx) static enum MoveCanceller CancellerAttackstring(struct BattleContext *ctx) { - gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; BattleScriptCall(BattleScript_Attackstring); + if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) + gLastPrintedMoves[gBattlerAttacker] = gChosenMove; return MOVE_STEP_BREAK; }