Merge branch 'battle_engine' of https://github.com/rh-hideout/pokeemerald-expansion into gen_8_moves_batch1
@ -1878,6 +1878,11 @@
|
|||||||
.4byte \ptr
|
.4byte \ptr
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro trytoapplymimicry battler:req, ptr:req
|
||||||
|
various \battler, VARIOUS_TRY_TO_APPLY_MIMICRY
|
||||||
|
.4byte \ptr
|
||||||
|
.endm
|
||||||
|
|
||||||
.macro trynoretreat battler:req, ptr:req
|
.macro trynoretreat battler:req, ptr:req
|
||||||
various \battler, VARIOUS_TRY_NO_RETREAT
|
various \battler, VARIOUS_TRY_NO_RETREAT
|
||||||
.4byte \ptr
|
.4byte \ptr
|
||||||
|
@ -1893,7 +1893,7 @@ Move_AURA_SPHERE:
|
|||||||
monbg ANIM_ATK_PARTNER
|
monbg ANIM_ATK_PARTNER
|
||||||
monbgprio_28 ANIM_ATTACKER
|
monbgprio_28 ANIM_ATTACKER
|
||||||
setalpha 12, 8
|
setalpha 12, 8
|
||||||
call SetHighSpeedBg
|
call SetAuraSphereBG
|
||||||
playsewithpan SE_M_SKY_UPPERCUT, 0
|
playsewithpan SE_M_SKY_UPPERCUT, 0
|
||||||
delay 60
|
delay 60
|
||||||
createsprite gAuraSphereBlast, ANIM_TARGET, 3, 0
|
createsprite gAuraSphereBlast, ANIM_TARGET, 3, 0
|
||||||
@ -1908,6 +1908,10 @@ Move_AURA_SPHERE:
|
|||||||
delay 1
|
delay 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
SetAuraSphereBG:
|
||||||
|
fadetobg BG_AURA_SPHERE
|
||||||
|
goto SetHighSpeedBgFade
|
||||||
|
|
||||||
Move_ROCK_POLISH:
|
Move_ROCK_POLISH:
|
||||||
loadspritegfx ANIM_TAG_WHITE_STREAK
|
loadspritegfx ANIM_TAG_WHITE_STREAK
|
||||||
loadspritegfx ANIM_TAG_SPARKLE_3
|
loadspritegfx ANIM_TAG_SPARKLE_3
|
||||||
@ -2378,7 +2382,7 @@ Move_FOCUS_BLAST:
|
|||||||
monbg ANIM_ATK_PARTNER
|
monbg ANIM_ATK_PARTNER
|
||||||
monbgprio_28 ANIM_ATTACKER
|
monbgprio_28 ANIM_ATTACKER
|
||||||
setalpha 12, 8
|
setalpha 12, 8
|
||||||
call SetHighSpeedBg
|
call SetFocusBlastBG
|
||||||
createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, 0
|
createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, 0
|
||||||
playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
|
playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
|
||||||
waitforvisualfinish
|
waitforvisualfinish
|
||||||
@ -2391,6 +2395,10 @@ Move_FOCUS_BLAST:
|
|||||||
delay 1
|
delay 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
SetFocusBlastBG:
|
||||||
|
fadetobg BG_FOCUS_BLAST
|
||||||
|
goto SetHighSpeedBgFade
|
||||||
|
|
||||||
Move_ENERGY_BALL:
|
Move_ENERGY_BALL:
|
||||||
loadspritegfx ANIM_TAG_ENERGY_BALL
|
loadspritegfx ANIM_TAG_ENERGY_BALL
|
||||||
monbg ANIM_TARGET
|
monbg ANIM_TARGET
|
||||||
@ -3437,6 +3445,7 @@ Move_GUNK_SHOT:
|
|||||||
monbg ANIM_DEF_PARTNER
|
monbg ANIM_DEF_PARTNER
|
||||||
monbgprio_28 ANIM_TARGET
|
monbgprio_28 ANIM_TARGET
|
||||||
setalpha 12, 8
|
setalpha 12, 8
|
||||||
|
call SetGunkShotBG
|
||||||
createvisualtask AnimTask_ShakeMon 5, 5, ANIM_ATTACKER, 0, 2, 40, 1
|
createvisualtask AnimTask_ShakeMon 5, 5, ANIM_ATTACKER, 0, 2, 40, 1
|
||||||
delay 6
|
delay 6
|
||||||
panse_1B SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0
|
panse_1B SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0
|
||||||
@ -3464,6 +3473,7 @@ Move_GUNK_SHOT:
|
|||||||
call GunkShotImpact
|
call GunkShotImpact
|
||||||
call PoisonBubblesEffect
|
call PoisonBubblesEffect
|
||||||
waitforvisualfinish
|
waitforvisualfinish
|
||||||
|
call UnsetHighSpeedBg
|
||||||
clearmonbg ANIM_DEF_PARTNER
|
clearmonbg ANIM_DEF_PARTNER
|
||||||
blendoff
|
blendoff
|
||||||
end
|
end
|
||||||
@ -3479,6 +3489,10 @@ GunkShotImpact:
|
|||||||
createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, 15, 1, 1
|
createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, 15, 1, 1
|
||||||
createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, -15, 1, 1
|
createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, -15, 1, 1
|
||||||
return
|
return
|
||||||
|
SetGunkShotBG:
|
||||||
|
fadetobg BG_GUNK_SHOT
|
||||||
|
goto SetHighSpeedBgFade
|
||||||
|
|
||||||
|
|
||||||
Move_IRON_HEAD:
|
Move_IRON_HEAD:
|
||||||
loadspritegfx ANIM_TAG_GUST
|
loadspritegfx ANIM_TAG_GUST
|
||||||
|
@ -392,6 +392,7 @@ gBattleScriptsForMoveEffects::
|
|||||||
.4byte BattleScript_EffectSparklySwirl @ EFFECT_SPARKLY_SWIRL
|
.4byte BattleScript_EffectSparklySwirl @ EFFECT_SPARKLY_SWIRL
|
||||||
.4byte BattleScript_EffectPlasmaFists @ EFFECT_PLASMA_FISTS
|
.4byte BattleScript_EffectPlasmaFists @ EFFECT_PLASMA_FISTS
|
||||||
.4byte BattleScript_EffectHyperspaceFury @ EFFECT_HYPERSPACE_FURY
|
.4byte BattleScript_EffectHyperspaceFury @ EFFECT_HYPERSPACE_FURY
|
||||||
|
.4byte BattleScript_EffectAuraWheel @ EFFECT_AURA_WHEEL
|
||||||
.4byte BattleScript_EffectJawLock @ EFFECT_JAW_LOCK
|
.4byte BattleScript_EffectJawLock @ EFFECT_JAW_LOCK
|
||||||
.4byte BattleScript_EffectNoRetreat @ EFFECT_NO_RETREAT
|
.4byte BattleScript_EffectNoRetreat @ EFFECT_NO_RETREAT
|
||||||
.4byte BattleScript_EffectTarShot @ EFFECT_TAR_SHOT
|
.4byte BattleScript_EffectTarShot @ EFFECT_TAR_SHOT
|
||||||
@ -400,6 +401,13 @@ gBattleScriptsForMoveEffects::
|
|||||||
.4byte BattleScript_EffectClangorousSoul @ EFFECT_CLANGOROUS_SOUL
|
.4byte BattleScript_EffectClangorousSoul @ EFFECT_CLANGOROUS_SOUL
|
||||||
.4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK
|
.4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK
|
||||||
|
|
||||||
|
BattleScript_EffectAuraWheel: @ Aura Wheel can only be used by Morpeko
|
||||||
|
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO, BattleScript_EffectSpeedUpHit
|
||||||
|
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectSpeedUpHit
|
||||||
|
printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectClangorousSoul:
|
BattleScript_EffectClangorousSoul:
|
||||||
attackcanceler
|
attackcanceler
|
||||||
attackstring
|
attackstring
|
||||||
@ -506,8 +514,8 @@ BattleScript_BothCanNoLongerEscape::
|
|||||||
return
|
return
|
||||||
|
|
||||||
BattleScript_EffectHyperspaceFury:
|
BattleScript_EffectHyperspaceFury:
|
||||||
jumpifspecies BS_ATTACKER, SPECIES_TREECKO, BattleScript_EffectHyperspaceFuryUnbound
|
jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHyperspaceFuryUnbound
|
||||||
jumpifspecies BS_ATTACKER, SPECIES_MUDKIP, BattleScript_ButHoopaCantUseIt
|
jumpifspecies BS_ATTACKER, SPECIES_HOOPA, BattleScript_ButHoopaCantUseIt
|
||||||
printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE
|
printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
@ -2020,6 +2028,23 @@ BattleScript_EffectPsychicTerrain:
|
|||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG, NULL
|
playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG, NULL
|
||||||
call BattleScript_TerrainSeedLoop
|
call BattleScript_TerrainSeedLoop
|
||||||
|
jumpifabilitypresent ABILITY_MIMICRY, BattleScript_ApplyMimicry
|
||||||
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
|
BattleScript_ApplyMimicry::
|
||||||
|
savetarget
|
||||||
|
setbyte gBattlerTarget, 0
|
||||||
|
BattleScript_MimicryLoopIter:
|
||||||
|
copybyte sBATTLER, gBattlerTarget
|
||||||
|
trytoapplymimicry BS_TARGET, BattleScript_MimicryLoop_NextBattler
|
||||||
|
copybyte gBattlerAbility, sBATTLER
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
printstring STRINGID_BATTLERTYPECHANGEDTO
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
BattleScript_MimicryLoop_NextBattler:
|
||||||
|
addbyte gBattlerTarget, 0x1
|
||||||
|
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_MimicryLoopIter
|
||||||
|
restoretarget
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectTopsyTurvy:
|
BattleScript_EffectTopsyTurvy:
|
||||||
@ -7084,6 +7109,7 @@ BattleScript_AttackerFormChange::
|
|||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUp
|
||||||
printstring STRINGID_EMPTYSTRING3
|
printstring STRINGID_EMPTYSTRING3
|
||||||
waitmessage 1
|
waitmessage 1
|
||||||
|
BattleScript_AttackerFormChangeNoPopup::
|
||||||
handleformchange BS_ATTACKER, 0
|
handleformchange BS_ATTACKER, 0
|
||||||
handleformchange BS_ATTACKER, 1
|
handleformchange BS_ATTACKER, 1
|
||||||
playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE, NULL
|
playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE, NULL
|
||||||
@ -7095,6 +7121,10 @@ BattleScript_AttackerFormChangeEnd3::
|
|||||||
call BattleScript_AttackerFormChange
|
call BattleScript_AttackerFormChange
|
||||||
end3
|
end3
|
||||||
|
|
||||||
|
BattleScript_AttackerFormChangeEnd3NoPopup::
|
||||||
|
call BattleScript_AttackerFormChangeNoPopup
|
||||||
|
end3
|
||||||
|
|
||||||
BattleScript_BallFetch::
|
BattleScript_BallFetch::
|
||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUp
|
||||||
printstring STRINGID_FETCHEDPOKEBALL
|
printstring STRINGID_FETCHEDPOKEBALL
|
||||||
@ -8114,6 +8144,12 @@ BattleScript_ColorChangeActivates::
|
|||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
return
|
return
|
||||||
|
|
||||||
|
BattleScript_MimicryActivatesEnd3::
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
printstring STRINGID_BATTLERTYPECHANGEDTO
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
end3
|
||||||
|
|
||||||
BattleScript_ProteanActivates::
|
BattleScript_ProteanActivates::
|
||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUp
|
||||||
printstring STRINGID_PKMNCHANGEDTYPE
|
printstring STRINGID_PKMNCHANGEDTYPE
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
JASC-PAL
|
|
||||||
0100
|
|
||||||
16
|
|
||||||
0 0 0
|
|
||||||
131 131 131
|
|
||||||
123 123 123
|
|
||||||
115 115 115
|
|
||||||
106 106 106
|
|
||||||
98 98 98
|
|
||||||
82 82 82
|
|
||||||
65 65 65
|
|
||||||
49 49 49
|
|
||||||
0 0 0
|
|
||||||
0 0 0
|
|
||||||
0 0 0
|
|
||||||
0 0 0
|
|
||||||
0 0 0
|
|
||||||
0 0 0
|
|
||||||
0 0 0
|
|
Before Width: | Height: | Size: 6.9 KiB |
@ -2,14 +2,14 @@ JASC-PAL
|
|||||||
0100
|
0100
|
||||||
16
|
16
|
||||||
0 0 0
|
0 0 0
|
||||||
131 131 131
|
48 48 48
|
||||||
123 123 123
|
72 72 72
|
||||||
115 115 115
|
88 88 88
|
||||||
106 106 106
|
120 120 120
|
||||||
98 98 98
|
0 0 0
|
||||||
82 82 82
|
0 0 0
|
||||||
65 65 65
|
0 0 0
|
||||||
49 49 49
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
|
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 984 B |
@ -2,12 +2,12 @@ JASC-PAL
|
|||||||
0100
|
0100
|
||||||
16
|
16
|
||||||
0 0 0
|
0 0 0
|
||||||
164 156 24
|
248 248 144
|
||||||
156 148 24
|
224 224 120
|
||||||
197 189 32
|
200 200 96
|
||||||
172 164 32
|
176 176 72
|
||||||
115 106 16
|
152 152 48
|
||||||
0 0 0
|
120 120 16
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
|
@ -2,12 +2,12 @@ JASC-PAL
|
|||||||
0100
|
0100
|
||||||
16
|
16
|
||||||
0 0 0
|
0 0 0
|
||||||
106 123 139
|
152 184 248
|
||||||
90 106 139
|
128 160 240
|
||||||
123 139 164
|
104 136 216
|
||||||
123 139 197
|
80 112 192
|
||||||
65 74 115
|
56 88 168
|
||||||
0 0 0
|
24 56 136
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
@ -2,10 +2,10 @@ JASC-PAL
|
|||||||
0100
|
0100
|
||||||
16
|
16
|
||||||
0 0 0
|
0 0 0
|
||||||
131 205 230
|
128 200 232
|
||||||
123 180 213
|
120 176 216
|
||||||
115 156 205
|
112 152 200
|
||||||
115 139 164
|
112 136 160
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 814 B |
@ -2,12 +2,12 @@ JASC-PAL
|
|||||||
0100
|
0100
|
||||||
16
|
16
|
||||||
0 0 0
|
0 0 0
|
||||||
214 55 93
|
248 144 248
|
||||||
199 40 78
|
224 120 224
|
||||||
222 91 123
|
200 96 200
|
||||||
223 96 127
|
176 72 176
|
||||||
158 31 62
|
152 48 152
|
||||||
0 0 0
|
120 16 120
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
0 0 0
|
0 0 0
|
||||||
|
Before Width: | Height: | Size: 2.0 KiB |
@ -54,6 +54,7 @@ bool32 IsRecycleEncouragedItem(u16 item);
|
|||||||
bool32 CanKnockOffItem(u8 battler, u16 item);
|
bool32 CanKnockOffItem(u8 battler, u16 item);
|
||||||
bool32 IsAbilityOfRating(u16 ability, s8 rating);
|
bool32 IsAbilityOfRating(u16 ability, s8 rating);
|
||||||
s8 GetAbilityRating(u16 ability);
|
s8 GetAbilityRating(u16 ability);
|
||||||
|
bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability);
|
||||||
|
|
||||||
// stat stage checks
|
// stat stage checks
|
||||||
bool32 AnyStatIsRaised(u8 battlerId);
|
bool32 AnyStatIsRaised(u8 battlerId);
|
||||||
@ -120,7 +121,6 @@ bool32 IsSemiInvulnerable(u8 battlerDef, u16 move);
|
|||||||
|
|
||||||
// status checks
|
// status checks
|
||||||
bool32 AI_CanBeBurned(u8 battler, u16 ability);
|
bool32 AI_CanBeBurned(u8 battler, u16 ability);
|
||||||
bool32 AI_CanBePoisoned(u8 battler, u16 ability);
|
|
||||||
bool32 AI_CanBeConfused(u8 battler, u16 ability);
|
bool32 AI_CanBeConfused(u8 battler, u16 ability);
|
||||||
bool32 AI_CanSleep(u8 battler, u16 ability);
|
bool32 AI_CanSleep(u8 battler, u16 ability);
|
||||||
bool32 IsBattlerIncapacitated(u8 battler, u16 ability);
|
bool32 IsBattlerIncapacitated(u8 battler, u16 ability);
|
||||||
|
@ -407,6 +407,9 @@ extern const u8 BattleScript_WanderingSpiritActivates[];
|
|||||||
extern const u8 BattleScript_MirrorArmorReflect[];
|
extern const u8 BattleScript_MirrorArmorReflect[];
|
||||||
extern const u8 BattleScript_GooeyActivates[];
|
extern const u8 BattleScript_GooeyActivates[];
|
||||||
extern const u8 BattleScript_PastelVeilActivates[];
|
extern const u8 BattleScript_PastelVeilActivates[];
|
||||||
|
extern const u8 BattleScript_MimicryActivatesEnd3[];
|
||||||
|
extern const u8 BattleScript_ApplyMimicry[];
|
||||||
|
extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[];
|
||||||
extern const u8 BattleScript_BothCanNoLongerEscape[];
|
extern const u8 BattleScript_BothCanNoLongerEscape[];
|
||||||
extern const u8 BattleScript_OctolockEndTurn[];
|
extern const u8 BattleScript_OctolockEndTurn[];
|
||||||
|
|
||||||
|
@ -157,8 +157,11 @@ void DoBurmyFormChange(u32 monId);
|
|||||||
bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget);
|
bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget);
|
||||||
u16 GetUsedHeldItem(u8 battler);
|
u16 GetUsedHeldItem(u8 battler);
|
||||||
bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags);
|
bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags);
|
||||||
|
void TryToApplyMimicry(u8 battlerId, bool8 various);
|
||||||
|
void TryToRevertMimicry(void);
|
||||||
|
void RestoreBattlerOriginalTypes(u8 battlerId);
|
||||||
|
|
||||||
// ability checks
|
// Ability checks
|
||||||
bool32 IsRolePlayBannedAbilityAtk(u16 ability);
|
bool32 IsRolePlayBannedAbilityAtk(u16 ability);
|
||||||
bool32 IsRolePlayBannedAbility(u16 ability);
|
bool32 IsRolePlayBannedAbility(u16 ability);
|
||||||
bool32 IsSkillSwapBannedAbility(u16 ability);
|
bool32 IsSkillSwapBannedAbility(u16 ability);
|
||||||
|
@ -47,6 +47,10 @@
|
|||||||
#define SPECIES_GRENINJA_ASH 10017
|
#define SPECIES_GRENINJA_ASH 10017
|
||||||
#define SPECIES_HOOPA 0
|
#define SPECIES_HOOPA 0
|
||||||
#define SPECIES_HOOPA_UNBOUND 10018
|
#define SPECIES_HOOPA_UNBOUND 10018
|
||||||
|
#define SPECIES_MELOETTA 0
|
||||||
|
#define SPECIES_MELOETTA_PIROUETTE 10019
|
||||||
|
#define SPECIES_MORPEKO 0
|
||||||
|
#define SPECIES_MORPEKO_HANGRY 10020
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Items with peculiar battle effects.
|
// Items with peculiar battle effects.
|
||||||
|
@ -375,14 +375,15 @@
|
|||||||
#define EFFECT_SPARKLY_SWIRL 369
|
#define EFFECT_SPARKLY_SWIRL 369
|
||||||
#define EFFECT_PLASMA_FISTS 370
|
#define EFFECT_PLASMA_FISTS 370
|
||||||
#define EFFECT_HYPERSPACE_FURY 371
|
#define EFFECT_HYPERSPACE_FURY 371
|
||||||
#define EFFECT_JAW_LOCK 372
|
#define EFFECT_AURA_WHEEL 372
|
||||||
#define EFFECT_NO_RETREAT 373
|
#define EFFECT_JAW_LOCK 373
|
||||||
#define EFFECT_TAR_SHOT 374
|
#define EFFECT_NO_RETREAT 374
|
||||||
#define EFFECT_POLTERGEIST 375
|
#define EFFECT_TAR_SHOT 375
|
||||||
#define EFFECT_OCTOLOCK 376
|
#define EFFECT_POLTERGEIST 376
|
||||||
#define EFFECT_CLANGOROUS_SOUL 377
|
#define EFFECT_OCTOLOCK 377
|
||||||
#define EFFECT_BOLT_BEAK 378
|
#define EFFECT_CLANGOROUS_SOUL 378
|
||||||
|
#define EFFECT_BOLT_BEAK 379
|
||||||
|
|
||||||
#define NUM_BATTLE_MOVE_EFFECTS 379
|
#define NUM_BATTLE_MOVE_EFFECTS 380
|
||||||
|
|
||||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||||
|
@ -198,12 +198,13 @@
|
|||||||
#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125
|
#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125
|
||||||
#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126
|
#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126
|
||||||
#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127
|
#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127
|
||||||
#define VARIOUS_TRY_NO_RETREAT 128
|
#define VARIOUS_TRY_TO_APPLY_MIMICRY 128
|
||||||
#define VARIOUS_TRY_TAR_SHOT 129
|
#define VARIOUS_TRY_NO_RETREAT 129
|
||||||
#define VARIOUS_CAN_TAR_SHOT_WORK 130
|
#define VARIOUS_TRY_TAR_SHOT 130
|
||||||
#define VARIOUS_CHECK_POLTERGEIST 131
|
#define VARIOUS_CAN_TAR_SHOT_WORK 131
|
||||||
#define VARIOUS_SET_OCTOLOCK 132
|
#define VARIOUS_CHECK_POLTERGEIST 132
|
||||||
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 133
|
#define VARIOUS_SET_OCTOLOCK 133
|
||||||
|
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 134
|
||||||
|
|
||||||
// Cmd_manipulatedamage
|
// Cmd_manipulatedamage
|
||||||
#define DMG_CHANGE_SIGN 0
|
#define DMG_CHANGE_SIGN 0
|
||||||
|
@ -601,13 +601,14 @@
|
|||||||
#define STRINGID_SWAPPEDABILITIES 598
|
#define STRINGID_SWAPPEDABILITIES 598
|
||||||
#define STRINGID_PASTELVEILPROTECTED 599
|
#define STRINGID_PASTELVEILPROTECTED 599
|
||||||
#define STRINGID_PASTELVEILENTERS 600
|
#define STRINGID_PASTELVEILENTERS 600
|
||||||
#define STRINGID_BOTHCANNOLONGERESCAPE 601
|
#define STRINGID_BATTLERTYPECHANGEDTO 601
|
||||||
#define STRINGID_CANTESCAPEDUETOUSEDMOVE 602
|
#define STRINGID_BOTHCANNOLONGERESCAPE 602
|
||||||
#define STRINGID_PKMNBECAMEWEAKERTOFIRE 603
|
#define STRINGID_CANTESCAPEDUETOUSEDMOVE 603
|
||||||
#define STRINGID_ABOUTTOUSEPOLTERGEIST 604
|
#define STRINGID_PKMNBECAMEWEAKERTOFIRE 604
|
||||||
#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 605
|
#define STRINGID_ABOUTTOUSEPOLTERGEIST 605
|
||||||
|
#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 606
|
||||||
|
|
||||||
#define BATTLESTRINGS_COUNT 606
|
#define BATTLESTRINGS_COUNT 607
|
||||||
|
|
||||||
// The below IDs are all indexes into battle message tables,
|
// The below IDs are all indexes into battle message tables,
|
||||||
// used to determine which of a set of messages to print.
|
// used to determine which of a set of messages to print.
|
||||||
|
@ -308,6 +308,7 @@
|
|||||||
#define FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING (1 << 24) // Makes a Ground type move do 1x damage to flying and levitating targets
|
#define FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING (1 << 24) // Makes a Ground type move do 1x damage to flying and levitating targets
|
||||||
#define FLAG_THAW_USER (1 << 25)
|
#define FLAG_THAW_USER (1 << 25)
|
||||||
#define FLAG_HIT_IN_SUBSTITUTE (1 << 26) // Hyperspace Fury
|
#define FLAG_HIT_IN_SUBSTITUTE (1 << 26) // Hyperspace Fury
|
||||||
|
#define FLAG_TWO_STRIKES (1 << 27) // A move with this flag will strike twice, and may apply its effect on each hit
|
||||||
|
|
||||||
// Split defines.
|
// Split defines.
|
||||||
#define SPLIT_PHYSICAL 0x0
|
#define SPLIT_PHYSICAL 0x0
|
||||||
|
@ -4941,7 +4941,6 @@ extern const u32 gBattleAnimBgImage_SpacialRend[];
|
|||||||
extern const u32 gBattleAnimBgPalette_SpacialRend[];
|
extern const u32 gBattleAnimBgPalette_SpacialRend[];
|
||||||
extern const u32 gBattleAnimBgTilemap_SpacialRendOpponent[];
|
extern const u32 gBattleAnimBgTilemap_SpacialRendOpponent[];
|
||||||
extern const u32 gBattleAnimBgTilemap_SpacialRendPlayer[];
|
extern const u32 gBattleAnimBgTilemap_SpacialRendPlayer[];
|
||||||
extern const u32 gBattleAnimBgImage_DarkVoid[];
|
|
||||||
extern const u32 gBattleAnimBgPalette_DarkVoid[];
|
extern const u32 gBattleAnimBgPalette_DarkVoid[];
|
||||||
extern const u32 gBattleAnimBgTilemap_DarkVoid[];
|
extern const u32 gBattleAnimBgTilemap_DarkVoid[];
|
||||||
extern const u32 gBattleAnimBgPalette_Dark[];
|
extern const u32 gBattleAnimBgPalette_Dark[];
|
||||||
|
@ -578,6 +578,21 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
{
|
{
|
||||||
switch (AI_DATA->defAbility)
|
switch (AI_DATA->defAbility)
|
||||||
{
|
{
|
||||||
|
case ABILITY_MAGIC_GUARD:
|
||||||
|
switch (moveEffect)
|
||||||
|
{
|
||||||
|
case EFFECT_POISON:
|
||||||
|
case EFFECT_WILL_O_WISP:
|
||||||
|
case EFFECT_TOXIC:
|
||||||
|
case EFFECT_LEECH_SEED:
|
||||||
|
score -= 5;
|
||||||
|
break;
|
||||||
|
case EFFECT_CURSE:
|
||||||
|
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage.
|
||||||
|
score -= 5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ABILITY_VOLT_ABSORB:
|
case ABILITY_VOLT_ABSORB:
|
||||||
case ABILITY_MOTOR_DRIVE:
|
case ABILITY_MOTOR_DRIVE:
|
||||||
case ABILITY_LIGHTNING_ROD:
|
case ABILITY_LIGHTNING_ROD:
|
||||||
@ -2949,7 +2964,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ability checks
|
// attacker ability checks
|
||||||
switch (AI_DATA->atkAbility)
|
switch (AI_DATA->atkAbility)
|
||||||
{
|
{
|
||||||
case ABILITY_MOXIE:
|
case ABILITY_MOXIE:
|
||||||
@ -2960,21 +2975,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
score += 8; // prioritize killing target for stat boost
|
score += 8; // prioritize killing target for stat boost
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_MAGIC_GUARD:
|
|
||||||
switch (moveEffect)
|
|
||||||
{
|
|
||||||
case EFFECT_POISON:
|
|
||||||
case EFFECT_WILL_O_WISP:
|
|
||||||
case EFFECT_TOXIC:
|
|
||||||
case EFFECT_LEECH_SEED:
|
|
||||||
score -= 5;
|
|
||||||
break;
|
|
||||||
case EFFECT_CURSE:
|
|
||||||
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST))
|
|
||||||
score -= 5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
} // ability checks
|
} // ability checks
|
||||||
|
|
||||||
// move effect checks
|
// move effect checks
|
||||||
@ -3999,7 +3999,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
score += 2;
|
score += 2;
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_TOXIC_ORB:
|
case HOLD_EFFECT_TOXIC_ORB:
|
||||||
if (!ShouldPoisonSelf(battlerAtk, AI_DATA->atkAbility) && AI_CanBePoisoned(battlerDef, AI_DATA->defAbility))
|
if (!ShouldPoisonSelf(battlerAtk, AI_DATA->atkAbility))
|
||||||
score += 2;
|
score += 2;
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_FLAME_ORB:
|
case HOLD_EFFECT_FLAME_ORB:
|
||||||
|
@ -733,28 +733,45 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef)
|
|||||||
else
|
else
|
||||||
dmg = (critDmg + normalDmg * (critChance - 1)) / critChance;
|
dmg = (critDmg + normalDmg * (critChance - 1)) / critChance;
|
||||||
|
|
||||||
// handle dynamic move damage
|
// Handle dynamic move damage
|
||||||
switch (gBattleMoves[move].effect)
|
switch (gBattleMoves[move].effect)
|
||||||
{
|
{
|
||||||
case EFFECT_LEVEL_DAMAGE:
|
case EFFECT_LEVEL_DAMAGE:
|
||||||
case EFFECT_PSYWAVE:
|
case EFFECT_PSYWAVE:
|
||||||
//psywave's expected damage is equal to the user's level
|
dmg = gBattleMons[battlerAtk].level * (AI_DATA->atkAbility == ABILITY_PARENTAL_BOND ? 2 : 1);
|
||||||
dmg = gBattleMons[battlerAtk].level;
|
|
||||||
break;
|
break;
|
||||||
case EFFECT_DRAGON_RAGE:
|
case EFFECT_DRAGON_RAGE:
|
||||||
dmg = 40;
|
dmg = 40 * (AI_DATA->atkAbility == ABILITY_PARENTAL_BOND ? 2 : 1);
|
||||||
break;
|
break;
|
||||||
case EFFECT_SONICBOOM:
|
case EFFECT_SONICBOOM:
|
||||||
dmg = 20;
|
dmg = 20 * (AI_DATA->atkAbility == ABILITY_PARENTAL_BOND ? 2 : 1);
|
||||||
break;
|
break;
|
||||||
//case EFFECT_METAL_BURST:
|
case EFFECT_MULTI_HIT:
|
||||||
//case EFFECT_COUNTER:
|
dmg *= (AI_DATA->atkAbility == ABILITY_SKILL_LINK ? 5 : 3);
|
||||||
default:
|
break;
|
||||||
//do not add the random factor, it's an average case analysis
|
case EFFECT_TRIPLE_KICK:
|
||||||
//dmg *= (100 - (Random() % 10)) / 100; // add random factor
|
dmg *= (AI_DATA->atkAbility == ABILITY_SKILL_LINK ? 6 : 5);
|
||||||
|
break;
|
||||||
|
case EFFECT_ENDEAVOR:
|
||||||
|
// If target has less HP than user, Endeavor does no damage
|
||||||
|
dmg = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp);
|
||||||
|
break;
|
||||||
|
case EFFECT_SUPER_FANG:
|
||||||
|
dmg = (AI_DATA->atkAbility == ABILITY_PARENTAL_BOND
|
||||||
|
? max(2, gBattleMons[battlerDef].hp * 3 / 4)
|
||||||
|
: max(1, gBattleMons[battlerDef].hp / 2));
|
||||||
|
break;
|
||||||
|
case EFFECT_FINAL_GAMBIT:
|
||||||
|
dmg = gBattleMons[battlerAtk].hp;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle other multi-strike moves
|
||||||
|
if (gBattleMoves[move].flags & FLAG_TWO_STRIKES)
|
||||||
|
dmg *= 2;
|
||||||
|
else if (move == MOVE_SURGING_STRIKES || (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH))
|
||||||
|
dmg *= 3;
|
||||||
|
|
||||||
RestoreBattlerData(battlerAtk);
|
RestoreBattlerData(battlerAtk);
|
||||||
RestoreBattlerData(battlerDef);
|
RestoreBattlerData(battlerDef);
|
||||||
|
|
||||||
@ -1065,6 +1082,16 @@ bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgM
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability)
|
||||||
|
{
|
||||||
|
if (IsBattlerAlive(battlerId) && AI_GetAbility(battlerId) == ability)
|
||||||
|
return TRUE;
|
||||||
|
else if (IsBattlerAlive(BATTLE_PARTNER(battlerId)) && AI_GetAbility(BATTLE_PARTNER(battlerId)) == ability)
|
||||||
|
return TRUE;
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// does NOT include ability suppression checks
|
// does NOT include ability suppression checks
|
||||||
s32 AI_GetAbility(u32 battlerId)
|
s32 AI_GetAbility(u32 battlerId)
|
||||||
{
|
{
|
||||||
@ -2606,27 +2633,38 @@ bool32 AI_CanSleep(u8 battler, u16 ability)
|
|||||||
bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
|
bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
|
||||||
{
|
{
|
||||||
if (!AI_CanSleep(battlerDef, defAbility)
|
if (!AI_CanSleep(battlerDef, defAbility)
|
||||||
|| AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
|
|
||||||
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
|
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
|
||||||
|| PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) // shouldn't try to sleep mon that partner is trying to make sleep
|
|| PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) // shouldn't try to sleep mon that partner is trying to make sleep
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool32 AI_CanBePoisoned(u8 battler, u16 ability)
|
static bool32 AI_CanPoisonType(u8 battlerAttacker, u8 battlerTarget)
|
||||||
{
|
{
|
||||||
if (ability == ABILITY_IMMUNITY
|
return ((AI_GetAbility(battlerAttacker) == ABILITY_CORROSION && gBattleMoves[gCurrentMove].split == SPLIT_STATUS)
|
||||||
|| IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL)
|
|| !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL)));
|
||||||
|| gBattleMons[battler].status1 & STATUS1_ANY
|
}
|
||||||
|| IsAbilityStatusProtected(battler)
|
|
||||||
|| gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD)
|
static bool32 AI_CanBePoisoned(u8 battlerAtk, u8 battlerDef)
|
||||||
|
{
|
||||||
|
u16 ability = AI_GetAbility(battlerDef);
|
||||||
|
|
||||||
|
if (!(AI_CanPoisonType(battlerAtk, battlerDef))
|
||||||
|
|| gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
|
||||||
|
|| gBattleMons[battlerDef].status1 & STATUS1_ANY
|
||||||
|
|| ability == ABILITY_IMMUNITY
|
||||||
|
|| ability == ABILITY_COMATOSE
|
||||||
|
|| AI_IsAbilityOnSide(battlerDef, ABILITY_PASTEL_VEIL)
|
||||||
|
|| gBattleMons[battlerDef].status1 & STATUS1_ANY
|
||||||
|
|| IsAbilityStatusProtected(battlerDef)
|
||||||
|
|| AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool32 ShouldPoisonSelf(u8 battler, u16 ability)
|
bool32 ShouldPoisonSelf(u8 battler, u16 ability)
|
||||||
{
|
{
|
||||||
if (AI_CanBePoisoned(battler, ability) && (
|
if (AI_CanBePoisoned(battler, battler) && (
|
||||||
ability == ABILITY_MARVEL_SCALE
|
ability == ABILITY_MARVEL_SCALE
|
||||||
|| ability == ABILITY_POISON_HEAL
|
|| ability == ABILITY_POISON_HEAL
|
||||||
|| ability == ABILITY_QUICK_FEET
|
|| ability == ABILITY_QUICK_FEET
|
||||||
@ -2641,7 +2679,7 @@ bool32 ShouldPoisonSelf(u8 battler, u16 ability)
|
|||||||
|
|
||||||
bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
|
bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
|
||||||
{
|
{
|
||||||
if (!AI_CanBePoisoned(battlerDef, defAbility)
|
if (!AI_CanBePoisoned(battlerAtk, battlerDef)
|
||||||
|| AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
|
|| AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
|
||||||
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
|
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
|
||||||
|| PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove))
|
|| PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove))
|
||||||
@ -2654,7 +2692,7 @@ bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool32 CanBeParayzed(u8 battler, u16 ability)
|
static bool32 AI_CanBeParalyzed(u8 battler, u16 ability)
|
||||||
{
|
{
|
||||||
if (ability == ABILITY_LIMBER
|
if (ability == ABILITY_LIMBER
|
||||||
|| IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC)
|
|| IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC)
|
||||||
@ -2666,7 +2704,7 @@ static bool32 CanBeParayzed(u8 battler, u16 ability)
|
|||||||
|
|
||||||
bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
|
bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
|
||||||
{
|
{
|
||||||
if (!CanBeParayzed(battlerDef, defAbility)
|
if (!AI_CanBeParalyzed(battlerDef, defAbility)
|
||||||
|| AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
|
|| AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
|
||||||
|| gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
|
|| gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
|
||||||
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
|
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
|
||||||
@ -2744,7 +2782,7 @@ bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGe
|
|||||||
|| atkGender == defGender
|
|| atkGender == defGender
|
||||||
|| atkGender == MON_GENDERLESS
|
|| atkGender == MON_GENDERLESS
|
||||||
|| defGender == MON_GENDERLESS
|
|| defGender == MON_GENDERLESS
|
||||||
|| IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL))
|
|| AI_IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -2059,7 +2059,7 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] =
|
|||||||
[BG_ROCK_WRECKER] = {gBattleAnimBgImage_Hurricane, gBattleAnimBgPalette_RockWrecker, gBattleAnimBgTilemap_Hurricane},
|
[BG_ROCK_WRECKER] = {gBattleAnimBgImage_Hurricane, gBattleAnimBgPalette_RockWrecker, gBattleAnimBgTilemap_Hurricane},
|
||||||
[BG_SPACIAL_REND_ON_OPPONENT] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_SpacialRendOpponent},
|
[BG_SPACIAL_REND_ON_OPPONENT] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_SpacialRendOpponent},
|
||||||
[BG_SPACIAL_REND_ON_PLAYER] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_SpacialRendPlayer},
|
[BG_SPACIAL_REND_ON_PLAYER] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_SpacialRendPlayer},
|
||||||
[BG_DARK_VOID] = {gBattleAnimBgImage_DarkVoid, gBattleAnimBgPalette_DarkVoid, gBattleAnimBgTilemap_DarkVoid},
|
[BG_DARK_VOID] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_DarkVoid, gBattleAnimBgTilemap_DarkVoid},
|
||||||
[BG_WATER] = {gBattleAnimBgImage_HydroPump, gBattleAnimBgPalette_HydroPump, gBattleAnimBgTilemap_HydroPump},
|
[BG_WATER] = {gBattleAnimBgImage_HydroPump, gBattleAnimBgPalette_HydroPump, gBattleAnimBgTilemap_HydroPump},
|
||||||
[BG_NIGHTMARE] = {gBattleAnimBgImage_Nightmare, gBattleAnimBgPalette_Nightmare, gBattleAnimBgTilemap_Nightmare},
|
[BG_NIGHTMARE] = {gBattleAnimBgImage_Nightmare, gBattleAnimBgPalette_Nightmare, gBattleAnimBgTilemap_Nightmare},
|
||||||
[BG_LEAF_STORM] = {gBattleAnimBgImage_LeafStorm, gBattleAnimBgPalette_LeafStorm, gBattleAnimBgTilemap_LeafStorm},
|
[BG_LEAF_STORM] = {gBattleAnimBgImage_LeafStorm, gBattleAnimBgPalette_LeafStorm, gBattleAnimBgTilemap_LeafStorm},
|
||||||
|
@ -5229,6 +5229,10 @@ void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk)
|
|||||||
{
|
{
|
||||||
gBattleStruct->dynamicMoveType = 0x80 | TYPE_ELECTRIC;
|
gBattleStruct->dynamicMoveType = 0x80 | TYPE_ELECTRIC;
|
||||||
}
|
}
|
||||||
|
else if (move == MOVE_AURA_WHEEL && gBattleMons[battlerAtk].species == SPECIES_MORPEKO_HANGRY)
|
||||||
|
{
|
||||||
|
gBattleStruct->dynamicMoveType = 0x80 | TYPE_DARK;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if a gem should activate.
|
// Check if a gem should activate.
|
||||||
GET_MOVE_TYPE(move, moveType);
|
GET_MOVE_TYPE(move, moveType);
|
||||||
|
@ -727,6 +727,7 @@ static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} allows the\nu
|
|||||||
static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!");
|
static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!");
|
||||||
static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!");
|
static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!");
|
||||||
static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!");
|
static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!");
|
||||||
|
static const u8 sText_BattlerTypeChangedTo[] = _("{B_BUFF1}'s type\nchanged to {B_BUFF2}!");
|
||||||
static const u8 sText_BothCanNoLongerEscape[] = _("Neither POKéMON can run away!");
|
static const u8 sText_BothCanNoLongerEscape[] = _("Neither POKéMON can run away!");
|
||||||
static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used {B_CURRENT_MOVE}!");
|
static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used {B_CURRENT_MOVE}!");
|
||||||
static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!");
|
static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!");
|
||||||
@ -735,6 +736,7 @@ static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PRE
|
|||||||
|
|
||||||
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||||
{
|
{
|
||||||
|
[STRINGID_BATTLERTYPECHANGEDTO - 12] = sText_BattlerTypeChangedTo,
|
||||||
[STRINGID_PASTELVEILENTERS - 12] = sText_PastelVeilEnters,
|
[STRINGID_PASTELVEILENTERS - 12] = sText_PastelVeilEnters,
|
||||||
[STRINGID_PASTELVEILPROTECTED -12] = sText_PastelVeilProtected,
|
[STRINGID_PASTELVEILPROTECTED -12] = sText_PastelVeilProtected,
|
||||||
[STRINGID_SWAPPEDABILITIES - 12] = sText_SwappedAbilities,
|
[STRINGID_SWAPPEDABILITIES - 12] = sText_SwappedAbilities,
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
#include "constants/rgb.h"
|
#include "constants/rgb.h"
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include "constants/party_menu.h"
|
#include "constants/party_menu.h"
|
||||||
|
#include "battle_util.h"
|
||||||
|
|
||||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||||
extern struct Evolution gEvolutionTable[][EVOS_PER_MON];
|
extern struct Evolution gEvolutionTable[][EVOS_PER_MON];
|
||||||
@ -8875,6 +8876,7 @@ static void Cmd_various(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
|
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
|
||||||
|
TryToRevertMimicry(); // restore the types of Pokémon with Mimicry
|
||||||
break;
|
break;
|
||||||
case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED:
|
case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED:
|
||||||
if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler, TRUE))
|
if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler, TRUE))
|
||||||
@ -8995,6 +8997,7 @@ static void Cmd_various(void)
|
|||||||
else
|
else
|
||||||
gBattlescriptCurrInstr += 7;
|
gBattlescriptCurrInstr += 7;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
case VARIOUS_JUMP_IF_WEATHER_AFFECTED:
|
case VARIOUS_JUMP_IF_WEATHER_AFFECTED:
|
||||||
{
|
{
|
||||||
u32 weatherFlags = T1_READ_32(gBattlescriptCurrInstr + 3);
|
u32 weatherFlags = T1_READ_32(gBattlescriptCurrInstr + 3);
|
||||||
@ -9004,7 +9007,6 @@ static void Cmd_various(void)
|
|||||||
gBattlescriptCurrInstr += 11;
|
gBattlescriptCurrInstr += 11;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
case VARIOUS_APPLY_PLASMA_FISTS:
|
case VARIOUS_APPLY_PLASMA_FISTS:
|
||||||
for (i = 0; i < gBattlersCount; i++)
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
gStatuses4[i] |= STATUS4_PLASMA_FISTS;
|
gStatuses4[i] |= STATUS4_PLASMA_FISTS;
|
||||||
@ -9116,7 +9118,22 @@ static void Cmd_various(void)
|
|||||||
else
|
else
|
||||||
gBattlescriptCurrInstr += 7;
|
gBattlescriptCurrInstr += 7;
|
||||||
return;
|
return;
|
||||||
|
case VARIOUS_TRY_TO_APPLY_MIMICRY:
|
||||||
|
{
|
||||||
|
bool8 isMimicryDone = FALSE;
|
||||||
|
|
||||||
|
if (GetBattlerAbility(gActiveBattler) == ABILITY_MIMICRY)
|
||||||
|
{
|
||||||
|
TryToApplyMimicry(gActiveBattler, TRUE);
|
||||||
|
isMimicryDone = TRUE;
|
||||||
}
|
}
|
||||||
|
if (!isMimicryDone)
|
||||||
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||||
|
else
|
||||||
|
gBattlescriptCurrInstr += 7;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} // End of switch (gBattlescriptCurrInstr[2])
|
||||||
|
|
||||||
gBattlescriptCurrInstr += 3;
|
gBattlescriptCurrInstr += 3;
|
||||||
}
|
}
|
||||||
@ -12916,7 +12933,7 @@ static void Cmd_handleballthrow(void)
|
|||||||
gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = 0;
|
gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = 0;
|
||||||
if (CriticalCapture(odds))
|
if (CriticalCapture(odds))
|
||||||
{
|
{
|
||||||
maxShakes = 1; //critical capture doesn't gauarantee capture
|
maxShakes = 1; //critical capture doesn't guarantee capture
|
||||||
gBattleSpritesDataPtr->animationData->isCriticalCapture = 1;
|
gBattleSpritesDataPtr->animationData->isCriticalCapture = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1894,6 +1894,57 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
|
|||||||
return imprisonedMoves;
|
return imprisonedMoves;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RestoreBattlerOriginalTypes(u8 battlerId)
|
||||||
|
{
|
||||||
|
gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1;
|
||||||
|
gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TryToApplyMimicry(u8 battlerId, bool8 various)
|
||||||
|
{
|
||||||
|
u32 moveType, move;
|
||||||
|
|
||||||
|
GET_MOVE_TYPE(move, moveType);
|
||||||
|
switch (gFieldStatuses)
|
||||||
|
{
|
||||||
|
case STATUS_FIELD_ELECTRIC_TERRAIN:
|
||||||
|
moveType = TYPE_ELECTRIC;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_MISTY_TERRAIN:
|
||||||
|
moveType = TYPE_FAIRY;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_GRASSY_TERRAIN:
|
||||||
|
moveType = TYPE_GRASS;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_PSYCHIC_TERRAIN:
|
||||||
|
moveType = TYPE_PSYCHIC;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
moveType = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (moveType != 0 && !IS_BATTLER_OF_TYPE(battlerId, moveType))
|
||||||
|
{
|
||||||
|
SET_BATTLER_TYPE(battlerId, moveType);
|
||||||
|
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battlerId, gBattlerPartyIndexes[battlerId])
|
||||||
|
PREPARE_TYPE_BUFFER(gBattleTextBuff2, moveType);
|
||||||
|
if (!various)
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_MimicryActivatesEnd3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TryToRevertMimicry(void)
|
||||||
|
{
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (GetBattlerAbility(i) == ABILITY_MIMICRY)
|
||||||
|
RestoreBattlerOriginalTypes(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
ENDTURN_ORDER,
|
ENDTURN_ORDER,
|
||||||
@ -2278,6 +2329,7 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.electricTerrainTimer == 0))
|
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.electricTerrainTimer == 0))
|
||||||
{
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
|
gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
|
||||||
|
TryToRevertMimicry();
|
||||||
BattleScriptExecute(BattleScript_ElectricTerrainEnds);
|
BattleScriptExecute(BattleScript_ElectricTerrainEnds);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
@ -2288,6 +2340,7 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.mistyTerrainTimer == 0))
|
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.mistyTerrainTimer == 0))
|
||||||
{
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN);
|
gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN);
|
||||||
|
TryToRevertMimicry();
|
||||||
BattleScriptExecute(BattleScript_MistyTerrainEnds);
|
BattleScriptExecute(BattleScript_MistyTerrainEnds);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
@ -2298,8 +2351,10 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
{
|
{
|
||||||
if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT)
|
if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT)
|
||||||
&& (gFieldTimers.grassyTerrainTimer == 0 || --gFieldTimers.grassyTerrainTimer == 0))
|
&& (gFieldTimers.grassyTerrainTimer == 0 || --gFieldTimers.grassyTerrainTimer == 0))
|
||||||
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_GRASSY_TERRAIN);
|
gFieldStatuses &= ~(STATUS_FIELD_GRASSY_TERRAIN);
|
||||||
|
TryToRevertMimicry();
|
||||||
|
}
|
||||||
BattleScriptExecute(BattleScript_GrassyTerrainHeals);
|
BattleScriptExecute(BattleScript_GrassyTerrainHeals);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
@ -2310,6 +2365,7 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.psychicTerrainTimer == 0))
|
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.psychicTerrainTimer == 0))
|
||||||
{
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_PSYCHIC_TERRAIN);
|
gFieldStatuses &= ~(STATUS_FIELD_PSYCHIC_TERRAIN);
|
||||||
|
TryToRevertMimicry();
|
||||||
BattleScriptExecute(BattleScript_PsychicTerrainEnds);
|
BattleScriptExecute(BattleScript_PsychicTerrainEnds);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
@ -4403,6 +4459,13 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ABILITY_MIMICRY:
|
||||||
|
if (gBattleMons[battler].hp != 0 && gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
|
||||||
|
{
|
||||||
|
TryToApplyMimicry(battler, FALSE);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITYEFFECT_ENDTURN: // 1
|
case ABILITYEFFECT_ENDTURN: // 1
|
||||||
@ -4585,6 +4648,22 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ABILITY_HUNGER_SWITCH:
|
||||||
|
if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
|
||||||
|
{
|
||||||
|
if (gBattleMons[battler].species == SPECIES_MORPEKO)
|
||||||
|
{
|
||||||
|
gBattleMons[battler].species = SPECIES_MORPEKO_HANGRY;
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
|
||||||
|
}
|
||||||
|
else if (gBattleMons[battler].species == SPECIES_MORPEKO_HANGRY)
|
||||||
|
{
|
||||||
|
gBattleMons[battler].species = SPECIES_MORPEKO;
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
|
||||||
|
}
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -9002,6 +9081,7 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut)
|
|||||||
{SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE},
|
{SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE},
|
||||||
{SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE},
|
{SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE},
|
||||||
{SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE},
|
{SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE},
|
||||||
|
{SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO, TRUE},
|
||||||
};
|
};
|
||||||
|
|
||||||
currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
|
currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
|
||||||
|
@ -378,7 +378,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_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -649,7 +649,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
|||||||
.secondaryEffectChance = 20,
|
.secondaryEffectChance = 20,
|
||||||
.target = MOVE_TARGET_SELECTED,
|
.target = MOVE_TARGET_SELECTED,
|
||||||
.priority = 0,
|
.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_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -2460,7 +2460,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_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -7267,7 +7267,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_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -8367,7 +8367,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_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -8575,7 +8575,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_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -10726,9 +10726,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
|||||||
[MOVE_DOUBLE_IRON_BASH] =
|
[MOVE_DOUBLE_IRON_BASH] =
|
||||||
{
|
{
|
||||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
|
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES,
|
||||||
#else
|
#else
|
||||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_MINIMIZE | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
|
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_MINIMIZE | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES,
|
||||||
#endif
|
#endif
|
||||||
.effect = EFFECT_DOUBLE_IRON_BASH,
|
.effect = EFFECT_DOUBLE_IRON_BASH,
|
||||||
.power = 60,
|
.power = 60,
|
||||||
@ -10850,7 +10850,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_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -11038,7 +11038,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
|||||||
|
|
||||||
[MOVE_AURA_WHEEL] =
|
[MOVE_AURA_WHEEL] =
|
||||||
{
|
{
|
||||||
.effect = EFFECT_SPEED_UP_HIT,
|
.effect = EFFECT_AURA_WHEEL,
|
||||||
.power = 110,
|
.power = 110,
|
||||||
.type = TYPE_ELECTRIC,
|
.type = TYPE_ELECTRIC,
|
||||||
.accuracy = 100,
|
.accuracy = 100,
|
||||||
@ -11480,7 +11480,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_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
|
||||||
.split = SPLIT_PHYSICAL,
|
.split = SPLIT_PHYSICAL,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1397,10 +1397,6 @@ const u32 gBattleAnimBgPalette_MagmaStorm[] = INCBIN_U32("graphics/battle_anims/
|
|||||||
//new battle bgs
|
//new battle bgs
|
||||||
const u32 gBattleAnimBgPalette_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact.gbapal.lz");
|
const u32 gBattleAnimBgPalette_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact.gbapal.lz");
|
||||||
|
|
||||||
//const u32 gBattleAnimBgImage_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/trick_room.4bpp.lz");
|
|
||||||
//const u32 gBattleAnimBgPalette_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/trick_room.gbapal.lz");
|
|
||||||
//const u32 gBattleAnimBgTilemap_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/trick_room_map.bin.lz");
|
|
||||||
|
|
||||||
const u32 gBattleAnimBgImage_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.4bpp.lz");
|
const u32 gBattleAnimBgImage_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.4bpp.lz");
|
||||||
const u32 gBattleAnimBgPalette_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.gbapal.lz");
|
const u32 gBattleAnimBgPalette_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.gbapal.lz");
|
||||||
const u32 gBattleAnimBgTilemap_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.bin.lz");
|
const u32 gBattleAnimBgTilemap_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.bin.lz");
|
||||||
@ -1412,11 +1408,6 @@ const u32 gBattleAnimBgPalette_SpacialRend[] = INCBIN_U32("graphics/battle_anims
|
|||||||
const u32 gBattleAnimBgTilemap_SpacialRendOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend_opponent.bin.lz");
|
const u32 gBattleAnimBgTilemap_SpacialRendOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend_opponent.bin.lz");
|
||||||
const u32 gBattleAnimBgTilemap_SpacialRendPlayer[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend_player.bin.lz");
|
const u32 gBattleAnimBgTilemap_SpacialRendPlayer[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend_player.bin.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgImage_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/dark_void.4bpp.lz");
|
|
||||||
const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/dark_void.gbapal.lz");
|
|
||||||
const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/dark_void.bin.lz");
|
|
||||||
|
|
||||||
|
|
||||||
const u32 gBattleAnimBgPalette_SludgeWave[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sludge_wave.gbapal.lz");
|
const u32 gBattleAnimBgPalette_SludgeWave[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sludge_wave.gbapal.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgImage_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast_tiles.4bpp.lz");
|
const u32 gBattleAnimBgImage_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast_tiles.4bpp.lz");
|
||||||
@ -1441,10 +1432,6 @@ const u32 gBattleAnimBgImage_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle
|
|||||||
const u32 gBattleAnimBgPalette_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.gbapal.lz");
|
const u32 gBattleAnimBgPalette_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.gbapal.lz");
|
||||||
const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin.lz");
|
const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin.lz");
|
||||||
|
|
||||||
//const u32 gBattleAnimBgImage_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.4bpp.lz");
|
|
||||||
//const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.gbapal.lz");
|
|
||||||
//const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.bin.lz");
|
|
||||||
|
|
||||||
const u32 gBattleAnimBgPalette_DynamaxCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dynamax_cannon.gbapal.lz");
|
const u32 gBattleAnimBgPalette_DynamaxCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dynamax_cannon.gbapal.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.4bpp.lz");
|
const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.4bpp.lz");
|
||||||
@ -1497,8 +1484,6 @@ const u32 gBattleAnimBgImage_LeafStorm[] = INCBIN_U32("graphics/battle_anims/bac
|
|||||||
const u32 gBattleAnimBgPalette_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.gbapal.lz");
|
const u32 gBattleAnimBgPalette_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.gbapal.lz");
|
||||||
const u32 gBattleAnimBgTilemap_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.bin.lz");
|
const u32 gBattleAnimBgTilemap_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.bin.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgPalette_MagicRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/magic_room.gbapal.lz");
|
|
||||||
|
|
||||||
const u32 gBattleAnimBgImage_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.4bpp.lz");
|
const u32 gBattleAnimBgImage_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.4bpp.lz");
|
||||||
const u32 gBattleAnimBgPalette_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.gbapal.lz");
|
const u32 gBattleAnimBgPalette_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.gbapal.lz");
|
||||||
const u32 gBattleAnimBgTilemap_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.bin.lz");
|
const u32 gBattleAnimBgTilemap_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.bin.lz");
|
||||||
@ -1553,6 +1538,10 @@ const u32 gBattleAnimBgImage_TrickRoom[] = INCBIN_U32("graphics/battle_anims/bac
|
|||||||
const u32 gBattleAnimBgPalette_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.gbapal.lz");
|
const u32 gBattleAnimBgPalette_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.gbapal.lz");
|
||||||
const u32 gBattleAnimBgTilemap_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.bin.lz");
|
const u32 gBattleAnimBgTilemap_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.bin.lz");
|
||||||
|
|
||||||
|
const u32 gBattleAnimBgPalette_MagicRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/magic_room.gbapal.lz");
|
||||||
|
|
||||||
|
const u32 gBattleAnimBgPalette_WonderRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/wonder_room.gbapal.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgImage_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.4bpp.lz");
|
const u32 gBattleAnimBgImage_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.4bpp.lz");
|
||||||
const u32 gBattleAnimBgPalette_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.gbapal.lz");
|
const u32 gBattleAnimBgPalette_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.gbapal.lz");
|
||||||
const u32 gBattleAnimBgTilemap_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.bin.lz");
|
const u32 gBattleAnimBgTilemap_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.bin.lz");
|
||||||
@ -1565,7 +1554,8 @@ const u32 gBattleAnimBgImage_Waterfall[] = INCBIN_U32("graphics/battle_anims/bac
|
|||||||
const u32 gBattleAnimBgPalette_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.gbapal.lz");
|
const u32 gBattleAnimBgPalette_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.gbapal.lz");
|
||||||
const u32 gBattleAnimBgTilemap_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.bin.lz");
|
const u32 gBattleAnimBgTilemap_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.bin.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgPalette_WonderRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/wonder_room.gbapal.lz");
|
const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.gbapal.lz");
|
||||||
|
const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.bin.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgImage_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.4bpp.lz");
|
const u32 gBattleAnimBgImage_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.4bpp.lz");
|
||||||
const u32 gBattleAnimBgPalette_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.gbapal.lz");
|
const u32 gBattleAnimBgPalette_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.gbapal.lz");
|
||||||
|