mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-18 17:34:20 +01:00
Merge branch 'battle_engine' of https://github.com/rh-hideout/pokeemerald-expansion into gen8_abilities_BE
This commit is contained in:
commit
517c8ffdd0
@ -1755,6 +1755,10 @@
|
||||
various \battler, VARIOUS_JUMP_IF_ABSENT
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
.macro destroyabilitypopup
|
||||
various BS_ABILITY_BATTLER, VARIOUS_DESTROY_ABILITY_POPUP
|
||||
.endm
|
||||
|
||||
@ helpful macros
|
||||
.macro setstatchanger stat:req, stages:req, down:req
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/pokemon.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "asm/macros/battle_anim_script.inc"
|
||||
.include "constants/constants.inc"
|
||||
@ -767,7 +768,15 @@ gBattleAnims_Moves::
|
||||
.4byte Move_JUNGLE_HEALING
|
||||
.4byte Move_WICKED_BLOW
|
||||
.4byte Move_SURGING_STRIKES
|
||||
.4byte Move_COUNT @ cannot be reached, because last move is Surging Strikes
|
||||
.4byte Move_THUNDER_CAGE
|
||||
.4byte Move_DRAGON_ENERGY
|
||||
.4byte Move_FREEZING_GLARE
|
||||
.4byte Move_FIERY_WRATH
|
||||
.4byte Move_THUNDEROUS_KICK
|
||||
.4byte Move_GLACIAL_LANCE
|
||||
.4byte Move_ASTRAL_BARRAGE
|
||||
.4byte Move_EERIE_SPELL
|
||||
.4byte Move_COUNT @ cannot be reached, because last move is Eerie Spell
|
||||
|
||||
.align 2
|
||||
gBattleAnims_StatusConditions::
|
||||
@ -815,6 +824,7 @@ gBattleAnims_General::
|
||||
.4byte General_IllusionOff
|
||||
.4byte General_FormChange
|
||||
.4byte General_SlideOffScreen
|
||||
.4byte General_RestoreBg
|
||||
|
||||
.align 2
|
||||
gBattleAnims_Special::
|
||||
@ -2798,28 +2808,42 @@ Move_FIRE_FANG:
|
||||
end
|
||||
|
||||
Move_SHADOW_SNEAK:
|
||||
loadspritegfx ANIM_TAG_LICK
|
||||
setalpha 0, 16
|
||||
delay 1
|
||||
createvisualtask AnimTask_InitMementoShadow, 2
|
||||
delay 1
|
||||
createvisualtask AnimTask_MoveAttackerMementoShadow, 5
|
||||
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||
delay 48
|
||||
playsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond
|
||||
loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
|
||||
loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison
|
||||
loadspritegfx ANIM_TAG_HANDS_AND_FEET
|
||||
monbg ANIM_ATTACKER
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x0000
|
||||
waitforvisualfinish
|
||||
createvisualtask sub_8114470, 2
|
||||
setalpha 0, 16
|
||||
delay 1
|
||||
playsewithpan SE_M_LICK, SOUND_PAN_TARGET
|
||||
createsprite gLickSpriteTemplate, ANIM_TARGET, 2, 0, 0
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 16, 1
|
||||
playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER
|
||||
launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x12 0x6 0x1 0x3
|
||||
launchtask AnimTask_AttackerFadeToInvisible 0x2 0x1 0x1
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATTACKER
|
||||
invisible ANIM_ATTACKER
|
||||
delay 0x1
|
||||
launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30
|
||||
delay 0x30
|
||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xF 0x0
|
||||
createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0
|
||||
call ShadowSneakMovement
|
||||
createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0
|
||||
call ShadowSneakMovement
|
||||
createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0
|
||||
call ShadowSneakMovement
|
||||
createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0
|
||||
call ShadowSneakMovement
|
||||
waitforvisualfinish
|
||||
visible ANIM_ATTACKER
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x0000
|
||||
waitforvisualfinish
|
||||
clearmonbg_23 ANIM_TARGET
|
||||
delay 1
|
||||
blendoff
|
||||
delay 1
|
||||
end
|
||||
ShadowSneakMovement:
|
||||
playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
|
||||
launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
|
||||
delay 0x4
|
||||
return
|
||||
|
||||
Move_MUD_BOMB:
|
||||
loadspritegfx ANIM_TAG_MUD_SAND
|
||||
@ -6744,10 +6768,10 @@ Move_SEARING_SHOT:
|
||||
|
||||
Move_TECHNO_BLAST:
|
||||
launchtask AnimTask_TechnoBlast 0x5 0x0
|
||||
jumpargeq 0x0, 10, TechnoBlastFire
|
||||
jumpargeq 0x0, 11, TechnoBlastWater
|
||||
jumpargeq 0x0, 13, TechnoBlastElectric
|
||||
jumpargeq 0x0, 15, TechnoBlastIce
|
||||
jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire
|
||||
jumpargeq 0x0, TYPE_WATER, TechnoBlastWater
|
||||
jumpargeq 0x0, TYPE_ELECTRIC, TechnoBlastElectric
|
||||
jumpargeq 0x0, TYPE_ICE, TechnoBlastIce
|
||||
TechnoBlastNormal:
|
||||
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
|
||||
loadspritegfx ANIM_TAG_ORBS @circles
|
||||
@ -6883,7 +6907,7 @@ TechnoBlastElectric:
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e SOUND_PAN_ATTACKER 0x28 0x2
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
|
||||
launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
|
||||
@ -6892,20 +6916,20 @@ TechnoBlastElectric:
|
||||
playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER
|
||||
launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
|
||||
launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1
|
||||
delay 0x2
|
||||
launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0
|
||||
delay 0x2
|
||||
launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2
|
||||
delay 0x2
|
||||
launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1, ANIM_TARGET
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0
|
||||
launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1
|
||||
waitforvisualfinish
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
|
||||
waitforvisualfinish
|
||||
@ -7017,7 +7041,7 @@ TechnoBlastWater:
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e SOUND_PAN_ATTACKER 0x28 0x2
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
|
||||
launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
|
||||
@ -7070,7 +7094,7 @@ TechnoBlastFire:
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e SOUND_PAN_ATTACKER 0x28 0x2
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
|
||||
launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
|
||||
@ -7079,13 +7103,13 @@ TechnoBlastFire:
|
||||
playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER
|
||||
launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
|
||||
launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0
|
||||
launchtemplate gFireSpreadSpriteTemplate 0x81 0x5 0x0 0xa SOUND_PAN_ATTACKER 0xb0 0x28
|
||||
launchtemplate gFireSpreadSpriteTemplate 0x81 0x5 0x0 0xa 0xff40 0xf0 0x28
|
||||
launchtemplate gFireSpreadSpriteTemplate 0x81 0x5 0x0 0xa SOUND_PAN_ATTACKER 0xff60 0x28
|
||||
launchtemplate gFireSpreadSpriteTemplate 0x81 0x5 0x0 0xa 0xff40 0xff90 0x28
|
||||
launchtemplate gFireSpreadSpriteTemplate 0x81 0x5 0x0 0xa 0xa0 0x30 0x28
|
||||
launchtemplate gFireSpreadSpriteTemplate 0x81 0x5 0x0 0xa 0xff20 0xffe0 0x28
|
||||
launchtemplate gFireSpreadSpriteTemplate 0x81 0x5 0x0 0xa 0x70 0xff80 0x28
|
||||
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40
|
||||
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40
|
||||
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40
|
||||
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40
|
||||
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40
|
||||
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40
|
||||
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40
|
||||
delay 0x2
|
||||
launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
|
||||
delay 0x2
|
||||
@ -7154,7 +7178,7 @@ TechnoBlastIce:
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e SOUND_PAN_ATTACKER 0x28 0x2
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
|
||||
launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
|
||||
@ -8453,6 +8477,8 @@ Move_GRASSY_TERRAIN::
|
||||
delay 4
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(31, 24, 31)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_MISTY_TERRAIN::
|
||||
@ -8491,6 +8517,8 @@ Move_MISTY_TERRAIN::
|
||||
delay 4
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 7, 0, RGB(31, 24, 31)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_ELECTRIFY::
|
||||
@ -9374,6 +9402,8 @@ Move_ELECTRIC_TERRAIN::
|
||||
delay 2
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(28, 28, 0)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_DAZZLING_GLEAM::
|
||||
@ -9451,6 +9481,7 @@ Move_BABY_DOLL_EYES::
|
||||
loadspritegfx ANIM_TAG_PINK_CLOUD
|
||||
loadspritegfx ANIM_TAG_OPENING_EYE @eye
|
||||
setalpha 8, 8
|
||||
monbg ANIM_DEF_PARTNER
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xA 0x7FFF
|
||||
waitforvisualfinish
|
||||
launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0
|
||||
@ -9463,6 +9494,7 @@ Move_BABY_DOLL_EYES::
|
||||
launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x9 0x1
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xA 0x0 0x7FFF
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
blendoff
|
||||
end
|
||||
|
||||
@ -11027,6 +11059,8 @@ Move_PSYCHIC_TERRAIN::
|
||||
delay 4
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(27, 0, 13)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_LUNGE::
|
||||
@ -13995,6 +14029,30 @@ Move_WICKED_BLOW::
|
||||
Move_SURGING_STRIKES::
|
||||
end @to do:
|
||||
|
||||
Move_THUNDER_CAGE::
|
||||
end @to do:
|
||||
|
||||
Move_DRAGON_ENERGY::
|
||||
end @to do:
|
||||
|
||||
Move_FREEZING_GLARE::
|
||||
end @to do:
|
||||
|
||||
Move_FIERY_WRATH::
|
||||
end @to do:
|
||||
|
||||
Move_THUNDEROUS_KICK::
|
||||
end @to do:
|
||||
|
||||
Move_GLACIAL_LANCE::
|
||||
end @to do:
|
||||
|
||||
Move_ASTRAL_BARRAGE::
|
||||
end @to do:
|
||||
|
||||
Move_EERIE_SPELL::
|
||||
end @to do:
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@
|
||||
Move_NONE:
|
||||
Move_MIRROR_MOVE:
|
||||
@ -23929,6 +23987,7 @@ General_TurnTrap:
|
||||
jumpargeq 0, TRAP_ANIM_WHIRLPOOL, Status_Whirlpool
|
||||
jumpargeq 0, TRAP_ANIM_CLAMP, Status_Clamp
|
||||
jumpargeq 0, TRAP_ANIM_SAND_TOMB, Status_SandTomb
|
||||
jumpargeq 0, TRAP_ANIM_INFESTATION, Status_Infestation
|
||||
goto Status_BindWrap
|
||||
Status_BindWrap:
|
||||
loadspritegfx ANIM_TAG_TENDRILS
|
||||
@ -24002,6 +24061,22 @@ Status_SandTomb:
|
||||
stopsound
|
||||
end
|
||||
|
||||
Status_Infestation:
|
||||
loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
|
||||
loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles
|
||||
monbg ANIM_DEF_PARTNER
|
||||
monbgprio_28 ANIM_TARGET
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_DEF, 0x2, 0x0, 0x9, 0x7320
|
||||
launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 30 0x1
|
||||
loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 30
|
||||
call InfestationVortex
|
||||
call InfestationVortex
|
||||
waitforvisualfinish
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7320
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
end
|
||||
|
||||
General_HeldItemEffect:
|
||||
loadspritegfx ANIM_TAG_THIN_RING
|
||||
loadspritegfx ANIM_TAG_SPARKLE_2
|
||||
@ -24320,6 +24395,11 @@ General_TerrainElectric:
|
||||
General_TerrainPsychic:
|
||||
end
|
||||
|
||||
General_RestoreBg:
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
SnatchMoveTrySwapFromSubstitute:
|
||||
createvisualtask AnimTask_IsAttackerBehindSubstitute, 2
|
||||
jumprettrue SnatchMoveSwapSubstituteForMon
|
||||
@ -24412,4 +24492,3 @@ Special_CriticalCaptureBallThrow:
|
||||
createvisualtask AnimTask_IsBallBlockedByTrainer, 2
|
||||
jumpreteq -1, BallThrowTrainerBlock
|
||||
goto BallThrowEnd
|
||||
|
||||
|
@ -1082,16 +1082,15 @@ BattleScript_EffectFinalGambit:
|
||||
waitstate
|
||||
healthbarupdate BS_TARGET
|
||||
datahpupdate BS_TARGET
|
||||
critmessage
|
||||
waitmessage 0x40
|
||||
resultmessage
|
||||
waitmessage 0x40
|
||||
seteffectwithchance
|
||||
tryfaintmon BS_TARGET, FALSE, NULL
|
||||
jumpifmovehadnoeffect BattleScript_MoveEnd
|
||||
dmgtocurrattackerhp
|
||||
healthbarupdate BS_ATTACKER
|
||||
datahpupdate BS_ATTACKER
|
||||
seteffectwithchance
|
||||
tryfaintmon BS_ATTACKER, FALSE, NULL
|
||||
tryfaintmon BS_TARGET, FALSE, NULL
|
||||
jumpifmovehadnoeffect BattleScript_MoveEnd
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectHitSwitchTarget:
|
||||
@ -2806,6 +2805,10 @@ BattleScript_EffectDoubleHit::
|
||||
BattleScript_EffectRecoilIfMiss::
|
||||
attackcanceler
|
||||
accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE
|
||||
.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
|
||||
typecalc
|
||||
jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveMissedDoDamage
|
||||
.endif
|
||||
goto BattleScript_HitFromAtkString
|
||||
BattleScript_MoveMissedDoDamage::
|
||||
jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_PrintMoveMissed
|
||||
@ -2814,19 +2817,33 @@ BattleScript_MoveMissedDoDamage::
|
||||
pause 0x40
|
||||
resultmessage
|
||||
waitmessage 0x40
|
||||
.if B_CRASH_IF_TARGET_IMMUNE < GEN_4
|
||||
jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
|
||||
.endif
|
||||
printstring STRINGID_PKMNCRASHED
|
||||
waitmessage 0x40
|
||||
damagecalc
|
||||
typecalc
|
||||
adjustdamage
|
||||
.if B_CRASH_IF_TARGET_IMMUNE == GEN_4
|
||||
manipulatedamage DMG_RECOIL_FROM_IMMUNE
|
||||
.else
|
||||
manipulatedamage DMG_RECOIL_FROM_MISS
|
||||
.endif
|
||||
.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
|
||||
bichalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
|
||||
.else
|
||||
bichalfword gMoveResultFlags, MOVE_RESULT_MISSED
|
||||
.endif
|
||||
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
|
||||
healthbarupdate BS_ATTACKER
|
||||
datahpupdate BS_ATTACKER
|
||||
tryfaintmon BS_ATTACKER, FALSE, NULL
|
||||
.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
|
||||
orhalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
|
||||
.else
|
||||
orhalfword gMoveResultFlags, MOVE_RESULT_MISSED
|
||||
.endif
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectMist::
|
||||
@ -5424,21 +5441,25 @@ BattleScript_MagicRoomEnds::
|
||||
BattleScript_ElectricTerrainEnds::
|
||||
printstring STRINGID_ELECTRICTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_MistyTerrainEnds::
|
||||
printstring STRINGID_MISTYTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_GrassyTerrainEnds::
|
||||
printstring STRINGID_GRASSYTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_PsychicTerrainEnds::
|
||||
printstring STRINGID_PSYCHICTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_MudSportEnds::
|
||||
|
@ -520,6 +520,7 @@ struct BattleStruct
|
||||
u8 savedBattlerTarget;
|
||||
bool8 ateBoost[MAX_BATTLERS_COUNT];
|
||||
u8 activeAbilityPopUps; // as bits for each battler
|
||||
u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler
|
||||
bool8 throwingPokeBall;
|
||||
struct MegaEvolutionData mega;
|
||||
const u8 *trainerSlideMsg;
|
||||
@ -611,6 +612,7 @@ struct BattleScripting
|
||||
u16 moveEffect;
|
||||
u16 multihitMoveEffect;
|
||||
u8 illusionNickHack; // To properly display nick in STRINGID_ENEMYABOUTTOSWITCHPKMN.
|
||||
bool8 fixedPopup; // force ability popup to stick until manually called back
|
||||
};
|
||||
|
||||
// rom_80A5C6C
|
||||
|
@ -68,6 +68,7 @@ s16 KeepPanInRange(s16 a, int oldPan);
|
||||
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
|
||||
void sub_80A4720(u16 a, u16 *b, u32 c, u8 d);
|
||||
void sub_80A477C(bool8);
|
||||
void LoadMoveBg(u16 bgId);
|
||||
|
||||
// battle_intro.c
|
||||
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
|
||||
|
@ -9,5 +9,6 @@ void LoadBattleTextboxAndBackground(void);
|
||||
void InitLinkBattleVsScreen(u8 taskId);
|
||||
void DrawBattleEntryBackground(void);
|
||||
bool8 LoadChosenBattleElement(u8 caseId);
|
||||
void DrawTerrainTypeBattleBackground(void);
|
||||
|
||||
#endif // GUARD_BATTLE_BG_H
|
||||
|
@ -92,5 +92,6 @@ s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
|
||||
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
|
||||
u8 GetHPBarLevel(s16 hp, s16 maxhp);
|
||||
void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle);
|
||||
void DestroyAbilityPopUp(u8 battlerId);
|
||||
|
||||
#endif // GUARD_BATTLE_INTERFACE_H
|
||||
|
@ -234,6 +234,8 @@
|
||||
#define STATUS_FIELD_ION_DELUGE 0x400
|
||||
#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)
|
||||
|
||||
// Flags describing move's result
|
||||
#define MOVE_RESULT_MISSED (1 << 0)
|
||||
#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
|
||||
|
@ -525,6 +525,7 @@
|
||||
#define B_ANIM_ILLUSION_OFF 0x1C
|
||||
#define B_ANIM_FORM_CHANGE 0x1D
|
||||
#define B_ANIM_SLIDE_OFFSCREEN 0x1E // for Emergency Exit
|
||||
#define B_ANIM_RESTORE_BG 0x1F // for Terrain Endings
|
||||
|
||||
// special animations table
|
||||
#define B_ANIM_LVL_UP 0x0
|
||||
@ -558,6 +559,7 @@
|
||||
#define TRAP_ANIM_WHIRLPOOL 2
|
||||
#define TRAP_ANIM_CLAMP 3
|
||||
#define TRAP_ANIM_SAND_TOMB 4
|
||||
#define TRAP_ANIM_INFESTATION 5
|
||||
|
||||
// Weather defines for battle animation scripts.
|
||||
#define ANIM_WEATHER_NONE 0
|
||||
|
@ -109,11 +109,14 @@
|
||||
#define B_DISABLE_TURNS GEN_6 // Disable's turns. See Cmd_disablelastusedattack.
|
||||
#define B_INCINERATE_GEMS GEN_6 // In Gen6+, Incinerate can destroy Gems.
|
||||
#define B_MINIMIZE_DMG_ACC GEN_6 // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.
|
||||
#define B_PP_REDUCED_BY_SPITE GEN_6 // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
|
||||
#define B_CAN_SPITE_FAIL GEN_6 // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP.
|
||||
#define B_CRASH_IF_TARGET_IMMUNE GEN_6 // In Gen4+, The user of Jump Kick or Hi Jump Kick will "keep going and crash" if it attacks a target that is immune to the move.
|
||||
|
||||
// Ability settings
|
||||
#define B_ABILITY_WEATHER GEN_6 // In Gen5+, weather caused by abilities lasts the same amount of turns as induced from a move. Before, they lasted till the battle's end or weather change by a move.
|
||||
#define B_ABILITY_WEATHER GEN_6 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move.
|
||||
#define B_GALE_WINGS GEN_6 // In Gen7+ requires full HP to trigger.
|
||||
#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Aegislash's form change does not happen, if the Pokémon cannot use a move, because of confusion, paralysis, etc. In gen6, the form change occurs despite not being able to move.
|
||||
#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
|
||||
#define B_GHOSTS_ESCAPE GEN_6 // In Gen6+, ghosts can escape even when blocked by abilities such as Shadow Tag.
|
||||
#define B_MOODY_ACC_EVASION GEN_6 // In Gen8+, Moody CANNOT raise Accuray and Evasion any more.
|
||||
#define B_FLASH_FIRE_FROZEN GEN_6 // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before.
|
||||
@ -124,8 +127,9 @@
|
||||
#define B_HP_BERRIES GEN_6 // In Gen4+, berries which restore hp activate immediately after hp drops to half. In gen3, the effect occurs at the end of the turn.
|
||||
#define B_BERRIES_INSTANT GEN_6 // In Gen4+, most berries activate on battle start/switch-in if applicable. In gen3, they only activate either at the move end or turn end.
|
||||
|
||||
// Flag settings.
|
||||
// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag for toggling the feature.
|
||||
// Flag settings
|
||||
// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to.
|
||||
// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature.
|
||||
#define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water.
|
||||
#define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles.
|
||||
|
||||
@ -164,5 +168,6 @@
|
||||
#define B_NEW_SURF_PARTICLE_PALETTE TRUE // If set to TRUE, it updates Surf's wave palette.
|
||||
|
||||
#define HIDE_HEALTHBOXES_DURING_ANIMS TRUE //if TRUE, hides healthboxes during move animations
|
||||
#define B_TERRAIN_BG_CHANGE TRUE // If TRUE, terrain moves permanently change the default battle background until the effect fades.
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_CONFIG_H
|
||||
|
@ -35,6 +35,7 @@
|
||||
#define sMOVE_EFFECT gBattleScripting + 0x2E
|
||||
#define sMULTIHIT_EFFECT gBattleScripting + 0x30
|
||||
#define sILLUSION_NICK_HACK gBattleScripting + 0x32
|
||||
#define sFIXED_ABILITY_POPUP gBattleScripting + 0x33
|
||||
|
||||
#define cMULTISTRING_CHOOSER gBattleCommunication + 5
|
||||
|
||||
@ -165,6 +166,7 @@
|
||||
#define VARIOUS_SET_LAST_USED_ITEM 99
|
||||
#define VARIOUS_PARALYZE_TYPE_IMMUNITY 100
|
||||
#define VARIOUS_JUMP_IF_ABSENT 101
|
||||
#define VARIOUS_DESTROY_ABILITY_POPUP 102
|
||||
|
||||
// Cmd_manipulatedamage
|
||||
#define DMG_CHANGE_SIGN 0
|
||||
@ -175,6 +177,7 @@
|
||||
#define DMG_CURR_ATTACKER_HP 5
|
||||
#define DMG_BIG_ROOT 6
|
||||
#define DMG_1_2_ATTACKER_HP 7
|
||||
#define DMG_RECOIL_FROM_IMMUNE 8 // Used to calculate recoil for the Gen 4 version of Jump Kick
|
||||
|
||||
// Cmd_jumpifcantswitch
|
||||
#define SWITCH_IGNORE_ESCAPE_PREVENTION 0x80
|
||||
|
@ -772,8 +772,17 @@
|
||||
#define MOVE_JUNGLE_HEALING 744
|
||||
#define MOVE_WICKED_BLOW 745
|
||||
#define MOVE_SURGING_STRIKES 746
|
||||
// Crown Tundra Moves
|
||||
#define MOVE_THUNDER_CAGE 747
|
||||
#define MOVE_DRAGON_ENERGY 748
|
||||
#define MOVE_FREEZING_GLARE 749
|
||||
#define MOVE_FIERY_WRATH 750
|
||||
#define MOVE_THUNDEROUS_KICK 751
|
||||
#define MOVE_GLACIAL_LANCE 752
|
||||
#define MOVE_ASTRAL_BARRAGE 753
|
||||
#define MOVE_EERIE_SPELL 754
|
||||
|
||||
#define MOVES_COUNT_GEN8 747
|
||||
#define MOVES_COUNT_GEN8 755
|
||||
|
||||
#define MOVES_COUNT MOVES_COUNT_GEN8
|
||||
|
||||
|
@ -88,7 +88,6 @@ static void Task_PanFromInitialToTarget(u8 taskId);
|
||||
static void Task_LoopAndPlaySE(u8 taskId);
|
||||
static void Task_WaitAndPlaySE(u8 taskId);
|
||||
static void LoadDefaultBg(void);
|
||||
static void LoadMoveBg(u16 bgId);
|
||||
|
||||
// ewram
|
||||
EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL;
|
||||
@ -3177,7 +3176,7 @@ static void Task_FadeToBg(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadMoveBg(u16 bgId)
|
||||
void LoadMoveBg(u16 bgId)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
@ -3205,6 +3204,10 @@ static void LoadDefaultBg(void)
|
||||
{
|
||||
if (IsContest())
|
||||
LoadContestBgAfterMoveAnim();
|
||||
#if B_TERRAIN_BG_CHANGE == TRUE
|
||||
else if (gFieldStatuses & STATUS_TERRAIN_ANY)
|
||||
DrawTerrainTypeBattleBackground();
|
||||
#endif
|
||||
else
|
||||
DrawMainBattleBackground();
|
||||
}
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "battle_scripts.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/hold_effects.h"
|
||||
|
||||
//// function declarations
|
||||
static void SpriteCB_SpriteToCentreOfSide(struct Sprite* sprite);
|
||||
@ -66,6 +67,18 @@ static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] =
|
||||
};
|
||||
|
||||
//// GEN 4
|
||||
// shadow sneak
|
||||
const struct SpriteTemplate gShadowSneakImpactSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_IMPACT,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gAffineAnims_IceCrystalHit,
|
||||
.callback = AnimIceEffectParticle
|
||||
};
|
||||
|
||||
// power trick
|
||||
const struct SpriteTemplate gPowerTrickSpriteTemplate =
|
||||
{
|
||||
@ -5001,8 +5014,9 @@ void AnimTask_PurpleFlamesOnTarget(u8 taskId)
|
||||
|
||||
void AnimTask_TechnoBlast(u8 taskId)
|
||||
{
|
||||
//gBattleAnimArgs[0] = gItems[GetBattlerPartyData(gBattleAnimAttacker).item].holdEffectParam;
|
||||
gBattleAnimArgs[0] = ItemId_GetHoldEffectParam(gBattleMons[gBattleAnimAttacker].item);
|
||||
if (ItemId_GetHoldEffect(gBattleMons[gBattleAnimAttacker].item) == HOLD_EFFECT_DRIVE)
|
||||
gBattleAnimArgs[0] = ItemId_GetSecondaryId(gBattleMons[gBattleAnimAttacker].item);
|
||||
else
|
||||
gBattleAnimArgs[0] = 0;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
|
@ -2494,6 +2494,8 @@ void AnimTask_GetTrappedMoveAnimId(u8 taskId)
|
||||
gBattleAnimArgs[0] = TRAP_ANIM_CLAMP;
|
||||
else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SAND_TOMB)
|
||||
gBattleAnimArgs[0] = TRAP_ANIM_SAND_TOMB;
|
||||
else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_INFESTATION)
|
||||
gBattleAnimArgs[0] = TRAP_ANIM_INFESTATION;
|
||||
else
|
||||
gBattleAnimArgs[0] = TRAP_ANIM_BIND;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_bg.h"
|
||||
#include "battle_main.h"
|
||||
#include "battle_message.h"
|
||||
@ -23,6 +24,7 @@
|
||||
#include "constants/map_types.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/battle_anim.h"
|
||||
|
||||
struct BattleBackground
|
||||
{
|
||||
@ -863,7 +865,11 @@ void LoadBattleTextboxAndBackground(void)
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
|
||||
LoadBattleMenuWindowGfx();
|
||||
DrawMainBattleBackground();
|
||||
#if B_TERRAIN_BG_CHANGE == TRUE
|
||||
DrawTerrainTypeBattleBackground();
|
||||
#else
|
||||
DrawMainBattleBackground();
|
||||
#endif
|
||||
}
|
||||
|
||||
static void DrawLinkBattleParticipantPokeballs(u8 taskId, u8 multiplayerId, u8 bgId, u8 destX, u8 destY)
|
||||
@ -1413,3 +1419,26 @@ bool8 LoadChosenBattleElement(u8 caseId)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DrawTerrainTypeBattleBackground(void)
|
||||
{
|
||||
switch (gFieldStatuses & STATUS_TERRAIN_ANY)
|
||||
{
|
||||
case STATUS_FIELD_GRASSY_TERRAIN:
|
||||
LoadMoveBg(BG_GRASSY_TERRAIN);
|
||||
break;
|
||||
case STATUS_FIELD_MISTY_TERRAIN:
|
||||
LoadMoveBg(BG_MISTY_TERRAIN);
|
||||
break;
|
||||
case STATUS_FIELD_ELECTRIC_TERRAIN:
|
||||
LoadMoveBg(BG_ELECTRIC_TERRAIN);
|
||||
break;
|
||||
case STATUS_FIELD_PSYCHIC_TERRAIN:
|
||||
LoadMoveBg(BG_PSYCHIC_TERRAIN);
|
||||
break;
|
||||
default:
|
||||
DrawMainBattleBackground();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1526,7 +1526,10 @@ static void PlayerPartnerHandleChooseMove(void)
|
||||
gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
}
|
||||
|
||||
BtlController_EmitTwoReturnValues(1, 10, chosenMoveId | (gBattlerTarget << 8));
|
||||
if (CanMegaEvolve(gActiveBattler)) // If partner can mega evolve, do it.
|
||||
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8));
|
||||
else
|
||||
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gBattlerTarget << 8));
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
@ -3062,6 +3062,9 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle)
|
||||
gSprites[spriteId1].tRightToLeft = FALSE;
|
||||
gSprites[spriteId2].tRightToLeft = FALSE;
|
||||
}
|
||||
|
||||
gBattleStruct->abilityPopUpSpriteIds[gBattleAnimAttacker][0] = spriteId1;
|
||||
gBattleStruct->abilityPopUpSpriteIds[gBattleAnimAttacker][1] = spriteId2;
|
||||
|
||||
taskId = CreateTask(Task_FreeAbilityPopUpGfx, 5);
|
||||
gTasks[taskId].tSpriteId1 = spriteId1;
|
||||
@ -3110,11 +3113,19 @@ static void SpriteCb_AbilityPopUp(struct Sprite *sprite)
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->tFrames--;
|
||||
if (!gBattleScripting.fixedPopup)
|
||||
sprite->tFrames--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DestroyAbilityPopUp(u8 battlerId)
|
||||
{
|
||||
gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0;
|
||||
gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0;
|
||||
gBattleScripting.fixedPopup = FALSE;
|
||||
}
|
||||
|
||||
static void Task_FreeAbilityPopUpGfx(u8 taskId)
|
||||
{
|
||||
if (!gSprites[gTasks[taskId].tSpriteId1].inUse
|
||||
|
@ -3440,7 +3440,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
|
||||
srcID += 2;
|
||||
break;
|
||||
case B_BUFF_ABILITY: // ability names
|
||||
StringAppend(dst, gAbilityNames[src[srcID + 1]]);
|
||||
StringAppend(dst, gAbilityNames[T1_READ_16(&src[srcID + 1])]);
|
||||
srcID += 3;
|
||||
break;
|
||||
case B_BUFF_ITEM: // item name
|
||||
|
@ -6952,7 +6952,7 @@ static void HandleTerrainMove(u32 moveEffect)
|
||||
}
|
||||
else
|
||||
{
|
||||
gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN);
|
||||
gFieldStatuses &= ~STATUS_TERRAIN_ANY;
|
||||
gFieldStatuses |= statusFlag;
|
||||
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER)
|
||||
*timer = 8;
|
||||
@ -8300,6 +8300,9 @@ static void Cmd_various(void)
|
||||
gBattlescriptCurrInstr += 7;
|
||||
}
|
||||
return;
|
||||
case VARIOUS_DESTROY_ABILITY_POPUP:
|
||||
DestroyAbilityPopUp(gActiveBattler);
|
||||
break;
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr += 3;
|
||||
@ -8583,7 +8586,9 @@ static void Cmd_manipulatedamage(void)
|
||||
gBattleMoveDamage /= 2;
|
||||
if (gBattleMoveDamage == 0)
|
||||
gBattleMoveDamage = 1;
|
||||
if (B_RECOIL_IF_MISS_DMG >= GEN_5 || ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage))
|
||||
if (B_RECOIL_IF_MISS_DMG >= GEN_5)
|
||||
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
|
||||
if ((B_RECOIL_IF_MISS_DMG <= GEN_4) && ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage))
|
||||
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
|
||||
break;
|
||||
case DMG_DOUBLED:
|
||||
@ -8606,6 +8611,9 @@ static void Cmd_manipulatedamage(void)
|
||||
case DMG_1_2_ATTACKER_HP:
|
||||
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
|
||||
break;
|
||||
case DMG_RECOIL_FROM_IMMUNE:
|
||||
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr += 2;
|
||||
@ -10192,9 +10200,18 @@ static void Cmd_tryspiteppreduce(void)
|
||||
break;
|
||||
}
|
||||
|
||||
#if B_CAN_SPITE_FAIL <= GEN_3
|
||||
if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > 1)
|
||||
#else
|
||||
if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0)
|
||||
#endif
|
||||
{
|
||||
#if B_PP_REDUCED_BY_SPITE <= GEN_3
|
||||
s32 ppToDeduct = (Random() & 3) + 2;
|
||||
#else
|
||||
s32 ppToDeduct = 4;
|
||||
#endif
|
||||
|
||||
if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct)
|
||||
ppToDeduct = gBattleMons[gBattlerTarget].pp[i];
|
||||
|
||||
|
@ -7059,7 +7059,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
||||
}
|
||||
break;
|
||||
case ABILITY_FLOWER_GIFT:
|
||||
if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM && WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY)
|
||||
if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM && WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_SUN_ANY) && IS_MOVE_PHYSICAL(move))
|
||||
MulModifier(&modifier, UQ_4_12(1.5));
|
||||
break;
|
||||
case ABILITY_HUSTLE:
|
||||
@ -7099,7 +7099,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
||||
switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk)))
|
||||
{
|
||||
case ABILITY_FLOWER_GIFT:
|
||||
if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM)
|
||||
if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM && IS_MOVE_PHYSICAL(move))
|
||||
MulModifier(&modifier, UQ_4_12(1.5));
|
||||
break;
|
||||
case ABILITY_POWER_SPOT:
|
||||
|
@ -45,7 +45,8 @@ void FreeBattleResources(void)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
|
||||
FreeTrainerHillBattleStruct();
|
||||
|
||||
|
||||
gFieldStatuses = 0;
|
||||
if (gBattleResources != NULL)
|
||||
{
|
||||
FREE_AND_SET_NULL(gBattleStruct);
|
||||
|
@ -7986,7 +7986,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_FINAL_GAMBIT] =
|
||||
{
|
||||
.effect = EFFECT_HIT_SWITCH_TARGET,
|
||||
.effect = EFFECT_FINAL_GAMBIT,
|
||||
.power = 1,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 100,
|
||||
@ -7994,7 +7994,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -11386,4 +11386,116 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_THUNDER_CAGE] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.power = 80,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 90,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_DRAGON_ENERGY] =
|
||||
{
|
||||
.effect = EFFECT_ERUPTION,
|
||||
.power = 150,
|
||||
.type = TYPE_DRAGON,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_FREEZING_GLARE] =
|
||||
{
|
||||
.power = 90,
|
||||
.effect = EFFECT_FREEZE_HIT,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_FIERY_WRATH] =
|
||||
{
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_THUNDEROUS_KICK] =
|
||||
{
|
||||
.effect = EFFECT_DEFENSE_DOWN_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_GLACIAL_LANCE] =
|
||||
{
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 130,
|
||||
.type = TYPE_ICE,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_ASTRAL_BARRAGE] =
|
||||
{
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_EERIE_SPELL] =
|
||||
{
|
||||
.effect = EFFECT_HIT, // To do. It's a copy of Spite that inflicts damage and reduced the target's last move's PP by 3 instead of 4.
|
||||
.power = 80,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_SOUND,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
};
|
||||
|
@ -2910,6 +2910,38 @@ static const u8 sSURGING_STRIKESDescription[] = _(
|
||||
"Mastering the Water style,\n"
|
||||
"strikes with 3 critical hits.");
|
||||
|
||||
static const u8 sTHUNDER_CAGEDescription[] = _(
|
||||
"Traps the foe in a cage of\n"
|
||||
"electricity for 2 to 5 turns.");
|
||||
|
||||
static const u8 sDRAGON_ENERGYDescription[] = _(
|
||||
"The higher the user's HP\n"
|
||||
"the more damage caused.");
|
||||
|
||||
static const u8 sFREEZING_GLAREDescription[] = _(
|
||||
"Shoots psychic power from\n"
|
||||
"the eyes. May freeze the foe.");
|
||||
|
||||
static const u8 sFIERY_WRATHDescription[] = _(
|
||||
"An attack fueled by your\n"
|
||||
"wrath. May cause flinching.");
|
||||
|
||||
static const u8 sTHUNDEROUS_KICKDescription[] = _(
|
||||
"Uses a lightning-like kick\n"
|
||||
"to hit. Lowers foe's Defense.");
|
||||
|
||||
static const u8 sGLACIAL_LANCEDescription[] = _(
|
||||
"Strikes by hurling a blizzard-\n"
|
||||
"cloaked icicle lance at a foe.");
|
||||
|
||||
static const u8 sASTRAL_BARRAGEDescription[] = _(
|
||||
"Strikes by sending a frightful\n"
|
||||
"amount of ghosts at a foe.");
|
||||
|
||||
static const u8 sEERIE_SPELLDescription[] = _(
|
||||
"Attacks with psychic power.\n"
|
||||
"Foe's last move has 3 PP cut.");
|
||||
|
||||
static const u8 sNotDoneYetDescription[] = _(
|
||||
"Not done yet.");
|
||||
|
||||
@ -3664,5 +3696,12 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] =
|
||||
[MOVE_JUNGLE_HEALING - 1] = sJUNGLE_HEALINGDescription,
|
||||
[MOVE_WICKED_BLOW - 1] = sWICKED_BLOWDescription,
|
||||
[MOVE_SURGING_STRIKES - 1] = sSURGING_STRIKESDescription,
|
||||
|
||||
[MOVE_THUNDER_CAGE - 1] = sTHUNDER_CAGEDescription,
|
||||
[MOVE_DRAGON_ENERGY - 1] = sDRAGON_ENERGYDescription,
|
||||
[MOVE_FREEZING_GLARE - 1] = sFREEZING_GLAREDescription,
|
||||
[MOVE_FIERY_WRATH - 1] = sFIERY_WRATHDescription,
|
||||
[MOVE_THUNDEROUS_KICK - 1] = sTHUNDEROUS_KICKDescription,
|
||||
[MOVE_GLACIAL_LANCE - 1] = sGLACIAL_LANCEDescription,
|
||||
[MOVE_ASTRAL_BARRAGE - 1] = sASTRAL_BARRAGEDescription,
|
||||
[MOVE_EERIE_SPELL - 1] = sEERIE_SPELLDescription,
|
||||
};
|
||||
|
@ -748,4 +748,12 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] =
|
||||
[MOVE_JUNGLE_HEALING] = _("Jungle Heal"),
|
||||
[MOVE_WICKED_BLOW] = _("Wicked Blow"),
|
||||
[MOVE_SURGING_STRIKES] = _("SurgeStrikes"),
|
||||
[MOVE_THUNDER_CAGE] = _("Thunder Cage"),
|
||||
[MOVE_DRAGON_ENERGY] = _("DragonEnergy"),
|
||||
[MOVE_FREEZING_GLARE] = _("FreezngGlare"),
|
||||
[MOVE_FIERY_WRATH] = _("Fiery Wrath"),
|
||||
[MOVE_THUNDEROUS_KICK] = _("ThnderusKick"),
|
||||
[MOVE_GLACIAL_LANCE] = _("GlacialLance"),
|
||||
[MOVE_ASTRAL_BARRAGE] = _("AstrlBarrage"),
|
||||
[MOVE_EERIE_SPELL] = _("Eerie Spell"),
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user