summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h15
-rw-r--r--include/battle_anim.h302
-rw-r--r--include/battle_bg.h1
-rw-r--r--include/gba/defines.h10
-rw-r--r--include/graphics.h590
-rw-r--r--include/math_util.h1
-rw-r--r--include/pokeball.h2
7 files changed, 857 insertions, 64 deletions
diff --git a/include/battle.h b/include/battle.h
index 54aef5106..bed12204f 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -520,12 +520,12 @@ enum
struct BattleSpriteInfo
{
- u16 invisible : 1; // 0x1
- u16 lowHpSong : 1; // 0x2
- u16 behindSubstitute : 1; // 0x4
- u16 flag_x8 : 1; // 0x8
- u16 hpNumbersNoBars : 1; // 0x10
- u16 transformSpecies;
+ /*0x0*/ u16 invisible : 1; // 0x1
+ u16 lowHpSong : 1; // 0x2
+ u16 behindSubstitute : 1; // 0x4
+ u16 flag_x8 : 1; // 0x8
+ u16 hpNumbersNoBars : 1; // 0x10
+ /*0x2*/ u16 transformSpecies;
};
struct BattleAnimationInfo
@@ -546,8 +546,7 @@ struct BattleAnimationInfo
u8 field_9_x80 : 1;
u8 field_A;
u8 field_B;
- u8 field_C;
- u8 field_D;
+ s16 field_C;
u8 field_E;
u8 field_F;
};
diff --git a/include/battle_anim.h b/include/battle_anim.h
index ad1a0fed8..f568d0f97 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -36,9 +36,6 @@ struct BattleAnimBackground
#define ANIM_ARGS_COUNT 8
-#define PAN_SIDE_PLAYER -64
-#define PAN_SIDE_OPPONENT 63
-
extern void (*gAnimScriptCallback)(void);
extern bool8 gAnimScriptActive;
extern u8 gAnimVisualTaskCount;
@@ -52,46 +49,85 @@ extern u8 gAnimMoveTurn;
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u16 gAnimMovePower;
extern s32 gAnimMoveDmg;
extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
extern u8 gUnknown_2037F24;
-extern const struct OamData gOamData_83AC9C8;
-extern const struct OamData gOamData_83AC9D0;
-extern const struct OamData gOamData_83AC9D8;
-extern const struct OamData gOamData_83AC9E0;
-extern const struct OamData gOamData_83AC9F8;
-extern const struct OamData gOamData_83ACA00;
-extern const struct OamData gOamData_83ACA18;
-extern const struct OamData gOamData_83ACA20;
-extern const struct OamData gOamData_83ACA30;
-extern const struct OamData gOamData_83ACA38;
-extern const struct OamData gOamData_83ACA40;
-extern const struct OamData gOamData_83ACA80;
-extern const struct OamData gOamData_83ACA90;
-extern const struct OamData gOamData_83ACA98;
-extern const struct OamData gOamData_83ACAA0;
-extern const struct OamData gOamData_83ACAB8;
-extern const struct OamData gOamData_83ACAC8;
-extern const struct OamData gOamData_83ACAE8;
-extern const struct OamData gOamData_83ACAF0;
-extern const struct OamData gOamData_83ACAF8;
-extern const struct OamData gOamData_83ACB00;
-extern const struct OamData gOamData_83ACB10;
-extern const struct OamData gOamData_83ACB18;
-extern const struct OamData gOamData_83ACB20;
-extern const struct OamData gOamData_83ACB28;
-extern const struct OamData gOamData_83ACB38;
-extern const struct OamData gOamData_83ACB48;
-extern const struct OamData gOamData_83ACB50;
-extern const struct OamData gOamData_83ACB58;
-extern const struct OamData gOamData_83ACB60;
-extern const struct OamData gOamData_83ACB88;
-extern const struct OamData gOamData_83ACBC0;
-extern const struct OamData gOamData_83ACBE8;
-
-// battle_anim.s
+// battle_anim.c
+extern const struct OamData gOamData_AffineOff_ObjNormal_8x8;
+extern const struct OamData gOamData_AffineOff_ObjNormal_16x16;
+extern const struct OamData gOamData_AffineOff_ObjNormal_32x32;
+extern const struct OamData gOamData_AffineOff_ObjNormal_64x64;
+extern const struct OamData gOamData_AffineOff_ObjNormal_16x8;
+extern const struct OamData gOamData_AffineOff_ObjNormal_32x8;
+extern const struct OamData gOamData_AffineOff_ObjNormal_32x16;
+extern const struct OamData gOamData_AffineOff_ObjNormal_64x32;
+extern const struct OamData gOamData_AffineOff_ObjNormal_8x16;
+extern const struct OamData gOamData_AffineOff_ObjNormal_8x32;
+extern const struct OamData gOamData_AffineOff_ObjNormal_16x32;
+extern const struct OamData gOamData_AffineOff_ObjNormal_32x64;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_8x8;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_16x16;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_32x32;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_16x8;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_32x8;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_32x16;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_64x32;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_8x16;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_8x32;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_16x32;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_32x64;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_8x8;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_16x16;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_32x32;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_64x64;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_16x8;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_32x8;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_32x16;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_64x32;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_8x16;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_8x32;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_16x32;
+extern const struct OamData gOamData_AffineDouble_ObjNormal_32x64;
+extern const struct OamData gOamData_AffineOff_ObjBlend_8x8;
+extern const struct OamData gOamData_AffineOff_ObjBlend_16x16;
+extern const struct OamData gOamData_AffineOff_ObjBlend_32x32;
+extern const struct OamData gOamData_AffineOff_ObjBlend_64x64;
+extern const struct OamData gOamData_AffineOff_ObjBlend_16x8;
+extern const struct OamData gOamData_AffineOff_ObjBlend_32x8;
+extern const struct OamData gOamData_AffineOff_ObjBlend_32x16;
+extern const struct OamData gOamData_AffineOff_ObjBlend_64x32;
+extern const struct OamData gOamData_AffineOff_ObjBlend_8x16;
+extern const struct OamData gOamData_AffineOff_ObjBlend_8x32;
+extern const struct OamData gOamData_AffineOff_ObjBlend_16x32;
+extern const struct OamData gOamData_AffineOff_ObjBlend_32x64;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_8x8;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_16x16;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_32x32;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_64x64;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_16x8;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_32x8;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_32x16;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_64x32;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_8x16;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_8x32;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_16x32;
+extern const struct OamData gOamData_AffineNormal_ObjBlend_32x64;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_8x8;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_16x16;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_32x32;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_64x64;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_16x8;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_32x8;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_32x16;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_64x32;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_8x16;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_8x32;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_16x32;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_32x64;
+extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
+extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
void MoveBattlerSpriteToBG(u8 battlerId, u8);
void sub_8073128(u8);
void ClearBattleAnimationVars(void);
@@ -100,14 +136,13 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
-bool8 IsAnimBankSpriteVisible(u8 battlerId);
bool8 IsContest(void);
s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
bool8 IsBattlerSpriteVisible(u8 battlerId);
s16 KeepPanInRange(s16 a, s32 oldPan);
-void sub_80730C0(u16, const u16 *, s32, u8);
+void sub_80730C0(u16, u16 *, s32, u8);
// battle_intro.c
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
@@ -116,11 +151,166 @@ void HandleIntroSlide(u8 terrain);
void sub_80BC41C(u8 taskId);
void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset);
-// battle_anim_special.s
+// battle_anim_effects_1.c
+extern const union AnimCmd *const gMusicNotesAnimTable[];
+extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate;
+void AnimMovePowderParticle(struct Sprite *);
+void AnimPowerAbsorptionOrb(struct Sprite *);
+void AnimSolarbeamBigOrb(struct Sprite *);
+void AnimSolarbeamSmallOrb(struct Sprite *);
+void AnimAbsorptionOrb(struct Sprite *);
+void AnimHyperBeamOrb(struct Sprite *);
+void AnimSporeParticle(struct Sprite *);
+void AnimPetalDanceBigFlower(struct Sprite *);
+void AnimPetalDanceSmallFlower(struct Sprite *);
+void AnimRazorLeafParticle(struct Sprite *);
+void AnimLeechSeed(struct Sprite *);
+void AnimTranslateLinearSingleSineWave(struct Sprite *);
+void AnimMoveTwisterParticle(struct Sprite *);
+void AnimConstrictBinding(struct Sprite *);
+void AnimMimicOrb(struct Sprite *);
+void AnimIngrainRoot(struct Sprite *);
+void AnimFrenzyPlantRoot(struct Sprite *);
+void AnimIngrainOrb(struct Sprite *);
+void AnimPresent(struct Sprite *);
+void AnimKnockOffItem(struct Sprite *);
+void AnimPresentHealParticle(struct Sprite *);
+void AnimItemSteal(struct Sprite *);
+void AnimTrickBag(struct Sprite *);
+void AnimFlyingParticle(struct Sprite *);
+void AnimNeedleArmSpike(struct Sprite *);
+void sub_80A43F8(struct Sprite *);
+void AnimWhipHit(struct Sprite *);
+void sub_80A4494(struct Sprite *);
+void AnimCuttingSlice(struct Sprite *);
+void AnimAirCutterSlice(struct Sprite *);
+void sub_80A481C(struct Sprite *);
+void AnimProtect(struct Sprite *);
+void AnimMilkBottle(struct Sprite *);
+void AnimGrantingStars(struct Sprite *);
+void AnimSparkingStars(struct Sprite *);
+void sub_80A4E40(struct Sprite *);
+void AnimSleepLetterZ(struct Sprite *);
+void AnimLockOnTarget(struct Sprite *);
+void AnimLockOnMoveTarget(struct Sprite *);
+void AnimBowMon(struct Sprite *);
+void sub_80A5590(struct Sprite *);
+void AnimSlashSlice(struct Sprite *);
+void AnimFalseSwipeSlice(struct Sprite *);
+void AnimFalseSwipePositionedSlice(struct Sprite *);
+void AnimEndureEnergy(struct Sprite *);
+void AnimSharpenSphere(struct Sprite *);
+void AnimConversion(struct Sprite *);
+void AnimConversion2(struct Sprite *);
+void AnimMoon(struct Sprite *);
+void AnimMoonlightSparkle(struct Sprite *);
+void AnimHornHit(struct Sprite *);
+void AnimSuperFang(struct Sprite *);
+void AnimWavyMusicNotes(struct Sprite *);
+void AnimFlyingMusicNotes(struct Sprite *);
+void AnimBellyDrumHand(struct Sprite *);
+void AnimSlowFlyingMusicNotes(struct Sprite *);
+void AnimThoughtBubble(struct Sprite *);
+void AnimMetronomeFinger(struct Sprite *);
+void AnimFollowMeFinger(struct Sprite *);
+void AnimTauntFinger(struct Sprite *);
+void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite);
+void sub_80A2F0C(u8 taskId);
+
+// battle_anim_effects_2.c
+void sub_80A6E48(struct Sprite *);
+void sub_80A6E98(struct Sprite *);
+void sub_80A6F8C(struct Sprite *);
+void sub_80A7020(struct Sprite *);
+void Anim_KinesisZapEnergy(struct Sprite *);
+void Anim_SwordsDanceBlade(struct Sprite *);
+void AnimSonicBoomProjectile(struct Sprite *);
+void AnimAirWaveProjectile(struct Sprite *);
+void sub_80A79E8(struct Sprite *);
+void AnimCoinThrow(struct Sprite *);
+void AnimFallingCoin(struct Sprite *);
+void AnimBulletSeed(struct Sprite *);
+void AnimRazorWindTornado(struct Sprite *);
+void AnimViceGripPincer(struct Sprite *);
+void AnimGuillotinePincer(struct Sprite *);
+void AnimBreathPuff(struct Sprite *);
+void AnimAngerMark(struct Sprite *);
+void AnimPencil(struct Sprite *);
+void AnimBlendThinRing(struct Sprite *);
+void AnimHyperVoiceRing(struct Sprite *);
+void AnimUproarRing(struct Sprite *);
+void AnimSoftBoiledEgg(struct Sprite *);
+void AnimSpeedDust(struct Sprite *);
+void AnimHealBellMusicNote(struct Sprite *);
+void AnimMagentaHeart(struct Sprite *);
+void AnimRedHeartProjectile(struct Sprite *);
+void AnimParticuleBurst(struct Sprite *);
+void AnimRedHeartRising(struct Sprite *);
+void AnimOrbitFast(struct Sprite *);
+void AnimOrbitScatter(struct Sprite *);
+void AnimSpitUpOrb(struct Sprite *);
+void AnimEyeSparkle(struct Sprite *);
+void AnimAngel(struct Sprite *);
+void AnimPinkHeart(struct Sprite *);
+void AnimDevil(struct Sprite *);
+void AnimFurySwipes(struct Sprite *);
+void AnimMovementWaves(struct Sprite *);
+void AnimJaggedMusicNote(struct Sprite *);
+void AnimPerishSongMusicNote2(struct Sprite *);
+void AnimPerishSongMusicNote(struct Sprite *);
+void AnimGuardRing(struct Sprite *);
+
+// battle_anim_effects_3.c
+extern const struct SpriteTemplate gWishStarSpriteTemplate;
+extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate;
+void AnimBlackSmoke(struct Sprite *);
+void AnimWhiteHalo(struct Sprite *);
+void AnimTealAlert(struct Sprite *);
+void AnimMeanLookEye(struct Sprite *);
+void AnimSpikes(struct Sprite *);
+void AnimLeer(struct Sprite *);
+void AnimLetterZ(struct Sprite *);
+void AnimFang(struct Sprite *);
+void AnimSpotlight(struct Sprite *);
+void AnimClappingHand(struct Sprite *);
+void AnimClappingHand2(struct Sprite *);
+void AnimRapidSpin(struct Sprite *);
+void AnimTriAttackTriangle(struct Sprite *);
+void AnimBatonPassPokeball(struct Sprite *);
+void AnimWishStar(struct Sprite *);
+void AnimMiniTwinklingStar(struct Sprite *);
+void AnimSwallowBlueOrb(struct Sprite *);
+void AnimGreenStar(struct Sprite *);
+void AnimWeakFrustrationAngerMark(struct Sprite *);
+void AnimSweetScentPetal(struct Sprite *);
+void AnimPainSplitProjectile(struct Sprite *);
+void AnimFlatterConfetti(struct Sprite *);
+void AnimFlatterSpotlight(struct Sprite *);
+void AnimReversalOrb(struct Sprite *);
+void AnimYawnCloud(struct Sprite *);
+void AnimSmokeBallEscapeCloud(struct Sprite *);
+void AnimFacadeSweatDrop(struct Sprite *);
+void AnimRoarNoiseLine(struct Sprite *);
+void AnimGlareEyeDot(struct Sprite *);
+void AnimAssistPawprint(struct Sprite *);
+void AnimSmellingSaltsHand(struct Sprite *);
+void AnimSmellingSaltExclamation(struct Sprite *);
+void AnimHelpingHandClap(struct Sprite *);
+void AnimForesightMagnifyingGlass(struct Sprite *);
+void AnimMeteorMashStar(struct Sprite *);
+void AnimBlockX(struct Sprite *);
+void sub_80E3E84(struct Sprite *);
+void AnimParticuleBurst(struct Sprite *);
+void AnimKnockOffStrike(struct Sprite *);
+void AnimRecycle(struct Sprite *);
+
+// battle_anim_special.c
void sub_80F1720(u8 battler, struct Pokemon *mon);
-
-// battle_anim_effects_1.s
-void AnimMoveTwisterParticle(struct Sprite *sprite);
+u8 ItemIdToBallId(u16 itemId);
+u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
+u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
+void sub_80EEFC8(u8 *, u8 *, u8 battlerId);
+void sub_80EF0E0(u8 batterId);
enum
{
@@ -151,14 +341,7 @@ enum
#define STAT_ANIM_MULTIPLE_PLUS2 56
#define STAT_ANIM_MULTIPLE_MINUS1 57
#define STAT_ANIM_MULTIPLE_MINUS2 58
-void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
-
-// battle_anim_special.s
-u8 ItemIdToBallId(u16 itemId);
-u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
-u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
-void sub_80EEFC8(u8 *, u8 *, u8 battlerId);
-void sub_80EF0E0(u8 batterId);
+void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
// battle_anim_mons.c
extern const struct MonCoords gCastformFrontSpriteCoords[];
@@ -206,7 +389,7 @@ void sub_8075358(u32 bgId);
void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset);
void InitAnimBgTilemapBuffer(u32 bgId, const void *src);
void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src);
-u8 sub_8075454(void);
+u8 GetBattleBgPaletteNum(void);
void sub_8075458(bool8 arg0);
void sub_8075490(struct Sprite *sprite);
void InitSpriteDataForLinearTranslation(struct Sprite *sprite);
@@ -284,7 +467,6 @@ void sub_8099BD4(u8 taskId);
// normal.c
extern const struct SpriteTemplate gUnknown_83E7C98;
extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate;
-
u32 UnpackSelectedBattleAnimPalettes(s16 selector);
void sub_80B9BDC(u8 taskId);
void sub_80B9CE4(u8 taskId);
@@ -328,6 +510,7 @@ void sub_80B3A58(u8 taskId);
void sub_80B3C78(u8 taskId);
// dark.c
+extern const union AffineAnimCmd *const gUnknown_83E7910[];
void sub_80B78E0(u8 taskId);
void sub_80B79DC(u8 taskId);
void sub_80B7A80(u8 taskId);
@@ -372,6 +555,10 @@ void sub_80AD800(u8 taskId);
// water.s
extern const union AnimCmd *const gUnknown_83E5958[];
extern const union AnimCmd *const gUnknown_83E5A78[];
+void AnimWaterPulseRing(struct Sprite *sprite);
+
+// smokescreen.s
+u8 SmokescreenImpact(s16 x, s16 y, u8 a3);
// battle_anim_utility_funcs.c
void sub_80BA7F8(u8 taskId);
@@ -403,4 +590,9 @@ void sub_80BC0DC(u8 taskId);
void sub_80BC0FC(u8 taskId);
void sub_80BC12C(u8 taskId);
+// battle_anim_scripts.s
+extern const u8 *const gBattleAnims_StatusConditions[];
+extern const u16 gMovesWithQuietBGM[];
+extern const u8 *const gBattleAnims_Moves[];
+
#endif // GUARD_BATTLE_ANIM_H
diff --git a/include/battle_bg.h b/include/battle_bg.h
index 61c106b64..60a6de8f5 100644
--- a/include/battle_bg.h
+++ b/include/battle_bg.h
@@ -11,5 +11,6 @@ void sub_800F6FC(u8 taskId);
void LoadBattleMenuWindowGfx(void);
void LoadBattleTextboxAndBackground(void);
void sub_800F324(void);
+void DrawMainBattleBackground(void);
#endif // GUARD_BATTLE_BG_H
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 8c92d7b64..9e822358a 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -73,10 +73,18 @@
#define TOTAL_OBJ_TILE_COUNT 1024
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
+#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
+#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
#define RGB_BLACK RGB(0, 0, 0)
#define RGB_WHITE RGB(31, 31, 31)
-#define RGB_WHITEALPHA (0xFFFF)
+#define RGB_RED RGB(31, 0, 0)
+#define RGB_GREEN RGB(0, 31, 0)
+#define RGB_BLUE RGB(0, 0, 31)
+#define RGB_YELLOW RGB(31, 31, 0)
+#define RGB_MAGENTA RGB(31, 0, 31)
+#define RGB_CYAN RGB(0, 31, 31)
+#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
#define NAKED __attribute__((naked))
#define UNUSED __attribute__((unused))
diff --git a/include/graphics.h b/include/graphics.h
index 09b72d37d..bb501ffb0 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3691,6 +3691,596 @@ extern const u32 gBattleStatMask8_Pal[];
extern const u32 gBattleStatMask1_Tilemap[];
extern const u32 gBattleStatMask2_Tilemap[];
+// battle anim particle gfx
+extern const u32 gBattleAnimSpriteGfx_Bone[];
+extern const u32 gBattleAnimSpriteGfx_Spark[];
+extern const u32 gBattleAnimSpriteGfx_Pencil[];
+extern const u32 gBattleAnimSpriteGfx_AirWave[];
+extern const u32 gBattleAnimSpriteGfx_Orb[];
+extern const u32 gBattleAnimSpriteGfx_Sword[];
+extern const u32 gBattleAnimSpriteGfx_Seed[];
+extern const u32 gBattleAnimSpriteGfx_Explosion6[];
+extern const u32 gBattleAnimSpriteGfx_PinkOrb[];
+extern const u32 gBattleAnimSpriteGfx_Gust[];
+extern const u32 gBattleAnimSpriteGfx_IceCube[];
+extern const u32 gBattleAnimSpriteGfx_Spark2[];
+extern const u32 gBattleAnimSpriteGfx_Orange[];
+extern const u32 gBattleAnimSpriteGfx_YellowBall[];
+extern const u32 gBattleAnimSpriteGfx_LockOn[];
+extern const u32 gBattleAnimSpriteGfx_TiedBag[];
+extern const u32 gBattleAnimSpriteGfx_BlackSmoke[];
+extern const u32 gBattleAnimSpriteGfx_BlackBall[];
+extern const u32 gBattleAnimSpriteGfx_Conversion[];
+extern const u32 gBattleAnimSpriteGfx_Glass[];
+extern const u32 gBattleAnimSpriteGfx_HornHit[];
+extern const u32 gBattleAnimSpriteGfx_Hit[];
+extern const u32 gBattleAnimSpriteGfx_BlueShards[];
+extern const u32 gBattleAnimSpriteGfx_ClosingEye[];
+extern const u32 gBattleAnimSpriteGfx_WavingHand[];
+extern const u32 gBattleAnimSpriteGfx_HitDuplicate[];
+extern const u32 gBattleAnimSpriteGfx_Leer[];
+extern const u32 gBattleAnimSpriteGfx_BlueBurst[];
+extern const u32 gBattleAnimSpriteGfx_SmallEmber[];
+extern const u32 gBattleAnimSpriteGfx_GraySmoke[];
+extern const u32 gBattleAnimSpriteGfx_BlueStar[];
+extern const u32 gBattleAnimSpriteGfx_BubbleBurst[];
+extern const u32 gBattleAnimSpriteGfx_Fire[];
+extern const u32 gBattleAnimSpriteGfx_SpinningFire[];
+extern const u32 gBattleAnimSpriteGfx_FirePlume[];
+extern const u32 gBattleAnimSpriteGfx_Lightning2[];
+extern const u32 gBattleAnimSpriteGfx_Lightning[];
+extern const u32 gBattleAnimSpriteGfx_ClawSlash2[];
+extern const u32 gBattleAnimSpriteGfx_ClawSlash[];
+extern const u32 gBattleAnimSpriteGfx_Scratch3[];
+extern const u32 gBattleAnimSpriteGfx_Scratch2[];
+extern const u32 gBattleAnimSpriteGfx_BubbleBurst2[];
+extern const u32 gBattleAnimSpriteGfx_IceChunk[];
+extern const u32 gBattleAnimSpriteGfx_Glass2[];
+extern const u32 gBattleAnimSpriteGfx_PinkHeart2[];
+extern const u32 gBattleAnimSpriteGfx_SapDrip[];
+extern const u32 gBattleAnimSpriteGfx_SapDrip[];
+extern const u32 gBattleAnimSpriteGfx_Sparkle1[];
+extern const u32 gBattleAnimSpriteGfx_Sparkle1[];
+extern const u32 gBattleAnimSpriteGfx_HumanoidFoot[];
+extern const u32 gBattleAnimSpriteGfx_MonsterFoot[];
+extern const u32 gBattleAnimSpriteGfx_HumanoidHand[];
+extern const u32 gBattleAnimSpriteGfx_NoiseLine[];
+extern const u32 gBattleAnimSpriteGfx_YellowUnk[];
+extern const u32 gBattleAnimSpriteGfx_RedFist[];
+extern const u32 gBattleAnimSpriteGfx_SlamHit[];
+extern const u32 gBattleAnimSpriteGfx_Ring[];
+extern const u32 gBattleAnimSpriteGfx_Rocks[];
+extern const u32 gBattleAnimSpriteGfx_Z[];
+extern const u32 gBattleAnimSpriteGfx_YellowUnk2[];
+extern const u32 gBattleAnimSpriteGfx_AirSlash[];
+extern const u32 gBattleAnimSpriteGfx_SpinningGreenOrbs[];
+extern const u32 gBattleAnimSpriteGfx_Leaf[];
+extern const u32 gBattleAnimSpriteGfx_Finger[];
+extern const u32 gBattleAnimSpriteGfx_PoisonPowder[];
+extern const u32 gBattleAnimSpriteGfx_BrownTriangle[];
+extern const u32 gBattleAnimSpriteGfx_Sparkle3[];
+extern const u32 gBattleAnimSpriteGfx_Sparkle4[];
+extern const u32 gBattleAnimSpriteGfx_MusicNotes[];
+extern const u32 gBattleAnimSpriteGfx_Duck[];
+extern const u32 gBattleAnimSpriteGfx_MudSand[];
+extern const u32 gBattleAnimSpriteGfx_Alert[];
+extern const u32 gBattleAnimSpriteGfx_BlueFlames[];
+extern const u32 gBattleAnimSpriteGfx_BlueFlames2[];
+extern const u32 gBattleAnimSpriteGfx_Shock4[];
+extern const u32 gBattleAnimSpriteGfx_Shock[];
+extern const u32 gBattleAnimSpriteGfx_Bell2[];
+extern const u32 gBattleAnimSpriteGfx_PinkGlove[];
+extern const u32 gBattleAnimSpriteGfx_BlueLines[];
+extern const u32 gBattleAnimSpriteGfx_Impact3[];
+extern const u32 gBattleAnimSpriteGfx_Impact2[];
+extern const u32 gBattleAnimSpriteGfx_Reticle[];
+extern const u32 gBattleAnimSpriteGfx_Breath[];
+extern const u32 gBattleAnimSpriteGfx_Anger[];
+extern const u32 gBattleAnimSpriteGfx_Snowball[];
+extern const u32 gBattleAnimSpriteGfx_Vine[];
+extern const u32 gBattleAnimSpriteGfx_Sword2[];
+extern const u32 gBattleAnimSpriteGfx_Clapping[];
+extern const u32 gBattleAnimSpriteGfx_RedTube[];
+extern const u32 gBattleAnimSpriteGfx_Amnesia[];
+extern const u32 gBattleAnimSpriteGfx_String2[];
+extern const u32 gBattleAnimSpriteGfx_Pencil2[];
+extern const u32 gBattleAnimSpriteGfx_Petal[];
+extern const u32 gBattleAnimSpriteGfx_BentSpoon[];
+extern const u32 gBattleAnimSpriteGfx_Web[];
+extern const u32 gBattleAnimSpriteGfx_MilkBottle[];
+extern const u32 gBattleAnimSpriteGfx_Coin[];
+extern const u32 gBattleAnimSpriteGfx_CrackedEgg[];
+extern const u32 gBattleAnimSpriteGfx_HatchedEgg[];
+extern const u32 gBattleAnimSpriteGfx_FreshEgg[];
+extern const u32 gBattleAnimSpriteGfx_Fangs[];
+extern const u32 gBattleAnimSpriteGfx_Explosion2[];
+extern const u32 gBattleAnimSpriteGfx_Explosion3[];
+extern const u32 gBattleAnimSpriteGfx_WaterDroplet[];
+extern const u32 gBattleAnimSpriteGfx_WaterDroplet2[];
+extern const u32 gBattleAnimSpriteGfx_Seed2[];
+extern const u32 gBattleAnimSpriteGfx_Sprout[];
+extern const u32 gBattleAnimSpriteGfx_RedWand[];
+extern const u32 gBattleAnimSpriteGfx_PurpleGreenUnk[];
+extern const u32 gBattleAnimSpriteGfx_WaterColumn[];
+extern const u32 gBattleAnimSpriteGfx_MudUnk[];
+extern const u32 gBattleAnimSpriteGfx_RainDrops[];
+extern const u32 gBattleAnimSpriteGfx_FurySwipes[];
+extern const u32 gBattleAnimSpriteGfx_Vine2[];
+extern const u32 gBattleAnimSpriteGfx_Teeth[];
+extern const u32 gBattleAnimSpriteGfx_Bone2[];
+extern const u32 gBattleAnimSpriteGfx_WhiteBag[];
+extern const u32 gBattleAnimSpriteGfx_Unknown[];
+extern const u32 gBattleAnimSpriteGfx_PurpleCoral[];
+extern const u32 gBattleAnimSpriteGfx_PurpleDroplet[];
+extern const u32 gBattleAnimSpriteGfx_Shock2[];
+extern const u32 gBattleAnimSpriteGfx_ClosingEye2[];
+extern const u32 gBattleAnimSpriteGfx_MetalBall[];
+extern const u32 gBattleAnimSpriteGfx_MonsterDoll[];
+extern const u32 gBattleAnimSpriteGfx_Whirlwind[];
+extern const u32 gBattleAnimSpriteGfx_Whirlwind2[];
+extern const u32 gBattleAnimSpriteGfx_Explosion4[];
+extern const u32 gBattleAnimSpriteGfx_Explosion5[];
+extern const u32 gBattleAnimSpriteGfx_Tongue[];
+extern const u32 gBattleAnimSpriteGfx_Smoke[];
+extern const u32 gBattleAnimSpriteGfx_Smoke2[];
+extern const u32 gBattleAnimSpriteGfx_Impact[];
+extern const u32 gBattleAnimSpriteGfx_Particles[];
+extern const u32 gBattleAnimSpriteGfx_CircleImpact[];
+extern const u32 gBattleAnimSpriteGfx_Scratch[];
+extern const u32 gBattleAnimSpriteGfx_Cut[];
+extern const u32 gBattleAnimSpriteGfx_SharpTeeth[];
+extern const u32 gBattleAnimSpriteGfx_RainbowRings[];
+extern const u32 gBattleAnimSpriteGfx_IceCrystals[];
+extern const u32 gBattleAnimSpriteGfx_IceSpikes[];
+extern const u32 gBattleAnimSpriteGfx_HandsAndFeet[];
+extern const u32 gBattleAnimSpriteGfx_MistCloud[];
+extern const u32 gBattleAnimSpriteGfx_Clamp[];
+extern const u32 gBattleAnimSpriteGfx_Bubble[];
+extern const u32 gBattleAnimSpriteGfx_Orbs[];
+extern const u32 gBattleAnimSpriteGfx_WaterImpact[];
+extern const u32 gBattleAnimSpriteGfx_WaterOrb[];
+extern const u32 gBattleAnimSpriteGfx_PoisonBubble[];
+extern const u32 gBattleAnimSpriteGfx_ToxicBubble[];
+extern const u32 gBattleAnimSpriteGfx_Spikes[];
+extern const u32 gBattleAnimSpriteGfx_HornHit2[];
+extern const u32 gBattleAnimSpriteGfx_AirWave2[];
+extern const u32 gBattleAnimSpriteGfx_SmallBubbles[];
+extern const u32 gBattleAnimSpriteGfx_RoundShadow[];
+extern const u32 gBattleAnimSpriteGfx_Sunlight[];
+extern const u32 gBattleAnimSpriteGfx_Spore[];
+extern const u32 gBattleAnimSpriteGfx_Flower[];
+extern const u32 gBattleAnimSpriteGfx_RazorLeaf[];
+extern const u32 gBattleAnimSpriteGfx_Needle[];
+extern const u32 gBattleAnimSpriteGfx_WhirlwindLines[];
+extern const u32 gBattleAnimSpriteGfx_GoldRing[];
+extern const u32 gBattleAnimSpriteGfx_GreenLightWall[];
+extern const u32 gBattleAnimSpriteGfx_BlackBall2[];
+extern const u32 gBattleAnimSpriteGfx_SparkH[];
+extern const u32 gBattleAnimSpriteGfx_YellowStar[];
+extern const u32 gBattleAnimSpriteGfx_LargeFreshEgg[];
+extern const u32 gBattleAnimSpriteGfx_ShadowBall[];
+extern const u32 gBattleAnimSpriteGfx_Lick[];
+extern const u32 gBattleAnimSpriteGfx_VoidLines[];
+extern const u32 gBattleAnimSpriteGfx_String[];
+extern const u32 gBattleAnimSpriteGfx_WebThread[];
+extern const u32 gBattleAnimSpriteGfx_SpiderWeb[];
+extern const u32 gBattleAnimSpriteGfx_Lightbulb[];
+extern const u32 gBattleAnimSpriteGfx_Slash[];
+extern const u32 gBattleAnimSpriteGfx_FocusEnergy[];
+extern const u32 gBattleAnimSpriteGfx_SphereToCube[];
+extern const u32 gBattleAnimSpriteGfx_Tendrils[];
+extern const u32 gBattleAnimSpriteGfx_Eye[];
+extern const u32 gBattleAnimSpriteGfx_WhiteShadow[];
+extern const u32 gBattleAnimSpriteGfx_TealAlert[];
+extern const u32 gBattleAnimSpriteGfx_OpeningEye[];
+extern const u32 gBattleAnimSpriteGfx_RoundWhiteHalo[];
+extern const u32 gBattleAnimSpriteGfx_FangAttack[];
+extern const u32 gBattleAnimSpriteGfx_PurpleHandOutline[];
+extern const u32 gBattleAnimSpriteGfx_Moon[];
+extern const u32 gBattleAnimSpriteGfx_GreenSparkle[];
+extern const u32 gBattleAnimSpriteGfx_Spiral[];
+extern const u32 gBattleAnimSpriteGfx_SnoreZ[];
+extern const u32 gBattleAnimSpriteGfx_Explosion[];
+extern const u32 gBattleAnimSpriteGfx_Nail[];
+extern const u32 gBattleAnimSpriteGfx_GhostlySpirit[];
+extern const u32 gBattleAnimSpriteGfx_WarmRock[];
+extern const u32 gBattleAnimSpriteGfx_BreakingEgg[];
+extern const u32 gBattleAnimSpriteGfx_ThinRing[];
+extern const u32 gBattleAnimSpriteGfx_PunchImpact[];
+extern const u32 gBattleAnimSpriteGfx_Bell[];
+extern const u32 gBattleAnimSpriteGfx_MusicNotes2[];
+extern const u32 gBattleAnimSpriteGfx_SpeedDust[];
+extern const u32 gBattleAnimSpriteGfx_TornMetal[];
+extern const u32 gBattleAnimSpriteGfx_ThoughtBubble[];
+extern const u32 gBattleAnimSpriteGfx_MagentaHeart[];
+extern const u32 gBattleAnimSpriteGfx_ElectricOrbs[];
+extern const u32 gBattleAnimSpriteGfx_CircleOfLight[];
+extern const u32 gBattleAnimSpriteGfx_Electricity[];
+extern const u32 gBattleAnimSpriteGfx_Finger2[];
+extern const u32 gBattleAnimSpriteGfx_MovementWaves[];
+extern const u32 gBattleAnimSpriteGfx_MagentaHeart[];
+extern const u32 gBattleAnimSpriteGfx_RedOrb[];
+extern const u32 gBattleAnimSpriteGfx_EyeSparkle[];
+extern const u32 gBattleAnimSpriteGfx_MagentaHeart[];
+extern const u32 gBattleAnimSpriteGfx_Angel[];
+extern const u32 gBattleAnimSpriteGfx_Devil[];
+extern const u32 gBattleAnimSpriteGfx_Swipe[];
+extern const u32 gBattleAnimSpriteGfx_Roots[];
+extern const u32 gBattleAnimSpriteGfx_ItemBag[];
+extern const u32 gBattleAnimSpriteGfx_JaggedMusicNote[];
+extern const u32 gBattleAnimSpriteGfx_Pokeball[];
+extern const u32 gBattleAnimSpriteGfx_Spotlight[];
+extern const u32 gBattleAnimSpriteGfx_LetterZ[];
+extern const u32 gBattleAnimSpriteGfx_RapidSpin[];
+extern const u32 gBattleAnimSpriteGfx_TriForceTriangle[];
+extern const u32 gBattleAnimSpriteGfx_WispOrb[];
+extern const u32 gBattleAnimSpriteGfx_WispFire[];
+extern const u32 gBattleAnimSpriteGfx_GoldStars[];
+extern const u32 gBattleAnimSpriteGfx_EclipsingOrb[];
+extern const u32 gBattleAnimSpriteGfx_GrayOrb[];
+extern const u32 gBattleAnimSpriteGfx_GrayOrb[];
+extern const u32 gBattleAnimSpriteGfx_GrayOrb[];
+extern const u32 gBattleAnimSpriteGfx_PinkPetal[];
+extern const u32 gBattleAnimSpriteGfx_PainSplit[];
+extern const u32 gBattleAnimSpriteGfx_Confetti[];
+extern const u32 gBattleAnimSpriteGfx_GreenStar[];
+extern const u32 gBattleAnimSpriteGfx_PinkCloud[];
+extern const u32 gBattleAnimSpriteGfx_SweatDrop[];
+extern const u32 gBattleAnimSpriteGfx_GuardRing[];
+extern const u32 gBattleAnimSpriteGfx_PurpleScratch[];
+extern const u32 gBattleAnimSpriteGfx_PurpleSwipe[];
+extern const u32 gBattleAnimSpriteGfx_TagHand[];
+extern const u32 gBattleAnimSpriteGfx_SmallRedEye[];
+extern const u32 gBattleAnimSpriteGfx_HollowOrb[];
+extern const u32 gBattleAnimSpriteGfx_XSign[];
+extern const u32 gBattleAnimSpriteGfx_BluegreenOrb[];
+extern const u32 gBattleAnimSpriteGfx_PawPrint[];
+extern const u32 gBattleAnimSpriteGfx_PurpleFlame[];
+extern const u32 gBattleAnimSpriteGfx_RedBall[];
+extern const u32 gBattleAnimSpriteGfx_SmellingsaltEffect[];
+extern const u32 gBattleAnimSpriteGfx_Meteor[];
+extern const u32 gBattleAnimSpriteGfx_FlatRock[];
+extern const u32 gBattleAnimSpriteGfx_MagnifyingGlass[];
+extern const u32 gBattleAnimSpriteGfx_MetalSoundWaves[];
+extern const u32 gBattleAnimSpriteGfx_FlyingDirt[];
+extern const u32 gBattleAnimSpriteGfx_IcicleSpear[];
+extern const u32 gBattleAnimSpriteGfx_Hail[];
+extern const u32 gBattleAnimSpriteGfx_GlowyRedOrb[];
+extern const u32 gBattleAnimSpriteGfx_GreenSpike[];
+extern const u32 gBattleAnimSpriteGfx_Pokeblock[];
+extern const u32 gBattleAnimSpriteGfx_WhiteFeather[];
+extern const u32 gBattleAnimSpriteGfx_Sparkle6[];
+extern const u32 gBattleAnimSpriteGfx_Splash[];
+extern const u32 gBattleAnimSpriteGfx_SweatBead[];
+extern const u32 gBattleAnimSpriteGfx_Gem1[];
+extern const u32 gBattleAnimSpriteGfx_Gem2[];
+extern const u32 gBattleAnimSpriteGfx_Gem3[];
+extern const u32 gBattleAnimSpriteGfx_SlamHit2[];
+extern const u32 gBattleAnimSpriteGfx_Recycle[];
+extern const u32 gBattleAnimSpriteGfx_RedParticles[];
+extern const u32 gBattleAnimSpriteGfx_Protect[];
+extern const u32 gBattleAnimSpriteGfx_DirtMound[];
+extern const u32 gBattleAnimSpriteGfx_Shock3[];
+extern const u32 gBattleAnimSpriteGfx_WeatherBall[];
+extern const u32 gBattleAnim_ScaryFaceGfx[];
+extern const u32 gBattleAnim_ScaryFacePal[];
+extern const u32 gBattleAnimBgTilemap_ScaryFacePlayer[];
+extern const u32 gBattleAnimBgTilemap_ScaryFaceOpponent[];
+extern const u32 gBattleAnimBgTilemap_ScaryFaceContest[];
+extern const u32 gBattleAnimSpriteGfx_Bird[];
+extern const u32 gBattleAnimSpriteGfx_CrossImpact[];
+
+// battle anim particle pals
+extern const u32 gBattleAnimSpritePal_Bone[];
+extern const u32 gBattleAnimSpritePal_Spark[];
+extern const u32 gBattleAnimSpritePal_Pencil[];
+extern const u32 gBattleAnimSpritePal_AirWave[];
+extern const u32 gBattleAnimSpritePal_Orb[];
+extern const u32 gBattleAnimSpritePal_Sword[];
+extern const u32 gBattleAnimSpritePal_Seed[];
+extern const u32 gBattleAnimSpritePal_Explosion6[];
+extern const u32 gBattleAnimSpritePal_PinkOrb[];
+extern const u32 gBattleAnimSpritePal_Gust[];
+extern const u32 gBattleAnimSpritePal_IceCube[];
+extern const u32 gBattleAnimSpritePal_Spark2[];
+extern const u32 gBattleAnimSpritePal_Orange[];
+extern const u32 gBattleAnimSpritePal_YellowBall[];
+extern const u32 gBattleAnimSpritePal_LockOn[];
+extern const u32 gBattleAnimSpritePal_TiedBag[];
+extern const u32 gBattleAnimSpritePal_BlackSmoke[];
+extern const u32 gBattleAnimSpritePal_Conversion[];
+extern const u32 gBattleAnimSpritePal_Glass[];
+extern const u32 gBattleAnimSpritePal_HornHit[];
+extern const u32 gBattleAnimSpritePal_Hit[];
+extern const u32 gBattleAnimSpritePal_Hit2[];
+extern const u32 gBattleAnimSpritePal_BlueShards[];
+extern const u32 gBattleAnimSpritePal_ClosingEye[];
+extern const u32 gBattleAnimSpritePal_WavingHand[];
+extern const u32 gBattleAnimSpritePal_HitDuplicate[];
+extern const u32 gBattleAnimSpritePal_Leer[];
+extern const u32 gBattleAnimSpritePal_BlueBurst[];
+extern const u32 gBattleAnimSpritePal_SmallEmber[];
+extern const u32 gBattleAnimSpritePal_GraySmoke[];
+extern const u32 gBattleAnimSpritePal_BlueStar[];
+extern const u32 gBattleAnimSpritePal_BubbleBurst[];
+extern const u32 gBattleAnimSpritePal_Fire[];
+extern const u32 gBattleAnimSpritePal_Lightning2[];
+extern const u32 gBattleAnimSpritePal_ClawSlash2[];
+extern const u32 gBattleAnimSpritePal_ClawSlash[];
+extern const u32 gBattleAnimSpritePal_BubbleBurst2[];
+extern const u32 gBattleAnimSpritePal_IceChunk[];
+extern const u32 gBattleAnimSpritePal_Glass2[];
+extern const u32 gBattleAnimSpritePal_PinkHeart2[];
+extern const u32 gBattleAnimSpritePal_SapDrip[];
+extern const u32 gBattleAnimSpritePal_SapDrip2[];
+extern const u32 gBattleAnimSpritePal_Sparkle1[];
+extern const u32 gBattleAnimSpritePal_Sparkle2[];
+extern const u32 gBattleAnimSpritePal_HumanoidFoot[];
+extern const u32 gBattleAnimSpritePal_HitDuplicate[];
+extern const u32 gBattleAnimSpritePal_YellowUnk[];
+extern const u32 gBattleAnimSpritePal_SlamHit[];
+extern const u32 gBattleAnimSpritePal_Ring[];
+extern const u32 gBattleAnimSpritePal_Rocks[];
+extern const u32 gBattleAnimSpritePal_Z[];
+extern const u32 gBattleAnimSpritePal_YellowUnk2[];
+extern const u32 gBattleAnimSpritePal_AirSlash[];
+extern const u32 gBattleAnimSpritePal_SpinningGreenOrbs[];
+extern const u32 gBattleAnimSpritePal_Leaf[];
+extern const u32 gBattleAnimSpritePal_Finger[];
+extern const u32 gBattleAnimSpritePal_PoisonPowder[];
+extern const u32 gBattleAnimSpritePal_BrownTriangle[];
+extern const u32 gBattleAnimSpritePal_SleepPowder[];
+extern const u32 gBattleAnimSpritePal_StunSpore[];
+extern const u32 gBattleAnimSpritePal_PoisonPowder[];
+extern const u32 gBattleAnimSpritePal_Sparkle3[];
+extern const u32 gBattleAnimSpritePal_MusicNotes[];
+extern const u32 gBattleAnimSpritePal_Duck[];
+extern const u32 gBattleAnimSpritePal_MudSand[];
+extern const u32 gBattleAnimSpritePal_Alert[];
+extern const u32 gBattleAnimSpritePal_BlueFlames[];
+extern const u32 gBattleAnimSpritePal_Shock4[];
+extern const u32 gBattleAnimSpritePal_Bell2[];
+extern const u32 gBattleAnimSpritePal_PinkGlove[];
+extern const u32 gBattleAnimSpritePal_BlueLines[];
+extern const u32 gBattleAnimSpritePal_Impact3[];
+extern const u32 gBattleAnimSpritePal_Impact2[];
+extern const u32 gBattleAnimSpritePal_Reticle[];
+extern const u32 gBattleAnimSpritePal_Breath[];
+extern const u32 gBattleAnimSpritePal_Anger[];
+extern const u32 gBattleAnimSpritePal_Snowball[];
+extern const u32 gBattleAnimSpritePal_Vine[];
+extern const u32 gBattleAnimSpritePal_Sword2[];
+extern const u32 gBattleAnimSpritePal_Clapping[];
+extern const u32 gBattleAnimSpritePal_RedTube[];
+extern const u32 gBattleAnimSpritePal_Amnesia[];
+extern const u32 gBattleAnimSpritePal_String2[];
+extern const u32 gBattleAnimSpritePal_Pencil2[];
+extern const u32 gBattleAnimSpritePal_Petal[];
+extern const u32 gBattleAnimSpritePal_BentSpoon[];
+extern const u32 gBattleAnimSpritePal_MilkBottle[];
+extern const u32 gBattleAnimSpritePal_Coin[];
+extern const u32 gBattleAnimSpritePal_CrackedEgg[];
+extern const u32 gBattleAnimSpritePal_FreshEgg[];
+extern const u32 gBattleAnimSpritePal_Fangs[];
+extern const u32 gBattleAnimSpritePal_Explosion2[];
+extern const u32 gBattleAnimSpritePal_WaterDroplet[];
+extern const u32 gBattleAnimSpritePal_Seed2[];
+extern const u32 gBattleAnimSpritePal_RedWand[];
+extern const u32 gBattleAnimSpritePal_PurpleGreenUnk[];
+extern const u32 gBattleAnimSpritePal_WaterColumn[];
+extern const u32 gBattleAnimSpritePal_MudUnk[];
+extern const u32 gBattleAnimSpritePal_RainDrops[];
+extern const u32 gBattleAnimSpritePal_FurySwipes[];
+extern const u32 gBattleAnimSpritePal_Vine2[];
+extern const u32 gBattleAnimSpritePal_Teeth[];
+extern const u32 gBattleAnimSpritePal_Bone2[];
+extern const u32 gBattleAnimSpritePal_WhiteBag[];
+extern const u32 gBattleAnimSpritePal_Unknown[];
+extern const u32 gBattleAnimSpritePal_PurpleCoral[];
+extern const u32 gBattleAnimSpritePal_Shock2[];
+extern const u32 gBattleAnimSpritePal_ClosingEye2[];
+extern const u32 gBattleAnimSpritePal_MetalBall[];
+extern const u32 gBattleAnimSpritePal_MonsterDoll[];
+extern const u32 gBattleAnimSpritePal_Whirlwind[];
+extern const u32 gBattleAnimSpritePal_Explosion4[];
+extern const u32 gBattleAnimSpritePal_Tongue[];
+extern const u32 gBattleAnimSpritePal_Smoke[];
+extern const u32 gBattleAnimSpritePal_Impact[];
+extern const u32 gBattleAnimSpritePal_CircleImpact[];
+extern const u32 gBattleAnimSpritePal_SharpTeeth[];
+extern const u32 gBattleAnimSpritePal_RainbowRings[];
+extern const u32 gBattleAnimSpritePal_IceCrystals[];
+extern const u32 gBattleAnimSpritePal_HandsAndFeet[];
+extern const u32 gBattleAnimSpritePal_MistCloud[];
+extern const u32 gBattleAnimSpritePal_Orbs[];
+extern const u32 gBattleAnimSpritePal_WaterImpact[];
+extern const u32 gBattleAnimSpritePal_PoisonBubble[];
+extern const u32 gBattleAnimSpritePal_Spikes[];
+extern const u32 gBattleAnimSpritePal_HornHit2[];
+extern const u32 gBattleAnimSpritePal_AirWave2[];
+extern const u32 gBattleAnimSpritePal_SmallBubbles[];
+extern const u32 gBattleAnimSpritePal_RoundShadow[];
+extern const u32 gBattleAnimSpritePal_Sunlight[];
+extern const u32 gBattleAnimSpritePal_Spore[];
+extern const u32 gBattleAnimSpritePal_Flower[];
+extern const u32 gBattleAnimSpritePal_RazorLeaf[];
+extern const u32 gBattleAnimSpritePal_Needle[];
+extern const u32 gBattleAnimSpritePal_WhirlwindLines[];
+extern const u32 gBattleAnimSpritePal_GoldRing[];
+extern const u32 gBattleAnimSpritePal_PurpleRing[];
+extern const u32 gBattleAnimSpritePal_BlueRing[];
+extern const u32 gBattleAnimSpritePal_GreenLightWall[];
+extern const u32 gBattleAnimSpritePal_BlueLightWall[];
+extern const u32 gBattleAnimSpritePal_RedLightWall[];
+extern const u32 gBattleAnimSpritePal_GrayLightWall[];
+extern const u32 gBattleAnimSpritePal_OrangeLightWall[];
+extern const u32 gBattleAnimSpritePal_BlackBall2[];
+extern const u32 gBattleAnimSpritePal_PurpleGasCloud[];
+extern const u32 gBattleAnimSpritePal_YellowStar[];
+extern const u32 gBattleAnimSpritePal_LargeFreshEgg[];
+extern const u32 gBattleAnimSpritePal_ShadowBall[];
+extern const u32 gBattleAnimSpritePal_Lick[];
+extern const u32 gBattleAnimSpritePal_VoidLines[];
+extern const u32 gBattleAnimSpritePal_String[];
+extern const u32 gBattleAnimSpritePal_Lightbulb[];
+extern const u32 gBattleAnimSpritePal_Slash[];
+extern const u32 gBattleAnimSpritePal_FocusEnergy[];
+extern const u32 gBattleAnimSpritePal_SphereToCube[];
+extern const u32 gBattleAnimSpritePal_Tendrils[];
+extern const u32 gBattleAnimSpritePal_Eye[];
+extern const u32 gBattleAnimSpritePal_WhiteShadow[];
+extern const u32 gBattleAnimSpritePal_TealAlert[];
+extern const u32 gBattleAnimSpritePal_OpeningEye[];
+extern const u32 gBattleAnimSpritePal_RoundWhiteHalo[];
+extern const u32 gBattleAnimSpritePal_FangAttack[];
+extern const u32 gBattleAnimSpritePal_PurpleHandOutline[];
+extern const u32 gBattleAnimSpritePal_Moon[];
+extern const u32 gBattleAnimSpritePal_GreenSparkle[];
+extern const u32 gBattleAnimSpritePal_Spiral[];
+extern const u32 gBattleAnimSpritePal_SnoreZ[];
+extern const u32 gBattleAnimSpritePal_Explosion[];
+extern const u32 gBattleAnimSpritePal_Nail[];
+extern const u32 gBattleAnimSpritePal_GhostlySpirit[];
+extern const u32 gBattleAnimSpritePal_WarmRock[];
+extern const u32 gBattleAnimSpritePal_BreakingEgg[];
+extern const u32 gBattleAnimSpritePal_ThinRing[];
+extern const u32 gBattleAnimSpritePal_PunchImpact[];
+extern const u32 gBattleAnimSpritePal_Bell[];
+extern const u32 gBattleAnimSpritePal_MusicNotes2[];
+extern const u32 gBattleAnimSpritePal_SpeedDust[];
+extern const u32 gBattleAnimSpritePal_ThoughtBubble[];
+extern const u32 gBattleAnimSpritePal_MagentaHeart[];
+extern const u32 gBattleAnimSpritePal_ElectricOrbs[];
+extern const u32 gBattleAnimSpritePal_MovementWaves[];
+extern const u32 gBattleAnimSpritePal_RedHeart[];
+extern const u32 gBattleAnimSpritePal_RedOrb[];
+extern const u32 gBattleAnimSpritePal_EyeSparkle[];
+extern const u32 gBattleAnimSpritePal_PinkHeart[];
+extern const u32 gBattleAnimSpritePal_Angel[];
+extern const u32 gBattleAnimSpritePal_Devil[];
+extern const u32 gBattleAnimSpritePal_Swipe[];
+extern const u32 gBattleAnimSpritePal_Roots[];
+extern const u32 gBattleAnimSpritePal_ItemBag[];
+extern const u32 gBattleAnimSpritePal_JaggedMusicNote[];
+extern const u32 gBattleAnimSpritePal_Pokeball[];
+extern const u32 gBattleAnimSpritePal_LetterZ[];
+extern const u32 gBattleAnimSpritePal_RapidSpin[];
+extern const u32 gBattleAnimSpritePal_TriForceTriangle[];
+extern const u32 gBattleAnimSpritePal_WispOrb[];
+extern const u32 gBattleAnimSpritePal_GoldStars[];
+extern const u32 gBattleAnimSpritePal_EclipsingOrb[];
+extern const u32 gBattleAnimSpritePal_GrayOrb[];
+extern const u32 gBattleAnimSpritePal_BlueOrb[];
+extern const u32 gBattleAnimSpritePal_RedOrb2[];
+extern const u32 gBattleAnimSpritePal_PinkPetal[];
+extern const u32 gBattleAnimSpritePal_PainSplit[];
+extern const u32 gBattleAnimSpritePal_Confetti[];
+extern const u32 gBattleAnimSpritePal_GreenStar[];
+extern const u32 gBattleAnimSpritePal_PinkCloud[];
+extern const u32 gBattleAnimSpritePal_SweatDrop[];
+extern const u32 gBattleAnimSpritePal_GuardRing[];
+extern const u32 gBattleAnimSpritePal_PurpleScratch[];
+extern const u32 gBattleAnimSpritePal_SmallRedEye[];
+extern const u32 gBattleAnimSpritePal_HollowOrb[];
+extern const u32 gBattleAnimSpritePal_BluegreenOrb[];
+extern const u32 gBattleAnimSpritePal_PawPrint[];
+extern const u32 gBattleAnimSpritePal_PurpleFlame[];
+extern const u32 gBattleAnimSpritePal_RedBall[];
+extern const u32 gBattleAnimSpritePal_SmellingsaltEffect[];
+extern const u32 gBattleAnimSpritePal_Meteor[];
+extern const u32 gBattleAnimSpritePal_FlatRock[];
+extern const u32 gBattleAnimSpritePal_MagnifyingGlass[];
+extern const u32 gBattleAnimSpritePal_BrownOrb[];
+extern const u32 gBattleAnimSpritePal_MetalSoundWaves[];
+extern const u32 gBattleAnimSpritePal_FlyingDirt[];
+extern const u32 gBattleAnimSpritePal_IcicleSpear[];
+extern const u32 gBattleAnimSpritePal_Hail[];
+extern const u32 gBattleAnimSpritePal_GlowyRedOrb[];
+extern const u32 gBattleAnimSpritePal_GlowyGreenOrb[];
+extern const u32 gBattleAnimSpritePal_GreenSpike[];
+extern const u32 gBattleAnimSpritePal_WhiteCircleOfLight[];
+extern const u32 gBattleAnimSpritePal_GlowyBlueOrb[];
+extern const u32 gBattleAnimSpritePal_Pokeblock[];
+extern const u32 gBattleAnimSpritePal_WhiteFeather[];
+extern const u32 gBattleAnimSpritePal_Sparkle6[];
+extern const u32 gBattleAnimSpritePal_Splash[];
+extern const u32 gBattleAnimSpritePal_Gem1[];
+extern const u32 gBattleAnimSpritePal_SlamHit2[];
+extern const u32 gBattleAnimSpritePal_Recycle[];
+extern const u32 gBattleAnimSpritePal_RedParticles[];
+extern const u32 gBattleAnimSpritePal_Protect[];
+extern const u32 gBattleAnimSpritePal_DirtMound[];
+extern const u32 gBattleAnimSpritePal_Shock3[];
+extern const u32 gBattleAnimSpritePal_WeatherBall[];
+extern const u32 gBattleAnimSpritePal_Bird[];
+extern const u32 gBattleAnimSpritePal_CrossImpact[];
+extern const u32 gBattleAnimSpritePal_Slash2[];
+extern const u32 gBattleAnimSpritePal_WhipHit[];
+extern const u32 gBattleAnimSpritePal_BlueRing2[];
+
+// battle anim task
+extern const u32 gUnknown_D2EC24_Gfx[];
+extern const u32 gUnknown_D2EC24_Tilemap[];
+extern const u32 gCureBubblesGfx[];
+extern const u32 gCureBubblesPal[];
+extern const u32 gCureBubblesTilemap[];
+extern const u32 gBattleAnimBg_AttractGfx[];
+extern const u32 gBattleAnimBg_AttractTilemap[];
+extern const u32 gBattleAnimBg_AttractPal[];
+extern const u32 gBattleAnim_MorningSunGfx[];
+extern const u32 gBattleAnim_MorningSunTilemap[];
+extern const u32 gBattleAnim_MorningSunPal[];
+
+// battle bg
+extern const u32 gBattleAnimBgImage_Dark[];
+extern const u32 gBattleAnimBgImage_Ghost[];
+extern const u32 gBattleAnimBgImage_Psychic[];
+extern const u32 gBattleAnimBgImage_Impact[];
+extern const u32 gBattleAnimBgImage_Drill[];
+extern const u32 gBattleAnimBgImage_Highspeed[];
+extern const u32 gBattleAnimBgImage_Thunder[];
+extern const u32 gBattleAnimBgImage_Guillotine[];
+extern const u32 gBattleAnimBgImage_Ice[];
+extern const u32 gBattleAnimBgImage_Cosmic[];
+extern const u32 gBattleAnimBgImage_InAir[];
+extern const u32 gBattleAnimBgImage_Aurora[];
+extern const u32 gBattleAnimBgImage_Fissure[];
+extern const u32 gBattleAnimBgPalette_Dark[];
+extern const u32 gBattleAnimBgPalette_Ghost[];
+extern const u32 gBattleAnimBgPalette_Psychic[];
+extern const u32 gBattleAnimBgPalette_Impact[];
+extern const u32 gBattleAnimBgPalette_Drill[];
+extern const u32 gBattleAnimBgPalette_Highspeed[];
+extern const u32 gBattleAnimBgPalette_Thunder[];
+extern const u32 gBattleAnimBgPalette_Guillotine[];
+extern const u32 gBattleAnimBgPalette_Ice[];
+extern const u32 gBattleAnimBgPalette_Cosmic[];
+extern const u32 gBattleAnimBgPalette_InAir[];
+extern const u32 gBattleAnimBgPalette_Sky[];
+extern const u32 gBattleAnimBgPalette_Aurora[];
+extern const u32 gBattleAnimBgPalette_Fissure[];
+extern const u32 gBattleAnimBgPalette_Bug[];
+extern const u32 gBattleAnimBgPalette_Solarbeam[];
+extern const u32 gBattleAnimBgTilemap_Dark[];
+extern const u32 gBattleAnimBgTilemap_Ghost[];
+extern const u32 gBattleAnimBgTilemap_Psychic[];
+extern const u32 gBattleAnimBgTilemap_ImpactOpponent[];
+extern const u32 gBattleAnimBgTilemap_ImpactPlayer[];
+extern const u32 gBattleAnimBgTilemap_ImpactContests[];
+extern const u32 gBattleAnimBgTilemap_Drill[];
+extern const u32 gBattleAnimBgTilemap_DrillContests[];
+extern const u32 gBattleAnimBgTilemap_HighspeedOpponent[];
+extern const u32 gBattleAnimBgTilemap_HighspeedPlayer[];
+extern const u32 gBattleAnimBgTilemap_Thunder[];
+extern const u32 gBattleAnimBgTilemap_GuillotineOpponent[];
+extern const u32 gBattleAnimBgTilemap_GuillotinePlayer[];
+extern const u32 gBattleAnimBgTilemap_GuillotineContests[];
+extern const u32 gBattleAnimBgTilemap_Ice[];
+extern const u32 gBattleAnimBgTilemap_Cosmic[];
+extern const u32 gBattleAnimBgTilemap_InAir[];
+extern const u32 gBattleAnimBgTilemap_Aurora[];
+extern const u32 gBattleAnimBgTilemap_Fissure[];
+
// dark
extern const u32 gMetalShineGfx[];
extern const u32 gMetalShinePalette[];
diff --git a/include/math_util.h b/include/math_util.h
index 74dbbe98e..473be5d45 100644
--- a/include/math_util.h
+++ b/include/math_util.h
@@ -2,5 +2,6 @@
#define GUARD_MATH_UTIL_H
s16 sub_80D8B90(s16 y);
+s16 sub_80D8AA0(s16 x, s16 y);
#endif //GUARD_MATH_UTIL_H
diff --git a/include/pokeball.h b/include/pokeball.h
index 0e941f9ed..1c2241246 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -20,6 +20,8 @@ enum
POKEBALL_COUNT
};
+extern const struct SpriteTemplate gBallSpriteTemplates[];
+
#define POKEBALL_PLAYER_SENDOUT 0xFF
#define POKEBALL_OPPONENT_SENDOUT 0xFE