add grassy glide, misty explosion, steel roller, obstruct, behemoth, decorate, snipe shot

This commit is contained in:
Evan 2021-01-28 13:27:00 -07:00
parent a37acb8345
commit c009b51ae8
14 changed files with 155 additions and 20 deletions

View File

@ -1780,6 +1780,10 @@
.4byte \ptr .4byte \ptr
.endm .endm
.macro removeterrain
various BS_ATTACKER, VARIOUS_REMOVE_TERRAIN
.endm
@ helpful macros @ helpful macros
.macro setstatchanger stat:req, stages:req, down:req .macro setstatchanger stat:req, stages:req, down:req
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7 setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7

View File

@ -13492,7 +13492,7 @@ Move_BODY_PRESS::
end end
Move_DECORATE:: Move_DECORATE::
end @to do: goto Move_FLOWER_SHIELD
Move_DRUM_BEATING:: Move_DRUM_BEATING::
loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_MUSIC_NOTES
@ -13968,7 +13968,7 @@ Move_EXPANDING_FORCE::
end @to do: end @to do:
Move_STEEL_ROLLER:: Move_STEEL_ROLLER::
end @to do: goto Move_GYRO_BALL
Move_SCALE_SHOT:: Move_SCALE_SHOT::
end @to do: end @to do:

View File

@ -369,6 +369,62 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
.4byte BattleScript_EffectJungleHealing .4byte BattleScript_EffectJungleHealing
.4byte BattleScript_EffectCoaching .4byte BattleScript_EffectCoaching
.4byte BattleScript_EffectLashOut .4byte BattleScript_EffectLashOut
.4byte BattleScript_EffectGrassyGlide
.4byte BattleScript_EffectRemoveTerrain
.4byte BattleScript_EffectBehemoth
.4byte BattleScript_EffectDecorate
BattleScript_EffectDecorate:
attackcanceler
attackstring
ppreduce
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_DecorateBoost
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 12, BattleScript_DecorateBoost
goto BattleScript_ButItFailed
BattleScript_DecorateBoost:
attackanimation
waitanimation
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0x0
setstatchanger STAT_ATK, 2, FALSE
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DecorateBoostSpAtk
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_DecorateBoostSpAtk:
setstatchanger STAT_SPATK, 2, FALSE
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd
printfromtable gStatUpStringIds
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectRemoveTerrain:
attackcanceler
attackstring
ppreduce
jumpifword CMP_NO_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ButItFailed
critcalc
damagecalc
adjustdamage
attackanimation
waitanimation
effectivenesssound
hitanimation BS_TARGET
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
removeterrain
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 4, BattleScript_MoveEnd
printfromtable gTerrainEndingStringIds
waitmessage 0x40
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
tryfaintmon BS_TARGET, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_EffectCoaching: BattleScript_EffectCoaching:
attackcanceler attackcanceler
@ -383,6 +439,8 @@ EffectCoaching_CheckAllyStats:
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, 12, BattleScript_CoachingWorks jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, 12, BattleScript_CoachingWorks
goto BattleScript_ButItFailed @ ally at max atk, def goto BattleScript_ButItFailed @ ally at max atk, def
BattleScript_CoachingWorks: BattleScript_CoachingWorks:
attackanimation
waitanimation
setbyte sSTAT_ANIM_PLAYED, FALSE setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, 0x0 playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, 0x0
setstatchanger STAT_ATK, 1, FALSE setstatchanger STAT_ATK, 1, FALSE
@ -2113,6 +2171,8 @@ BattleScript_EffectFusionCombo:
BattleScript_EffectRevelationDance: BattleScript_EffectRevelationDance:
BattleScript_EffectBelch: BattleScript_EffectBelch:
BattleScript_EffectLashOut: BattleScript_EffectLashOut:
BattleScript_EffectGrassyGlide:
BattleScript_EffectBehemoth:
BattleScript_HitFromAtkCanceler:: BattleScript_HitFromAtkCanceler::
attackcanceler attackcanceler

View File

@ -117,6 +117,7 @@ struct ProtectStruct
u32 spikyShielded:1; u32 spikyShielded:1;
u32 kingsShielded:1; u32 kingsShielded:1;
u32 banefulBunkered:1; u32 banefulBunkered:1;
u32 obstruct:1;
u32 endured:1; u32 endured:1;
u32 noValidMoves:1; u32 noValidMoves:1;
u32 helpingHand:1; u32 helpingHand:1;
@ -140,12 +141,12 @@ struct ProtectStruct
u32 usedGravityPreventedMove:1; u32 usedGravityPreventedMove:1;
u32 powderSelfDmg:1; u32 powderSelfDmg:1;
u32 usedThroatChopPreventedMove:1; u32 usedThroatChopPreventedMove:1;
u32 statFell:1;
u32 statRaised:1;
u32 physicalDmg; u32 physicalDmg;
u32 specialDmg; u32 specialDmg;
u8 physicalBattlerId; u8 physicalBattlerId;
u8 specialBattlerId; u8 specialBattlerId;
u8 statFell:1; // placed here since cleared at end of round
u8 statRaised:1;
}; };
struct SpecialStatus struct SpecialStatus

View File

@ -234,7 +234,7 @@
#define STATUS_FIELD_ION_DELUGE 0x400 #define STATUS_FIELD_ION_DELUGE 0x400
#define STATUS_FIELD_FAIRY_LOCK 0x800 #define STATUS_FIELD_FAIRY_LOCK 0x800
#define STATUS_TERRAIN_ANY (STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN) #define STATUS_FIELD_TERRAIN_ANY (STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN)
// Flags describing move's result // Flags describing move's result
#define MOVE_RESULT_MISSED (1 << 0) #define MOVE_RESULT_MISSED (1 << 0)

View File

@ -355,5 +355,10 @@
#define EFFECT_JUNGLE_HEALING 349 #define EFFECT_JUNGLE_HEALING 349
#define EFFECT_COACHING 350 #define EFFECT_COACHING 350
#define EFFECT_LASH_OUT 351 #define EFFECT_LASH_OUT 351
#define EFFECT_GRASSY_GLIDE 352
#define EFFECT_REMOVE_TERRAIN 353
#define EFFECT_BEHEMOTH 354
#define EFFECT_DECORATE 355
#define EFFECT_SNIPE_SHOT 356
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -171,6 +171,7 @@
#define VARIOUS_EERIE_SPELL_PP_REDUCE 104 #define VARIOUS_EERIE_SPELL_PP_REDUCE 104
#define VARIOUS_JUMP_IF_TEAM_HEALTHY 105 #define VARIOUS_JUMP_IF_TEAM_HEALTHY 105
#define VARIOUS_TRY_HEAL_QUARTER_HP 106 #define VARIOUS_TRY_HEAL_QUARTER_HP 106
#define VARIOUS_REMOVE_TERRAIN 107
// Cmd_manipulatedamage // Cmd_manipulatedamage
#define DMG_CHANGE_SIGN 0 #define DMG_CHANGE_SIGN 0

View File

@ -3205,7 +3205,7 @@ static void LoadDefaultBg(void)
if (IsContest()) if (IsContest())
LoadContestBgAfterMoveAnim(); LoadContestBgAfterMoveAnim();
#if B_TERRAIN_BG_CHANGE == TRUE #if B_TERRAIN_BG_CHANGE == TRUE
else if (gFieldStatuses & STATUS_TERRAIN_ANY) else if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
DrawTerrainTypeBattleBackground(); DrawTerrainTypeBattleBackground();
#endif #endif
else else

View File

@ -1422,7 +1422,7 @@ bool8 LoadChosenBattleElement(u8 caseId)
void DrawTerrainTypeBattleBackground(void) void DrawTerrainTypeBattleBackground(void)
{ {
switch (gFieldStatuses & STATUS_TERRAIN_ANY) switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
{ {
case STATUS_FIELD_GRASSY_TERRAIN: case STATUS_FIELD_GRASSY_TERRAIN:
LoadMoveBg(BG_GRASSY_TERRAIN); LoadMoveBg(BG_GRASSY_TERRAIN);

View File

@ -3081,6 +3081,7 @@ void FaintClearSetData(void)
gProtectStructs[gActiveBattler].spikyShielded = 0; gProtectStructs[gActiveBattler].spikyShielded = 0;
gProtectStructs[gActiveBattler].kingsShielded = 0; gProtectStructs[gActiveBattler].kingsShielded = 0;
gProtectStructs[gActiveBattler].banefulBunkered = 0; gProtectStructs[gActiveBattler].banefulBunkered = 0;
gProtectStructs[gActiveBattler].obstruct = 0;
gProtectStructs[gActiveBattler].endured = 0; gProtectStructs[gActiveBattler].endured = 0;
gProtectStructs[gActiveBattler].noValidMoves = 0; gProtectStructs[gActiveBattler].noValidMoves = 0;
gProtectStructs[gActiveBattler].helpingHand = 0; gProtectStructs[gActiveBattler].helpingHand = 0;
@ -3102,6 +3103,8 @@ void FaintClearSetData(void)
gProtectStructs[gActiveBattler].usesBouncedMove = 0; gProtectStructs[gActiveBattler].usesBouncedMove = 0;
gProtectStructs[gActiveBattler].usedGravityPreventedMove = 0; gProtectStructs[gActiveBattler].usedGravityPreventedMove = 0;
gProtectStructs[gActiveBattler].usedThroatChopPreventedMove = 0; gProtectStructs[gActiveBattler].usedThroatChopPreventedMove = 0;
gProtectStructs[gActiveBattler].statFell = 0;
gProtectStructs[gActiveBattler].statRaised = 0;
gDisableStructs[gActiveBattler].isFirstTurn = 2; gDisableStructs[gActiveBattler].isFirstTurn = 2;
@ -4315,6 +4318,10 @@ s8 GetMovePriority(u32 battlerId, u16 move)
{ {
priority++; priority++;
} }
else if (gBattleMoves[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battlerId))
{
priority++;
}
else if (GetBattlerAbility(battlerId) == ABILITY_TRIAGE) else if (GetBattlerAbility(battlerId) == ABILITY_TRIAGE)
{ {
switch (gBattleMoves[move].effect) switch (gBattleMoves[move].effect)

View File

@ -1252,6 +1252,11 @@ const u16 gTerrainStringIds[] =
STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC
}; };
const u16 gTerrainEndingStringIds[] =
{
STRINGID_MISTYTERRAINENDS, STRINGID_GRASSYTERRAINENDS, STRINGID_ELECTRICTERRAINENDS, STRINGID_PSYCHICTERRAINENDS
};
const u16 gTerrainPreventsStringIds[] = const u16 gTerrainPreventsStringIds[] =
{ {
STRINGID_MISTYTERRAINPREVENTS, STRINGID_ELECTRICTERRAINPREVENTS, STRINGID_PSYCHICTERRAINPREVENTS STRINGID_MISTYTERRAINPREVENTS, STRINGID_ELECTRICTERRAINPREVENTS, STRINGID_PSYCHICTERRAINPREVENTS
@ -1330,7 +1335,7 @@ const u16 gRainContinuesStringIds[] =
const u16 gProtectLikeUsedStringIds[] = const u16 gProtectLikeUsedStringIds[] =
{ {
STRINGID_PKMNPROTECTEDITSELF2, STRINGID_PKMNBRACEDITSELF, STRINGID_BUTITFAILED, STRINGID_PROTECTEDTEAM, STRINGID_PKMNPROTECTEDITSELF2, STRINGID_PKMNBRACEDITSELF, STRINGID_BUTITFAILED, STRINGID_PROTECTEDTEAM
}; };
const u16 gReflectLightScreenSafeguardStringIds[] = const u16 gReflectLightScreenSafeguardStringIds[] =

View File

@ -1171,13 +1171,15 @@ bool32 IsBattlerProtected(u8 battlerId, u16 move)
return FALSE; return FALSE;
else if (gBattleMoves[move].effect == MOVE_EFFECT_FEINT) else if (gBattleMoves[move].effect == MOVE_EFFECT_FEINT)
return FALSE; return FALSE;
else if (gProtectStructs[battlerId].protected) else if (gProtectStructs[battlerId].protected && move != MOVE_DECORATE)
return TRUE; return TRUE;
else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD
&& gBattleMoves[move].target & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) && gBattleMoves[move].target & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
return TRUE; return TRUE;
else if (gProtectStructs[battlerId].banefulBunkered) else if (gProtectStructs[battlerId].banefulBunkered)
return TRUE; return TRUE;
else if (gProtectStructs[battlerId].obstruct && !IS_MOVE_STATUS(move))
return TRUE;
else if (gProtectStructs[battlerId].spikyShielded) else if (gProtectStructs[battlerId].spikyShielded)
return TRUE; return TRUE;
else if (gProtectStructs[battlerId].kingsShielded && gBattleMoves[move].power != 0) else if (gProtectStructs[battlerId].kingsShielded && gBattleMoves[move].power != 0)
@ -3126,7 +3128,8 @@ void SetMoveEffect(bool32 primary, u32 certain)
|| gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_MAT_BLOCK || gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_MAT_BLOCK
|| gProtectStructs[gBattlerTarget].spikyShielded || gProtectStructs[gBattlerTarget].spikyShielded
|| gProtectStructs[gBattlerTarget].kingsShielded || gProtectStructs[gBattlerTarget].kingsShielded
|| gProtectStructs[gBattlerTarget].banefulBunkered) || gProtectStructs[gBattlerTarget].banefulBunkered
|| gProtectStructs[gBattlerTarget].obstruct)
{ {
gProtectStructs[gBattlerTarget].protected = 0; gProtectStructs[gBattlerTarget].protected = 0;
gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~(SIDE_STATUS_WIDE_GUARD); gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~(SIDE_STATUS_WIDE_GUARD);
@ -3136,6 +3139,7 @@ void SetMoveEffect(bool32 primary, u32 certain)
gProtectStructs[gBattlerTarget].spikyShielded = 0; gProtectStructs[gBattlerTarget].spikyShielded = 0;
gProtectStructs[gBattlerTarget].kingsShielded = 0; gProtectStructs[gBattlerTarget].kingsShielded = 0;
gProtectStructs[gBattlerTarget].banefulBunkered = 0; gProtectStructs[gBattlerTarget].banefulBunkered = 0;
gProtectStructs[gBattlerTarget].obstruct = 0;
if (gCurrentMove == MOVE_FEINT) if (gCurrentMove == MOVE_FEINT)
{ {
BattleScriptPush(gBattlescriptCurrInstr + 1); BattleScriptPush(gBattlescriptCurrInstr + 1);
@ -4722,6 +4726,16 @@ static void Cmd_moveend(void)
gBattlescriptCurrInstr = BattleScript_BanefulBunkerEffect; gBattlescriptCurrInstr = BattleScript_BanefulBunkerEffect;
effect = 1; effect = 1;
} }
else if (gProtectStructs[gBattlerTarget].obstruct && gCurrentMove != MOVE_SUCKER_PUNCH)
{
i = gBattlerAttacker;
gBattlerAttacker = gBattlerTarget;
gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_2;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_KingsShieldEffect;
effect = 1;
}
} }
gBattleScripting.moveendState++; gBattleScripting.moveendState++;
break; break;
@ -6951,7 +6965,7 @@ static void HandleTerrainMove(u32 moveEffect)
} }
else else
{ {
gFieldStatuses &= ~STATUS_TERRAIN_ANY; gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY;
gFieldStatuses |= statusFlag; gFieldStatuses |= statusFlag;
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER)
*timer = 8; *timer = 8;
@ -8410,6 +8424,27 @@ static void Cmd_various(void)
else else
gBattlescriptCurrInstr += 7; // can heal gBattlescriptCurrInstr += 7; // can heal
return; return;
case VARIOUS_REMOVE_TERRAIN:
switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
{
case STATUS_FIELD_MISTY_TERRAIN:
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
break;
case STATUS_FIELD_GRASSY_TERRAIN:
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
break;
case STATUS_FIELD_ELECTRIC_TERRAIN:
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
break;
case STATUS_FIELD_PSYCHIC_TERRAIN:
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
break;
default:
gBattleCommunication[MULTISTRING_CHOOSER] = 4; // failsafe
break;
}
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
break;
} }
gBattlescriptCurrInstr += 3; gBattlescriptCurrInstr += 3;
@ -8455,6 +8490,11 @@ static void Cmd_setprotectlike(void)
gProtectStructs[gBattlerAttacker].banefulBunkered = 1; gProtectStructs[gBattlerAttacker].banefulBunkered = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleCommunication[MULTISTRING_CHOOSER] = 0;
} }
else if (gCurrentMove == MOVE_OBSTRUCT)
{
gProtectStructs[gBattlerAttacker].obstruct = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
gDisableStructs[gBattlerAttacker].protectUses++; gDisableStructs[gBattlerAttacker].protectUses++;
fail = FALSE; fail = FALSE;

View File

@ -141,6 +141,7 @@ void HandleAction_UseMove(void)
&& gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget)
&& gBattleMons[gSideTimers[side].followmeTarget].hp != 0 && gBattleMons[gSideTimers[side].followmeTarget].hp != 0
&& gBattleMoves[gCurrentMove].effect != EFFECT_SNIPE_SHOT
&& (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL
|| GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)) || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART))
{ {
@ -162,6 +163,7 @@ void HandleAction_UseMove(void)
&& ((GetBattlerAbility(gActiveBattler) == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) && ((GetBattlerAbility(gActiveBattler) == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
|| (GetBattlerAbility(gActiveBattler) == ABILITY_STORM_DRAIN && moveType == TYPE_WATER)) || (GetBattlerAbility(gActiveBattler) == ABILITY_STORM_DRAIN && moveType == TYPE_WATER))
&& GetBattlerTurnOrderNum(gActiveBattler) < var && GetBattlerTurnOrderNum(gActiveBattler) < var
&& gBattleMoves[gCurrentMove].effect != EFFECT_SNIPE_SHOT
&& (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL
|| GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)) || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART))
{ {
@ -6690,6 +6692,16 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef)
if (gProtectStructs[battlerAtk].statFell == 1) if (gProtectStructs[battlerAtk].statFell == 1)
basePower *= 2; basePower *= 2;
break; break;
case EFFECT_EXPLOSION:
if (move == MOVE_MISTY_EXPLOSION && gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && IsBattlerGrounded(battlerAtk))
basePower = 150;
break;
case EFFECT_BEHEMOTH:
#ifdef B_DYNAMAX
if (IsDynamaxed(battlerDef))/
basePower *= 2;
#endif
break;
} }
if (basePower == 0) if (basePower == 0)

View File

@ -10605,7 +10605,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_SNIPE_SHOT] = [MOVE_SNIPE_SHOT] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_SNIPE_SHOT,
.power = 80, .power = 80,
.type = TYPE_WATER, .type = TYPE_WATER,
.accuracy = 100, .accuracy = 100,
@ -10613,7 +10613,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0, .secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED, .target = MOVE_TARGET_SELECTED,
.priority = 0, .priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
@ -10802,7 +10802,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_DECORATE] = [MOVE_DECORATE] =
{ {
.effect = EFFECT_PLACEHOLDER, // TODO .. EFFECT_DECORATE .effect = EFFECT_DECORATE,
.power = 0, .power = 0,
.type = TYPE_FAIRY, .type = TYPE_FAIRY,
.accuracy = 0, .accuracy = 0,
@ -10858,7 +10858,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_BEHEMOTH_BLADE] = [MOVE_BEHEMOTH_BLADE] =
{ {
.effect = EFFECT_HIT, //TODO: 2x damage if dynamaxed? meh... .effect = EFFECT_BEHEMOTH,
.power = 100, .power = 100,
.type = TYPE_STEEL, .type = TYPE_STEEL,
.accuracy = 100, .accuracy = 100,
@ -10872,7 +10872,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_BEHEMOTH_BASH] = [MOVE_BEHEMOTH_BASH] =
{ {
.effect = EFFECT_HIT, //TODO: 2x damage if dynamaxed? meh... .effect = EFFECT_BEHEMOTH,
.power = 100, .power = 100,
.type = TYPE_STEEL, .type = TYPE_STEEL,
.accuracy = 100, .accuracy = 100,
@ -11012,7 +11012,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_OBSTRUCT] = [MOVE_OBSTRUCT] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO. EFFECT_PROTECT? .effect = EFFECT_PROTECT,
.power = 0, .power = 0,
.type = TYPE_DARK, .type = TYPE_DARK,
.accuracy = 100, .accuracy = 100,
@ -11096,7 +11096,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_STEEL_ROLLER] = [MOVE_STEEL_ROLLER] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_REMOVE_TERRAIN,
.power = 130, .power = 130,
.type = TYPE_STEEL, .type = TYPE_STEEL,
.accuracy = 100, .accuracy = 100,
@ -11152,7 +11152,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_MISTY_EXPLOSION] = [MOVE_MISTY_EXPLOSION] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_EXPLOSION,
.power = 100, .power = 100,
.type = TYPE_FAIRY, .type = TYPE_FAIRY,
.accuracy = 100, .accuracy = 100,
@ -11166,7 +11166,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_GRASSY_GLIDE] = [MOVE_GRASSY_GLIDE] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_GRASSY_GLIDE,
.power = 70, .power = 70,
.type = TYPE_GRASS, .type = TYPE_GRASS,
.accuracy = 100, .accuracy = 100,