Sync battle anim - normal

This commit is contained in:
GriffinR
2022-08-17 13:30:22 -04:00
parent efa422d6fa
commit a1fcfa2f26
4 changed files with 314 additions and 233 deletions
+43 -43
View File
@@ -1299,7 +1299,7 @@ Move_REVERSAL::
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB_WHITE, 8, 0, 0
waitforvisualfinish
delay 30
createvisualtask AnimTask_CurseBlendEffect, 2, 31, 3, 2, 0, 10, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 31, 3, 2, 0, 10, RGB_WHITE
delay 10
playsewithpan SE_M_REVERSAL, 192
createsprite gReversalOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0
@@ -1873,7 +1873,7 @@ Move_SAFEGUARD::
createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 2,
waitforvisualfinish
playsewithpan SE_SHINY, 192
createvisualtask AnimTask_CurseBlendEffect, 2, 10, 0, 2, 0, 10, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 10, 0, 2, 0, 10, RGB_WHITE
waitforvisualfinish
clearmonbg ANIM_ATK_PARTNER
blendoff
@@ -1965,7 +1965,7 @@ Move_PAY_DAY::
Move_OUTRAGE::
loadspritegfx ANIM_TAG_SMALL_EMBER
loopsewithpan SE_M_DRAGON_RAGE, 192, 8, 3
createvisualtask AnimTask_CurseBlendEffect, 2, 7, 2, 5, 3, 8, 430
createvisualtask AnimTask_BlendColorCycle, 2, 7, 2, 5, 3, 8, 430
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 12, 6, 5, 4
delay 0
createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3
@@ -2012,25 +2012,25 @@ Move_SPARK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_SPARK_2
delay 0
createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 5, 5, 23551
createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, 23551
playsewithpan SE_M_THUNDERBOLT2, 192
createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0
delay 0
createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0
createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1
delay 0
createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 0, 0, 23551
createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, 23551
delay 10
createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 5, 5, 23551
createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, 23551
playsewithpan SE_M_THUNDERBOLT2, 192
createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0
createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1
delay 0
createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, 0, 1, 1
delay 0
createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 0, 0, 23551
createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, 23551
delay 20
createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 7, 7, 23551
createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 7, 7, 23551
playsewithpan SE_M_THUNDERBOLT2, 192
createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0
createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0
@@ -2042,14 +2042,14 @@ Move_SPARK::
createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0
delay 4
waitforvisualfinish
createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 0, 0, 23551
createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, 23551
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4
delay 4
playsewithpan SE_M_HYPER_BEAM, 63
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 2
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1
waitforvisualfinish
createvisualtask AnimTask_CurseBlendEffect, 2, 4, -31, 2, 0, 6, 23551
createvisualtask AnimTask_BlendColorCycle, 2, 4, -31, 2, 0, 6, 23551
call ElectricityEffect
waitforvisualfinish
end
@@ -2080,7 +2080,7 @@ Move_ATTRACT::
createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 112, 256, 90
createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 200, 272, 90
delay 75
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 4, 4, 0, 10, 28479
createvisualtask AnimTask_BlendColorCycle, 2, 4, 4, 4, 0, 10, 28479
end
Move_GROWTH::
@@ -2091,7 +2091,7 @@ Move_GROWTH::
end
GrowthEffect::
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE
playsewithpan SE_M_TAKE_DOWN, 192
createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, 0, 0
return
@@ -3193,7 +3193,7 @@ Move_SPITE::
playsewithpan SE_M_PSYBEAM, 192
waitbgfadein
monbg ANIM_DEF_PARTNER
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 6, 0, 8, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 6, 0, 8, RGB_WHITE
createvisualtask AnimTask_SpiteTargetShadow, 2
loopsewithpan SE_M_PSYBEAM, 63, 20, 3
waitforvisualfinish
@@ -3280,7 +3280,7 @@ Move_ENDURE::
playsewithpan SE_M_DRAGON_RAGE, 192
call EndureEffect
delay 8
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, 31
createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, 31
createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1
call EndureEffect
delay 8
@@ -4722,7 +4722,7 @@ Move_MIND_READER::
createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5,
delay 40
playsewithpan SE_M_LEER, 63
createvisualtask AnimTask_CurseBlendEffect, 2, 1, 1, 2, 0, 10, 0
createvisualtask AnimTask_BlendColorCycle, 2, 1, 1, 2, 0, 10, 0
call MindReaderEyeSpikeEffect
waitforvisualfinish
clearmonbg 4
@@ -4805,7 +4805,7 @@ Move_CONFUSION::
call SetPsychicBackground
setalpha 8, 8
createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 10, 1
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE
waitforvisualfinish
playsewithpan SE_M_SUPERSONIC, 63
createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 15, 1
@@ -4822,7 +4822,7 @@ Move_PSYCHIC::
call SetPsychicBackground
setalpha 8, 8
createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 10, 1
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, 767
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, 767
waitforvisualfinish
loopsewithpan SE_M_SUPERSONIC, 63, 10, 3
createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 15, 1
@@ -4848,7 +4848,7 @@ FutureSight::
call SetPsychicBackground
setalpha 8, 8
playsewithpan SE_M_SUPERSONIC, 192
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE
createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, 0, 1
waitforvisualfinish
clearmonbg ANIM_ATK_PARTNER
@@ -5244,7 +5244,7 @@ Move_SMOG::
call SmogCloud
delay 120
loopsewithpan SE_M_TOXIC, 63, 18, 2
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 2, 2, 0, 12, 26650
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, 26650
delay 10
createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 15, 1
waitforvisualfinish
@@ -5552,7 +5552,7 @@ SolarBeamEnd::
SolarBeamSetUp::
monbg ANIM_ATK_PARTNER
setalpha 12, 8
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 1, 4, 0, 11, 12287
createvisualtask AnimTask_BlendColorCycle, 2, 2, 1, 4, 0, 11, 12287
playsewithpan SE_M_MEGA_KICK, 192
call SolarBeamAbsorbEffect
waitforvisualfinish
@@ -6032,7 +6032,7 @@ Move_LEECH_LIFE::
Move_SYNTHESIS::
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_SPARKLE_2
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 16, 19451
createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 16, 19451
playsewithpan SE_M_MEGA_KICK, 192
call GrantingStarsEffect
waitforvisualfinish
@@ -6072,7 +6072,7 @@ Move_SLUDGE::
createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0
waitforvisualfinish
createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 5, 1
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 1, 2, 0, 12, 31774
createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, 31774
call PoisonBubblesEffect
waitforvisualfinish
end
@@ -6090,7 +6090,7 @@ Move_SLUDGE_BOMB::
call SludgeBombProjectile
call SludgeBombProjectile
createvisualtask AnimTask_ShakeMon2, 5, 1, 3, 0, 15, 1
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 1, 2, 0, 12, 31774
createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, 31774
createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20
createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20
createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20
@@ -6135,7 +6135,7 @@ Move_ACID::
delay 15
createvisualtask AnimTask_ShakeMon2, 5, 1, 2, 0, 10, 1
createvisualtask AnimTask_ShakeMon2, 5, 3, 2, 0, 10, 1
createvisualtask AnimTask_CurseBlendEffect, 2, 20, 2, 2, 0, 12, 31774
createvisualtask AnimTask_BlendColorCycle, 2, 20, 2, 2, 0, 12, 31774
createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55
playsewithpan SE_M_BUBBLE, 63
delay 10
@@ -7053,7 +7053,7 @@ Move_MIST::
call MistCloud
call MistCloud
delay 32
createvisualtask AnimTask_CurseBlendEffect, 2, 10, 8, 2, 0, 14, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 10, 8, 2, 0, 14, RGB_WHITE
waitforvisualfinish
clearmonbg ANIM_ATK_PARTNER
blendoff
@@ -7224,7 +7224,7 @@ Move_POISON_GAS::
createsprite gPoisonGasCloudSpriteTemplate, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0
delay 40
loopsewithpan SE_M_MIST, 63, 28, 6
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 6, 2, 0, 12, 26650
createvisualtask AnimTask_BlendColorCycle, 2, 4, 6, 2, 0, 12, 26650
waitforvisualfinish
blendoff
clearmonbg ANIM_DEF_PARTNER
@@ -7259,7 +7259,7 @@ Move_PSYBEAM::
call PsybeamRings
call PsybeamRings
createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 4, 1
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 2, 2, 0, 12, 32351
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, 32351
call PsybeamRings
call PsybeamRings
call PsybeamRings
@@ -7285,7 +7285,7 @@ Move_HYPNOSIS::
call HypnosisRings
call HypnosisRings
call HypnosisRings
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 2, 2, 0, 12, 32351
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, 32351
waitforvisualfinish
delay 1
call UnsetPsychicBg
@@ -7306,7 +7306,7 @@ Move_PSYWAVE::
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TELEPORT, -64, 63, 2, 9, 0, 10
call PsywaveRings
call PsywaveRings
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 1, 4, 0, 12, 32351
createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 4, 0, 12, 32351
call PsywaveRings
call PsywaveRings
call PsywaveRings
@@ -7443,7 +7443,7 @@ Move_NIGHT_SHADE::
createvisualtask AnimTask_NightShadeClone, 5, 85
delay 70
createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 12, 1
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 0, 2, 0, 13, 0
createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 2, 0, 13, 0
waitforvisualfinish
clearmonbg ANIM_ATTACKER
delay 1
@@ -7505,7 +7505,7 @@ Move_FOCUS_ENERGY::
playsewithpan SE_M_DRAGON_RAGE, 192
call EndureEffect
delay 8
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_WHITE
createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1
call EndureEffect
delay 8
@@ -7519,7 +7519,7 @@ Move_BIDE::
BattleAnimScript_Bide_Setup::
loopsewithpan SE_M_TAKE_DOWN, 192, 9, 2
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, 31
createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, 31
createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1
waitforvisualfinish
end
@@ -7697,7 +7697,7 @@ Move_RECOVER::
monbg ANIM_ATK_PARTNER
setalpha 12, 8
loopsewithpan SE_M_MEGA_KICK, 192, 13, 3
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 6, 0, 11, 12287
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, 12287
call RecoverAbsorbEffect
call RecoverAbsorbEffect
call RecoverAbsorbEffect
@@ -7738,7 +7738,7 @@ Move_MIMIC::
setarg 7, 65535
waitforvisualfinish
playsewithpan SE_M_TAKE_DOWN, 192
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 11, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 11, RGB_WHITE
waitforvisualfinish
clearmonbg_23 3
blendoff
@@ -7807,7 +7807,7 @@ CurseStats::
CurseStats1::
playsewithpan SE_M_DRAGON_RAGE, 192
createvisualtask AnimTask_SetUpCurseBackground, 5,
createvisualtask AnimTask_CurseBlendEffect, 5, 2, 4, 2, 0, 10, 31
createvisualtask AnimTask_BlendColorCycle, 5, 2, 4, 2, 0, 10, 31
return
Move_SOFT_BOILED::
@@ -8055,7 +8055,7 @@ PresentHeal::
Move_BATON_PASS::
loadspritegfx ANIM_TAG_POKEBALL
playsewithpan SE_M_BATON_PASS, 192
createvisualtask AnimTask_CurseBlendEffect, 2, 31, 1, 2, 0, 11, 31455
createvisualtask AnimTask_BlendColorCycle, 2, 31, 1, 2, 0, 11, 31455
createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2,
end
@@ -8303,7 +8303,7 @@ Move_WISH::
Move_STOCKPILE::
loadspritegfx ANIM_TAG_GRAY_ORB
playsewithpan SE_M_MEGA_KICK, 192
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 8, 1, 0, 12, RGB_WHITE
createvisualtask AnimTask_BlendColorCycle, 2, 2, 8, 1, 0, 12, RGB_WHITE
createvisualtask AnimTask_StockpileDeformMon, 5,
call StockpileAbsorb
call StockpileAbsorb
@@ -8469,7 +8469,7 @@ Move_SWEET_SCENT::
call SweetScentEffect
createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 55, 0
setpan 63
createvisualtask AnimTask_CurseBlendEffect, 2, 20, 1, 5, 5, 13, 22207
createvisualtask AnimTask_BlendColorCycle, 2, 20, 1, 5, 5, 13, 22207
call SweetScentEffect
waitforvisualfinish
end
@@ -8898,7 +8898,7 @@ Move_REVENGE::
playsewithpan SE_M_TAKE_DOWN, 192
createsprite gRevengeSmallScratchSpriteTemplate, ANIM_ATTACKER, 2, 10, -10
waitforvisualfinish
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 4, 2, 8, 31
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 4, 2, 8, 31
waitforvisualfinish
unloadspritegfx ANIM_TAG_PURPLE_SCRATCH
loadspritegfx ANIM_TAG_PURPLE_SWIPE
@@ -8928,7 +8928,7 @@ Move_POISON_FANG::
delay 10
createvisualtask AnimTask_ShakeMon, 3, 1, 3, 0, 10, 1
waitforvisualfinish
createvisualtask AnimTask_CurseBlendEffect, 2, 4, 0, 4, 0, 12, 26650
createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 4, 0, 12, 26650
call PoisonBubblesEffect
waitforvisualfinish
end
@@ -9703,7 +9703,7 @@ Move_PSYCHO_BOOST::
createvisualtask AnimTask_FadeScreenToWhite, 5,
waitbgfadein
delay 6
createvisualtask AnimTask_CurseBlendEffect, 2, 1, 2, 8, 0, 10, 0
createvisualtask AnimTask_BlendColorCycle, 2, 1, 2, 8, 0, 10, 0
delay 0
monbgprio_28 0
setalpha 8, 8
@@ -10438,7 +10438,7 @@ UnsetSolarBeamBg::
Status_Poison::
loopsewithpan SE_M_TOXIC, 63, 13, 6
createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 18, 2
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 12, 31774
createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 12, 31774
end
Status_Confusion::
@@ -10858,7 +10858,7 @@ General_FocusPunchSetUp::
playsewithpan SE_M_DRAGON_RAGE, 192
call EndureEffect
delay 8
createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, 31
createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, 31
createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1
call EndureEffect
delay 8
+1 -1
View File
@@ -478,7 +478,7 @@ void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId);
extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate;
extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate;
extern const struct SpriteTemplate gWaterHitSplatSpriteTemplate;
u32 UnpackSelectedBattleAnimPalettes(s16 selector);
u32 UnpackSelectedBattlePalettes(s16 selector);
void AnimTask_CurseBlendEffect(u8 taskId);
void AnimTask_BlendColorCycleExclude(u8 taskId);
void AnimTask_BlendColorCycleByTag(u8 taskId);
+267 -186
View File
@@ -8,7 +8,7 @@
static void AnimConfusionDuck(struct Sprite *sprite);
static void AnimSimplePaletteBlend(struct Sprite *sprite);
static void AnimComplexPaletteBlend(struct Sprite *sprite);
static void sub_80B9B8C(struct Sprite *sprite);
static void AnimCirclingSparkle(struct Sprite *sprite);
static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite);
static void AnimHitSplatBasic(struct Sprite *sprite);
static void AnimHitSplatHandleInvert(struct Sprite *sprite);
@@ -17,22 +17,22 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite);
static void AnimCrossImpact(struct Sprite *sprite);
static void AnimFlashingHitSplat(struct Sprite *sprite);
static void AnimHitSplatPersistent(struct Sprite *sprite);
static void AnimConfusionDuckStep(struct Sprite *sprite);
static void AnimSimplePaletteBlendStep(struct Sprite *sprite);
static void sub_80B9AD0(struct Sprite *sprite);
static void sub_80B9B5C(struct Sprite *sprite);
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9C7C(u8 taskId);
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9DF0(u8 taskId);
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9F04(u8 taskId);
static void sub_80B9FD8(u8 taskId);
static void sub_80BA090(u8 taskId);
static void sub_80BA3CC(void);
static void sub_80BA320(struct Sprite *sprite);
static void sub_80BA4D0(u8 taskId);
static void sub_80BA7BC(struct Sprite *sprite);
static void AnimConfusionDuck_Step(struct Sprite *sprite);
static void AnimSimplePaletteBlend_Step(struct Sprite *sprite);
static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite);
static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite);
static void BlendColorCycle(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void AnimTask_BlendColorCycleLoop(u8 taskId);
static void BlendColorCycleExclude(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId);
static void BlendColorCycleByTag(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void AnimTask_BlendColorCycleByTagLoop(u8 taskId);
static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId);
static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId);
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void);
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite);
static void AnimTask_ShakeBattleTerrain_Step(u8 taskId);
static void AnimFlashingHitSplat_Step(struct Sprite *sprite);
static const union AnimCmd sAnim_ConfusionDuck_0[] =
@@ -92,7 +92,7 @@ const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate =
.callback = AnimComplexPaletteBlend,
};
static const union AnimCmd gUnknown_83E7B54[] =
static const union AnimCmd sAnim_CirclingSparkle[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
@@ -102,20 +102,21 @@ static const union AnimCmd gUnknown_83E7B54[] =
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7B6C[] =
static const union AnimCmd *const sAnims_CirclingSparkle[] =
{
gUnknown_83E7B54,
sAnim_CirclingSparkle,
};
const struct SpriteTemplate gUnknown_83E7B70 =
// Unused
static const struct SpriteTemplate sCirclingSparkleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_83E7B6C,
.anims = sAnims_CirclingSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B9B8C,
.callback = AnimCirclingSparkle,
};
const struct SpriteTemplate gShakeMonOrTerrainSpriteTemplate =
@@ -275,11 +276,11 @@ static void AnimConfusionDuck(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
}
sprite->data[3] = gBattleAnimArgs[4];
sprite->callback = AnimConfusionDuckStep;
sprite->callback = AnimConfusionDuck_Step;
sprite->callback(sprite);
}
static void AnimConfusionDuckStep(struct Sprite *sprite)
static void AnimConfusionDuck_Step(struct Sprite *sprite)
{
sprite->x2 = Cos(sprite->data[0], 30);
sprite->y2 = Sin(sprite->data[0], 10);
@@ -300,36 +301,36 @@ static void AnimConfusionDuckStep(struct Sprite *sprite)
// arg 4: blend color
static void AnimSimplePaletteBlend(struct Sprite *sprite)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]);
sprite->invisible = TRUE;
sprite->callback = AnimSimplePaletteBlendStep;
sprite->callback = AnimSimplePaletteBlend_Step;
}
// Unpacks a bitfield and returns a bitmask of its selected palettes.
// Bits 0-6 of the selector parameter result in the following palettes being selected:
// 0: battle background palettes (BG palettes 1, 2, and 3)
// 1: gBattleAnimAttacker OBJ palette
// 2: gBattleAnimTarget OBJ palette
// 3: gBattleAnimAttacker partner OBJ palette
// 4: gBattleAnimTarget partner OBJ palette
// 5: BG palette 4
// 6: BG palette 5
u32 UnpackSelectedBattleAnimPalettes(s16 selector)
// 0: F_PAL_BG, battle background palettes (BG palettes 1, 2, and 3)
// 1: F_PAL_ATTACKER, gBattleAnimAttacker OBJ palette
// 2: F_PAL_TARGET, gBattleAnimTarget OBJ palette
// 3: F_PAL_ATK_PARTNER, gBattleAnimAttacker partner OBJ palette
// 4: F_PAL_DEF_PARTNER, gBattleAnimTarget partner OBJ palette
// 5: F_PAL_ANIM_1, BG palette 8
// 6: F_PAL_ANIM_2, BG palette 9
u32 UnpackSelectedBattlePalettes(s16 selector)
{
u8 battleBackground = selector & 1;
u8 attacker = (selector >> 1) & 1;
u8 target = (selector >> 2) & 1;
u8 attackerPartner = (selector >> 3) & 1;
u8 targetPartner = (selector >> 4) & 1;
u8 arg5 = (selector >> 5) & 1;
u8 arg6 = (selector >> 6) & 1;
u8 anim1 = (selector >> 5) & 1;
u8 anim2 = (selector >> 6) & 1;
return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6);
return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2);
}
static void AnimSimplePaletteBlendStep(struct Sprite *sprite)
static void AnimSimplePaletteBlend_Step(struct Sprite *sprite)
{
if (!gPaletteFade.active)
DestroyAnimSprite(sprite);
@@ -347,13 +348,13 @@ static void AnimComplexPaletteBlend(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[5];
sprite->data[6] = gBattleAnimArgs[6];
sprite->data[7] = gBattleAnimArgs[0];
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]);
sprite->invisible = TRUE;
sprite->callback = sub_80B9AD0;
sprite->callback = AnimComplexPaletteBlend_Step1;
}
static void sub_80B9AD0(struct Sprite *sprite)
static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite)
{
u32 selectedPalettes;
@@ -366,10 +367,10 @@ static void sub_80B9AD0(struct Sprite *sprite)
return;
if (sprite->data[2] == 0)
{
sprite->callback = sub_80B9B5C;
sprite->callback = AnimComplexPaletteBlend_Step2;
return;
}
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
if (sprite->data[1] & 0x100)
BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]);
else
@@ -379,19 +380,19 @@ static void sub_80B9AD0(struct Sprite *sprite)
--sprite->data[2];
}
static void sub_80B9B5C(struct Sprite *sprite)
static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite)
{
u32 selectedPalettes;
if (!gPaletteFade.active)
{
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
BlendPalettes(selectedPalettes, 0, 0);
DestroyAnimSprite(sprite);
}
}
static void sub_80B9B8C(struct Sprite *sprite)
static void AnimCirclingSparkle(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
@@ -406,53 +407,71 @@ static void sub_80B9B8C(struct Sprite *sprite)
sprite->callback(sprite);
}
void AnimTask_CurseBlendEffect(u8 taskId)
// Task data for AnimTask_BlendColorCycle, AnimTask_BlendColorCycleExclude, and AnimTask_BlendColorCycleByTag
#define tPalSelector data[0] // AnimTask_BlendColorCycle
#define tPalTag data[0] // AnimTask_BlendColorCycleByTag
#define tDelay data[1]
#define tNumBlends data[2]
#define tInitialBlendY data[3]
#define tTargetBlendY data[4]
#define tBlendColor data[5]
#define tRestoreBlend data[8]
#define tPalSelectorHi data[9]
#define tPalSelectorLo data[10]
// Blends mon/screen to designated color or back alternately tNumBlends times
// Many uses of this task only set a tNumBlends of 2, which has the effect of blending to a color and back once
void AnimTask_BlendColorCycle(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
sub_80B9C2C(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9C7C;
gTasks[taskId].tPalSelector = gBattleAnimArgs[0];
gTasks[taskId].tDelay = gBattleAnimArgs[1];
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
gTasks[taskId].tRestoreBlend = FALSE;
BlendColorCycle(taskId, 0, gTasks[taskId].tTargetBlendY);
gTasks[taskId].func = AnimTask_BlendColorCycleLoop;
}
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
static void BlendColorCycle(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gTasks[taskId].data[0]);
BeginNormalPaletteFade(selectedPalettes,
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
u32 selectedPalettes = UnpackSelectedBattlePalettes(gTasks[taskId].tPalSelector);
BeginNormalPaletteFade(
selectedPalettes,
gTasks[taskId].tDelay,
startBlendAmount,
targetBlendAmount,
gTasks[taskId].tBlendColor);
gTasks[taskId].tNumBlends--;
gTasks[taskId].tRestoreBlend ^= 1;
}
static void sub_80B9C7C(u8 taskId)
static void AnimTask_BlendColorCycleLoop(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
u8 startBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
if (gTasks[taskId].tNumBlends > 0)
{
if (gTasks[taskId].data[8] == 0)
if (!gTasks[taskId].tRestoreBlend)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
// Blend to designated color
startBlendAmount = gTasks[taskId].tInitialBlendY;
targetBlendAmount = gTasks[taskId].tTargetBlendY;
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
// Blend back to original color
startBlendAmount = gTasks[taskId].tTargetBlendY;
targetBlendAmount = gTasks[taskId].tInitialBlendY;
}
if (gTasks[taskId].data[2] == 1)
if (gTasks[taskId].tNumBlends == 1)
targetBlendAmount = 0;
sub_80B9C2C(taskId, initialBlendAmount, targetBlendAmount);
BlendColorCycle(taskId, startBlendAmount, targetBlendAmount);
}
else
{
@@ -461,64 +480,73 @@ static void sub_80B9C7C(u8 taskId)
}
}
// See AnimTask_BlendColorCycle. Same, but excludes Attacker and Target
void AnimTask_BlendColorCycleExclude(u8 taskId)
{
s32 battler;
int battler;
u32 selectedPalettes = 0;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
for (battler = 0; battler < gBattlersCount; ++battler)
gTasks[taskId].tDelay = gBattleAnimArgs[1];
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
gTasks[taskId].tRestoreBlend = 0;
for (battler = 0; battler < gBattlersCount; battler++)
{
if (battler != gBattleAnimAttacker && battler != gBattleAnimTarget)
selectedPalettes |= 1 << (battler + 16);
}
if (gBattleAnimArgs[0] == 1)
selectedPalettes |= 0xE;
gTasks[taskId].data[9] = selectedPalettes >> 16;
gTasks[taskId].data[10] = selectedPalettes & 0xFF;
sub_80B9DA0(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9DF0;
gTasks[taskId].tPalSelectorHi = selectedPalettes >> 16;
gTasks[taskId].tPalSelectorLo = selectedPalettes & 0xFF;
BlendColorCycleExclude(taskId, 0, gTasks[taskId].tTargetBlendY);
gTasks[taskId].func = AnimTask_BlendColorCycleExcludeLoop;
}
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
static void BlendColorCycleExclude(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
{
u32 selectedPalettes = ((u16)gTasks[taskId].data[9] << 16) | (u16)gTasks[taskId].data[10];
BeginNormalPaletteFade(selectedPalettes,
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
u32 selectedPalettes = ((u16)gTasks[taskId].tPalSelectorHi << 16) | (u16)gTasks[taskId].tPalSelectorLo;
BeginNormalPaletteFade(
selectedPalettes,
gTasks[taskId].tDelay,
startBlendAmount,
targetBlendAmount,
gTasks[taskId].tBlendColor);
gTasks[taskId].tNumBlends--;
gTasks[taskId].tRestoreBlend ^= 1;
}
static void sub_80B9DF0(u8 taskId)
static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
u8 startBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
if (gTasks[taskId].tNumBlends > 0)
{
if (gTasks[taskId].data[8] == 0)
if (!gTasks[taskId].tRestoreBlend)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
// Blend to designated color
startBlendAmount = gTasks[taskId].tInitialBlendY;
targetBlendAmount = gTasks[taskId].tTargetBlendY;
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
// Blend back to original color
startBlendAmount = gTasks[taskId].tTargetBlendY;
targetBlendAmount = gTasks[taskId].tInitialBlendY;
}
if (gTasks[taskId].data[2] == 1)
if (gTasks[taskId].tNumBlends == 1)
targetBlendAmount = 0;
sub_80B9DA0(taskId, initialBlendAmount, targetBlendAmount);
BlendColorCycleExclude(taskId, startBlendAmount, targetBlendAmount);
}
else
{
@@ -527,56 +555,59 @@ static void sub_80B9DF0(u8 taskId)
}
}
// See AnimTask_BlendColorCycle. Same, but selects palette by ANIM_TAG_*
void AnimTask_BlendColorCycleByTag(u8 taskId)
{
u8 paletteIndex;
gTasks[taskId].tPalTag = gBattleAnimArgs[0];
gTasks[taskId].tDelay = gBattleAnimArgs[1];
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
gTasks[taskId].tRestoreBlend = FALSE;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
sub_80B9EA8(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9F04;
BlendColorCycleByTag(taskId, 0, gTasks[taskId].tTargetBlendY);
gTasks[taskId].func = AnimTask_BlendColorCycleByTagLoop;
}
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
static void BlendColorCycleByTag(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
{
u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].data[0]);
BeginNormalPaletteFade(1 << (paletteIndex + 16),
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].tPalTag);
BeginNormalPaletteFade(
1 << (paletteIndex + 16),
gTasks[taskId].tDelay,
startBlendAmount,
targetBlendAmount,
gTasks[taskId].tBlendColor);
gTasks[taskId].tNumBlends--;
gTasks[taskId].tRestoreBlend ^= 1;
}
static void sub_80B9F04(u8 taskId)
static void AnimTask_BlendColorCycleByTagLoop(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
u8 startBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
if (gTasks[taskId].tNumBlends > 0)
{
if (gTasks[taskId].data[8] == 0)
if (!gTasks[taskId].tRestoreBlend)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
// Blend to designated color
startBlendAmount = gTasks[taskId].tInitialBlendY;
targetBlendAmount = gTasks[taskId].tTargetBlendY;
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
// Blend back to original color
startBlendAmount = gTasks[taskId].tTargetBlendY;
targetBlendAmount = gTasks[taskId].tInitialBlendY;
}
if (gTasks[taskId].data[2] == 1)
if (gTasks[taskId].tNumBlends == 1)
targetBlendAmount = 0;
sub_80B9EA8(taskId, initialBlendAmount, targetBlendAmount);
BlendColorCycleByTag(taskId, startBlendAmount, targetBlendAmount);
}
else
{
@@ -585,6 +616,18 @@ static void sub_80B9F04(u8 taskId)
}
}
#undef tPalSelector
#undef tPalTag
#undef tDelay
#undef tNumBlends
#undef tInitialBlendY
#undef tTargetBlendY
#undef tBlendColor
#undef tRestoreBlend
#undef tPalSelectorHi
#undef tPalSelectorLo
// Flashes the specified anim tag with given color. Used e.g. to flash the particles red in Hyper Beam
void AnimTask_FlashAnimTagWithColor(u8 taskId)
{
u8 paletteIndex;
@@ -603,10 +646,10 @@ void AnimTask_FlashAnimTagWithColor(u8 taskId)
gBattleAnimArgs[4],
gBattleAnimArgs[4],
gBattleAnimArgs[3]);
gTasks[taskId].func = sub_80B9FD8;
gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step1;
}
static void sub_80B9FD8(u8 taskId)
static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId)
{
u32 selectedPalettes;
@@ -619,7 +662,7 @@ static void sub_80B9FD8(u8 taskId)
return;
if (gTasks[taskId].data[2] == 0)
{
gTasks[taskId].func = sub_80BA090;
gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step2;
return;
}
selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16);
@@ -640,7 +683,7 @@ static void sub_80B9FD8(u8 taskId)
--gTasks[taskId].data[2];
}
static void sub_80BA090(u8 taskId)
static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId)
{
u32 selectedPalettes;
@@ -659,7 +702,7 @@ void AnimTask_InvertScreenColor(u8 taskId)
u8 targetBattler = gBattleAnimTarget;
if (gBattleAnimArgs[0] & 0x100)
selectedPalettes = GetBattlePalettesMask(1, 0, 0, 0, 0, 0, 0);
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
if (gBattleAnimArgs[1] & 0x100)
selectedPalettes |= (0x10000 << attackerBattler);
if (gBattleAnimArgs[2] & 0x100)
@@ -668,8 +711,16 @@ void AnimTask_InvertScreenColor(u8 taskId)
DestroyAnimVisualTask(taskId);
}
// not used
static void sub_80BA16C(u8 taskId)
// Unused
#define tTimer data[0]
#define tLength data[1]
#define tFlagsScenery data[2]
#define tFlagsAttacker data[3]
#define tFlagsTarget data[4]
#define tColorR data[5]
#define tColorG data[6]
#define tColorB data[7]
static void AnimTask_TintPalettes(u8 taskId)
{
u8 attackerBattler;
u8 targetBattler;
@@ -708,6 +759,15 @@ static void sub_80BA16C(u8 taskId)
}
}
#undef tTimer
#undef tLength
#undef tFlagsScenery
#undef tFlagsAttacker
#undef tFlagsTarget
#undef tColorR
#undef tColorG
#undef tColorB
static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
{
u16 var0;
@@ -737,11 +797,11 @@ static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[3];
var0 = sprite->data[5] - 2;
if (var0 < 2)
sub_80BA3CC();
sprite->callback = sub_80BA320;
AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled();
sprite->callback = AnimShakeMonOrBattleTerrain_Step;
}
static void sub_80BA320(struct Sprite *sprite)
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite)
{
u8 i;
u16 var0;
@@ -766,58 +826,70 @@ static void sub_80BA320(struct Sprite *sprite)
var0 = sprite->data[5] - 2;
if (var0 < 2)
for (i = 0; i < gBattlersCount; ++i)
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = FALSE;
DestroyAnimSprite(sprite);
}
}
static void sub_80BA3CC(void)
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = FALSE;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = FALSE;
if (gBattleAnimArgs[4] == 2)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE;
}
else
{
if (gBattleAnimArgs[4] == 0)
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE;
else
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE;
}
}
// Task data for AnimTask_ShakeBattleTerrain
#define tXOffset data[0]
#define tYOffset data[1]
#define tNumShakes data[2]
#define tTimer data[3]
#define tShakeDelay data[8]
// Can shake battle terrain back and forth on the X or down and back to original pos on Y (cant shake up from orig pos)
// arg0: x offset of shake
// arg1: y offset of shake
// arg2: number of shakes
// arg3: time between shakes
void AnimTask_ShakeBattleTerrain(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[8] = gBattleAnimArgs[3];
gTasks[taskId].tXOffset = gBattleAnimArgs[0];
gTasks[taskId].tYOffset = gBattleAnimArgs[1];
gTasks[taskId].tNumShakes = gBattleAnimArgs[2];
gTasks[taskId].tTimer = gBattleAnimArgs[3];
gTasks[taskId].tShakeDelay = gBattleAnimArgs[3];
gBattle_BG3_X = gBattleAnimArgs[0];
gBattle_BG3_Y = gBattleAnimArgs[1];
gTasks[taskId].func = sub_80BA4D0;
gTasks[taskId].func = AnimTask_ShakeBattleTerrain_Step;
gTasks[taskId].func(taskId);
}
static void sub_80BA4D0(u8 taskId)
static void AnimTask_ShakeBattleTerrain_Step(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
if (gTasks[taskId].tTimer == 0)
{
if (gBattle_BG3_X == gTasks[taskId].data[0])
gBattle_BG3_X = -gTasks[taskId].data[0];
if (gBattle_BG3_X == gTasks[taskId].tXOffset)
gBattle_BG3_X = -gTasks[taskId].tXOffset;
else
gBattle_BG3_X = gTasks[taskId].data[0];
gBattle_BG3_X = gTasks[taskId].tXOffset;
if (gBattle_BG3_Y == -gTasks[taskId].data[1])
if (gBattle_BG3_Y == -gTasks[taskId].tYOffset)
gBattle_BG3_Y = 0;
else
gBattle_BG3_Y = -gTasks[taskId].data[1];
gBattle_BG3_Y = -gTasks[taskId].tYOffset;
gTasks[taskId].data[3] = gTasks[taskId].data[8];
if (--gTasks[taskId].data[2] == 0)
gTasks[taskId].tTimer = gTasks[taskId].tShakeDelay;
if (--gTasks[taskId].tNumShakes == 0)
{
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
@@ -826,26 +898,33 @@ static void sub_80BA4D0(u8 taskId)
}
else
{
--gTasks[taskId].data[3];
gTasks[taskId].tTimer--;
}
}
#undef tXOffset
#undef tYOffset
#undef tNumShakes
#undef tTimer
#undef tShakeDelay
static void AnimHitSplatBasic(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// Same as basic hit splat but takes a length of time to persist for (arg4)
static void AnimHitSplatPersistent(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
@@ -853,6 +932,8 @@ static void AnimHitSplatPersistent(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSpriteAfterTimer);
}
// For paired hit splats whose position is inverted when used by the opponent on the player.
// Used by Twineedle and Spike Cannon
static void AnimHitSplatHandleInvert(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER && !IsContest())
@@ -865,8 +946,8 @@ static void AnimHitSplatRandom(struct Sprite *sprite)
if (gBattleAnimArgs[1] == -1)
gBattleAnimArgs[1] = Random() & 3;
StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
if (gBattleAnimArgs[0] == 0)
InitSpritePosToAnimAttacker(sprite, 0);
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->x2 += (Random() % 48) - 24;
@@ -889,8 +970,8 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite)
static void AnimCrossImpact(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
@@ -901,14 +982,14 @@ static void AnimCrossImpact(struct Sprite *sprite)
static void AnimFlashingHitSplat(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_80BA7BC;
sprite->callback = AnimFlashingHitSplat_Step;
}
static void sub_80BA7BC(struct Sprite *sprite)
static void AnimFlashingHitSplat_Step(struct Sprite *sprite)
{
sprite->invisible ^= 1;
if (sprite->data[0]++ > 12)
+3 -3
View File
@@ -52,7 +52,7 @@ const u8 gBattleIntroRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, RE
// 10: Enemy battler right
void AnimTask_BlendSelected(u8 taskId)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
selectedPalettes |= GetBattleMonSpritePalettesMask(
(gBattleAnimArgs[0] >> 7) & 1,
@@ -79,7 +79,7 @@ void AnimTask_BlendExcept(u8 taskId)
u8 animBattlers[2];
animBattlers[1] = 0xFF;
selectedPalettes = UnpackSelectedBattleAnimPalettes(1);
selectedPalettes = UnpackSelectedBattlePalettes(1);
switch (gBattleAnimArgs[0])
{
case 2:
@@ -122,7 +122,7 @@ void AnimTask_BlendExcept(u8 taskId)
void AnimTask_SetCamouflageBlend(u8 taskId)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
switch (gBattleTerrain)
{