diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 46121757e6..b8fc5b7344 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -200,7 +200,7 @@ gBattleAnimMove_NaturalGift:: createvisualtask AnimTask_DragonDanceWaver, 5 playsewithpan SE_M_TELEPORT, -64 delay 8 - createvisualtask AnimTask_BlendPalInAndOutByTag, 5, 10249, 19456, 14, 0, 3 + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, 19456, 14, 0, 3 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 @@ -824,7 +824,7 @@ gBattleAnimMove_Punishment:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan 155, SOUND_PAN_TARGET - createsprite gPunishmentSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gPunishmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -844,7 +844,7 @@ gBattleAnimMove_Punishment:: gBattleAnimMove_LastResort:: fadetobg BG_COSMIC waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1 + createvisualtask AnimTask_StartSlidingBg, 2, 0, 128, 0, -1 waitbgfadein loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER @@ -855,19 +855,19 @@ gBattleAnimMove_LastResort:: waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, 1, 0, 16, 16, RGB_WHITE - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, 0, 20, 0, 0, 4 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 16, 16, RGB_WHITE + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 132, -10, 0, 1, 0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, 1, -32, 0, 0, 3 waitforvisualfinish - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 - createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, 1, 2, 16, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 @@ -897,9 +897,9 @@ gBattleAnimMove_SuckerPunch:: loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 - createsprite gSuckerPunchSpriteTemplate, ANIM_TARGET, 130, -18, 5, 40, 8, 160, 0 + createsprite gSuckerPunchSpriteTemplate, ANIM_TARGET, 2, -18, 5, 40, 8, 160, 0 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 130, -8, 8, 1, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 2 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 6, 384, ANIM_TARGET, 2 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish @@ -1003,11 +1003,11 @@ gBattleAnimGeneral_AquaRingHeal:: createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 12, 0, 25, 0 setalpha 8, 8 playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER - createsprite gGuardRingSpriteTemplate, 2, 0 + createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 0 delay 4 - createsprite gGuardRingSpriteTemplate, 2, 0 + createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 0 delay 4 - createsprite gGuardRingSpriteTemplate, 2, 0 + createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 0 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 0, 2, 0, 10, RGB_WHITE @@ -1090,33 +1090,33 @@ gBattleAnimMove_FlareBlitz:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0 - createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 129, 0, 10, 192, 176, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, 1, 0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 - createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 129, 0, 10, -192, 240, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, 1, 0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 - createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 129, 0, 10, 192, -160, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, 1, 0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 - createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 129, 0, 10, -192, -112, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, 1, 0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 - createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 129, 0, 10, 160, 48, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, 1, 0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 - createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 129, 0, 10, -224, -32, 40 - createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 129, 0, 10, 112, -128, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 playsewithpan SE_M_COMET_PUNCH, +63 createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_BLACK playsewithpan SE_M_COMET_PUNCH, +63 @@ -1138,10 +1138,10 @@ gBattleAnimMove_ForcePalm:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - createsprite gKarateChopSpriteTemplate, ANIM_TARGET, 2, -16, 0, 0, 0, 10, 1, 3, 0 + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gForcePalmSpriteTemplate, ANIM_TARGET 3, 0, 0, 1, 2 + createsprite gForcePalmSpriteTemplate, ANIM_ATTACKER 3, 0, 0, 1, 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -1379,17 +1379,17 @@ gBattleAnimMove_AquaTail:: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 delay 4 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET - createsprite gAquaTailKnockOffSpriteTemplate, ANIM_ATTACKER, 130, -16, -16 + createsprite gAquaTailKnockOffSpriteTemplate, ANIM_ATTACKER, 2, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_TARGET, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 - createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 131, 0, 0, 1, 2 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 + createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, -12, 10, 0, 3 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 5 delay 3 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 0, 3, 6, 1 delay 5 - createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 6 delay 10 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -1532,7 +1532,7 @@ gBattleAnimMove_DragonPulse:: clearmonbg ANIM_TARGET end DragonPulseParticle: - createsprite gDragonPulseSpriteTemplate, ANIM_ATTACKER, 130, 16, 0, 0, 0, 13, 0 + createsprite gDragonPulseSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 13, 0 delay 4 return @@ -1544,21 +1544,21 @@ gBattleAnimMove_DragonRush:: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 delay 4 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET - createsprite gDragonRushSpriteTemplate, ANIM_ATTACKER, 131, -16, -16 + createsprite gDragonRushSpriteTemplate, ANIM_ATTACKER, 3, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_TARGET, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 1 waitforvisualfinish playsewithpan 131, SOUND_PAN_TARGET - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0, 0, 20, 24, 14, 2 - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 5, 0, -20, 24, 14, 1 - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0, 5, 20, -24, 14, 2 - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, -5, 0, 20, 24, 14, 2 - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0, -5, 30, 18, 8, 2 - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -18, 8, 2 - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0, 0, -30, 18, 8, 2 - createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0, 0, -30, -18, 8, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 24, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 1 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 5, 20, -24, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -5, 0, 20, 24, 14, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, -5, 30, 18, 8, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 30, -18, 8, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -30, 18, 8, 2 + createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -30, -18, 8, 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -1704,29 +1704,28 @@ gBattleAnimMove_BraveBird:: gBattleAnimMove_EarthPower:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME - createvisualtask AnimTask_HorizontalShake, 3, ANIM_DEF_PARTNER, 10, 50 createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 playsewithpan SE_M_EARTHQUAKE, SOUND_PAN_TARGET delay 40 loopsewithpan 145, SOUND_PAN_TARGET 11, 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 194, 1, 5, 0 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 194, 1, -10, -15 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 130, 1, 0, 25 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 194, 1, 15, 5 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 194, 1, -25, 0 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 130, 1, 30, 30 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 130, 1, -27, 25 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 194, 1, 0, 8 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 waitforvisualfinish - createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 194, 0, 0, 4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0, 0, 4 waitforvisualfinish end @@ -1790,7 +1789,7 @@ GigaImpactContinuity: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 1 - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, 1, -16, 0, 0, 4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, 0, 0, 4 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 waitforvisualfinish @@ -1879,17 +1878,17 @@ gBattleAnimMove_Avalanche:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_ICE_CHUNK monbg ANIM_DEF_PARTNER - createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 7, 1, 11, 1 - createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, -5, 1, -5, 1 + createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -5, 1, -5, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 2 - createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 5, 0, 6, 1 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 5, 0, 6, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 2 - createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 19, 1, 10, 1 + createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 19, 1, 10, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 2 - createsprite gAvalancheSpriteTemplate ANIM_TARGET, 130, -17, 2, -20, 1 + createsprite gAvalancheSpriteTemplate ANIM_TARGET, 2, -17, 2, -20, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 50, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 5, 50, 1 @@ -2212,7 +2211,7 @@ gBattleAnimMove_ZenHeadbutt:: setalpha 12, 8 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, 0 waitforvisualfinish - createsprite gZenHeadbuttSpriteTemplate, ANIM_ATTACKER, 66, 0 + createsprite gZenHeadbuttSpriteTemplate, ANIM_ATTACKER, 2, 0 delay 18 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER waitforvisualfinish @@ -2228,7 +2227,7 @@ gBattleAnimMove_ZenHeadbutt:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 1, 2 - createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 131, 0, 0, 1, 1 + createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, 0 @@ -2246,22 +2245,22 @@ gBattleAnimMove_MirrorShot:: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 10, RGB_WHITEALPHA createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(21, 21, 21) waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 10, 0, RGB_WHITEALPHA @@ -2318,27 +2317,27 @@ gBattleAnimMove_RockClimb:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_Rollout, 2, 0 + createvisualtask AnimTask_Rollout, 2, 1 waitforvisualfinish - createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 0, 1, 30, 1, RGB(0, 16, 1) - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, -15, 8, 1, 1 + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 0, 1, 30, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -15, 8, 1, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, -5, -12, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, -12, 1, 1 delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 0, -32, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -32, 1, 1 delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 5, -52, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, -52, 1, 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, 1, -25, 16, 1, 4 delay 4 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 0, 3, 6, 1 delay 30 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 delay 4 - createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, 1, 0, 6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 clearmonbg ANIM_DEF_PARTNER blendoff end @@ -2435,32 +2434,32 @@ gBattleAnimMove_DracoMeteor:: blendoff end DracoMeteor1: - createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 131, -48, -64, 40, 32, 25 + createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 3, -48, -64, 40, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -48, -64, 40, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -48, -64, 40, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -48, -64, 40, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -48, -64, 40, 32, 25 return DracoMeteor2: - createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 131, -112, -64, -8, 32, 25 + createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 3, -112, -64, -8, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -112, -64, -8, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -112, -64, -8, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -112, -64, -8, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -112, -64, -8, 32, 25 return DracoMeteor3: - createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 131, -80, -64, 24, 32, 25 + createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, 24, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -80, -64, 24, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, 24, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -80, -64, 24, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, 24, 32, 25 return DracoMeteor4: - createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 131, -80, -64, -8, 32, 25 + createsprite gDracoMeteorRocksSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, -8, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -80, -64, -8, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, -8, 32, 25 delay 2 - createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 131, -80, -64, -8, 32, 25 + createsprite gDracoMeteorTailSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, -8, 32, 25 return gBattleAnimMove_Discharge:: @@ -2576,14 +2575,14 @@ gBattleAnimMove_LavaPlume:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 32, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 1, 0, 32, 1 waitforvisualfinish - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 0 - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 32 - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 64 - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 96 - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 128 - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 160 - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 192 - createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 130, 224 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 32 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 64 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 96 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 128 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 160 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 192 + createsprite gLavaPlumeSpriteTemplate, ANIM_ATTACKER, 2, 224 playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER waitforvisualfinish end @@ -2729,7 +2728,7 @@ RockWrecker_1: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 delay 3 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - createsprite gRockBlastRockSpriteTemplate, ANIM_ATTACKER, 130, 16, 0, 0, 0, 25, 257 + createsprite gRockBlastRockSpriteTemplate, ANIM_ATTACKER, 130, 16, 0, 0, 0, 25, (1 << 8) | 1 waitforvisualfinish createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 0, 0, 1, 1 playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET @@ -2747,15 +2746,15 @@ RockWrecker_2: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 delay 3 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - createsprite gRockBlastRockSpriteTemplate, ANIM_ATTACKER, 130, 16, 0, 0, 0, 25, 257 + createsprite gRockBlastRockSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, 0, 0, 25, 257 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 0, 0, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET - createsprite gRockFragmentSpriteTemplate ANIM_TARGET, 130, 0, 0, 20, 24, 14, 2 + createsprite gRockFragmentSpriteTemplate ANIM_TARGET, 2, 0, 0, 20, 24, 14, 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 - createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 130, 5, 0, -20, 24, 14, 1 - createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 130, 0, 5, 20, -18, 14, 2 - createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 130, -5, 0, -20, -18, 14, 2 + createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 1 + createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 2, 0, 5, 20, -18, 14, 2 + createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 2, -5, 0, -20, -18, 14, 2 waitforvisualfinish call UnsetPsychicBg end @@ -2788,7 +2787,7 @@ gBattleAnimMove_GunkShot:: createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 delay 6 panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 - createvisualtask AnimTask_StartSinAnimTimer, 5, 1, 100 + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 call GunkShotParticles call GunkShotParticles call GunkShotParticles @@ -2860,7 +2859,7 @@ gBattleAnimMove_MagnetBomb:: loadspritegfx ANIM_TAG_SPARK_2 delay 0 playsewithpan 119, 192 - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0 + 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 @@ -2901,22 +2900,22 @@ gBattleAnimMove_MagnetBomb:: loadspritegfx ANIM_TAG_GRAY_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan 177, 63 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, 8, 8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0 delay 2 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, -8, -8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, -8, 1, 0 delay 2 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, 8, -8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, -8, 1, 0 delay 2 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, -8, 8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0 waitforvisualfinish playsewithpan 177, 63 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, 8, 8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0 delay 2 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, -8, -8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, -8, 1, 0 delay 2 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, 8, -8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, -8, 1, 0 delay 2 - createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 130, -8, 8, 1, 0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0 waitforvisualfinish end @@ -2924,55 +2923,54 @@ gBattleAnimMove_StoneEdge:: loadspritegfx ANIM_TAG_STONE_EDGE loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 28, 528, 30, 13, 50, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 32, 480, 20, 16, -46, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1 delay 2 loopsewithpan 131, SOUND_PAN_TARGET 24, 3 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 33, 576, 20, 8, 42, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 31, 400, 25, 11, -42, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 28, 512, 25, 16, 46, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 33, 464, 30, 15, 49, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, 49, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 28, 528, 30, 13, 50, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 32, 480, 20, 16, -46, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 33, 576, 20, 8, 42, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 31, 400, 25, 11, -42, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 28, 512, 25, 16, 46, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 33, 464, 30, 15, 49, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, 49, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 28, 528, 30, 13, 50, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 32, 480, 20, 16, -46, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 33, 576, 20, 8, 42, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 31, 400, 25, 11, -42, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 28, 512, 25, 16, 46, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1 delay 2 - createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 130, 0, 33, 464, 30, 15, 49, 1 + createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, 49, 1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, -32, -16, 1, 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 32, 20, 1, 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -3016,9 +3014,9 @@ gBattleAnimMove_GrassKnot:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 - createsprite gGrassKnotSpriteTemplate, ANIM_TARGET, 130, -18, 19, 40, 8, 160, 0 + createsprite gGrassKnotSpriteTemplate, ANIM_TARGET, 2, -18, 19, 40, 8, 160, 0 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 130, -8, 8, 1, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 2 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 6, 384, ANIM_TARGET, 2 playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET waitforvisualfinish @@ -3287,6 +3285,7 @@ gBattleAnimMove_AquaJet:: loadspritegfx ANIM_TAG_SPARKLE_6 loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_SPLASH + loadspritegfx ANIM_TAG_SWEAT_BEAD playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER createsprite gDiveBallSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 waitforvisualfinish @@ -3302,7 +3301,7 @@ gBattleAnimMove_AquaJet:: monbg ANIM_DEF_PARTNER setalpha 12, 8 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - createsprite gDiveWaterSplashSpriteTemplate, ANIM_TARGET, 131, 1 + createsprite gDiveWaterSplashSpriteTemplate, ANIM_TARGET, 3, 1 call DiveAttackWaterDroplets call DiveAttackWaterDroplets call DiveAttackWaterDroplets @@ -3323,39 +3322,39 @@ gBattleAnimMove_AttackOrder:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 70, 5, 70, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 55, 6, 60, 25 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 55, 6, 60, 25 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 60, 7, 60, 30 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 55, 10, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 60, 7, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 55, 10, 60, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 100, 50, 4, 50, 26 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 100, 50, 4, 50, 26 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 105, 25, 8, 60, 20 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 105, 25, 8, 60, 20 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 40, 10, 48, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 40, 10, 48, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 30, 6, 45, 25 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 35, 10, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 30, 6, 45, 25 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 35, 10, 60, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 105, 20, 8, 40, 0 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 105, 20, 8, 40, 0 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 20, 255, 15, 32, 0 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 110, 10, 8, 32, 20 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 20, 255, 15, 32, 0 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 110, 10, 8, 32, 20 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, -32, -16, 1, 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 131, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 32, 20, 1, 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, 1, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -3369,30 +3368,30 @@ gBattleAnimMove_DefendOrder:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 120, 70, 5, 70, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 55, 6, 60, 25 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 115, 55, 6, 60, 25 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 60, 7, 60, 30 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 55, 10, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 115, 60, 7, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 115, 55, 10, 60, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 100, 50, 4, 50, 26 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 100, 50, 4, 50, 26 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 105, 25, 8, 60, 20 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 105, 25, 8, 60, 20 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 40, 10, 48, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 115, 40, 10, 48, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 120, 30, 6, 45, 25 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 35, 10, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 120, 30, 6, 45, 25 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 115, 35, 10, 60, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 105, 20, 8, 40, 0 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 105, 20, 8, 40, 0 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 20, 255, 15, 32, 0 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 110, 10, 8, 32, 20 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 20, 255, 15, 32, 0 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 110, 10, 8, 32, 20 waitforvisualfinish loadspritegfx ANIM_TAG_BLUE_STAR waitforvisualfinish - clearmonbg ANIM_ATK_PARTNER + clearmonbg ANIM_DEF_PARTNER blendoff delay 1 call BideSetUp @@ -3406,30 +3405,30 @@ gBattleAnimMove_HealOrder:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 120, 70, 5, 70, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 120, 70, 5, 70, 30 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 55, 6, 60, 25 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 115, 55, 6, 60, 25 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 60, 7, 60, 30 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 55, 10, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 115, 60, 7, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 115, 55, 10, 60, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 100, 50, 4, 50, 26 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 100, 50, 4, 50, 26 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 105, 25, 8, 60, 20 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 105, 25, 8, 60, 20 delay 1 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 40, 10, 48, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 115, 40, 10, 48, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 120, 30, 6, 45, 25 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 115, 35, 10, 60, 30 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 120, 30, 6, 45, 25 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 115, 35, 10, 60, 30 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 105, 20, 8, 40, 0 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 105, 20, 8, 40, 0 delay 3 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 20, 255, 15, 32, 0 - createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 130, 110, 10, 8, 32, 20 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 20, 255, 15, 32, 0 + createsprite gAttackOrderParticleSpriteTemplate, ANIM_ATTACKER, 2, 110, 10, 8, 32, 20 waitforvisualfinish loadspritegfx ANIM_TAG_BLUE_STAR waitforvisualfinish - clearmonbg ANIM_ATK_PARTNER + clearmonbg ANIM_DEF_PARTNER blendoff delay 1 call HealingEffect @@ -3469,6 +3468,10 @@ gBattleAnimMove_DoubleHit:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 8 waitforvisualfinish + @ why does the anim hit twice? + @ that just means the anim plays 4 times + @ which doesn't make sense + @ I don't know, but I'm not gonna argue with it createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 2 @@ -3560,7 +3563,7 @@ gBattleAnimMove_LunarDance:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_HOLLOW_ORB setalpha 0, 16 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, RGB_BLACK waitforvisualfinish createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -3576,8 +3579,8 @@ gBattleAnimMove_LunarDance:: delay 30 createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, 10, 0 delay 20 - createvisualtask AnimTask_MoonlightEndFade, 2, 0 - createvisualtask AnimTask_DragonDanceWaver, 5, 0 + createvisualtask AnimTask_MoonlightEndFade, 2 + createvisualtask AnimTask_DragonDanceWaver, 5 playsewithpan 203, SOUND_PAN_ATTACKER delay 8 createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3 @@ -3592,7 +3595,6 @@ gBattleAnimMove_LunarDance:: delay 30 playsewithpan 203, SOUND_PAN_ATTACKER waitforvisualfinish - clearmonbg ANIM_ATTACKER delay 1 end @@ -3640,7 +3642,7 @@ gBattleAnimMove_MagmaStorm:: call FireSpinEffect restorebg waitbgfadeout - setarg 7, 0xFFF + setarg 7, 0xFFFF waitbgfadein clearmonbg ANIM_DEF_PARTNER blendoff @@ -3769,7 +3771,7 @@ gBattleAnimMove_OminousWind:: delay 0 createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 0, 0, 0 delay 0 - createvisualtask AnimTask_GetAttackerSide, 2, 0 + createvisualtask AnimTask_GetAttackerSide, 2 jumpargeq 7, 1, OminousWindFadeToBg fadetobg BG_GHOST waitbgfadeout @@ -21118,7 +21120,7 @@ gBattleAnimMove_Rollout:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_Rollout, 2 + createvisualtask AnimTask_Rollout, 2, 0 waitforvisualfinish createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 30, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 2 @@ -28311,7 +28313,7 @@ Status_MagmaStorm: call FireSpinEffect restorebg waitbgfadeout - setarg 7, 0xFFF + setarg 7, 0xFFFF waitbgfadein stopsound clearmonbg ANIM_DEF_PARTNER diff --git a/docs/tutorials/how_to_new_pokemon.md b/docs/tutorials/how_to_new_pokemon.md index b8a99520ec..de2d41d57c 100644 --- a/docs/tutorials/how_to_new_pokemon.md +++ b/docs/tutorials/how_to_new_pokemon.md @@ -1278,3 +1278,26 @@ Gen 4-style shadows are defined by the `SHADOW` macro which takes the following - `SHADOW_SIZE_XL_BATTLE_ONLY` To make the Pokémon have no shadow, use the `NO_SHADOW` macro instead of `SHADOW`. + +## 6. Limiting species allowed as followers +You may use the following configs in `include/config/overworld.h` +```c +#define OW_FOLLOWERS_ALLOWED_SPECIES (0) +#define OW_FOLLOWERS_ALLOWED_MET_LVL (0) +#define OW_FOLLOWERS_ALLOWED_MET_LOC (0) +``` +Examples: +```c +// Yellow Pikachu: +#define OW_FOLLOWERS_ALLOWED_SPECIES (SPECIES_PIKACHU) +#define OW_FOLLOWERS_ALLOWED_MET_LVL (0) +#define OW_FOLLOWERS_ALLOWED_MET_LOC (MAPSEC_PALLET_TOWN) +// Hoenn Starter: +#define OW_FOLLOWERS_ALLOWED_SPECIES (0) +#define OW_FOLLOWERS_ALLOWED_MET_LVL (5) +#define OW_FOLLOWERS_ALLOWED_MET_LOC (MAPSEC_ROUTE_101) +// Species set in VAR_XXXX: +#define OW_FOLLOWERS_ALLOWED_SPECIES (VAR_XXXX) +#define OW_FOLLOWERS_ALLOWED_MET_LVL (0) +#define OW_FOLLOWERS_ALLOWED_MET_LOC (0) +``` diff --git a/include/battle_gimmick.h b/include/battle_gimmick.h index de1352a611..d0e975462a 100644 --- a/include/battle_gimmick.h +++ b/include/battle_gimmick.h @@ -17,8 +17,8 @@ struct GimmickInfo const struct SpritePalette *triggerPal; // trigger gfx data const struct SpriteSheet *triggerSheet; const struct SpriteTemplate *triggerTemplate; - const struct SpritePalette *indicatorPal; // indicator gfx data - const struct SpriteSheet *indicatorSheet; + const u32 indicatorPalTag; + const u8 *indicatorData; bool32 (*CanActivate)(u32 battler); void (*ActivateGimmick)(u32 battler); }; diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 8540d7b185..5a4ffca26b 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -209,8 +209,11 @@ struct ObjectEvent /*0x14*/ struct Coords16 previousCoords; /*0x18*/ u16 facingDirection:4; // current direction? u16 movementDirection:4; - u16 rangeX:4; - u16 rangeY:4; + struct __attribute__((packed)) + { + u16 rangeX:4; + u16 rangeY:4; + } range; /*0x1A*/ u8 fieldEffectSpriteId; /*0x1B*/ u8 warpArrowSpriteId; /*0x1C*/ u8 movementActionId; diff --git a/sound/music_player_table.inc b/sound/music_player_table.inc index 5981a4d037..955d4d556f 100644 --- a/sound/music_player_table.inc +++ b/sound/music_player_table.inc @@ -5,6 +5,7 @@ .equiv NUM_TRACKS_SE3, 1 .bss + .align 2 gMPlayTrack_BGM:: .space TRACK_SIZE * NUM_TRACKS_BGM diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c index 55ecd5d0c1..bf5c4d823c 100644 --- a/src/battle_anim_dragon.c +++ b/src/battle_anim_dragon.c @@ -9,6 +9,7 @@ static void AnimDragonDanceOrb_Step(struct Sprite *); static void AnimOverheatFlame_Step(struct Sprite *); static void AnimTask_DragonDanceWaver_Step(u8); static void UpdateDragonDanceScanlineEffect(struct Task *); +static void AnimDragonRush(struct Sprite *sprite); static void AnimDragonRushStep(struct Sprite *sprite); static void AnimSpinningDracoMeteor(struct Sprite *sprite); static void AnimSpinningDracoMeteorFinish(struct Sprite *sprite); @@ -304,7 +305,7 @@ const struct SpriteTemplate gDragonRushSpriteTemplate = .anims = gDragonRushAnimTable, .images = NULL, .affineAnims = gDragonRushAffineAnimTable, - .callback = AnimDragonRushStep, + .callback = AnimDragonRush, }; const struct SpriteTemplate gDracoMetorSpriteTemplate = @@ -329,6 +330,36 @@ const struct SpriteTemplate gDragonPulseSpriteTemplate = .callback = TranslateAnimSpriteToTargetMonLocation, }; +// Animates a strike that swipes downard at the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +static void AnimDragonRush(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + sprite->x -= gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[0] = -11; + sprite->data[1] = 192; + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->data[0] = 11; + sprite->data[1] = 192; + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + } + + sprite->callback = AnimDragonRushStep; +} + +// args[0] - initial x delta +// args[1] - initial y delta +// args[2] - x delta to end x +// args[3] - y delta to end y +// args[4] - num frames +// args[5] - sprite anim number static void AnimDragonRushStep(struct Sprite *sprite) { // These two cases are identical. @@ -422,6 +453,9 @@ static void StartDragonFireTranslation(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } +// args[0] - attacker or target +// args[1] - initial x offset +// args[2] - initial y offset void AnimDragonRageFirePlume(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 4162447094..8e1e39d629 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3116,6 +3116,12 @@ const struct SpriteTemplate gChainBindingSpriteTemplate = }; // functions +// args[0] - initial x offset +// args[1] - initial y offset +// args[2] - some param to linear translation +// args[3] - some param to linear translation +// args[4] - offset that gets added to param for Sin +// args[5] - another param for Sin static void AnimGrassKnot(struct Sprite *sprite) { if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT) @@ -5972,12 +5978,12 @@ static void AnimBowMon_Step1_Callback(struct Sprite *sprite) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); - sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; + sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 768 : -768; sprite->data[5] = 0; } sprite->data[5] += sprite->data[4]; - SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + SetSpriteRotScale(sprite->data[3], 256, 256, sprite->data[5]); SetBattlerSpriteYOffsetFromRotation(sprite->data[3]); if (++sprite->data[0] > 3) { @@ -6463,6 +6469,8 @@ static void UNUSED AnimTask_ShowBattlersHealthbox(u8 taskId) DestroyAnimVisualTask(taskId); } +// args[0] - sprite x +// args[1] - sprite y static void AnimMoon(struct Sprite *sprite) { if (IsContest()) diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index e751a1ca51..c4d0a33fac 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -3133,6 +3133,8 @@ static void AnimHealBellMusicNote(struct Sprite *sprite) SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); } +// args[0] - initial x offset +// args[1] - initial y offset void AnimMagentaHeart(struct Sprite *sprite) { if (++sprite->data[0] == 1) diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index 59cd017b9a..bd010797a1 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -657,13 +657,13 @@ static void AnimUnusedCirclingShock(struct Sprite *sprite) sprite->callback = TranslateSpriteInCircle; } -// arg 0: -// arg 1: -// arg 2: +// arg 0: index to sine table +// arg 1: something multiplied with +// arg 2: index to sine table // arg 3: duration // arg 4: target -// arg 5: -// arg 6: +// arg 5: 0 or non-0 determines which set of battler sprite coords to use +// arg 6: increase battler sprite priority by 1 void AnimSparkElectricity(struct Sprite *sprite) { u8 battler; diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index b67304e05e..7f89fb7d1d 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -572,6 +572,11 @@ static void AnimFireSpiralInward(struct Sprite *sprite) } // For the impact spread of fire sprites for moves like Blaze Kick or Fire Punch +// args[0] - delta to mon x offset +// args[1] - delta to mon y offset +// args[2] - x increment +// args[3] - y increment +// args[4] - duration void AnimFireSpread(struct Sprite *sprite) { SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 8b613ad677..a4b37389ed 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -1027,6 +1027,10 @@ void AnimBounceBallLand(struct Sprite *sprite) } } +// args[0] - initial x offset +// args[1] - initial y offset +// args[2] - initial delay before anim +// args[3] - quadratic delta to sprite y static void AnimDiveBall(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); @@ -1066,6 +1070,7 @@ static void AnimDiveBall_Step2(struct Sprite *sprite) DestroyAnimSprite(sprite); } +// args[0] - attacker or target static void AnimDiveWaterSplash(struct Sprite *sprite) { u32 matrixNum; diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 0bacd96219..e8ce92677c 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -1173,6 +1173,11 @@ void SetupShakeBattlerBasedOnMovePowerOrDmg(u8 taskId, u8 animBattlerId) gTasks[taskId].data[2] = gBattleAnimArgs[2]; } +// args[0] - 0 if scale on move power, 1 if scale on move damage +// args[1] - delay before starting anim +// args[2] - duration of anim (after anim starts from above counter) +// args[3] - 1 if do horizontal shake +// args[4] - 1 if do vertical shake void AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg(u8 taskId) { SetupShakeBattlerBasedOnMovePowerOrDmg(taskId, ANIM_DEF_PARTNER); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 13b1cf834f..af38afc814 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1429,6 +1429,9 @@ static u8 UNUSED GetSpritePalIdxByPosition(u8 position) return GetBattlerAtPosition(position); } +// gBattleAnimArgs 0-3 used +// 0, 1 used for position +// 2, 3 as some control variables void AnimSpriteOnMonPos(struct Sprite *sprite) { bool8 var; @@ -1698,6 +1701,11 @@ static void AnimTask_BlendMonInAndOut_Step(u8 taskId) } // See AnimTask_BlendMonInAndOut. Same, but ANIM_TAG_* instead of mon +// args[0] - tag +// arg 1: blend color +// arg 2: target blend coefficient +// arg 3: initial delay +// arg 4: number of times to blend in and out void AnimTask_BlendPalInAndOutByTag(u8 task) { u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index d9fc8aa412..a8a6417d6e 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -1045,6 +1045,10 @@ static void AnimTask_ShakeBattleTerrain_Step(u8 taskId) #undef tTimer #undef tShakeDelay +// args[0] - initial pos x +// args[1] - initial pos y +// args[2] - which battler +// args[3] - affine anim number void AnimHitSplatBasic(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index 301cdd4643..a75ce87087 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -415,11 +415,15 @@ const struct SpriteTemplate gSyrupBombYellowShellBSpriteTemplate = .callback = AnimAnimSyrupBomb, }; +// args[0] - initial x +// args[1] - initial y +// args[2] - attacker or target +// args[3] - affine anim number static void AnimGunkShotImpact(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); if (gBattleAnimArgs[2] == 0) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); @@ -427,6 +431,10 @@ static void AnimGunkShotImpact(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// args[0] - initial attacker x +// args[1] - initial attacker y +// args[2] - ??? +// args[3] - some param static void AnimGunkShotParticles(struct Sprite *sprite) { u16 retArg; diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 0aaf5f1609..dcdb2a8965 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -476,6 +476,13 @@ void AnimRockFragment(struct Sprite *sprite) } // Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb +// args[0] - initial x offset +// args[1] - initial y offset +// args[2] - y increment +// args[3] - duration +// args[4] - increments some sin parameter +// args[5] - fixed sin parameter +// args[6] - attacker or target void AnimParticleInVortex(struct Sprite *sprite) { if (IsDoubleBattle() diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 47642b9fce..f43f13b748 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -722,6 +722,10 @@ void AnimTask_BlendNonAttackerPalettes(u8 taskId) StartBlendAnimSpriteColor(taskId, selectedPalettes); } +// gBattleAnimArgs[0] - initial x +// gBattleAnimArgs[1] - initial y +// gBattleAnimArgs[2] - negative? +// gBattleAnimArgs[3] - sentinel value to compare to void AnimTask_StartSlidingBg(u8 taskId) { u8 newTaskId; diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 57053ef043..39be71c6b5 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -606,6 +606,10 @@ const struct SpriteTemplate gSparkBeamSpriteTemplate = .callback = AnimToTargetInSinWave, }; +// args[0] - initial sprite x +// args[1] - initial sprite y +// args[2] - attacker or target +// args[3] - affine anim number static void AnimAquaTail(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); @@ -618,6 +622,8 @@ static void AnimAquaTail(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// args[0] - initial x delta +// args[1] - initial y delta static void AnimKnockOffAquaTail(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) @@ -885,6 +891,7 @@ static void AnimToTargetInSinWave_Step(struct Sprite *sprite) } } +// args[0] - duration void AnimTask_StartSinAnimTimer(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[0]; @@ -975,6 +982,10 @@ static void AnimWaterGunDroplet(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// args[0] - initial sprite x +// args[1] - initial sprite y +// args[2] - counter +// args[3] - attacker or target void AnimSmallBubblePair(struct Sprite *sprite) { if (gBattleAnimArgs[3] != ANIM_ATTACKER) diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index 0b725811ee..4cdc754ea4 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -265,20 +265,9 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) void LoadIndicatorSpritesGfx(void) { - u32 gimmick; - for (gimmick = 0; gimmick < GIMMICKS_COUNT; ++gimmick) - { - if (gimmick == GIMMICK_TERA) // special case - LoadSpriteSheets(sTeraIndicatorSpriteSheets); - else if (gGimmicksInfo[gimmick].indicatorSheet != NULL) - LoadSpriteSheet(gGimmicksInfo[gimmick].indicatorSheet); - - if (gGimmicksInfo[gimmick].indicatorPal != NULL) - LoadSpritePalette(gGimmicksInfo[gimmick].indicatorPal); - } - // Primal reversion graphics aren't loaded as part of gimmick data - LoadSpriteSheet(&sSpriteSheet_AlphaIndicator); - LoadSpriteSheet(&sSpriteSheet_OmegaIndicator); + LoadSpritePalette(&sSpritePalette_MiscIndicator); + LoadSpritePalette(&sSpritePalette_MegaIndicator); + LoadSpritePalette(&sSpritePalette_TeraIndicator); } static void SpriteCb_GimmickIndicator(struct Sprite *sprite) @@ -295,28 +284,28 @@ static inline u32 GetIndicatorSpriteId(u32 healthboxId) return gBattleStruct->gimmick.indicatorSpriteId[gSprites[healthboxId].hMain_Battler]; } -u32 GetIndicatorTileTag(u32 battler) +const u32 *GetIndicatorSpriteSrc(u32 battler) { u32 gimmick = GetActiveGimmick(battler); if (IsBattlerPrimalReverted(battler)) { if (gBattleMons[battler].species == SPECIES_GROUDON_PRIMAL) - return TAG_OMEGA_INDICATOR_TILE; + return (u32 *)&sOmegaIndicatorGfx; else - return TAG_ALPHA_INDICATOR_TILE; + return (u32 *)&sAlphaIndicatorGfx; } else if (gimmick == GIMMICK_TERA) // special case { - return sTeraIndicatorSpriteSheets[GetBattlerTeraType(battler)].tag; + return (u32 *)sTeraIndicatorDataPtrs[GetBattlerTeraType(battler)]; } - else if (gGimmicksInfo[gimmick].indicatorSheet != NULL) + else if (gGimmicksInfo[gimmick].indicatorData != NULL) { - return gGimmicksInfo[gimmick].indicatorSheet->tag; + return (u32 *)gGimmicksInfo[gimmick].indicatorData; } else { - return TAG_NONE; + return NULL; } } @@ -325,27 +314,34 @@ u32 GetIndicatorPalTag(u32 battler) u32 gimmick = GetActiveGimmick(battler); if (IsBattlerPrimalReverted(battler)) return TAG_MISC_INDICATOR_PAL; - else if (gGimmicksInfo[gimmick].indicatorPal != NULL) - return gGimmicksInfo[gimmick].indicatorPal->tag; + else if (gGimmicksInfo[gimmick].indicatorPalTag != 0) + return gGimmicksInfo[gimmick].indicatorPalTag; else return TAG_NONE; } +#define INDICATOR_SIZE (8 * 16 / 2) + void UpdateIndicatorVisibilityAndType(u32 healthboxId, bool32 invisible) { u32 battler = gSprites[healthboxId].hMain_Battler; - u32 tileTag = GetIndicatorTileTag(battler); u32 palTag = GetIndicatorPalTag(battler); struct Sprite *sprite = &gSprites[GetIndicatorSpriteId(healthboxId)]; if (GetIndicatorSpriteId(healthboxId) == 0) // safari zone means the player doesn't have an indicator sprite id return; - if (tileTag != TAG_NONE && palTag != TAG_NONE) + if (palTag != TAG_NONE) { - sprite->oam.tileNum = GetSpriteTileStartByTag(tileTag); sprite->oam.paletteNum = IndexOfSpritePaletteTag(palTag); sprite->invisible = invisible; + + u32 *dst = (u32 *)(OBJ_VRAM0 + TILE_SIZE_4BPP * GetSpriteTileStartByTag(BATTLER_INDICATOR_TAG + battler)); + + const u32 *src = GetIndicatorSpriteSrc(battler); + + for (u32 i = 0; i < INDICATOR_SIZE / 4; i++) + dst[i] = src[i]; } else // in case of error { @@ -353,6 +349,8 @@ void UpdateIndicatorVisibilityAndType(u32 healthboxId, bool32 invisible) } } +#undef INDICATOR_SIZE + void UpdateIndicatorOamPriority(u32 healthboxId, u32 oamPriority) { gSprites[GetIndicatorSpriteId(healthboxId)].oam.priority = oamPriority; @@ -389,7 +387,8 @@ void CreateIndicatorSprite(u32 battler) x = sIndicatorPositions[position][0]; y += sIndicatorPositions[position][1]; - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_GimmickIndicator, 0, y, 0); + LoadSpriteSheet(&sBattler_GimmickSpritesheets[battler]); + spriteId = CreateSprite(&(sSpriteTemplate_BattlerIndicators[battler]), 0, y, 0); gBattleStruct->gimmick.indicatorSpriteId[battler] = spriteId; gSprites[spriteId].tBattler = battler; gSprites[spriteId].tPosX = x; diff --git a/src/battle_interface.c b/src/battle_interface.c index d20848f321..1f85e68eea 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -922,7 +922,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) u8 battler = gSprites[healthboxSpriteId].hMain_Battler; // Don't print Lv char if mon has a gimmick with an indicator active. - if (GetIndicatorTileTag(battler) != TAG_NONE) + if (GetIndicatorPalTag(battler) != TAG_NONE) { objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))) - 1; diff --git a/src/battle_util.c b/src/battle_util.c index 8c60271c43..bcb9c9ab98 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4800,16 +4800,21 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_IMPOSTER: - if (IsBattlerAlive(BATTLE_OPPOSITE(battler)) - && !(gBattleMons[BATTLE_OPPOSITE(battler)].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - && !(gBattleStruct->illusion[BATTLE_OPPOSITE(battler)].on) - && !(gStatuses3[BATTLE_OPPOSITE(battler)] & STATUS3_SEMI_INVULNERABLE_NO_COMMANDER)) { - gBattlerAttacker = battler; - gBattlerTarget = BATTLE_OPPOSITE(battler); - BattleScriptPushCursorAndCallback(BattleScript_ImposterActivates); - effect++; + u32 diagonalBattler = BATTLE_OPPOSITE(battler); + if (IsDoubleBattle()) + diagonalBattler = BATTLE_PARTNER(diagonalBattler); + if (IsBattlerAlive(diagonalBattler) + && !(gBattleMons[diagonalBattler].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && !(gBattleStruct->illusion[diagonalBattler].on) + && !(gStatuses3[diagonalBattler] & STATUS3_SEMI_INVULNERABLE_NO_COMMANDER)) + { + gBattlerAttacker = battler; + gBattlerTarget = diagonalBattler; + BattleScriptPushCursorAndCallback(BattleScript_ImposterActivates); + effect++; + } } break; case ABILITY_MOLD_BREAKER: diff --git a/src/data/gimmicks.h b/src/data/gimmicks.h index 5b06feddef..0ea19ea1e4 100644 --- a/src/data/gimmicks.h +++ b/src/data/gimmicks.h @@ -10,8 +10,8 @@ const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = .triggerSheet = &sSpriteSheet_MegaTrigger, .triggerPal = &sSpritePalette_MegaTrigger, .triggerTemplate = &sSpriteTemplate_GimmickTrigger, - .indicatorSheet = &sSpriteSheet_MegaIndicator, - .indicatorPal = &sSpritePalette_MegaIndicator, + .indicatorData = sMegaIndicatorGfx, + .indicatorPalTag = TAG_MEGA_INDICATOR_PAL, .CanActivate = CanMegaEvolve, .ActivateGimmick = ActivateMegaEvolution, }, @@ -36,8 +36,8 @@ const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = .triggerSheet = &sSpriteSheet_DynamaxTrigger, .triggerPal = &sSpritePalette_DynamaxTrigger, .triggerTemplate = &sSpriteTemplate_GimmickTrigger, - .indicatorSheet = &sSpriteSheet_DynamaxIndicator, - .indicatorPal = &sSpritePalette_MiscIndicator, + .indicatorData = sDynamaxIndicatorGfx, + .indicatorPalTag = TAG_MISC_INDICATOR_PAL, .CanActivate = CanDynamax, .ActivateGimmick = ActivateDynamax, }, @@ -46,8 +46,8 @@ const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = .triggerSheet = &sSpriteSheet_TeraTrigger, .triggerPal = &sSpritePalette_TeraTrigger, .triggerTemplate = &sSpriteTemplate_GimmickTrigger, - .indicatorSheet = NULL, // handled separately - .indicatorPal = &sSpritePalette_TeraIndicator, + .indicatorData = NULL, // handled separately + .indicatorPalTag = TAG_TERA_INDICATOR_PAL, .CanActivate = CanTerastallize, .ActivateGimmick = ActivateTera, } diff --git a/src/data/graphics/gimmicks.h b/src/data/graphics/gimmicks.h index f16b2f83c0..483cf2218b 100644 --- a/src/data/graphics/gimmicks.h +++ b/src/data/graphics/gimmicks.h @@ -99,34 +99,29 @@ static const u16 sMiscIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mis static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); static const u16 sTeraIndicatorPal[] = INCBIN_U16("graphics/battle_interface/tera_indicator.gbapal"); -static const struct SpriteSheet sSpriteSheet_MegaIndicator = {sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE}; -static const struct SpriteSheet sSpriteSheet_AlphaIndicator = {sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE}; -static const struct SpriteSheet sSpriteSheet_OmegaIndicator = {sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE}; -static const struct SpriteSheet sSpriteSheet_DynamaxIndicator = {sDynamaxIndicatorGfx, sizeof(sDynamaxIndicatorGfx), TAG_DYNAMAX_INDICATOR_TILE}; -static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + 1] = +static const u8 *sTeraIndicatorDataPtrs[] = { - {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_NONE - {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, - {sFightingIndicatorGfx, sizeof(sFightingIndicatorGfx), TAG_FIGHTING_INDICATOR_TILE}, - {sFlyingIndicatorGfx, sizeof(sFlyingIndicatorGfx), TAG_FLYING_INDICATOR_TILE}, - {sPoisonIndicatorGfx, sizeof(sPoisonIndicatorGfx), TAG_POISON_INDICATOR_TILE}, - {sGroundIndicatorGfx, sizeof(sGroundIndicatorGfx), TAG_GROUND_INDICATOR_TILE}, - {sRockIndicatorGfx, sizeof(sRockIndicatorGfx), TAG_ROCK_INDICATOR_TILE}, - {sBugIndicatorGfx, sizeof(sBugIndicatorGfx), TAG_BUG_INDICATOR_TILE}, - {sGhostIndicatorGfx, sizeof(sGhostIndicatorGfx), TAG_GHOST_INDICATOR_TILE}, - {sSteelIndicatorGfx, sizeof(sSteelIndicatorGfx), TAG_STEEL_INDICATOR_TILE}, - {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_MYSTERY - {sFireIndicatorGfx, sizeof(sFireIndicatorGfx), TAG_FIRE_INDICATOR_TILE}, - {sWaterIndicatorGfx, sizeof(sWaterIndicatorGfx), TAG_WATER_INDICATOR_TILE}, - {sGrassIndicatorGfx, sizeof(sGrassIndicatorGfx), TAG_GRASS_INDICATOR_TILE}, - {sElectricIndicatorGfx, sizeof(sElectricIndicatorGfx), TAG_ELECTRIC_INDICATOR_TILE}, - {sPsychicIndicatorGfx, sizeof(sPsychicIndicatorGfx), TAG_PSYCHIC_INDICATOR_TILE}, - {sIceIndicatorGfx, sizeof(sIceIndicatorGfx), TAG_ICE_INDICATOR_TILE}, - {sDragonIndicatorGfx, sizeof(sDragonIndicatorGfx), TAG_DRAGON_INDICATOR_TILE}, - {sDarkIndicatorGfx, sizeof(sDarkIndicatorGfx), TAG_DARK_INDICATOR_TILE}, - {sFairyIndicatorGfx, sizeof(sFairyIndicatorGfx), TAG_FAIRY_INDICATOR_TILE}, - {sStellarIndicatorGfx, sizeof(sStellarIndicatorGfx), TAG_STELLAR_INDICATOR_TILE}, - {0} + sNormalIndicatorGfx, + sNormalIndicatorGfx, + sFightingIndicatorGfx, + sFlyingIndicatorGfx, + sPoisonIndicatorGfx, + sGroundIndicatorGfx, + sRockIndicatorGfx, + sBugIndicatorGfx, + sGhostIndicatorGfx, + sSteelIndicatorGfx, + sNormalIndicatorGfx, + sFireIndicatorGfx, + sWaterIndicatorGfx, + sGrassIndicatorGfx, + sElectricIndicatorGfx, + sPsychicIndicatorGfx, + sIceIndicatorGfx, + sDragonIndicatorGfx, + sDarkIndicatorGfx, + sFairyIndicatorGfx, + sStellarIndicatorGfx, }; static const struct SpritePalette sSpritePalette_MiscIndicator = {sMiscIndicatorPal, TAG_MISC_INDICATOR_PAL}; @@ -141,13 +136,56 @@ static const struct OamData sOamData_GimmickIndicator = }; static void SpriteCb_GimmickIndicator(struct Sprite *sprite); -static const struct SpriteTemplate sSpriteTemplate_GimmickIndicator = + +#define BATTLER_INDICATOR_TAG 0xDEDE +static const struct SpriteSheet sBattler_GimmickSpritesheets[] = { - .tileTag = TAG_NORMAL_INDICATOR_TILE, // updated dynamically - .paletteTag = TAG_TERA_INDICATOR_PAL, // updated dynamically - .oam = &sOamData_GimmickIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_GimmickIndicator, + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), BATTLER_INDICATOR_TAG}, + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), BATTLER_INDICATOR_TAG+1}, + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), BATTLER_INDICATOR_TAG+2}, + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), BATTLER_INDICATOR_TAG+3}, +}; + +static const struct SpriteTemplate sSpriteTemplate_BattlerIndicators[] = +{ + [0] = + { + .tileTag = BATTLER_INDICATOR_TAG, // updated dynamically + .paletteTag = TAG_TERA_INDICATOR_PAL, // updated dynamically + .oam = &sOamData_GimmickIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_GimmickIndicator, + }, + [1] = + { + .tileTag = BATTLER_INDICATOR_TAG + 1, // updated dynamically + .paletteTag = TAG_TERA_INDICATOR_PAL, // updated dynamically + .oam = &sOamData_GimmickIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_GimmickIndicator, + }, + [2] = + { + .tileTag = BATTLER_INDICATOR_TAG + 2, // updated dynamically + .paletteTag = TAG_TERA_INDICATOR_PAL, // updated dynamically + .oam = &sOamData_GimmickIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_GimmickIndicator, + }, + [3] = + { + .tileTag = BATTLER_INDICATOR_TAG + 3, // updated dynamically + .paletteTag = TAG_TERA_INDICATOR_PAL, // updated dynamically + .oam = &sOamData_GimmickIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_GimmickIndicator, + }, }; diff --git a/src/data/items.h b/src/data/items.h index 9df4265116..93d7dbdb90 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -13509,6 +13509,8 @@ const struct Item gItemsInfo[] = { .name = _("Adamant Crystal"), .price = 0, + .holdEffect = HOLD_EFFECT_ADAMANT_ORB, + .holdEffectParam = 20, .description = COMPOUND_STRING( "A large, glowing gem\n" "that lets Dialga\n" @@ -13525,6 +13527,8 @@ const struct Item gItemsInfo[] = { .name = _("Griseous Core"), .price = 0, + .holdEffect = HOLD_EFFECT_GRISEOUS_ORB, + .holdEffectParam = 20, .description = COMPOUND_STRING( "A large, glowing gem\n" "that lets Giratina\n" @@ -13541,6 +13545,8 @@ const struct Item gItemsInfo[] = { .name = _("Lustrous Globe"), .price = 0, + .holdEffect = HOLD_EFFECT_LUSTROUS_ORB, + .holdEffectParam = 20, .description = COMPOUND_STRING( "A large, glowing gem\n" "that lets Palkia\n" diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 65b25c3faa..a8d1605438 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1435,8 +1435,8 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem objectEvent->previousCoords.y = y; objectEvent->currentElevation = template->elevation; objectEvent->previousElevation = template->elevation; - objectEvent->rangeX = template->movementRangeX; - objectEvent->rangeY = template->movementRangeY; + objectEvent->range.rangeX = template->movementRangeX; + objectEvent->range.rangeY = template->movementRangeY; objectEvent->trainerType = template->trainerType; objectEvent->mapNum = mapNum; objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; @@ -1444,10 +1444,10 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); if (sMovementTypeHasRange[objectEvent->movementType]) { - if (objectEvent->rangeX == 0) - objectEvent->rangeX++; - if (objectEvent->rangeY == 0) - objectEvent->rangeY++; + if (objectEvent->range.rangeX == 0) + objectEvent->range.rangeX++; + if (objectEvent->range.rangeY == 0) + objectEvent->range.rangeY++; } return objectEventId; } @@ -6207,18 +6207,18 @@ static bool8 IsCoordOutsideObjectEventMovementRange(struct ObjectEvent *objectEv s16 top; s16 bottom; - if (objectEvent->rangeX != 0) + if (objectEvent->range.rangeX != 0) { - left = objectEvent->initialCoords.x - objectEvent->rangeX; - right = objectEvent->initialCoords.x + objectEvent->rangeX; + left = objectEvent->initialCoords.x - objectEvent->range.rangeX; + right = objectEvent->initialCoords.x + objectEvent->range.rangeX; if (left > x || right < x) return TRUE; } - if (objectEvent->rangeY != 0) + if (objectEvent->range.rangeY != 0) { - top = objectEvent->initialCoords.y - objectEvent->rangeY; - bottom = objectEvent->initialCoords.y + objectEvent->rangeY; + top = objectEvent->initialCoords.y - objectEvent->range.rangeY; + bottom = objectEvent->initialCoords.y + objectEvent->range.rangeY; if (top > y || bottom < y) return TRUE; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 6452e99a9b..413c4acfc8 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -272,7 +272,7 @@ static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = [DIR_EAST - 1] = MetatileBehavior_IsEastArrowWarp, }; -static const u8 sRivalAvatarGfxIds[][2] = +static const u8 sRivalAvatarGfxIds[][GENDER_COUNT] = { [PLAYER_AVATAR_STATE_NORMAL] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL, OBJ_EVENT_GFX_RIVAL_MAY_NORMAL}, [PLAYER_AVATAR_STATE_MACH_BIKE] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_RIVAL_MAY_MACH_BIKE}, @@ -285,7 +285,7 @@ static const u8 sRivalAvatarGfxIds[][2] = [PLAYER_AVATAR_STATE_VSSEEKER] = {OBJ_EVENT_GFX_RIVAL_BRENDAN_FIELD_MOVE, OBJ_EVENT_GFX_RIVAL_MAY_FIELD_MOVE}, }; -static const u8 sPlayerAvatarGfxIds[][2] = +static const u8 sPlayerAvatarGfxIds[][GENDER_COUNT] = { [PLAYER_AVATAR_STATE_NORMAL] = {OBJ_EVENT_GFX_BRENDAN_NORMAL, OBJ_EVENT_GFX_MAY_NORMAL}, [PLAYER_AVATAR_STATE_MACH_BIKE] = {OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, OBJ_EVENT_GFX_MAY_MACH_BIKE}, diff --git a/src/main.c b/src/main.c index c2758ee227..c27d56bacd 100644 --- a/src/main.c +++ b/src/main.c @@ -124,7 +124,7 @@ void AgbMain() #if (LOG_HANDLER == LOG_HANDLER_MGBA_PRINT) (void) MgbaOpen(); #elif (LOG_HANDLER == LOG_HANDLER_AGB_PRINT) - AGBPrintfInit(); + AGBPrintInit(); #endif #endif gAgbMainLoop_sp = __builtin_frame_address(0); diff --git a/src/overworld.c b/src/overworld.c index 3dcb26de87..7f38405bac 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -3014,7 +3014,7 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent) // conflict with the usual Event Object struct, thus the definitions. #define linkGender(obj) obj->singleMovementActive // not even one can reference *byte* aligned bitfield members... -#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX +#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), range)] // -> rangeX static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender) { @@ -3348,7 +3348,7 @@ static u8 ReformatItemDescription(u16 item, u8 *dest) u8 count = 0; u8 numLines = 1; u8 maxChars = 32; - u8 *desc = (u8 *)gItemsInfo[item].description; + u8 *desc = (u8 *)ItemId_GetDescription(item); while (*desc != EOS) { diff --git a/src/trainer_see.c b/src/trainer_see.c index 07eb46efdd..e8b9c4f5ae 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -590,15 +590,15 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap return 0; } - rangeX = trainerObj->rangeX; - rangeY = trainerObj->rangeY; - trainerObj->rangeX = 0; - trainerObj->rangeY = 0; + rangeX = trainerObj->range.rangeX; + rangeY = trainerObj->range.rangeY; + trainerObj->range.rangeX = 0; + trainerObj->range.rangeY = 0; collision = GetCollisionAtCoords(trainerObj, x, y, direction); - trainerObj->rangeX = rangeX; - trainerObj->rangeY = rangeY; + trainerObj->range.rangeX = rangeX; + trainerObj->range.rangeY = rangeY; if (collision == COLLISION_OBJECT_EVENT) return approachDistance; diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index 2220fb9ec2..d4b31f23b8 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -245,11 +245,11 @@ DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Command OPPONENT(SPECIES_DITTO) { Ability(ABILITY_IMPOSTER); } } WHEN { TURN { } - TURN { SWITCH(opponentRight, 2); } + TURN { SWITCH(opponentLeft, 2); } } SCENE { ABILITY_POPUP(playerRight, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - ABILITY_POPUP(opponentRight, ABILITY_IMPOSTER); + ABILITY_POPUP(opponentLeft, ABILITY_IMPOSTER); MESSAGE("The opposing Ditto transformed into Tatsugiri using Imposter!"); } }