From 77842b03760266a28bd53469ded7fd5fdb3cd1fd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 25 Dec 2019 12:19:09 +0100 Subject: [PATCH] Contact moves for Aftermath and Bestow for Unburden --- src/battle_script_commands.c | 12 ++++-------- src/battle_util.c | 11 +++++------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e01e13dd0..ec4c3aff4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2686,12 +2686,10 @@ void SetMoveEffect(bool32 primary, u32 certain) else { gLastUsedItem = gBattleStruct->changedItems[gBattlerAttacker] = gBattleMons[gBattlerTarget].item; - gBattleMons[gBattlerTarget].item = 0; + gBattleMons[gBattlerTarget].item = 0; CheckSetUnburden(gBattlerTarget); - - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNBURDEN && gBattleResources->flags->flags[gBattlerAttacker] & RESOURCE_FLAG_UNBURDEN) - gBattleResources->flags->flags[gBattlerAttacker] &= ~(RESOURCE_FLAG_UNBURDEN); + gBattleResources->flags->flags[gBattlerAttacker] &= ~(RESOURCE_FLAG_UNBURDEN); gActiveBattler = gBattlerAttacker; BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); @@ -2944,7 +2942,6 @@ void SetMoveEffect(bool32 primary, u32 certain) { gLastUsedItem = gBattleMons[gEffectBattler].item; gBattleMons[gEffectBattler].item = 0; - CheckSetUnburden(gEffectBattler); gActiveBattler = gEffectBattler; @@ -2960,7 +2957,6 @@ void SetMoveEffect(bool32 primary, u32 certain) { gLastUsedItem = gBattleMons[gEffectBattler].item; gBattleMons[gEffectBattler].item = 0; - CheckSetUnburden(gEffectBattler); gActiveBattler = gEffectBattler; @@ -6140,7 +6136,6 @@ static void Cmd_removeitem(void) gBattleStruct->usedHeldItems[gActiveBattler] = gBattleMons[gActiveBattler].item; gBattleMons[gActiveBattler].item = 0; - CheckSetUnburden(gActiveBattler); BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item); @@ -7608,11 +7603,13 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].item = ITEM_NONE; BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item); MarkBattlerForControllerExec(gActiveBattler); + CheckSetUnburden(gBattlerAttacker); gActiveBattler = gBattlerTarget; gBattleMons[gActiveBattler].item = gLastUsedItem; BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item); MarkBattlerForControllerExec(gActiveBattler); + gBattleResources->flags->flags[gBattlerTarget] &= ~(RESOURCE_FLAG_UNBURDEN); gBattlescriptCurrInstr += 7; } @@ -10518,7 +10515,6 @@ static void Cmd_tryswapitems(void) // trick else { CheckSetUnburden(gBattlerAttacker); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; // attacker's item -> <- nothing } } diff --git a/src/battle_util.c b/src/battle_util.c index ddb9563d9..cdc645cbe 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3323,7 +3323,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA && gBattleMons[gBattlerAttacker].statStages[STAT_SPEED] != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + && IsMoveMakingContact(move, gBattlerAttacker)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_SPD_MINUS_1; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); @@ -3339,7 +3339,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + && IsMoveMakingContact(move, gBattlerAttacker)) { gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; if (gBattleMoveDamage == 0) @@ -3351,11 +3351,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA } break; case ABILITY_AFTERMATH: - if (IsAbilityOnField(ABILITY_DAMP)) - break; - else if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + if (!IsAbilityOnField(ABILITY_DAMP) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerTarget].hp == 0 - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + && IsMoveMakingContact(move, gBattlerAttacker)) { gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; if (gBattleMoveDamage == 0)