Combines Super Fang and Guardian of Alola effects (#7048)

This commit is contained in:
Alex 2025-06-03 10:26:25 +02:00 committed by GitHub
parent 52b1b877ec
commit 177fa2f096
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 71 additions and 96 deletions

View File

@ -1697,10 +1697,6 @@
callnative BS_ApplyTerastallization
.endm
.macro damagetoquartertargethp
callnative BS_DamageToQuarterTargetHP
.endm
.macro jumpifsleepclause jumpInstr:req
callnative BS_JumpIfSleepClause
.4byte \jumpInstr

View File

@ -20,16 +20,6 @@
.section script_data, "aw", %progbits
BattleScript_DamageToQuarterTargetHP::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
typecalc
clearmoveresultflags MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
damagetoquartertargethp
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectFickleBeam::
attackcanceler
attackstring

View File

@ -863,7 +863,6 @@ extern const u8 BattleScript_EffectShedTail[];
extern const u8 BattleScript_EffectUpperHand[];
extern const u8 BattleScript_EffectTidyUp[];
extern const u8 BattleScript_EffectSpicyExtract[];
extern const u8 BattleScript_DamageToQuarterTargetHP[];
extern const u8 BattleScript_EffectFickleBeam[];
extern const u8 BattleScript_FickleBeamDoubled[];
extern const u8 BattleScript_QuestionForfeitBattle[];

View File

@ -35,8 +35,8 @@ enum BattleMoveEffects
EFFECT_REST,
EFFECT_OHKO,
EFFECT_FUSION_COMBO,
EFFECT_SUPER_FANG,
EFFECT_FIXED_DAMAGE_ARG,
EFFECT_FIXED_PERCENT_DAMAGE,
EFFECT_FIXED_HP_DAMAGE,
EFFECT_HEAL_BLOCK,
EFFECT_RECOIL_IF_MISS,
EFFECT_MIST,
@ -341,7 +341,6 @@ enum BattleMoveEffects
EFFECT_TERA_BLAST,
EFFECT_TERA_STARSTORM,
EFFECT_DRAGON_DARTS,
EFFECT_GUARDIAN_OF_ALOLA,
EFFECT_SHELL_SIDE_ARM,
EFFECT_ORDER_UP,
EFFECT_RAPID_SPIN,

View File

@ -147,6 +147,7 @@ struct MoveInfo
u32 holdEffect;
u32 type;
u32 fixedDamage;
u32 damagePercentage;
u32 absorbPercentage;
u32 recoilPercentage;
u32 nonVolatileStatus;
@ -518,7 +519,7 @@ static inline u32 GetMoveArgType(u32 moveId)
return gMovesInfo[SanitizeMoveId(moveId)].argument.type;
}
static inline u32 GetMoveFixedDamage(u32 moveId)
static inline u32 GetMoveFixedHPDamage(u32 moveId)
{
return gMovesInfo[SanitizeMoveId(moveId)].argument.fixedDamage;
}
@ -550,6 +551,11 @@ static inline u32 GetMoveNonVolatileStatus(u32 move)
}
}
static inline u32 GetMoveDamagePercentage(u32 move)
{
return gMovesInfo[SanitizeMoveId(move)].argument.damagePercentage;
}
static inline const struct AdditionalEffect *GetMoveAdditionalEffectById(u32 moveId, u32 effect)
{
return &gMovesInfo[SanitizeMoveId(moveId)].additionalEffects[effect];

View File

@ -399,14 +399,14 @@ void ComputeBattlerDecisions(u32 battler)
}
}
void ReconsiderGimmick(u32 battlerAtk, u32 battlerDef, u16 move)
void ReconsiderGimmick(u32 battlerAtk, u32 battlerDef, u16 move)
{
// After choosing a move for battlerAtk assuming that a gimmick will be used, reconsider whether the gimmick is necessary.
if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && !ShouldUseZMove(battlerAtk, battlerDef, move))
if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && !ShouldUseZMove(battlerAtk, battlerDef, move))
SetAIUsingGimmick(battlerAtk, NO_GIMMICK);
if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_TERA && GetMoveEffect(move) == EFFECT_PROTECT)
if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_TERA && GetMoveEffect(move) == EFFECT_PROTECT)
SetAIUsingGimmick(battlerAtk, NO_GIMMICK);
}
@ -416,18 +416,18 @@ u32 BattleAI_ChooseMoveIndex(u32 battler)
SetAIUsingGimmick(battler, USE_GIMMICK);
if (gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_TERA && (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_TERA))
if (gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_TERA && (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_TERA))
DecideTerastal(battler);
if (!IsDoubleBattle())
chosenMoveIndex = ChooseMoveOrAction_Singles(battler);
else
chosenMoveIndex = ChooseMoveOrAction_Doubles(battler);
if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE)
if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE)
ReconsiderGimmick(battler, gBattlerTarget, gBattleMons[battler].moves[chosenMoveIndex]);
// Clear protect structures, some flags may be set during AI calcs
// e.g. pranksterElevated from GetBattleMovePriority
@ -1081,18 +1081,17 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
switch (moveEffect)
{
case EFFECT_FIXED_DAMAGE_ARG:
case EFFECT_FIXED_HP_DAMAGE:
case EFFECT_LEVEL_DAMAGE:
case EFFECT_PSYWAVE:
case EFFECT_OHKO:
case EFFECT_BIDE:
case EFFECT_SUPER_FANG:
case EFFECT_FIXED_PERCENT_DAMAGE:
case EFFECT_ENDEAVOR:
case EFFECT_COUNTER:
case EFFECT_MIRROR_COAT:
case EFFECT_METAL_BURST:
case EFFECT_FINAL_GAMBIT:
case EFFECT_GUARDIAN_OF_ALOLA:
break;
default:
RETURN_SCORE_MINUS(10);
@ -1624,7 +1623,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
break;
case EFFECT_PRESENT:
case EFFECT_FIXED_DAMAGE_ARG:
case EFFECT_FIXED_HP_DAMAGE:
case EFFECT_FOCUS_PUNCH:
// AI_CBM_HighRiskForDamage
if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < UQ_4_12(2.0))

View File

@ -387,7 +387,7 @@ static u32 GetMaxPowerTier(u32 move)
switch (GetMoveEffect(move))
{
case EFFECT_BIDE:
case EFFECT_SUPER_FANG:
case EFFECT_FIXED_PERCENT_DAMAGE:
case EFFECT_LEVEL_DAMAGE:
case EFFECT_PSYWAVE:
case EFFECT_COUNTER:
@ -400,7 +400,7 @@ static u32 GetMaxPowerTier(u32 move)
case EFFECT_TERRAIN_PULSE:
case EFFECT_PUNISHMENT:
case EFFECT_TRUMP_CARD:
case EFFECT_FIXED_DAMAGE_ARG:
case EFFECT_FIXED_HP_DAMAGE:
case EFFECT_SPIT_UP:
case EFFECT_NATURAL_GIFT:
case EFFECT_MIRROR_COAT:

View File

@ -17865,16 +17865,6 @@ void BS_ApplyTerastallization(void)
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_DamageToQuarterTargetHP(void)
{
NATIVE_ARGS();
gBattleStruct->moveDamage[gBattlerTarget] = (3 * GetNonDynamaxHP(gBattlerTarget)) / 4;
if (gBattleStruct->moveDamage[gBattlerTarget] == 0)
gBattleStruct->moveDamage[gBattlerTarget] = 1;
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_JumpIfSleepClause(void)
{
NATIVE_ARGS(const u8 *jumpInstr);

View File

@ -760,8 +760,8 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
// Changes depending on the effect
switch (effect)
{
case EFFECT_FIXED_DAMAGE_ARG:
baseFromEffect *= (GetMoveFixedDamage(move) / 20);
case EFFECT_FIXED_HP_DAMAGE:
baseFromEffect *= (GetMoveFixedHPDamage(move) / 20);
break;
case EFFECT_TWO_TURNS_ATTACK:
for (i = 0; i < GetMoveAdditionalEffectCount(move); i++)

View File

@ -9322,11 +9322,11 @@ static inline s32 DoFixedDamageMoveCalc(struct DamageCalculationData *damageCalc
randDamage = B_PSYWAVE_DMG >= GEN_6 ? (Random() % 101) : ((Random() % 11) * 10);
dmg = gBattleMons[damageCalcData->battlerAtk].level * (randDamage + 50) / 100;
break;
case EFFECT_FIXED_DAMAGE_ARG:
dmg = GetMoveFixedDamage(damageCalcData->move);
case EFFECT_FIXED_HP_DAMAGE:
dmg = GetMoveFixedHPDamage(damageCalcData->move);
break;
case EFFECT_SUPER_FANG:
dmg = GetNonDynamaxHP(damageCalcData->battlerDef) / 2;
case EFFECT_FIXED_PERCENT_DAMAGE:
dmg = GetNonDynamaxHP(damageCalcData->battlerDef) * GetMoveDamagePercentage(damageCalcData->move) / 100;
break;
case EFFECT_FINAL_GAMBIT:
dmg = GetNonDynamaxHP(damageCalcData->battlerAtk);

View File

@ -209,14 +209,14 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
.battleTvScore = 0, // TODO: Assign points
},
[EFFECT_SUPER_FANG] =
[EFFECT_FIXED_PERCENT_DAMAGE] =
{
.battleScript = BattleScript_EffectHit,
.battleTvScore = 5,
.encourageEncore = TRUE,
},
[EFFECT_FIXED_DAMAGE_ARG] =
[EFFECT_FIXED_HP_DAMAGE] =
{
.battleScript = BattleScript_EffectHit,
.battleTvScore = 1,
@ -2171,12 +2171,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
.battleTvScore = 0, // TODO: Assign points
},
[EFFECT_GUARDIAN_OF_ALOLA] =
{
.battleScript = BattleScript_DamageToQuarterTargetHP,
.battleTvScore = 0, // TODO: Assign points
},
[EFFECT_SHELL_SIDE_ARM] =
{
.battleScript = BattleScript_EffectHit,

View File

@ -1364,7 +1364,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"Launches shock waves that\n"
"always inflict 20 HP damage."),
.effect = EFFECT_FIXED_DAMAGE_ARG,
.effect = EFFECT_FIXED_HP_DAMAGE,
.power = 1,
.type = TYPE_NORMAL,
.accuracy = 90,
@ -2220,7 +2220,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"Launches shock waves that\n"
"always inflict 40 HP damage."),
.effect = EFFECT_FIXED_DAMAGE_ARG,
.effect = EFFECT_FIXED_HP_DAMAGE,
.power = 1,
.type = TYPE_DRAGON,
.accuracy = 100,
@ -2866,7 +2866,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
"Minimizes the user's size to\n"
#if B_MINIMIZE_EVASION >= GEN_5
"sharply raise evasiveness."),
#else
#else
"raise evasiveness."),
#endif
.effect = EFFECT_MINIMIZE,
@ -3704,7 +3704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
#if B_UPDATED_MOVE_DATA >= GEN_5
"Envelops the foes in a toxic\n"
#else
#else
"Envelops the foe in a toxic\n"
#endif
"gas that may poison."),
@ -4308,7 +4308,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"Attacks with sharp fangs\n"
"and cuts half the foe's HP."),
.effect = EFFECT_SUPER_FANG,
.effect = EFFECT_FIXED_PERCENT_DAMAGE,
.power = 1,
.type = TYPE_NORMAL,
.accuracy = 90,
@ -4316,6 +4316,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .damagePercentage = 50 },
.makesContact = TRUE,
.ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4),
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
@ -6053,7 +6054,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
"Spins attack that removes\n"
#if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8
"some effects and ups speed."),
#else
#else
"certain effects."),
#endif
.effect = EFFECT_RAPID_SPIN,
@ -6280,7 +6281,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
#else
"The type and effectiveness\n"
"vary with the user."),
#endif
#endif
.power = B_HIDDEN_POWER_DMG >= GEN_6 ? 60 : 1,
.effect = EFFECT_HIDDEN_POWER,
.type = TYPE_NORMAL,
@ -9621,7 +9622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
"Whips up a breeze, doubling\n"
#if B_TAILWIND_TURNS >= GEN_5
"ally Speed for 4 turns."),
#else
#else
"ally Speed for 3 turns."),
#endif
.effect = EFFECT_TAILWIND,
@ -17089,7 +17090,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"Halves the foe's HP with\n"
"the power of nature."),
.effect = EFFECT_SUPER_FANG,
.effect = EFFECT_FIXED_PERCENT_DAMAGE,
.power = 1,
.type = TYPE_FAIRY,
.accuracy = 90,
@ -20174,7 +20175,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"Summons a ruinous disaster\n"
"and cuts half the foe's HP."),
.effect = EFFECT_SUPER_FANG,
.effect = EFFECT_FIXED_PERCENT_DAMAGE,
.power = 1,
.type = TYPE_DARK,
.accuracy = 90,
@ -21641,7 +21642,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"The Land Spirit Pokémon\n"
"greatly reduces the foe's HP."),
.effect = EFFECT_GUARDIAN_OF_ALOLA,
.effect = EFFECT_FIXED_PERCENT_DAMAGE,
.power = 1,
.type = TYPE_FAIRY,
.accuracy = 0,
@ -21649,6 +21650,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.argument = { .damagePercentage = 75 },
.battleAnimScript = gBattleAnimMove_GuardianOfAlola,
},
[MOVE_SEARING_SUNRAZE_SMASH] =

View File

@ -28,8 +28,8 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next t
GIVEN {
ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { MaxHP(60); HP(60); Ability(ABILITY_CUD_CHEW); Item(ITEM_ORAN_BERRY); }
} WHEN {

View File

@ -630,7 +630,7 @@ SINGLE_BATTLE_TEST("Dynamax: Super Fang uses a Pokemon's non-Dynamax HP", s16 da
PARAMETRIZE { dynamax = GIMMICK_NONE; }
PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_SUPER_FANG);
ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {

View File

@ -630,10 +630,10 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Clangorous Soulblaze boosts all the user's stats by
}
}
SINGLE_BATTLE_TEST("(Z-MOVE) Guardian of Alola deals 75\% of the target's current HP")
SINGLE_BATTLE_TEST("(Z-MOVE) Guardian of Alola deals 75% of the target's current HP")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_GUARDIAN_OF_ALOLA) == EFFECT_GUARDIAN_OF_ALOLA);
ASSUME(GetMoveEffect(MOVE_GUARDIAN_OF_ALOLA) == EFFECT_FIXED_PERCENT_DAMAGE);
PLAYER(SPECIES_TAPU_FINI) { Item(ITEM_TAPUNIUM_Z); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {

View File

@ -4,8 +4,8 @@
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
}
SINGLE_BATTLE_TEST("Liechi Berry raises the holder's Attack by one stage when HP drops to 1/4 or below")

View File

@ -4,8 +4,8 @@
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_LANSAT_BERRY].holdEffect == HOLD_EFFECT_CRITICAL_UP);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
}
SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages when HP drops to 1/4 or below")

View File

@ -4,8 +4,8 @@
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_GANLON_BERRY].holdEffect == HOLD_EFFECT_DEFENSE_UP);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
}
SINGLE_BATTLE_TEST("Ganlon Berry raises the holder's Defense by one stage when HP drops to 1/4 or below")

View File

@ -4,8 +4,8 @@
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_MICLE_BERRY].holdEffect == HOLD_EFFECT_MICLE_BERRY);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
}
SINGLE_BATTLE_TEST("Micle Berry raises the holder's accuracy by 1.2 when HP drops to 1/4 or below")

View File

@ -252,8 +252,8 @@ SINGLE_BATTLE_TEST("Shell Bell restores 1/8 HP at move end, one strike")
hpGainActual = min(maxHp - hp, hpGainFromDamage);
GIVEN {
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHp); HP(hp); Item(ITEM_SHELL_BELL); }
OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHp); HP(opponentHp); }
} WHEN {

View File

@ -4,8 +4,8 @@
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_PETAYA_BERRY].holdEffect == HOLD_EFFECT_SP_ATTACK_UP);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
}
SINGLE_BATTLE_TEST("Petaya Berry raises the holder's Sp. Atk by one stage when HP drops to 1/4 or below")

View File

@ -4,8 +4,8 @@
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_APICOT_BERRY].holdEffect == HOLD_EFFECT_SP_DEFENSE_UP);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
}
SINGLE_BATTLE_TEST("Apicot Berry raises the holder's Sp. Def by one stage when HP drops to 1/4 or below")

View File

@ -4,8 +4,8 @@
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_SALAC_BERRY].holdEffect == HOLD_EFFECT_SPEED_UP);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
}
SINGLE_BATTLE_TEST("Salac Berry raises the holder's Speed by one stage when HP drops to 1/4 or below")

View File

@ -89,7 +89,7 @@ DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie
ASSUME(GetMoveEffect(MOVE_ENDEAVOR) == EFFECT_ENDEAVOR);
ASSUME(GetMoveEffect(MOVE_LIFE_DEW) == EFFECT_JUNGLE_HEALING);
ASSUME(GetMoveEffect(MOVE_CRUSH_GRIP) == EFFECT_POWER_BASED_ON_TARGET_HP);
ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_SUPER_FANG);
ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE);
PLAYER(SPECIES_WOBBUFFET) { MaxHP(480); HP(360); Defense(100); Speed(1); }
PLAYER(SPECIES_WYNAUT) { Speed(1); }
OPPONENT(SPECIES_WOBBUFFET) { Attack(100); Speed(1); }

View File

@ -3,7 +3,7 @@
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_SONIC_BOOM) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveEffect(MOVE_SONIC_BOOM) == EFFECT_FIXED_HP_DAMAGE);
}
SINGLE_BATTLE_TEST("Sonic Boom deals fixed damage", s16 damage)
@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Sonic Boom deals fixed damage", s16 damage)
PARAMETRIZE { mon = SPECIES_ARON; }
GIVEN {
ASSUME(GetMoveFixedDamage(MOVE_SONIC_BOOM) == 20);
ASSUME(GetMoveFixedHPDamage(MOVE_SONIC_BOOM) == 20);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(mon);
} WHEN {

View File

@ -10,8 +10,8 @@ DOUBLE_BATTLE_TEST("Magic Room prevents item hold effects")
{
GIVEN {
ASSUME(gItemsInfo[ITEM_BERRY_JUICE].holdEffect == HOLD_EFFECT_RESTORE_HP);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(60); Item(ITEM_BERRY_JUICE); }
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(60); Item(ITEM_BERRY_JUICE); }

View File

@ -110,8 +110,8 @@ SINGLE_BATTLE_TEST("Shed Tail creates a Substitute with 1/4 of user maximum heal
PARAMETRIZE { hp = 164; }
GIVEN {
ASSUME(GetMoveFixedDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_DAMAGE_ARG);
ASSUME(GetMoveFixedHPDamage(MOVE_DRAGON_RAGE) == 40);
ASSUME(GetMoveEffect(MOVE_DRAGON_RAGE) == EFFECT_FIXED_HP_DAMAGE);
PLAYER(SPECIES_BULBASAUR) { MaxHP(hp); }
PLAYER(SPECIES_BULBASAUR);
OPPONENT(SPECIES_CHARMANDER);

View File

@ -141,7 +141,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Last Half Hp")
{
gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_LAST_HALF_HP;
GIVEN {
ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_SUPER_FANG);
ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE);
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].baseHP == 190);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);