Merge branch 'master' of https://github.com/rh-hideout/pokeemerald-expansion into mastertoupcoming12apr

This commit is contained in:
Bassoonian 2025-04-12 14:59:06 +02:00
commit d86aedfd32
30 changed files with 477 additions and 299 deletions

View File

@ -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

View File

@ -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)
```

View File

@ -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);
};

View File

@ -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;

View File

@ -5,6 +5,7 @@
.equiv NUM_TRACKS_SE3, 1
.bss
.align 2
gMPlayTrack_BGM::
.space TRACK_SIZE * NUM_TRACKS_BGM

View File

@ -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)

View File

@ -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())

View File

@ -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)

View File

@ -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;

View File

@ -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]);

View File

@ -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;

View File

@ -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);

View File

@ -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]);

View File

@ -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]);

View File

@ -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;

View File

@ -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()

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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:

View File

@ -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,
}

View File

@ -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,
},
};

View File

@ -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"

View File

@ -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;

View File

@ -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},

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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!");
}
}