Bulletproof and a couple of new moves

This commit is contained in:
DizzyEggg 2018-08-05 13:39:22 +02:00
parent 065032bf35
commit 5fbeef860c
6 changed files with 95 additions and 32 deletions

View File

@ -286,7 +286,60 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
.4byte BattleScript_EffectGrassyTerrain
.4byte BattleScript_EffectElectricTerrain
.4byte BattleScript_EffectPsychicTerrain
.4byte BattleScript_EffectAttackAccUp
.4byte BattleScript_EffectAttackSpAttackUp
.4byte BattleScript_EffectHurricane
BattleScript_EffectAttackSpAttackUp:
attackcanceler
attackstring
ppreduce
jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_AttackSpAttackUpDoMoveAnim
jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, 0xC, BattleScript_CantRaiseMultipleStats
BattleScript_AttackSpAttackUpDoMoveAnim::
attackanimation
waitanimation
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0x0
setstatchanger STAT_ATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AttackSpAttackUpTrySpDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackSpAttackUpTrySpDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AttackSpAttackUpTrySpDef::
setstatchanger STAT_SPATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AttackSpAttackUpEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackSpAttackUpEnd
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AttackSpAttackUpEnd:
goto BattleScript_MoveEnd
BattleScript_EffectAttackAccUp:
attackcanceler
attackstring
ppreduce
jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_AttackAccUpDoMoveAnim
jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, 0xC, BattleScript_CantRaiseMultipleStats
BattleScript_AttackAccUpDoMoveAnim::
attackanimation
waitanimation
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0x0
setstatchanger STAT_ATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AttackAccUpTrySpDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackAccUpTrySpDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AttackAccUpTrySpDef::
setstatchanger STAT_ACC, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AttackAccUpEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackAccUpEnd
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AttackAccUpEnd:
goto BattleScript_MoveEnd
BattleScript_EffectMistyTerrain:
BattleScript_EffectGrassyTerrain:
BattleScript_EffectElectricTerrain:
@ -2501,12 +2554,17 @@ BattleScript_SolarbeamOnFirstTurn::
ppreduce
goto BattleScript_TwoTurnMovesSecondTurn
BattleScript_EffectThunder::
BattleScript_EffectThunder:
setmoveeffect MOVE_EFFECT_PARALYSIS
orword gHitMarker, HITMARKER_IGNORE_ON_AIR
goto BattleScript_EffectHit
BattleScript_EffectHurricane:
setmoveeffect MOVE_EFFECT_CONFUSION
orword gHitMarker, HITMARKER_IGNORE_ON_AIR
goto BattleScript_EffectHit
BattleScript_EffectTeleport::
BattleScript_EffectTeleport:
attackcanceler
attackstring
ppreduce

View File

@ -275,5 +275,8 @@
#define EFFECT_GRASSY_TERRAIN 269
#define EFFECT_ELECTRIC_TERRAIN 270
#define EFFECT_PSYCHIC_TERRAIN 271
#define EFFECT_ATTACK_ACCURACY_UP 272
#define EFFECT_ATTACK_SPATK_UP 273
#define EFFECT_HURRICANE 274
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -96,6 +96,7 @@
#define FLAG_DMG_UNDERGROUND 0x4000
#define FLAG_DMG_UNDERWATER 0x8000
#define FLAG_SOUND 0x10000
#define FLAG_BALLISTIC 0x20000
// Split defines.
#define SPLIT_PHYSICAL 0x0

View File

@ -1464,7 +1464,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_LICK
@ -1692,7 +1692,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_LEECH_LIFE
@ -2268,7 +2268,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_MUD_SLAP
@ -2292,7 +2292,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_SPIKES
@ -2316,7 +2316,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_FORESIGHT
@ -2976,7 +2976,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_FUTURE_SIGHT
@ -3564,7 +3564,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_FEATHER_DANCE
@ -3624,7 +3624,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_NEEDLE_ARM
@ -3744,7 +3744,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_AROMATHERAPY
@ -3984,7 +3984,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_AERIAL_ACE
@ -4212,7 +4212,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_SHOCK_WAVE
@ -4332,7 +4332,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_HEALING_WISH
@ -4764,7 +4764,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_ROCK_POLISH
@ -4944,7 +4944,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_ENERGY_BALL
@ -4956,7 +4956,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_BRAVE_BIRD
@ -5124,7 +5124,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_PSYCHO_CUT
@ -5280,7 +5280,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_CROSS_POISON
@ -5328,7 +5328,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_PHYSICAL,
},
{ // MOVE_STONE_EDGE
@ -5620,7 +5620,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_PHYSICAL,
},
{ // MOVE_HONE_CLAWS
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_ATTACK_ACCURACY_UP,
.power = 0,
.type = TYPE_DARK,
.accuracy = 0,
@ -5844,7 +5844,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_SOAK
@ -5904,7 +5904,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_FOUL_PLAY
@ -6316,7 +6316,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_PHYSICAL,
},
{ // MOVE_WORK_UP
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_ATTACK_SPATK_UP,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
@ -6424,7 +6424,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_PHYSICAL,
},
{ // MOVE_HEAT_CRASH
.effect = EFFECT_HEAT_CRASH, // Needs a custom move effect (maybe the same as heavy slam?)
.effect = EFFECT_HEAT_CRASH,
.power = 1,
.type = TYPE_FIRE,
.accuracy = 100,
@ -6508,7 +6508,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_PHYSICAL,
},
{ // MOVE_HURRICANE
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_HURRICANE,
.power = 110,
.type = TYPE_FLYING,
.accuracy = 70,
@ -6544,7 +6544,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_PHYSICAL,
},
{ // MOVE_SEARING_SHOT
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect (30% burn, does not affect opponents with BULLETPROOF)
.effect = EFFECT_BURN_HIT,
.power = 100,
.type = TYPE_FIRE,
.accuracy = 100,
@ -6552,7 +6552,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_BALLISTIC,
.split = SPLIT_SPECIAL,
},
{ // MOVE_TECHNO_BLAST

View File

@ -1137,7 +1137,7 @@ static bool32 AccuracyCalcHelper(u16 move)
gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER;
if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER)
if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE))
|| (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW))
{
JumpIfMoveFailed(7, move);
@ -1199,8 +1199,8 @@ static void atk01_accuracycheck(void)
buff = 0xC;
moveAcc = gBattleMoves[move].accuracy;
// Check Thunder on sunny weather.
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER)
// Check Thunder and Hurricane on sunny weather.
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE))
moveAcc = 50;
// Check Wonder Skin.
if (defAbility == ABILITY_WONDER_SKIN && gBattleMoves[move].power == 0)

View File

@ -2822,7 +2822,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
break;
case ABILITYEFFECT_MOVES_BLOCK: // 2
if (gLastUsedAbility == ABILITY_SOUNDPROOF && gBattleMoves[move].flags & FLAG_SOUND)
if ((gLastUsedAbility == ABILITY_SOUNDPROOF && gBattleMoves[move].flags & FLAG_SOUND)
|| (gLastUsedAbility == ABILITY_BULLETPROOF && gBattleMoves[move].flags & FLAG_BALLISTIC))
{
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
gHitMarker |= HITMARKER_NO_PPDEDUCT;