fix last tests
This commit is contained in:
parent
3ac4f81de9
commit
c9bde52fd2
@ -96,6 +96,109 @@ static const u8 sPkblToEscapeFactor[][3] = {
|
||||
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
|
||||
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
|
||||
|
||||
|
||||
struct BattleWeatherInfo
|
||||
{
|
||||
u16 flag;
|
||||
u8 rock;
|
||||
u8 endMessage;
|
||||
u8 continuesMessage;
|
||||
u8 animation;
|
||||
};
|
||||
|
||||
static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] =
|
||||
{
|
||||
[BATTLE_WEATHER_RAIN] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_NORMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_RAIN,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_RAIN_PRIMAL] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_PRIMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_RAIN,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_RAIN_DOWNPOUR] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_NORMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_DOWNPOUR,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SUN] =
|
||||
{
|
||||
.flag = B_WEATHER_SUN_NORMAL,
|
||||
.rock = HOLD_EFFECT_HEAT_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SUN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SUN,
|
||||
.animation = B_ANIM_SUN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SUN_PRIMAL] =
|
||||
{
|
||||
.flag = B_WEATHER_SUN_PRIMAL,
|
||||
.rock = HOLD_EFFECT_HEAT_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SUN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SUN,
|
||||
.animation = B_ANIM_SUN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SANDSTORM] =
|
||||
{
|
||||
.flag = B_WEATHER_SANDSTORM,
|
||||
.rock = HOLD_EFFECT_SMOOTH_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SANDSTORM,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SANDSTORM,
|
||||
.animation = B_ANIM_SANDSTORM_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_HAIL] =
|
||||
{
|
||||
.flag = B_WEATHER_HAIL,
|
||||
.rock = HOLD_EFFECT_ICY_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_HAIL,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_HAIL,
|
||||
.animation = B_ANIM_HAIL_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SNOW] =
|
||||
{
|
||||
.flag = B_WEATHER_SNOW,
|
||||
.rock = HOLD_EFFECT_ICY_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SNOW,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SNOW,
|
||||
.animation = B_ANIM_SNOW_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_FOG] =
|
||||
{
|
||||
.flag = B_WEATHER_FOG,
|
||||
.rock = HOLD_EFFECT_NONE,
|
||||
.endMessage = B_MSG_WEATHER_END_FOG,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_FOG,
|
||||
.animation = B_ANIM_FOG_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_STRONG_WINDS] =
|
||||
{
|
||||
.flag = B_WEATHER_STRONG_WINDS,
|
||||
.rock = HOLD_EFFECT_NONE,
|
||||
.endMessage = B_MSG_WEATHER_END_STRONG_WINDS,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_STRONG_WINDS,
|
||||
.animation = B_ANIM_STRONG_WINDS,
|
||||
},
|
||||
};
|
||||
|
||||
static u8 CalcBeatUpPower(void)
|
||||
{
|
||||
u8 basePower;
|
||||
@ -1564,108 +1667,6 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
struct BattleWeatherInfo
|
||||
{
|
||||
u16 flag;
|
||||
u8 rock;
|
||||
u8 endMessage;
|
||||
u8 continuesMessage;
|
||||
u8 animation;
|
||||
};
|
||||
|
||||
static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] =
|
||||
{
|
||||
[BATTLE_WEATHER_RAIN] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_NORMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_RAIN,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_RAIN_PRIMAL] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_PRIMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_RAIN,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_RAIN_DOWNPOUR] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_NORMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_DOWNPOUR,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SUN] =
|
||||
{
|
||||
.flag = B_WEATHER_SUN_NORMAL,
|
||||
.rock = HOLD_EFFECT_HEAT_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SUN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SUN,
|
||||
.animation = B_ANIM_SUN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SUN_PRIMAL] =
|
||||
{
|
||||
.flag = B_WEATHER_SUN_PRIMAL,
|
||||
.rock = HOLD_EFFECT_HEAT_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SUN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SUN,
|
||||
.animation = B_ANIM_SUN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SANDSTORM] =
|
||||
{
|
||||
.flag = B_WEATHER_SANDSTORM,
|
||||
.rock = HOLD_EFFECT_SMOOTH_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SANDSTORM,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SANDSTORM,
|
||||
.animation = B_ANIM_SANDSTORM_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_HAIL] =
|
||||
{
|
||||
.flag = B_WEATHER_HAIL,
|
||||
.rock = HOLD_EFFECT_ICY_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_HAIL,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_HAIL,
|
||||
.animation = B_ANIM_HAIL_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SNOW] =
|
||||
{
|
||||
.flag = B_WEATHER_SNOW,
|
||||
.rock = HOLD_EFFECT_ICY_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SNOW,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SNOW,
|
||||
.animation = B_ANIM_SNOW_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_FOG] =
|
||||
{
|
||||
.flag = B_WEATHER_FOG,
|
||||
.rock = HOLD_EFFECT_NONE,
|
||||
.endMessage = B_MSG_WEATHER_END_FOG,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_FOG,
|
||||
.animation = B_ANIM_FOG_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_STRONG_WINDS] =
|
||||
{
|
||||
.flag = B_WEATHER_STRONG_WINDS,
|
||||
.rock = HOLD_EFFECT_NONE,
|
||||
.endMessage = B_MSG_WEATHER_END_STRONG_WINDS,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_STRONG_WINDS,
|
||||
.animation = B_ANIM_STRONG_WINDS,
|
||||
},
|
||||
};
|
||||
|
||||
static bool32 TryEndTurnWeather(void)
|
||||
{
|
||||
u32 effect = 0;
|
||||
@ -6490,12 +6491,20 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_ICE_FACE:
|
||||
if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW)
|
||||
u32 battlerWeatherAffected = IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW);
|
||||
if (battlerWeatherAffected && gBattleMons[battler].species == SPECIES_EISCUE)
|
||||
{
|
||||
// If Hail/Snow activates when in Eiscue is in base, prevent reversion when Eiscue Noice gets broken
|
||||
gDisableStructs[battler].weatherAbilityDone = TRUE;
|
||||
}
|
||||
if (!gDisableStructs[battler].weatherAbilityDone
|
||||
&& battlerWeatherAffected
|
||||
&& gBattleMons[battler].species == SPECIES_EISCUE_NOICE
|
||||
&& !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
// TODO: Convert this to a proper FORM_CHANGE type.
|
||||
gBattleScripting.battler = battler;
|
||||
gDisableStructs[battler].weatherAbilityDone = TRUE;
|
||||
gBattleMons[battler].species = SPECIES_EISCUE_ICE;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3);
|
||||
effect++;
|
||||
|
||||
@ -261,20 +261,20 @@ AI_SINGLE_BATTLE_TEST("AI chooses the safest option to faint the target, taking
|
||||
u16 abilityAtk = ABILITY_NONE, holdItemAtk = ITEM_NONE;
|
||||
|
||||
// Psychic is not very effective, but always hits. Solarbeam requires a charging turn, Double Edge has recoil and Focus Blast can miss;
|
||||
// PARAMETRIZE { abilityAtk = ABILITY_STURDY; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE; expectedMove = MOVE_PSYCHIC; }
|
||||
PARAMETRIZE { abilityAtk = ABILITY_STURDY; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE; expectedMove = MOVE_PSYCHIC; }
|
||||
// Same as above, but ai mon has rock head ability, so it can use Double Edge without taking recoil damage. Psychic can also lower Special Defense,
|
||||
// but because it faints the target it doesn't matter.
|
||||
// PARAMETRIZE { abilityAtk = ABILITY_ROCK_HEAD; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE;
|
||||
// expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_DOUBLE_EDGE; }
|
||||
PARAMETRIZE { abilityAtk = ABILITY_ROCK_HEAD; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE;
|
||||
expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_DOUBLE_EDGE; }
|
||||
// This time it's Solarbeam + Psychic, because the weather is sunny.
|
||||
PARAMETRIZE { abilityAtk = ABILITY_DROUGHT; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE;
|
||||
expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_SOLAR_BEAM; }
|
||||
// Psychic and Solar Beam are chosen because user is holding Power Herb
|
||||
// PARAMETRIZE { abilityAtk = ABILITY_STURDY; holdItemAtk = ITEM_POWER_HERB; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE;
|
||||
// expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_SOLAR_BEAM; }
|
||||
PARAMETRIZE { abilityAtk = ABILITY_STURDY; holdItemAtk = ITEM_POWER_HERB; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SOLAR_BEAM; move3 = MOVE_PSYCHIC; move4 = MOVE_DOUBLE_EDGE;
|
||||
expectedMove = MOVE_PSYCHIC; expectedMove2 = MOVE_SOLAR_BEAM; }
|
||||
// Skull Bash is chosen because it's the most accurate and is holding Power Herb
|
||||
// PARAMETRIZE { abilityAtk = ABILITY_STURDY; holdItemAtk = ITEM_POWER_HERB; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SKULL_BASH; move3 = MOVE_SLAM; move4 = MOVE_DOUBLE_EDGE;
|
||||
// expectedMove = MOVE_SKULL_BASH; }
|
||||
PARAMETRIZE { abilityAtk = ABILITY_STURDY; holdItemAtk = ITEM_POWER_HERB; move1 = MOVE_FOCUS_BLAST; move2 = MOVE_SKULL_BASH; move3 = MOVE_SLAM; move4 = MOVE_DOUBLE_EDGE;
|
||||
expectedMove = MOVE_SKULL_BASH; }
|
||||
|
||||
GIVEN {
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user