From f2e486eb0d92ff6d7099de5899dbb4d260a64160 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 6 Jan 2021 09:37:31 -0700 Subject: [PATCH 1/3] custap berry effect, custap/quick claw activation message --- data/battle_scripts_1.s | 15 +++++++ include/battle.h | 9 ++++ include/battle_scripts.h | 2 + include/battle_util.h | 1 + include/constants/battle_string_ids.h | 3 +- include/constants/hold_effects.h | 3 ++ src/battle_main.c | 61 ++++++++++++++++++++++----- src/battle_message.c | 2 + src/battle_util.c | 2 +- 9 files changed, 86 insertions(+), 12 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3eb1f5cbe6..28da6de0e1 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7714,3 +7714,18 @@ BattleScript_AnnounceAirLockCloudNine:: waitmessage 0x40 call BattleScript_WeatherFormChanges end3 + +BattleScript_QuickClawActivation:: + playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP, NULL + waitanimation + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage 0x40 + end2 + +BattleScript_CustapBerryActivation:: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + waitanimation + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage 0x40 + removeitem BS_ATTACKER + end2 diff --git a/include/battle.h b/include/battle.h index 488e0fc51c..a7e8f5212b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -427,6 +427,13 @@ struct Illusion struct Pokemon *mon; }; +struct PinchBerry +{ + u8 micleBerry:1; + u8 custap:1; // also quick claw + +}; + struct BattleStruct { u8 turnEffectsTracker; @@ -542,6 +549,8 @@ struct BattleStruct u8 sameMoveTurns[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used. u16 moveEffect2; // For Knock Off u16 changedSpecies[PARTY_SIZE]; // For Zygarde or future forms when multiple mons can change into the same pokemon. + struct PinchBerry pinchBerry[MAX_BATTLERS_COUNT]; + u8 quickClawBattlerId; }; #define GET_MOVE_TYPE(move, typeArg) \ diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 3566a1c4d2..a5548791a2 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -350,5 +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_QuickClawActivation[]; +extern const u8 BattleScript_CustapBerryActivation[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_util.h b/include/battle_util.h index f7699fceda..06256aa773 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -130,5 +130,6 @@ void ClearIllusionMon(u32 battlerId); bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId); bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); u8 GetBattleMoveSplit(u32 moveId); +bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 9348d67d5d..bcb3e86786 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_CANACTFASTERTHANKSTO 557 -#define BATTLESTRINGS_COUNT 557 +#define BATTLESTRINGS_COUNT 558 //// multichoice message IDs // switch in ability message diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index 85017cb405..3de2e7b43b 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -104,6 +104,9 @@ #define HOLD_EFFECT_RESIST_BERRY 98 #define HOLD_EFFECT_POWER_ITEM 99 #define HOLD_EFFECT_RESTORE_PCT_HP 100 +#define HOLD_EFFECT_MICLE_BERRY 101 +#define HOLD_EFFECT_JABOCA_BERRY 102 +#define HOLD_EFFECT_CUSTAP_BERRY 103 // Gen5 hold effects #define HOLD_EFFECT_FLOAT_STONE 115 diff --git a/src/battle_main.c b/src/battle_main.c index 48129c5230..916bf20b1d 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -107,6 +107,7 @@ static void sub_803CDF8(void); static bool8 AllAtActionConfirmed(void); static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); +static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); static void ReturnFromBattleToOverworld(void); static void TryEvolvePokemon(void); @@ -4324,20 +4325,23 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) u8 strikesFirst = 0; u32 speedBattler1 = 0, speedBattler2 = 0; u32 holdEffectBattler1 = 0, holdEffectBattler2 = 0; - bool32 quickClawBattler1 = FALSE, quickClawBattler2 = FALSE; s8 priority1 = 0, priority2 = 0; speedBattler1 = GetBattlerTotalSpeedStat(battler1); holdEffectBattler1 = GetBattlerHoldEffect(battler1, TRUE); - if (holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW - && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler1)) / 100) - quickClawBattler1 = TRUE; + if ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler1)) / 100) + || (!IsAbilityOnOpposingSide(battler1, ABILITY_UNNERVE) + && holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY + && HasEnoughHpToEatBerry(battler1, 4, gBattleMons[battler1].item))) + gBattleStruct->pinchBerry[battler1].custap = TRUE; speedBattler2 = GetBattlerTotalSpeedStat(battler2); holdEffectBattler2 = GetBattlerHoldEffect(battler2, TRUE); - if (holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW - && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler2)) / 100) - quickClawBattler2 = TRUE; + if ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler2)) / 100) + || (!IsAbilityOnOpposingSide(battler2, ABILITY_UNNERVE) + && holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY + && HasEnoughHpToEatBerry(battler2, 4, gBattleMons[battler2].item))) + gBattleStruct->pinchBerry[battler2].custap = TRUE; if (!ignoreChosenMoves) { @@ -4349,13 +4353,13 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) if (priority1 == priority2) { - // QUICK CLAW - always first + // QUICK CLAW / CUSTAP - always first // LAGGING TAIL - always last // STALL - always last - if (quickClawBattler1 && !quickClawBattler2) + if (gBattleStruct->pinchBerry[battler1].custap && !gBattleStruct->pinchBerry[battler2].custap) strikesFirst = 0; - else if (quickClawBattler2 && !quickClawBattler1) + else if (gBattleStruct->pinchBerry[battler2].custap && !gBattleStruct->pinchBerry[battler1].custap) strikesFirst = 1; else if (holdEffectBattler1 == HOLD_EFFECT_LAGGING_TAIL && holdEffectBattler2 != HOLD_EFFECT_LAGGING_TAIL) strikesFirst = 1; @@ -4592,6 +4596,43 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) } } + gBattleMainFunc = CheckQuickClaw_CustapBerryActivation; + gBattleStruct->quickClawBattlerId = 0; +} + +static void CheckQuickClaw_CustapBerryActivation(void) +{ + u32 i; + + if (!(gHitMarker & HITMARKER_RUN)) + { + while (gBattleStruct->quickClawBattlerId < gBattlersCount) + { + gActiveBattler = gBattlerAttacker = gBattleStruct->quickClawBattlerId; + gBattleStruct->quickClawBattlerId++; + if (gBattleStruct->pinchBerry[gActiveBattler].custap + && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) + && !(gDisableStructs[gBattlerAttacker].truantCounter) + && !(gProtectStructs[gActiveBattler].noValidMoves)) + { + gBattleStruct->pinchBerry[gActiveBattler].custap = FALSE; + gLastUsedItem = gBattleMons[gActiveBattler].item; + if (GetBattlerHoldEffect(gActiveBattler, FALSE) == HOLD_EFFECT_CUSTAP_BERRY) + { + // don't record berry since its gone now + BattleScriptExecute(BattleScript_CustapBerryActivation); + } + else + { + RecordItemEffectBattle(gActiveBattler, GetBattlerHoldEffect(gActiveBattler, FALSE)); + BattleScriptExecute(BattleScript_QuickClawActivation); + } + return; + } + } + } + + // setup stuff before turns/actions TryClearRageAndFuryCutter(); gCurrentTurnActionNumber = 0; gCurrentActionFuncId = gActionsByTurnOrder[0]; diff --git a/src/battle_message.c b/src/battle_message.c index 35ccc6e268..bf52cba31a 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_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act\nfaster, thanks to {B_LAST_ITEM}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_CANACTFASTERTHANKSTO - 12] = sText_CanActFaster, [STRINGID_STATWASNOTLOWERED - 12] = sText_StatWasNotLowered, [STRINGID_CLOAKEDINAFREEZINGLIGHT - 12] = sText_CloakedInAFreezingLight, [STRINGID_DESTINYKNOTACTIVATES - 12] = sText_DestinyKnotActivates, diff --git a/src/battle_util.c b/src/battle_util.c index aeeefa7347..586454efbe 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4977,7 +4977,7 @@ enum }; // second argument is 1/X of current hp compared to max hp -static bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId) +bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId) { bool32 isBerry = (ItemId_GetPocket(itemId) == POCKET_BERRIES); From efa4fe89adeadaaf43eb1ba59b0b1ac9999c8e16 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 6 Jan 2021 10:47:07 -0700 Subject: [PATCH 2/3] micle berry --- data/battle_scripts_1.s | 25 ++++++++++++++++++++++++ include/battle.h | 2 +- include/battle_scripts.h | 2 ++ include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 4 +++- src/battle_script_commands.c | 9 +++++++++ src/battle_util.c | 28 +++++++++++++++++++++++++++ 7 files changed, 70 insertions(+), 3 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 28da6de0e1..c7f3cc663a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7729,3 +7729,28 @@ BattleScript_CustapBerryActivation:: waitmessage 0x40 removeitem BS_ATTACKER end2 + +BattleScript_MicleBerryActivateEnd2:: + jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_MicleBerryActivateEnd2_Ripen + goto BattleScript_MicleBerryActivateEnd2_Anim +BattleScript_MicleBerryActivateEnd2_Ripen: + call BattleScript_AbilityPopUp +BattleScript_MicleBerryActivateEnd2_Anim: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + printstring STRINGID_MICLEBERRYACTIVATES + waitmessage 0x40 + removeitem BS_ATTACKER + end2 + +BattleScript_MicleBerryActivateRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_MicleBerryActivateRet_Ripen + goto BattleScript_MicleBerryActivateRet_Anim +BattleScript_MicleBerryActivateRet_Ripen: + call BattleScript_AbilityPopUp +BattleScript_MicleBerryActivateRet_Anim: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + printstring STRINGID_MICLEBERRYACTIVATES + waitmessage 0x40 + removeitem BS_SCRIPTING + return + diff --git a/include/battle.h b/include/battle.h index a7e8f5212b..a108bac8ef 100644 --- a/include/battle.h +++ b/include/battle.h @@ -429,7 +429,7 @@ struct Illusion struct PinchBerry { - u8 micleBerry:1; + u8 micle:1; u8 custap:1; // also quick claw }; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index a5548791a2..aec8dbc6e0 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -352,5 +352,7 @@ extern const u8 BattleScript_CheekPouchActivates[]; extern const u8 BattleScript_AnnounceAirLockCloudNine[]; extern const u8 BattleScript_QuickClawActivation[]; extern const u8 BattleScript_CustapBerryActivation[]; +extern const u8 BattleScript_MicleBerryActivateEnd2[]; +extern const u8 BattleScript_MicleBerryActivateRet[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index bcb3e86786..321411cab2 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_CANACTFASTERTHANKSTO 557 +#define STRINGID_MICLEBERRYACTIVATES 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 bf52cba31a..078175bd24 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -685,10 +685,12 @@ 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_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act\nfaster, thanks to {B_LAST_ITEM}!"); +static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_LAST_ITEM}!"); +static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_MICLEBERRYACTIVATES - 12] = sText_MicleBerryActivates, [STRINGID_CANACTFASTERTHANKSTO - 12] = sText_CanActFaster, [STRINGID_STATWASNOTLOWERED - 12] = sText_StatWasNotLowered, [STRINGID_CLOAKEDINAFREEZINGLIGHT - 12] = sText_CloakedInAFreezingLight, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bc427698ef..48fe60aa53 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1563,6 +1563,15 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move) calc = (calc * (100 + atkParam)) / 100; else if (atkHoldEffect == HOLD_EFFECT_ZOOM_LENS && GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef)); calc = (calc * (100 + atkParam)) / 100; + + if (gBattleStruct->pinchBerry[battlerAtk].micle) + { + gBattleStruct->pinchBerry[battlerAtk].micle = FALSE; + if (atkAbility == ABILITY_RIPEN) + calc = (calc * 140) / 100; // ripen gives 40% acc boost + else + calc = (calc * 120) / 100; // 20% acc boost + } return calc; } diff --git a/src/battle_util.c b/src/battle_util.c index 586454efbe..54df2df63b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5073,6 +5073,26 @@ static u8 RandomStatRaiseBerry(u32 battlerId, u32 itemId) return 0; } +static u8 TrySetMicleBerry(u32 battlerId, u32 itemId, bool32 end2) +{ + if (HasEnoughHpToEatBerry(battlerId, 4, itemId)) + { + gBattleStruct->pinchBerry[battlerId].micle = TRUE; // battler's next attack has increased accuracy + + if (end2) + { + BattleScriptExecute(BattleScript_MicleBerryActivateEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MicleBerryActivateRet; + } + return ITEM_EFFECT_OTHER; + } + return 0; +} + static u8 ItemHealHp(u32 battlerId, u32 itemId, bool32 end2, bool32 percentHeal) { if (HasEnoughHpToEatBerry(battlerId, 2, itemId)) @@ -5569,6 +5589,10 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) effect = ITEM_EFFECT_OTHER; } break; + case HOLD_EFFECT_MICLE_BERRY: + if (!moveTurn) + effect = TrySetMicleBerry(battlerId, gLastUsedItem, TRUE); + break; } if (effect) @@ -5595,6 +5619,10 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) battlerHoldEffect = GetBattlerHoldEffect(battlerId, TRUE); switch (battlerHoldEffect) { + case HOLD_EFFECT_MICLE_BERRY: + if (B_HP_BERRIES >= GEN_4) + effect = TrySetMicleBerry(battlerId, gLastUsedItem, FALSE); + break; case HOLD_EFFECT_RESTORE_HP: if (B_HP_BERRIES >= GEN_4) effect = ItemHealHp(battlerId, gLastUsedItem, FALSE, FALSE); From 7646855e797416de9a25a2bd76e3760432cb6b8b Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 6 Jan 2021 11:15:56 -0700 Subject: [PATCH 3/3] jaboca, rowap berry effects --- data/battle_scripts_1.s | 14 ++++++++++++++ include/battle_scripts.h | 1 + include/constants/hold_effects.h | 1 + src/battle_util.c | 19 +++++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index c7f3cc663a..3a503315a3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7754,3 +7754,17 @@ BattleScript_MicleBerryActivateRet_Anim: removeitem BS_SCRIPTING return +BattleScript_JabocaRowapBerryActivates:: + jumpifability BS_TARGET, ABILITY_RIPEN, BattleScript_JabocaRowapBerryActivate_Ripen + goto BattleScript_JabocaRowapBerryActivate_Anim +BattleScript_JabocaRowapBerryActivate_Ripen: + call BattleScript_AbilityPopUp +BattleScript_JabocaRowapBerryActivate_Anim: + jumpifabsent BS_TARGET, BattleScript_JabocaRowapBerryActivate_Dmg @ dont play the animation for a fainted target + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT, NULL + waitanimation +BattleScript_JabocaRowapBerryActivate_Dmg: + call BattleScript_HurtAttacker + removeitem BS_TARGET + return + diff --git a/include/battle_scripts.h b/include/battle_scripts.h index aec8dbc6e0..4ca82e3bf6 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -354,5 +354,6 @@ extern const u8 BattleScript_QuickClawActivation[]; extern const u8 BattleScript_CustapBerryActivation[]; extern const u8 BattleScript_MicleBerryActivateEnd2[]; extern const u8 BattleScript_MicleBerryActivateRet[]; +extern const u8 BattleScript_JabocaRowapBerryActivates[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index 3de2e7b43b..52a3ffda4b 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -107,6 +107,7 @@ #define HOLD_EFFECT_MICLE_BERRY 101 #define HOLD_EFFECT_JABOCA_BERRY 102 #define HOLD_EFFECT_CUSTAP_BERRY 103 +#define HOLD_EFFECT_RETALIATE_BERRY 104 // rowap, jaboca // Gen5 hold effects #define HOLD_EFFECT_FLOAT_STONE 115 diff --git a/src/battle_util.c b/src/battle_util.c index 54df2df63b..b6d83d9576 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5890,6 +5890,25 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPATK, 1, FALSE); } break; + case HOLD_EFFECT_RETALIATE_BERRY: + if (IsBattlerAlive(battlerId) + && TARGET_TURN_DAMAGED + && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove) + && GetBattleMoveSplit(gCurrentMove) == ItemId_GetHoldEffectParam(gLastUsedItem)) + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (GetBattlerAbility(battlerId) == ABILITY_RIPEN) + gBattleMoveDamage *= 2; + + effect = ITEM_HP_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates; + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); + RecordItemEffectBattle(battlerId, HOLD_EFFECT_ROCKY_HELMET); + } + break; } } break;