Misc moves + cmd_seteffectwithchance fix
Added check to prevent loops in cmd_seteffectwithchance. Updated Pay Day, Tri Attack, Spectral Thief, Clear Smog, V Create, Core Enforcer
This commit is contained in:
parent
4058d16f2f
commit
2d0ec53cb6
@ -56,9 +56,9 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_31
|
||||
.4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP
|
||||
.4byte BattleScript_EffectToxic @ EFFECT_TOXIC
|
||||
.4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_34
|
||||
.4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN
|
||||
.4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_36
|
||||
.4byte BattleScript_EffectRest @ EFFECT_REST
|
||||
.4byte BattleScript_EffectOHKO @ EFFECT_OHKO
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO
|
||||
@ -247,7 +247,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectHit @ EFFECT_GYRO_BALL
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ECHOED_VOICE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_PAYBACK
|
||||
.4byte BattleScript_EffectRound @ EFFECT_ROUND
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ROUND
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BRINE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RETALIATE
|
||||
@ -312,7 +312,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectNobleRoar @ EFFECT_NOBLE_ROAR
|
||||
.4byte BattleScript_EffectVenomDrench @ EFFECT_VENOM_DRENCH
|
||||
.4byte BattleScript_EffectToxicThread @ EFFECT_TOXIC_THREAD
|
||||
.4byte BattleScript_EffectClearSmog @ EFFECT_CLEAR_SMOG
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_290
|
||||
.4byte BattleScript_EffectHitSwitchTarget @ EFFECT_HIT_SWITCH_TARGET
|
||||
.4byte BattleScript_EffectFinalGambit @ EFFECT_FINAL_GAMBIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_CHANGE_TYPE_ON_ITEM
|
||||
@ -343,11 +343,11 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectSpAtkUpHit @ EFFECT_SP_ATTACK_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BELCH
|
||||
.4byte BattleScript_EffectPartingShot @ EFFECT_PARTING_SHOT
|
||||
.4byte BattleScript_EffectSpectralThief @ EFFECT_SPECTRAL_THIEF
|
||||
.4byte BattleScript_EffectVCreate @ EFFECT_V_CREATE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_321
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_322
|
||||
.4byte BattleScript_EffectMatBlock @ EFFECT_MAT_BLOCK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_STOMPING_TANTRUM
|
||||
.4byte BattleScript_EffectCoreEnforcer @ EFFECT_CORE_ENFORCER
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_325
|
||||
.4byte BattleScript_EffectInstruct @ EFFECT_INSTRUCT
|
||||
.4byte BattleScript_EffectThroatChop @ EFFECT_THROAT_CHOP
|
||||
.4byte BattleScript_EffectLaserFocus @ EFFECT_LASER_FOCUS
|
||||
@ -1468,10 +1468,6 @@ BattleScript_MoveEffectBugBite::
|
||||
restoretarget
|
||||
return
|
||||
|
||||
BattleScript_EffectCoreEnforcer:
|
||||
setmoveeffect MOVE_EFFECT_CORE_ENFORCER | MOVE_EFFECT_CERTAIN
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_MoveEffectCoreEnforcer::
|
||||
setgastroacid BattleScript_CoreEnforcerRet
|
||||
printstring STRINGID_PKMNSABILITYSUPPRESSED
|
||||
@ -1493,10 +1489,6 @@ BattleScript_EffectLaserFocus:
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectVCreate:
|
||||
setmoveeffect MOVE_EFFECT_V_CREATE | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_VCreateStatLoss::
|
||||
jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim
|
||||
jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim
|
||||
@ -1532,10 +1524,6 @@ BattleScript_SpectralThiefSteal::
|
||||
spectralthiefprintstats
|
||||
return
|
||||
|
||||
BattleScript_EffectSpectralThief:
|
||||
setmoveeffect MOVE_EFFECT_SPECTRAL_THIEF
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectPartingShot::
|
||||
attackcanceler
|
||||
attackstring
|
||||
@ -2089,10 +2077,6 @@ BattleScript_HitSwitchTargetForceRandomSwitchFailed:
|
||||
setbyte sSWITCH_CASE, B_SWITCH_NORMAL
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectClearSmog:
|
||||
setmoveeffect MOVE_EFFECT_CLEAR_SMOG
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectToxicThread:
|
||||
setstatchanger STAT_SPEED, 2, TRUE
|
||||
attackcanceler
|
||||
@ -3066,10 +3050,6 @@ BattleScript_EffectPlaceholder:
|
||||
printstring STRINGID_NOTDONEYET
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectRound:
|
||||
setmoveeffect MOVE_EFFECT_ROUND
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectHit::
|
||||
BattleScript_HitFromAtkCanceler::
|
||||
attackcanceler
|
||||
@ -3771,10 +3751,6 @@ BattleScript_ImmunityProtected::
|
||||
call BattleScript_PSNPrevention
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectPayDay::
|
||||
setmoveeffect MOVE_EFFECT_PAYDAY
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectAuroraVeil:
|
||||
attackcanceler
|
||||
attackstring
|
||||
@ -3789,10 +3765,6 @@ BattleScript_EffectLightScreen::
|
||||
setlightscreen
|
||||
goto BattleScript_PrintReflectLightScreenSafeguardString
|
||||
|
||||
BattleScript_EffectTriAttack::
|
||||
setmoveeffect MOVE_EFFECT_TRI_ATTACK
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectRest::
|
||||
attackcanceler
|
||||
attackstring
|
||||
|
||||
@ -35,9 +35,9 @@
|
||||
#define EFFECT_UNUSED_31 31
|
||||
#define EFFECT_RESTORE_HP 32
|
||||
#define EFFECT_TOXIC 33
|
||||
#define EFFECT_PAY_DAY 34
|
||||
#define EFFECT_UNUSED_34 34
|
||||
#define EFFECT_LIGHT_SCREEN 35
|
||||
#define EFFECT_TRI_ATTACK 36
|
||||
#define EFFECT_UNUSED_36 36
|
||||
#define EFFECT_REST 37
|
||||
#define EFFECT_OHKO 38
|
||||
#define EFFECT_FUSION_COMBO 39
|
||||
@ -293,7 +293,7 @@
|
||||
#define EFFECT_NOBLE_ROAR 287
|
||||
#define EFFECT_VENOM_DRENCH 288
|
||||
#define EFFECT_TOXIC_THREAD 289
|
||||
#define EFFECT_CLEAR_SMOG 290
|
||||
#define EFFECT_UNUSED_290 290
|
||||
#define EFFECT_HIT_SWITCH_TARGET 291
|
||||
#define EFFECT_FINAL_GAMBIT 292
|
||||
#define EFFECT_CHANGE_TYPE_ON_ITEM 293
|
||||
@ -324,11 +324,11 @@
|
||||
#define EFFECT_SP_ATTACK_UP_HIT 318
|
||||
#define EFFECT_BELCH 319
|
||||
#define EFFECT_PARTING_SHOT 320
|
||||
#define EFFECT_SPECTRAL_THIEF 321
|
||||
#define EFFECT_V_CREATE 322
|
||||
#define EFFECT_UNUSED_321 321
|
||||
#define EFFECT_UNUSED_322 322
|
||||
#define EFFECT_MAT_BLOCK 323
|
||||
#define EFFECT_STOMPING_TANTRUM 324
|
||||
#define EFFECT_CORE_ENFORCER 325
|
||||
#define EFFECT_UNUSED_325 325
|
||||
#define EFFECT_INSTRUCT 326
|
||||
#define EFFECT_THROAT_CHOP 327
|
||||
#define EFFECT_LASER_FOCUS 328
|
||||
|
||||
@ -2089,8 +2089,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EFFECT_SPECTRAL_THIEF:
|
||||
break;
|
||||
case EFFECT_SEMI_INVULNERABLE:
|
||||
if (predictedMove != MOVE_NONE
|
||||
&& AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
|
||||
@ -2178,8 +2176,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
case EFFECT_CORE_ENFORCER:
|
||||
break;
|
||||
case EFFECT_SIMPLE_BEAM:
|
||||
if (aiData->abilities[battlerDef] == ABILITY_SIMPLE
|
||||
|| IsEntrainmentTargetOrSimpleBeamBannedAbility(aiData->abilities[battlerDef])
|
||||
@ -3215,7 +3211,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
u32 predictedMove = aiData->predictedMoves[battlerDef];
|
||||
u32 predictedMoveSlot = GetMoveSlot(GetMovesArray(battlerDef), predictedMove);
|
||||
bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk);
|
||||
u32 i;
|
||||
u32 i = 0;
|
||||
// We only check for moves that have a 20% chance or more for their secondary effect to happen because moves with a smaller chance are rather worthless. We don't want the AI to use those.
|
||||
bool32 sereneGraceBoost = (aiData->abilities[battlerAtk] == ABILITY_SERENE_GRACE && (gBattleMoves[move].secondaryEffectChance >= 20 && gBattleMoves[move].secondaryEffectChance < 100));
|
||||
|
||||
@ -3511,16 +3507,18 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
case EFFECT_HAZE:
|
||||
if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk))
|
||||
|| PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))
|
||||
{
|
||||
ADJUST_SCORE(-3);
|
||||
break;
|
||||
// fallthrough
|
||||
}
|
||||
goto SHOULD_USE_PHAZING_MOVE;
|
||||
case EFFECT_ROAR:
|
||||
case EFFECT_CLEAR_SMOG:
|
||||
if (isDoubleBattle)
|
||||
score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7);
|
||||
else
|
||||
score += min(CountPositiveStatStages(battlerDef), 4);
|
||||
break;
|
||||
if (aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF || aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS)
|
||||
{
|
||||
ADJUST_SCORE(-3);
|
||||
break;
|
||||
}
|
||||
goto SHOULD_USE_PHAZING_MOVE;
|
||||
case EFFECT_MULTI_HIT:
|
||||
case EFFECT_TRIPLE_KICK:
|
||||
if (AI_MoveMakesContact(aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], move)
|
||||
@ -4067,36 +4065,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
score += (MAX_STAT_STAGE - gBattleMons[battlerAtk].statStages[STAT_ATK]);
|
||||
break;
|
||||
case EFFECT_PSYCH_UP:
|
||||
case EFFECT_SPECTRAL_THIEF:
|
||||
// Want to copy positive stat changes
|
||||
for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i])
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case STAT_ATK:
|
||||
if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case STAT_SPATK:
|
||||
if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case STAT_ACC:
|
||||
case STAT_EVASION:
|
||||
case STAT_SPEED:
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case STAT_DEF:
|
||||
case STAT_SPDEF:
|
||||
if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL)
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
goto SHOULD_USE_STAT_COPY_MOVE;
|
||||
case EFFECT_SEMI_INVULNERABLE:
|
||||
ADJUST_SCORE(1);
|
||||
if (predictedMove != MOVE_NONE && !isDoubleBattle)
|
||||
@ -4140,7 +4109,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
case EFFECT_SWAGGER:
|
||||
if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY)
|
||||
|| HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP)
|
||||
|| HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF))
|
||||
|| HasMoveWithMoveEffect(battlerAtk, MOVE_EFFECT_SPECTRAL_THIEF, FALSE))
|
||||
ADJUST_SCORE(1);
|
||||
|
||||
if (aiData->abilities[battlerDef] == ABILITY_CONTRARY)
|
||||
@ -4150,7 +4119,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
break;
|
||||
case EFFECT_FLATTER:
|
||||
if (HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP)
|
||||
|| HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF))
|
||||
|| HasMoveWithMoveEffect(battlerAtk, MOVE_EFFECT_SPECTRAL_THIEF, FALSE))
|
||||
ADJUST_SCORE(2);
|
||||
|
||||
if (aiData->abilities[battlerDef] == ABILITY_CONTRARY)
|
||||
@ -4899,7 +4868,45 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
{
|
||||
case MOVE_EFFECT_POISON:
|
||||
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
|
||||
break;
|
||||
break;
|
||||
case MOVE_EFFECT_CLEAR_SMOG:
|
||||
SHOULD_USE_PHAZING_MOVE:
|
||||
if (isDoubleBattle)
|
||||
score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7);
|
||||
else
|
||||
score += min(CountPositiveStatStages(battlerDef), 4);
|
||||
break;
|
||||
case MOVE_EFFECT_SPECTRAL_THIEF:
|
||||
SHOULD_USE_STAT_COPY_MOVE:
|
||||
// Want to copy positive stat changes
|
||||
for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i])
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case STAT_ATK:
|
||||
if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case STAT_SPATK:
|
||||
if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case STAT_ACC:
|
||||
case STAT_EVASION:
|
||||
case STAT_SPEED:
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case STAT_DEF:
|
||||
case STAT_SPDEF:
|
||||
if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL)
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3584,8 +3584,6 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
||||
gBattleScripting.moveEffect = RandomElement(RNG_DIRE_CLAW, sDireClawEffects);
|
||||
SetMoveEffect(TRUE, 0);
|
||||
}
|
||||
else
|
||||
gBattlescriptCurrInstr++;
|
||||
break;
|
||||
case MOVE_EFFECT_STEALTH_ROCK:
|
||||
if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK))
|
||||
@ -3594,8 +3592,6 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = BattleScript_StealthRockActivates;
|
||||
}
|
||||
else
|
||||
gBattlescriptCurrInstr++;
|
||||
break;
|
||||
case MOVE_EFFECT_SPIKES:
|
||||
if (gSideTimers[GetBattlerSide(gEffectBattler)].spikesAmount < 3)
|
||||
@ -3604,8 +3600,6 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = BattleScript_SpikesActivates;
|
||||
}
|
||||
else
|
||||
gBattlescriptCurrInstr++;
|
||||
break;
|
||||
case MOVE_EFFECT_SYRUP_BOMB:
|
||||
if (!(gStatuses4[gEffectBattler] & STATUS4_SYRUP_BOMB))
|
||||
@ -3648,12 +3642,13 @@ static void Cmd_seteffectwithchance(void)
|
||||
}
|
||||
gBattleScripting.moveEffect = 0;
|
||||
}
|
||||
else if (gBattleMoves[gCurrentMove].numAdditionalEffects > 0)
|
||||
else if (gBattleMoves[gCurrentMove].numAdditionalEffects > gBattleStruct->additionalEffectsCounter)
|
||||
{
|
||||
u32 percentChance = CalcSecondaryEffectChance(
|
||||
gBattlerAttacker,
|
||||
gBattleMoves[gCurrentMove].additionalEffects[gBattleStruct->additionalEffectsCounter].chance
|
||||
);
|
||||
const u8 *currentPtr = gBattlescriptCurrInstr;
|
||||
|
||||
// Activate effect if it's primary (chance == 0) or if RNGesus says so
|
||||
if ((percentChance == 0) || RandomPercentage(RNG_SECONDARY_EFFECT + gBattleStruct->additionalEffectsCounter, percentChance))
|
||||
@ -3666,7 +3661,9 @@ static void Cmd_seteffectwithchance(void)
|
||||
percentChance >= 100 // certain to happen
|
||||
);
|
||||
}
|
||||
else
|
||||
|
||||
// Move script along if we haven't jumped elsewhere
|
||||
if (gBattlescriptCurrInstr == currentPtr)
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
|
||||
// Call seteffectwithchance again in the case of a move with multiple effects
|
||||
@ -3676,7 +3673,7 @@ static void Cmd_seteffectwithchance(void)
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_CONTINUE;
|
||||
}
|
||||
else
|
||||
gBattleStruct->additionalEffectsCounter = gBattleScripting.moveEffect = 0;
|
||||
gBattleScripting.moveEffect = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -6064,6 +6061,7 @@ static void Cmd_moveend(void)
|
||||
gBattleStruct->zmove.effect = EFFECT_HIT;
|
||||
gBattleStruct->hitSwitchTargetFailed = FALSE;
|
||||
gBattleStruct->isAtkCancelerForCalledMove = FALSE;
|
||||
gBattleStruct->additionalEffectsCounter = 0;
|
||||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
case MOVEEND_COUNT:
|
||||
|
||||
@ -115,9 +115,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_CONVERSION] = 3,
|
||||
[EFFECT_RESTORE_HP] = 3,
|
||||
[EFFECT_TOXIC] = 5,
|
||||
[EFFECT_PAY_DAY] = 1,
|
||||
[EFFECT_LIGHT_SCREEN] = 7,
|
||||
[EFFECT_TRI_ATTACK] = 1,
|
||||
[EFFECT_REST] = 7,
|
||||
[EFFECT_OHKO] = 7,
|
||||
// [EFFECT_RAZOR_WIND] = 1,
|
||||
@ -370,7 +368,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_NOBLE_ROAR] = 0, // TODO: Assign points
|
||||
[EFFECT_VENOM_DRENCH] = 0, // TODO: Assign points
|
||||
[EFFECT_TOXIC_THREAD] = 0, // TODO: Assign points
|
||||
[EFFECT_CLEAR_SMOG] = 0, // TODO: Assign points
|
||||
[EFFECT_HIT_SWITCH_TARGET] = 0, // TODO: Assign points
|
||||
[EFFECT_FINAL_GAMBIT] = 0, // TODO: Assign points
|
||||
[EFFECT_CHANGE_TYPE_ON_ITEM] = 0, // TODO: Assign points
|
||||
@ -401,11 +398,8 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_SP_ATTACK_UP_HIT] = 0, // TODO: Assign points
|
||||
[EFFECT_BELCH] = 0, // TODO: Assign points
|
||||
[EFFECT_PARTING_SHOT] = 0, // TODO: Assign points
|
||||
[EFFECT_SPECTRAL_THIEF] = 0, // TODO: Assign points
|
||||
[EFFECT_V_CREATE] = 0, // TODO: Assign points
|
||||
[EFFECT_MAT_BLOCK] = 0, // TODO: Assign points
|
||||
[EFFECT_STOMPING_TANTRUM] = 0, // TODO: Assign points
|
||||
[EFFECT_CORE_ENFORCER] = 0, // TODO: Assign points
|
||||
[EFFECT_INSTRUCT] = 0, // TODO: Assign points
|
||||
[EFFECT_THROAT_CHOP] = 0, // TODO: Assign points
|
||||
[EFFECT_LASER_FOCUS] = 0, // TODO: Assign points
|
||||
|
||||
@ -96,16 +96,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_PAY_DAY] =
|
||||
{
|
||||
.effect = EFFECT_PAY_DAY,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 40,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_PAYDAY)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_FIRE_PUNCH] =
|
||||
@ -2893,17 +2895,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_TRI_ATTACK] =
|
||||
{
|
||||
.effect = EFFECT_TRI_ATTACK,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_TRI_ATTACK, 20)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_SUPER_FANG] =
|
||||
@ -3119,7 +3123,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.thawsUser = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10)
|
||||
)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_SNORE] =
|
||||
@ -8811,13 +8815,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6,
|
||||
.soundMove = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_ROUND)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_ECHOED_VOICE] =
|
||||
@ -8854,16 +8860,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_CLEAR_SMOG] =
|
||||
{
|
||||
.effect = EFFECT_CLEAR_SMOG,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 50,
|
||||
.type = TYPE_POISON,
|
||||
.accuracy = 0,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_CLEAR_SMOG)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_STORED_POWER] =
|
||||
@ -9847,18 +9855,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_V_CREATE] =
|
||||
{
|
||||
.effect = EFFECT_V_CREATE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 180,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 95,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT_SELF(MOVE_EFFECT_V_CREATE)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_FUSION_FLARE] =
|
||||
@ -11410,16 +11420,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_CORE_ENFORCER] =
|
||||
{
|
||||
.effect = EFFECT_CORE_ENFORCER,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 100,
|
||||
.type = TYPE_DRAGON,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_CORE_ENFORCER)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_TROP_KICK] =
|
||||
@ -11670,12 +11682,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SPECTRAL_THIEF] =
|
||||
{
|
||||
.effect = EFFECT_SPECTRAL_THIEF,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -11683,6 +11694,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.ignoresSubstitute = TRUE,
|
||||
.makesContact = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_SPECTRAL_THIEF)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_SUNSTEEL_STRIKE] =
|
||||
|
||||
@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting p
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2);
|
||||
ASSUME(gBattleMoves[MOVE_SPECTRAL_THIEF].effect == EFFECT_SPECTRAL_THIEF);
|
||||
ASSUME(gBattleMoves[MOVE_SPECTRAL_THIEF].additionalEffects[0].moveEffect == MOVE_EFFECT_SPECTRAL_THIEF);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); }
|
||||
} WHEN {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK);
|
||||
ASSUME(gBattleMoves[MOVE_TRI_ATTACK].additionalEffects[0].moveEffect == MOVE_EFFECT_TRI_ATTACK);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user