Clean usage of gMovesInfo (#8234)
This commit is contained in:
parent
03b6200af5
commit
1545e22d0a
@ -4008,7 +4008,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
bool32 isBattle1v1 = IsBattle1v1();
|
||||
bool32 hasTwoOpponents = HasTwoOpponents(battlerAtk);
|
||||
bool32 hasPartner = HasPartner(battlerAtk);
|
||||
bool32 moveTargetsBothOpponents = hasTwoOpponents && (gMovesInfo[move].target & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_ALL_BATTLERS));
|
||||
bool32 moveTargetsBothOpponents = hasTwoOpponents && (GetMoveTarget(move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_ALL_BATTLERS));
|
||||
u32 i;
|
||||
|
||||
// The AI should understand that while Dynamaxed, status moves function like Protect.
|
||||
|
||||
@ -387,7 +387,7 @@ static u32 FindMonWithMoveOfEffectiveness(u32 battler, u32 opposingBattler, uq4_
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
|
||||
if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= effectiveness && gMovesInfo[move].power != 0)
|
||||
if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= effectiveness && GetMovePower(move) != 0)
|
||||
return SetSwitchinAndSwitch(battler, i);
|
||||
}
|
||||
}
|
||||
@ -422,7 +422,7 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler)
|
||||
if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE
|
||||
&& !CanAbilityAbsorbMove(battler, opposingBattler, gAiLogicData->abilities[opposingBattler], aiMove, GetBattleMoveType(aiMove), AI_CHECK)
|
||||
&& !CanAbilityBlockMove(battler, opposingBattler, gBattleMons[battler].ability, gAiLogicData->abilities[opposingBattler], aiMove, AI_CHECK)
|
||||
&& (!ALL_MOVES_BAD_STATUS_MOVES_BAD || gMovesInfo[aiMove].power != 0)) // If using ALL_MOVES_BAD_STATUS_MOVES_BAD, then need power to be non-zero
|
||||
&& (!ALL_MOVES_BAD_STATUS_MOVES_BAD || GetMovePower(aiMove) != 0)) // If using ALL_MOVES_BAD_STATUS_MOVES_BAD, then need power to be non-zero
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3965,7 +3965,7 @@ bool32 AreMovesEquivalent(u32 battlerAtk, u32 battlerAtkPartner, u32 move, u32 p
|
||||
// shared bits indicate they're meaningfully the same in some way
|
||||
if (atkEffect & partnerEffect)
|
||||
{
|
||||
if (gMovesInfo[move].target == MOVE_TARGET_SELECTED && gMovesInfo[partnerMove].target == MOVE_TARGET_SELECTED)
|
||||
if (GetMoveTarget(move) == MOVE_TARGET_SELECTED && GetMoveTarget(partnerMove) == MOVE_TARGET_SELECTED)
|
||||
{
|
||||
if (battlerDef == gBattleStruct->moveTarget[battlerAtkPartner])
|
||||
return TRUE;
|
||||
@ -4111,7 +4111,7 @@ bool32 DoesPartnerHaveSameMoveEffect(u32 battlerAtkPartner, u32 battlerDef, u32
|
||||
if (GetMoveEffect(move) == GetMoveEffect(partnerMove)
|
||||
&& partnerMove != MOVE_NONE)
|
||||
{
|
||||
if (gMovesInfo[move].target == MOVE_TARGET_SELECTED && gMovesInfo[partnerMove].target == MOVE_TARGET_SELECTED)
|
||||
if (GetMoveTarget(move) == MOVE_TARGET_SELECTED && GetMoveTarget(partnerMove) == MOVE_TARGET_SELECTED)
|
||||
{
|
||||
return gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef;
|
||||
}
|
||||
@ -4512,7 +4512,7 @@ bool32 IsRecycleEncouragedItem(u32 item)
|
||||
|
||||
static bool32 HasMoveThatChangesKOThreshold(u32 battlerId, u32 noOfHitsToFaint, u32 aiIsFaster)
|
||||
{
|
||||
s32 i;
|
||||
s32 i, j;
|
||||
u16 *moves = GetMovesArray(battlerId);
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
@ -4524,16 +4524,21 @@ static bool32 HasMoveThatChangesKOThreshold(u32 battlerId, u32 noOfHitsToFaint,
|
||||
if (GetMovePriority(moves[i]) > 0)
|
||||
return TRUE;
|
||||
|
||||
switch (gMovesInfo[moves[i]].additionalEffects[i].moveEffect)
|
||||
u32 additionalEffectCount = GetMoveAdditionalEffectCount(moves[i]);
|
||||
for (j = 0; j < additionalEffectCount; j++)
|
||||
{
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
{
|
||||
if(aiIsFaster)
|
||||
return TRUE;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(moves[i], j);
|
||||
switch (additionalEffect->moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
{
|
||||
if(aiIsFaster)
|
||||
return TRUE;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5189,7 +5189,7 @@ void AnimNeedleArmSpike(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
if (gMovesInfo[gAnimMoveIndex].target == MOVE_TARGET_BOTH)
|
||||
if (GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH)
|
||||
{
|
||||
SetAverageBattlerPositions(gBattleAnimAttacker, TRUE, &a, &b);
|
||||
}
|
||||
@ -5201,7 +5201,7 @@ void AnimNeedleArmSpike(struct Sprite *sprite)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gMovesInfo[gAnimMoveIndex].target == MOVE_TARGET_BOTH)
|
||||
if (GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH)
|
||||
{
|
||||
SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &a, &b);
|
||||
}
|
||||
|
||||
@ -9431,7 +9431,7 @@ static void SpriteCB_MaxFlutterby(struct Sprite* sprite)
|
||||
{
|
||||
s16 target_x;
|
||||
s16 target_y;
|
||||
if (gMovesInfo[gAnimMoveIndex].target == MOVE_TARGET_BOTH)
|
||||
if (GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH)
|
||||
{
|
||||
SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &target_x, &target_y);
|
||||
}
|
||||
|
||||
@ -11486,9 +11486,9 @@ bool32 IsAnyTargetAffected(u32 battlerAtk)
|
||||
|
||||
void UpdateStallMons(void)
|
||||
{
|
||||
if (IsBattlerTurnDamaged(gBattlerTarget) || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) || gMovesInfo[gCurrentMove].category == DAMAGE_CATEGORY_STATUS)
|
||||
if (IsBattlerTurnDamaged(gBattlerTarget) || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) || GetMoveCategory(gCurrentMove) == DAMAGE_CATEGORY_STATUS)
|
||||
return;
|
||||
if (!IsDoubleBattle() || gMovesInfo[gCurrentMove].target == MOVE_TARGET_SELECTED)
|
||||
if (!IsDoubleBattle() || GetMoveTarget(gCurrentMove) == MOVE_TARGET_SELECTED)
|
||||
{
|
||||
u32 moveType = GetBattleMoveType(gCurrentMove); // Probably doesn't handle dynamic move types right now
|
||||
u32 abilityAtk = GetBattlerAbility(gBattlerAttacker);
|
||||
|
||||
@ -2916,8 +2916,8 @@ static s32 CompareItemsAlphabetically(enum Pocket pocketId, struct ItemSlot item
|
||||
|
||||
if (pocketId == POCKET_TM_HM)
|
||||
{
|
||||
name1 = gMovesInfo[GetTMHMMoveId(GetItemTMHMIndex(item1.itemId))].name;
|
||||
name2 = gMovesInfo[GetTMHMMoveId(GetItemTMHMIndex(item2.itemId))].name;
|
||||
name1 = GetMoveName(GetTMHMMoveId(GetItemTMHMIndex(item1.itemId)));
|
||||
name2 = GetMoveName(GetTMHMMoveId(GetItemTMHMIndex(item2.itemId)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -6320,8 +6320,9 @@ static void SwapFusionMonMoves(struct Pokemon *mon, const u16 moveTable[][2], u3
|
||||
{
|
||||
if (move == moveTable[j][oldMoveIndex])
|
||||
{
|
||||
u32 pp = GetMovePP(moveTable[j][newMoveIndex]);
|
||||
SetMonData(mon, MON_DATA_MOVE1 + i, &moveTable[j][newMoveIndex]);
|
||||
SetMonData(mon, MON_DATA_PP1 + i, &gMovesInfo[moveTable[j][newMoveIndex]].pp);
|
||||
SetMonData(mon, MON_DATA_PP1 + i, &pp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Filter reduces damage to Super Effective moves by 0.75", s16
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_MR_MIME].types[0] == TYPE_PSYCHIC);
|
||||
ASSUME(gSpeciesInfo[SPECIES_MR_MIME].types[1] == TYPE_FAIRY);
|
||||
ASSUME(gMovesInfo[MOVE_POISON_JAB].type == TYPE_POISON);
|
||||
ASSUME(GetMoveType(MOVE_POISON_JAB) == TYPE_POISON);
|
||||
ASSUME(gTypeEffectivenessTable[TYPE_POISON][TYPE_FAIRY] > UQ_4_12(1.0));
|
||||
ASSUME(gTypeEffectivenessTable[TYPE_POISON][TYPE_PSYCHIC] == UQ_4_12(1.0));
|
||||
PLAYER(SPECIES_MR_MIME) { Ability(ability); }
|
||||
|
||||
@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Prism Armor reduces damage to Super Effective moves by 0.75"
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_NECROZMA].types[0] == TYPE_PSYCHIC);
|
||||
ASSUME(gSpeciesInfo[SPECIES_NECROZMA].types[1] == TYPE_PSYCHIC);
|
||||
ASSUME(gMovesInfo[MOVE_DARK_PULSE].type == TYPE_DARK);
|
||||
ASSUME(GetMoveType(MOVE_DARK_PULSE) == TYPE_DARK);
|
||||
ASSUME(gTypeEffectivenessTable[TYPE_POISON][TYPE_FAIRY] > UQ_4_12(1.0));
|
||||
ASSUME(gTypeEffectivenessTable[TYPE_POISON][TYPE_PSYCHIC] == UQ_4_12(1.0));
|
||||
PLAYER(SPECIES_NECROZMA);
|
||||
|
||||
@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Solid Rock reduces damage to Super Effective moves by 0.75",
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_CARRACOSTA].types[0] == TYPE_WATER);
|
||||
ASSUME(gSpeciesInfo[SPECIES_CARRACOSTA].types[1] == TYPE_ROCK);
|
||||
ASSUME(gMovesInfo[MOVE_CLOSE_COMBAT].type == TYPE_FIGHTING);
|
||||
ASSUME(GetMoveType(MOVE_CLOSE_COMBAT) == TYPE_FIGHTING);
|
||||
ASSUME(gTypeEffectivenessTable[TYPE_FIGHTING][TYPE_ROCK] > UQ_4_12(1.0));
|
||||
ASSUME(gTypeEffectivenessTable[TYPE_FIGHTING][TYPE_WATER] == UQ_4_12(1.0));
|
||||
PLAYER(SPECIES_CARRACOSTA) { Ability(ability); }
|
||||
|
||||
@ -690,7 +690,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use thawing moves if target is frozen unless it
|
||||
ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
|
||||
ASSUME(GetMoveCategory(MOVE_TACKLE) == DAMAGE_CATEGORY_PHYSICAL);
|
||||
ASSUME(GetMoveCategory(MOVE_WATER_GUN) == DAMAGE_CATEGORY_SPECIAL);
|
||||
ASSUME(gMovesInfo[MOVE_SCALD].thawsUser == TRUE);
|
||||
ASSUME(MoveThawsUser(MOVE_SCALD) == TRUE);
|
||||
AI_FLAGS(aiFlags | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE); Status1(status); }
|
||||
OPPONENT(SPECIES_VULPIX) { Moves(MOVE_TACKLE, aiMove); }
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -170,7 +170,7 @@ DOUBLE_BATTLE_TEST("Ally Switch - move fails if the target was ally which change
|
||||
DOUBLE_BATTLE_TEST("Ally Switch doesn't make self-targeting status moves fail")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_HARDEN].target == MOVE_TARGET_USER);
|
||||
ASSUME(GetMoveTarget(MOVE_HARDEN) == MOVE_TARGET_USER);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -366,7 +366,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not update leech seed battler")
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, playerLeft);
|
||||
HP_BAR(playerLeft);
|
||||
HP_BAR(opponentLeft);
|
||||
|
||||
|
||||
MESSAGE("The opposing Ralts used Ally Switch!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, opponentRight);
|
||||
MESSAGE("The opposing Ralts and the opposing Bulbasaur switched places!");
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_HEAL_BELL].effect == EFFECT_HEAL_BELL);
|
||||
ASSUME(gMovesInfo[MOVE_AROMATHERAPY].effect == EFFECT_HEAL_BELL);
|
||||
ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL);
|
||||
ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_SPARKLY_SWIRL, MOVE_EFFECT_AROMATHERAPY));
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user